From 9ddc2bd76e97f73e7841a61f0b9016eeb62321a2 Mon Sep 17 00:00:00 2001 From: John Vandenberg Date: Sat, 18 May 2019 12:06:47 +0700 Subject: [PATCH] tox.ini: Create --- .ci/Export-NUnitXml.psm1 | 107 + .ci/Fudge.ps1 | 448 + .ci/FudgeCI.ps1 | 183 + .ci/FudgeGenerateFake.ps1 | 42 + .ci/FudgePostInstall.ps1 | 52 + .ci/Modules/FudgeTools.psm1 | 1888 +++ .ci/PSLint.ps1 | 94 + .ci/PSScriptAnalyzerSettings.psd1 | 120 + .ci/PrepareAVVM.ps1 | 308 + .ci/appveyor.yml | 224 +- .ci/choco.config | 59 + .ci/constants.ps1 | 9 + .ci/deps.ActivePerl-packages.ps1 | 9 + .ci/deps.ActivePerl.ps1 | 11 + .ci/deps.apt-new.sh | 17 + .ci/deps.apt_get.sh | 1 + .ci/deps.bakalint.sh | 11 + .ci/deps.cabal.sh | 2 + .ci/deps.composer-packages.ps1 | 9 + .ci/deps.composer.sh | 2 + .ci/deps.dartsdk.sh | 10 + .ci/deps.elm-platform-packages.ps1 | 11 + .ci/deps.elm.sh | 5 + .ci/deps.flawfinder.sh | 7 + .ci/deps.gem.sh | 3 + .ci/deps.generic.sh | 10 + .ci/deps.ghc-mod.sh | 3 + .ci/deps.ghc-packages.ps1 | 7 + .ci/deps.go.sh | 2 + .ci/deps.golang-packages.ps1 | 10 + .ci/deps.golang.ps1 | 18 + .ci/deps.goreturns.sh | 3 + .ci/deps.haskell.sh | 1 + .ci/deps.infer.sh | 3 + .ci/deps.java.sh | 30 +- .ci/deps.julia.jl | 7 + .ci/deps.julia.sh | 12 + .ci/deps.lua.sh | 1 + .ci/deps.minimal.sh | 1 + .ci/deps.node_js.sh | 23 + .ci/deps.nodejs-packages.ps1 | 33 + .ci/deps.npm.sh | 1 + .ci/deps.objective_c.sh | 1 + .ci/deps.opam.sh | 11 + .ci/deps.pear.sh | 2 + .ci/deps.perl.sh | 1 + .ci/deps.php.ps1 | 123 + .ci/deps.php.sh | 1 + .ci/deps.pmd.sh | 11 + .ci/deps.pyenv.sh | 17 + .ci/deps.python-packages.ps1 | 186 + .ci/deps.python36.sh | 6 + .ci/deps.r | 2 + .ci/deps.r.cmd | 4 + .ci/deps.r.sh | 6 +- .ci/deps.ruby-packages.ps1 | 27 + .ci/deps.ruby.ps1 | 11 + .ci/deps.ruby.sh | 1 + .ci/deps.sh | 70 +- .ci/deps.tailor.sh | 14 + .ci/generate_bear_metadata.py | 515 + .ci/generate_bear_requirements.py | 308 - .ci/generate_coverage_thresholds.py | 30 + .ci/get_bears.py | 55 + .ci/get_codecov_tags.py | 12 + .ci/get_cov_args.py | 20 + .ci/get_tests.py | 142 + .ci/go.GNUMakefile | 1 + .ci/refreshenv.sh | 29 + .ci/run_with_env.cmd | 88 - .ci/store_env_in_registry.py | 85 + .coafile | 4 +- .moban.dt/requirements.txt.jj2 | 2 +- .moban.yaml | 76 +- .travis.yml | 536 +- DESCRIPTION | 3 + Fudgefile | 111 + JuliaProject.toml | 5 + Makefile.PL | 6 + Project.toml | 1 + REQUIRE | 2 + bear-languages.yaml | 2 + bear-metadata.yaml | 2590 ++++ bear-requirements.txt | 2 +- bear-requirements.yaml | 405 +- bears/apertium/ApertiumLintBear.py | 2 +- bears/c_languages/CSharpLintBear.py | 2 +- bears/general/TextLintBear.py | 2 +- bears/natural_language/AlexBear.py | 6 +- bears/r/FormatRBear.py | 6 +- bears/r/RLintBear.py | 5 +- composer.json | 6 + package-lock.json | 10381 ----------------- package.json | 2 +- requirements.txt | 2 +- setup.cfg | 12 +- test-requirements.txt | 6 +- tests/natural_language/SpellCheckBearTest.py | 12 +- tests/vcs/git/GitCommitBearTest.py | 12 + tox.ini | 141 + 100 files changed, 8749 insertions(+), 11169 deletions(-) create mode 100644 .ci/Export-NUnitXml.psm1 create mode 100644 .ci/Fudge.ps1 create mode 100644 .ci/FudgeCI.ps1 create mode 100644 .ci/FudgeGenerateFake.ps1 create mode 100644 .ci/FudgePostInstall.ps1 create mode 100644 .ci/Modules/FudgeTools.psm1 create mode 100644 .ci/PSLint.ps1 create mode 100644 .ci/PSScriptAnalyzerSettings.psd1 create mode 100644 .ci/PrepareAVVM.ps1 create mode 100644 .ci/choco.config create mode 100644 .ci/constants.ps1 create mode 100644 .ci/deps.ActivePerl-packages.ps1 create mode 100644 .ci/deps.ActivePerl.ps1 create mode 100755 .ci/deps.apt-new.sh create mode 100755 .ci/deps.apt_get.sh create mode 100755 .ci/deps.bakalint.sh create mode 100644 .ci/deps.composer-packages.ps1 create mode 100755 .ci/deps.composer.sh create mode 100755 .ci/deps.dartsdk.sh create mode 100644 .ci/deps.elm-platform-packages.ps1 create mode 100755 .ci/deps.elm.sh create mode 100755 .ci/deps.flawfinder.sh create mode 100755 .ci/deps.gem.sh create mode 100755 .ci/deps.generic.sh create mode 100755 .ci/deps.ghc-mod.sh create mode 100644 .ci/deps.ghc-packages.ps1 create mode 100644 .ci/deps.golang-packages.ps1 create mode 100644 .ci/deps.golang.ps1 create mode 100755 .ci/deps.goreturns.sh create mode 120000 .ci/deps.haskell.sh create mode 100755 .ci/deps.infer.sh create mode 100644 .ci/deps.julia.jl create mode 100755 .ci/deps.julia.sh create mode 100755 .ci/deps.lua.sh create mode 120000 .ci/deps.minimal.sh create mode 100755 .ci/deps.node_js.sh create mode 100644 .ci/deps.nodejs-packages.ps1 create mode 100755 .ci/deps.npm.sh create mode 120000 .ci/deps.objective_c.sh create mode 100755 .ci/deps.pear.sh create mode 120000 .ci/deps.perl.sh create mode 100644 .ci/deps.php.ps1 create mode 120000 .ci/deps.php.sh create mode 100755 .ci/deps.pmd.sh create mode 100755 .ci/deps.pyenv.sh create mode 100644 .ci/deps.python-packages.ps1 create mode 100755 .ci/deps.python36.sh create mode 100644 .ci/deps.r create mode 100644 .ci/deps.r.cmd create mode 100644 .ci/deps.ruby-packages.ps1 create mode 100644 .ci/deps.ruby.ps1 create mode 100755 .ci/deps.ruby.sh create mode 100755 .ci/deps.tailor.sh create mode 100755 .ci/generate_bear_metadata.py delete mode 100755 .ci/generate_bear_requirements.py create mode 100755 .ci/generate_coverage_thresholds.py create mode 100755 .ci/get_bears.py create mode 100755 .ci/get_codecov_tags.py create mode 100755 .ci/get_cov_args.py create mode 100755 .ci/get_tests.py create mode 100644 .ci/go.GNUMakefile create mode 100644 .ci/refreshenv.sh delete mode 100644 .ci/run_with_env.cmd create mode 100755 .ci/store_env_in_registry.py create mode 100644 Fudgefile create mode 100644 JuliaProject.toml create mode 100644 Makefile.PL create mode 120000 Project.toml create mode 100644 REQUIRE create mode 100644 bear-metadata.yaml create mode 100644 composer.json delete mode 100644 package-lock.json create mode 100644 tox.ini diff --git a/.ci/Export-NUnitXml.psm1 b/.ci/Export-NUnitXml.psm1 new file mode 100644 index 0000000000..dc73bdfdd9 --- /dev/null +++ b/.ci/Export-NUnitXml.psm1 @@ -0,0 +1,107 @@ +Function Export-NUnitXml { +<# +.SYNOPSIS + Takes results from PSScriptAnalyzer and exports them as a Pester test results file (NUnitXml format). + +.DESCRIPTION + Takes results from PSScriptAnalyzer and exports them as a Pester test results file (NUnit XML schema). + Because the generated file in NUnit-compatible, it can be consumed and published by most continuous integration tools. +#> + [CmdletBinding()] + Param ( + [Parameter(Mandatory, Position=0)] + [AllowNull()] + [Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord[]]$ScriptAnalyzerResult, + + [Parameter(Mandatory, Position=1)] + [string]$Path + ) + + $TotalNumber = If ($ScriptAnalyzerResult) { $ScriptAnalyzerResult.Count -as [string] } Else { '1' } + $FailedNumber = If ($ScriptAnalyzerResult) { $ScriptAnalyzerResult.Count -as [string] } Else { '0' } + $Now = Get-Date + $FormattedDate = Get-Date $Now -Format 'yyyy-MM-dd' + $FormattedTime = Get-Date $Now -Format 'T' + $User = $env:USERNAME + $MachineName = $env:COMPUTERNAME + $Cwd = $pwd.Path + $UserDomain = $env:USERDOMAIN + $OS = Get-CimInstance -ClassName Win32_OperatingSystem + $Platform = $OS.Caption + $OSVersion = $OS.Version + $ClrVersion = $PSVersionTable.CLRVersion.ToString() + $CurrentCulture = (Get-Culture).Name + $UICulture = (Get-UICulture).Name + + Switch ($ScriptAnalyzerResult) { + $Null { $TestResult = 'Success'; $TestSuccess = 'True'; Break} + Default { $TestResult = 'Failure'; $TestSuccess = 'False'} + } + + $Header = @" + + + + + + + + `n +"@ + + $Footer = @" + + + + + +"@ + + If ( -not($ScriptAnalyzerResult) ) { + + $TestDescription = 'All PowerShell files pass the specified PSScriptAnalyzer rules' + $TestName = "PSScriptAnalyzer.{0}" -f $TestDescription + + $Body = @" + `n +"@ + } + Else { # $ScriptAnalyzerResult is not null + $Body = [string]::Empty + Foreach ( $Result in $ScriptAnalyzerResult ) { + + $TestDescription = "Rule name : $($Result.RuleName)" + $TestName = "PSScriptAnalyzer.{0} - {1} - Line {2}" -f $TestDescription, $($Result.ScriptName), $($Result.Line.ToString()) + + # Need to Escape these otherwise we can end up with an invalid XML if the Stacktrace has non XML friendly chars like &, etc + $Line = [System.Security.SecurityElement]::Escape($Result.Line) + $ScriptPath = [System.Security.SecurityElement]::Escape($Result.ScriptPath) + $Text = [System.Security.SecurityElement]::Escape($Result.Extent.Text) + $Severity = [System.Security.SecurityElement]::Escape($Result.Severity) + + $TestCase = @" + + + $($Result.Message) + at line: $($Line) in $($ScriptPath) + $($Line): $($Text) + Rule severity : $($Severity) + + + `n +"@ + + $Body += $TestCase + } + } + $OutputXml = $Header + $Body + $Footer + + # Checking our output is a well formed XML document + Try { + $XmlCheck = [xml]$OutputXml + } + Catch { + Throw "There was an problem when attempting to cast the output to XML : $($_.Exception.Message)" + } + $OutputXml | Out-File -FilePath $Path -Encoding utf8 -Force +} diff --git a/.ci/Fudge.ps1 b/.ci/Fudge.ps1 new file mode 100644 index 0000000000..3efcdf6ad3 --- /dev/null +++ b/.ci/Fudge.ps1 @@ -0,0 +1,448 @@ +<# + .SYNOPSIS + Fudge is a tool to help you manage and version control Chocolatey packages required for environments to function + + .DESCRIPTION + Fudge is a tool to help you manage and version control Chocolatey packages required for environments to function. + This is done via a Fudgefile which allows you to specify packages (and their versions) to install. You can also + specify dev-specific packages (like git, or fiddler) + + You are also able to define pre/post install/upgrade/downgrade/uninstall scripts for additional required functionality + + Furthermore, Fudge has a section to allow you to specify multiple nuspec files and pack the one you need + + .PARAMETER Action + The action that Fudge should undertake + Actions: install, upgrade, downgrade, uninstall, reinstall, pack, list, search, new, delete, prune, clean, rebuild, + which, help, renew, add, remove + [Alias: -a] + + .PARAMETER Key + The key represents a package/nuspec name in the Fudgefile + [Actions: install, upgrade, downgrade, uninstall, reinstall, pack, new, which, renew, add, remove] + [Alias: -k] + + .PARAMETER FudgefilePath + This will override looking for a default 'Fudgefile' at the root of the current path, and allow you to specify + other files instead. This allows you to have multiple Fudgefiles + [Actions: install, upgrade, downgrade, uninstall, reinstall, pack, list, new, delete, prune, rebuild, renew, add, remove] + [Default: ./Fudgefile] + [Alias: -fp] + + .PARAMETER Limit + This argument only applies for the 'search' action. It will limit the amount of packages returned when searching + If 0 is supplied, the full list is returned + [Actions: search] + [Default: 10] + [Alias: -l] + + .PARAMETER Source + Passing this argument will allow you to specify custom source locations to get/download packages for Chocolatey. + This allows you to install packages from local directories, or from custom Chocolatey servers. Passing this will + also override the source specified in any Fudgefiles + [Default: Chocolatey's server] + [Actions: install, upgrade, downgrade, reinstall, search, rebuild, add] + [Alias: -s] + + .PARAMETER Parameters + This argument allows you to pass parameters to a chocolatey package, as if you were using "--params" on choco. + For install/upgrade/downgrade/uninstall/reinstall, this argument only works when "-Adhoc" is also supplied + [Default: Empty] + [Actions: install, upgrade, downgrade, uninstall, reinstall, add] + [Alias: -p] + + .PARAMETER Arguments + This argument allows you to pass extra arguments to a chocolatey, such as "--x86" or "--ignore-checksum" + For install/upgrade/downgrade/uninstall/reinstall, this argument only works when "-Adhoc" is also supplied + [Default: Empty] + [Actions: install, upgrade, downgrade, uninstall, reinstall, add] + [Alias: -args] + + .PARAMETER Dev + Switch parameter, if supplied will also action upon the devPackages in the Fudgefile + [Actions: install, upgrade, downgrade, uninstall, reinstall, list, delete, prune, rebuild, add, remove] + [Alias: -d] + + .PARAMETER DevOnly + Switch parameter, if supplied will only action upon the devPackages in the Fudgefile + [Actions: install, upgrade, downgrade, uninstall, reinstall, list, delete, prune, rebuild] + [Alias: -do] + + .PARAMETER Install + Switch parameter, if supplied will install packages after creating a new Fudgefile + [Actions: new, renew, add] + [Alias: -i] + + .PARAMETER Uninstall + Switch parameter, if supplied will uninstall packages before deleting a Fudgefile + [Actions: delete, renew, remove] + [Alias: -u] + + .PARAMETER Adhoc + Switch parameter, if supplied will install software from Chocolatey whether or not + the package is in the Fudgefile + [Actions: install, upgrade, downgrade, uninstall, reinstall] + [Alias: -ad] + + .PARAMETER Version + Switch parameter, if supplied will just display the current version of Fudge installed + [Alias: -v] + + .PARAMETER Help + Switch parameter, if supplied will just display help output + [Alias: -h] + + .EXAMPLE + fudge install + + .EXAMPLE + fudge install -d # to also install devPackages (-do will only install devPackages) + + .EXAMPLE + fudge install git -ad # installs git dispite not being in the Fudgefile + + .EXAMPLE + fudge pack website + + .EXAMPLE + fudge list + + .EXAMPLE + fudge search checksum +#> +param ( + [Alias('a')] + [string] + $Action, + + [Alias('k')] + [string] + $Key, + + [Alias('fp')] + [string] + $FudgefilePath, + + [Alias('l')] + [int] + $Limit = 10, + + [Alias('s')] + [string] + $Source, + + [Alias('p')] + [string] + $Parameters, + + [Alias('args')] + [string] + $Arguments, + + [Alias('d')] + [switch] + $Dev, + + [Alias('do')] + [switch] + $DevOnly, + + [Alias('i')] + [switch] + $Install, + + [Alias('u')] + [switch] + $Uninstall, + + [Alias('v')] + [switch] + $Version, + + [Alias('h')] + [switch] + $Help, + + [Alias('ad')] + [switch] + $Adhoc +) + +# ensure if there's an error, we stop +$ErrorActionPreference = 'Stop' + + +# Import required modules +$root = Split-Path -Parent -Path $MyInvocation.MyCommand.Path +Import-Module "$($root)\Modules\FudgeTools.psm1" -Force -ErrorAction Stop + + +# output the version +$ver = 'v$version$' +Write-Success "Fudge $($ver)" + +# if we were only after the version, just return +if ($Version -or (@('v', 'version') -icontains $Action)) +{ + return +} + + +# if action is just to display Help, show it and return +if ($Help -or (@('h', 'help') -icontains $Action)) +{ + Write-Host "`nUsage: fudge " + Write-Host "`nWhere is one of:" + Write-Host " add, clean, delete, downgrade, help, install, list, new, pack," + Write-Host " prune, rebuild, reinstall, remove, renew, search, uninstall," + Write-Host " upgrade, version, which" + Write-Host "" + return +} + + +try +{ + # start timer + $timer = [DateTime]::UtcNow + + + # ensure we have a valid action + $packageActions = @('install', 'upgrade', 'uninstall', 'reinstall', 'list', 'rebuild', 'downgrade', 'add', 'remove') + $maintainActions = @('prune') + $packingActions = @('pack') + $miscActions = @('search', 'clean', 'which') + $newActions = @('new') + $alterActions = @('delete', 'renew') + + $actions = ($packageActions + $maintainActions + $packingActions + $miscActions + $newActions + $alterActions) + if ((Test-Empty $Action) -or $actions -inotcontains $Action) { + Write-Fail "Unrecognised action supplied '$($Action)', should be either: $($actions -join ', ')" + return + } + + + # actions that require chocolatey + $isChocoAction = (@('which', 'add', 'remove', 'delete') -inotcontains $Action) + if (!$isChocoAction -and ($Install -or $Uninstall)) { + $isChocoAction = $true + } + + + # if adhoc was supplied for an invalid action + if ($Adhoc -and @('install', 'uninstall', 'upgrade', 'downgrade', 'reinstall') -inotcontains $Action) { + Write-Fail "Adhoc supplied for invalid action: $($Action)" + return + } + + # if adhoc supplied with no package name, fail + if ($Adhoc -and [string]::IsNullOrWhiteSpace($Key)) { + Write-Fail "No package name supplied for adhoc $($Action)" + return + } + + + # if -devOnly is passed, set -dev to true + if ($DevOnly) { + $Dev = $true + } + + + # get the Fudgefile path, if adhoc is supplied set to empty + $FudgefilePath = Get-FudgefilePath $FudgefilePath -Adhoc:$Adhoc + + + # ensure that the Fudgefile exists (for certain actions), and deserialise it + if (($packageActions + $maintainActions + $packingActions + $alterActions) -icontains $Action) + { + $config = $null + + # if adhoc is supplied, we don't need to get the content + if (!$Adhoc) { + if (!(Test-Path $FudgefilePath)) { + Write-Fail "Path to Fudgefile does not exist: $($FudgefilePath)" + return + } + + $config = Get-FudgefileContent $FudgefilePath + } + + # if we have a custom source in the config and no CLI source, set the source + if ((Test-Empty $Source) -and ($null -ne $config) -and !(Test-Empty $config.source)) { + $Source = $config.source + } + } + + # ensure that the Fudgefile doesn't exist + elseif ($newActions -icontains $Action) + { + if (Test-Path $FudgefilePath) { + Write-Fail "Path to Fudgefile already exists: $($FudgefilePath)" + return + } + } + + + # if there are no packages to install or nuspecs to pack, just return + if ($null -ne $config) + { + # check nuspecs + if ($packingActions -icontains $Action) + { + if (Test-Empty $config.pack) { + Write-Notice "There are no nuspecs to $($Action)" + return + } + + if (![string]::IsNullOrWhiteSpace($Key) -and [string]::IsNullOrWhiteSpace($config.pack.$Key)) { + Write-Notice "Fudgefile does not contain a nuspec pack file for '$($Key)'" + return + } + } + + # check packages + elseif ($packageActions -icontains $Action) + { + if ((Test-Empty $config.packages) -and (!$Dev -or ($Dev -and (Test-Empty $config.devPackages)))) { + Write-Notice "There are no packages to $($Action)" + return + } + + if ($DevOnly -and (Test-Empty $config.devPackages)) { + Write-Notice "There are no devPackages to $($Action)" + return + } + } + } + + + # check to see if chocolatey is installed + if ($isChocoAction) { + $isChocoInstalled = Test-Chocolatey + } + + + # check if the console is elevated (only needs to be done for certain actions) + $isAdminAction = @('list', 'search', 'new', 'delete', 'renew', 'which', 'add', 'remove') -inotcontains $Action + $actionNeedsAdmin = (@('delete', 'remove') -icontains $Action -and $Uninstall) -or (@('new', 'renew', 'add') -icontains $Action -and $Install) + + if (((!$isChocoInstalled -and $isChocoAction) -or $isAdminAction -or $actionNeedsAdmin) -and !(Test-AdminUser)) + { + Write-Notice 'Must be running with administrator privileges for Fudge to fully function' + return + } + + + # if chocolatey isn't installed, install it + if (!$isChocoInstalled -and $isChocoAction) { + Install-Chocolatey + } + + + # if we are using a global custom source, output it for info + if (!(Test-Empty $Source)) { + Write-Notice "Source: $($Source)" + } + + Write-Host ([string]::Empty) + + + # retrieve a local list of what's currently installed + if ($isChocoAction) { + $localList = Get-ChocolateyLocalList + } + + + # invoke chocolatey based on the action required + switch ($Action) + { + {($_ -ieq 'install') -or ($_ -ieq 'uninstall') -or ($_ -ieq 'upgrade') -or ($_ -ieq 'downgrade')} + { + Invoke-ChocolateyAction -Action $Action -Key $Key -Source $Source -Config $config -LocalList $localList ` + -Parameters $Parameters -Arguments $Arguments -Dev:$Dev -DevOnly:$DevOnly -Adhoc:$Adhoc + } + + {($_ -ieq 'reinstall')} + { + Invoke-ChocolateyAction -Action 'uninstall' -Key $Key -Source $Source -Config $config -LocalList $localList ` + -Parameters $Parameters -Arguments $Arguments -Dev:$Dev -DevOnly:$DevOnly -Adhoc:$Adhoc + + Invoke-ChocolateyAction -Action 'install' -Key $Key -Source $Source -Config $config -LocalList $localList ` + -Parameters $Parameters -Arguments $Arguments -Dev:$Dev -DevOnly:$DevOnly -Adhoc:$Adhoc + } + + {($_ -ieq 'pack')} + { + Invoke-ChocolateyAction -Action 'pack' -Key $Key -Config $config + } + + {($_ -ieq 'list')} + { + Invoke-FudgeLocalDetails -Config $config -Key $Key -LocalList $localList -Dev:$Dev -DevOnly:$DevOnly + } + + {($_ -ieq 'search')} + { + Invoke-Search -Key $Key -Limit $Limit -Source $Source -LocalList $localList + } + + {($_ -ieq 'new')} + { + New-Fudgefile -Path $FudgefilePath -Key $Key -LocalList $localList -Install:$Install -Dev:$Dev -DevOnly:$DevOnly + } + + {($_ -ieq 'renew')} + { + Restore-Fudgefile -Path $FudgefilePath -Key $Key -LocalList $localList -Install:$Install -Uninstall:$Uninstall -Dev:$Dev -DevOnly:$DevOnly + } + + {($_ -ieq 'delete')} + { + Remove-Fudgefile -Path $FudgefilePath -Uninstall:$Uninstall -Dev:$Dev -DevOnly:$DevOnly + } + + {($_ -ieq 'prune')} + { + Invoke-FudgePrune -Config $config -LocalList $localList -Dev:$Dev -DevOnly:$DevOnly + } + + {($_ -ieq 'clean')} + { + Invoke-FudgeClean -LocalList $localList + } + + {($_ -ieq 'add')} + { + Invoke-FudgeAdd -Path $FudgefilePath -Key $Key -Source $Source -Config $config -LocalList $localList ` + -Parameters $Parameters -Arguments $Arguments -Dev:$Dev -Install:$Install + } + + {($_ -ieq 'remove')} + { + Invoke-FudgeRemove -Path $FudgefilePath -Key $Key -Config $config -LocalList $localList ` + -Parameters $Parameters -Arguments $Arguments -Dev:$Dev -Uninstall:$Uninstall + } + + {($_ -ieq 'which')} + { + Invoke-FudgeWhich -Key $Key + } + + {($_ -ieq 'rebuild')} + { + Invoke-FudgeClean -LocalList $localList + Invoke-ChocolateyAction -Action 'install' -Key $Key -Source $Source -Config $config -Dev:$Dev -DevOnly:$DevOnly + } + + default + { + Write-Fail "Action not recognised: $($_)" + } + } +} +finally +{ + # output duration, and cleanup + Write-Details "`nDuration: $(([DateTime]::UtcNow - $timer).ToString())" + Remove-Module -Name 'FudgeTools' -ErrorAction SilentlyContinue | Out-Null +} \ No newline at end of file diff --git a/.ci/FudgeCI.ps1 b/.ci/FudgeCI.ps1 new file mode 100644 index 0000000000..8f834ce475 --- /dev/null +++ b/.ci/FudgeCI.ps1 @@ -0,0 +1,183 @@ +if (!($env:FudgeCI)) { + if (Test-Path 'assets/fudge/FudgeCI.ps1') { + $env:FudgeCI = 'assets/fudge/' + } + elseif (Test-Path '.ci/FudgeCI.ps1') { + $env:FudgeCI = '.ci/' + } +} + +. $env:FudgeCI/PrepareAVVM.ps1 + +Set-StrictMode -Version latest + +function Initialize-MinGW { + # TODO: Handle versions other than 8.1.0 + Move-Item C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64 C:\MinGW81-x64 +} + +function Initialize-AppVeyorPreinstalledProduct { + param( + [array] + $packages + ) + + foreach ($pkg in $packages) { + $name = $pkg.Name + + $product = $pkg.AppVeyor_ID + if ($product -eq $true) { + Write-Information "No version choices available for AppVeyor $name" + continue + } + + $version = $pkg.Version + + $version_parts = ($version.Split('.')) + + if (!($env:AppVeyor)) { + Write-Verbose "AppVeyor not set; skipping $product $version_parts" + continue + } + + if ($product -eq 'jdk') { + # 8 -> 1.8.0 + $version = "1." + $version_parts[0] + ".0" + } + elseif ($product -eq 'MinGW') { + Initialize-MinGW + } + elseif ($product -eq 'miniconda') { + # TODO improve translation of real miniconda versions + # into AppVeyor versions which are the python version + if ($version -eq '4.5.12') { + $version = '3.7' + } + + if ($version[0] -eq '2') { + Initialize-Miniconda27 + } + } + + # Allow the installed version of python to be over + if ($product -eq 'python') { + if ($env:PYTHON_VERSION) { + $version = $env:PYTHON_VERSION + } + } + + Add-Product $product $version $env:PLATFORM + if (Test-Path "C:\avvm\$product\$version\$env:PLATFORM") { + Install-Product $product $version $env:PLATFORM + } + elseif (Test-Path "C:\avvm\$product\$version") { + if ($env:PLATFORM -eq 'x86') { + $platform = 'x64' + } + else { + $platform = 'x86' + } + Install-Product $product $version $platform + } + } +} + +function Initialize-AppVeyorFakeChocoPackage { + param( + [array] + $packages + ) + + New-Item -ItemType Directory -Force ($env:FudgeCI + '\\nuspecs\\') > $null + + Remove-Item "$env:FudgeCI/nuspecs/*.nupkg" -Force > $null + + foreach ($pkg in $packages) { + . $env:FudgeCI/FudgeGenerateFake.ps1 + + GenerateFakeNuspec $pkg.Name $pkg.Version + + $name = $pkg.Name + + $pkg.Source = "$env:FudgeCI/nuspecs/" + + $filename = "$env:FudgeCI/nuspecs/$name.nuspec" + + Invoke-Chocolatey -Action pack -Package $pkg.Name -Version $filename + } +} + +function Get-Preinstalled { + try { + if ($config) { } + } + catch { + $config = Get-Content Fudgefile | + ConvertFrom-Json + } + + $appveyor_preinstalled = New-Object System.Collections.ArrayList + + foreach ($pkg in $config.packages) { + try { + if ($pkg.AppVeyor_ID) { + $appveyor_preinstalled.Add($pkg) > $null + } + } + catch { + continue + } + } + + $appveyor_preinstalled +} + +function Initialize-AppVeyorVM { + $appveyor_preinstalled = Get-Preinstalled + + if (!($env:AppVeyor)) { + Write-Notice "Not running on AppVeyor; skipping" + return + } + + Initialize-AppVeyorProductVersion + + Initialize-AppVeyorPreinstalledProduct $appveyor_preinstalled +} + +function Invoke-FudgeAppVeyor { + $appveyor_preinstalled = Get-Preinstalled + + if (!($env:AppVeyor)) { + Write-Notice "Not running on AppVeyor; skipping" + return + } + + Initialize-AppVeyorFakeChocoPackage $appveyor_preinstalled +} + +function Repair-Config { + foreach ($pkg in $config.packages) { + if (!($pkg.Source)) { + $pkg.Source = $config.Source + } + } +} + +function Invoke-FudgeCI { + if (!($env:CI)) { + Fix-Config + + Write-Notice "Not running on CI; skipping" + return + } + + Invoke-FudgeAppVeyor + + Repair-Config +} + +$old_EAP = $ErrorActionPreference +$ErrorActionPreference = 'SilentlyContinue'; +Export-ModuleMember -Function Prepare-AppVeyor-AVVM, Invoke-FudgeCI +$ErrorActionPreference = $old_EAP; diff --git a/.ci/FudgeGenerateFake.ps1 b/.ci/FudgeGenerateFake.ps1 new file mode 100644 index 0000000000..ac85e407f2 --- /dev/null +++ b/.ci/FudgeGenerateFake.ps1 @@ -0,0 +1,42 @@ +Set-StrictMode -Version latest + +$template = @' + + + + {name} + {version} + {name} {version} + AppVeyor + Fake generated {name} package to fulfil dependencies. + + + + + +'@ + +function GenerateFakeNuspec { + param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $name, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $version + ) + + $content = $template -replace '{name}', $name + $content = $content -replace '{version}', $version + + $nuspec = ($env:FudgeCI + '\nuspecs\' + $name + '.nuspec') + + Set-Content $nuspec $content + + Write-Output "Created $nuspec" +} + +Export-ModuleMember -Function GenerateFakeNuspec diff --git a/.ci/FudgePostInstall.ps1 b/.ci/FudgePostInstall.ps1 new file mode 100644 index 0000000000..c8df753663 --- /dev/null +++ b/.ci/FudgePostInstall.ps1 @@ -0,0 +1,52 @@ +. $env:ChocolateyInstall\helpers\functions\Write-FunctionCallLogMessage.ps1 +. $env:ChocolateyInstall\helpers\functions\Get-EnvironmentVariable.ps1 +. $env:ChocolateyInstall\helpers\functions\Get-EnvironmentVariableNames.ps1 +. $env:ChocolateyInstall\helpers\functions\Start-ChocolateyProcessAsAdmin.ps1 +. $env:ChocolateyInstall\helpers\functions\Set-EnvironmentVariable.ps1 +. $env:ChocolateyInstall\helpers\functions\Set-PowerShellExitCode.ps1 +. $env:ChocolateyInstall\helpers\functions\Update-SessionEnvironment.ps1 +. $env:ChocolateyInstall\helpers\functions\Write-FunctionCallLogMessage.ps1 +. $env:ChocolateyInstall\helpers\functions\Install-ChocolateyPath.ps1 + +Set-StrictMode -Version latest + +$deps_base = $env:FudgeCI + +function Invoke-PostInstall { + choco list --local-only + + Update-SessionEnvironment + + Write-Host "PATH = $env:PATH" + + foreach ($pkg in $config.Packages) { + $name = $pkg.Name + + $glob = "$deps_base/deps.$name.ps1" + + if (Test-Path $glob) { + Write-Host "Running post-install for $name" + + . $glob + Complete-Install + } + } + + Update-SessionEnvironment + + Write-Host "PATH = $env:PATH" + + foreach ($pkg in $config.Packages) { + $name = $pkg.Name + + $glob = "$deps_base/deps.$name-packages.ps1" + if (Test-Path $glob) { + Write-Host "Running $name package installation" + + . $glob + Invoke-ExtraInstallation + } + } +} + +Export-ModuleMember -Function Invoke-PostInstall diff --git a/.ci/Modules/FudgeTools.psm1 b/.ci/Modules/FudgeTools.psm1 new file mode 100644 index 0000000000..22b588852a --- /dev/null +++ b/.ci/Modules/FudgeTools.psm1 @@ -0,0 +1,1888 @@ + +function Write-Success +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Message, + + [switch] + $NoNewLine + ) + + Write-Host $Message -NoNewline:$NoNewLine -ForegroundColor Green +} + +function Write-Information +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Message, + + [switch] + $NoNewLine + ) + + Write-Host $Message -NoNewline:$NoNewLine -ForegroundColor Magenta +} + + +function Write-Details +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Message, + + [switch] + $NoNewLine + ) + + Write-Host $Message -NoNewline:$NoNewLine -ForegroundColor Cyan +} + + +function Write-Notice +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Message, + + [switch] + $NoNewLine + ) + + Write-Host $Message -NoNewline:$NoNewLine -ForegroundColor Yellow +} + + +function Write-Fail +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Message, + + [switch] + $NoNewLine + ) + + Write-Host $Message -NoNewline:$NoNewLine -ForegroundColor Red +} + + +# compares two versions, and returns a value specifying if they're equal or different +# -1: installed version is behind +# 0: installed version is latest +# 1: installed version is ahead +function Compare-Versions +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Installed, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $NewVersion + ) + + if (Test-VersionPassedIsLatest $NewVersion) { + return -1 + } + + $i_parts = $Installed -split '\.' + $o_parts = $NewVersion -split '\.' + + $count = $i_parts.Length + if ($o_parts.Length -gt $count) { + $count = $o_parts.Length + } + + for ($i = 0; $i -lt $count; $i++) + { + if ($i_parts[$i] -eq $o_parts[$i]) { + continue + } + + if ($i_parts[$i] -lt $o_parts[$i]) { + return -1 + } + else { + return 1 + } + } + + return 0 +} + + +# takes a package about to be installed, and checks if the version needs to be installed, +# or just a downgrade/upgrade of what's already installed +function Get-InstallAction +{ + param ( + [string] + $Package, + + [string] + $Version, + + $LocalList + ) + + # if it's not installed, it needs installing + $current = $LocalList[$Package] + if (Test-Empty $current) { + return 'install' + } + + # compare the version, and determine if we need to upgrade/downgrade + $action = Compare-Versions -Installed $current -NewVersion $Version + + switch ($action) + { + 1 { return 'downgrade' } + -1 { return 'upgrade' } + default { return 'install' } + } +} + + +# return the package name from a supplied key +function Get-PackageFromKey +{ + param ( + [string] + $Key + ) + + return ($Key -isplit '@')[0].Trim() +} + + +# return the version from a supplied key +function Get-VersionFromKey +{ + param ( + [string] + $Key + ) + + $parts = ($Key -isplit '@') + if ($parts.Length -le 1) { + return 'latest' + } + + return $parts[1].Trim() +} + + +# returns the levenshtein distance between two strings +function Get-Levenshtein +{ + param ( + [string] + $Value1, + + [string] + $Value2 + ) + + $len1 = $Value1.Length + $len2 = $Value2.Length + + if ($len1 -eq 0) { return $len2 } + if ($len2 -eq 0) { return $len1 } + + $Value1 = $Value1.ToLowerInvariant() + $Value2 = $Value2.ToLowerInvariant() + + $dist = New-Object -Type 'int[,]' -Arg ($len1 + 1), ($len2 + 1) + + 0..$len1 | ForEach-Object { $dist[$_, 0] = $_ } + 0..$len2 | ForEach-Object { $dist[0, $_] = $_ } + + $cost = 0 + + for ($i = 1; $i -le $len1; $i++) + { + for ($j = 1; $j -le $len2; $j++) + { + $cost = 1 + if ($Value2[$j - 1] -ceq $Value1[$i - 1]) + { + $cost = 0 + } + + $tempmin = [System.Math]::Min(([int]$dist[($i - 1), $j] + 1), ([int]$dist[$i, ($j - 1)] + 1)) + $dist[$i, $j] = [System.Math]::Min($tempmin, ([int]$dist[($i - 1), ($j - 1)] + $cost)) + } + } + + # the actual distance is stored in the bottom right cell + return $dist[$len1, $len2]; +} + + +# safeguards a string, by return empty or a default if empty +function Format-SafeguardString +{ + param ( + [string] + $Value, + + [string] + $Default = $null + ) + + if (!(Test-Empty $Value)) { + return $Value + } + + $Value = [string]::Empty + if (!(Test-Empty $Default)) { + $Value = $Default + } + + return $Value +} + + +# checks to see if a passed version is to use the latest version +function Test-VersionPassedIsLatest +{ + param ( + [string] + $Version + ) + + return ((Test-Empty $Version) -or ($Version.Trim() -ieq 'latest')) +} + + +# checks to see if a passed path is a valid nuspec (path, xml, and content) +function Test-Nuspec +{ + param ( + [string] + $Path + ) + + if (!(Test-NuspecPath $Path)) + { + Write-Fail "Path to nuspec file doesn't exist or is invalid: $($Path)" + return $false + } + + if (!(Test-XmlContent $Path)) + { + Write-Fail "Nuspec file fails to parse as a valid XML document: $($Path)" + return $false + } + + $nuspecData = Get-XmlContent $Path + + if (!(Test-NuspecContent $nuspecData)) + { + Write-Fail "Nuspec file is missing the package/metadata XML sections: $($Path)" + return $false + } + + return $true +} + + +# checks to see if a passed path is a valid nuspec file path +function Test-NuspecPath +{ + param ( + [string] + $Path + ) + + # ensure a path was passed + if ([string]::IsNullOrWhiteSpace($Path)) + { + return $false + } + + # ensure path is exists, or is not just a directory path + if (!(Test-Path $Path) -or (Test-PathDirectory $Path)) + { + return $false + } + + return $true +} + + +# checks to see if the file at passed path is a valid XML file +function Test-XmlContent +{ + param ( + [string] + $Path + ) + + # fail if the path doesn't exist + if ([string]::IsNullOrWhiteSpace($Path) -or !(Test-Path $Path)) + { + return $false + } + + # ensure the content parses as xml + try + { + [xml](Get-Content $Path) | Out-Null + return $true + } + catch [exception] + { + return $false + } +} + + +# checks to see if the passed XML content is a valid nuspec file +function Test-NuspecContent +{ + param ( + [xml] + $Content + ) + + return ($Content -ne $null -and $Content.package -ne $null -and $Content.package.metadata -ne $null) +} + + +# returns the XML content of the file at the passed path +function Get-XmlContent +{ + param ( + [string] + $Path + ) + + if (!(Test-XmlContent $Path)) + { + return $null + } + + return [xml](Get-Content $Path) +} + + +# checks to see if a passed path is a directory +function Test-PathDirectory +{ + param ( + [string] + $Path + ) + + if ([string]::IsNullOrWhiteSpace($Path) -or !(Test-Path $Path)) + { + return $false + } + + return ((Get-Item $Path) -is [System.IO.DirectoryInfo]) +} + + +# returns a path to a fidgefile based on a passed path +function Get-FudgefilePath +{ + param ( + [string] + $Path, + + [switch] + $Adhoc + ) + + if ($Adhoc) + { + return [string]::Empty + } + + $rootpath = './Fudgefile' + if (![string]::IsNullOrWhiteSpace($Path)) + { + if ((Test-Path $Path) -and (Test-PathDirectory $Path)) + { + $rootpath = Join-Path $Path 'Fudgefile' + } + else + { + $rootpath = $Path + } + } + + return $rootpath +} + + +# returns the content of a passed fudgefile path +function Get-FudgefileContent +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Path + ) + + if (!(Test-Path $Path)) { + throw "Path to Fudgefile does not exist: $($Path)" + } + + try { + $config = Get-Content -Path $Path -Raw | ConvertFrom-Json + } + catch { + throw "Failed to parse the Fudgefile at: $($Path)`n$($_.Exception)" + } + + return $config +} + + +# removes an existing fudgefile, and if passed attempting to uninstall the packages +function Remove-Fudgefile +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Path, + + $LocalList, + + [switch] + $Uninstall, + + [switch] + $Dev, + + [switch] + $DevOnly + ) + + # ensure the path actually exists + if (!(Test-Path $Path)) + { + Write-Fail "Path to Fudgefile does not exist: $($Path)" + return + } + + # uninstall packages first, if requested + if ($Uninstall) + { + $config = Get-FudgefileContent $Path + Invoke-ChocolateyAction -Action 'uninstall' -Key $null -Config $config -LocalList $LocalList -Dev:$Dev -DevOnly:$DevOnly + } + + # remove the fudgefile + Write-Information "> Deleting Fudgefile" -NoNewLine + Remove-Item -Path $Path -Force -Confirm:$false | Out-Null + Write-Success " > deleted" + Write-Details " > $($Path)" +} + + +# restores the packages of an existing fudgefile (either empty, from nuspec, or from local) +function Restore-Fudgefile +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Path, + + [string] + $Key, + + $LocalList, + + [switch] + $Install, + + [switch] + $Uninstall, + + [switch] + $Dev, + + [switch] + $DevOnly + ) + + # retrieve the content of the current fudgefile + $content = Get-FudgefileContent $Path + + # check to see if we're restoring this file using local packages + if ($Key -ieq 'local') + { + if (Test-Empty $LocalList) + { + Write-Fail "No packages installed locally to renew Fudgefile" + return + } + + Write-Information "> Renewing Fudgefile using $($LocalList.Count) local packages" -NoNewLine + } + + # check if there are any nuspecs in the pack section + elseif ($Key -ieq 'nuspec') + { + if (Test-Empty $content.pack) + { + Write-Fail "No nuspecs in pack section to renew Fudgefile" + return + } + + Write-Information "> Renewing Fudgefile using nuspecs" -NoNewLine + } + + # else if it's not empty, we don't know what they mean + elseif (!(Test-Empty $Key)) + { + Write-Fail "Renew command not recognised: $($Key). Should be blank, or either local/nuspec" + return + } + + # else we're renewing to an empty file + else + { + Write-Information "> Renewing Fudgefile" -NoNewLine + } + + # first, uninstall the packages, if requested + if ($Uninstall) + { + Invoke-ChocolateyAction -Action 'uninstall' -Key $null -Config $content -LocalList $LocalList -Dev:$Dev -DevOnly:$DevOnly + } + + # remove all current packages + if (!$DevOnly) + { + $content.packages = @() + } + + if ($Dev) + { + $content.devPackages = @() + } + + # insert packages from any nuspecs in the pack section + if ($Key -ieq 'nuspec') + { + $nuspecs = $content.pack.psobject.properties.name + $nuspecs | ForEach-Object { + $content = Add-PackagesFromNuspec -Content $content -Path $content.pack.$_ -Dev:$Dev -DevOnly:$DevOnly + } + } + + # insert any data from the local packages + if ($Key -ieq 'local') + { + $content = Add-PackagesFromLocal -Content $content -LocalList $LocalList -DevOnly:$DevOnly + } + + # save contents as json + $content | ConvertTo-Json | Out-File -FilePath $Path -Encoding utf8 -Force + Write-Success " > renewed" + Write-Details " > $($Path)" + + # now install the packages + if ($Install) + { + Invoke-ChocolateyAction -Action 'install' -Key $null -Config $content -LocalList $LocalList -Dev:$Dev -DevOnly:$DevOnly + } +} + + +# create a new empty fudgefile, or a new one from a nuspec file +function New-Fudgefile +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Path, + + [string] + $Key, + + $LocalList, + + [switch] + $Install, + + [switch] + $Dev, + + [switch] + $DevOnly + ) + + # check to see if we're making this file using local packages + if ($Key -ieq 'local') + { + if (Test-Empty $LocalList) + { + Write-Fail "No packages installed locally to create new Fudgefile" + return + } + + Write-Information "> Creating new Fudgefile using $($LocalList.Count) local packages" -NoNewLine + } + + # if the key is passed, ensure it's a valid nuspec file + elseif (!(Test-Empty $Key)) + { + if (!(Test-Nuspec $Key)) + { + return + } + + $nuspecName = Split-Path -Leaf -Path $Key + Write-Information "> Creating new Fudgefile using $($nuspecName)" -NoNewLine + } + + # else it's just an empty file + else + { + Write-Information "> Creating new Fudgefile" -NoNewLine + } + + # setup the empty fudgefile + $content = @{ + 'scripts' = @{ + 'pre' = @{ 'install'= ''; 'uninstall'= ''; 'upgrade'= ''; 'downgrade' = ''; 'pack'= ''; }; + 'post' = @{ 'install'= ''; 'uninstall'= ''; 'upgrade'= ''; 'downgrade' = ''; 'pack'= ''; }; + }; + 'packages' = @(); + 'devPackages' = @(); + 'pack' = @{}; + } + + # insert any data from the nuspec + if (!(Test-Empty $nuspecName)) + { + $content = Add-PackagesFromNuspec -Content $content -Path $Key -Dev:$Dev -DevOnly:$DevOnly + $name = [System.IO.Path]::GetFileNameWithoutExtension($nuspecName) + $content.pack[$name] = $Key + } + + # insert any data from the local packages + if ($Key -ieq 'local') + { + $content = Add-PackagesFromLocal -Content $content -LocalList $LocalList -DevOnly:$DevOnly + } + + # save contents as json + $content | ConvertTo-Json | Out-File -FilePath $Path -Encoding utf8 -Force + Write-Success " > created" + Write-Details " > $($Path)" + + # now install the packages + if ($Install) + { + $config = Get-FudgefileContent $Path + Invoke-ChocolateyAction -Action 'install' -Key $null -Config $config -LocalList $LocalList -Dev:$Dev -DevOnly:$DevOnly + } +} + + +# adds packages to a fudgefile from local packages +function Add-PackagesFromLocal +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNull()] + $Content, + + [Parameter(Mandatory=$true)] + [ValidateNotNull()] + $LocalList, + + [switch] + $DevOnly + ) + + $LocalList.Keys | ForEach-Object { + $package = @{ + 'name' = $_; + 'version' = $LocalList[$_]; + } + + if ($DevOnly) + { + $Content.devPackages += $package + } + else + { + $Content.packages += $package + } + } + + return $Content +} + + +# adds packages to a fudgefile from a nuspec file +function Add-PackagesFromNuspec +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNull()] + $Content, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + $Path, + + [switch] + $Dev, + + [switch] + $DevOnly + ) + + # get the content from the nuspec + $data = Get-XmlContent -Path $Path + $metadata = $data.package.metadata + + # if we have any dependencies, add them as packages + if (!$DevOnly -and $metadata.dependencies -ne $null) + { + $metadata.dependencies.dependency | ForEach-Object { + $version = Format-SafeguardString $_.version 'latest' + $Content.packages += @{ + 'name' = $_.id; + 'version' = $version; + } + } + } + + # if we have any devDependencies, add them as devPackages + if ($Dev -and $metadata.devDependencies -ne $null) + { + $metadata.devDependencies.dependency | ForEach-Object { + $version = Format-SafeguardString $_.version 'latest' + $Content.devPackages += @{ + 'name' = $_.id; + 'version' = $version; + } + } + } + + return $Content +} + + +# checks to see if the user has administrator privileges +function Test-AdminUser +{ + try + { + $principal = New-Object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent()) + + if ($principal -eq $null) + { + return $false + } + + return $principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) + } + catch [exception] + { + Write-Fail 'Error checking user administrator privileges' + Write-Fail $_.Exception.Message + return $false + } +} + + +# checks to see if the passed value is empty +function Test-Empty +{ + param ( + $Value + ) + + if ($Value -eq $null) + { + return $true + } + + if ($Value.GetType().Name -ieq 'string') + { + return [string]::IsNullOrWhiteSpace($Value) + } + + $type = $Value.GetType().BaseType.Name.ToLowerInvariant() + switch ($type) + { + 'valuetype' + { + return $false + } + + 'array' + { + return (($Value | Measure-Object).Count -eq 0 -or $Value.Count -eq 0) + } + } + + return ([string]::IsNullOrWhiteSpace($Value) -or ($Value | Measure-Object).Count -eq 0 -or $Value.Count -eq 0) +} + + +# check to see if chocolatey is installed on the current machine +function Test-Chocolatey +{ + try { + $output = Invoke-Expression -Command 'choco -v' + Write-Details "Chocolatey v$($output)" + return $true + } + catch { + return $false + } +} + + +# installs chocolatey +function Install-Chocolatey +{ + Write-Notice "Installing Chocolatey" + + $policies = @('Unrestricted', 'ByPass', 'AllSigned') + if ($policies -inotcontains (Get-ExecutionPolicy)) { + Set-ExecutionPolicy Bypass -Force + } + + Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) | Out-Null + Write-Success "Chocolatey installed`n" +} + + +# invoke scripts for pre/post actions +function Invoke-Script +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Action, + + [string] + $Stage, + + $Scripts + ) + + # if there is no stage, return + if (Test-Empty $Stage) { + return + } + + # if there are no scripts, return + if ((Test-Empty $Scripts) -or (Test-Empty $Scripts.$Stage)) { + return + } + + $script = $Scripts.$Stage.$Action + if (Test-Empty $script) { + return + } + + # run the script + Invoke-Expression -Command $script +} + + +# cycle through the passed packages, actioning upon them +function Start-ActionPackages +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Action, + + [string] + $Key, + + [string] + $Source, + + [array] + $Packages, + + [string] + $Arguments, + + $LocalList + ) + + # if there are no packages to deal with, return + if (Test-Empty $Packages) { + return + } + + # have we installed anything + $installed = $false + $haveKey = (![string]::IsNullOrWhiteSpace($Key)) + + # loop through each of the packages, and call chocolatey on them + foreach ($pkg in $Packages) + { + # skip if we forcing action on a specific package + if ($haveKey -and ($pkg.name -ine $Key)) { + continue + } + + # use a package specific custom source + if (![string]::IsNullOrWhiteSpace($pkg.source)) { + $Source = $pkg.source + } + + # force a specific action on the package + $_action = $Action + if (!(Test-Empty $pkg.action)) { + $_action = $pkg.action + } + + $installed = $true + + Invoke-Chocolatey -Action $_action -Package $pkg.name -Version $pkg.version ` + -Source $Source -Parameters $pkg.params -Arguments "$($pkg.args) $($Arguments)".Trim() -LocalList $LocalList + } + + # if we didn't install anything, and we have a key - say it isn't present in file + if (!$installed -and $haveKey) { + Write-Notice "Package not found in Fudgefile: $($Key)" + } +} + + +# cycle through the passed nuspecs for packing via nuget +function Start-ActionPack +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Action, + + [string] + $Key, + + $Nuspecs + ) + + # if there are no nuspecs to deal with, return + if (Test-Empty $Nuspecs) { + return + } + + # have we packed anything + $packed = $false + $haveKey = (![string]::IsNullOrWhiteSpace($Key)) + + # loop through each of the nuspecs, and call chocolatey on them for packing + foreach ($pkg in $Nuspecs.psobject.properties.name) + { + if ($haveKey -and ($pkg -ine $Key)) { + continue + } + + $packed = $true + Invoke-Chocolatey -Action $Action -Package $pkg -Version ($Nuspecs.$pkg) + } + + # if we didn't pavk anything, and we have a key - say it isn't present in file + if (!$packed -and $haveKey) { + Write-Notice "Nuspec not found in Fudgefile: $($Key)" + } +} + + +# invokes a chocolatey action, which also runs the pre/post scripts +function Invoke-ChocolateyAction +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Action, + + [string] + $Key, + + [string] + $Source, + + $Config, + + $LocalList, + + [string] + $Parameters, + + [string] + $Arguments, + + [switch] + $Dev, + + [switch] + $DevOnly, + + [switch] + $Adhoc + ) + + # ensure the config object exists, unless adhoc is supplied + if (!$Adhoc -and $null -eq $Config) { + throw "Invalid Fudge configuration supplied" + } + + # if we're running as adhoc, just call chocolatey directly + if ($Adhoc) + { + $pkg = Get-PackageFromKey -Key $Key + $vsn = Get-VersionFromKey -Key $Key + Invoke-Chocolatey -Action $Action -Package $pkg -Source $Source -Version $vsn -LocalList $LocalList -Parameters $Parameters -Arguments $Arguments + } + else + { + # invoke pre-script for current action + Invoke-Script -Action $Action -Stage 'pre' -Scripts $Config.scripts + + # invoke chocolatey based on the action + switch ($Action.ToLowerInvariant()) { + 'pack' { + # run pack on supplied nuspecs + Start-ActionPack -Action $Action -Key $Key -Nuspecs $Config.pack + } + + default { + # install normal packages, unless flagged as dev only + if (!$DevOnly) { + Start-ActionPackages -Action $Action -Key $Key -Packages $Config.packages -Source $Source -LocalList $LocalList -Arguments $Arguments + } + + # install dev packages + if ($Dev) { + Start-ActionPackages -Action $Action -Key $Key -Packages $Config.devPackages -Source $Source -LocalList $LocalList -Arguments $Arguments + } + } + } + + # invoke post-script for current action + Invoke-Script -Action $Action -Stage 'post' -Scripts $Config.scripts + } +} + + +# add the core chocolatey and fudge packages to a package map +function Add-CoreChocoPackages +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNull()] + $Packages + ) + + $Packages['chocolatey'] = 'latest' + $Packages['chocolatey-core.extension'] = 'latest' + $Packages['fudge'] = 'latest' + + return $Packages +} + + +# pruning the current machine's packages with what's in the fudgefile +function Invoke-FudgePrune +{ + param ( + $Config, + + $LocalList, + + [switch] + $Dev, + + [switch] + $DevOnly + ) + + # package map for what to leave installed + $packages = @{} + $pruned = $false + + if (!$DevOnly) + { + $Config.packages | ForEach-Object { $packages[$_.name] = $_.version } + } + + if ($Dev) + { + $Config.devPackages | ForEach-Object { $packages[$_.name] = $_.version } + } + + # add core chocolatey packages (and fudge) + $packages = Add-CoreChocoPackages $packages + + # loop through each local package, and remove if not in fudgefile + $LocalList.Keys | ForEach-Object { + if (!$packages.ContainsKey($_)) + { + $pruned = $true + Invoke-Chocolatey -Action 'uninstall' -Package $_ + } + } + + if(!$pruned) + { + Write-Notice 'Nothing to prune' + } +} + + +# cleaning a machine of all packages currently installed +function Invoke-FudgeClean +{ + param ( + $LocalList + ) + + # package map for what to leave installed + $packages = @{} + $cleaned = $false + + # add core chocolatey packages (and fudge) + $packages = Add-CoreChocoPackages $packages + + # loop through each local package, and remove it + $LocalList.Keys | ForEach-Object { + if (!$packages.ContainsKey($_)) + { + $cleaned = $true + Invoke-Chocolatey -Action 'uninstall' -Package $_ + } + } + + if(!$cleaned) + { + Write-Notice 'Nothing to clean' + } +} + + +# add a package to a fudgefile +function Invoke-FudgeAdd +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Path, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Key, + + [string] + $Source, + + $Config, + + $LocalList, + + [string] + $Parameters, + + [string] + $Arguments, + + [switch] + $Dev, + + [switch] + $Install + ) + + # get name and version from key + $KeyName = Get-PackageFromKey -Key $Key + $KeyVer = Get-VersionFromKey -Key $Key + + # ensure package isn't already present + $pkg_count = ($config.packages | Where-Object { $_.name -ieq $KeyName } | Measure-Object).Count + $dev_count = ($config.devPackages | Where-Object { $_.name -ieq $KeyName } | Measure-Object).Count + + if ($pkg_count -ne 0 -or $dev_count -ne 0) + { + Write-Notice "The package '$($KeyName)' already exists in the Fudgefile" + return + } + + # attempt to install if specified + if ($Install) + { + Invoke-Chocolatey -Action 'install' -Package $KeyName -Source $Source -Version $KeyVer -LocalList $LocalList -Parameters $Parameters -Arguments $Arguments + } + + Write-Information "> Adding $($KeyName)@$($KeyVer) to Fudgefile" -NoNewLine + + # create package json object + $obj = @{ 'name' = $KeyName; } + + if (!(Test-Empty $KeyVer)) + { + $obj['version'] = $KeyVer + } + + if (!(Test-Empty $Source) -and ($Source -ine $Config.source)) + { + $obj['source'] = $Source + } + + # add to config + if ($Dev) + { + [array]$Config.devPackages += $obj + } + else + { + [array]$Config.packages += $obj + } + + # save new config back + $Config | ConvertTo-Json | Out-File -FilePath $Path -Encoding utf8 -Force + Write-Success " > added" + Write-Details " > $($Path)" +} + + +# removes a package from a fudgefile +function Invoke-FudgeRemove +{ + param ( + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Path, + + [Parameter(Mandatory=$true)] + [ValidateNotNullOrEmpty()] + [string] + $Key, + + $Config, + + $LocalList, + + [string] + $Parameters, + + [string] + $Arguments, + + [switch] + $Dev, + + [switch] + $Uninstall + ) + + # get name and version from key + $KeyName = Get-PackageFromKey -Key $Key + + # ensure package isn't already removed + $pkg_count = ($config.packages | Where-Object { $_.name -ieq $KeyName } | Measure-Object).Count + $dev_count = ($config.devPackages | Where-Object { $_.name -ieq $KeyName } | Measure-Object).Count + + if ($pkg_count -eq 0 -and $dev_count -eq 0) + { + Write-Notice "The package '$($KeyName)' is not present in the Fudgefile" + return + } + + # attempt to uninstall if specified + if ($Uninstall) + { + Invoke-Chocolatey -Action 'uninstall' -Package $KeyName -LocalList $LocalList -Parameters $Parameters -Arguments $Arguments + } + + Write-Information "> Removing $($KeyName) from Fudgefile" -NoNewLine + + # remove to config + if ($Dev) + { + $Config.devPackages = ($Config.devPackages | Where-Object { $_.name -ine $KeyName }) + } + else + { + $Config.packages = ($Config.packages | Where-Object { $_.name -ine $KeyName }) + } + + # save new config back + $Config | ConvertTo-Json | Out-File -FilePath $Path -Encoding utf8 -Force + Write-Success " > removed" + Write-Details " > $($Path)" +} + + +# returns the path for where a command is located +function Invoke-FudgeWhich +{ + param ( + [string] + $Key + ) + + if (Test-Empty $Key) + { + Write-Notice 'No command passed to find' + } + else + { + $path = (Get-Command -Name $Key -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Definition) + if (!(Test-Empty $path)) + { + Write-Host "> $($path)" + } + else + { + Write-Notice "Command not found: $($Key)" + } + } +} + + +# returns a source argument for chocolatey +function Format-ChocolateySource +{ + param ( + [string] + $Source + ) + + if (Test-Empty $Source) { + return [string]::Empty + } + + return "-s '$($Source)'" +} + + +# returns a params argument for chocolatey +function Format-ChocolateyParams +{ + param ( + [string] + $Parameters + ) + + if (Test-Empty $Parameters) { + return [string]::Empty + } + + return "--params='$($Parameters)'" +} + + +# returns a version argument for chocolatey +function Format-ChocolateyVersion +{ + param ( + [string] + $Version + ) + + # if the version is latest, return empty + if (Test-VersionPassedIsLatest -Version $Version) { + return [string]::Empty + } + + # return the specific version to install + return "--version $($Version)" +} + + +# returns the list of search returns from chocolatey +function Get-ChocolateySearchList +{ + param ( + [string] + $Key, + + [string] + $Source + ) + + # set the source if we have one + $Source = Format-ChocolateySource $Source + + $list = (choco search $Key $Source) + if (!$?) { + Write-Fail "$($list)" + throw 'Failed to retrieve search results from Chocolatey' + } + + return (Format-ChocolateyList -List $list) +} + + +# returns a list of packages installed localled +function Get-ChocolateyLocalList +{ + $list = (choco list -lo) + if (!$?) { + Write-Fail "$($list)" + throw 'Failed to retrieve local list of installed packages' + } + + return (Format-ChocolateyList -List $list) +} + + +# formats list/search results from chocolatey into a hash table +function Format-ChocolateyList +{ + param ( + [string[]] + $List + ) + + $map = @{} + + $List | ForEach-Object { + $row = $_ -ireplace ' Downloads cached for licensed users', '' + if ($row -imatch '^(?.*?)\s+(?[\d\.]+(\s+\[Approved\]){0,1}(\s+-\s+Possibly broken){0,1}).*?$') + { + $map[$Matches['name']] = $Matches['version'] + } + } + + return $map +} + +# get chocolatey search results, filtered by fudge +function Format-ChocolateySearchResults +{ + param ( + [Parameter()] + [string] + $Key, + + [Parameter()] + [int] + $Limit, + + [Parameter()] + [string] + $Source + ) + + # get search results from chocolatey + $results = Get-ChocolateySearchList -Key $Key -Source $Source + $OrganisedResults = @() + $count = 0 + + # if limit is 0, set to total results returned + if ($Limit -eq 0) { + $Limit = ($results | Measure-Object).Count + } + + # perfect match result + if ($results.ContainsKey($Key)) { + $count++ + $OrganisedResults += @{ 'Name' = $Key; 'Version' = $results[$Key]; } + $results.Remove($Key) + } + + # starts with for sub-packages + if ($count -lt $Limit) + { + $results.Clone().Keys | ForEach-Object { + if ($_.StartsWith("$($Key).")) { + $count++ + $OrganisedResults += @{ 'Name' = $_; 'Version' = $results[$_]; } + $results.Remove($_) + } + } + } + + # starts with for other packages + if ($count -lt $Limit) + { + $results.Clone().Keys | ForEach-Object { + if ($_.StartsWith($Key)) { + $count++ + $OrganisedResults += @{ 'Name' = $_; 'Version' = $results[$_]; } + $results.Remove($_) + } + } + } + + # contains the key + if ($count -lt $Limit) + { + $results.Clone().Keys | ForEach-Object { + if ($_.Contains($Key)) { + $count++ + $OrganisedResults += @{ 'Name' = $_; 'Version' = $results[$_]; } + $results.Remove($_) + } + } + } + + # levenshtein for remaining packages + if ($count -lt $Limit) + { + $leven = @() + + $results.Keys | ForEach-Object { + $leven += @{ 'Name' = $_; 'Version' = $results[$_]; 'Dist' = (Get-Levenshtein $Key $_) } + } + + $leven | Sort-Object { $_.Dist } | ForEach-Object { + $OrganisedResults += @{ 'Name' = $_.name; 'Version' = $_.Version; } + } + } + + return @($OrganisedResults) +} + + +# invokes fudge to search chocolatey for a package and display the results +function Invoke-Search +{ + param ( + [string] + $Key, + + [int] + $Limit, + + [string] + $Source, + + $LocalList + ) + + # validate the key/package name supplied + if ([string]::IsNullOrWhiteSpace($Key)) { + Write-Notice 'No search key provided' + return + } + + # validate the limit supplied + if ($Limit -lt 0) { + Write-Notice "Limit for searching must be 0 or greater, found: $($Limit)" + return + } + + # get search results from chocolatey + $results = Format-ChocolateySearchResults -Key $Key -Limit $Limit -Source $Source + + # display the search results + $results | Select-Object -First $Limit | ForEach-Object { + if ($LocalList.ContainsKey($_.Name)) + { + ($_.Version -imatch '^(?[\d\.]+).*?$') | Out-Null + + if ($Matches['version'] -eq $LocalList[$_.Name]) { + Write-Success ("{0,-30} {1,-40} (installed: {2})" -f $_.Name, $_.Version, $LocalList[$_.Name]) + } + else { + Write-Notice ("{0,-30} {1,-40} (installed: {2})" -f $_.Name, $_.Version, $LocalList[$_.Name]) + } + } + else { + Write-Host ("{0,-30} {1,-30}" -f $_.Name, $_.Version) + } + } + + # display the total + $total = ($results | Measure-Object).Count + Write-Notice "$($total) package(s) found" +} + + +# invokes fudge to display details of local packages +function Invoke-FudgeLocalDetails +{ + param ( + $Config, + + [string] + $Key, + + $LocalList, + + [switch] + $Dev, + + [switch] + $DevOnly + ) + + # maps for filtering packages + $installed = @{} + $updating = @{} + $missing = @{} + + # package map + $packages = @{} + + if (!$DevOnly) { + $Config.packages | ForEach-Object { $packages[$_.name] = $_.version } + } + + if ($Dev) { + $Config.devPackages | ForEach-Object { $packages[$_.name] = $_.version } + } + + # loop through packages + $packages.Keys | ForEach-Object { + if ([string]::IsNullOrWhiteSpace($Key) -or $_ -ieq $Key) + { + $version = $packages[$_] + + if ($LocalList.ContainsKey($_)) + { + if ($LocalList[$_] -ieq $version -or (Test-VersionPassedIsLatest $version)) { + $installed[$_] = $version + } + else { + $updating[$_] = $version + } + } + else { + $missing[$_] = $version + } + } + } + + if (![string]::IsNullOrWhiteSpace($Key) -and (Test-Empty $installed) -and (Test-Empty $updating) -and (Test-Empty $missing)) + { + $missing[$Key] = 'Not in Fudgefile' + } + + # output the details + Write-Host "Package details from Fudgefile:" + $installed.Keys | Sort-Object | ForEach-Object { Write-Success ("{0,-30} {1,-20} (installed: {2})" -f $_, $installed[$_], $LocalList[$_]) } + $updating.Keys | Sort-Object | ForEach-Object { Write-Notice ("{0,-30} {1,-20} (installed: {2})" -f $_, $updating[$_], $LocalList[$_]) } + $missing.Keys | Sort-Object | ForEach-Object { Write-Fail ("{0,-30} {1,-20}" -f $_, $missing[$_]) } +} + +function Get-ChocolateyLatestVersion +{ + param ( + [Parameter()] + [string] + $Package, + + [Parameter()] + [string] + $Source + ) + + $result = (Format-ChocolateySearchResults -Key $Package -Limit 1 -Source $Source | Select-Object -First 1) + if (!(Test-Empty $result)) { + return ($result.Version -split '\s+')[0] + } + + return 'latest' +} + +# invoke chocolate for the specific action +function Invoke-Chocolatey +{ + param ( + [Parameter()] + [string] + $Action, + + [Parameter()] + [string] + $Package, + + [Parameter()] + [string] + $Version, + + [Parameter()] + [string] + $Source, + + [Parameter()] + [string] + $Parameters, + + [Parameter()] + [string] + $Arguments, + + [Parameter()] + $LocalList + ) + + # if there was no package passed, return + if (Test-Empty $Package) { + return + } + + # set the source from which to install/upgrade/downgrade packages + $SourceArg = Format-ChocolateySource $Source + + # set the parameters to pass + $ParametersArg = Format-ChocolateyParams $Parameters + + # if the version is latest, attempt to get the real current version + $latest = Test-VersionPassedIsLatest -Version $Version + if ($latest) { + $Version = Get-ChocolateyLatestVersion -Package $Package -Source $Source + } + + $Version = Format-SafeguardString $Version 'latest' + + # build a version string, so if latest we can show the latest version + $VersionStr = "$($Version)" + if ($latest) { + $VersionStr = "latest [$($Version)]" + } + + # set the version arg to pass + $VersionArg = Format-ChocolateyVersion $Version + + # if action is 'install', do we need to install, or upgrade/downgrade based on version? + if (($Action -ieq 'install') -and ($null -ne $LocalList)) { + $Action = Get-InstallAction -Package $Package -Version $Version -LocalList $LocalList + } + + # attempt 3 times - mostly do to help prevent timeouts + foreach ($i in 1..3) + { + $success = $true + + # run chocolatey for appropriate action + switch ($Action.ToLowerInvariant()) + { + 'install' + { + if ($i -eq 1) { + Write-Information "> Installing $($Package) ($($VersionStr))" -NoNewLine + } + $output = Invoke-Expression "choco install $($Package) $($VersionArg) -y $($SourceArg) $($ParametersArg) $($Arguments)" + } + + 'upgrade' + { + if ($i -eq 1) { + Write-Information "> Upgrading $($Package) to ($($VersionStr))" -NoNewLine + } + $output = Invoke-Expression "choco upgrade $($Package) $($VersionArg) -y $($SourceArg) $($ParametersArg) $($Arguments)" + } + + 'downgrade' + { + if ($i -eq 1) { + Write-Information "> Downgrading $($Package) to ($($VersionStr))" -NoNewLine + } + $output = Invoke-Expression "choco upgrade $($Package) $($VersionArg) -y $($SourceArg) $($ParametersArg) $($Arguments) --allow-downgrade" + } + + 'uninstall' + { + if ($i -eq 1) { + Write-Information "> Uninstalling $($Package)" -NoNewLine + } + $output = Invoke-Expression "choco uninstall $($Package) -y -x $($ParametersArg) $($Arguments)" + } + + 'pack' + { + Write-Information "> Packing $($Package)" -NoNewLine + $path = Split-Path -Parent -Path $Version + $name = Split-Path -Leaf -Path $Version + + try { + Push-Location $path + $output = Invoke-Expression "choco pack $($name) $($Arguments)" + } + finally { + Pop-Location + } + } + } + + # determine if we failed, or if the exit code indicates a reboot is needed, + # or we've timed out and need to try + $lastcode = $LASTEXITCODE + if (!$? -or (@(0, 3010) -notcontains $lastcode)) + { + # flag as failure + $success = $false + + # check if the package timed-out, so we can retry again + if ($output -ilike '*the operation has timed out*') { + Start-Sleep -Seconds 5 + continue + } + + # double check that the error isn't a false positive + switch ($Action) + { + {($_ -ieq 'uninstall')} + { + $success = ($output -ilike '*has been successfully uninstalled*' -or $output -ilike '*Cannot uninstall a non-existent package*') + } + + {($_ -ieq 'install') -or ($_ -ieq 'upgrade') -or ($_ -ieq 'downgrade')} + { + $success = ($output -ilike '*has been successfully installed*' -or $output -ilike '*has been installed*') + } + } + } + + # if we get here, break out + break + } + + # if not successful, output the error details + if (!$success) { + Write-Fail " > failed" + Write-Notice "`n`n$($output)`n" + throw "Failed to $($Action) package: $($Package)" + } + + $actionVerb = ("$($Action)ed" -ireplace 'eed$', 'ed') + + if ($output -ilike '*exit code 3010*' -or $lastcode -eq 3010) + { + Write-Success " > $($actionVerb)" -NoNewLine + Write-Notice " > Reboot Required" + } + else { + Write-Success " > $($actionVerb)" + } +} \ No newline at end of file diff --git a/.ci/PSLint.ps1 b/.ci/PSLint.ps1 new file mode 100644 index 0000000000..e989bb044c --- /dev/null +++ b/.ci/PSLint.ps1 @@ -0,0 +1,94 @@ +Set-StrictMode -Version Latest + +$ErrorActionPreference = 'Stop' + +Import-Module -Name 'PsScriptAnalyzer' -Force +$base = $global:PSScriptRoot + +$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False + +function Test-Skip-File { + param ( + [Parameter(Mandatory)] + [string] + $filename + ) + + # Ignore imported files + # https://github.com/pypa/virtualenv/issues/1371 + # https://github.com/ogrisel/python-appveyor-demo/issues/55 + # https://github.com/MathieuBuisson/PowerShell-DevOps/issues/6 + return ( + $filename -eq 'Export-NUnitXml.psm1' -or + $filename -eq 'Fudge.ps1' -or + $filename -eq 'FudgeTools.psm1' -or + $filename -eq 'install.ps1' -or + $filename -eq 'activate.ps1' -or + $filename.EndsWith('.jj2')) +} + +$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False + +$UNIXEOL = "`n" + +function ReformatFile { + param ( + [Parameter(Mandatory)] + [string] + $filename, + + [Parameter(Mandatory)] + [string] + $eol + ) + $orig = Get-Content -Raw $filename + $content = Invoke-Formatter -ScriptDefinition $orig -Settings $base\PSScriptAnalyzerSettings.psd1 -ErrorAction Stop + + if ($content) { + $content = $content -split "`r?`n" + if (!($content[-1])) { + $content = $content[0..($content.length - 2)] + } + $content = (($content -join $eol) + $eol) + [System.IO.File]::WriteAllText($filename, $content, $Utf8NoBomEncoding) + } +} + +[Microsoft.Windows.PowerShell.ScriptAnalyzer.Generic.DiagnosticRecord[]]$ScriptAnalyzerResult = $null + +Get-ChildItem -Recurse -Force '*.ps*' | ForEach-Object { + $path = $_.FullName + + if ( $path.Contains('.git') -or (Test-Skip-File($_.Name)) ) { + Write-Output "Skipping $path" + } + else { + $NewResult = Invoke-ScriptAnalyzer -IncludeDefaultRules -Setting $base\PSScriptAnalyzerSettings.psd1 -Path $path + if ($ScriptAnalyzerResult) { + $ScriptAnalyzerResult += $NewResult + } + else { + $ScriptAnalyzerResult = $NewResult + } + + ReformatFile $path $UNIXEOL + } +} + +if ($env:APPVEYOR) { + Import-Module "$base\Export-NUnitXml.psm1" + Export-NUnitXml -ScriptAnalyzerResult $ScriptAnalyzerResult -Path ".\ScriptAnalyzerResult.xml" + (New-Object 'System.Net.WebClient').UploadFile( + "https://ci.appveyor.com/api/testresults/nunit/$($env:APPVEYOR_JOB_ID)", + (Resolve-Path .\ScriptAnalyzerResult.xml) + ) +} + +git diff + +if ($ScriptAnalyzerResult) { + Write-Output $ScriptAnalyzerResult + + # Failing the build + Throw 'Build failed because there was one or more PSScriptAnalyzer violation. See test results for more information.' +} diff --git a/.ci/PSScriptAnalyzerSettings.psd1 b/.ci/PSScriptAnalyzerSettings.psd1 new file mode 100644 index 0000000000..1199c79dad --- /dev/null +++ b/.ci/PSScriptAnalyzerSettings.psd1 @@ -0,0 +1,120 @@ +@{ + Severity = @('Error', 'Warning') + + IncludeDefaultRules = $true + + # List all rules here, otherwise they are excluded. + # Some are inactive because they need to be configured before usable. + + IncludeRules = @( + 'PSAlignAssignmentStatement' + 'PSAvoidAlias' + 'PSAvoidAssignmentToAutomaticVariable' + 'PSAvoidDefaultTrueValueSwitchParameter' + 'PSAvoidDefaultValueForMandatoryParameter' + 'PSAvoidEmptyCatchBlock' + 'PSAvoidGlobalAliases' + 'PSAvoidGlobalFunctions' + 'PSAvoidGlobalVars' + 'PSAvoidInvokingEmptyMembers' + 'PSAvoidNullOrEmptyHelpMessageAttribute' + 'PSAvoidPositionalParameters' + 'PSAvoidReservedCharInCmdlet' + 'PSAvoidReservedParams' + 'PSAvoidShouldContinueWithoutForce' + 'PSAvoidTrailingWhitespace' + 'PSAvoidUserNameAndPasswordParams' + 'PSAvoidUsingComputerNameHardcoded' + 'PSAvoidUsingConvertToSecureStringWithPlainText' + 'PSAvoidUsingDeprecatedManifestFields' + 'PSAvoidUsingInvokeExpression' + 'PSAvoidUsingPlainTextForPassword' + 'PSAvoidUsingWMICmdlet' + # Easier to use inside Fudge + # 'PSAvoidUsingWriteHost' + 'PSDscExamplesPresent' + 'PSDscTestsPresent' + 'PSMisleadingBacktick' + 'PSMissingModuleManifestField' + 'PSPlaceCloseBrace' + 'PSPlaceOpenBrace' + 'PSPossibleIncorrectComparisonWithNull' + 'PSPossibleIncorrectUsageOfAssignmentOperator' + 'PSPossibleIncorrectUsageOfRedirectionOperator' + 'PSProvideCommentHelp' + 'PSReturnCorrectTypesForDSCFunctions' + 'PSUseApprovedVerbs' + # Not suitable for other OS + # 'PSUseBOMForUnicodeEncodedFile' + 'PSUseCmdletCorrectly' + 'PSUseCompatibleCmdlets' + 'PSUseConsistentIndentation' + 'PSUseConsistentWhitespace' + 'PSUseCorrectCasing' + 'PSUseDeclaredVarsMoreThanAssignments' + 'PSUseIdenticalMandatoryParametersDSC' + 'PSUseIdenticalParametersDSC' + 'PSUseLiteralInitializerForHashtable' + 'PSUseOutputTypeCorrectly' + 'PSUsePSCredentialType' + 'PSUseShouldProcessCorrectly' + 'PSUseShouldProcessForStateChangingFunctions' + 'PSUseSingularNouns' + 'PSUseStandardDSCFunctionsInResource' + 'PSUseSupportsShouldProcess' + 'PSUseToExportFieldsInManifest' + 'PSUseUTF8EncodingForHelpFile' + 'PSUseVerboseMessageInDSCResource' + # Compatibility subdirectory + 'PSUseCompatibleCommands' + 'PSUseCompatibleSyntax' + 'PSUseCompatibleTypes' + ) + + # The Rules here are mostly manually imported from + # https://github.com/PowerShell/PSScriptAnalyzer/blob/master/Engine/Settings/CodeFormatting.psd1 + # except `PSUseConsistentWhitespace.CheckOperator` is disabled as incompatible + # https://github.com/PowerShell/PSScriptAnalyzer/issues/769 + + Rules = @{ + PSPlaceOpenBrace = @{ + Enable = $true + OnSameLine = $true + NewLineAfter = $true + IgnoreOneLineBlock = $true + } + + PSPlaceCloseBrace = @{ + Enable = $true + NewLineAfter = $true + IgnoreOneLineBlock = $true + NoEmptyLineBefore = $false + } + + PSUseConsistentIndentation = @{ + Enable = $true + Kind = 'space' + PipelineIndentation = 'IncreaseIndentationForFirstPipeline' + IndentationSize = 4 + } + + PSUseConsistentWhitespace = @{ + Enable = $true + CheckInnerBrace = $true + CheckOpenBrace = $true + CheckOpenParen = $true + CheckOperator = $true + CheckPipe = $true + CheckSeparator = $true + } + + PSAlignAssignmentStatement = @{ + Enable = $true + CheckHashtable = $false + } + + PSUseCorrectCasing = @{ + Enable = $true + } + } +} diff --git a/.ci/PrepareAVVM.ps1 b/.ci/PrepareAVVM.ps1 new file mode 100644 index 0000000000..65cfd5fc4a --- /dev/null +++ b/.ci/PrepareAVVM.ps1 @@ -0,0 +1,308 @@ +Set-StrictMode -Version latest + +$PACKAGES_ROOT = "$env:SYSTEMDRIVE\avvm" +$REGISTRY_ROOT = 'HKLM:\Software\AppVeyor\VersionManager' + +# GetInstalledProductVersion and Get-Version are copied from AVVM.ps1 +function GetInstalledProductVersion ($product) { + $productRegPath = "$REGISTRY_ROOT\$product" + if (Test-Path $productRegPath) { + $ver = Get-ItemProperty -Path $productRegPath + @{ + Product = $product + version = $ver.version + Platform = $ver.Platform + } + } +} + +function Get-Version ([string]$str) { + $versionDigits = $str.Split('.') + $version = @{ + major = -1 + minor = -1 + build = -1 + revision = -1 + number = 0 + value = $null + } + + $version.value = $str + + if ($versionDigits -and $versionDigits.Length -gt 0) { + $version.major = [int]$versionDigits[0] + } + if ($versionDigits.Length -gt 1) { + $version.minor = [int]$versionDigits[1] + } + if ($versionDigits.Length -gt 2) { + $version.build = [int]$versionDigits[2] + } + if ($versionDigits.Length -gt 3) { + $version.revision = [int]$versionDigits[3] + } + + for ($i = 0; $i -lt $versionDigits.Length; $i++) { + $version.number += [long]$versionDigits[$i] -shl 16 * (3 - $i) + } + + return $version +} + +function SetInstalledProductVersion { + param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $product, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $version, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $platform + ) + + $productRegPath = "$REGISTRY_ROOT\$product" + New-Item $productRegPath -Force | + Out-Null + + New-ItemProperty -Path $productRegPath -Name Version -PropertyType String -Value $version -Force | + Out-Null + + New-ItemProperty -Path $productRegPath -Name Platform -PropertyType String -Value $platform -Force | + Out-Null + + Write-Output "Creating $PACKAGES_ROOT\$product\$version\$platform" + + if (!(Test-Path "$PACKAGES_ROOT\$product\$version\$platform")) { + New-Item -ItemType Directory "$PACKAGES_ROOT\$product\$version\$platform" -Force > $null + } + + if (!(Test-Path "$PACKAGES_ROOT\$product\$version\$platform")) { + throw "Something went wrong" + } +} + +function Add-Product { + param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $product, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $version, + + [string] + $platform + ) + + $name = $product + + if (!$platform) { + $platform = $env:platform + } + + $installed = GetInstalledProductVersion $Product + + $in_program_files = $false + + $version_parts = Get-Version $version + + if (($product -eq 'jdk') -or ($product -eq 'node')) { + $in_program_files = $true + + if (($product -eq 'jdk') -and ($version_parts.minor -gt 8)) { + # 1.9.0 -> 9 + $shortver = $version_parts.minor + } + else { + $shortver = $version + } + + if ($platform -eq 'x86') { + $dir_name = "Program Files (x86)" + } + else { + $dir_name = "Program Files" + } + if ($product -eq 'jdk') { + $dir_name = "$dir_name\Java" + } + $dir_name = "$dir_name\$name" + } + else { + $shortver = "{0}{1}" -f ($version_parts.major, $version_parts.minor) + $dir_name = $name + } + + + if (Test-Path "$PACKAGES_ROOT\$name\$version\") { + Write-Output "$PACKAGES_ROOT\$name\$version exists; skipping" + + if ($product -eq 'node') { + $base = 'https://appveyordownloads.blob.core.windows.net/avvm' + $versions_content = (New-Object Net.WebClient).DownloadString("$base/$name-versions.txt") + Set-Content "$PACKAGES_ROOT\$name-versions.txt" $versions_content + return + } + } + + if ($installed) { + $current_version = $installed.version + if ((Get-Version $current_version).number -gt $version_parts.number) { + $versions_content = "$current_version +$version +lts:$version +stable:$version +current:$current_version +" + } + else { + $versions_content = "$version +$current_version +lts:$version +stable:$version +current:$current_version +" + } + } + else { + $versions_content = "$version +lts:$version +stable:$version +" + } + Set-Content "$PACKAGES_ROOT\$name-versions.txt" $versions_content + + Write-Output "Wrote $PACKAGES_ROOT\$name-versions.txt" + + if ($product -eq 'MinGW') { + if (Test-Path C:\avvm\MinGW) { + # This is only needed for 5.3.0 x86, only vs2015 image + Write-Output "Deleting pre-existing C:\avvm\MinGW ..." + Remove-Item C:\avvm\MinGW + } + } + + if ($installed) { + if ($installed.version -eq $version) { + if ($installed.Platform -eq $platform) { + Write-Output "$product $version $env:platform already set up" + return; + } + } + } + + New-Item -ItemType Directory "$PACKAGES_ROOT\$name" -Force > $null + + New-Item -ItemType Directory "$PACKAGES_ROOT\$name\$version" -Force > $null + + Write-Verbose "Looking for C:\$dir_name$shortver .." + + if (!(Test-Path "C:\$dir_name$shortver")) { + if (!(Test-Path "C:\$dir_name$shortver-x64")) { + throw "Cant find $dir_name$shortver or C:\$dir_name$shortver-x64" + } + + # Use x64 if x86 not available + $platform = 'x64' + } + + New-Item -ItemType Directory "$PACKAGES_ROOT\$name\$version\$platform" -Force > $null + + if ($in_program_files) { + $dir = "C:\$dir_name$shortver" + } + else { + Write-Output "Looking for C:\$name$shortver-x64 .." + + $dir = '' + if (Test-Path "C:\$dir_name$shortver-x64") { + if ($platform -eq "x64") { + $dir = "C:\$dir_name$shortver-x64" + } + else { + $dir = "C:\$dir_name$shortver" + } + } + + # TODO: Re-arrange to look only for the needed platform + if (!$dir) { + Write-Output "Looking for C:\$dir_name$shortver-x86 .." + } + + if ((!($dir)) -and (Test-Path "C:\$dir_name$shortver-x86")) { + if ($platform -eq "x86") { + $dir = "C:\$dir_name$shortver-x86" + } + else { + $dir = "C:\$dir_name$shortver" + } + } + } + + if (!($dir)) { + throw 'couldnt find x86/x64 directories for $name' + } + + if (!(Test-Path $dir)) { + throw "Cant find $dir" + } + + Write-Output "Coping $dir to $PACKAGES_ROOT\$name\$version\$platform\$name ..." + + Move-Item $dir "$PACKAGES_ROOT\$name\$version\$platform\$name" + + $files_content = ('$files = @{ "' + $name + '" = "C:\' + $name + '" }') + $files_path = "$PACKAGES_ROOT\$name\$version\$platform\files.ps1" + + Set-Content $files_path $files_content + + Write-Output "Wrote $files_path" +} + +function Initialize-Miniconda27 { + # The algorithm above to prepare products for switching depends on a version + # in the directory name, which works for all cases except for Miniconda27. + # Use this if you need Miniconda27. + Write-Output "Moving C:\Miniconda(-x64) to C:\Miniconda27(-x64)" + Move-Item C:\Miniconda C:\Miniconda27 + Move-Item C:\Miniconda-x64 C:\Miniconda27-x64 +} + +function Initialize-AppVeyorProductVersion { + # TODO: Only set up default versions for products which are needed + + # This tells Install-Product to load product versions from $PACKAGES_ROOT + $env:AVVM_DOWNLOAD_URL = '../../avvm/' + Set-ItemProperty -Path 'HKCU:\Environment' -Name 'AVVM_DOWNLOAD_URL' -Value $env:AVVM_DOWNLOAD_URL + + # node already set to 8.x + SetInstalledProductVersion go 1.12.3 x64 + + # todo: Handle Python27 and Ruby193 + + SetInstalledProductVersion miniconda 2.7.15 x86 + SetInstalledProductVersion miniconda3 3.7.0 x86 + + SetInstalledProductVersion jdk 1.6.0 x86 + SetInstalledProductVersion perl 5.20.1 x86 + # /C/MinGW is only set on vs2013 and vs2015 images, and it isnt desirable + # SetInstalledProductVersion MinGW 5.3.0 x86 + + # hg 4.1.1 is pre-installed, but it does not need to be replaced, + # and is instead reported as 5.0 +} + +$old_EAP = $ErrorActionPreference +$ErrorActionPreference = 'SilentlyContinue'; +Export-ModuleMember -Function Initialize-AppVeyorProductVersion, Add-Product, Initialize-Miniconda27 +$ErrorActionPreference = $old_EAP; diff --git a/.ci/appveyor.yml b/.ci/appveyor.yml index ea56a828c7..2936144eff 100644 --- a/.ci/appveyor.yml +++ b/.ci/appveyor.yml @@ -1,100 +1,184 @@ +image: Visual Studio 2015 + environment: global: - # SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the - # /E:ON and /V:ON options are not enabled in the batch script intepreter - # See: http://stackoverflow.com/a/13751649/163740 - CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\.ci\\run_with_env.cmd" PIP_CACHE_DIR: C:\pip_cache + PIP_DISABLE_PIP_VERSION_CHECK: 1 + # Needed if pip uninstall is used + PIP_YES: 1 + YARN_GPG: 'no' + FudgeCI: $(APPVEYOR_BUILD_FOLDER)\.ci + NUGET_EXE_NO_PROMPT: 1 + NUGET_HTTP_CACHE_PATH: C:\nuget_http_cache + CHOCO_CACHE_DIR: C:\choco_cache + MSYS_ROOT: C:\msys64 + MSYS_BIN: $(MSYS_ROOT)\usr\bin + JAVA_HOME: C:\jdk + MSSDK_ROOT: C:\Program Files\Microsoft SDKs + VS_ROOT: C:\Program Files (x86)\Microsoft Visual Studio + VIRTUALENV_NO_DOWNLOAD: 1 + VIRTUALENV_NO_PIP: 1 + VIRTUALENV_NO_SETUPTOOLS: 1 + # Uncomment to debug tox venv problems + # VIRTUALENV_VERBOSE: 1 + GOPATH: C:\gopath + # A problem with store_env_in_registry.py means this needs to be explicit + PSModulePath: >- + $(PSModulePath);C:\Program Files (x86)\WindowsPowerShell\Modules; + PATH: >- + C:\python;C:\python\Scripts;$(PATH);$(MSYS_BIN); + C:\tools\fudge\tools; + C:\ruby\bin; + C:\jdk\bin; + $(GOPATH)\bin; + $(APPVEYOR_BUILD_FOLDER)\node_modules\.bin; + $(APPVEYOR_BUILD_FOLDER)\vendor\bin; + JL_PKG: CoalaBears + JULIA_PROJECT: '@.' + BEAR_LIST: astyle cppcheck xmllint + TOX_TEST_SELECTORS: pip-noreqs-npm-gem-go-perl-php-java8-adhoc + TOX_FEATURES: check-noskip-codecov + TOXENV: py$(PYTHON_MINOR_NODOTS)-$(TOX_TEST_SELECTORS)-$(TOX_FEATURES)-win matrix: - - PYTHON: "C:\\Python34" - PYTHON_VERSION: "3.4.4" - PYTHON_ARCH: "32" - ruby_version: "24" + - PYTHON_VERSION: 3.6 + PYTHON_MINOR_NODOTS: 36 + - PYTHON_VERSION: 3.5 + PYTHON_MINOR_NODOTS: 35 + - PYTHON_VERSION: 3.4 + PYTHON_MINOR_NODOTS: 34 - - PYTHON: "C:\\Python34-x64" - PYTHON_VERSION: "3.4.4" - PYTHON_ARCH: "64" - ruby_version: "24-x64" +platform: + - x86 + - x64 cache: + - C:\nuget_http_cache + - C:\choco_cache - "C:\\pip_cache" - "node_modules" - "C:\\Users\\appveyor\\AppData\\Local\\coala-bears\\coala-bears" - "C:\\Users\\appveyor\\AppData\\Roaming\\nltk_data" + - "%LOCALAPPDATA%\\Composer" branches: except: - /^sils\/.*/ +# This forces unix style line endings in the clone, which is necessary to +# avoid warning regarding EOLs when running git diff on Windows +init: git config --global core.autocrlf false + install: - # Prepend newly installed Python to the PATH of this build (this cannot be - # done from inside the powershell script as it would require to restart - # the parent CMD process). - - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" - - "SET PATH=C:\\Program\ Files\\Java\\jdk1.7.0\\bin;%PATH%" + # Show initial state + - powershell -c "$PSVersionTable" + # Uncomment to debug + # printenv + - python --version + - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" + - python -m pip --version + - python -c "import setuptools; print(setuptools.__version__)" + - node --version + - which npm + - npm --version + - npm config get prefix + - ruby --version + - bundler --version + - go version + - which java + - java -version + - which javac + - javac -version + # JAVA_HOME set above is not populated yet + - echo %JAVA_HOME% + - ls %JAVA_HOME%/bin/java & exit 0 + - which perl + - perl --version + - which gcc & exit 0 + - gcc --version & exit 0 + - which cl & exit 0 + + # Stores environment in registry, with minor tweaks + - python .ci/store_env_in_registry.py + - refreshenv + + # Set up AppVeyor product versions, and install dummy choco entries for them + - ps: . .ci/FudgeCI.ps1; Initialize-AppVeyorVM + - refreshenv + - echo %PATH% + # Avoid tools finding and using MinGW + - mv C:\MinGW %TEMP% + # TODO: Avoid tools finding and using Visual Studio + + # Show updated SOE; versions should be as defined in top of the Fudgefile + - python --version + - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" + - node --version + - which npm + - npm --version + - npm config get prefix + - go version + - ruby --version + - which java + - java -version + - which javac + - javac -version + - ls %JAVA_HOME%/bin/java + - perl --version + - which ppm + - ppm --version + - which gcc & exit 0 + - gcc --version & exit 0 + + - "%MSYS_BIN%\\date.exe" + - cp .ci/choco.config + %ChocolateyInstall%\config\chocolatey.config + # Install remainer of the Fudgefile with chocolatey using Fudge + - ps: . .ci/Fudge.ps1 install + - refreshenv + - echo %PATH% - # language-tool needs the registry tweaked here since it determines the java - # version wrong (since appveyor has both, 1.7 and 1.8 in x86 and x64). - - "SET KEY_NAME=HKLM\\Software\\JavaSoft\\Java Runtime Environment" - - "REG add \"%KEY_NAME%\" /v CurrentVersion /t REG_SZ /d 1.7 /f" + - ps: if ($env:APPVEYOR_JOB_NUMBER -eq 1) { . .ci/PSLint.ps1 } # Check that we have the expected version and architecture for Python - "python --version" - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" - - "%CMD_IN_ENV% python -m pip install --upgrade setuptools==21 pip==9" - - "%CMD_IN_ENV% python -m pip install -r test-requirements.txt \ - -r requirements.txt -r docs-requirements.txt" - - ps: "Install-Product node ''" # Use latest node v5.x.x - - "npm config set loglevel warn" - - "sed -i '/alex/d' package.json" - - "sed -i '/coffeelint/d' package.json" - - "sed -i '/csscomb/d' package.json" - - "sed -i '/docker/d' package.json" - - "sed -i '/elm/d' package.json" - - "sed -i '/gherkin/d' package.json" - - "sed -i '/jshint/d' package.json" - - "sed -i '/remark/d' package.json" - - "sed -i '/postcss/d' package.json" - - "sed -i '/sass/d' package.json" - - "sed -i '/textlint/d' package.json" - - "sed -i '/tslint/d' package.json" - - "npm install" - - "SET PATH=node_modules\\.bin;%PATH%" - - "DEL node_modules\\.bin\\eslint*" - - # Commands for Ruby - - "sed -i '/sqlint/d' Gemfile" - - "SET PATH=C:\\Ruby%ruby_version%\\bin;%PATH%" - - "bundle install" + # Confirm other versions + - node --version + - which npm + - npm --version + - npm config get prefix + - go version + - ruby --version + - perl --version + - which java + - java -version + - which javac + - javac -version + - ls %JAVA_HOME%/bin/java + # Newly installed versions + - which composer & exit 0 + - composer --version & exit 0 + - ppm --version & exit 0 + + + - "%MSYS_BIN%\\date.exe" build: false # Not a C# project, build stuff at the test step instead. test_script: - # Force DOS format, as Checkstyle configs enable NewlineAtEndOfFile, - # which defaults to CRLF on Windows, and Appveyor CI ignores .gitattributes - # http://help.appveyor.com/discussions/problems/5687-gitattributes-changes-dont-have-any-effect - - unix2dos tests/java/test_files/CheckstyleGood.java - # Clang DLLs x64 were nowadays installed, but the x64 version hangs, so we - # exclude according tests. See https://github.com/appveyor/ci/issues/495 and - # https://github.com/appveyor/ci/issues/688 - - > - "%CMD_IN_ENV% python -m pytest - --cov -k "not ClangASTPrintBear and not ClangCloneDetectionBear and - not ClangComplexityBear and not ClangCountVectorCreator and - not ClangCountingConditions and not RuboCopBearTest and - not CSVLintBearTest" - - "%CMD_IN_ENV% python setup.py install" - - "%CMD_IN_ENV% python -m pip install \ - git+https://github.com/coala/coala" - - sed -i '/ShellCheckBear/d' .coafile - - "%CMD_IN_ENV% coala --ci" - -on_success: - - codecov - -on_failure: - - codecov + - python -m pip --version + - python -c "import setuptools; print(setuptools.__version__)" + + - "sed -i 's/^envlist.*$/envlist: %TOXENV%/' tox.ini" + - python -m tox --sitepackages + + - python setup.py install + + + - rm -rf .tox + + - coala --ci matrix: fast_finish: true diff --git a/.ci/choco.config b/.ci/choco.config new file mode 100644 index 0000000000..026715ec07 --- /dev/null +++ b/.ci/choco.config @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.ci/constants.ps1 b/.ci/constants.ps1 new file mode 100644 index 0000000000..f8979db466 --- /dev/null +++ b/.ci/constants.ps1 @@ -0,0 +1,9 @@ + +New-Variable -Scope global -Name project_name -Value 'coala-bears' +New-Variable -Scope global -Name pip_version -Value '9.0.1' +New-Variable -Scope global -Name setuptools_version -Value '21.2.2' + +$old_EAP = $ErrorActionPreference +$ErrorActionPreference = 'SilentlyContinue' +Export-ModuleMember -Variable name, pip_version, setuptools_version +$ErrorActionPreference = $old_EAP diff --git a/.ci/deps.ActivePerl-packages.ps1 b/.ci/deps.ActivePerl-packages.ps1 new file mode 100644 index 0000000000..dd3e21058c --- /dev/null +++ b/.ci/deps.ActivePerl-packages.ps1 @@ -0,0 +1,9 @@ +function Install-Perl-Modules { + cpanm --quiet --installdeps --with-develop --notest . + + Remove-Item -Force MYMETA.yml -ErrorAction Ignore +} + +function Invoke-ExtraInstallation { + Install-Perl-Modules +} diff --git a/.ci/deps.ActivePerl.ps1 b/.ci/deps.ActivePerl.ps1 new file mode 100644 index 0000000000..4464207b19 --- /dev/null +++ b/.ci/deps.ActivePerl.ps1 @@ -0,0 +1,11 @@ +Set-StrictMode -Version latest + +function Install-PPM-cpanm { + ppm install App-cpanminus +} + +function Complete-Install { + Install-PPM-cpanm +} + +Export-ModuleMember -Function Install-PPM-cpanm, Complete-Install diff --git a/.ci/deps.apt-new.sh b/.ci/deps.apt-new.sh new file mode 100755 index 0000000000..07b7225a63 --- /dev/null +++ b/.ci/deps.apt-new.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +set -e -x + +if [[ "$DIST" != "" && "$DIST" != "precise" && "$DIST" != "trusty" && "$DIST" != "debian-sid" ]]; then + echo "deb http://archive.ubuntu.com/ubuntu/ $DIST main universe" | sudo tee -a /etc/apt/sources.list.d/$DIST.list > /dev/null + echo "deb http://archive.ubuntu.com/ubuntu/ $DIST-updates main universe" | sudo tee -a /etc/apt/sources.list.d/$DIST.list > /dev/null + echo "deb http://archive.ubuntu.com/ubuntu/ $DIST-backports main universe" | sudo tee -a /etc/apt/sources.list.d/$DIST.list > /dev/null + sudo apt-get -y update + sudo apt-get -y --no-install-recommends install chktex cppcheck default-jre flawfinder indent libperl-critic-perl libxml2-utils mono-mcs php7.0-cli php-codesniffer verilator +fi + +# Change environment for flawfinder from python to python2 +if [[ -n "$(which flawfinder)" ]]; then + sed -e '1s/.*/#!\/usr\/bin\/env python2/' $(which flawfinder) > $HOME/bin/flawfinder; + chmod a+x $HOME/bin/flawfinder; +fi diff --git a/.ci/deps.apt_get.sh b/.ci/deps.apt_get.sh new file mode 100755 index 0000000000..4fe9bd53dd --- /dev/null +++ b/.ci/deps.apt_get.sh @@ -0,0 +1 @@ +.ci/deps.flawfinder.sh diff --git a/.ci/deps.bakalint.sh b/.ci/deps.bakalint.sh new file mode 100755 index 0000000000..363e822eae --- /dev/null +++ b/.ci/deps.bakalint.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e -x + +# VHDL Bakalint Installation +if [ ! -e ~/.local/bin/bakalint.pl ]; then + BAKALINT_VERSION=0.4.0 + wget "http://downloads.sourceforge.net/project/fpgalibre/bakalint/0.4.0/bakalint-0.4.0.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Ffpgalibre%2Ffiles%2Fbakalint%2F0.4.0%2F&ts=1461844926&use_mirror=netcologne" -O ~/bl.tar.gz + tar xf ~/bl.tar.gz -C ~/ + mv ~/bakalint-$BAKALINT_VERSION/bakalint.pl ~/.local/bin/ +fi diff --git a/.ci/deps.cabal.sh b/.ci/deps.cabal.sh index b8980b7741..d103d91f2d 100755 --- a/.ci/deps.cabal.sh +++ b/.ci/deps.cabal.sh @@ -7,6 +7,8 @@ cabal --version cabal update +cabal install happy + cabal install --only-dependencies --avoid-reinstalls # Force ghc-mod to resolve its Cabal version diff --git a/.ci/deps.composer-packages.ps1 b/.ci/deps.composer-packages.ps1 new file mode 100644 index 0000000000..9a99c0d5b2 --- /dev/null +++ b/.ci/deps.composer-packages.ps1 @@ -0,0 +1,9 @@ +function Install-Composer-DependList { + $composer_phar = "C:\ProgramData\ComposerSetup\bin\composer.phar" + + php.exe $composer_phar install +} + +function Invoke-ExtraInstallation { + Install-Composer-DependList +} diff --git a/.ci/deps.composer.sh b/.ci/deps.composer.sh new file mode 100755 index 0000000000..d8b6030dd6 --- /dev/null +++ b/.ci/deps.composer.sh @@ -0,0 +1,2 @@ +#!/bin/sh +composer install diff --git a/.ci/deps.dartsdk.sh b/.ci/deps.dartsdk.sh new file mode 100755 index 0000000000..2a671389e5 --- /dev/null +++ b/.ci/deps.dartsdk.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e -x + +# Dart Lint commands +if ! dartanalyzer -v &> /dev/null; then + wget -nc -O ~/dart-sdk.zip https://storage.googleapis.com/dart-archive/channels/stable/release/1.14.2/sdk/dartsdk-linux-x64-release.zip + unzip -n ~/dart-sdk.zip -d ~/ + cp -rp ~/dart-sdk/* ~/.local/ +fi diff --git a/.ci/deps.elm-platform-packages.ps1 b/.ci/deps.elm-platform-packages.ps1 new file mode 100644 index 0000000000..4a243ade76 --- /dev/null +++ b/.ci/deps.elm-platform-packages.ps1 @@ -0,0 +1,11 @@ +function Install-Elm-Format { + elm-compiler --version + wget https://github.com/avh4/elm-format/releases/download/0.8.1/elm-format-0.8.1-win-i386.zip + 7z e elm-format-0.8.1-win-i386.zip + mv elm-format.exe ./node_modules/.bin + touch elm-package.json +} + +function Invoke-ExtraInstallation { + Install-Elm-Format +} diff --git a/.ci/deps.elm.sh b/.ci/deps.elm.sh new file mode 100755 index 0000000000..a38617ed83 --- /dev/null +++ b/.ci/deps.elm.sh @@ -0,0 +1,5 @@ +if [ "$TRAVIS_ELM_VERSION" = "0.18.0" ]; then + touch elm-package.json +else + touch elm.json +fi diff --git a/.ci/deps.flawfinder.sh b/.ci/deps.flawfinder.sh new file mode 100755 index 0000000000..60d6b2d12a --- /dev/null +++ b/.ci/deps.flawfinder.sh @@ -0,0 +1,7 @@ +#!/bin/sh +# Change environment for flawfinder from python to python2 +if [ ! -e ~/.local/bin/flawfinder ]; then + cp /usr/bin/flawfinder ~/.local/bin/flawfinder + sed -i '1s/.*/#!\/usr\/bin\/env python2/' ~/.local/bin/flawfinder + chmod +x ~/.local/bin/flawfinder +fi diff --git a/.ci/deps.gem.sh b/.ci/deps.gem.sh new file mode 100755 index 0000000000..5ef51ca82d --- /dev/null +++ b/.ci/deps.gem.sh @@ -0,0 +1,3 @@ +if [ -z "$TRAVIS_LANGUAGE" ]; then + bundle install --path=vendor/bundle --binstubs=vendor/bin --jobs=8 --retry=3 +fi diff --git a/.ci/deps.generic.sh b/.ci/deps.generic.sh new file mode 100755 index 0000000000..5a3991a058 --- /dev/null +++ b/.ci/deps.generic.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# TODO implement DISABLE_BEARS here +if [ -n "$BEARS" ]; then + for item in $BEARS $BEAR_LIST; do + if [ -f ".ci/deps.$item.sh" ]; then + bash -e -x ".ci/deps.$item.sh" + fi + done +fi diff --git a/.ci/deps.ghc-mod.sh b/.ci/deps.ghc-mod.sh new file mode 100755 index 0000000000..75446c0e35 --- /dev/null +++ b/.ci/deps.ghc-mod.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# This causes ghc-mod to try to install them all +rm coala-bears.cabal diff --git a/.ci/deps.ghc-packages.ps1 b/.ci/deps.ghc-packages.ps1 new file mode 100644 index 0000000000..f590fcdf1e --- /dev/null +++ b/.ci/deps.ghc-packages.ps1 @@ -0,0 +1,7 @@ +function Install-Cabal-Deps { + cabal install --only-dependencies --avoid-reinstalls +} + +function Invoke-ExtraInstallation { + Install-Cabal-Deps +} diff --git a/.ci/deps.go.sh b/.ci/deps.go.sh index f42575be59..faa3a4cf70 100755 --- a/.ci/deps.go.sh +++ b/.ci/deps.go.sh @@ -7,3 +7,5 @@ go get -u github.com/alecthomas/gometalinter gometalinter --install go get -u github.com/BurntSushi/toml/cmd/tomlv + +.ci/deps.goreturns.sh diff --git a/.ci/deps.golang-packages.ps1 b/.ci/deps.golang-packages.ps1 new file mode 100644 index 0000000000..26d102032d --- /dev/null +++ b/.ci/deps.golang-packages.ps1 @@ -0,0 +1,10 @@ +function Install-GoMetalinter-Linters { + gometalinter.v2.exe '--install' +} + +function Invoke-ExtraInstallation { + Install-GoMetalinter-Linters + + go get -u github.com/BurntSushi/toml/cmd/tomlv + go get -u sourcegraph.com/sqs/goreturns +} diff --git a/.ci/deps.golang.ps1 b/.ci/deps.golang.ps1 new file mode 100644 index 0000000000..5adf27ab5b --- /dev/null +++ b/.ci/deps.golang.ps1 @@ -0,0 +1,18 @@ +Set-StrictMode -Version latest + +function Install-GoPM { + go.exe get -u github.com/gpmgo/gopm + go.exe install github.com/gpmgo/gopm +} + +function Install-GoMetaLinter { + go.exe get -u gopkg.in/alecthomas/gometalinter.v2 +} + +function Complete-Install { + Install-GoMetaLinter + + Install-GoPM +} + +Export-ModuleMember -Function Install-GoPM, Install-GoMetaLinter, Complete-Install diff --git a/.ci/deps.goreturns.sh b/.ci/deps.goreturns.sh new file mode 100755 index 0000000000..8ffaaddd48 --- /dev/null +++ b/.ci/deps.goreturns.sh @@ -0,0 +1,3 @@ +#!/bin/sh +go version +go get -u sourcegraph.com/sqs/goreturns diff --git a/.ci/deps.haskell.sh b/.ci/deps.haskell.sh new file mode 120000 index 0000000000..56766436e4 --- /dev/null +++ b/.ci/deps.haskell.sh @@ -0,0 +1 @@ +deps.cabal.sh \ No newline at end of file diff --git a/.ci/deps.infer.sh b/.ci/deps.infer.sh new file mode 100755 index 0000000000..f2c74bc304 --- /dev/null +++ b/.ci/deps.infer.sh @@ -0,0 +1,3 @@ +#!/bin/sh +INFER_URL="https://github.com/facebook/infer/releases/download/v$INFER_VERSION/infer-linux64-v$INFER_VERSION.tar.xz" +curl -sSL "$INFER_URL" | tar -C ~/ -xJ diff --git a/.ci/deps.java.sh b/.ci/deps.java.sh index 236b136d76..d499069ef6 100755 --- a/.ci/deps.java.sh +++ b/.ci/deps.java.sh @@ -1,22 +1,18 @@ -#!/bin/sh +#!/bin/bash -set -e -set -x +set -e -x -# PMD commands -PMD_VERSION=5.4.1 -if [ ! -e ~/.local/bin/pmd ]; then - wget -nc -O ~/pmd.zip https://github.com/pmd/pmd/releases/download/pmd_releases%2F5.4.1/pmd-bin-5.4.1.zip - unzip ~/pmd.zip -d ~/ - cp -r ~/pmd-bin-$PMD_VERSION/* ~/.local/ +if [ -n "$TRAVIS_JDK_VERSION" ]; then + jdk_version=${TRAVIS_JDK_VERSION#openjdk} + jdk_version=${jdk_version#oraclejdk} fi -# Tailor (Swift) commands -# Comment out the hardcoded PREFIX, so we can put it into ~/.local -if [ ! -e ~/.local/tailor/tailor-latest ]; then - curl -fsSL -o install.sh https://tailor.sh/install.sh - sed -i 's/read -r CONTINUE < \/dev\/tty/CONTINUE=y/;;s/^PREFIX.*/# PREFIX=""/;' install.sh - PREFIX=$HOME/.local bash ./install.sh - # Provide a constant path for the executable - ln -s ~/.local/tailor/tailor-* ~/.local/tailor/tailor-latest +if [ -z "$jdk_version" ] || [ $jdk_version -eq 8 ]; then + .ci/deps.tailor.sh fi + +if [ -z "$(which pmd || true)" ]; then + .ci/deps.pmd.sh +fi + +#bash -e -x .ci/deps.coala-bears.sh diff --git a/.ci/deps.julia.jl b/.ci/deps.julia.jl new file mode 100644 index 0000000000..ec2e28fa51 --- /dev/null +++ b/.ci/deps.julia.jl @@ -0,0 +1,7 @@ +if VERSION < v"0.7.0-DEV.5183" + Pkg.clone(pwd(), ENV["JL_PKG"]) + Pkg.build(ENV["JL_PKG"]) +else + using Pkg + Pkg.build() +end diff --git a/.ci/deps.julia.sh b/.ci/deps.julia.sh new file mode 100755 index 0000000000..7369a704b4 --- /dev/null +++ b/.ci/deps.julia.sh @@ -0,0 +1,12 @@ +#julia -e "Pkg.add(\"Lint\")" + +#julia -e "import Lint.lintfile" + +#mkdir deps +#echo 'Pkg.add("Lint")' > deps/build.jl + +#cat Manifest.toml || true + +# Normal package management not possible due to +# https://github.com/tonyhffong/Lint.jl/issues/254 +julia -e 'using Pkg; Pkg.add(PackageSpec(url="https://github.com/tonyhffong/Lint.jl", rev="v0.6.0"))' diff --git a/.ci/deps.lua.sh b/.ci/deps.lua.sh new file mode 100755 index 0000000000..6641e38e6c --- /dev/null +++ b/.ci/deps.lua.sh @@ -0,0 +1 @@ +luarocks install --local --deps-mode=none luacheck diff --git a/.ci/deps.minimal.sh b/.ci/deps.minimal.sh new file mode 120000 index 0000000000..e78c42d4d0 --- /dev/null +++ b/.ci/deps.minimal.sh @@ -0,0 +1 @@ +deps.generic.sh \ No newline at end of file diff --git a/.ci/deps.node_js.sh b/.ci/deps.node_js.sh new file mode 100755 index 0000000000..f4c6c14117 --- /dev/null +++ b/.ci/deps.node_js.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e -x + +# NPM commands +ALEX=$(which alex || true) +# Delete 'alex' if it is not in a node_modules directory, +# which means it is ghc-alex. +if [[ -n "$ALEX" && "${ALEX/node_modules/}" == "${ALEX}" ]]; then + echo "Removing $ALEX" + sudo rm -rf $ALEX +fi + +if [ -z "$TRAVIS_LANGUAGE" ]; then + npm install + npm list --depth=0 +fi + +# elm-format Installation +if [ ! -e ~/.local/bin/elm-format ]; then + curl -fsSL -o elm-format.tgz https://github.com/avh4/elm-format/releases/download/0.5.2-alpha/elm-format-0.17-0.5.2-alpha-linux-x64.tgz + tar -xvzf elm-format.tgz -C ~/.local/bin/ +fi diff --git a/.ci/deps.nodejs-packages.ps1 b/.ci/deps.nodejs-packages.ps1 new file mode 100644 index 0000000000..5db9b8d665 --- /dev/null +++ b/.ci/deps.nodejs-packages.ps1 @@ -0,0 +1,33 @@ +function Install-Node-Packages { + npm config set loglevel warn + + # pnpm setting + npm config set reporter silent + + cp -force package.json package.json.bak + + # elm-platform should be added to Fudgefile + # https://github.com/coala/coala-bears/issues/2924 + sed -i '/elm/d' package.json + + # textlint-plugin-asciidoc-loose requires a compiler + # and should be replaced with textlint-plugin-asciidoctor + sed -i '/textlint-plugin-asciidoc-loose/d' package.json + + # If gyp fails, use npm config python to help locate Python 2.7 + + $old_EAP = $ErrorActionPreference + $ErrorActionPreference = 'Continue' + + npm install + + $ErrorActionPreference = $old_EAP + + mv -force package.json.bak package.json + + npm config set reporter default +} + +function Invoke-ExtraInstallation { + Install-Node-Packages +} diff --git a/.ci/deps.npm.sh b/.ci/deps.npm.sh new file mode 100755 index 0000000000..5fdd18ffd2 --- /dev/null +++ b/.ci/deps.npm.sh @@ -0,0 +1 @@ +npm install diff --git a/.ci/deps.objective_c.sh b/.ci/deps.objective_c.sh new file mode 120000 index 0000000000..41a87f2ce0 --- /dev/null +++ b/.ci/deps.objective_c.sh @@ -0,0 +1 @@ +deps.tailor.sh \ No newline at end of file diff --git a/.ci/deps.opam.sh b/.ci/deps.opam.sh index 3dc030cac0..c003f80c35 100755 --- a/.ci/deps.opam.sh +++ b/.ci/deps.opam.sh @@ -24,7 +24,18 @@ if [ ! -e ~/infer-linux64-v0.7.0/infer/bin ]; then # See https://github.com/coala/coala-bears/issues/1763 opam pin add --yes --no-action reason 1.13.5 + opam pin add --yes --no-action javalib 2.3.1 + opam pin add --yes --no-action infer . + + opam init -y --reinit --disable-sandboxing + + cp ~/.opam/config ~/.opam/config.orig + cat ~/.opam/config + sed -i '/wrap-/d;/sandbox.sh/d' ~/.opam/config + + eval $(opam env) + opam install --deps-only --yes infer ./build-infer.sh java fi diff --git a/.ci/deps.pear.sh b/.ci/deps.pear.sh new file mode 100755 index 0000000000..2e97d5bf9d --- /dev/null +++ b/.ci/deps.pear.sh @@ -0,0 +1,2 @@ +pear install pear/PHP_CodeSniffer +phpenv rehash diff --git a/.ci/deps.perl.sh b/.ci/deps.perl.sh new file mode 120000 index 0000000000..5fdd9fa4b3 --- /dev/null +++ b/.ci/deps.perl.sh @@ -0,0 +1 @@ +deps.bakalint.sh \ No newline at end of file diff --git a/.ci/deps.php.ps1 b/.ci/deps.php.ps1 new file mode 100644 index 0000000000..1991fc9314 --- /dev/null +++ b/.ci/deps.php.ps1 @@ -0,0 +1,123 @@ +Set-StrictMode -Version latest + +function Get-PHP-Root { + $PHP_ROOT = '' + Get-ChildItem -Directory 'C:\tools\' -Filter 'php*' | + ForEach-Object { + $PHP_ROOT = $_.FullName.ToString() + + Write-Host "Setting PHP_ROOT='$PHP_ROOT'" + + $env:PHP_ROOT = $PHP_ROOT + Set-ItemProperty -Path 'HKCU:\Environment' -Name 'PHP_ROOT' -Value $PHP_ROOT + } + + if ($PHP_ROOT) { + return $PHP_ROOT + } + + throw ('php not found in ' + $list) +} + +# This is not needed with the recent choco php packages +function Initialize-PHP-Ini { + param ( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $PHP_ROOT + ) + + $PHP_INI = ($PHP_ROOT + '\php.ini') + + Write-Host 'Creating '$PHP_INI + + cp ($PHP_INI + '-production') $PHP_INI + sed -i 's/;date.timezone =.*/date.timezone=UTC/' $PHP_INI + + $list = (Get-ChildItem -Recurse $PHP_ROOT | + Out-String) + + Write-Verbose ('php dir ' + $list) + + Write-Host 'Enabling PHP openssl ...' + + $openssl_dll = '' + + Get-ChildItem $PHP_ROOT -Recurse -filter '*openssl*.dll' | + ForEach-Object { + $openssl_dll = $_.FullName + + Write-Host ' found '$openssl_dll + } + + if (! $openssl_dll) { + Write-Host ' not found' + + throw ('openssl not found in ' + $list) + } + + sed -i 's/;extension=openssl/extension=openssl/' $PHP_INI + + $dir = Split-Path -Path $openssl_dll + + Write-Host 'Setting extension directory: '$dir + + (Get-Content $PHP_INI) | + ForEach-Object { + $_ -replace ';extension_dir *=.*', ('extension_dir="' + $dir + '"') + } | + Set-Content $PHP_INI + + grep '^extension' $PHP_INI +} + +function Install-PEAR { + param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $PHP_ROOT + ) + + $PHP_INI = "$PHP_ROOT\php.ini" + + grep '^extension' $PHP_INI + + $PHP = "$PHP_ROOT\php.exe" + + Write-Output 'Installing PEAR' + + $pear_install_url = 'http://pear.php.net/install-pear-nozlib.phar' + $phar = $env:TMP + '\install-pear.phar' + + curl -o $phar $pear_install_url + + php.exe $phar -b $PHP_ROOT -d $PHP_ROOT -p $PHP +} + +function Sync-PEAR { + param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] + $PHP_ROOT + ) + + Write-Output 'Updating PEAR channel pear.php.net' + + php.exe $PHP_ROOT\pearcmd.php channel-update pear.php.net +} + +function Complete-Install { + $PHP_ROOT = Get-PHP-Root + + Write-Host "PHP_ROOT = $PHP_ROOT" + + $env:PATH = ($env:PATH + ';' + $PHP_ROOT) + + Install-PEAR $PHP_ROOT + Sync-PEAR $PHP_ROOT +} + +Export-ModuleMember -Function Get-PHP-Root, Initialize-PHP-Ini, Install-PEAR, Sync-PEAR diff --git a/.ci/deps.php.sh b/.ci/deps.php.sh new file mode 120000 index 0000000000..1133214314 --- /dev/null +++ b/.ci/deps.php.sh @@ -0,0 +1 @@ +deps.composer.sh \ No newline at end of file diff --git a/.ci/deps.pmd.sh b/.ci/deps.pmd.sh new file mode 100755 index 0000000000..bca89db899 --- /dev/null +++ b/.ci/deps.pmd.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e -x + +# PMD commands +PMD_VERSION=5.4.1 +if [ ! -e ~/.local/bin/pmd ]; then + wget -nc -O ~/pmd.zip https://github.com/pmd/pmd/releases/download/pmd_releases%2F5.4.1/pmd-bin-5.4.1.zip + unzip ~/pmd.zip -d ~/ + cp -r ~/pmd-bin-$PMD_VERSION/* ~/.local/ +fi diff --git a/.ci/deps.pyenv.sh b/.ci/deps.pyenv.sh new file mode 100755 index 0000000000..e315aa4e69 --- /dev/null +++ b/.ci/deps.pyenv.sh @@ -0,0 +1,17 @@ +set -e -x +if [ -z "$(which pyenv)" ]; then + git clone https://github.com/pyenv/pyenv.git ~/.pyenv; + export PYENV_ROOT="$HOME/.pyenv"; + export PATH="$PYENV_ROOT/bin:$PATH"; +fi +# https://github.com/doloopwhile/pyenv-register/pull/3 +git clone https://github.com/garyp/pyenv-register.git \ + $(pyenv root)/plugins/pyenv-register + +SYSTEM_PYTHONS=$(ls /usr/bin/python[23] \ + /usr/bin/python[23].[0-9] \ + /usr/bin/python[23].[0-9].[0-9] 2>/dev/null || true) +for pybin in $SYSTEM_PYTHONS $(which python2.7) $(which python3.6); do + pyenv register -f $pybin || true +done +set +x diff --git a/.ci/deps.python-packages.ps1 b/.ci/deps.python-packages.ps1 new file mode 100644 index 0000000000..97bc0f5fb6 --- /dev/null +++ b/.ci/deps.python-packages.ps1 @@ -0,0 +1,186 @@ +$ci_directory = $env:FudgeCI + +if (!($ci_directory)) { + $ci_directory = '.ci' +} + +. $ci_directory/constants.ps1 + +function Checkpoint-Pip-Constraints { + python -m pip freeze --all > constraints.txt +} + +function Install-Pip-Requirement { + param ( + [parameter(Mandatory, ValueFromPipeline)] + [string] + $requirement + ) + + if ($requirement.EndsWith('.txt')) { + python -m pip install --constraint constraints.txt -r $requirement + } + else { + python -m pip install --constraint constraints.txt $requirement.Split() + } +} + +function Install-Binary-Packages { + # Install lxml needed by for coala-bears as a wheel as libxml2 and libxslt + # headers and library files are not available, and STATIC_DEPS=true often + # results in linter problems due to different VS compilers and MS runtimes. + # Also use cffi wheel to avoid need for VS compilers + python -m pip install --prefer-binary cffi lxml + # pycparser not a wheel, but ensure it is installable before proceeding + # https://github.com/eliben/pycparser/issues/251 + python -m pip --verbose install pycparser + # pyrsistent->jsonschema->nbformat fails on old setuptools if no MS VC 9 + # https://github.com/tobgu/pyrsistent/issues/172 + python -m pip install -U setuptools + python -m pip install pyrsistent +} + +function Install-coala { + param ( + [string] + $stop_at + ) + + python -m pip install -U six pip==$pip_version setuptools==$setuptools_version + + if (!(Test-Path constraints.txt)) { + if ($stop_at -eq 'coala-bears') { + cp bear-requirements.txt constraints.txt + } + elseif (Test-Path 'requirements.txt') { + cp requirements.txt constraints.txt + } + else { + Checkpoint-Pip-Constraints + } + } + + if (!($stop_at -eq 'PyPrint')) { + Write-Output "Installing PyPrint" + Install-Pip-Requirement 'git+https://gitlab.com/coala/PyPrint#egg=PyPrint' + + if (!($stop_at -eq 'coala_utils')) { + Write-Output "Installing coala_utils" + + Checkpoint-Pip-Constraints + + Install-Pip-Requirement 'git+https://gitlab.com/coala/coala-utils#egg=coala-utils' + + if (!($stop_at -eq 'dependency-management')) { + Write-Output "Installing sarge with Windows support" + + Install-Pip-Requirement 'hg+https://bitbucket.org/jayvdb/sarge@win-reg-lookup#egg=sarge' + + if (!(Test-Path $env:TEMP/pm-master)) { + $PM_URL = "https://gitlab.com/coala/package_manager.git/" + git clone $PM_URL $env:TEMP/pm-master + } + rm $env:TEMP/pm-master/test-requirements.txt + rm $env:TEMP/pm-master/requirements.txt + touch $env:TEMP/pm-master/test-requirements.txt + touch $env:TEMP/pm-master/requirements.txt + + Install-Pip-Requirement "$env:TEMP/pm-master" + + if (!($stop_at -eq 'coala')) { + Write-Output "Installing coala" + + Checkpoint-Pip-Constraints + + Install-Pip-Requirement 'git+https://github.com/coala/coala#egg=coala' + + if (!($stop_at -eq 'coala-bears')) { + Write-Output "Installing coala-bears" + + Checkpoint-Pip-Constraints + + Install-Pip-Requirement 'git+https://github.com/coala/coala-bears#egg=coala-bears' + } + } + } + } + } +} + +function Install-Project-Dependency-Packages { + Write-Output "Installing dependencies of $project_name" + Install-coala $project_name +} + +function Install-Project { + if (Test-Path 'requirements.txt') { + Write-Output "Installing $project_name requirements.txt" + + Install-Pip-Requirement 'requirements.txt' + } + + if (Test-Path 'setup.py') { + Write-Output "Installing $project_name setup.py" + Install-Pip-Requirement '.' + } +} + +function Install-Test-Packages { + if (Test-Path docs-requirements.txt) { + Write-Output "Installing docs-requirements.txt" + + Checkpoint-Pip-Constraints + + Install-Pip-Requirement 'docs-requirements.txt' + } + + Checkpoint-Pip-Constraints + + Write-Output "Installing test-requirements.txt" + + Install-Pip-Requirement 'test-requirements.txt' + Install-Pip-Requirement 'pytest-spec' + + if ($project_name -eq 'coala-bears') { + Write-Output "Installing tox" + # Avoid previous cache entry for setuptools, as it + # causes a deserialisation error + python -m pip install -U --no-cache-dir setuptools + + Checkpoint-Pip-Constraints + + # tox 3.13 uses pluggy 0.12.0 which is incompatible with a pytest 3.6.4 + Install-Pip-Requirement 'tox~=3.12.0 tox-backticks' + } +} + +function Invoke-ExtraInstallation { + + $old_pip_check_flag = 0 + if ($env:PIP_DISABLE_PIP_VERSION_CHECK) { + $old_pip_check_flag = 1 + } + $env:PIP_DISABLE_PIP_VERSION_CHECK = 1 + + Install-Binary-Packages + + if (!($env:PYTHON_VERSION -eq '2.7')) { + Install-Project-Dependency-Packages + } + + Install-Project + + Install-Test-Packages + + if (Test-Path constraints.txt) { + Move-Item constraints.txt $env:TEMP -Force + } + + if (!$old_pip_check_flag) { + Remove-Item Env:\PIP_DISABLE_PIP_VERSION_CHECK + } +} + +$ErrorActionPreference = 'SilentlyContinue'; +Export-ModuleMember -Function Invoke-ExtraInstallation -ErrorAction:Ignore +$ErrorActionPreference = 'Continue'; diff --git a/.ci/deps.python36.sh b/.ci/deps.python36.sh new file mode 100755 index 0000000000..854d328705 --- /dev/null +++ b/.ci/deps.python36.sh @@ -0,0 +1,6 @@ +if [ -z "$(pyenv versions | fgrep '3.6' --max-count 1)" ]; then + git clone https://github.com/s1341/pyenv-alias.git \ + $(pyenv root)/plugins/pyenv-alias; + + VERSION_ALIAS=3.6 pyenv install 3.6.3; +fi diff --git a/.ci/deps.r b/.ci/deps.r new file mode 100644 index 0000000000..dd20444843 --- /dev/null +++ b/.ci/deps.r @@ -0,0 +1,2 @@ +install.packages("formatR") +install.packages("lintr") diff --git a/.ci/deps.r.cmd b/.ci/deps.r.cmd new file mode 100644 index 0000000000..928fee1180 --- /dev/null +++ b/.ci/deps.r.cmd @@ -0,0 +1,4 @@ +R.exe -e "install.packages('formatR')" +R.exe -e "install.packages('lintr')" + +R.exe -e "library(lintr)" -e "lintr::lint('.ci/deps.r')" diff --git a/.ci/deps.r.sh b/.ci/deps.r.sh index 8e32ff8057..9776608766 100755 --- a/.ci/deps.r.sh +++ b/.ci/deps.r.sh @@ -4,7 +4,7 @@ set -e set -x # R commands -echo '.libPaths( c( "'"$R_LIB_USER"'", .libPaths()) )' >> .Rprofile +echo '.libPaths( c( "/usr/local/lib/R/site-library", .libPaths()) )' >> ~/.Rprofile echo 'options(repos=structure(c(CRAN="http://cran.rstudio.com")))' >> .Rprofile -R -q -e 'install.packages("lintr")' -R -q -e 'install.packages("formatR")' +#R -q -e 'install.packages("lintr")' +#R -q -e 'install.packages("formatR")' diff --git a/.ci/deps.ruby-packages.ps1 b/.ci/deps.ruby-packages.ps1 new file mode 100644 index 0000000000..e4b54e1dba --- /dev/null +++ b/.ci/deps.ruby-packages.ps1 @@ -0,0 +1,27 @@ +function Install-Gemfile { + cp -force Gemfile Gemfile.bak + + # Unbuildable on Windows + sed -i '/sqlint/d' Gemfile + # https://github.com/coala/coala-bears/issues/2909 + sed -i '/csvlint/d' Gemfile + + # pusher-client 0.4.0 doesnt depend on json, which requires + # a compiler and the GMP library + Write-Output 'gem "pusher-client", "~>0.4.0", require: false' | + Out-File -FilePath Gemfile -Append -Encoding ascii + + # The build crawls if DevKit is included in the PATH + $old_PATH = $env:PATH + $env:PATH = ($env:ChocolateyToolsLocation + '\DevKit2\bin;' + $env:PATH) + + bundle install + + $env:PATH = $old_PATH + + mv -force Gemfile.bak Gemfile +} + +function Invoke-ExtraInstallation { + Install-Gemfile +} diff --git a/.ci/deps.ruby.ps1 b/.ci/deps.ruby.ps1 new file mode 100644 index 0000000000..429f970475 --- /dev/null +++ b/.ci/deps.ruby.ps1 @@ -0,0 +1,11 @@ +Set-StrictMode -Version latest + +function Install-Bundler { + gem install bundler +} + +function Complete-Install { + Install-Bundler +} + +Export-ModuleMember -Function Complete-Install diff --git a/.ci/deps.ruby.sh b/.ci/deps.ruby.sh new file mode 100755 index 0000000000..dcb844d7be --- /dev/null +++ b/.ci/deps.ruby.sh @@ -0,0 +1 @@ +gem install bundler -v 1.16.1 diff --git a/.ci/deps.sh b/.ci/deps.sh index 7722a69ea5..6e402ed5e3 100755 --- a/.ci/deps.sh +++ b/.ci/deps.sh @@ -3,58 +3,18 @@ set -e set -x -# NPM commands -ALEX=$(which alex || true) -# Delete 'alex' if it is not in a node_modules directory, -# which means it is ghc-alex. -if [[ -n "$ALEX" && "${ALEX/node_modules/}" == "${ALEX}" ]]; then - echo "Removing $ALEX" - sudo rm -rf $ALEX -fi -npm install -npm list --depth=0 - -# Ruby commands -bundle install --path=vendor/bundle --binstubs=vendor/bin --jobs=8 --retry=3 - -# Dart Lint commands -if ! dartanalyzer -v &> /dev/null; then - wget -nc -O ~/dart-sdk.zip https://storage.googleapis.com/dart-archive/channels/stable/release/1.14.2/sdk/dartsdk-linux-x64-release.zip - unzip -n ~/dart-sdk.zip -d ~/ - cp -rp ~/dart-sdk/* ~/.local/ -fi - -# VHDL Bakalint Installation -if [ ! -e ~/.local/bin/bakalint.pl ]; then - BAKALINT_VERSION=0.4.0 - wget "http://downloads.sourceforge.net/project/fpgalibre/bakalint/0.4.0/bakalint-0.4.0.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Ffpgalibre%2Ffiles%2Fbakalint%2F0.4.0%2F&ts=1461844926&use_mirror=netcologne" -O ~/bl.tar.gz - tar xf ~/bl.tar.gz -C ~/ - mv ~/bakalint-$BAKALINT_VERSION/bakalint.pl ~/.local/bin/ -fi - -# elm-format Installation -if [ ! -e ~/.local/bin/elm-format ]; then - curl -fsSL -o elm-format.tgz https://github.com/avh4/elm-format/releases/download/0.5.2-alpha/elm-format-0.17-0.5.2-alpha-linux-x64.tgz - tar -xvzf elm-format.tgz -C ~/.local/bin/ -fi - -# Julia commands -julia -e "Pkg.add(\"Lint\")" - -# Lua commands -luarocks install --local --deps-mode=none luacheck - -# PHPMD installation -if [ ! -e ~/.local/bin/phpmd ]; then - PHPMD='http://static.phpmd.org/php/latest/phpmd.phar' - mkdir -p ~/.local/bin - curl -fsSL -o ~/.local/bin/phpmd "$PHPMD" - chmod +x ~/.local/bin/phpmd -fi - -# Change environment for flawfinder from python to python2 -if [ ! -e ~/.local/bin/flawfinder ]; then - cp /usr/bin/flawfinder ~/.local/bin/flawfinder - sed -i '1s/.*/#!\/usr\/bin\/env python2/' ~/.local/bin/flawfinder - chmod +x ~/.local/bin/flawfinder -fi +.ci/deps.node_js.sh + +.ci/deps.gem.sh + +.ci/deps.dart.sh + +.ci/deps.perl.sh + +.ci/deps.julia.sh + +.ci/deps.lua.sh + +.ci/deps.php.sh + +.ci/deps.flawfinder.sh diff --git a/.ci/deps.tailor.sh b/.ci/deps.tailor.sh new file mode 100755 index 0000000000..2c681ab887 --- /dev/null +++ b/.ci/deps.tailor.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +set -e +set -x + +# Tailor (Swift) commands +# Comment out the hardcoded PREFIX, so we can put it into ~/.local +if [ ! -e ~/.local/tailor/tailor-latest ]; then + curl -fsSL -o install.sh https://tailor.sh/install.sh + sed -i 's/read -r CONTINUE < \/dev\/tty/CONTINUE=y/;;s/^PREFIX.*/# PREFIX=""/;' install.sh + PREFIX=$HOME/.local bash ./install.sh + # Provide a constant path for the executable + ln -s ~/.local/tailor/tailor-* ~/.local/tailor/tailor-latest +fi diff --git a/.ci/generate_bear_metadata.py b/.ci/generate_bear_metadata.py new file mode 100755 index 0000000000..4fdac6b746 --- /dev/null +++ b/.ci/generate_bear_metadata.py @@ -0,0 +1,515 @@ +#!/usr/bin/env python3 + +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License +# for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import argparse +import collections +import copy +import itertools +import logging +import os +import sys + +from ruamel.yaml import YAML, RoundTripDumper +from ruamel.yaml.comments import CommentedMap + +from coalib.bears.BEAR_KIND import BEAR_KIND +from coalib.collecting.Collectors import collect_bears + +from dependency_management.requirements.AnyOneOfRequirements import ( + AnyOneOfRequirements, +) +from dependency_management.requirements.DistributionRequirement import ( + DistributionRequirement, +) +from dependency_management.requirements.ExecutableRequirement import ( + ExecutableRequirement, +) + +DISABLED_BEARS = [] + +yaml = YAML(typ='rt') +yaml.default_flow_style = False +yaml.Dumper = RoundTripDumper + +BEAR_METADATA_YAML = 'bear-metadata.yaml' +BEAR_REQUIREMENTS_YAML = 'bear-requirements.yaml' +BEAR_LANGUAGES_YAML = 'bear-languages.yaml' + +_VERSION_OPERATORS = ('<', '>', '~', '=', '-', '!') + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + +PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) + +PROJECT_BEAR_DIR = os.path.abspath(os.path.join(PROJECT_DIR, 'bears')) + + +def get_args(): + parser = argparse.ArgumentParser( + description='This program generates a yaml requirement file for ' + 'installation of linters that are used by the bears.') + parser.add_argument('--output', '-o', + help='name of file to generate, or - for stdout', + default=os.path.join(PROJECT_DIR, + BEAR_REQUIREMENTS_YAML)) + parser.add_argument('--bear-dirs', '-d', nargs='+', metavar='DIR', + help='additional directories which may contain bears') + + parser.add_argument('--debug', action='store_true', + help='sets logging level to debug.') + parser.add_argument('--check', '-c', action='store_true', + help='performs a dry run, and reports differences.') + parser.add_argument('--update', '-u', action='store_true', + help='updates "bear-requirements.yaml" ' + 'instead of overwriting') + args = parser.parse_args() + + return args + + +def get_all_bears(bear_dirs): + local_bears, global_bears = collect_bears( + bear_dirs, + ['**'], + [BEAR_KIND.LOCAL, BEAR_KIND.GLOBAL], + warn_if_unused_glob=False) + return list(itertools.chain(local_bears, global_bears)) + + +def get_inherited_requirements(): + inherited_requirements = set() + + in_inherited = False + with open(os.path.join(PROJECT_DIR, 'requirements.txt'), 'r') as file: + for line in file.read().splitlines(): + if 'inherited' in line: + in_inherited = True + continue + if in_inherited: + if line.startswith('# '): + requirement = line[2:] + inherited_requirements.add(requirement.replace('-', '_')) + inherited_requirements.add(requirement.replace('_', '-')) + else: + in_inherited = False + + return inherited_requirements + + +INHERITED_PIP_REQUIREMENTS = get_inherited_requirements() + +REQUIREMENT_TYPES = collections.OrderedDict({ + 'PipRequirement': { + 'prefix': 'pip', + 'version_operator': '~=', + 'exclude': INHERITED_PIP_REQUIREMENTS, + }, + 'NpmRequirement': { + 'prefix': 'npm', + 'version_operator': '~', + }, + 'GemRequirement': { + 'prefix': 'gem', + 'version_operator': '~>', + }, + 'ComposerRequirement': { + 'prefix': 'composer', + 'version_operator': '~', + }, + 'CabalRequirement': { + 'prefix': 'cabal', + 'version_operator': '==', + }, + 'RscriptRequirement': { + 'prefix': 'r_script', + 'version_operator': '>=', + 'allow_missing_version': True, + }, + 'DistributionRequirement': { + 'prefix': 'distro', + 'version_operator': '>=', + 'allow_missing_version': True, + }, + 'ExecutableRequirement': { + 'prefix': 'exe', + 'version_operator': '>=', + 'allow_missing_version': True, + }, + 'JuliaRequirement': { + 'prefix': 'julia', + 'version_operator': '>=', + 'allow_missing_version': True, + }, + 'GoRequirement': { + 'prefix': 'go', + 'version_operator': '>=', + 'allow_missing_version': True, + }, + 'LuarocksRequirement': { + 'prefix': 'luarocks', + 'version_operator': '>=', + 'allow_missing_version': True, + }, + 'CondaRequirement': { + 'prefix': 'conda', + 'version_operator': '>=', + }, +}) + + +def helper(requirements, instance_dict): + for requirement in requirements: + if isinstance(requirement, AnyOneOfRequirements): + helper(requirement.requirements, instance_dict) + elif requirement.__class__.__name__ not in REQUIREMENT_TYPES: + raise RuntimeError( + '{} not configured'.format(repr(requirement))) + else: + instance_dict[type(requirement).__name__].add(requirement) + + +def get_all_requirements(bears): + bear_requirements = {} + + for bear in bears: + instance_dict = collections.defaultdict(set) + executable = None + if hasattr(bear, 'get_executable'): + executable = bear.get_executable() + if executable: + requirement = ExecutableRequirement(executable) + instance_dict['ExecutableRequirement'].add(requirement) + helper(bear.REQUIREMENTS, instance_dict) + bear_requirements[str(bear.name)] = instance_dict + + return bear_requirements + + +def _to_entry(requirement, default_operator): + entry = {} + + if isinstance(requirement, DistributionRequirement): + entry['packages'] = dict(sorted(requirement.packages.items())) + + if not requirement.version: + requirement_type = requirement.__class__.__name__ + settings = REQUIREMENT_TYPES[requirement_type] + if settings.get('allow_missing_version', False) is True: + return entry or None + else: + raise RuntimeError( + '{}({}) has no version'.format(requirement_type, + requirement.package)) + + if requirement.version[0].isdigit(): + entry['version'] = default_operator + requirement.version + else: + assert requirement.version[0] in _VERSION_OPERATORS, \ + 'Unknown version operator in %s' % requirement.version + entry['version'] = requirement.version + return entry + + +def _get_requirements(requirements, default_operator, exclude=[]): + return dict( + (requirement.package, _to_entry(requirement, default_operator)) + for requirement in requirements + if requirement.package not in exclude + ) + + +def _create_sorted_commented_map(input_dict): + if not input_dict: + return CommentedMap() + return CommentedMap(sorted(input_dict.items(), + key=lambda t: t[0])) + + +def get_languages(bears): + language_dict = {} + for bear in bears: + language_dict[str(bear.name)] = list(sorted(bear.LANGUAGES)) + for key, value in language_dict.items(): + if 'All' in value: + value.remove('All') + if 'default' in value: + value.remove('default') + if not value: + language_dict[key] = None + + return language_dict + + +def get_bear_requirement_metadata(bear_requirement_sets, storage=None, + old_labels=False): + if not storage: + storage = {} + + for requirement_type, settings in REQUIREMENT_TYPES.items(): + requirements = _get_requirements( + bear_requirement_sets[requirement_type], + settings['version_operator'], + settings.get('exclude', []) + ) + if not requirements: + continue + + label = settings['prefix'] + if old_labels: + label += '_requirements' + + storage[label] = requirements + + return storage + + +def get_bear_tags(bear, metadata): + tags = set() + + requirements = metadata['requirements'] or {} + for requirement_type, requirement_items in requirements.items(): + if requirement_type == 'distro': + for name, settings in requirement_items.items(): + tags.add(name) + tags.update(settings['packages']) + elif 'default-jre' in requirement_items: + tags.add('java') + + tags.add(requirement_type) + + # Extra pip dependencies does not make the bear a pip bear + # Allow for 'exe' dependency + if 'pip' in tags and tags not in (set(['pip']), set(['pip', 'exe'])): + tags.remove('pip') + + if not requirements: + tags.add('noreqs') + + tags.add(metadata['subdir'].replace('_', '-').replace('/', '-')) + + if bear.name == 'VHDLLintBear': + tags.add('perl') + + if 'exe' in requirements: + tags.update(requirements['exe'].keys()) + + if requirements.get('pip', {}).get('libclang-py3'): + tags.add('clang') + + if 'swift' in tags: + tags.add('java') + + # Special cases + if bear.name == 'InferBear': + # Processes java, but not written in Java + if 'java' in tags: + tags.remove('java') + tags.add('opam') + + elif bear.name == 'CPDBear': + # Has no requirements defined yet + tags.remove('noreqs') + tags.add('java') + + elif bear.name == 'LanguageToolBear': + # Has no requirements defined yet + tags.add('java') + tags.add('languagetool') + + elif bear.name == 'JavaPMDBear': + # Has no executable defined + tags.add('pmd') + + elif bear.name == 'CPDBear': + # Has no executable defined + tags.add('cpd') + + elif bear.name == 'VHDLLintBear': + # Has no executable defined + tags.add('bakalint') + + if bear.name in DISABLED_BEARS: + tags.add('disabled') + + return tags + + +def get_metadata(bears, bear_requirements, bear_languages): + # Add 1 for the path separator after bears + bear_dir_prefix_len = len(PROJECT_BEAR_DIR) + 1 + metadata = {} + for bear in bears: + name = str(bear.name) + requirements = bear_requirements[name] + requirement_metadata = get_bear_requirement_metadata(requirements) + if requirement_metadata: + requirement_metadata = _create_sorted_commented_map( + requirement_metadata) + else: + requirement_metadata = None + directory, filename = os.path.split(bear.source_location) + bears_subdirs = directory[bear_dir_prefix_len:].split(os.path.sep) + language_metadata = bear_languages[name] + if language_metadata: + assert sorted(language_metadata) == language_metadata + metadata[name] = { + 'name': name, + 'subdir': '/'.join(bears_subdirs), + 'filename': filename, + 'requirements': requirement_metadata, + 'languages': bear_languages[name], + } + tags = get_bear_tags(bear, metadata[name]) + metadata[name]['tags'] = sorted(tags) + + return metadata + + +def deep_update(target, src): + for key, value in src.items(): + if target.get(key) is None: + target[key] = copy.deepcopy(value) + else: + if isinstance(value, list): + target[key].extend(value) + elif isinstance(value, dict): + deep_update(target[key], value) + elif isinstance(value, set): + target[key].update(value.copy()) + else: + target[key] = copy.copy(value) + + +def deep_diff(target, src): + errors = [] + for key, value in src.items(): + if key not in target: + errors.append((key, 'Missing')) + elif target[key] != value: + if isinstance(value, list): + if [x for x in value if x not in target[key]]: + errors.append(key) + elif isinstance(value, dict): + if target[key] != value: + errors.append((key, deep_diff(target[key], value))) + elif isinstance(value, set): + if set(target[key]).symmetric_difference(value): + errors.append(key) + else: + errors.append((key, target[key])) + return errors + + +def merge_requirements(bear_requirements, exclude=['ExecutableRequirement']): + merged_requirements = collections.defaultdict(set) + + for bear, bear_requirement_sets in bear_requirements.items(): + for requirement_type, requirements in bear_requirement_sets.items(): + if requirement_type not in exclude: + for requirement in requirements: + merged_requirements[requirement_type].add(requirement) + + return merged_requirements + + +def sort_requirements(req_dict): + for _type, settings in REQUIREMENT_TYPES.items(): + key = settings['prefix'] + '_requirements' + req_dict[key] = _create_sorted_commented_map(req_dict.get(key)) + + +YAML_MISSING = ( + 'bear-requirements.yaml not found or is empty. ' + 'Please fetch it from the repository.' +) + + +if __name__ == '__main__': + args = get_args() + + logging.basicConfig( + level=logging.DEBUG if args.debug else logging.WARNING, + ) + + bear_dirs = [PROJECT_BEAR_DIR] + + if args.bear_dirs is not None: + bear_dirs.extend(args.bear_dirs) + + all_bears = get_all_bears(bear_dirs) + + bear_requirements = get_all_requirements(all_bears) + instance_dict = merge_requirements(bear_requirements) + + requirements = CommentedMap() + requirements.yaml_set_start_comment( + 'This is an automatically generated file.\n' + 'And should not be edited by hand.') + + requirements['overrides'] = 'package-manager-requirements.yaml' + get_bear_requirement_metadata(bear_requirement_sets=instance_dict, + storage=requirements, old_labels=True) + + if args.update or args.check: + input_file_path = os.path.join(PROJECT_DIR, BEAR_REQUIREMENTS_YAML) + + try: + input_file = open(input_file_path, 'r') + except FileNotFoundError: + print(YAML_MISSING) + exit(1) + + input_requirments = yaml.load(input_file) + + if not input_requirments: + print(YAML_MISSING) + exit(1) + + new_requirments = copy.deepcopy(input_requirments) + deep_update(new_requirments, requirements) + + if args.update: + requirements = new_requirments + + if args.check: + changed = deep_diff(input_requirments, new_requirments) + if changed: + yaml.dump(changed, sys.stdout) + exit(1) + + sort_requirements(requirements) + + if args.output == '-': + output = sys.stdout + else: + output = open(args.output, 'w') + + yaml.dump(requirements, output) + output.close() + + language_requirements = get_languages(all_bears) + bear_languages = language_requirements + language_requirements = _create_sorted_commented_map(language_requirements) + file_path = os.path.join(PROJECT_DIR, BEAR_LANGUAGES_YAML) + with open(file_path, 'w') as outfile: + yaml.indent(mapping=2, sequence=4, offset=2) + yaml.dump(language_requirements, outfile) + + metadata = get_metadata(all_bears, bear_requirements, bear_languages) + metadata = _create_sorted_commented_map(metadata) + file_path = os.path.join(PROJECT_DIR, BEAR_METADATA_YAML) + with open(file_path, 'w') as outfile: + yaml.indent(mapping=2, sequence=4, offset=2) + yaml.dump(metadata, outfile) diff --git a/.ci/generate_bear_requirements.py b/.ci/generate_bear_requirements.py deleted file mode 100755 index 1d9b0d871e..0000000000 --- a/.ci/generate_bear_requirements.py +++ /dev/null @@ -1,308 +0,0 @@ -#!/usr/bin/env python3 - -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU Affero General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License -# for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -import argparse -import collections -import copy -import itertools -import os -import sys - -from ruamel.yaml import YAML, RoundTripDumper -from ruamel.yaml.comments import CommentedMap - -from coalib.bears.BEAR_KIND import BEAR_KIND -from coalib.collecting.Collectors import collect_bears - -from dependency_management.requirements.AnyOneOfRequirements import ( - AnyOneOfRequirements) - -yaml = YAML(typ='rt') -yaml.default_flow_style = False -yaml.Dumper = RoundTripDumper - -BEAR_REQUIREMENTS_YAML = 'bear-requirements.yaml' -BEAR_LANGUAGES_YAML = 'bear-languages.yaml' - -_VERSION_OPERATORS = ('<', '>', '~', '=', '-', '!') - -THIS_DIR = os.path.dirname(os.path.abspath(__file__)) - -PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) - -PROJECT_BEAR_DIR = os.path.abspath(os.path.join(PROJECT_DIR, 'bears')) - -SUPPORTED_INSTANCES = ( - 'PipRequirement', - 'NpmRequirement', - 'GemRequirement', - 'ComposerRequirement', - 'CabalRequirement', - 'RscriptRequirement', -) - -INSTANCE_NAMES = ( - 'pip_requirements', - 'npm_requirements', - 'gem_requirements', - 'composer_requirements', - 'cabal_requirements', - 'r_script_requirements', -) - - -def get_args(): - parser = argparse.ArgumentParser( - description='This program generates a yaml requirement file for ' - 'installation of linters that are used by the bears.') - parser.add_argument('--output', '-o', - help='name of file to generate, or - for stdout', - default=os.path.join(PROJECT_DIR, - BEAR_REQUIREMENTS_YAML)) - parser.add_argument('--bear-dirs', '-d', nargs='+', metavar='DIR', - help='additional directories which may contain bears') - - parser.add_argument('--check', '-c', action='store_true', - help='performs a dry run, and reports differences.') - parser.add_argument('--update', '-u', action='store_true', - help='updates "bear-requirements.yaml" ' - 'instead of overwriting') - args = parser.parse_args() - - return args - - -def get_all_bears(bear_dirs): - local_bears, global_bears = collect_bears( - bear_dirs, - ['**'], - [BEAR_KIND.LOCAL, BEAR_KIND.GLOBAL], - warn_if_unused_glob=False) - return list(itertools.chain(local_bears, global_bears)) - - -def get_inherited_requirements(): - inherited_requirements = set() - - in_inherited = False - with open(os.path.join(PROJECT_DIR, 'requirements.txt'), 'r') as file: - for line in file.read().splitlines(): - if 'inherited' in line: - in_inherited = True - continue - if in_inherited: - if line.startswith('# '): - requirement = line[2:] - inherited_requirements.add(requirement.replace('-', '_')) - inherited_requirements.add(requirement.replace('_', '-')) - else: - in_inherited = False - - return inherited_requirements - - -def helper(requirements, instance_dict): - for requirement in requirements: - if isinstance(requirement, AnyOneOfRequirements): - helper(requirement.requirements, instance_dict) - elif any(type(requirement).__name__ == instance - for instance in SUPPORTED_INSTANCES): - instance_dict[type(requirement).__name__].add(requirement) - - -def get_all_requirements(bears): - instance_dict = collections.defaultdict(set) - - for bear in bears: - helper(bear.REQUIREMENTS, instance_dict) - - return instance_dict - - -def _to_entry(requirement, default_operator): - assert requirement.version, '%s has no version' % requirement.package - entry = {} - - if requirement.version[0].isdigit(): - entry['version'] = default_operator + requirement.version - else: - assert requirement.version[0] in _VERSION_OPERATORS, \ - 'Unknown version operator in %s' % requirement.version - entry['version'] = requirement.version - return entry - - -def _get_requirements(requirements, default_operator, exclude=[]): - return dict( - (requirement.package, _to_entry(requirement, default_operator)) - for requirement in requirements - if requirement.package not in exclude - ) - - -def get_gem_requirements(requirements): - return _get_requirements(requirements, '~>') - -def get_r_requirements(requirements): - return _get_requirements(requirements, '>=') - -def get_npm_requirements(requirements): - return _get_requirements(requirements, '~') - - -def get_composer_requirements(requirements): - return _get_requirements(requirements, '~') - - -def get_pip_requirements(requirements): - inherited_requirements = get_inherited_requirements() - return _get_requirements(requirements, '~=', inherited_requirements) - - -def get_cabal_requirements(requirements): - return _get_requirements(requirements, '==') - - -def _create_sorted_commented_map(input_dict): - return CommentedMap(sorted(input_dict.items(), - key=lambda t: t[0])) - - -def get_languages(bears): - language_dict = {} - for bear in bears: - language_dict[str(bear.name)] = list(sorted(bear.LANGUAGES)) - for key, value in language_dict.items(): - if 'All' in value: - value.remove('All') - if 'default' in value: - value.remove('default') - if not value: - language_dict[key] = None - - return language_dict - - -def deep_update(target, src): - for key, value in src.items(): - if key not in target: - target[key] = copy.deepcopy(value) - else: - if isinstance(value, list): - target[key].extend(value) - elif isinstance(value, dict): - deep_update(target[key], value) - elif isinstance(value, set): - target[key].update(value.copy()) - else: - target[key] = copy.copy(value) - - -def deep_diff(target, src): - errors = [] - for key, value in src.items(): - if key not in target: - errors.append((key, 'Missing')) - elif target[key] != value: - if isinstance(value, list): - if [x for x in value if x not in target[key]]: - errors.append(key) - elif isinstance(value, dict): - if target[key] != value: - errors.append((key, deep_diff(target[key], value))) - elif isinstance(value, set): - if set(target[key]).symmetric_difference(value): - errors.append(key) - else: - errors.append((key, target[key])) - return errors - - - -def sort_requirements(req_dict): - for key in INSTANCE_NAMES: - req_dict[key] = _create_sorted_commented_map(req_dict[key]) - - -if __name__ == '__main__': - args = get_args() - - bear_dirs = [PROJECT_BEAR_DIR] - - if args.bear_dirs is not None: - bear_dirs.extend(args.bear_dirs) - - all_bears = get_all_bears(bear_dirs) - - instance_dict = get_all_requirements(all_bears) - - requirements = CommentedMap() - requirements.yaml_set_start_comment( - 'This is an automatically generated file.\n' - 'And should not be edited by hand.') - - requirements['overrides'] = 'coala-build.yaml' - requirements['gem_requirements'] = get_gem_requirements( - instance_dict['GemRequirement']) - requirements['r_script_requirements'] = get_r_requirements( - instance_dict['RscriptRequirement']) - requirements['npm_requirements'] = get_npm_requirements( - instance_dict['NpmRequirement']) - requirements['pip_requirements'] = get_pip_requirements( - instance_dict['PipRequirement']) - requirements['composer_requirements'] = get_composer_requirements( - instance_dict['ComposerRequirement']) - requirements['cabal_requirements'] = get_cabal_requirements( - instance_dict['CabalRequirement']) - - if args.update or args.check: - input_file_path = os.path.join(PROJECT_DIR, BEAR_REQUIREMENTS_YAML) - - try: - input_file = open(input_file_path, 'r') - except FileNotFoundError: - print('bear-requirements.yaml not found. ' - 'Run without flags to generate it.') - exit(1) - - input_requirments = yaml.load(input_file) - - new_requirments = copy.deepcopy(input_requirments) - deep_update(new_requirments, requirements) - - if args.update: - requirements = new_requirments - - if args.check: - changed = deep_diff(input_requirments, new_requirments) - if changed: - yaml.dump(changed, sys.stdout) - exit(1) - - if args.output == '-': - output = sys.stdout - else: - output = open(args.output, 'w') - - language_requirements = get_languages(all_bears) - language_requirements = _create_sorted_commented_map(language_requirements) - file_path = os.path.join(PROJECT_DIR, BEAR_LANGUAGES_YAML) - with open(file_path, 'w') as outfile: - yaml.indent(mapping=2, sequence=4, offset=2) - yaml.dump(language_requirements, outfile) - - sort_requirements(requirements) - yaml.dump(requirements, output) - output.close() diff --git a/.ci/generate_coverage_thresholds.py b/.ci/generate_coverage_thresholds.py new file mode 100755 index 0000000000..0ebaa1dadb --- /dev/null +++ b/.ci/generate_coverage_thresholds.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +import json +import os +import sys + +IS_WIN = os.name == 'nt' + + +def main(): + args = sys.argv[1:] + thresholds = {} + for test in args: + bear = test.replace('tests/', 'bears/') + bear = bear.replace('Test.py', '.py').replace('*', '.*') + + threshold = 100 + if IS_WIN: + bear = bear.replace('/', '\\\\') + if 'CheckstyleBear' in bear or 'CMakeLintBear' in bear: + threshold = 90 + + thresholds[bear] = threshold + + with open('.threshold.json', 'w') as f: + json.dump(thresholds, f) + + +if __name__ == '__main__': + main() diff --git a/.ci/get_bears.py b/.ci/get_bears.py new file mode 100755 index 0000000000..7bdb67093e --- /dev/null +++ b/.ci/get_bears.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 + +import glob +import os +import os.path +import sys + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + +PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) + +PROJECT_BEAR_DIR = os.path.abspath(os.path.join(PROJECT_DIR, 'bears')) + + +def main(): + args = sys.argv[1:] + do_missing = do_all = False + if args[0] == '--all': + do_all = True + args = args[1:] + elif args[0] == '--missing': + do_missing = True + args = args[1:] + + if do_all or do_missing: + all_bears = glob.glob('{}/**/*.py'.format(PROJECT_BEAR_DIR)) + all_bears = [ + bear[len(PROJECT_DIR) + 1:].replace(os.path.sep, '/') + for bear in all_bears + if not bear.endswith('__init__.py') + ] + if do_all: + print(' '.join(sorted(all_bears))) + return + + all_bears = set(all_bears) + + bears = set() + + for arg in args: + if arg.startswith('tests/'): + bear = arg.replace('tests/', 'bears/') + bear = bear[:bear.find('Test')] + '.py' + else: + bear = arg + bears.add(bear) + + if do_missing: + bears = all_bears - bears + + print(' '.join(sorted(bears))) + + +if __name__ == '__main__': + main() diff --git a/.ci/get_codecov_tags.py b/.ci/get_codecov_tags.py new file mode 100755 index 0000000000..4175e74aaf --- /dev/null +++ b/.ci/get_codecov_tags.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 + +import sys + +# Tags like list, check and collectonly shouldnt appear on codecov +# but they also shouldnt be submitted to codecov, so they are not +# removed here as that would hide a bug in tox.ini +REJECT_TAGS = set(['codecov', 'skip', 'noskip']) + +env_factors = set(sys.argv[1].split('-')) + +print(','.join(sorted(env_factors - REJECT_TAGS))) diff --git a/.ci/get_cov_args.py b/.ci/get_cov_args.py new file mode 100755 index 0000000000..2331a3f7d7 --- /dev/null +++ b/.ci/get_cov_args.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import sys + + +def main(): + args = sys.argv[1:] + + bears = set() + + for test in args: + bear = test.replace('tests/', 'bears/') + bear = bear[:bear.find('Test')] + '.py' + bears.add(bear) + + print('--cov=' + ' --cov='.join(sorted(bears))) + + +if __name__ == '__main__': + main() diff --git a/.ci/get_tests.py b/.ci/get_tests.py new file mode 100755 index 0000000000..95895ff5eb --- /dev/null +++ b/.ci/get_tests.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 + +import glob +import os +import os.path +import sys + +import yaml + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + +PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) + +IS_WIN = os.name == 'nt' + +# Clang DLLs x64 were nowadays installed, but the x64 version hangs, so we +# exclude according tests. See https://github.com/appveyor/ci/issues/495 and +# https://github.com/appveyor/ci/issues/688 + +WINDOWS_BROKEN = set(( + 'bakalint', # not installed + 'phpcs', # https://github.com/coala/coala-bears/issues/2916 + 'pmd', 'cpd', # https://github.com/coala/coala-bears/issues/2908 + 'mcs', # choco mono isnt providing this in the PATH + 'tailor', # installer fails + 'shellcheck', # https://github.com/coala/coala-bears/issues/2920 + # pip + 'apertium_lint', # https://gitlab.com/jpsinghgoud/apertium-lint/issues/5 + 'bandit', # RuntimeError: Unable to output report using 'json' formatter + 'clang', # see note above + 'cppclean', # https://github.com/myint/cppclean/issues/120 + 'scspell', # https://github.com/coala/coala-bears/issues/2926 + 'vint', # https://github.com/Kuniwak/vint/issues/290 + # gem + 'csvlint', # https://github.com/coala/coala-bears/issues/2909 + 'sqlint', # https://github.com/coala/coala-bears/issues/2923 + # npm ; try different version + 'alex', # https://github.com/coala/coala-bears/issues/2922 + 'coffeelint', # Extra windows results + 'csscomb', # Linter errors + 'dockerfile_lint', # test case bug + 'elm-format', # https://github.com/coala/coala-bears/issues/2925 + 'gherkin', # result json decode exception + 'jshint', # test case bug + 'remark', # remark result text difference due to unicode + 'postcss', # https://github.com/coala/coala-bears/issues/2921 + 'sass-lint', # rule `!important not allowed` not trigger + 'textlint', # Unexpected extra result in test + # Also textlint plugin for asciidoc requires a compiler. + # and should be replaced with plugin asciidoctor which does + # not need a compiler + + # No information from linter bear + 'eslint', # Two of tests fail + 'tslint', # Half of tests fail +)) + + +DISABLE_BEARS = set(os.environ.get('DISABLE_BEARS', '').split(' ')) + + +def get_metadata(): + with open('bear-metadata.yaml') as f: + metadata = yaml.load(f, Loader=yaml.BaseLoader) + + return metadata + + +def get_bears(metadata, args, include_disabled=False): + bears = [] + + for arg in args: + for bear in metadata.values(): + tags = set(bear['tags']) + + if tags.intersection(DISABLE_BEARS): + tags.add('disabled') + + if IS_WIN and tags.intersection(WINDOWS_BROKEN): + tags.add('disabled') + + if arg in tags and (include_disabled or 'disabled' not in tags): + bears.append(bear) + + return bears + + +CLANG_EXTRA_TESTS = [ + 'tests/c_languages/codeclone_detection/ClangCountingConditionsTest.py', + 'tests/c_languages/codeclone_detection/ClangCountVectorCreatorTest.py', + 'tests/c_languages/codeclone_detection/CountVectorTest.py', + 'tests/c_languages/codeclone_detection/CloneDetectionRoutinesTest.py', +] + + +def get_tests(bears): + # Add 1 for the path separator after bears + project_dir_prefix_len = len(PROJECT_DIR) + 1 + + tests = set() + for bear in bears: + name = bear['name'] + if name.startswith('_'): + continue + subdir = bear['subdir'] + # A few test modules are FoobearSomethingTest.py, like + # PySafetyBearWithoutMockTest.py + testpath = os.path.join('tests', subdir, '{}*Test.py'.format(name)) + files = glob.glob(testpath) + for filename in files: + filename = filename.replace(os.path.sep, '/') + if filename.startswith('/'): + filename = filename[project_dir_prefix_len:] + tests.add(filename) + + if subdir == 'c_languages/codeclone_detection': + tests.update(CLANG_EXTRA_TESTS) + + elif subdir.startswith('vcs'): + tests.add('tests/vcs/CommitBearTest.py') + + return tests + + +def main(): + args = sys.argv[1:] + metadata = get_metadata() + + include_disabled = False + if args[0] == '--disabled': + include_disabled = True + args = args[1:] + + # TODO: pass through any args which are literal test filenames + + bears = get_bears(metadata, args, include_disabled) + tests = get_tests(bears) + print(' '.join(sorted(tests))) + + +if __name__ == '__main__': + main() diff --git a/.ci/go.GNUMakefile b/.ci/go.GNUMakefile new file mode 100644 index 0000000000..445af73832 --- /dev/null +++ b/.ci/go.GNUMakefile @@ -0,0 +1 @@ +install: diff --git a/.ci/refreshenv.sh b/.ci/refreshenv.sh new file mode 100644 index 0000000000..49701d4348 --- /dev/null +++ b/.ci/refreshenv.sh @@ -0,0 +1,29 @@ +# shellcheck disable=SC2059,SC2154 +# as shellcheck believes the $ in the heredoc are shell variables + +function refreshenv +{ + powershell -NonInteractive - <<\EOF +Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" + +Update-SessionEnvironment + +# Round brackets in variable names cause problems with bash +Get-ChildItem env:* | %{ + if (!($_.Name.Contains('('))) { + $value = $_.Value + if ($_.Name -eq 'PATH') { + $value = $value -replace ';',':' + } + Write-Output ("export " + $_.Name + "='" + $value + "'") + } +} | Out-File -Encoding ascii $env:TEMP\refreshenv.sh + +EOF + + # shellcheck disable=SC1090 + # as shellcheck can not follow this `source` + source "$TEMP/refreshenv.sh" +} + +alias RefreshEnv=refreshenv diff --git a/.ci/run_with_env.cmd b/.ci/run_with_env.cmd deleted file mode 100644 index da8e020a54..0000000000 --- a/.ci/run_with_env.cmd +++ /dev/null @@ -1,88 +0,0 @@ -:: To build extensions for 64 bit Python 3, we need to configure environment -:: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of: -:: MS Windows SDK for Windows 7 and .NET Framework 4 (SDK v7.1) -:: -:: To build extensions for 64 bit Python 2, we need to configure environment -:: variables to use the MSVC 2008 C++ compilers from GRMSDKX_EN_DVD.iso of: -:: MS Windows SDK for Windows 7 and .NET Framework 3.5 (SDK v7.0) -:: -:: 32 bit builds, and 64-bit builds for 3.5 and beyond, do not require specific -:: environment configurations. -:: -:: Note: this script needs to be run with the /E:ON and /V:ON flags for the -:: cmd interpreter, at least for (SDK v7.0) -:: -:: More details at: -:: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows -:: http://stackoverflow.com/a/13751649/163740 -:: -:: Author: Olivier Grisel -:: License: CC0 1.0 Universal: https://creativecommons.org/publicdomain/zero/1.0/ -:: -:: Notes about batch files for Python people: -:: -:: Quotes in values are literally part of the values: -:: SET FOO="bar" -:: FOO is now five characters long: " b a r " -:: If you don't want quotes, don't include them on the right-hand side. -:: -:: The CALL lines at the end of this file look redundant, but if you move them -:: outside of the IF clauses, they do not run properly in the SET_SDK_64==Y -:: case, I don't know why. -@ECHO OFF - -SET COMMAND_TO_RUN=%* -SET WIN_SDK_ROOT=C:\Program Files\Microsoft SDKs\Windows -SET WIN_WDK=c:\Program Files (x86)\Windows Kits\10\Include\wdf - -:: Extract the major and minor versions, and allow for the minor version to be -:: more than 9. This requires the version number to have two dots in it. -SET MAJOR_PYTHON_VERSION=%PYTHON_VERSION:~0,1% -IF "%PYTHON_VERSION:~3,1%" == "." ( - SET MINOR_PYTHON_VERSION=%PYTHON_VERSION:~2,1% -) ELSE ( - SET MINOR_PYTHON_VERSION=%PYTHON_VERSION:~2,2% -) - -:: Based on the Python version, determine what SDK version to use, and whether -:: to set the SDK for 64-bit. -IF %MAJOR_PYTHON_VERSION% == 2 ( - SET WINDOWS_SDK_VERSION="v7.0" - SET SET_SDK_64=Y -) ELSE ( - IF %MAJOR_PYTHON_VERSION% == 3 ( - SET WINDOWS_SDK_VERSION="v7.1" - IF %MINOR_PYTHON_VERSION% LEQ 4 ( - SET SET_SDK_64=Y - ) ELSE ( - SET SET_SDK_64=N - IF EXIST "%WIN_WDK%" ( - :: See: https://connect.microsoft.com/VisualStudio/feedback/details/1610302/ - REN "%WIN_WDK%" 0wdf - ) - ) - ) ELSE ( - ECHO Unsupported Python version: "%MAJOR_PYTHON_VERSION%" - EXIT 1 - ) -) - -IF %PYTHON_ARCH% == 64 ( - IF %SET_SDK_64% == Y ( - ECHO Configuring Windows SDK %WINDOWS_SDK_VERSION% for Python %MAJOR_PYTHON_VERSION% on a 64 bit architecture - SET DISTUTILS_USE_SDK=1 - SET MSSdk=1 - "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Setup\WindowsSdkVer.exe" -q -version:%WINDOWS_SDK_VERSION% - "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Bin\SetEnv.cmd" /x64 /release - ECHO Executing: %COMMAND_TO_RUN% - call %COMMAND_TO_RUN% || EXIT 1 - ) ELSE ( - ECHO Using default MSVC build environment for 64 bit architecture - ECHO Executing: %COMMAND_TO_RUN% - call %COMMAND_TO_RUN% || EXIT 1 - ) -) ELSE ( - ECHO Using default MSVC build environment for 32 bit architecture - ECHO Executing: %COMMAND_TO_RUN% - call %COMMAND_TO_RUN% || EXIT 1 -) diff --git a/.ci/store_env_in_registry.py b/.ci/store_env_in_registry.py new file mode 100755 index 0000000000..6f766d5c03 --- /dev/null +++ b/.ci/store_env_in_registry.py @@ -0,0 +1,85 @@ +import os + +KEY = 'System\\CurrentControlSet\\Control\\Session Manager\\Environment' + +DISCARD_KEYWORDS = tuple([ + 'awscli', + 'azure', + 'coverity', + 'dnvm', + 'mspec', + 'nunit', + 'odbc', + 'privateassemblies', + 'python27', + 'ruby193', + 'service fabric', + 'sql', + 'subversion', + 'testwindow', + 'xunit', +]) + +# TODOs: +# - Also get raw unexpanded values from registry to reduce length, and +# merge them with the current PATH which AppVeyor has populated +# - also fetch and filter user env vars, also de-duplicate wrt system vars +# (see https://github.com/reider-roque/pathvar) +# - Convert to Windows path names, not /c/foo/bar +# - Replace \\ and \.\ with \ + + +def get_tidy_path(original): + parts = [] + dups = set() + discard_matches = set() + + for part in original.split(';'): + # This will break directories with a trailing space + part = part.strip().rstrip('\\') + if part in parts: + dups.add(part) + continue + + part_lower = part.lower() + for word in DISCARD_KEYWORDS: + if word in part_lower: + discard_matches.add(word) + break + else: + parts.append(part) + + if dups: + print('Discarded dups:\n {}'.format('\n '.join(sorted(dups)))) + + if discard_matches: + print('Discarded keyword matches: ' + '{}'.format(', '.join(sorted(discard_matches)))) + + return ';'.join(parts) + + +def set_envvar_in_registry(envvar, value): + try: + import winreg + except ImportError: + import _winreg as winreg + + reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + with winreg.OpenKey(reg, KEY, 0, winreg.KEY_ALL_ACCESS) as regkey: + winreg.SetValueEx(regkey, envvar, 0, winreg.REG_EXPAND_SZ, value) + + +def do_all_environ(): + for key, value in os.environ.items(): + if key.upper() in ['PWD', 'OLDPWD', 'CWD']: + continue + + if key.upper() in ['PATH', 'PSMODULEPATH']: + value = get_tidy_path(value) + print('%s (len %d) set to:\n%s' % (key, len(value), value)) + set_envvar_in_registry(key, value) + + +if __name__ == '__main__': + do_all_environ() diff --git a/.coafile b/.coafile index 0cd53326c0..eb34428d39 100644 --- a/.coafile +++ b/.coafile @@ -1,7 +1,8 @@ [all] files = *.py, bears/**/*.py, tests/**/*.py, .moban.dt/*.py.in ignore = tests/python/test_files/pylint_test.py, tests/python/bandit_test_files/*, - tests/python/vulture_test_files/* + tests/python/vulture_test_files/*, + .ci/Fudge*.ps* max_line_length = 80 use_spaces = True @@ -70,6 +71,7 @@ ignore = *.py [all.yml] bears = YAMLLintBear files = *.yml, *.yaml, .ci/*.yml, tests/**/*.yml +ignore = MYMETA.yml [bash] bears = ShellCheckBear diff --git a/.moban.dt/requirements.txt.jj2 b/.moban.dt/requirements.txt.jj2 index 38b3c91f6f..0fc199a511 100644 --- a/.moban.dt/requirements.txt.jj2 +++ b/.moban.dt/requirements.txt.jj2 @@ -1,4 +1,4 @@ -# NOTE: This file is parsed by .ci/generate_bear_requirements.py +# NOTE: This file is parsed by .ci/generate_bear_metadata.py # Edit coala_dependency in coala-build.yaml git+https://github.com/coala/coala#egg=coala # Dependencies inherited from coala diff --git a/.moban.yaml b/.moban.yaml index 6ac3d2a1b3..2e648987a2 100644 --- a/.moban.yaml +++ b/.moban.yaml @@ -12,31 +12,91 @@ package_module: bears docs_source_dir: API docs_dir: docs test_prevent_skips: false +pip_constraints_file: bear-requirements.txt +appveyor_global_environment: + # Needed for Julia + JL_PKG: CoalaBears + JULIA_PROJECT: "'@.'" + BEAR_LIST: astyle cppcheck xmllint + TOX_TEST_SELECTORS: pip-noreqs-npm-gem-go-perl-php-java8-adhoc + TOX_FEATURES: check-noskip-codecov + TOXENV: py$(PYTHON_MINOR_NODOTS)-$(TOX_TEST_SELECTORS)-$(TOX_FEATURES)-win + +python_versions: + - 3.6 + - 3.5 + - 3.4.4 + +tox: true entry_points: coalabears: - coala_official_bears = bears +choco_requirements: + # overrides for package managers not yet used + visualstudio2017-workload-vctools: false + MinGW: false + miniconda3: false + R.Project: false # https://github.com/coala/coala-bears/issues/2919 + luarocks: false # https://github.com/coala/coala-bears/issues/2918 + julia: false # A bit tricky to get Lint.jl to build + ghc: false # Compiling from source broken on Travis + haskell-stack: false + rust: false # https://github.com/coala/coala-bears/issues/50 + bower: false + # extra deps for bears + elm-platform: false # https://github.com/coala/coala-bears/issues/2925 + astyle: true + cppcheck: true + xsltproc: true + ShellCheck: true # https://github.com/coala/coala-bears/issues/2920 + +requires: + - https://gitlab.com/coala/package_manager/ + configuration: template_dir: - .moban.dt/ - - .ci/ - ../coala-mobans/templates/ - ../coala-mobans/assets/ + - 'package_manager:' configuration: .moban.yaml configuration_dir: ../coala-mobans/ targets: - - setup.py: bears-setup.py.jj2 - - setup.cfg: bears-setup.cfg.jj2 + # setup.py: bears-setup.py.jj2 + # setup.cfg: bears-setup.cfg.jj2 + - Fudgefile: Fudgefile.jj2 + # Powershell Linting + - .ci/PSLint.ps1: ci/PSLint.ps1 + - .ci/Export-NUnitXml.psm1: ci/Export-NUnitXml.psm1 + - .ci/PSScriptAnalyzerSettings.psd1: ci/PSScriptAnalyzerSettings.psd1 + # Fudge + - .ci/Fudge.ps1: fudge/Fudge.ps1 + - .ci/Modules/FudgeTools.psm1: fudge/Modules/FudgeTools.psm1 + - .ci/FudgeCI.ps1: fudge/FudgeCI.ps1 + - .ci/PrepareAVVM.ps1: fudge/PrepareAVVM.ps1 + - .ci/FudgeGenerateFake.ps1: fudge/FudgeGenerateFake.ps1 + - .ci/FudgePostInstall.ps1: fudge/FudgePostInstall.ps1 + - .ci/store_env_in_registry.py: ci/store_env_in_registry.py + - .ci/refreshenv.sh: ci/refreshenv.sh + - .ci/constants.ps1: constants.ps1.jj2 + - .ci/deps.python-packages.ps1: fudge/deps.python-packages.ps1 - requirements.txt: requirements.txt.jj2 - - test-requirements.txt: bears-test-requirements.txt.jj2 + # test-requirements.txt: bears-test-requirements.txt.jj2 - bears/VERSION: VERSION.jj2 - Gemfile: Gemfile.jj2 - - DESCRIPTION: DESCRIPTION.jj2 - - package.json: package.json.jj2 - - bear-requirements.txt: bear-requirements.txt.jj2 + # Needs fix in pm repo + # DESCRIPTION: DESCRIPTION.jj2 + # needs fix to bear + # package.json: package.json.jj2 + # bear-requirements.txt: bear-requirements.txt.jj2 - .ci/appveyor.yml: ci/appveyor.yml.jj2 - - .ci/run_with_env.cmd: run_with_env.cmd + # from package manager + - .ci/deps.golang.ps1: .ci/deps.golang.ps1 + - .ci/deps.ActivePerl.ps1: .ci/deps.ActivePerl.ps1 + - .ci/deps.php.ps1: .ci/deps.php.ps1 + # Other - .ci/check_unsupported.sh: ci/check_unsupported.sh.jj2 - runtime.txt: runtime.txt - netlify.toml: docs/netlify.toml diff --git a/.travis.yml b/.travis.yml index 9544d7517b..56cdd9e148 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,10 @@ sudo: false - -language: python -python: - - 3.4 - - 3.5 - - 3.6 +python: 3.6 .disable_global: &disable_global addons: false cache: pip + python: false before_install: false install: false before_script: false @@ -19,15 +15,25 @@ python: deploy: false stages: + - test-first + - test-python + - test-languages + - test-other-versions + - test-travis-community-langs + - test-manual-langs + - test-apt + - test-failing + - moban - name: sentinel if: branch != master OR type = pull_request - - test - - moban + - name: test-master + if: branch = master AND type = push - name: unsupported if: branch = master AND type = push .check_moban: &check_moban <<: *disable_global + language: python python: 3.6 stage: moban install: pip install moban @@ -39,11 +45,13 @@ jobs: - stage: sentinel # All other jobs will be cancelled if the sentinel job fails <<: *disable_global + language: python python: 3.6 install: pip install -r requirements.txt ".[alldeps]" script: coala --non-interactive -V - python: 2.7 + language: python stage: unsupported env: PIP_NO_COMPILE=1 addons: false @@ -52,6 +60,7 @@ jobs: before_script: true script: .ci/check_unsupported.sh - python: 3.3 + language: python stage: unsupported env: PIP_NO_COMPILE=1 addons: false @@ -59,7 +68,9 @@ jobs: install: true before_script: true script: .ci/check_unsupported.sh + - python: 3.6 + language: python stage: moban addons: false cache: pip @@ -70,67 +81,360 @@ jobs: after_success: false after_failure: false if: branch = master AND type = push + + - stage: test-other-versions + os: windows + language: bash + python: 3.6.8 + env: + BEAR_LIST="astyle cppcheck xmllint" + TOX_TEST_SELECTORS=pip-noreqs-npm-gem-go-perl-php-java8-adhoc + cache: + directories: + - /C/nuget_http_cache + - /C/choco_cache + - /C/pip_cache + before_install: + - bash --version + - powershell -c "$PSVersionTable" + - powershell -command 'Set-MpPreference -DisableRealtimeMonitoring $true' + - powershell -command 'Set-MpPreference -DisableArchiveScanning $true' + - powershell -command 'Set-MpPreference -DisableBehaviorMonitoring $true' + + - export NUGET_HTTP_CACHE_PATH=/C/nuget_http_cache + - export CHOCO_CACHE_DIR=/C/choco_cache + - export PIP_CACHE_DIR=/C/pip_cache + + - export TOXENV=py36-${TOX_TEST_SELECTORS}-${TOX_FEATURES}-win + + - printenv + + - cp .ci/choco.config $ChocolateyInstall/config/chocolatey.config + - powershell -c "Set-ExecutionPolicy -ExecutionPolicy Unrestricted + -Scope LocalMachine" + + # TODO: move into post-install + # These are empty at this stage, and probably not used at all + # but pip complains about them not being in the PATH, which might + # be for --user support + - ls /C/Users/travis/AppData/Roaming/ || true + - ls /C/Users/travis/AppData/Roaming/Python/ || true + - ls /C/Users/travis/AppData/Roaming/Python/Python36/ || true + - ls /C/Users/travis/AppData/Roaming/Python/Python36/Scripts/ || true + - PYTHON_PATH=/C/Users/travis/AppData/Roaming/Python/Python36 + - export PATH="$PYTHON_PATH:$PYTHON_PATH/Scripts:$PATH" + - echo $PATH + + - python .ci/store_env_in_registry.py + + - source .ci/refreshenv.sh + + - refreshenv + + # TODO: Add support for disabling pre-installed vctools which is + # disabled in choco_requirements. Uninstalling vctools fails + + install: + - powershell -c ". .ci/Fudge.ps1 install" + - refreshenv + - taskkill -IM "gpg-agent.exe" || true + - python --version + + script: + - "sed -i 's/^envlist.*$/envlist: '$TOXENV/ tox.ini" + - python -m tox --sitepackages + - git checkout tox.ini + + - stage: test-python + + language: python + python: 3.6 + addons: + apt: + packages: clang-3.4 + - language: python + python: 3.5 + addons: + apt: + packages: clang-3.4 + - language: python + python: 3.4 + addons: + apt: + packages: clang-3.4 + + - stage: test-languages + + language: node_js + node_js: 10 + + - language: ruby + rvm: 2.4 + + - language: go + go: 1.11 + install: true + + - language: php + php: 7.2 + + - language: java + jdk: oraclejdk8 + + - language: perl + perl: 5.14 + + - language: scala + scala: 2.11 + + - stage: test-master + + # This is under other languages, as the only bear is tailor + # which is java, already covered above. Listed first to schedule + # it early onto osx, as they take a while to spin up + language: objective_c + os: osx + dist: false + + - stage: test-other-versions + + language: node_js + node_js: 9 + - language: node_js + node_js: 8 + - language: node_js + node_js: 7 + - language: node_js + node_js: 6 + + - language: ruby + rvm: 2.5 + env: DISABLE_BEARS=csvlint + - language: ruby + rvm: 2.3 + - language: ruby + rvm: 2.2 + - language: ruby + rvm: 2.1 + + - language: go + go: '1.10' + install: true + + - language: php + php: hhvm-3.18 + - language: php + php: 5.5 + + - language: scala + jdk: oraclejdk8 + scala: 2.12.2 + + - language: java + jdk: oraclejdk11 + env: DISABLE_BEARS="languagetool tailor" + # oraclejdk10 is EOL + - language: java + jdk: oraclejdk9 + env: DISABLE_BEARS="languagetool tailor" + + - language: java + jdk: openjdk11 + env: DISABLE_BEARS="languagetool tailor" + - language: java + jdk: openjdk10 + env: DISABLE_BEARS="languagetool tailor" + - language: java + jdk: openjdk9 + env: DISABLE_BEARS="languagetool tailor" + - language: java + jdk: openjdk7 + env: DISABLE_BEARS=tailor + + # Travis community supported languages + + - stage: test-travis-community-langs + language: csharp + mono: 5.20.1 + + - language: dart + dart: 1.15.0 + + - language: dart + dart: 1.14.2 + + - stage: test-travis-community-langs + language: julia + # default language is 0.6.4, and has problems with pre-installed Lint.jl + julia: 1.1 + env: JL_PKG=CoalaBears + # install not provided https://github.com/travis-ci/travis-build/pull/1571 + install: + - julia --color=yes .ci/deps.julia.jl + # Verify compilation works + - julia -e 'import Lint.lintfile' + + - language: julia + julia: 1.0 + env: JL_PKG=CoalaBears + install: + - julia --color=yes .ci/deps.julia.jl + - julia -e 'import Lint.lintfile' + + - stage: test-travis-community-langs + language: julia + julia: 0.7.0 + env: JL_PKG=CoalaBears + install: + - julia --color=yes .ci/deps.julia.jl + - julia -e 'import Lint.lintfile' + + - stage: test-first + language: r + r: devel + r_packages: + - formatR + - lintr + + - language: r + r: release + - language: r + r: oldrel + + # coala hacks for extra languages + - stage: test-manual-langs + + language: lua + env: BEARS=lua + addons: + apt: + packages: + - luarocks + + - language: generic + env: BEARS=opam INFER_VERSION=0.7.0 + PATH=$PATH:$HOME/infer-linux64-v$INFER_VERSION/infer/bin + addons: + apt: + sources: + - avsm + packages: + - camlp4-extra + - ocaml + - opam + + # This is in manual languages, as language: haskell isnt working yet + - stage: test-manual-langs + language: generic + dist: xenial + env: DIST=xenial BEARS=adhoc BEAR_LIST="ghc-mod hlint" + # ghc-mod needs parts of ghc, specifically at least /usr/lib/ghc/settings + # ghc-mod needs cabal-install + # shellcheck is failing in xenial + addons: + apt: + packages: + - cabal-install + - ghc + - ghc-mod + - hlint + + # BEARS=apt_get rather than 'apt' to avoid invoking .deps.apt.sh + # which is the old circle init + - stage: test-apt + language: generic + dist: xenial + env: DIST=xenial BEARS=apt_get DISABLE_BEARS=shellcheck + addons: + apt: + packages: + - chktex + - cppcheck + - devscripts + - flawfinder + - indent + - libperl-critic-perl + - libxml2-utils + - mono-mcs + - php7.0-cli + - phpmd + - php-codesniffer + - verilator + + - stage: test-apt + language: generic + dist: xenial + env: DIST=xenial BEARS=adhoc BEAR_LIST="bakalint default-jre go" + # ruby will match rubocop which isnt available for xenial + + # php will pick language, and pre-install php-codesniffer + # maybe can disable in deps.php.sh + # better is move lang php to composer + addons: + apt: + packages: + - chktex + - cppcheck + - devscripts + - flawfinder + - indent + - libperl-critic-perl + - libxml2-utils + - mono-mcs + - php7.0-cli + - phpmd + - php-codesniffer + - verilator + + - stage: test-apt + language: generic + env: DIST=trusty BEARS=apt_get + addons: + apt: + sources: + - sourceline: # astyle + deb http://ppa.launchpad.net/cs50/ppa/ubuntu trusty main + key_url: + https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x5BDA2E974A0E822C + packages: + - astyle + - chktex + - cppcheck + - devscripts + - flawfinder + - indent + - libperl-critic-perl + - libxml2-utils + - mono-mcs + - php5-cli + - php-codesniffer + - shellcheck + - verilator + + - stage: test-apt + language: generic + env: DIST=precise BEARS=apt_get + dist: precise + addons: + apt: + packages: + - chktex + - cppcheck + - devscripts + - flawfinder + - indent + - libperl-critic-perl + - libxml2-utils + - mono-mcs + - php5-cli + - python3 + - verilator + - *check_moban allow_failures: - *check_moban -dist: trusty - -.apt_sources: &apt_sources - - ubuntu-toolchain-r-test - # avsm # OPAM stable - - hvr-ghc # Haskell - - sourceline: # R - deb https://cloud.r-project.org/bin/linux/ubuntu trusty-cran35/ - key_url: - https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x51716619E084DAB9 - - sourceline: # Julia - deb http://ppa.launchpad.net/staticfloat/juliareleases/ubuntu trusty main - key_url: - https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xCF979FFA3D3D3ACC - - sourceline: # astyle - deb http://ppa.launchpad.net/cs50/ppa/ubuntu trusty main - key_url: - https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x5BDA2E974A0E822C - -addons: - apt: - sources: *apt_sources - packages: - - aspcud - - astyle - - cabal-install-1.24 - - chktex - - clang-3.4 - - cppcheck - - devscripts - - flawfinder - - gfortran - - ghc - - happy - - indent - - julia - - libarpack2 - - libblas-dev - - libcolamd2.8.0 - - libfftw3-3 - - liblapack-dev - - libopenblas-base - - libpaper-utils - - libperl-critic-perl - - libumfpack5.6.2 - - libxml2-utils - - luarocks - - mercurial - # menhir - - mono-mcs - # ocaml - # opam - - php-codesniffer - - r-base - - verilator - -cache: +.cache: pip: true directories: - docs/_build @@ -147,6 +451,7 @@ cache: # coala managed data - ~/nltk_data # Installed linters + # Check this version works - ~/infer-linux64-v$INFER_VERSION - ~/.local/ @@ -154,47 +459,96 @@ env: global: - TERM=dumb - R_LIB_USER=~/R/Library + - R_PROFILE=~/.Rprofile - LINTR_COMMENT_BOT=false - CABAL_VERSION=1.24 - - INFER_VERSION=0.7.0 - - PATH="$HOME/.local/bin:/opt/cabal/$CABAL_VERSION/bin:$PATH:$TRAVIS_BUILD_DIR/node_modules/.bin:$TRAVIS_BUILD_DIR/vendor/bin:$HOME/.cabal/bin:$HOME/infer-linux64-v$INFER_VERSION/infer/bin:$HOME/.local/tailor/tailor-latest/bin:$HOME/.luarocks/bin" + - PATH="$HOME/.nuget/packages/fudge/1.3.0/tools:$HOME/.local/bin:/opt/cabal/$CABAL_VERSION/bin:$PATH:$TRAVIS_BUILD_DIR/node_modules/.bin:$TRAVIS_BUILD_DIR/vendor/bin:$HOME/.cabal/bin:$HOME/.local/tailor/tailor-latest/bin:$HOME/.luarocks/bin" + # These are only needed by Windows + - NUGET_EXE_NO_PROMPT=true + - VIRTUALENV_NO_DOWNLOAD=1 + - VIRTUALENV_NO_PIP=1 + - VIRTUALENV_NO_SETUPTOOLS=1 + - VIRTUALENV_VERBOSE=1 + - PIP_DISABLE_PIP_VERSION_CHECK=1 + - PIP_YES=1 + - FudgeCI=${TRAVIS_BUILD_DIR}/.ci/ + - TOX_FEATURES=check-noskip-codecov before_install: - # Install latest stable version of Go using gimme - - gimme 1.11.5 > setup_go_root.sh - - source setup_go_root.sh - - nvm install 6.10.2 - # Remove Ruby directive from Gemfile as this image has 2.2.5 - - sed -i '/^ruby/d' Gemfile - - .ci/deps.sh - - .ci/deps.go.sh - - .ci/deps.cabal.sh - - .ci/deps.r.sh - # .ci/deps.opam.sh - - .ci/deps.java.sh + - printenv + - mkdir -p ~/bin ~/.local/bin + + - if [ -z "$GOPATH" ]; then + export GOPATH="/home/travis/gopath"; + fi + # TODO: implement DISABLE_BEARS globally, esp deps.generic.sh + + - if [ -f .ci/deps.$TRAVIS_LANGUAGE.sh ]; then + bash -e -x .ci/deps.$TRAVIS_LANGUAGE.sh; + fi + + - python --version + # ~/bin is uncached; ~/local/bin is cached; we dont want python/pip in latter + - rm -f ~/.local/bin/python* ~/.local/bin/pip* + + - source .ci/deps.pyenv.sh + - pyenv versions + - pyenv versions --bare + # node-gpy needs py27 + - if [ "$TRAVIS_LANGUAGE" = "node_js" ]; then pyenv global 2.7; hash -r; fi + - if [ "$BEARS" = "infer" ]; then pyenv global 2.7; hash -r; fi + - pyenv versions + - python --version + + # Remove Ruby directive from Gemfile as we test many versions + - sed -i.bak '/^ruby/d' Gemfile + + # Used by go, to do nothing; not working + - if [ -f .ci/$TRAVIS_LANGUAGE.GNUMakefile ]; then + ln -s .ci/$TRAVIS_LANGUAGE.GNUMakefile ./GNUMakefile; + fi # https://github.com/coala/coala/issues/3183 - cp requirements.txt requirements.orig - - printf '%s\n%s\n%s\n' + # Move these requirements into test-requirements.txt + - printf '%s\n%s\n%s\n%s\n%s\n%s\n%s\n' + "tox~=3.12.0" "tox-travis" "tox-backticks" "tox-pyenv" "tox-venv" "$(cat test-requirements.txt)" "$(grep -v '^-r' docs-requirements.txt)" "$(cat bear-requirements.txt requirements.txt)" > requirements.txt + - ls -al requirements.txt GNUMakefile || true before_script: + - source .ci/deps.python36.sh + - hash -r + - pyenv versions + - python --version - mv requirements.orig requirements.txt - - .ci/deps.coala-bears.sh script: - - python setup.py bdist_wheel - - pip install $(ls ./dist/*.whl)"[alldeps]" - # Ensure bear requirements are in sync with the bear PipRequirement - - .ci/generate_bear_requirements.py --check --update - - coala --non-interactive - - rm bears/java/InferBear.py tests/java/InferBearTest.py - - rm bears/go/GoReturnsBear.py tests/go/GoReturnsBearTest.py - - pytest - - codecov - - python setup.py docs + # TODO: reactivate these + # python setup.py bdist_wheel + # pip install $(ls ./dist/*.whl)"[alldeps]" + # coala --non-interactive + - if [ -z "$TRAVIS_PYTHON_VERSION" ]; then + pyenv global $(pyenv versions --bare | fgrep '3.6' --max-count 1) + $(pyenv versions --bare | fgrep '2.7' --max-count 1); + hash -r; + fi + - python --version + # Ensure metadata files are in sync with the bear metadata in the source + - if [ -n "$TRAVIS_PYTHON_VERSION" ]; then + PYTHONPATH=. .ci/generate_bear_metadata.py --debug --update; + fi + - if [ -z "$TRAVIS_PYTHON_VERSION" ]; then + python -m pip install --upgrade --user + tox~=3.12.0 tox-travis tox-backticks tox-pyenv tox-venv; + fi + - export R_PROFILE=~/.Rprofile + - python -m tox || true + - rm ~/.Rprofile.site || true + - python -m tox + # python setup.py docs notifications: email: false diff --git a/DESCRIPTION b/DESCRIPTION index 643cc9b57f..3a4a67993e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,3 +1,6 @@ Package: coala Version: 0.10 Depends: R (>= 3.1.0), lintr, formatR +Imports: + lintr, + formatR diff --git a/Fudgefile b/Fudgefile new file mode 100644 index 0000000000..ba5a989ea2 --- /dev/null +++ b/Fudgefile @@ -0,0 +1,111 @@ +{ + "pack": { + "ActivePerl": ".ci/nuspecs/ActivePerl.nuspec", + "adoptopenjdk": ".ci/nuspecs/adoptopenjdk.nuspec", + "golang": ".ci/nuspecs/golang.nuspec", + "hg": ".ci/nuspecs/hg.nuspec", + "maven": ".ci/nuspecs/maven.nuspec", + "nodejs": ".ci/nuspecs/nodejs.nuspec", + "python": ".ci/nuspecs/python.nuspec", + "ruby": ".ci/nuspecs/ruby.nuspec", + "ruby2.devkit": ".ci/nuspecs/ruby2.devkit.nuspec" + }, + "packages": [ + { + "name": "msys2", + "params": "/InstallDir:C:\\msys64 /NoUpdate", + "source": "" + }, + { + "appveyor_id": true, + "name": "hg", + "source": "", + "version": "5.0" + }, + { + "appveyor_id": "python", + "name": "python", + "source": "", + "version": "3.6.8" + }, + { + "appveyor_id": "node", + "name": "nodejs", + "source": "", + "version": "11.13.0" + }, + { + "appveyor_id": "ruby", + "name": "ruby", + "source": "", + "version": "2.5.3.1" + }, + { + "appveyor_id": true, + "name": "ruby2.devkit", + "source": "", + "version": "4.7.2.2013022403" + }, + { + "appveyor_id": "go", + "name": "golang", + "source": "", + "version": "1.9.7" + }, + { + "appveyor_id": "jdk", + "name": "adoptopenjdk", + "source": "", + "version": "8.192" + }, + { + "appveyor_id": true, + "name": "ActivePerl", + "source": "", + "version": "5.24.3.2404" + }, + { + "appveyor_id": true, + "name": "maven", + "source": "", + "version": "3.5.4" + }, + { + "name": "php", + "source": "" + }, + { + "name": "composer", + "source": "" + }, + { + "name": "PSScriptAnalyzer", + "source": "" + }, + { + "name": "astyle", + "source": "" + }, + { + "name": "cppcheck", + "source": "" + }, + { + "name": "xsltproc", + "source": "" + }, + { + "name": "ShellCheck", + "source": "" + } + ], + "scripts": { + "post": { + "install": ". $env:FudgeCI/FudgePostInstall.ps1; Invoke-PostInstall" + }, + "pre": { + "install": ". $env:FudgeCI/FudgeCI.ps1; Invoke-FudgeCI" + } + }, + "source": "https://chocolatey.org/api/v2/" +} diff --git a/JuliaProject.toml b/JuliaProject.toml new file mode 100644 index 0000000000..237ecc7ee8 --- /dev/null +++ b/JuliaProject.toml @@ -0,0 +1,5 @@ +name = "CoalaBears" +uuid = "6344a49d-a50a-4848-8f08-86ec175de5a8" + +[deps] +Lint = "d4b2101a-7710-563d-8e49-77b01dd33fad" diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000000..e889d73de6 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,6 @@ +use ExtUtils::MakeMaker; +WriteMakefile( + NAME => 'Coala::Bears', + VERSION => '0.10', + PREREQ_PM => {Perl::Critic => 1.126}, +); diff --git a/Project.toml b/Project.toml new file mode 120000 index 0000000000..e7e293e6cd --- /dev/null +++ b/Project.toml @@ -0,0 +1 @@ +JuliaProject.toml \ No newline at end of file diff --git a/REQUIRE b/REQUIRE new file mode 100644 index 0000000000..eb8ae24fed --- /dev/null +++ b/REQUIRE @@ -0,0 +1,2 @@ +julia +Lint diff --git a/bear-languages.yaml b/bear-languages.yaml index 2569a95f01..b8095b55a9 100644 --- a/bear-languages.yaml +++ b/bear-languages.yaml @@ -160,6 +160,8 @@ GitCommitBear: - Git GitCommitMetadataBear: - Git +GitIgnoreBear: + - Git GitLinearCommitBear: - Git GitRevertInspectBear: diff --git a/bear-metadata.yaml b/bear-metadata.yaml new file mode 100644 index 0000000000..2f3a2e6104 --- /dev/null +++ b/bear-metadata.yaml @@ -0,0 +1,2590 @@ +AlexBear: + name: AlexBear + subdir: natural_language + filename: AlexBear.py + requirements: + exe: + alex: + npm: + alex: + version: ~3 + languages: + - Natural Language + tags: + - alex + - exe + - natural-language + - npm +AnnotationBear: + name: AnnotationBear + subdir: general + filename: AnnotationBear.py + requirements: + languages: + tags: + - general + - noreqs +ApertiumLintBear: + name: ApertiumLintBear + subdir: apertium + filename: ApertiumLintBear.py + requirements: + exe: + apertium_lint: + pip: + apertium-lint: + version: ~=0.29 + lxml: + version: ==3.6.0 + languages: + - Apertium + tags: + - apertium + - apertium_lint + - exe + - pip +ArtisticStyleBear: + name: ArtisticStyleBear + subdir: c_languages + filename: ArtisticStyleBear.py + requirements: + distro: + astyle: + packages: + apt_get: astyle + dnf: astyle + exe: + astyle: + languages: + - C + - C# + - CPP + - Java + - Objective-C + tags: + - apt_get + - astyle + - c-languages + - distro + - dnf + - exe +BanditBear: + name: BanditBear + subdir: python + filename: BanditBear.py + requirements: + exe: + bandit: + pip: + bandit: + version: ~=1.2 + languages: + - Python + - Python 2 + - Python 3 + tags: + - bandit + - exe + - pip + - python +BashateBear: + name: BashateBear + subdir: shell + filename: BashateBear.py + requirements: + exe: + bashate: + pip: + bashate: + version: ~=0.5.1 + languages: + - bash + tags: + - bashate + - exe + - pip + - shell +BootLintBear: + name: BootLintBear + subdir: hypertext + filename: BootLintBear.py + requirements: + exe: + bootlint: + npm: + bootlint: + version: ~0 + languages: + - HTML + tags: + - bootlint + - exe + - hypertext + - npm +CISkipInspectBear: + name: CISkipInspectBear + subdir: vcs/git + filename: CISkipInspectBear.py + requirements: + languages: + - Git + tags: + - noreqs + - vcs-git +CMakeLintBear: + name: CMakeLintBear + subdir: cmake + filename: CMakeLintBear.py + requirements: + exe: + cmakelint: + pip: + cmakelint: + version: ~=1.3 + languages: + - CMake + tags: + - cmake + - cmakelint + - exe + - pip +CPDBear: + name: CPDBear + subdir: general + filename: CPDBear.py + requirements: + languages: + - C# + - CPP + - Fortran + - Go + - JSP + - Java + - JavaScript + - Matlab + - Objective-C + - Octave + - PHP + - PLSQL + - Python + - Python 2 + - Python 3 + - Ruby + - Scala + - Swift + tags: + - cpd + - general + - java +CPPCheckBear: + name: CPPCheckBear + subdir: c_languages + filename: CPPCheckBear.py + requirements: + distro: + cppcheck: + packages: + apt_get: cppcheck + brew: cppcheck + dnf: cppcheck + pacman: cppcheck + pkg: cppcheck + portage: cppcheck + xbps: cppcheck + yum: cppcheck + zypper: cppcheck + exe: + cppcheck: + languages: + - C + - CPP + tags: + - apt_get + - brew + - c-languages + - cppcheck + - distro + - dnf + - exe + - pacman + - pkg + - portage + - xbps + - yum + - zypper +CPPCleanBear: + name: CPPCleanBear + subdir: c_languages + filename: CPPCleanBear.py + requirements: + exe: + cppclean: + pip: + cppclean: + version: ~=0.12.0 + languages: + - CPP + tags: + - c-languages + - cppclean + - exe + - pip +CPPLintBear: + name: CPPLintBear + subdir: c_languages + filename: CPPLintBear.py + requirements: + exe: + cpplint: + pip: + cpplint: + version: ~=1.3 + languages: + - CPP + tags: + - c-languages + - cpplint + - exe + - pip +CSSAutoPrefixBear: + name: CSSAutoPrefixBear + subdir: css + filename: CSSAutoPrefixBear.py + requirements: + exe: + postcss: + npm: + postcss-cli: + version: ~2 + autoprefixer: + version: ~7.2.0 + languages: + - CSS + tags: + - css + - exe + - npm + - postcss +CSSCombBear: + name: CSSCombBear + subdir: css + filename: CSSCombBear.py + requirements: + exe: + csscomb: + npm: + csscomb: + version: ~4.2.0 + languages: + - CSS + tags: + - css + - csscomb + - exe + - npm +CSSLintBear: + name: CSSLintBear + subdir: css + filename: CSSLintBear.py + requirements: + exe: + csslint: + npm: + csslint: + version: ~1 + languages: + - CSS + tags: + - css + - csslint + - exe + - npm +CSVLintBear: + name: CSVLintBear + subdir: csv + filename: CSVLintBear.py + requirements: + exe: + csvlint: + gem: + csvlint: + version: ~>0.4.0 + languages: + - CSV + tags: + - csv + - csvlint + - exe + - gem +CSecurityBear: + name: CSecurityBear + subdir: c_languages + filename: CSecurityBear.py + requirements: + distro: + flawfinder: + packages: + apt_get: flawfinder + brew: flawfinder + dnf: flawfinder + pacman: flawfinder + pkg: flawfinder + portage: flawfinder + xbps: flawfinder + yum: flawfinder + zypper: flawfinder + exe: + flawfinder: + languages: + - C + - CPP + tags: + - apt_get + - brew + - c-languages + - distro + - dnf + - exe + - flawfinder + - pacman + - pkg + - portage + - xbps + - yum + - zypper +CSharpLintBear: + name: CSharpLintBear + subdir: c_languages + filename: CSharpLintBear.py + requirements: + distro: + mono: + packages: + apt_get: mono-mcs + brew: mono + dnf: mono + pacman: mono + pkg: mono + portage: dev-lang/mono + xbps: mono + yum: mono + zypper: mono + exe: + mcs: + languages: + - C# + tags: + - apt_get + - brew + - c-languages + - distro + - dnf + - exe + - mcs + - mono + - pacman + - pkg + - portage + - xbps + - yum + - zypper +CheckstyleBear: + name: CheckstyleBear + subdir: java + filename: CheckstyleBear.py + requirements: + distro: + default-jre: + packages: + apt_get: default-jre + exe: + java: + languages: + - Java + tags: + - apt_get + - default-jre + - distro + - exe + - java +ClangASTPrintBear: + name: ClangASTPrintBear + subdir: c_languages/codeclone_detection + filename: ClangASTPrintBear.py + requirements: + pip: + libclang-py3: + version: ~=3.4.0 + languages: + - C + - CPP + - CUDA + - Objective-C + - Objective-CPP + - OpenCL + - OpenMP + tags: + - c-languages-codeclone-detection + - clang + - pip +ClangBear: + name: ClangBear + subdir: c_languages + filename: ClangBear.py + requirements: + pip: + libclang-py3: + version: ~=3.4.0 + languages: + - C + - CPP + - CUDA + - Objective-C + - Objective-CPP + - OpenCL + - OpenMP + tags: + - c-languages + - clang + - pip +ClangCloneDetectionBear: + name: ClangCloneDetectionBear + subdir: c_languages/codeclone_detection + filename: ClangCloneDetectionBear.py + requirements: + pip: + libclang-py3: + version: ~=3.4.0 + languages: + - C + - CPP + - CUDA + - Objective-C + - Objective-CPP + - OpenCL + - OpenMP + tags: + - c-languages-codeclone-detection + - clang + - pip +ClangComplexityBear: + name: ClangComplexityBear + subdir: c_languages + filename: ClangComplexityBear.py + requirements: + pip: + libclang-py3: + version: ~=3.4.0 + languages: + - C + - CPP + - CUDA + - Objective-C + - Objective-CPP + - OpenCL + - OpenMP + tags: + - c-languages + - clang + - pip +ClangFunctionDifferenceBear: + name: ClangFunctionDifferenceBear + subdir: c_languages/codeclone_detection + filename: ClangFunctionDifferenceBear.py + requirements: + pip: + munkres3: + version: ~=1.0 + libclang-py3: + version: ~=3.4.0 + languages: + - C + - CPP + - CUDA + - Objective-C + - Objective-CPP + - OpenCL + - OpenMP + tags: + - c-languages-codeclone-detection + - clang + - pip +CoffeeLintBear: + name: CoffeeLintBear + subdir: coffee_script + filename: CoffeeLintBear.py + requirements: + exe: + coffeelint: + npm: + coffeelint: + version: ~1 + languages: + - CoffeeScript + tags: + - coffee-script + - coffeelint + - exe + - npm +DartLintBear: + name: DartLintBear + subdir: dart + filename: DartLintBear.py + requirements: + distro: + dart: + packages: + brew: dart + exe: + dartanalyzer: + languages: + - Dart + tags: + - brew + - dart + - dartanalyzer + - distro + - exe +DennisBear: + name: DennisBear + subdir: gettext + filename: DennisBear.py + requirements: + exe: + dennis-cmd: + pip: + dennis: + version: ~=0.9 + languages: + - po + - pot + tags: + - dennis-cmd + - exe + - gettext + - pip +DocGrammarBear: + name: DocGrammarBear + subdir: documentation + filename: DocGrammarBear.py + requirements: + pip: + language-check: + version: ~=1.0 + languages: + - c + - cpp + - cs + - fortran + - golang + - java + - objective-c + - php + - python + - python3 + - tcl + - vhdl + tags: + - documentation + - pip +DockerfileLintBear: + name: DockerfileLintBear + subdir: configfiles + filename: DockerfileLintBear.py + requirements: + exe: + dockerfile_lint: + npm: + dockerfile_lint: + version: ~0.3.2 + languages: + - Dockerfile + tags: + - configfiles + - dockerfile_lint + - exe + - npm +DocumentationStyleBear: + name: DocumentationStyleBear + subdir: documentation + filename: DocumentationStyleBear.py + requirements: + languages: + - c + - cpp + - cs + - fortran + - golang + - java + - objective-c + - php + - python + - python3 + - tcl + - vhdl + tags: + - documentation + - noreqs +DuplicateFileBear: + name: DuplicateFileBear + subdir: general + filename: DuplicateFileBear.py + requirements: + languages: + tags: + - general + - noreqs +ESLintBear: + name: ESLintBear + subdir: js + filename: ESLintBear.py + requirements: + exe: + eslint: + npm: + typescript-eslint-parser: + version: ~12.0.0 + eslint-plugin-typescript: + version: ~0.8.1 + eslint-plugin-markdown: + version: ~1.0.0-beta.6 + babel-eslint: + version: ~8.0 + eslint-plugin-import: + version: ~2 + eslint-plugin-html: + version: ~3.2.2 + eslint: + version: ~3 + languages: + - HTML + - JSX + - JavaScript + - Markdown + - Typescript + tags: + - eslint + - exe + - js + - npm +ElmLintBear: + name: ElmLintBear + subdir: elm + filename: ElmLintBear.py + requirements: + exe: + elm-format: + npm: + elm: + version: ~0.18 + languages: + - Elm + tags: + - elm + - elm-format + - exe + - npm +FilenameBear: + name: FilenameBear + subdir: general + filename: FilenameBear.py + requirements: + languages: + tags: + - general + - noreqs +FormatRBear: + name: FormatRBear + subdir: r + filename: FormatRBear.py + requirements: + distro: + r-cran-formatr: + packages: + apt_get: r-cran-formatr + zypper: R-formatR + exe: + Rscript: + r_script: + formatR: + languages: + - R + tags: + - Rscript + - apt_get + - distro + - exe + - r + - r-cran-formatr + - r_script + - zypper +GNUIndentBear: + name: GNUIndentBear + subdir: c_languages + filename: GNUIndentBear.py + requirements: + distro: + indent: + packages: + apt_get: indent + brew: indent + dnf: indent + pacman: indent + pkg: indent + portage: indent + xbps: indent + yum: indent + zypper: indent + exe: + indent: + languages: + - C + - CPP + tags: + - apt_get + - brew + - c-languages + - distro + - dnf + - exe + - indent + - pacman + - pkg + - portage + - xbps + - yum + - zypper +GhcModBear: + name: GhcModBear + subdir: haskell + filename: GhcModBear.py + requirements: + cabal: + ghc-mod: + version: ==5.6.0.0 + distro: + ghc-mod: + packages: + apt_get: ghc-mod + brew: ghc-mod + dnf: ghc-mod + pacman: ghc-mod + pkg: ghc-mod + portage: ghc-mod + xbps: ghc-mod + yum: ghc-mod + zypper: ghc-mod + exe: + ghc-mod: + languages: + - Haskell + tags: + - apt_get + - brew + - cabal + - distro + - dnf + - exe + - ghc-mod + - haskell + - pacman + - pkg + - portage + - xbps + - yum + - zypper +GherkinLintBear: + name: GherkinLintBear + subdir: gherkin + filename: GherkinLintBear.py + requirements: + exe: + gherkin-lint: + npm: + gherkin-lint: + version: ~2 + languages: + - Gherkin + tags: + - exe + - gherkin + - gherkin-lint + - npm +GitCommitBear: + name: GitCommitBear + subdir: vcs/git + filename: GitCommitBear.py + requirements: + pip: + git-url-parse: + version: ~=1.1 + nltk: + version: ~=3.2 + languages: + - Git + tags: + - pip + - vcs-git +GitCommitMetadataBear: + name: GitCommitMetadataBear + subdir: vcs/git + filename: GitCommitMetadataBear.py + requirements: + languages: + - Git + tags: + - noreqs + - vcs-git +GitIgnoreBear: + name: GitIgnoreBear + subdir: vcs/git + filename: GitIgnoreBear.py + requirements: + languages: + - Git + tags: + - noreqs + - vcs-git +GitLinearCommitBear: + name: GitLinearCommitBear + subdir: vcs/git + filename: GitLinearCommitBear.py + requirements: + languages: + - Git + tags: + - noreqs + - vcs-git +GitRevertInspectBear: + name: GitRevertInspectBear + subdir: vcs/git + filename: GitRevertInspectBear.py + requirements: + languages: + - Git + tags: + - noreqs + - vcs-git +GoErrCheckBear: + name: GoErrCheckBear + subdir: go + filename: GoErrCheckBear.py + requirements: + exe: + errcheck: + go: + github.com/kisielk/errcheck: + languages: + - Go + tags: + - errcheck + - exe + - go +GoImportsBear: + name: GoImportsBear + subdir: go + filename: GoImportsBear.py + requirements: + exe: + goimports: + go: + golang.org/x/tools/cmd/goimports: + languages: + - Go + tags: + - exe + - go + - goimports +GoLintBear: + name: GoLintBear + subdir: go + filename: GoLintBear.py + requirements: + exe: + golint: + go: + github.com/golang/lint/golint: + languages: + - Go + tags: + - exe + - go + - golint +GoReturnsBear: + name: GoReturnsBear + subdir: go + filename: GoReturnsBear.py + requirements: + exe: + goreturns: + go: + sourcegraph.com/sqs/goreturns: + languages: + - Go + tags: + - exe + - go + - goreturns +GoTypeBear: + name: GoTypeBear + subdir: go + filename: GoTypeBear.py + requirements: + exe: + gotype: + go: + golang.org/x/tools/cmd/gotype: + languages: + - Go + tags: + - exe + - go + - gotype +GoVetBear: + name: GoVetBear + subdir: go + filename: GoVetBear.py + requirements: + exe: + go: + go: + golang.org/cmd/vet: + languages: + - Go + tags: + - exe + - go +GofmtBear: + name: GofmtBear + subdir: go + filename: GofmtBear.py + requirements: + exe: + gofmt: + go: + golang.org/cmd/gofmt: + languages: + - Go + tags: + - exe + - go + - gofmt +HAMLLintBear: + name: HAMLLintBear + subdir: haml + filename: HAMLLintBear.py + requirements: + exe: + haml-lint: + gem: + haml_lint: + version: ~>0.27.0 + languages: + - Haml + tags: + - exe + - gem + - haml + - haml-lint +HTMLHintBear: + name: HTMLHintBear + subdir: hypertext + filename: HTMLHintBear.py + requirements: + exe: + htmlhint: + npm: + htmlhint: + version: ~0.9.13 + languages: + - HTML + tags: + - exe + - htmlhint + - hypertext + - npm +HTMLLintBear: + name: HTMLLintBear + subdir: hypertext + filename: HTMLLintBear.py + requirements: + exe: + /usr/bin/python3: + pip: + html-linter: + version: ~=0.4.0 + languages: + - HTML + - Jinja2 + - PHP + tags: + - /usr/bin/python3 + - exe + - hypertext + - pip +HTTPSBear: + name: HTTPSBear + subdir: general + filename: HTTPSBear.py + requirements: + languages: + tags: + - general + - noreqs +HTTPoliceLintBear: + name: HTTPoliceLintBear + subdir: hypertext + filename: HTTPoliceLintBear.py + requirements: + exe: + httpolice: + pip: + HTTPolice: + version: ~=0.5.2 + languages: + - HAR + tags: + - exe + - httpolice + - hypertext + - pip +HappinessLintBear: + name: HappinessLintBear + subdir: js + filename: HappinessLintBear.py + requirements: + exe: + happiness: + npm: + happiness: + version: ~10 + languages: + - JavaScript + tags: + - exe + - happiness + - js + - npm +HaskellLintBear: + name: HaskellLintBear + subdir: haskell + filename: HaskellLintBear.py + requirements: + cabal: + hlint: + version: ==1.9.27 + distro: + hlint: + packages: + apt_get: hlint + exe: + hlint: + languages: + - Haskell + tags: + - apt_get + - cabal + - distro + - exe + - haskell + - hlint +HgCommitBear: + name: HgCommitBear + subdir: vcs/mercurial + filename: HgCommitBear.py + requirements: + pip: + git-url-parse: + version: ~=1.1 + nltk: + version: ~=3.2 + languages: + - Hg + tags: + - pip + - vcs-mercurial +IndentationBear: + name: IndentationBear + subdir: general + filename: IndentationBear.py + requirements: + languages: + tags: + - general + - noreqs +InferBear: + name: InferBear + subdir: java + filename: InferBear.py + requirements: + exe: + infer: + languages: + - Java + tags: + - exe + - infer + - opam +InvalidLinkBear: + name: InvalidLinkBear + subdir: general + filename: InvalidLinkBear.py + requirements: + languages: + tags: + - general + - noreqs +JSComplexityBear: + name: JSComplexityBear + subdir: js + filename: JSComplexityBear.py + requirements: + exe: + cr: + npm: + complexity-report: + version: ~2.0.0-alpha + languages: + - JavaScript + tags: + - cr + - exe + - js + - npm +JSHintBear: + name: JSHintBear + subdir: js + filename: JSHintBear.py + requirements: + exe: + jshint: + npm: + jshint: + version: ~2.9.5 + languages: + - JavaScript + tags: + - exe + - js + - jshint + - npm +JSONFormatBear: + name: JSONFormatBear + subdir: js + filename: JSONFormatBear.py + requirements: + languages: + - JSON + tags: + - js + - noreqs +JSStandardBear: + name: JSStandardBear + subdir: js + filename: JSStandardBear.py + requirements: + exe: + standard: + npm: + standard: + version: ~10 + languages: + - JSX + - JavaScript + tags: + - exe + - js + - npm + - standard +JavaPMDBear: + name: JavaPMDBear + subdir: java + filename: JavaPMDBear.py + requirements: + exe: + bash: + languages: + - Java + tags: + - bash + - pmd + - exe + - java +Jinja2Bear: + name: Jinja2Bear + subdir: jinja2 + filename: Jinja2Bear.py + requirements: + languages: + - Jinja2 + tags: + - jinja2 + - noreqs +JuliaLintBear: + name: JuliaLintBear + subdir: julia + filename: JuliaLintBear.py + requirements: + exe: + julia: + julia: + Lint: + languages: + - Julia + tags: + - exe + - julia +KeywordBear: + name: KeywordBear + subdir: general + filename: KeywordBear.py + requirements: + languages: + tags: + - general + - noreqs +LanguageToolBear: + name: LanguageToolBear + subdir: natural_language + filename: LanguageToolBear.py + requirements: + pip: + guess-language-spirit: + version: ~=0.5.2 + language-check: + version: ~=1.0 + languages: + - Natural Language + tags: + - java + - languagetool + - natural-language + - pip +LatexLintBear: + name: LatexLintBear + subdir: latex + filename: LatexLintBear.py + requirements: + distro: + chktex: + packages: + apt_get: chktex + brew: chktex + dnf: chktex + pacman: chktex + pkg: chktex + portage: chktex + xbps: chktex + yum: chktex + zypper: texlive-chktex + exe: + chktex: + languages: + - Tex + tags: + - apt_get + - brew + - chktex + - distro + - dnf + - exe + - latex + - pacman + - pkg + - portage + - xbps + - yum + - zypper +LicenseCheckBear: + name: LicenseCheckBear + subdir: general + filename: LicenseCheckBear.py + requirements: + distro: + devscripts: + packages: + apt_get: devscripts + dnf: licensecheck + portage: + zypper: devscripts + exe: + licensecheck: + languages: + tags: + - apt_get + - devscripts + - distro + - dnf + - exe + - general + - licensecheck + - portage + - zypper +LicenseHeaderBear: + name: LicenseHeaderBear + subdir: general + filename: LicenseHeaderBear.py + requirements: + languages: + tags: + - general + - noreqs +LineContinuationBear: + name: LineContinuationBear + subdir: general + filename: LineContinuationBear.py + requirements: + languages: + tags: + - general + - noreqs +LineCountBear: + name: LineCountBear + subdir: general + filename: LineCountBear.py + requirements: + languages: + tags: + - general + - noreqs +LineLengthBear: + name: LineLengthBear + subdir: general + filename: LineLengthBear.py + requirements: + languages: + tags: + - general + - noreqs +LuaLintBear: + name: LuaLintBear + subdir: lua + filename: LuaLintBear.py + requirements: + exe: + luacheck: + luarocks: + luacheck: + languages: + - Lua + tags: + - exe + - lua + - luacheck + - luarocks +MarkdownBear: + name: MarkdownBear + subdir: markdown + filename: MarkdownBear.py + requirements: + exe: + remark: + npm: + remark-lint: + version: ~5 + remark-validate-links: + version: ~5 + remark-cli: + version: ~2 + languages: + - Markdown + tags: + - exe + - markdown + - npm + - remark +MatlabIndentationBear: + name: MatlabIndentationBear + subdir: matlab + filename: MatlabIndentationBear.py + requirements: + languages: + - Matlab + - Octave + tags: + - matlab + - noreqs +MementoBear: + name: MementoBear + subdir: general + filename: MementoBear.py + requirements: + pip: + memento-client: + version: ~=0.6.1 + languages: + tags: + - general + - pip +MypyBear: + name: MypyBear + subdir: python + filename: MypyBear.py + requirements: + exe: + /usr/bin/python3: + pip: + mypy: + version: ==0.590 + languages: + - Python + - Python 2 + - Python 3 + tags: + - /usr/bin/python3 + - exe + - pip + - python +PEP8Bear: + name: PEP8Bear + subdir: python + filename: PEP8Bear.py + requirements: + pip: + autopep8: + version: ~=1.2 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +PEP8NotebookBear: + name: PEP8NotebookBear + subdir: python + filename: PEP8NotebookBear.py + requirements: + pip: + nbformat: + version: ~=4.1 + autopep8: + version: ~=1.2 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +PHPCodeSnifferBear: + name: PHPCodeSnifferBear + subdir: php + filename: PHPCodeSnifferBear.py + requirements: + composer: + squizlabs/php_codesniffer: + version: ~3.3.2 + distro: + php-codesniffer: + packages: + apt_get: php-codesniffer + zypper: php-pear-php_codesniffer + exe: + phpcs: + languages: + - CSS + - JavaScript + - PHP + tags: + - apt_get + - composer + - distro + - exe + - php + - php-codesniffer + - phpcs + - zypper +PHPLintBear: + name: PHPLintBear + subdir: php + filename: PHPLintBear.py + requirements: + distro: + php-cli: + packages: + apt_get: php-cli + exe: + php: + languages: + - PHP + tags: + - apt_get + - distro + - exe + - php + - php-cli +PHPMessDetectorBear: + name: PHPMessDetectorBear + subdir: php + filename: PHPMessDetectorBear.py + requirements: + composer: + phpmd/phpmd: + version: ~2.6.0 + distro: + phpmd: + packages: + apt_get: phpmd + dnf: php-phpmd-PHP-PMD + exe: + phpmd: + languages: + - PHP + tags: + - apt_get + - composer + - distro + - dnf + - exe + - php + - phpmd +PerlCriticBear: + name: PerlCriticBear + subdir: perl + filename: PerlCriticBear.py + requirements: + distro: + libperl-critic-perl: + packages: + apt_get: libperl-critic-perl + brew: + dnf: perl-Perl-Critic + portage: dev-perl/Perl-Critic + xbps: + yum: perl-Perl-Critic + zypper: perl-Perl-Critic + exe: + perlcritic: + languages: + - Perl + tags: + - apt_get + - brew + - distro + - dnf + - exe + - libperl-critic-perl + - perl + - perlcritic + - portage + - xbps + - yum + - zypper +PinRequirementsBear: + name: PinRequirementsBear + subdir: python/requirements + filename: PinRequirementsBear.py + requirements: + languages: + - Python 2 Requirements + - Python 3 Requirements + - Python Requirements + tags: + - noreqs + - python-requirements +PrettierLintBear: + name: PrettierLintBear + subdir: js + filename: PrettierLintBear.py + requirements: + exe: + prettier: + npm: + prettier: + version: ~1.9.2 + languages: + - CSS + - GraphQL + - JSON + - JavaScript + - Less + - Markdown + - SCSS + - TypeScript + - Vue + tags: + - exe + - js + - npm + - prettier +ProseLintBear: + name: ProseLintBear + subdir: natural_language + filename: ProseLintBear.py + requirements: + exe: + proselint: + pip: + proselint: + version: ~=0.7.0 + languages: + - Natural Language + tags: + - exe + - natural-language + - pip + - proselint +PugLintBear: + name: PugLintBear + subdir: pug + filename: PugLintBear.py + requirements: + exe: + pug-lint: + npm: + pug-lint: + version: ~2.4.0 + languages: + - Pug + tags: + - exe + - npm + - pug + - pug-lint +PuppetLintBear: + name: PuppetLintBear + subdir: configfiles + filename: PuppetLintBear.py + requirements: + exe: + puppet-lint: + gem: + puppet-lint: + version: ~>2.1.1 + languages: + - Puppet + tags: + - configfiles + - exe + - gem + - puppet-lint +PyCommentedCodeBear: + name: PyCommentedCodeBear + subdir: python + filename: PyCommentedCodeBear.py + requirements: + pip: + eradicate: + version: ~=0.1.6 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +PyDocStyleBear: + name: PyDocStyleBear + subdir: python + filename: PyDocStyleBear.py + requirements: + exe: + pydocstyle: + pip: + pydocstyle: + version: ~=2.0 + languages: + - Python + - Python 2 + - Python 3 + tags: + - exe + - pip + - pydocstyle + - python +PyFlakesBear: + name: PyFlakesBear + subdir: python + filename: PyFlakesBear.py + requirements: + exe: + pyflakes: + pip: + pyflakes: + version: ~=2.0.0 + languages: + - Python + - Python 3 + tags: + - exe + - pip + - pyflakes + - python +PyImportSortBear: + name: PyImportSortBear + subdir: python + filename: PyImportSortBear.py + requirements: + pip: + isort: + version: ~=4.2 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +PyLintBear: + name: PyLintBear + subdir: python + filename: PyLintBear.py + requirements: + exe: + pylint: + pip: + pylint: + version: ~=1.7.2 + languages: + - Python + - Python 2 + - Python 3 + tags: + - exe + - pip + - pylint + - python +PySafetyBear: + name: PySafetyBear + subdir: python/requirements + filename: PySafetyBear.py + requirements: + pip: + safety: + version: ~=1.8.2 + languages: + - Python 2 Requirements + - Python 3 Requirements + - Python Requirements + tags: + - pip + - python-requirements +PyStringConcatBear: + name: PyStringConcatBear + subdir: python + filename: PyStringConcatBear.py + requirements: + languages: + - Python + - Python 2 + - Python 3 + tags: + - noreqs + - python +PyUnusedCodeBear: + name: PyUnusedCodeBear + subdir: python + filename: PyUnusedCodeBear.py + requirements: + pip: + autoflake: + version: ~=0.7 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +PycodestyleBear: + name: PycodestyleBear + subdir: python + filename: PycodestyleBear.py + requirements: + exe: + pycodestyle: + pip: + pycodestyle: + version: ~=2.2 + languages: + - Python + - Python 2 + - Python 3 + tags: + - exe + - pip + - pycodestyle + - python +PyromaBear: + name: PyromaBear + subdir: python + filename: PyromaBear.py + requirements: + pip: + pyroma: + version: ~=2.2.0 + languages: + - Python + - Python 3 + tags: + - pip + - python +PythonPackageInitBear: + name: PythonPackageInitBear + subdir: python + filename: PythonPackageInitBear.py + requirements: + languages: + - Python + - Python 2 + - Python 3 + tags: + - noreqs + - python +QuotesBear: + name: QuotesBear + subdir: general + filename: QuotesBear.py + requirements: + languages: + tags: + - general + - noreqs +RAMLLintBear: + name: RAMLLintBear + subdir: yaml + filename: RAMLLintBear.py + requirements: + exe: + ramllint: + npm: + ramllint: + version: '>=1.2.2 <1.2.4 || >=1.2.5 <1.3.0' + languages: + - RAML + tags: + - exe + - npm + - ramllint + - yaml +RLintBear: + name: RLintBear + subdir: r + filename: RLintBear.py + requirements: + distro: + r-base: + packages: + apt_get: r-base + version: '>=3.1.1' + exe: + Rscript: + r_script: + lintr: + languages: + - R + tags: + - Rscript + - apt_get + - distro + - exe + - r + - r-base + - r_script +RSTcheckBear: + name: RSTcheckBear + subdir: rest + filename: RSTcheckBear.py + requirements: + exe: + rstcheck: + pip: + rstcheck: + version: ~=3.1 + languages: + - reStructuredText + tags: + - exe + - pip + - rest + - rstcheck +RadonBear: + name: RadonBear + subdir: python + filename: RadonBear.py + requirements: + pip: + radon: + version: ==1.4.0 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +RuboCopBear: + name: RuboCopBear + subdir: ruby + filename: RuboCopBear.py + requirements: + exe: + rubocop: + gem: + rubocop: + version: ~>0.51.0 + pip: + pyyaml: + version: ~=3.12 + languages: + - Ruby + tags: + - exe + - gem + - rubocop + - ruby +RubyFastererBear: + name: RubyFastererBear + subdir: ruby + filename: RubyFastererBear.py + requirements: + exe: + fasterer: + gem: + fasterer: + version: ~>0.4.1 + languages: + - Ruby + tags: + - exe + - fasterer + - gem + - ruby +RubySecurityBear: + name: RubySecurityBear + subdir: ruby + filename: RubySecurityBear.py + requirements: + exe: + brakeman: + gem: + brakeman: + version: ~>4.1.1 + languages: + - Ruby + tags: + - brakeman + - exe + - gem + - ruby +RubySmellBear: + name: RubySmellBear + subdir: ruby + filename: RubySmellBear.py + requirements: + exe: + reek: + gem: + reek: + version: ~>4.6 + languages: + - Ruby + tags: + - exe + - gem + - reek + - ruby +RubySyntaxBear: + name: RubySyntaxBear + subdir: ruby + filename: RubySyntaxBear.py + requirements: + conda: + ruby: + version: '>=2.2.3' + distro: + ruby: + packages: + apt_get: ruby + brew: ruby + dnf: ruby + pacman: ruby + pkg: ruby + portage: ruby + xbps: ruby + yum: ruby + zypper: ruby + exe: + ruby: + languages: + - Ruby + tags: + - apt_get + - brew + - conda + - distro + - dnf + - exe + - pacman + - pkg + - portage + - ruby + - xbps + - yum + - zypper +SASSLintBear: + name: SASSLintBear + subdir: scss + filename: SASSLintBear.py + requirements: + exe: + sass-lint: + npm: + sass-lint: + version: ~1.12.1 + languages: + - SASS + - SCSS + tags: + - exe + - npm + - sass-lint + - scss +SCSSLintBear: + name: SCSSLintBear + subdir: scss + filename: SCSSLintBear.py + requirements: + exe: + scss-lint: + gem: + scss_lint: + version: ~>0.56.0 + pip: + pyyaml: + version: ~=3.12 + languages: + - SCSS + tags: + - exe + - gem + - scss + - scss-lint +SQLFormatBear: + name: SQLFormatBear + subdir: sql + filename: SQLFormatBear.py + requirements: + pip: + sqlparse: + version: ~=0.2.4 + languages: + - SQL + tags: + - pip + - sql +SQLintBear: + name: SQLintBear + subdir: sql + filename: SQLintBear.py + requirements: + exe: + sqlint: + gem: + sqlint: + version: ~>0.1.5 + languages: + - SQL + tags: + - exe + - gem + - sql + - sqlint +ScalaLintBear: + name: ScalaLintBear + subdir: scala + filename: ScalaLintBear.py + requirements: + distro: + default-jre: + packages: + apt_get: default-jre + exe: + java: + languages: + - Scala + tags: + - apt_get + - default-jre + - distro + - exe + - java + - scala +ShellCheckBear: + name: ShellCheckBear + subdir: shell + filename: ShellCheckBear.py + requirements: + cabal: + ShellCheck: + version: ==0.4.1 + distro: + shellcheck: + packages: + apt_get: shellcheck + brew: shellcheck + dnf: shellcheck + pacman: shellcheck + pkg: shellcheck + portage: shellcheck + xbps: shellcheck + yum: shellcheck + zypper: shellcheck + exe: + shellcheck: + languages: + - bash + - dash + - ksh + - sh + tags: + - apt_get + - brew + - cabal + - distro + - dnf + - exe + - pacman + - pkg + - portage + - shell + - shellcheck + - xbps + - yum + - zypper +SpaceConsistencyBear: + name: SpaceConsistencyBear + subdir: general + filename: SpaceConsistencyBear.py + requirements: + languages: + tags: + - general + - noreqs +SpellCheckBear: + name: SpellCheckBear + subdir: natural_language + filename: SpellCheckBear.py + requirements: + exe: + scspell: + pip: + scspell3k: + version: ~=2.0 + languages: + - Natural Language + tags: + - exe + - natural-language + - pip + - scspell +StyleLintBear: + name: StyleLintBear + subdir: css + filename: StyleLintBear.py + requirements: + exe: + stylelint: + npm: + stylelint: + version: ~7 + languages: + - CSS + - SCSS + tags: + - css + - exe + - npm + - stylelint +StylintBear: + name: StylintBear + subdir: stylus + filename: StylintBear.py + requirements: + exe: + stylint: + npm: + stylint: + version: ~1.5.9 + languages: + - Stylus + tags: + - exe + - npm + - stylint + - stylus +TOMLBear: + name: TOMLBear + subdir: configfiles + filename: TOMLBear.py + requirements: + exe: + tomlv: + go: + github.com/BurntSushi/toml/cmd/tomlv: + languages: + - TOML + tags: + - configfiles + - exe + - go + - tomlv +TSLintBear: + name: TSLintBear + subdir: typescript + filename: TSLintBear.py + requirements: + exe: + tslint: + npm: + typescript: + version: '>=1.7.3' + tslint: + version: '>=3.0 <6.0' + languages: + - TypeScript + tags: + - exe + - npm + - tslint + - typescript +TailorBear: + name: TailorBear + subdir: swift + filename: TailorBear.py + requirements: + exe: + tailor: + languages: + - Swift + tags: + - exe + - java + - swift + - tailor +TextLintBear: + name: TextLintBear + subdir: general + filename: TextLintBear.py + requirements: + exe: + textlint: + npm: + textlint-rule-write-good: + version: ~1.6.0 + textlint: + version: ~7.3.0 + textlint-plugin-asciidoc-loose: + version: ~1.0.1 + textlint-plugin-html: + version: ~0.1.5 + textlint-plugin-review: + version: ~0.3.3 + textlint-plugin-rst: + version: ~0.1.1 + textlint-rule-alex: + version: ~1.2.0 + textlint-rule-common-misspellings: + version: ~1.0.1 + textlint-rule-date-weekday-mismatch: + version: ~1.0.5 + textlint-rule-ginger: + version: '>=2.1.0 <2.1.2' + textlint-rule-max-comma: + version: ~1.0.4 + textlint-rule-max-number-of-lines: + version: ~1.0.3 + textlint-rule-ng-word: + version: ~1.0.0 + textlint-rule-no-dead-link: + version: ~3.1.1 + textlint-rule-no-empty-section: + version: ~1.1.0 + textlint-rule-no-start-duplicated-conjunction: + version: ~1.1.3 + textlint-rule-no-todo: + version: ~2.0.0 + textlint-rule-period-in-list-item: + version: ~0.2.0 + textlint-rule-rousseau: + version: ~1.4.5 + textlint-rule-unexpanded-acronym: + version: ~1.2.1 + pip: + docutils-ast-writer: + version: ~=0.1.2 + languages: + - HTML + - Markdown + - reStructuredText + tags: + - exe + - general + - npm + - textlint +TravisLintBear: + name: TravisLintBear + subdir: yaml + filename: TravisLintBear.py + requirements: + exe: + travis: + gem: + travis: + version: ~>1.8.8 + languages: + - YAML + tags: + - exe + - gem + - travis + - yaml +URLBear: + name: URLBear + subdir: general + filename: URLBear.py + requirements: + pip: + aenum: + version: ~=2.0.8 + languages: + tags: + - general + - pip +URLHeadBear: + name: URLHeadBear + subdir: general + filename: URLHeadBear.py + requirements: + languages: + tags: + - general + - noreqs +VCSCommitMetadataBear: + name: VCSCommitMetadataBear + subdir: vcs + filename: VCSCommitMetadataBear.py + requirements: + languages: + - Git + tags: + - noreqs + - vcs +VHDLLintBear: + name: VHDLLintBear + subdir: vhdl + filename: VHDLLintBear.py + requirements: + distro: + perl: + packages: + apt_get: perl + brew: perl + dnf: perl + pacman: perl + pkg: perl + portage: perl + xbps: perl + yum: perl + zypper: perl + exe: + perl: + languages: + - VHDL + tags: + - apt_get + - bakalint + - brew + - distro + - dnf + - exe + - pacman + - perl + - pkg + - portage + - vhdl + - xbps + - yum + - zypper +VerilogLintBear: + name: VerilogLintBear + subdir: verilog + filename: VerilogLintBear.py + requirements: + distro: + verilator: + packages: + apt_get: verilator + brew: + dnf: verilator + portage: + yum: verilator + zypper: verilator + exe: + verilator: + languages: + - Verilog + tags: + - apt_get + - brew + - distro + - dnf + - exe + - portage + - verilator + - verilog + - yum + - zypper +VintBear: + name: VintBear + subdir: vimscript + filename: VintBear.py + requirements: + exe: + vint: + pip: + vim-vint: + version: ~=0.3.12,!=0.3.19 + languages: + - VimScript + tags: + - exe + - pip + - vimscript + - vint +VultureBear: + name: VultureBear + subdir: python + filename: VultureBear.py + requirements: + pip: + vulture: + version: ~=0.25.0 + languages: + - Python + - Python 3 + tags: + - pip + - python +WriteGoodLintBear: + name: WriteGoodLintBear + subdir: natural_language + filename: WriteGoodLintBear.py + requirements: + exe: + write-good: + npm: + write-good: + version: ~0.9.1 + languages: + - Natural Language + tags: + - exe + - natural-language + - npm + - write-good +XMLBear: + name: XMLBear + subdir: xml2 + filename: XMLBear.py + requirements: + distro: + libxml2: + packages: + apt_get: libxml2-utils + brew: libxml2 + dnf: libxml2 + pacman: libxml2 + pkg: libxml2 + portage: dev-libs/libxml2 + xbps: libxml2 + yum: libxml2 + zypper: libxml2 + exe: + xmllint: + languages: + - XML + tags: + - apt_get + - brew + - distro + - dnf + - exe + - libxml2 + - pacman + - pkg + - portage + - xbps + - xml2 + - xmllint + - yum + - zypper +YAMLLintBear: + name: YAMLLintBear + subdir: yaml + filename: YAMLLintBear.py + requirements: + exe: + yamllint: + pip: + yamllint: + version: ~=1.12.0 + languages: + - YAML + tags: + - exe + - pip + - yaml + - yamllint +YapfBear: + name: YapfBear + subdir: python + filename: YapfBear.py + requirements: + pip: + yapf: + version: ~=0.21.0 + languages: + - Python + - Python 2 + - Python 3 + tags: + - pip + - python +_CommitBear: + name: _CommitBear + subdir: vcs + filename: CommitBear.py + requirements: + pip: + nltk: + version: ~=3.2 + git-url-parse: + version: ~=1.1 + languages: + tags: + - pip + - vcs +coalaBear: + name: coalaBear + subdir: general + filename: coalaBear.py + requirements: + languages: + tags: + - general + - noreqs +reSTLintBear: + name: reSTLintBear + subdir: rest + filename: reSTLintBear.py + requirements: + pip: + restructuredtext-lint: + version: ~=1.0 + languages: + - reStructuredText + tags: + - pip + - rest diff --git a/bear-requirements.txt b/bear-requirements.txt index 578a2eebd5..bb0f96b678 100644 --- a/bear-requirements.txt +++ b/bear-requirements.txt @@ -17,7 +17,7 @@ html-linter~=0.4.0 isort~=4.2 language-check~=1.0 libclang-py3~=3.4.0 -lxml==3.6.0 +lxml memento-client~=0.6.1 munkres3~=1.0 mypy==0.590 diff --git a/bear-requirements.yaml b/bear-requirements.yaml index af53071f3b..bb6d19c583 100644 --- a/bear-requirements.yaml +++ b/bear-requirements.yaml @@ -1,32 +1,91 @@ # This is an automatically generated file. # And should not be edited by hand. -overrides: coala-build.yaml -gem_requirements: - brakeman: - version: ~>4.1.1 - csvlint: - version: ~>0.4.0 - fasterer: - version: ~>0.4.1 - haml_lint: - version: ~>0.27.0 - puppet-lint: - version: ~>2.1.1 - reek: - version: ~>4.6 - rubocop: - version: ~>0.51.0 - scss_lint: - version: ~>0.56.0 - sqlint: - version: ~>0.1.5 - travis: - version: ~>1.8.8 -r_script_requirements: - formatR: - version: '>1.5' - lintr: - version: '>=1.0.2' +overrides: pm-requirements.yaml +pip_requirements: + HTTPolice: + version: ~=0.5.2 + aenum: + version: ~=2.0.8 + apertium-lint: + version: ~=0.29 + autoflake: + version: ~=0.7 + autopep8: + version: ~=1.2 + bandit: + version: ~=1.2 + bashate: + version: ~=0.5.1 + cmakelint: + version: ~=1.3 + cppclean: + version: ~=0.12.0 + cpplint: + version: ~=1.3 + dennis: + version: ~=0.9 + docutils-ast-writer: + version: ~=0.1.2 + eradicate: + version: ~=0.1.6 + git-url-parse: + version: ~=1.1 + guess-language-spirit: + version: ~=0.5.2 + html-linter: + version: ~=0.4.0 + isort: + version: ~=4.2 + language-check: + version: ~=1.0 + libclang-py3: + version: ~=3.4.0 + lxml: + version: ==3.6.0 + memento-client: + version: ~=0.6.1 + munkres3: + version: ~=1.0 + mypy: + version: ==0.590 + nbformat: + version: ~=4.1 + nltk: + version: ~=3.2 + proselint: + version: ~=0.7.0 + pycodestyle: + version: ~=2.2 + pydocstyle: + version: ~=2.0 + pyflakes: + version: ~=2.0.0 + pylint: + version: ~=1.7.2 + pyroma: + version: ~=2.2.0 + pyyaml: + version: ~=3.12 + radon: + version: ==1.4.0 + restructuredtext-lint: + version: ~=1.0 + rstcheck: + version: ~=3.1 + safety: + version: ~=1.8.2 + scspell3k: + version: ~=2.0 + sqlparse: + version: ~=0.2.4 + vim-vint: + version: ~=0.3.12,!=0.3.19 + vulture: + version: ~=0.25.0 + yamllint: + version: ~=1.12.0 + yapf: + version: ~=0.21.0 npm_requirements: alex: version: ~3 @@ -136,91 +195,27 @@ npm_requirements: version: ~12.0.0 write-good: version: ~0.9.1 -pip_requirements: - HTTPolice: - version: ~=0.5.2 - aenum: - version: ~=2.0.8 - apertium-lint: - version: ~=0.29 - autoflake: - version: ~=0.7 - autopep8: - version: ~=1.2 - bandit: - version: ~=1.2 - bashate: - version: ~=0.5.1 - cmakelint: - version: ~=1.3 - cppclean: - version: ~=0.12.0 - cpplint: - version: ~=1.3 - dennis: - version: ~=0.9 - docutils-ast-writer: - version: ~=0.1.2 - eradicate: - version: ~=0.1.6 - git-url-parse: - version: ~=1.1 - guess-language-spirit: - version: ~=0.5.2 - html-linter: - version: ~=0.4.0 - isort: - version: ~=4.2 - language-check: - version: ~=1.0 - libclang-py3: - version: ~=3.4.0 - lxml: - version: ==3.6.0 - memento-client: - version: ~=0.6.1 - munkres3: - version: ~=1.0 - mypy: - version: ==0.590 - nbformat: - version: ~=4.1 - nltk: - version: ~=3.2 - proselint: - version: ~=0.7.0 - pycodestyle: - version: ~=2.2 - pydocstyle: - version: ~=2.0 - pyflakes: - version: ~=2.0.0 - pylint: - version: ~=1.7.2 - pyroma: - version: ~=2.2.0 - pyyaml: - version: ~=3.12 - radon: - version: ==1.4.0 - restructuredtext-lint: - version: ~=1.0 - rstcheck: - version: ~=3.1 - safety: - version: ~=1.8.2 - scspell3k: - version: ~=2.0 - sqlparse: - version: ~=0.2.4 - vim-vint: - version: ~=0.3.12,!=0.3.19 - vulture: - version: ~=0.25.0 - yamllint: - version: ~=1.12.0 - yapf: - version: ~=0.21.0 +gem_requirements: + brakeman: + version: ~>4.1.1 + csvlint: + version: ~>0.4.0 + fasterer: + version: ~>0.4.1 + haml_lint: + version: ~>0.27.0 + puppet-lint: + version: ~>2.1.1 + reek: + version: ~>4.6 + rubocop: + version: ~>0.51.0 + scss_lint: + version: ~>0.56.0 + sqlint: + version: ~>0.1.5 + travis: + version: ~>1.8.8 composer_requirements: phpmd/phpmd: version: ~2.6.0 @@ -233,3 +228,189 @@ cabal_requirements: version: ==5.6.0.0 hlint: version: ==1.9.27 +r_script_requirements: + formatR: + lintr: +distro_requirements: + astyle: + packages: + apt_get: astyle + dnf: astyle + chktex: + packages: + apt_get: chktex + brew: chktex + dnf: chktex + pacman: chktex + pkg: chktex + portage: chktex + xbps: chktex + yum: chktex + zypper: texlive-chktex + cppcheck: + packages: + apt_get: cppcheck + brew: cppcheck + dnf: cppcheck + pacman: cppcheck + pkg: cppcheck + portage: cppcheck + xbps: cppcheck + yum: cppcheck + zypper: cppcheck + dart: + packages: + brew: dart + default-jre: + packages: + apt_get: default-jre + devscripts: + packages: + apt_get: devscripts + dnf: licensecheck + portage: + zypper: devscripts + flawfinder: + packages: + apt_get: flawfinder + brew: flawfinder + dnf: flawfinder + pacman: flawfinder + pkg: flawfinder + portage: flawfinder + xbps: flawfinder + yum: flawfinder + zypper: flawfinder + ghc-mod: + packages: + apt_get: ghc-mod + brew: ghc-mod + dnf: ghc-mod + pacman: ghc-mod + pkg: ghc-mod + portage: ghc-mod + xbps: ghc-mod + yum: ghc-mod + zypper: ghc-mod + hlint: + packages: + apt_get: hlint + indent: + packages: + apt_get: indent + brew: indent + dnf: indent + pacman: indent + pkg: indent + portage: indent + xbps: indent + yum: indent + zypper: indent + libperl-critic-perl: + packages: + apt_get: libperl-critic-perl + brew: + dnf: perl-Perl-Critic + portage: dev-perl/Perl-Critic + xbps: + yum: perl-Perl-Critic + zypper: perl-Perl-Critic + libxml2: + packages: + apt_get: libxml2-utils + brew: libxml2 + dnf: libxml2 + pacman: libxml2 + pkg: libxml2 + portage: dev-libs/libxml2 + xbps: libxml2 + yum: libxml2 + zypper: libxml2 + mono: + packages: + apt_get: mono-mcs + brew: mono + dnf: mono + pacman: mono + pkg: mono + portage: dev-lang/mono + xbps: mono + yum: mono + zypper: mono + perl: + packages: + apt_get: perl + brew: perl + dnf: perl + pacman: perl + pkg: perl + portage: perl + xbps: perl + yum: perl + zypper: perl + php-cli: + packages: + apt_get: php-cli + php-codesniffer: + packages: + apt_get: php-codesniffer + zypper: php-pear-php_codesniffer + phpmd: + packages: + apt_get: phpmd + dnf: php-phpmd-PHP-PMD + r-base: + packages: + apt_get: r-base + version: '>=3.1.1' + r-cran-formatr: + packages: + apt_get: r-cran-formatr + zypper: R-formatR + ruby: + packages: + apt_get: ruby + brew: ruby + dnf: ruby + pacman: ruby + pkg: ruby + portage: ruby + xbps: ruby + yum: ruby + zypper: ruby + shellcheck: + packages: + apt_get: shellcheck + brew: shellcheck + dnf: shellcheck + pacman: shellcheck + pkg: shellcheck + portage: shellcheck + xbps: shellcheck + yum: shellcheck + zypper: shellcheck + verilator: + packages: + apt_get: verilator + brew: + dnf: verilator + portage: + yum: verilator + zypper: verilator +julia_requirements: + Lint: +go_requirements: + github.com/BurntSushi/toml/cmd/tomlv: + github.com/golang/lint/golint: + github.com/kisielk/errcheck: + golang.org/cmd/gofmt: + golang.org/cmd/vet: + golang.org/x/tools/cmd/goimports: + golang.org/x/tools/cmd/gotype: + sourcegraph.com/sqs/goreturns: +luarocks_requirements: + luacheck: +conda_requirements: + ruby: + version: '>=2.2.3' +exe_requirements: {} diff --git a/bears/apertium/ApertiumLintBear.py b/bears/apertium/ApertiumLintBear.py index c0b3b48abc..e8fc25fb94 100644 --- a/bears/apertium/ApertiumLintBear.py +++ b/bears/apertium/ApertiumLintBear.py @@ -26,7 +26,7 @@ class ApertiumLintBear: """ LANGUAGES = {'Apertium'} REQUIREMENTS = {PipRequirement('apertium-lint', '0.29'), - PipRequirement('lxml', '==3.6.0')} + PipRequirement('lxml', '==4.2.1')} AUTHORS = {'The coala developers'} AUTHORS_EMAILS = {'coala-devel@googlegroups.com'} LICENSE = 'AGPL-3.0' diff --git a/bears/c_languages/CSharpLintBear.py b/bears/c_languages/CSharpLintBear.py index e18b299987..71cfa61940 100644 --- a/bears/c_languages/CSharpLintBear.py +++ b/bears/c_languages/CSharpLintBear.py @@ -9,7 +9,7 @@ output_format='regex', output_regex=r'.+\((?P\d+),(?P\d+)\): ' r'(?Perror|warning) \w+: (?P.+)') -class CSharpLintBear: # pragma nt: no cover +class CSharpLintBear: """ Checks C# code for syntactical correctness using the ``mcs`` compiler. """ diff --git a/bears/general/TextLintBear.py b/bears/general/TextLintBear.py index d0c070b461..e0059495a1 100644 --- a/bears/general/TextLintBear.py +++ b/bears/general/TextLintBear.py @@ -19,7 +19,7 @@ class TextLintBear: LANGUAGES = {'HTML', 'Markdown', 'reStructuredText'} REQUIREMENTS = {NpmRequirement('textlint', '7.3.0'), - NpmRequirement('textlint-plugin-asciidoc-loose', '1.0.1'), + NpmRequirement('textlint-plugin-asciidoctor', '1.0.3'), NpmRequirement('textlint-plugin-html', '0.1.5'), NpmRequirement('textlint-plugin-review', '0.3.3'), NpmRequirement('textlint-plugin-rst', '0.1.1'), diff --git a/bears/natural_language/AlexBear.py b/bears/natural_language/AlexBear.py index aec615cd0f..54218d9eca 100644 --- a/bears/natural_language/AlexBear.py +++ b/bears/natural_language/AlexBear.py @@ -37,9 +37,9 @@ def check_prerequisites(cls): try: output = subprocess.check_output(('alex', '--help'), stderr=subprocess.STDOUT) - except (OSError, subprocess.CalledProcessError): - return ('The `alex` package could not be verified. ' + - incorrect_pkg_msg) + except (OSError, subprocess.CalledProcessError) as e: + return ('The `alex` package could not be verified. {}\n{}' + ''.format(e, incorrect_pkg_msg)) else: output = output.decode(sys.getfilesystemencoding()) if 'Catch insensitive, inconsiderate writing' in output: diff --git a/bears/r/FormatRBear.py b/bears/r/FormatRBear.py index c4e53cc0b7..8232935a2f 100644 --- a/bears/r/FormatRBear.py +++ b/bears/r/FormatRBear.py @@ -16,9 +16,7 @@ def _map_to_r_bool(py_bool): @linter(executable='Rscript', output_format='corrected', - prerequisite_check_command=('Rscript', '-e', 'library(formatR)'), - prerequisite_check_fail_message='Please install formatR for this bear ' - 'to work.') + ) class FormatRBear: """ Check and correct formatting of R Code using known formatR utility. @@ -33,7 +31,7 @@ class FormatRBear: zypper='R-formatR', ), RscriptRequirement('formatR', - version='>1.5'), + ), ] ) } diff --git a/bears/r/RLintBear.py b/bears/r/RLintBear.py index fed30158ef..26de072531 100644 --- a/bears/r/RLintBear.py +++ b/bears/r/RLintBear.py @@ -15,8 +15,7 @@ severity_map={'style': RESULT_SEVERITY.NORMAL, 'warning': RESULT_SEVERITY.NORMAL, 'error': RESULT_SEVERITY.MAJOR}, - prerequisite_check_command=('Rscript', '-e', 'library(lintr)'), - prerequisite_check_fail_message='R library "lintr" is not installed.') + ) class RLintBear: """ Checks the code with ``lintr``. @@ -25,7 +24,7 @@ class RLintBear: AUTHORS = {'The coala developers'} AUTHORS_EMAILS = {'coala-devel@googlegroups.com'} REQUIREMENTS = {RscriptRequirement('lintr', - version='>=1.0.2'), + ), DistributionRequirement(apt_get='r-base', version='>=3.1.1')} LICENSE = 'AGPL-3.0' diff --git a/composer.json b/composer.json new file mode 100644 index 0000000000..d14f37262a --- /dev/null +++ b/composer.json @@ -0,0 +1,6 @@ +{ + "require-dev": { + "phpmd/phpmd": "^2.6", + "squizlabs/php_codesniffer": "^3.4" + } +} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4d29e32c0b..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,10381 +0,0 @@ -{ - "name": "coala-bears", - "version": "0.8.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@azu/format-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", - "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=" - }, - "@azu/style-format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", - "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", - "requires": { - "@azu/format-text": "1.0.1" - } - }, - "@babel/code-frame": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz", - "integrity": "sha512-yd7CkUughvHQoEahQqcMdrZw6o/6PwUxiRkfZuVDVHCDe77mysD/suoNyk5mK6phTnRW1kyIbPHyCJgxw++LXg==", - "requires": { - "chalk": "2.4.1", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz", - "integrity": "sha512-c+DAyp8LMm2nzSs2uXEuxp4LYGSUYEyHtU3fU57avFChjsnTmmpWmXj2dv0yUxHTEydgVAv5fIzA+4KJwoqWDA==", - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.31", - "@babel/template": "7.0.0-beta.31", - "@babel/traverse": "7.0.0-beta.31", - "@babel/types": "7.0.0-beta.31" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz", - "integrity": "sha512-m7rVVX/dMLbbB9NCzKYRrrFb0qZxgpmQ4Wv6y7zEsB6skoJHRuXVeb/hAFze79vXBbuD63ci7AVHXzAdZSk9KQ==", - "requires": { - "@babel/types": "7.0.0-beta.31" - } - }, - "@babel/template": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.31.tgz", - "integrity": "sha512-97IRmLvoDhIDSQkqklVt3UCxJsv0LUEVb/0DzXWtc8Lgiyxj567qZkmTG9aR21CmcJVVIvq2Y/moZj4oEpl5AA==", - "requires": { - "@babel/code-frame": "7.0.0-beta.31", - "@babel/types": "7.0.0-beta.31", - "babylon": "7.0.0-beta.31", - "lodash": "4.17.10" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.31.tgz", - "integrity": "sha512-3N+VJW+KlezEjFBG7WSYeMyC5kIqVLPb/PGSzCDPFcJrnArluD1GIl7Y3xC7cjKiTq2/JohaLWHVPjJWHlo9Gg==", - "requires": { - "@babel/code-frame": "7.0.0-beta.31", - "@babel/helper-function-name": "7.0.0-beta.31", - "@babel/types": "7.0.0-beta.31", - "babylon": "7.0.0-beta.31", - "debug": "3.1.0", - "globals": "10.4.0", - "invariant": "2.2.4", - "lodash": "4.17.10" - } - }, - "@babel/types": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.31.tgz", - "integrity": "sha512-exAHB+NeFGxkfQ5dSUD03xl3zYGneeSk2Mw2ldTt/nTvYxuDiuSp3DlxgUBgzbdTFG4fbwPk0WtKWOoTXCmNGg==", - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "2.0.0" - } - }, - "@types/babel-types": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.2.tgz", - "integrity": "sha512-ylggu8DwwxT6mk3jVoJeohWAePWMNWEYm06MSoJ19kwp3hT9eY2Z4NNZn3oevzgFmClgNQ2GQF500hPDvNsGHg==" - }, - "@types/babylon": { - "version": "6.16.2", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz", - "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==", - "requires": { - "@types/babel-types": "7.0.2" - } - }, - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - } - } - }, - "adverb-where": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/adverb-where/-/adverb-where-0.0.9.tgz", - "integrity": "sha1-CcXN3Y1QO5/l924LjcXHCo8ZPjQ=" - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=" - }, - "alex": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/alex/-/alex-3.1.0.tgz", - "integrity": "sha1-tn7y1Mz/I7tvsDfE9onSfVvsYYE=", - "requires": { - "bail": "1.0.3", - "get-stdin": "5.0.1", - "glob": "7.1.2", - "globby": "5.0.0", - "meow": "3.7.0", - "minimatch": "3.0.4", - "remark-message-control": "2.0.3", - "remark-parse": "1.1.0", - "remark-retext": "2.0.0", - "retext-english": "2.0.0", - "retext-equality": "2.5.0", - "retext-profanities": "3.1.0", - "to-vfile": "1.0.0", - "unified": "4.2.1", - "update-notifier": "1.0.3", - "vfile": "1.4.0", - "vfile-find-down": "1.0.0", - "vfile-find-up": "1.0.0", - "vfile-reporter": "1.5.0", - "vfile-sort": "1.0.0" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "ansi-align": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", - "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", - "requires": { - "string-width": "1.0.2" - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "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=", - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "requires": { - "make-iterator": "1.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "requires": { - "kind-of": "6.0.2" - } - } - } - }, - "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==" - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" - }, - "array-every": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/array-every/-/array-every-0.1.2.tgz", - "integrity": "sha1-vlTPf7/ExHd7uoXHr37awoNtg+0=", - "requires": { - "make-iterator": "0.1.1" - } - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" - } - }, - "array-intersection": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/array-intersection/-/array-intersection-0.1.2.tgz", - "integrity": "sha1-sU7wId8l6cnYBBFshHzGoNZ8+s4=", - "requires": { - "array-every": "0.1.2", - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "filter-array": "0.2.0", - "index-of": "0.1.1" - } - }, - "array-iterate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz", - "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==" - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "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=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "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=" - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" - }, - "attach-ware": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/attach-ware/-/attach-ware-1.1.1.tgz", - "integrity": "sha1-KPUTk92LuL2q2XI0JRm/CWIaNaM=", - "requires": { - "unherit": "1.1.1" - } - }, - "autoprefixer": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", - "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000846", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.22", - "postcss-value-parser": "3.3.0" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-eslint": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.0.3.tgz", - "integrity": "sha512-7D4iUpylEiKJPGbeSAlNddGcmA41PadgZ6UAb6JVyh003h3d0EbZusYFBR/+nBgqtaVJM2J2zUVa3N0hrpMH6g==", - "requires": { - "@babel/code-frame": "7.0.0-beta.31", - "@babel/traverse": "7.0.0-beta.31", - "@babel/types": "7.0.0-beta.31", - "babylon": "7.0.0-beta.31" - } - }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "regenerator-runtime": "0.10.5" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - } - } - }, - "babylon": { - "version": "7.0.0-beta.31", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.31.tgz", - "integrity": "sha512-6lm2mV3S51yEnKmQQNnswoABL1U1H1KHoCCVwdwI3hvIv+W7ya4ki7Aw4o4KxtUHjNKkK5WpZb22rrMMOcJXJQ==" - }, - "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bash-color": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/bash-color/-/bash-color-0.0.3.tgz", - "integrity": "sha1-DAiSHsATk6tW6kRPCCXlSTyg5qI=" - }, - "basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "requires": { - "safe-buffer": "5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" - }, - "binary-search": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.3.tgz", - "integrity": "sha512-T/jKp3vw1JI+6KQgsyT5R6CcRhMtxlHojeKrA5gX5WG50BQaoujRfoJJKMkuokNuZ0w2S+1wHufEWzw6Qhj30Q==" - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - } - }, - "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=", - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, - "bootlint": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/bootlint/-/bootlint-0.14.2.tgz", - "integrity": "sha1-wEw3PWXf0KTQ33wtuz4ppuFQy3A=", - "requires": { - "binary-search": "1.3.3", - "bluebird": "3.5.1", - "body-parser": "1.18.3", - "chalk": "1.1.3", - "cheerio": "0.19.0", - "commander": "2.15.1", - "debug": "2.6.9", - "express": "4.16.3", - "glob": "6.0.4", - "morgan": "1.9.0", - "semver": "5.5.0", - "void-elements": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "boundary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", - "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=" - }, - "boxen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", - "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", - "requires": { - "ansi-align": "1.1.0", - "camelcase": "2.1.1", - "chalk": "1.1.3", - "cli-boxes": "1.0.0", - "filled-array": "1.1.0", - "object-assign": "4.1.1", - "repeating": "2.0.1", - "string-width": "1.0.2", - "widest-line": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "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=", - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "requires": { - "caniuse-lite": "1.0.30000846", - "electron-to-chromium": "1.3.48" - } - }, - "bubble-stream-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bubble-stream-error/-/bubble-stream-error-1.0.0.tgz", - "integrity": "sha1-fa2X8XEo2jlhab83raSssZU2HjA=", - "requires": { - "once": "1.4.0", - "sliced": "1.0.1" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "1.1.0", - "buffer-fill": "1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "caniuse-db": { - "version": "1.0.30000846", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000846.tgz", - "integrity": "sha1-2chvkUc4202gmO7e2ZdBPERWG9I=" - }, - "caniuse-lite": { - "version": "1.0.30000846", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000846.tgz", - "integrity": "sha512-qxUOHr5mTaadWH1ap0ueivHd8x42Bnemcn+JutVr7GWmm2bU4zoBhjuv5QdXgALQnnT626lOQros7cCDf8PwCg==" - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" - }, - "carrack": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/carrack/-/carrack-0.0.5.tgz", - "integrity": "sha1-qyj77c2NK5U9FkM1PiYicr8MS9s=", - "requires": { - "bluebird": "3.5.1" - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" - }, - "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==" - }, - "character-entities-html4": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", - "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==" - }, - "character-entities-legacy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==" - }, - "character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", - "requires": { - "is-regex": "1.0.4" - } - }, - "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, - "check-ends-with-period": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/check-ends-with-period/-/check-ends-with-period-1.0.1.tgz", - "integrity": "sha1-19KdYUy8PtFatUGQ9P2k3qoxQdg=", - "requires": { - "array.prototype.find": "2.0.4", - "emoji-regex": "6.5.1", - "end-with": "1.0.2" - }, - "dependencies": { - "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" - } - } - }, - "check-types": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-4.3.0.tgz", - "integrity": "sha1-90OvhLqh4hpXohv2AZsOM+tqEsE=" - }, - "cheerio": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", - "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=", - "requires": { - "css-select": "1.0.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.8.3", - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "chrono-node": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/chrono-node/-/chrono-node-1.3.5.tgz", - "integrity": "sha1-oklSmKMtqCvMAa2b59d++l4kQSI=", - "requires": { - "moment": "2.22.1" - } - }, - "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==" - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" - }, - "cli": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "integrity": "sha1-Aq1Eo4Cr8nraxebwzdewQ9dMU+M=", - "requires": { - "exit": "0.1.2", - "glob": "3.2.11" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" - }, - "cli-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", - "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", - "requires": { - "ansi-regex": "2.1.1", - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", - "memoizee": "0.4.12", - "timers-ext": "0.1.5" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "requires": { - "colors": "1.0.3" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" - }, - "clone-regexp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", - "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", - "requires": { - "is-regexp": "1.0.0", - "is-supported-regexp-flag": "1.0.1" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "coffee-script": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.11.1.tgz", - "integrity": "sha1-vxxHrWREOg2V0S3ysUfMCk2q1uk=" - }, - "coffeelint": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-1.16.2.tgz", - "integrity": "sha512-6mzgOo4zb17WfdrSui/cSUEgQ0AQkW3gXDht+6lHkfkqGUtSYKwGdGcXsDfAyuScVzTlTtKdfwkAlJWfqul7zg==", - "requires": { - "coffee-script": "1.11.1", - "glob": "7.1.2", - "ignore": "3.3.8", - "optimist": "0.6.1", - "resolve": "0.6.3", - "strip-json-comments": "1.0.4" - }, - "dependencies": { - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, - "collapse-white-space": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", - "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==" - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-diff": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/color-diff/-/color-diff-0.1.7.tgz", - "integrity": "sha1-bbeM2UgqjkWdQIIer0tQMoPcuOI=" - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorguard": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorguard/-/colorguard-1.2.1.tgz", - "integrity": "sha512-qYVKTg626qpDg4/eBnPXidEPXn5+krbYqHVfyyEFBWV5z3IF4p44HKY/eE2t1ohlcrlIkDgHmFJMfQ8qMLnSFw==", - "requires": { - "chalk": "1.1.3", - "color-diff": "0.1.7", - "log-symbols": "1.0.2", - "object-assign": "4.1.1", - "pipetteur": "2.0.3", - "plur": "2.1.2", - "postcss": "5.2.18", - "postcss-reporter": "1.4.1", - "text-table": "0.2.0", - "yargs": "1.3.3" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "postcss-reporter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", - "integrity": "sha1-wTbwpbFhkV83ndN2XGEHX357mvI=", - "requires": { - "chalk": "1.1.3", - "lodash": "4.17.10", - "log-symbols": "1.0.2", - "postcss": "5.2.18" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - }, - "yargs": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz", - "integrity": "sha1-BU3oth8i7v23IHBZ6u+da4P7kxo=" - } - } - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "requires": { - "strip-ansi": "3.0.1", - "wcwidth": "1.0.1" - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "complexity-report": { - "version": "2.0.0-alpha", - "resolved": "https://registry.npmjs.org/complexity-report/-/complexity-report-2.0.0-alpha.tgz", - "integrity": "sha1-nzsB5HCwuhHMpHJrQut/IaoEOxw=", - "requires": { - "async": "1.5.2", - "check-types": "4.3.0", - "commander": "2.15.1", - "escomplex": "2.0.0-alpha", - "esprima": "2.7.3" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "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=" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "configstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", - "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", - "requires": { - "dot-prop": "3.0.0", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "os-tmpdir": "1.0.2", - "osenv": "0.1.5", - "uuid": "2.0.3", - "write-file-atomic": "1.3.4", - "xdg-basedir": "2.0.0" - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "requires": { - "date-now": "0.1.4" - } - }, - "constantinople": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", - "requires": { - "@types/babel-types": "7.0.2", - "@types/babylon": "6.16.2", - "babel-types": "6.26.0", - "babylon": "6.18.0" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - } - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "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=" - }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.11.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - } - } - }, - "crc": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz", - "integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII=" - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "css-color-names": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.3.tgz", - "integrity": "sha1-3gzvFvTYqoIioyDVttfpu62nufY=" - }, - "css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", - "requires": { - "css-tokenize": "1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "1.2.1", - "through2": "0.6.5" - }, - "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "requires": { - "readable-stream": "1.1.14" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "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=" - } - } - }, - "css-select": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz", - "integrity": "sha1-sRIcpRhI3SZOIkTQWM7iVN7rRLA=", - "requires": { - "boolbase": "1.0.0", - "css-what": "1.0.0", - "domutils": "1.4.3", - "nth-check": "1.0.1" - } - }, - "css-selector-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.3.0.tgz", - "integrity": "sha1-XxrUPi2O77/cME/NOaUhZklD4+s=" - }, - "css-tokenize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", - "requires": { - "inherits": "2.0.3", - "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=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "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=" - } - } - }, - "css-what": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz", - "integrity": "sha1-18wt9FGAZm+Z0rFEYmOUaeAPc2w=" - }, - "csscomb": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csscomb/-/csscomb-4.2.0.tgz", - "integrity": "sha512-HXXCSVTpHck64PUMIn/2I8auBGmIpx+cD/Hs+KnYH+p9iaMTN0cd38l22qYVp8vEp6v9w+Bbi0SD8iN8fgrINg==", - "requires": { - "babel-polyfill": "6.23.0", - "glob": "7.1.2", - "gonzales-pe": "3.4.7", - "minimatch": "3.0.2", - "minimist": "1.1.3", - "vow": "0.4.4", - "vow-fs": "0.3.6" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "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" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - } - } - }, - "minimatch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.2.tgz", - "integrity": "sha1-DzmKcwDqRB6cNIyD2Yq4ydv5xAo=", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=" - } - } - }, - "csslint": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz", - "integrity": "sha1-Gcw+2jIhYP0/cjKvHLKjYOiYouk=", - "requires": { - "clone": "2.1.1", - "parserlib": "1.1.1" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "1.0.2" - } - }, - "cuss": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/cuss/-/cuss-1.8.0.tgz", - "integrity": "sha512-1vDkoOC7UnYKksgE0NCLI5wO/3k694vRbgKWLrQVCD7YMIxnyI2cIveYfF54qOc6OB202t5Kb1EDPsrCLeO9Uw==" - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "0.10.44" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "1.0.4" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - } - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "deglob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", - "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", - "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=" - }, - "docker-modem": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-1.0.6.tgz", - "integrity": "sha512-kDwWa5QaiVMB8Orbb7nXdGdwEZHKfEm7iPwglXe1KorImMpmGNlhC7A5LG0p8rrCcz1J4kJhq/o63lFjDdj8rQ==", - "requires": { - "JSONStream": "1.3.2", - "debug": "3.1.0", - "readable-stream": "1.0.34", - "split-ca": "1.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "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=" - } - } - }, - "dockerfile_lint": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/dockerfile_lint/-/dockerfile_lint-0.3.2.tgz", - "integrity": "sha512-CyJ5I2l4LMP8crxGcGxoej+zxDcAA41ZnucDAUW9ccxQKFbxyuzvzUtxRbWYfByksQI3Fuk5c6vmvV/bTJi/ig==", - "requires": { - "commander": "2.9.0", - "dockerode": "2.5.5", - "js-yaml": "3.2.7", - "lodash": "2.4.2", - "winston": "2.4.2" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" - } - } - }, - "dockerode": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-2.5.5.tgz", - "integrity": "sha512-H3HX18xKmy51wqpPHvGDwPOotJMy9l/AWfiaVu4imrgBGr384rINEB2FwTwoYU++krkZjseVYyiVK8CnRz2tkw==", - "requires": { - "concat-stream": "1.5.2", - "docker-modem": "1.0.6", - "tar-fs": "1.12.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "2.0.2" - } - }, - "doiuse": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-2.6.0.tgz", - "integrity": "sha1-GJLRC2Gpo1at2/K2FJM+gfi7ODQ=", - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000846", - "css-rule-stream": "1.1.0", - "duplexer2": "0.0.2", - "jsonfilter": "1.1.2", - "ldjson-stream": "1.2.1", - "lodash": "4.17.10", - "multimatch": "2.1.0", - "postcss": "5.2.18", - "source-map": "0.4.4", - "through2": "0.6.5", - "yargs": "3.32.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "requires": { - "caniuse-db": "1.0.30000846", - "electron-to-chromium": "1.3.48" - } - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "requires": { - "readable-stream": "1.1.14" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": "1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "requires": { - "camelcase": "2.1.1", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "string-width": "1.0.2", - "window-size": "0.1.4", - "y18n": "3.2.1" - } - } - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "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=" - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", - "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=", - "requires": { - "domelementtype": "1.3.0" - } - }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "2.3.6" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" - } - }, - "e-prime": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/e-prime/-/e-prime-0.10.2.tgz", - "integrity": "sha1-6pN165hWNt6IATx6n7EprZ4V7/g=" - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.48", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", - "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=" - }, - "elm": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/elm/-/elm-0.18.0.tgz", - "integrity": "sha1-kZuDCc2Tnf4v+dJS2WG2yJUJuXA=", - "requires": { - "mkdirp": "0.5.1", - "promise": "7.1.1", - "request": "2.74.0", - "tar": "2.2.1" - } - }, - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "0.4.23" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "end-with": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/end-with/-/end-with-1.0.2.tgz", - "integrity": "sha1-pDJ1WrT1Hn/HTzpxnGuB311mi9w=" - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.44", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.44.tgz", - "integrity": "sha512-TO4Vt9IhW3FzDKLDOpoA8VS9BCV4b9WTf6BqvMOgfoa8wX73F3Kh3y2J7yTstTaXlQ0k1vq4DH2vw6RSs42z+g==", - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "4.2.4" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "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=" - }, - "escomplex": { - "version": "2.0.0-alpha", - "resolved": "https://registry.npmjs.org/escomplex/-/escomplex-2.0.0-alpha.tgz", - "integrity": "sha1-/Wp5hl2br1fEw+0bL+Z3cU5ElgY=", - "requires": { - "check-types": "5.1.0" - }, - "dependencies": { - "check-types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-5.1.0.tgz", - "integrity": "sha1-NzlN07YEKlEVXpJsOpF1PUmeXcg=" - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.5.2", - "debug": "2.6.9", - "doctrine": "2.1.0", - "escope": "3.6.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "eslint-config-happiness": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-happiness/-/eslint-config-happiness-10.2.1.tgz", - "integrity": "sha1-WOPSyCBTUrmCuogmELbWAg38ouQ=" - }, - "eslint-config-happiness-jsx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-happiness-jsx/-/eslint-config-happiness-jsx-4.0.2.tgz", - "integrity": "sha1-GNi825fUSOexn6MaJUkOygC1aDU=" - }, - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=" - }, - "eslint-config-standard-jsx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", - "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==" - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "requires": { - "debug": "2.6.9", - "resolve": "1.7.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz", - "integrity": "sha1-2tMXgSktZmSyUxf9BJ0uKy8CIF0=", - "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.7.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "eslint-plugin-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", - "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", - "requires": { - "ignore": "3.3.8", - "minimatch": "3.0.4", - "object-assign": "4.1.1", - "resolve": "1.7.1", - "semver": "5.3.0" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - } - } - }, - "eslint-plugin-promise": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", - "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=" - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.5.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.1.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } - } - }, - "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=" - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "4.2.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44" - } - }, - "event-stream": { - "version": "3.1.7", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz", - "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=", - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.2.10", - "stream-combiner": "0.0.4", - "through": "2.3.8" - }, - "dependencies": { - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "requires": { - "duplexer": "0.1.1" - } - } - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "execall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", - "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", - "requires": { - "clone-regexp": "1.0.1" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "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=", - "requires": { - "fill-range": "2.2.4" - } - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fault": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.2.tgz", - "integrity": "sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==", - "requires": { - "format": "0.2.2" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "filled-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", - "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=" - }, - "filter-array": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/filter-array/-/filter-array-0.2.0.tgz", - "integrity": "sha1-n29M6vW16Ka2dKW1RgU3cUqMUfE=", - "requires": { - "arr-filter": "1.1.2", - "kind-of": "1.1.0", - "micromatch": "2.3.11" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-line-column": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/find-line-column/-/find-line-column-0.5.2.tgz", - "integrity": "sha1-2wAjj/hoVRoYLnShA0FtKVqYyMo=" - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "requires": { - "glob": "5.0.15" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "flatmap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/flatmap/-/flatmap-0.0.3.tgz", - "integrity": "sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=" - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" - }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", - "requires": { - "async": "2.6.1", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "4.17.10" - } - } - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" - }, - "format-util": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz", - "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" - }, - "front-matter": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.2.tgz", - "integrity": "sha1-91mDufL0E75ljJPf172M5AePXNs=", - "requires": { - "js-yaml": "3.11.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - } - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "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=", - "optional": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "optional": true, - "requires": { - "minipass": "2.2.4" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "optional": 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" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", - "optional": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "optional": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "optional": 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=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", - "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", - "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" - } - }, - "minizlib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "optional": true, - "requires": { - "minipass": "2.2.4" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, - "needle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", - "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", - "optional": true, - "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", - "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", - "optional": true, - "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "optional": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" - } - }, - "npm-bundled": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", - "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", - "optional": true, - "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "optional": 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=", - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "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=", - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "optional": true - }, - "rc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", - "optional": true, - "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "optional": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "optional": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true - }, - "tar": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", - "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", - "optional": true, - "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gather-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", - "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=" - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" - }, - "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=", - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "gingerbread": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/gingerbread/-/gingerbread-0.5.0.tgz", - "integrity": "sha1-4YI0qRZSjBmGqjJhCWPoEE3vuRM=", - "requires": { - "commander": "2.15.1", - "lodash.defaults": "3.1.2", - "request": "2.74.0" - }, - "dependencies": { - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" - } - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" - } - } - } - }, - "git-diff-tree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/git-diff-tree/-/git-diff-tree-1.0.0.tgz", - "integrity": "sha1-FB5WQXadBlmXprlMOixg4GK1Tag=", - "requires": { - "git-spawned-stream": "0.1.1", - "pump-chain": "1.0.0", - "split-transform-stream": "0.1.1", - "through2": "2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" - } - } - } - }, - "git-spawned-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/git-spawned-stream/-/git-spawned-stream-0.1.1.tgz", - "integrity": "sha1-OJJ9oC5S2GI5aGG/mWVXRSZDgCs=", - "requires": { - "debug": "0.8.1", - "spawn-to-readstream": "0.1.3" - }, - "dependencies": { - "debug": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", - "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=" - } - } - }, - "github-slugger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.0.tgz", - "integrity": "sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==", - "requires": { - "emoji-regex": "6.1.1" - } - }, - "github-url-to-object": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-2.2.6.tgz", - "integrity": "sha1-ypJQFlFJdI7uswv8xgAMb+DSQvc=", - "requires": { - "is-url": "1.2.4" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "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" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "2.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "1.3.5" - } - }, - "globals": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz", - "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==" - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=" - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "minimatch": "3.0.4" - } - }, - "gonzales-pe": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.4.7.tgz", - "integrity": "sha1-F8e+Z61sr/Ynej44esc26YPSgOw=", - "requires": { - "minimist": "1.1.3" - }, - "dependencies": { - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=" - } - } - }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", - "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.6", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "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=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "happiness": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/happiness/-/happiness-10.0.2.tgz", - "integrity": "sha1-SdkkQv66ModMq8vPNeI5DUEtmX4=", - "requires": { - "eslint": "3.19.0", - "eslint-config-happiness": "10.2.1", - "eslint-config-happiness-jsx": "4.0.2", - "eslint-plugin-import": "2.2.0", - "eslint-plugin-node": "4.2.3", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-react": "6.10.3", - "eslint-plugin-standard": "3.0.1", - "standard-engine": "7.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", - "requires": { - "debug": "2.6.9", - "object-assign": "4.1.1", - "resolve": "1.7.1" - } - }, - "eslint-plugin-import": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.2.3", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "pkg-up": "1.0.0" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "requires": { - "chalk": "1.1.3", - "commander": "2.15.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "hast": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/hast/-/hast-0.0.2.tgz", - "integrity": "sha1-h5ULAYCnHfTfkhbDBNQm206jBII=", - "requires": { - "bail": "1.0.3", - "camelcase": "1.2.1", - "ent": "2.2.0", - "escape-html": "1.0.3", - "htmlparser2": "3.8.3", - "param-case": "1.1.2", - "property-information": "2.0.0", - "trim": "0.0.1", - "unified": "2.1.4" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, - "unified": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-2.1.4.tgz", - "integrity": "sha1-FLxs1A2Y//91tAVQa62HPsu6w7o=", - "requires": { - "attach-ware": "1.1.1", - "bail": "1.0.3", - "extend": "3.0.1", - "unherit": "1.1.1", - "vfile": "1.4.0", - "ware": "1.3.0" - } - } - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" - }, - "html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=" - }, - "htmlhint": { - "version": "0.9.13", - "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-0.9.13.tgz", - "integrity": "sha1-CBY8seaqUFBI67C0EGOnygfcbIg=", - "requires": { - "async": "1.4.2", - "colors": "1.0.3", - "commander": "2.6.0", - "csslint": "0.10.0", - "glob": "5.0.15", - "jshint": "2.8.0", - "parse-glob": "3.0.4", - "strip-json-comments": "1.0.4", - "xml": "1.0.0" - }, - "dependencies": { - "async": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.4.2.tgz", - "integrity": "sha1-bJ7csRztTw3S8tQNsNSaEJwIiqs=" - }, - "commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" - }, - "csslint": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz", - "integrity": "sha1-OmoE51Zcjp0ZvrSXZ8fslug2WAU=", - "requires": { - "parserlib": "0.2.5" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "jshint": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.8.0.tgz", - "integrity": "sha1-HQmjvZE8TK36gb8Y1YK9hb/+DUQ=", - "requires": { - "cli": "0.6.6", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "2.0.10", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" - }, - "dependencies": { - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "requires": { - "brace-expansion": "1.1.11" - } - } - } - }, - "lodash": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=" - }, - "parserlib": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz", - "integrity": "sha1-hZB92GBaoGq7PdKV1QuyuPpN0Rc=" - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" - }, - "dependencies": { - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "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=" - } - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "2.0.1" - } - }, - "index-of": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/index-of/-/index-of-0.1.1.tgz", - "integrity": "sha1-2FWvNjQbKE2tYbvXFpXGxpTBV6w=" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infinity-agent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-1.0.2.tgz", - "integrity": "sha1-Lp2iwHC5hkqLxmwBlOF5HtgFgCU=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "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=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.10", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "interop-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/interop-require/-/interop-require-1.0.0.tgz", - "integrity": "sha1-5TEDZ5lEyI1+YQW2Kp9EdceDlx4=" - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" - }, - "irregular-plurals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", - "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=" - }, - "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==" - }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=" - }, - "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", - "requires": { - "is-alphabetical": "1.0.2", - "is-decimal": "1.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "1.11.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" - }, - "is-capitalized": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-capitalized/-/is-capitalized-1.0.0.tgz", - "integrity": "sha1-TIRktNkdPk7rRIid0s2PGwrEwTY=" - }, - "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "requires": { - "ci-info": "1.1.3" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==" - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-empty": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", - "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=" - }, - "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=", - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", - "requires": { - "acorn": "4.0.13", - "object-assign": "4.1.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", - "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==" - }, - "is-hidden": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-hidden/-/is-hidden-1.1.1.tgz", - "integrity": "sha512-175UKecS8+U4hh2PSY0j4xnm2GKYzvSKnbh+naC93JjuBA7LgIo6YxlbcsSo6seFBdQO3RuIcH980yvqqD/2cA==" - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==" - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "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=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "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=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-supported-regexp-flag": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", - "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==" - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-whitespace-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", - "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==" - }, - "is-word-character": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", - "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jju": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.2.1.tgz", - "integrity": "sha1-7fbsINXWaMgMLADOpj+KlCKktSg=" - }, - "js-base64": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", - "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==" - }, - "js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.2.7.tgz", - "integrity": "sha1-ECeQ8mXZhv6VpNDyp5Lnp72Ibuw=", - "requires": { - "argparse": "1.0.10", - "esprima": "2.0.0" - }, - "dependencies": { - "esprima": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.0.0.tgz", - "integrity": "sha1-YJrFwmZ+rlQztB657OziMxtBSY8=" - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jshint": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", - "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", - "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" - }, - "dependencies": { - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "requires": { - "exit": "0.1.2", - "glob": "7.1.2" - } - }, - "lodash": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=" - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-ref-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-3.3.1.tgz", - "integrity": "sha512-stQTMhec2R/p2L9dH4XXRlpNCP0mY8QrLd/9Kl+8SHJQmwHtE1nDfXH4wbsSM+GkJMl8t92yZbI0OIol432CIQ==", - "requires": { - "call-me-maybe": "1.0.1", - "debug": "3.1.0", - "es6-promise": "4.2.4", - "js-yaml": "3.11.0", - "ono": "4.0.5", - "z-schema": "3.22.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - } - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "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=" - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonfilter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/jsonfilter/-/jsonfilter-1.1.2.tgz", - "integrity": "sha1-Ie987cdRk4E8dZMulqmL4gW6WhE=", - "requires": { - "JSONStream": "0.8.4", - "minimist": "1.2.0", - "stream-combiner": "0.2.2", - "through2": "0.6.5" - }, - "dependencies": { - "JSONStream": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", - "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=", - "requires": { - "jsonparse": "0.0.5", - "through": "2.3.8" - } - }, - "jsonparse": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", - "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=" - } - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=" - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" - }, - "known-css-properties": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz", - "integrity": "sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==" - }, - "latest-version": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", - "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", - "requires": { - "package-json": "2.4.0" - } - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=" - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "ldjson-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", - "requires": { - "split2": "0.2.1", - "through2": "0.6.5" - } - }, - "levenshtein-edit-distance": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/levenshtein-edit-distance/-/levenshtein-edit-distance-1.0.0.tgz", - "integrity": "sha1-iVuvR4zOi1waDSfkXXwdl4pmHkk=" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "limit-spawn": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/limit-spawn/-/limit-spawn-0.0.3.tgz", - "integrity": "sha1-zAnCRGeg8KHtEKUZbbpZfK0/Zdw=" - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "load-plugin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-2.2.2.tgz", - "integrity": "sha512-FYzamtURIJefQykZGtiClYuZkJBUKzmx8Tc74y8JGAulDzbzVm/C+w/MbAljHRr+REL0cRzy3WgnHE+T8gce5g==", - "requires": { - "npm-prefix": "1.2.0", - "resolve-from": "4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, - "lodash.assigninwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz", - "integrity": "sha1-rwLJhDKshtk9ppW0voAUAZcXNq8=" - }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=" - }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=" - }, - "lodash.defaults": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.0.1.tgz", - "integrity": "sha1-BWeOYSqXFsZLW/LOzwRRMco9NAI=", - "requires": { - "lodash.assigninwith": "4.2.0", - "lodash.rest": "4.0.5" - } - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.intersection": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.intersection/-/lodash.intersection-4.4.0.tgz", - "integrity": "sha1-ChG6Yx0OlcI8fy9Mu5ppLtF45wU=" - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.rest": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.5.tgz", - "integrity": "sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=" - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "1.1.3" - } - }, - "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==" - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "requires": { - "es5-ext": "0.10.44" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "make-iterator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-0.1.1.tgz", - "integrity": "sha1-hz0nuBmKRlqBSDtvXRbaToY+z1s=", - "requires": { - "for-own": "0.1.5" - } - }, - "map-like": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/map-like/-/map-like-1.1.3.tgz", - "integrity": "sha1-b6rKUzngzGVno6Vd0oH9hxo55do=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" - }, - "markdown-escapes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", - "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==" - }, - "markdown-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", - "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" - }, - "markdown-table": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", - "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==" - }, - "markdown-to-ast": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz", - "integrity": "sha1-Diy6gTkLBUmpFT7DsNkVthwWS+c=", - "requires": { - "debug": "2.6.9", - "remark": "5.1.0", - "structured-source": "3.0.2", - "traverse": "0.6.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "longest-streak": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-1.0.0.tgz", - "integrity": "sha1-0GWXxNTDG1LMsfXY+P5xSOr9aWU=" - }, - "markdown-table": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz", - "integrity": "sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE=" - }, - "remark": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz", - "integrity": "sha1-y0Y709vLS5l5STXu4c9x16jjBow=", - "requires": { - "remark-parse": "1.1.0", - "remark-stringify": "1.1.0", - "unified": "4.2.1" - } - }, - "remark-stringify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-1.1.0.tgz", - "integrity": "sha1-pxBeJbnuK/mkm3XSxCPxGwauIJI=", - "requires": { - "ccount": "1.0.3", - "extend": "3.0.1", - "longest-streak": "1.0.0", - "markdown-table": "0.4.0", - "parse-entities": "1.1.2", - "repeat-string": "1.6.1", - "stringify-entities": "1.3.2", - "unherit": "1.1.1" - } - } - } - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" - }, - "mathml-tag-names": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz", - "integrity": "sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==" - }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "1.1.6" - } - }, - "mdast-comment-marker": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.0.2.tgz", - "integrity": "sha1-Hd8O+BH7UkOQF8jSwLkiA18rp0o=" - }, - "mdast-util-compact": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", - "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", - "requires": { - "unist-util-modify-children": "1.1.2", - "unist-util-visit": "1.3.1" - } - }, - "mdast-util-definitions": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.2.tgz", - "integrity": "sha512-9NloPSwaB9f1PKcGqaScfqRf6zKOEjTIXVIbPOmgWI/JKxznlgVXC5C+8qgl3AjYg2vJBRgLYfLICaNiac89iA==", - "requires": { - "unist-util-visit": "1.3.1" - } - }, - "mdast-util-heading-style": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.3.tgz", - "integrity": "sha1-77OQ28iqAWw89XegNJANsn7nJHw=" - }, - "mdast-util-to-nlcst": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.0.tgz", - "integrity": "sha1-2tJihXZY0eq0tYFKIOL5PXyh47Y=", - "requires": { - "nlcst-to-string": "2.0.2", - "repeat-string": "1.6.1", - "unist-util-position": "3.0.1", - "vfile-location": "2.0.3" - } - }, - "mdast-util-to-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz", - "integrity": "sha1-XEVch4yTVfDB5/PotxnPWDaRrPs=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memoizee": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz", - "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-weak-map": "2.0.2", - "event-emitter": "0.3.5", - "is-promise": "2.1.0", - "lru-queue": "0.1.0", - "next-tick": "1.0.0", - "timers-ext": "0.1.5" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - } - }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "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": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "1.33.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "misspellings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/misspellings/-/misspellings-1.1.0.tgz", - "integrity": "sha1-U9UAJmy9Cc2p2UxM85LmBYm1syQ=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" - }, - "morgan": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "requires": { - "basic-auth": "2.0.0", - "debug": "2.6.9", - "depd": "1.1.2", - "on-finished": "2.3.0", - "on-headers": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "mout": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.5.0.tgz", - "integrity": "sha1-/5Z1ZqkPKVlenLi254AKW1ZjVYM=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "neo-async": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-1.8.2.tgz", - "integrity": "sha1-MXlYiLed0ENXp8UhE6ZRg+k7ZzU=" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nlcst-is-literal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/nlcst-is-literal/-/nlcst-is-literal-1.1.2.tgz", - "integrity": "sha512-eFdFvG7XE/YwPFbRk3ryzinTVGWpAEBQNH/FWc4sVSHXUumZtdSVaJYsz0axK4uF1pmlIAWgYWhzDuQ8NTf79A==", - "requires": { - "nlcst-to-string": "2.0.2" - } - }, - "nlcst-normalize": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/nlcst-normalize/-/nlcst-normalize-2.1.2.tgz", - "integrity": "sha512-fvXY7r3MsPFoB7nAUxhuBUJ8UC8wzBpWXuPRNL5DYca805CvThsV1wEIbkD9X/t506vvRfL3rRjXnfmbcl7O4Q==", - "requires": { - "nlcst-to-string": "2.0.2" - } - }, - "nlcst-search": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nlcst-search/-/nlcst-search-1.4.3.tgz", - "integrity": "sha512-10i9bCn5bhtBoab2PKX02h5kQFfhy4r9wDAp0yXxz59xI85prJZ1G1ISVDU/IroZPfaczgE281JK07iIqmKRjw==", - "requires": { - "nlcst-is-literal": "1.1.2", - "nlcst-normalize": "2.1.2", - "unist-util-visit": "1.3.1" - } - }, - "nlcst-to-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.2.tgz", - "integrity": "sha512-DV7wVvMcAsmZ5qEwvX1JUNF4lKkAAKbChwNlIH7NLsPR7LWWoeIt53YlZ5CQH5KDXEXQ9Xa3mw0PbPewymrtew==" - }, - "no-cliches": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/no-cliches/-/no-cliches-0.1.0.tgz", - "integrity": "sha1-9OuBpVH+zegT+MYR415kpRGNw4w=" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" - } - }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=" - }, - "npm-prefix": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/npm-prefix/-/npm-prefix-1.2.0.tgz", - "integrity": "sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=", - "requires": { - "rc": "1.2.8", - "shellsubstitute": "1.2.0", - "untildify": "2.1.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "2.0.1" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "requires": { - "boolbase": "1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "onecolor": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz", - "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=" - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "oniguruma": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-6.2.1.tgz", - "integrity": "sha1-pQ7mlkKEStHSUmhaqxhxcbBuzgQ=", - "requires": { - "nan": "2.10.0" - } - }, - "ono": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.5.tgz", - "integrity": "sha512-ZVNuV9kJbr/2tWs83I2snrYo+WIS0DISF/xUfX9p9b6GyDD6F5N9PzHjW+p/dep6IGwSYylf1HCub5I/nM0R5Q==", - "requires": { - "format-util": "1.0.3" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } - }, - "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=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "1.2.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "package-json": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", - "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", - "requires": { - "got": "5.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" - } - }, - "param-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", - "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=", - "requires": { - "sentence-case": "1.1.3" - } - }, - "parse-english": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-english/-/parse-english-3.0.0.tgz", - "integrity": "sha1-bu+4Wml8DMysuApNbphQqmy5/2c=", - "requires": { - "nlcst-to-string": "2.0.2", - "parse-latin": "3.2.0", - "unist-util-modify-children": "1.1.2", - "unist-util-visit-children": "1.1.2" - } - }, - "parse-entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz", - "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==", - "requires": { - "character-entities": "1.2.2", - "character-entities-legacy": "1.1.2", - "character-reference-invalid": "1.1.2", - "is-alphanumerical": "1.0.2", - "is-decimal": "1.0.2", - "is-hexadecimal": "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=", - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-latin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-3.2.0.tgz", - "integrity": "sha1-z+S0IJgrHSD8Fscd+zPxSN5PHQs=", - "requires": { - "nlcst-to-string": "2.0.2", - "unist-util-modify-children": "1.1.2", - "unist-util-visit-children": "1.1.2" - } - }, - "parserlib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz", - "integrity": "sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=" - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "passive-voice": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/passive-voice/-/passive-voice-0.1.0.tgz", - "integrity": "sha1-Fv+RrkC6DpLEPmcXY/3IQqcCcLE=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "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=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "path-to-glob-pattern": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz", - "integrity": "sha1-Rz5qOikqnRP7rj7czuctO6uoxhk=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "2.3.8" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pipetteur": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pipetteur/-/pipetteur-2.0.3.tgz", - "integrity": "sha1-GVV2CVno0aEcsqUOyD7sRwYz5J8=", - "requires": { - "onecolor": "3.0.5", - "synesthesia": "1.0.1" - } - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "requires": { - "find-up": "2.1.0", - "load-json-file": "4.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "requires": { - "debug-log": "1.0.1", - "find-root": "1.1.0", - "xtend": "4.0.1" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "requires": { - "find-up": "1.1.2" - } - }, - "pkg-up": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", - "requires": { - "find-up": "1.1.2" - } - }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "requires": { - "irregular-plurals": "1.4.0" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=" - }, - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-cli": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-2.6.0.tgz", - "integrity": "sha1-8N45PKoCb8/BsUeYIpia9QjtUV0=", - "requires": { - "chokidar": "1.7.0", - "globby": "4.1.0", - "mkdirp": "0.5.1", - "neo-async": "1.8.2", - "postcss": "5.2.18", - "read-file-stdin": "0.2.1", - "resolve": "1.7.1", - "yargs": "4.8.1" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "6.0.4", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-less": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-0.14.0.tgz", - "integrity": "sha1-xjGwicbM5CK5oQ86lY0r7dOBkyQ=", - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=" - }, - "postcss-reporter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-3.0.0.tgz", - "integrity": "sha1-CeoPN6RExWk4eGBuCbAY6+/3z48=", - "requires": { - "chalk": "1.1.3", - "lodash": "4.17.10", - "log-symbols": "1.0.2", - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=" - }, - "postcss-scss": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-0.4.1.tgz", - "integrity": "sha1-rXcbgfD3L19IRdCKpg+TVXZT1Uw=", - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, - "prettier": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.9.2.tgz", - "integrity": "sha512-piXx9N2WT8hWb7PBbX1glAuJVIkEyUV9F5fMXFINpZ0x3otVOFKKeGmeuiclFJlP/UrgTckyV606VjH2rNK4bw==" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" - }, - "promise": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", - "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", - "requires": { - "asap": "2.0.6" - } - }, - "property-information": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-2.0.0.tgz", - "integrity": "sha1-N7usTjOE5++p0E0JsP4S5Y5BgEw=" - }, - "propose": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", - "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", - "requires": { - "levenshtein-edit-distance": "1.0.0" - } - }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "pug-attrs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", - "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", - "requires": { - "constantinople": "3.1.2", - "js-stringify": "1.0.2", - "pug-runtime": "2.0.4" - } - }, - "pug-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", - "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" - }, - "pug-lexer": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-2.3.2.tgz", - "integrity": "sha1-aLGdlupdwOSoYUiwHLlmwXgVphQ=", - "requires": { - "character-parser": "2.2.0", - "is-expression": "3.0.0", - "pug-error": "1.3.2" - } - }, - "pug-lint": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/pug-lint/-/pug-lint-2.4.0.tgz", - "integrity": "sha1-H1hMFiT6xI5aDQPkCCPK73NnAuA=", - "requires": { - "acorn": "4.0.13", - "commander": "2.15.1", - "css-selector-parser": "1.3.0", - "find-line-column": "0.5.2", - "glob": "7.1.2", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "pug-attrs": "2.0.3", - "pug-error": "1.3.2", - "pug-lexer": "2.3.2", - "resolve": "1.7.1", - "strip-json-comments": "2.0.1", - "void-elements": "2.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "pug-runtime": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", - "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "pump-chain": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pump-chain/-/pump-chain-1.0.0.tgz", - "integrity": "sha1-fVfY2a2BgeqAj1QTxPK8HnhqXjc=", - "requires": { - "bubble-stream-error": "1.0.0", - "pump": "1.0.3", - "sliced": "1.0.1" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "quotation": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quotation/-/quotation-1.1.1.tgz", - "integrity": "sha512-bjz7kEsfg6D3uMeed+VbeypnooGlX7enMnDbx0KLYEEM8J1k24jk2pc+1nyQ1sExnERz8xKXRSZ0EYNIwLM83g==" - }, - "raml-parser": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/raml-parser/-/raml-parser-0.8.18.tgz", - "integrity": "sha1-CHM3UDT4uKHSDBDjFHtiebM0l6g=", - "requires": { - "got": "2.4.0", - "jju": "1.2.1", - "json-schema-ref-parser": "3.3.1", - "object-assign": "4.1.1", - "pluralize": "1.1.6", - "q": "0.9.7", - "uritemplate": "0.3.4" - }, - "dependencies": { - "got": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/got/-/got-2.4.0.tgz", - "integrity": "sha1-5Ah6LNWbXSDy0WnchdIWntnon1Y=", - "requires": { - "duplexify": "3.6.0", - "infinity-agent": "1.0.2", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "object-assign": "2.1.1", - "prepend-http": "1.0.4", - "read-all-stream": "1.0.2", - "statuses": "1.5.0", - "timed-out": "2.0.0" - }, - "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - } - } - }, - "pluralize": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.1.6.tgz", - "integrity": "sha1-5L9dazayr8IsgB98Nyk2F+C9xW0=" - }, - "q": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", - "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=" - }, - "read-all-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-1.0.2.tgz", - "integrity": "sha1-03jPTvbiNrGI6kLRNeWxgKiePpI=" - }, - "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=" - } - } - }, - "raml2obj": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raml2obj/-/raml2obj-2.2.0.tgz", - "integrity": "sha1-/Sp4Qox/K1t94JcekbjnGS5/PVA=", - "requires": { - "q": "1.4.1", - "raml-parser": "0.8.18" - } - }, - "ramllint": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/ramllint/-/ramllint-1.2.6.tgz", - "integrity": "sha1-85K1suD3rWTL4NenXwBh3nCJu1c=", - "requires": { - "cli-color": "1.2.0", - "commander": "2.15.1", - "raml2obj": "2.2.0" - } - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "rc-config-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-1.0.2.tgz", - "integrity": "sha1-xekDqzbCIgTzzKnZ3f1+aP43WOs=", - "requires": { - "debug": "2.6.9", - "js-yaml": "3.11.0", - "json5": "0.5.1", - "object-assign": "4.1.1", - "object-keys": "1.0.11", - "path-exists": "2.1.0", - "require-uncached": "1.0.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - } - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.6" - } - }, - "read-file-stdin": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz", - "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=", - "requires": { - "gather-stream": "1.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "1.7.1" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "requires": { - "rc": "1.2.8", - "safe-buffer": "5.1.2" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "1.2.8" - } - }, - "remark-cli": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-2.1.0.tgz", - "integrity": "sha1-0f42Ok68AtfCloE1Zy307Rhdw4c=", - "requires": { - "markdown-extensions": "1.1.1", - "remark": "6.2.0", - "unified-args": "2.1.0" - }, - "dependencies": { - "remark": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-6.2.0.tgz", - "integrity": "sha1-DHJhSglcdmVJRhH5RywyueAy3Pk=", - "requires": { - "load-plugin": "2.2.2", - "remark-parse": "2.3.0", - "remark-stringify": "2.4.0", - "unified": "5.1.0" - } - }, - "remark-parse": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-2.3.0.tgz", - "integrity": "sha1-ztWL+++ZmTdPn/M/vC5j/isMXDc=", - "requires": { - "collapse-white-space": "1.0.4", - "has": "1.0.1", - "is-alphabetical": "1.0.2", - "is-decimal": "1.0.2", - "is-whitespace-character": "1.0.2", - "is-word-character": "1.0.2", - "markdown-escapes": "1.0.2", - "parse-entities": "1.1.2", - "repeat-string": "1.6.1", - "state-toggle": "1.0.1", - "trim": "0.0.1", - "trim-trailing-lines": "1.1.1", - "unherit": "1.1.1", - "unist-util-remove-position": "1.1.2", - "vfile-location": "2.0.3", - "xtend": "4.0.1" - } - }, - "unified": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-5.1.0.tgz", - "integrity": "sha1-YSaNqbkc6SW+Hz0ZjAJ4sOlxYJQ=", - "requires": { - "bail": "1.0.3", - "extend": "3.0.1", - "has": "1.0.1", - "is-buffer": "1.1.6", - "once": "1.4.0", - "trough": "1.0.2", - "vfile": "2.3.0", - "x-is-string": "0.1.0" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "requires": { - "is-buffer": "1.1.6", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.2", - "vfile-message": "1.0.1" - } - } - } - }, - "remark-lint": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-5.4.0.tgz", - "integrity": "sha1-bnx3uQhErRkxdhxir51lq0bmc0o=", - "requires": { - "decamelize": "1.2.0", - "load-plugin": "2.2.2", - "mdast-util-heading-style": "1.0.3", - "mdast-util-to-string": "1.0.4", - "plur": "2.1.2", - "remark-message-control": "2.0.3", - "trough": "1.0.2", - "unist-util-generated": "1.1.2", - "unist-util-position": "3.0.1", - "unist-util-visit": "1.3.1", - "vfile-location": "2.0.3", - "vfile-sort": "2.1.1", - "wrapped": "1.0.1" - }, - "dependencies": { - "vfile-sort": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.1.1.tgz", - "integrity": "sha512-+fpTWKkVHwI6VF2xtkDTuCA6cH4UPLAxh+KxfU8g8pC0do5RSZCk1HXTTtMJguW0t5jC0PC19owjUZX9SGQ9tw==" - } - } - }, - "remark-message-control": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-2.0.3.tgz", - "integrity": "sha1-uSePrgsRjuJGeYIcfALqm6KmgsQ=", - "requires": { - "mdast-comment-marker": "1.0.2", - "trim": "0.0.1", - "unist-util-visit": "1.3.1", - "vfile-location": "2.0.3" - } - }, - "remark-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-1.1.0.tgz", - "integrity": "sha1-w8oQ+ajaBGFcKPCapOMEUQUm7CE=", - "requires": { - "collapse-white-space": "1.0.4", - "extend": "3.0.1", - "parse-entities": "1.1.2", - "repeat-string": "1.6.1", - "trim": "0.0.1", - "trim-trailing-lines": "1.1.1", - "unherit": "1.1.1", - "unist-util-remove-position": "1.1.2", - "vfile-location": "2.0.3" - } - }, - "remark-retext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-2.0.0.tgz", - "integrity": "sha1-EDnwMqNGsqtHeEkIIKemjKb02Fk=", - "requires": { - "mdast-util-to-nlcst": "3.2.0" - } - }, - "remark-slug": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-4.2.3.tgz", - "integrity": "sha1-jZh9Dl5j1KSeo3uQ/pmaPc/IG3I=", - "requires": { - "github-slugger": "1.2.0", - "mdast-util-to-string": "1.0.4", - "unist-util-visit": "1.3.1" - } - }, - "remark-stringify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-2.4.0.tgz", - "integrity": "sha1-ON0oYVMTmggunZ8X4tSZGXks7C8=", - "requires": { - "ccount": "1.0.3", - "is-alphanumeric": "1.0.0", - "is-decimal": "1.0.2", - "is-whitespace-character": "1.0.2", - "longest-streak": "2.0.2", - "markdown-escapes": "1.0.2", - "markdown-table": "1.1.2", - "mdast-util-compact": "1.0.1", - "parse-entities": "1.1.2", - "repeat-string": "1.6.1", - "state-toggle": "1.0.1", - "stringify-entities": "1.3.2", - "unherit": "1.1.1", - "xtend": "4.0.1" - } - }, - "remark-validate-links": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-5.0.0.tgz", - "integrity": "sha1-KRHh9u7BvFbViQf4kgUPLFoc0Y8=", - "requires": { - "github-url-to-object": "2.2.6", - "mdast-util-definitions": "1.2.2", - "propose": "0.0.5", - "remark-slug": "4.2.3", - "unist-util-visit": "1.3.1", - "urljoin": "0.1.5", - "xtend": "4.0.1" - } - }, - "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=" - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "1.0.2" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "request": { - "version": "2.74.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.74.0.tgz", - "integrity": "sha1-dpPKdou7DqXIzgjAhKRe+gW4kqs=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "bl": "1.1.2", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "1.0.1", - "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.18", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "6.2.3", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3" - }, - "dependencies": { - "bl": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", - "requires": { - "readable-stream": "2.0.6" - } - }, - "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=" - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", - "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=" - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "retext-english": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/retext-english/-/retext-english-2.0.0.tgz", - "integrity": "sha1-xXRL5OcSQDT3DC8nv8uovUmJUbM=", - "requires": { - "parse-english": "3.0.0", - "unherit": "1.1.1" - } - }, - "retext-equality": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/retext-equality/-/retext-equality-2.5.0.tgz", - "integrity": "sha1-wGaWjCocoUthpGb9dJVqJGxrA4I=", - "requires": { - "array-differ": "1.0.0", - "array-intersection": "0.1.2", - "nlcst-normalize": "2.1.2", - "nlcst-search": "1.4.3", - "nlcst-to-string": "2.0.2", - "object-keys": "1.0.11", - "quotation": "1.1.1", - "unist-util-visit": "1.3.1" - } - }, - "retext-profanities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/retext-profanities/-/retext-profanities-3.1.0.tgz", - "integrity": "sha1-RdYoP3HtMygxjFDCnk+vDFv51sk=", - "requires": { - "array-differ": "1.0.0", - "array-intersection": "0.1.2", - "cuss": "1.8.0", - "nlcst-search": "1.4.3", - "nlcst-to-string": "2.0.2", - "object-keys": "1.0.11", - "quotation": "1.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "7.1.2" - } - }, - "rousseau": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/rousseau/-/rousseau-1.0.5.tgz", - "integrity": "sha1-LuUZnICG25D4cYXczbZJVb7PQeI=", - "requires": { - "bash-color": "0.0.3", - "cli-table": "0.3.1", - "crc": "3.2.1", - "find-line-column": "0.5.2", - "lodash": "3.10.1", - "simple-lru-cache": "0.0.1", - "tokenize-english": "1.0.3", - "tokenize-htmltext": "1.0.0", - "tokenize-text": "1.1.3" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "requires": { - "once": "1.4.0" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass-lint": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/sass-lint/-/sass-lint-1.12.1.tgz", - "integrity": "sha1-Yw9pwhaqIGuCMvsqqQe98zNrbYM=", - "requires": { - "commander": "2.15.1", - "eslint": "2.13.1", - "front-matter": "2.1.2", - "fs-extra": "3.0.1", - "glob": "7.1.2", - "globule": "1.2.1", - "gonzales-pe-sl": "4.2.3", - "js-yaml": "3.11.0", - "known-css-properties": "0.3.0", - "lodash.capitalize": "4.2.1", - "lodash.kebabcase": "4.1.1", - "merge": "1.2.0", - "path-is-absolute": "1.0.1", - "util": "0.10.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", - "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.5.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.5.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "gonzales-pe-sl": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz", - "integrity": "sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=", - "requires": { - "minimist": "1.1.3" - } - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=" - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "select-section": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/select-section/-/select-section-0.4.0.tgz", - "integrity": "sha1-K3fuyfauLGC2B0CZSnKhrQ++KVw=", - "requires": { - "map-like": "1.1.3", - "txt-ast-traverse": "1.2.1" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "5.5.0" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "sentence-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", - "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=", - "requires": { - "lower-case": "1.1.4" - } - }, - "sentence-splitter": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sentence-splitter/-/sentence-splitter-2.3.2.tgz", - "integrity": "sha512-QnpHNykm4nI4T6mT+NoVayh9Ixl5DohYCSVqMgPJsO2WejOcqaYTh4HQOkmzaDzXH3NO5pif4z/hpo2NGtgNlg==", - "requires": { - "concat-stream": "1.5.2", - "structured-source": "3.0.2" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" - } - }, - "shellsubstitute": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shellsubstitute/-/shellsubstitute-1.2.0.tgz", - "integrity": "sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "simple-lru-cache": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.1.tgz", - "integrity": "sha1-AzQXHkDtSkhhrCklDrHbIzAL5PA=" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "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==" - }, - "spawn-to-readstream": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/spawn-to-readstream/-/spawn-to-readstream-0.1.3.tgz", - "integrity": "sha1-lnaLcnOaxk/6d8jOLL+YwtIdjb8=", - "requires": { - "limit-spawn": "0.0.3", - "through2": "0.4.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "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=" - }, - "through2": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", - "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "2.1.2" - } - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "requires": { - "object-keys": "0.4.0" - } - } - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" - }, - "specificity": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz", - "integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==" - }, - "split": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", - "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", - "requires": { - "through": "2.3.8" - } - }, - "split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY=" - }, - "split-transform-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/split-transform-stream/-/split-transform-stream-0.1.1.tgz", - "integrity": "sha1-glI2p41SoY/5EqYxrTA0wV3tX+M=", - "requires": { - "bubble-stream-error": "0.0.1", - "event-stream": "3.1.7", - "through2": "0.4.2" - }, - "dependencies": { - "bubble-stream-error": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/bubble-stream-error/-/bubble-stream-error-0.0.1.tgz", - "integrity": "sha1-VeuGhG7PJmBeiWqi8aMbPJ3My2I=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "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=" - }, - "through2": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", - "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "2.1.2" - } - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "requires": { - "object-keys": "0.4.0" - } - } - } - }, - "split2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", - "requires": { - "through2": "0.6.5" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "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=" - } - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stampit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stampit/-/stampit-1.2.0.tgz", - "integrity": "sha1-UfnGoIwUZHP80CGvVRyfMu1ce50=", - "requires": { - "mout": "0.5.0" - } - }, - "standard": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz", - "integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==", - "requires": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-config-standard-jsx": "4.0.2", - "eslint-plugin-import": "2.2.0", - "eslint-plugin-node": "4.2.3", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-react": "6.10.3", - "eslint-plugin-standard": "3.0.1", - "standard-engine": "7.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", - "requires": { - "debug": "2.6.9", - "object-assign": "4.1.1", - "resolve": "1.7.1" - } - }, - "eslint-plugin-import": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.2.3", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "pkg-up": "1.0.0" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "standard-engine": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", - "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=", - "requires": { - "deglob": "2.1.0", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "pkg-conf": "2.1.0" - } - }, - "state-toggle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", - "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "requires": { - "duplexer": "0.1.1", - "through": "2.3.8" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string.prototype.padstart": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz", - "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", - "requires": { - "character-entities-html4": "1.1.2", - "character-entities-legacy": "1.1.2", - "is-alphanumerical": "1.0.2", - "is-hexadecimal": "1.0.2" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "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=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - } - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "structured-source": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", - "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", - "requires": { - "boundary": "1.0.1" - } - }, - "style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=" - }, - "stylehacks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-2.3.2.tgz", - "integrity": "sha1-ZMg+BDimjJ7fRJ6MVSp9mrYAmws=", - "requires": { - "browserslist": "1.7.7", - "chalk": "1.1.3", - "log-symbols": "1.0.2", - "minimist": "1.2.0", - "plur": "2.1.2", - "postcss": "5.2.18", - "postcss-reporter": "1.4.1", - "postcss-selector-parser": "2.2.3", - "read-file-stdin": "0.2.1", - "text-table": "0.2.0", - "write-file-stdout": "0.0.2" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "requires": { - "caniuse-db": "1.0.30000846", - "electron-to-chromium": "1.3.48" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "postcss-reporter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", - "integrity": "sha1-wTbwpbFhkV83ndN2XGEHX357mvI=", - "requires": { - "chalk": "1.1.3", - "lodash": "4.17.10", - "log-symbols": "1.0.2", - "postcss": "5.2.18" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "stylelint": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-7.13.0.tgz", - "integrity": "sha1-ER+Xttpy53XICADWu29fhpmXeF0=", - "requires": { - "autoprefixer": "6.7.7", - "balanced-match": "0.4.2", - "chalk": "2.4.1", - "colorguard": "1.2.1", - "cosmiconfig": "2.2.2", - "debug": "2.6.9", - "doiuse": "2.6.0", - "execall": "1.0.0", - "file-entry-cache": "2.0.0", - "get-stdin": "5.0.1", - "globby": "6.1.0", - "globjoin": "0.1.4", - "html-tags": "2.0.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "known-css-properties": "0.2.0", - "lodash": "4.17.10", - "log-symbols": "1.0.2", - "mathml-tag-names": "2.1.0", - "meow": "3.7.0", - "micromatch": "2.3.11", - "normalize-selector": "0.2.0", - "pify": "2.3.0", - "postcss": "5.2.18", - "postcss-less": "0.14.0", - "postcss-media-query-parser": "0.2.3", - "postcss-reporter": "3.0.0", - "postcss-resolve-nested-selector": "0.1.1", - "postcss-scss": "0.4.1", - "postcss-selector-parser": "2.2.3", - "postcss-value-parser": "3.3.0", - "resolve-from": "3.0.0", - "specificity": "0.3.2", - "string-width": "2.1.1", - "style-search": "0.1.0", - "stylehacks": "2.3.2", - "sugarss": "0.2.0", - "svg-tags": "1.0.0", - "table": "4.0.3" - }, - "dependencies": { - "ajv": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", - "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1", - "uri-js": "4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000846", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "requires": { - "caniuse-db": "1.0.30000846", - "electron-to-chromium": "1.3.48" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "known-css-properties": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.2.0.tgz", - "integrity": "sha512-UTCzU28rRI9wkb8qSGoZa9pgWvxr4LjP2MEhi9XHb/1XMOJy0uTnIxaxzj8My/PORG+kQG6VzAcGvRw66eIOfA==" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "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=" - } - } - } - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "requires": { - "is-fullwidth-code-point": "2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - }, - "table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", - "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", - "requires": { - "ajv": "6.5.0", - "ajv-keywords": "3.2.0", - "chalk": "2.4.1", - "lodash": "4.17.10", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - } - } - } - }, - "stylint": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/stylint/-/stylint-1.5.9.tgz", - "integrity": "sha1-KfTcEp+hyiIVDNhnIjzuK+1f9qI=", - "requires": { - "async": "1.5.2", - "chalk": "1.1.3", - "chokidar": "1.5.2", - "columnify": "1.5.4", - "glob": "7.0.4", - "lodash.defaults": "4.0.1", - "path-is-absolute": "1.0.0", - "stampit": "1.2.0", - "strip-json-comments": "2.0.1", - "user-home": "2.0.0", - "yargs": "4.7.1" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "chokidar": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.5.2.tgz", - "integrity": "sha1-KT5yhkDMk92Cd0JDNLPG1K06NIo=", - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.0", - "readdirp": "2.1.0" - } - }, - "glob": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.4.tgz", - "integrity": "sha1-O0SvoJQ73DGyA3uTR5Hi4IS8t/Y=", - "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.0" - } - }, - "path-is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", - "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=" - }, - "pkg-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", - "integrity": "sha1-N45W1v0T6Iv7b0ol33qD+qvduls=", - "requires": { - "find-up": "1.1.2", - "load-json-file": "1.1.0", - "object-assign": "4.1.1", - "symbol": "0.2.3" - } - }, - "set-blocking": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-1.0.0.tgz", - "integrity": "sha1-zV5dk4BI3xrJLf6S4fFq3WVvXsU=" - }, - "yargs": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.7.1.tgz", - "integrity": "sha1-5gQyZYozh/8mnAKOrN5KUS5Djf8=", - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "lodash.assign": "4.2.0", - "os-locale": "1.4.0", - "pkg-conf": "1.1.3", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1", - "set-blocking": "1.0.0", - "string-width": "1.0.2", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "2.4.1" - } - } - } - }, - "sugarss": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-0.2.0.tgz", - "integrity": "sha1-rDQjdWMyfG/4l7ZHQr9q7BkK054=", - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.5", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" - }, - "symbol": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", - "integrity": "sha1-O5hzuKkB5Hxu/iFSajrDcu8ou8c=" - }, - "synesthesia": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/synesthesia/-/synesthesia-1.0.1.tgz", - "integrity": "sha1-XvlepUjA1cbm+btLDQcx3/hkp3c=", - "requires": { - "css-color-names": "0.0.3" - } - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.10", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-fs": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.12.0.tgz", - "integrity": "sha1-pqgFU9ilTHPeHQrg553ncDVgXh0=", - "requires": { - "mkdirp": "0.5.1", - "pump": "1.0.3", - "tar-stream": "1.6.1" - } - }, - "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", - "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "textlint": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-7.3.0.tgz", - "integrity": "sha1-TVzjbIqmWmwfpvI2iyXBsQsIuac=", - "requires": { - "bluebird": "3.5.1", - "carrack": "0.0.5", - "chalk": "1.1.3", - "debug": "2.6.9", - "deep-equal": "1.0.1", - "diff": "2.2.3", - "file-entry-cache": "2.0.0", - "get-stdin": "5.0.1", - "glob": "7.1.2", - "interop-require": "1.0.0", - "is-file": "1.0.0", - "log-symbols": "1.0.2", - "map-like": "1.1.3", - "md5": "2.2.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "optionator": "0.8.2", - "path-to-glob-pattern": "1.0.2", - "rc-config-loader": "1.0.2", - "read-pkg": "1.1.0", - "shelljs": "0.7.8", - "string-width": "1.0.2", - "structured-source": "3.0.2", - "text-table": "0.2.0", - "textlint-formatter": "1.8.0", - "textlint-plugin-markdown": "1.1.0", - "textlint-plugin-text": "1.1.4", - "traverse": "0.6.6", - "try-resolve": "1.0.1", - "txt-ast-traverse": "1.2.1", - "unique-concat": "0.2.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "textlint-ast-test": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/textlint-ast-test/-/textlint-ast-test-1.1.4.tgz", - "integrity": "sha1-JlXHLhVfPIQ5N8SorchzUhFr7r4=" - }, - "textlint-formatter": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/textlint-formatter/-/textlint-formatter-1.8.0.tgz", - "integrity": "sha1-MlTpvX1MjPAxt0d4vyG8CG+v8+s=", - "requires": { - "@azu/format-text": "1.0.1", - "@azu/style-format": "1.0.0", - "chalk": "1.1.3", - "concat-stream": "1.5.2", - "js-yaml": "3.2.7", - "optionator": "0.8.2", - "pluralize": "2.0.0", - "string-width": "1.0.2", - "string.prototype.padstart": "3.0.0", - "strip-ansi": "3.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "try-resolve": "1.0.1", - "xml-escape": "1.1.0" - }, - "dependencies": { - "pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=" - } - } - }, - "textlint-plugin-asciidoc-loose": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/textlint-plugin-asciidoc-loose/-/textlint-plugin-asciidoc-loose-1.0.1.tgz", - "integrity": "sha1-saRxULMHsEgmxWJWPzYkqox7SPM=", - "requires": { - "structured-source": "3.0.2", - "vscode-textmate": "1.2.0" - } - }, - "textlint-plugin-html": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/textlint-plugin-html/-/textlint-plugin-html-0.1.7.tgz", - "integrity": "sha512-I2wHH7NhzUbw6sUUNsbHL7I1qzwp1te3Q/rekO/im0osSWi7M3FRrACMcWL8uCZmd7tAoNyBPemjc465gWPqng==", - "requires": { - "hast": "0.0.2", - "structured-source": "3.0.2", - "traverse": "0.6.6" - } - }, - "textlint-plugin-markdown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/textlint-plugin-markdown/-/textlint-plugin-markdown-1.1.0.tgz", - "integrity": "sha1-NkkOsnBPSWm0svAMYkGXER5dFWg=", - "requires": { - "markdown-to-ast": "3.4.0" - } - }, - "textlint-plugin-review": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/textlint-plugin-review/-/textlint-plugin-review-0.3.3.tgz", - "integrity": "sha1-dXWutWL833WX4U9VIwuAXOxzXrg=", - "requires": { - "textlint-ast-test": "1.1.4", - "txt-ast-traverse": "1.2.1" - } - }, - "textlint-plugin-rst": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/textlint-plugin-rst/-/textlint-plugin-rst-0.1.1.tgz", - "integrity": "sha1-7l+MlHqUfWsHwcRlFYaWMtVuBrU=", - "requires": { - "debug": "2.6.9", - "structured-source": "3.0.2", - "traverse": "0.6.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "textlint-plugin-text": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/textlint-plugin-text/-/textlint-plugin-text-1.1.4.tgz", - "integrity": "sha1-/iB5Fnt5ub7CaetoQmUIFmS7HR0=", - "requires": { - "txt-to-ast": "1.1.0" - } - }, - "textlint-rule-alex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/textlint-rule-alex/-/textlint-rule-alex-1.2.0.tgz", - "integrity": "sha1-saEFlxstnmnMBcmuQnaPA7cgK10=", - "requires": { - "alex": "4.1.0", - "textlint-rule-helper": "2.0.0" - }, - "dependencies": { - "alex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/alex/-/alex-4.1.0.tgz", - "integrity": "sha1-bFVYC7ctMj2J5ZRoFGX0Rsu/E3A=", - "requires": { - "meow": "3.7.0", - "remark-message-control": "4.1.0", - "remark-parse": "3.0.1", - "remark-retext": "3.1.0", - "retext-english": "3.0.0", - "retext-equality": "3.3.0", - "retext-profanities": "4.4.0", - "unified": "6.2.0", - "unified-diff": "1.0.2", - "unified-engine": "3.1.1", - "update-notifier": "2.5.0", - "vfile": "2.3.0", - "vfile-reporter": "3.1.0", - "vfile-sort": "2.1.1" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "requires": { - "string-width": "2.1.1" - }, - "dependencies": { - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - } - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.1", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" - }, - "dependencies": { - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - } - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.3.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "1.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "4.0.1" - } - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.0" - } - }, - "parse-english": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/parse-english/-/parse-english-4.1.1.tgz", - "integrity": "sha512-g7hegR9AFIlGXl5645mG8nQeeWW7SrK7lgmgIWR0KKWvGyZO5mxa4GGoNxRLm6VW2LGpLnn6g4O9yyLJQ4IzQw==", - "requires": { - "nlcst-to-string": "2.0.2", - "parse-latin": "4.1.1", - "unist-util-modify-children": "1.1.2", - "unist-util-visit-children": "1.1.2" - } - }, - "parse-latin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-4.1.1.tgz", - "integrity": "sha512-9fPVvDdw6G8LxL3o/PL6IzSGNGpF+3HEjCzFe0dN83sZPstftyr+McP9dNi3+EnR7ICYOHbHKCZ0l7JD90K5xQ==", - "requires": { - "nlcst-to-string": "2.0.2", - "unist-util-modify-children": "1.1.2", - "unist-util-visit-children": "1.1.2" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" - }, - "remark-message-control": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-4.1.0.tgz", - "integrity": "sha512-e1dszks4YKY7hLAkhS2367jBjBpAfvi+kVgSN/tOFrdp3qxITjiNR5fOFnyYF8vvorkQ9uxlKJoZUOW8T7rKDg==", - "requires": { - "mdast-comment-marker": "1.0.2", - "unified-message-control": "1.0.4", - "xtend": "4.0.1" - } - }, - "remark-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-3.0.1.tgz", - "integrity": "sha1-G5+EGkTY9PvyJGhQJlRZpOs1TIA=", - "requires": { - "collapse-white-space": "1.0.4", - "has": "1.0.1", - "is-alphabetical": "1.0.2", - "is-decimal": "1.0.2", - "is-whitespace-character": "1.0.2", - "is-word-character": "1.0.2", - "markdown-escapes": "1.0.2", - "parse-entities": "1.1.2", - "repeat-string": "1.6.1", - "state-toggle": "1.0.1", - "trim": "0.0.1", - "trim-trailing-lines": "1.1.1", - "unherit": "1.1.1", - "unist-util-remove-position": "1.1.2", - "vfile-location": "2.0.3", - "xtend": "4.0.1" - } - }, - "remark-retext": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-3.1.0.tgz", - "integrity": "sha1-Gz3y1JRpwNNZbK2G6RUDqLYA/cw=", - "requires": { - "mdast-util-to-nlcst": "3.2.0" - } - }, - "retext-english": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/retext-english/-/retext-english-3.0.0.tgz", - "integrity": "sha1-wXy1a9Xxuj3uM1XdurefHEiUqAk=", - "requires": { - "parse-english": "4.1.1", - "unherit": "1.1.1" - } - }, - "retext-equality": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/retext-equality/-/retext-equality-3.3.0.tgz", - "integrity": "sha512-+UQDawTxsOHzIILr5Qodf3CS9Av4NX68kOI9/CWwSlhRMQ5VUGdS+P2WXXnywLDQ9oilOHKfnElAV/6I7yIxDA==", - "requires": { - "lodash.difference": "4.5.0", - "lodash.intersection": "4.4.0", - "nlcst-normalize": "2.1.2", - "nlcst-search": "1.4.3", - "nlcst-to-string": "2.0.2", - "object-keys": "1.0.11", - "quotation": "1.1.1", - "unist-util-visit": "1.3.1" - } - }, - "retext-profanities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/retext-profanities/-/retext-profanities-4.4.0.tgz", - "integrity": "sha512-Gesb0Act9oeJ5N0KztREitP2E0zo7euzgTu2X4HLP6IJmcrRbRnqNwV11tzNy5JFJzKB1JTJFc7KseojTeGwOA==", - "requires": { - "cuss": "1.8.0", - "lodash.difference": "4.5.0", - "lodash.intersection": "4.4.0", - "nlcst-search": "1.4.3", - "nlcst-to-string": "2.0.2", - "object-keys": "1.0.11", - "pluralize": "7.0.0", - "quotation": "1.1.1" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "to-vfile": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-2.2.0.tgz", - "integrity": "sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==", - "requires": { - "is-buffer": "1.1.6", - "vfile": "2.3.0", - "x-is-function": "1.0.4" - } - }, - "unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", - "requires": { - "bail": "1.0.3", - "extend": "3.0.1", - "is-plain-obj": "1.1.0", - "trough": "1.0.2", - "vfile": "2.3.0", - "x-is-string": "0.1.0" - } - }, - "unified-engine": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-3.1.1.tgz", - "integrity": "sha1-eSVBgm306XtkDM3ZDspiE1bkyec=", - "requires": { - "concat-stream": "1.5.2", - "debug": "2.6.9", - "fault": "1.0.2", - "fn-name": "2.0.1", - "glob": "7.1.2", - "has": "1.0.1", - "ignore": "3.3.8", - "is-empty": "1.2.0", - "is-hidden": "1.1.1", - "is-object": "1.0.1", - "js-yaml": "3.11.0", - "load-plugin": "2.2.2", - "parse-json": "2.2.0", - "to-vfile": "2.2.0", - "trough": "1.0.2", - "vfile-reporter": "3.1.0", - "vfile-statistics": "1.1.1", - "x-is-function": "1.0.4", - "x-is-string": "0.1.0", - "xtend": "4.0.1" - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.1", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "requires": { - "is-buffer": "1.1.6", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.2", - "vfile-message": "1.0.1" - } - }, - "vfile-reporter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-3.1.0.tgz", - "integrity": "sha1-qbOYxebcvIqaCObPQl8JLoajcAA=", - "requires": { - "repeat-string": "1.6.1", - "string-width": "1.0.2", - "supports-color": "4.5.0", - "unist-util-stringify-position": "1.1.2", - "vfile-statistics": "1.1.1" - } - }, - "vfile-sort": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.1.1.tgz", - "integrity": "sha512-+fpTWKkVHwI6VF2xtkDTuCA6cH4UPLAxh+KxfU8g8pC0do5RSZCk1HXTTtMJguW0t5jC0PC19owjUZX9SGQ9tw==" - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "requires": { - "string-width": "2.1.1" - }, - "dependencies": { - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - } - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - } - } - }, - "textlint-rule-common-misspellings": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/textlint-rule-common-misspellings/-/textlint-rule-common-misspellings-1.0.1.tgz", - "integrity": "sha1-jEEzzzu1mqFZGZ0sm87RJBM2V3Q=", - "requires": { - "misspellings": "1.1.0", - "textlint-rule-helper": "1.2.0" - }, - "dependencies": { - "textlint-rule-helper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-1.2.0.tgz", - "integrity": "sha1-vmjUelFGsW3RFieMmut701YxzNo=", - "requires": { - "unist-util-visit": "1.3.1" - } - } - } - }, - "textlint-rule-date-weekday-mismatch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/textlint-rule-date-weekday-mismatch/-/textlint-rule-date-weekday-mismatch-1.0.5.tgz", - "integrity": "sha1-KsJWi+UUnWXUqaUH6aqIf31Qxgs=", - "requires": { - "chrono-node": "1.3.5", - "moment": "2.22.1" - } - }, - "textlint-rule-ginger": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/textlint-rule-ginger/-/textlint-rule-ginger-2.1.1.tgz", - "integrity": "sha1-Cn2sDuRnhfjsVt1AuN2r3f8qPF0=", - "requires": { - "es6-promisify": "5.0.0", - "gingerbread": "0.5.0", - "textlint-rule-helper": "2.0.0", - "textlint-util-to-string": "2.1.1" - } - }, - "textlint-rule-helper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.0.0.tgz", - "integrity": "sha1-lctGlslcQljS4zienmS4SflyE4I=", - "requires": { - "unist-util-visit": "1.3.1" - } - }, - "textlint-rule-max-comma": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/textlint-rule-max-comma/-/textlint-rule-max-comma-1.0.4.tgz", - "integrity": "sha1-9VXJfg0wOcp9oGz9GvrQ5fWJmjc=", - "requires": { - "sentence-splitter": "2.3.2", - "unist-util-filter": "0.2.1" - } - }, - "textlint-rule-max-number-of-lines": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/textlint-rule-max-number-of-lines/-/textlint-rule-max-number-of-lines-1.0.3.tgz", - "integrity": "sha1-/OZh1QQjiESTlhZOgwd40CTy5Zs=", - "requires": { - "object-assign": "4.1.1" - } - }, - "textlint-rule-ng-word": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/textlint-rule-ng-word/-/textlint-rule-ng-word-1.0.0.tgz", - "integrity": "sha1-s4miOepLSZL0VeKvNrsGL8bkLTk=" - }, - "textlint-rule-no-dead-link": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-3.1.1.tgz", - "integrity": "sha1-GQFu8RHF36d8mog9bL9nKHxiv1Y=", - "requires": { - "isomorphic-fetch": "2.2.1", - "textlint-rule-helper": "2.0.0" - } - }, - "textlint-rule-no-empty-section": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz", - "integrity": "sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc=", - "requires": { - "select-section": "0.4.0" - } - }, - "textlint-rule-no-start-duplicated-conjunction": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/textlint-rule-no-start-duplicated-conjunction/-/textlint-rule-no-start-duplicated-conjunction-1.1.4.tgz", - "integrity": "sha512-zIWRXqI33El4w6lkdAcP+vD7edVIzMHaboR/Xg5PodD2ZkpEC/METwOlbk3XtZSE6Jbb4pN8Wr+HoNZNIaOLDw==", - "requires": { - "object-assign": "4.1.1", - "sentence-splitter": "2.3.2", - "textlint-rule-helper": "2.0.0", - "textlint-util-to-string": "2.1.1" - } - }, - "textlint-rule-no-todo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/textlint-rule-no-todo/-/textlint-rule-no-todo-2.0.0.tgz", - "integrity": "sha1-h3uOYMNM+E3zlX1pTl0PXCFYty8=", - "requires": { - "textlint-rule-helper": "1.2.0" - }, - "dependencies": { - "textlint-rule-helper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-1.2.0.tgz", - "integrity": "sha1-vmjUelFGsW3RFieMmut701YxzNo=", - "requires": { - "unist-util-visit": "1.3.1" - } - } - } - }, - "textlint-rule-period-in-list-item": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/textlint-rule-period-in-list-item/-/textlint-rule-period-in-list-item-0.2.0.tgz", - "integrity": "sha1-4J2iccXE5XMB+Y8tpgfFGvvRXtM=", - "requires": { - "check-ends-with-period": "1.0.1", - "unist-util-select": "1.5.0" - } - }, - "textlint-rule-rousseau": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/textlint-rule-rousseau/-/textlint-rule-rousseau-1.4.5.tgz", - "integrity": "sha1-XMiy/hEkQTvYKz0LIXeIkttCo6w=", - "requires": { - "object-assign": "4.1.1", - "rousseau": "1.0.5", - "textlint-rule-helper": "2.0.0", - "textlint-util-to-string": "1.2.1", - "unist-util-map": "1.0.4" - }, - "dependencies": { - "textlint-util-to-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/textlint-util-to-string/-/textlint-util-to-string-1.2.1.tgz", - "integrity": "sha1-HPiZVtJ1VaVelYjAazWlDw0dRvk=", - "requires": { - "object-assign": "4.1.1", - "structured-source": "3.0.2" - } - } - } - }, - "textlint-rule-unexpanded-acronym": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/textlint-rule-unexpanded-acronym/-/textlint-rule-unexpanded-acronym-1.2.1.tgz", - "integrity": "sha1-TlxkmJj+pwLCNoO2DUb+l/2QMRc=", - "requires": { - "array-includes": "3.0.3", - "is-capitalized": "1.0.0" - } - }, - "textlint-rule-write-good": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/textlint-rule-write-good/-/textlint-rule-write-good-1.6.2.tgz", - "integrity": "sha1-PHmwQJExnU6L5ftELFlr9QDoST4=", - "requires": { - "textlint-rule-helper": "2.0.0", - "write-good": "0.11.3" - }, - "dependencies": { - "write-good": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/write-good/-/write-good-0.11.3.tgz", - "integrity": "sha512-fDKIHO5wCzTLCOGNJl1rzzJrZlTIzfZl8msOoJQZzRhYo0X/tFTm4+2B1zTibFYK01Nnd1kLZBjj4xjcFLePNQ==", - "requires": { - "adverb-where": "0.0.9", - "e-prime": "0.10.2", - "no-cliches": "0.1.0", - "object.assign": "4.1.0", - "passive-voice": "0.1.0", - "too-wordy": "0.1.4", - "weasel-words": "0.1.1" - } - } - } - }, - "textlint-util-to-string": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/textlint-util-to-string/-/textlint-util-to-string-2.1.1.tgz", - "integrity": "sha512-PW6rXqLNGL3xZ6d5/INrX+pt8qbffmeDPLcvkBOlfNpDRFhVvNNjFmZXH86ZQjrOz9t/nNZDBXqnzqJuioJbSQ==", - "requires": { - "object-assign": "4.1.1", - "structured-source": "3.0.2" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "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=" - } - } - }, - "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" - }, - "timers-ext": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz", - "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", - "requires": { - "es5-ext": "0.10.44", - "next-tick": "1.0.0" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-vfile": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-1.0.0.tgz", - "integrity": "sha1-iN7+zUOtsu9ZhiXw49WffzQpQbo=", - "requires": { - "vfile": "1.4.0" - } - }, - "tokenize-english": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tokenize-english/-/tokenize-english-1.0.3.tgz", - "integrity": "sha1-tBxrp13HcCEXgEgT9cCmDu1gc6I=", - "requires": { - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } - }, - "tokenize-htmltext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tokenize-htmltext/-/tokenize-htmltext-1.0.0.tgz", - "integrity": "sha1-btlWYUqPMhV2eBkNUfwAo4aaD/g=", - "requires": { - "htmlparser2": "3.8.3" - } - }, - "tokenize-text": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tokenize-text/-/tokenize-text-1.1.3.tgz", - "integrity": "sha1-iwWdatojYYQC8TPbOAjjdSXNXns=", - "requires": { - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - } - } - }, - "too-wordy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/too-wordy/-/too-wordy-0.1.4.tgz", - "integrity": "sha1-jnsgp7ek2Pw3WfTgDEkpmT0bEvA=" - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "1.4.1" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "trim-trailing-lines": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", - "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==" - }, - "trough": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz", - "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==" - }, - "try-resolve": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=" - }, - "tslint": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-3.15.1.tgz", - "integrity": "sha1-2hZcqT2P3CwIa1EWXuG6y0jJjqU=", - "requires": { - "colors": "1.3.0", - "diff": "2.2.3", - "findup-sync": "0.3.0", - "glob": "7.1.2", - "optimist": "0.6.1", - "resolve": "1.7.1", - "underscore.string": "3.3.4" - }, - "dependencies": { - "colors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", - "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==" - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "txt-ast-traverse": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz", - "integrity": "sha1-WOP+Q92121yotRFClDsNG5cN70E=" - }, - "txt-to-ast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/txt-to-ast/-/txt-to-ast-1.1.0.tgz", - "integrity": "sha1-65GnSE/0peE29tJM5aR6hszBEAg=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.4.tgz", - "integrity": "sha512-IIU5cN1mR5J3z9jjdESJbnxikTrEz3lzAw/D0Tf45jHpBp55nY31UkUvmVHoffCfKHTqJs3fCLPDxknQTTFegQ==" - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "requires": { - "sprintf-js": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "unherit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", - "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", - "requires": { - "inherits": "2.0.3", - "xtend": "4.0.1" - } - }, - "unified": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz", - "integrity": "sha1-dv9Dqo2kMPbn5KVchOusKtLPzS4=", - "requires": { - "bail": "1.0.3", - "extend": "3.0.1", - "has": "1.0.1", - "once": "1.4.0", - "trough": "1.0.2", - "vfile": "1.4.0" - } - }, - "unified-args": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-2.1.0.tgz", - "integrity": "sha1-oSI1RO+I4M7at9cX1qeTRADe1gc=", - "requires": { - "camelcase": "3.0.0", - "chalk": "1.1.3", - "chokidar": "1.7.0", - "minimist": "1.2.0", - "text-table": "0.2.0", - "unified-engine": "2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - } - } - }, - "unified-diff": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unified-diff/-/unified-diff-1.0.2.tgz", - "integrity": "sha1-kgsz2pq64IfdREkENy58P702fYU=", - "requires": { - "git-diff-tree": "1.0.0", - "vfile-find-up": "2.0.2" - }, - "dependencies": { - "to-vfile": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-2.2.0.tgz", - "integrity": "sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==", - "requires": { - "is-buffer": "1.1.6", - "vfile": "2.3.0", - "x-is-function": "1.0.4" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "requires": { - "is-buffer": "1.1.6", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.2", - "vfile-message": "1.0.1" - } - }, - "vfile-find-up": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-find-up/-/vfile-find-up-2.0.2.tgz", - "integrity": "sha512-kYGgsSNpYjPxcEoud1aHNFfchsV0Z6Pyc8M5LfD1wX/tV0/bn32MKHDfv4fqV9DBLVuw2YSGOs31nRY/42DfUA==", - "requires": { - "to-vfile": "2.2.0" - } - } - } - }, - "unified-engine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-2.1.0.tgz", - "integrity": "sha1-IVqzMrMqbCE3+8ocEsK8vBRn0WQ=", - "requires": { - "concat-stream": "1.5.2", - "debug": "2.6.9", - "fn-name": "2.0.1", - "glob": "7.1.2", - "globby": "6.1.0", - "is-hidden": "1.1.1", - "js-yaml": "3.11.0", - "load-plugin": "2.2.2", - "minimatch": "3.0.4", - "parse-json": "2.2.0", - "to-vfile": "2.2.0", - "trough": "1.0.2", - "user-home": "2.0.0", - "vfile-find-down": "2.0.3", - "vfile-find-up": "2.0.2", - "vfile-reporter": "3.1.0", - "vfile-statistics": "1.1.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - }, - "to-vfile": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-2.2.0.tgz", - "integrity": "sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==", - "requires": { - "is-buffer": "1.1.6", - "vfile": "2.3.0", - "x-is-function": "1.0.4" - } - }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "requires": { - "is-buffer": "1.1.6", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "1.1.2", - "vfile-message": "1.0.1" - } - }, - "vfile-find-down": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-find-down/-/vfile-find-down-2.0.3.tgz", - "integrity": "sha512-makj7zpPxA2zhDOCIlftLj3WGWDQazOhPwJJSSK4ad0w4dHmLwTrIR4Skzk+KRdVS02T6mxDK4kEYDoaHuxtQg==", - "requires": { - "to-vfile": "2.2.0" - } - }, - "vfile-find-up": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-find-up/-/vfile-find-up-2.0.2.tgz", - "integrity": "sha512-kYGgsSNpYjPxcEoud1aHNFfchsV0Z6Pyc8M5LfD1wX/tV0/bn32MKHDfv4fqV9DBLVuw2YSGOs31nRY/42DfUA==", - "requires": { - "to-vfile": "2.2.0" - } - }, - "vfile-reporter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-3.1.0.tgz", - "integrity": "sha1-qbOYxebcvIqaCObPQl8JLoajcAA=", - "requires": { - "repeat-string": "1.6.1", - "string-width": "1.0.2", - "supports-color": "4.5.0", - "unist-util-stringify-position": "1.1.2", - "vfile-statistics": "1.1.1" - } - } - } - }, - "unified-message-control": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-1.0.4.tgz", - "integrity": "sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==", - "requires": { - "trim": "0.0.1", - "unist-util-visit": "1.3.1", - "vfile-location": "2.0.3" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "unique-concat": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz", - "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=" - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "1.0.0" - } - }, - "unist-util-filter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/unist-util-filter/-/unist-util-filter-0.2.1.tgz", - "integrity": "sha1-4veHaCiQOmqTCONiBR+GsU81tUU=", - "requires": { - "flatmap": "0.0.3", - "unist-util-is": "1.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-1.0.0.tgz", - "integrity": "sha1-THs8XA9qqWNkAFb+Sve1/P27jvA=" - } - } - }, - "unist-util-generated": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.2.tgz", - "integrity": "sha512-1HcwiEO62dr0XWGT+abVK4f0aAm8Ik8N08c5nAYVmuSxfvpA9rCcNyX/le8xXj1pJK5nBrGlZefeWB6bN8Pstw==" - }, - "unist-util-is": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", - "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==" - }, - "unist-util-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-1.0.4.tgz", - "integrity": "sha512-Qv68pQz05hQbjPI+TubZQI5XII5DScRVWaKNc6+qfmHaFGxaGUbkV8i++mM2nk7XgwXE+vei99d/Q2d1tMA3EQ==", - "requires": { - "object-assign": "4.1.1" - } - }, - "unist-util-modify-children": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.2.tgz", - "integrity": "sha512-GRi04yhng1WqBf5RBzPkOtWAadcZS2gvuOgNn/cyJBYNxtTuyYqTKN0eg4rC1YJwGnzrqfRB3dSKm8cNCjNirg==", - "requires": { - "array-iterate": "1.1.2" - } - }, - "unist-util-position": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.1.tgz", - "integrity": "sha512-05QfJDPI7PE1BIUtAxeSV+cDx21xP7+tUZgSval5CA7tr0pHBwybF7OnEa1dOFqg6BfYH/qiMUnWwWj+Frhlww==" - }, - "unist-util-remove-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", - "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", - "requires": { - "unist-util-visit": "1.3.1" - } - }, - "unist-util-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-1.5.0.tgz", - "integrity": "sha1-qTwr6MD2U4J4A7gTMa3sKqJM2TM=", - "requires": { - "css-selector-parser": "1.3.0", - "debug": "2.6.9", - "nth-check": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - }, - "unist-util-visit": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.1.tgz", - "integrity": "sha512-0fdB9EQJU0tho5tK0VzOJzAQpPv2LyLZ030b10GxuzAWEfvd54mpY7BMjQ1L69k2YNvL+SvxRzH0yUIehOO8aA==", - "requires": { - "unist-util-is": "2.1.2" - } - }, - "unist-util-visit-children": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-1.1.2.tgz", - "integrity": "sha512-q4t6aprUcSQ2/+xlswuh2wUKwUUuMmDjSkfwkMjeVwCXc8NqX8g0FSmNf68CznCmbkrsOPDUR0wj14bCFXXqbA==" - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" - }, - "update-notifier": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", - "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", - "requires": { - "boxen": "0.6.0", - "chalk": "1.1.3", - "configstore": "2.1.0", - "is-npm": "1.0.0", - "latest-version": "2.0.0", - "lazy-req": "1.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "2.0.0" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "uritemplate": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/uritemplate/-/uritemplate-0.3.4.tgz", - "integrity": "sha1-BdCoU/+8iw9Jqj1NKtd3sNHuBww=" - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "urljoin": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/urljoin/-/urljoin-0.1.5.tgz", - "integrity": "sha1-sl0sYRLFWsnVAJakmg8ft/T1OSE=", - "requires": { - "extend": "2.0.1" - }, - "dependencies": { - "extend": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.1.tgz", - "integrity": "sha1-HugBBonnOV/5RIJByYZSvHWagmA=" - } - } - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" - } - }, - "validator": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.2.0.tgz", - "integrity": "sha512-gz/uknWtNfZTj1BLUzYHDxOoiQ7A4wZ6xPuuE6RpxswR4cNyT4I5kN9jmU0AQr7IBEap9vfYChI2TpssTN6Itg==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "vfile": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", - "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=" - }, - "vfile-find-down": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vfile-find-down/-/vfile-find-down-1.0.0.tgz", - "integrity": "sha1-hKTWbQNRP2FAqE4Hdu8ISNTwrZU=", - "requires": { - "to-vfile": "1.0.0" - } - }, - "vfile-find-up": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vfile-find-up/-/vfile-find-up-1.0.0.tgz", - "integrity": "sha1-VgTab+RTs0NQY3mE61/kkJ4oA5A=", - "requires": { - "to-vfile": "1.0.0" - } - }, - "vfile-location": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz", - "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==" - }, - "vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==", - "requires": { - "unist-util-stringify-position": "1.1.2" - } - }, - "vfile-reporter": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-1.5.0.tgz", - "integrity": "sha1-IacAm/5V4k34/0Mqpb9vbvp05Bg=", - "requires": { - "chalk": "1.1.3", - "log-symbols": "1.0.2", - "plur": "2.1.2", - "repeat-string": "1.6.1", - "string-width": "1.0.2", - "text-table": "0.2.0", - "vfile-sort": "1.0.0" - } - }, - "vfile-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-1.0.0.tgz", - "integrity": "sha1-F+5JG6Q+iVG7IpE/z/MqfcTSNNQ=" - }, - "vfile-statistics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.1.tgz", - "integrity": "sha512-dxUM6IYvGChHuwMT3dseyU5BHprNRXzAV0OHx1A769lVGsTiT50kU7BbpRFV+IE6oWmU+PwHdsTKfXhnDIRIgQ==" - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" - }, - "vow": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.4.tgz", - "integrity": "sha1-yf5GCRKdf1qmIVCOvmS1HJW8e5g=" - }, - "vow-fs": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", - "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", - "requires": { - "glob": "7.1.2", - "uuid": "2.0.3", - "vow": "0.4.17", - "vow-queue": "0.4.3" - }, - "dependencies": { - "vow": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.17.tgz", - "integrity": "sha512-A3/9bWFqf6gT0jLR4/+bT+IPTe1mQf+tdsW6+WI5geP9smAp8Kbbu4R6QQCDKZN/8TSCqTlXVQm12QliB4rHfg==" - } - } - }, - "vow-queue": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.3.tgz", - "integrity": "sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw==", - "requires": { - "vow": "0.4.17" - }, - "dependencies": { - "vow": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.17.tgz", - "integrity": "sha512-A3/9bWFqf6gT0jLR4/+bT+IPTe1mQf+tdsW6+WI5geP9smAp8Kbbu4R6QQCDKZN/8TSCqTlXVQm12QliB4rHfg==" - } - } - }, - "vscode-textmate": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-1.2.0.tgz", - "integrity": "sha1-hdBc42jwqQFWm+CPNMErrbAc0ts=", - "requires": { - "oniguruma": "6.2.1", - "sax": "1.2.4" - } - }, - "ware": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", - "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", - "requires": { - "wrap-fn": "0.1.5" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "1.0.3" - } - }, - "weasel-words": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/weasel-words/-/weasel-words-0.1.1.tgz", - "integrity": "sha1-cTeUZYXHP+RIggE4U70ADF1oek4=" - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" - }, - "winston": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", - "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", - "requires": { - "async": "1.0.0", - "colors": "1.0.3", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "stack-trace": "0.0.10" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - } - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrap-fn": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", - "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", - "requires": { - "co": "3.1.0" - }, - "dependencies": { - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" - } - } - }, - "wrapped": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", - "requires": { - "co": "3.1.0", - "sliced": "1.0.1" - }, - "dependencies": { - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "requires": { - "mkdirp": "0.5.1" - } - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" - } - }, - "write-file-stdout": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz", - "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=" - }, - "write-good": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/write-good/-/write-good-0.9.1.tgz", - "integrity": "sha1-ouo0hpv6Xv/H+DJUZ+JXFP5QEpo=", - "requires": { - "adverb-where": "0.0.9", - "no-cliches": "0.1.0", - "passive-voice": "0.0.1", - "too-wordy": "0.1.4", - "weasel-words": "0.1.1" - }, - "dependencies": { - "passive-voice": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/passive-voice/-/passive-voice-0.0.1.tgz", - "integrity": "sha1-ap4fvBynS1esNfD8+Ku0UL/KKsg=" - } - } - }, - "x-is-function": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", - "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=" - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "xml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.0.tgz", - "integrity": "sha1-3j7pEkd74vJQtg9hLzSoxNphbv4=" - }, - "xml-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", - "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "lodash.assign": "4.2.0", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "requires": { - "camelcase": "3.0.0", - "lodash.assign": "4.2.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - } - } - }, - "z-schema": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.22.0.tgz", - "integrity": "sha512-Oq82unxX2PTcJ031gFGcksDHE5PNBs5CbcQ1tbre0Sl4Mu5habZTVmEAkuZS4cK//VgIdNg9UG9PMgMlN6KmiA==", - "requires": { - "commander": "2.15.1", - "lodash.get": "4.4.2", - "lodash.isequal": "4.5.0", - "validator": "10.2.0" - } - } - } -} diff --git a/package.json b/package.json index 00f1517754..81ffb7fccd 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "stylelint": "~7", "stylint": "~1.5.9", "textlint": "~7.3.0", - "textlint-plugin-asciidoc-loose": "~1.0.1", + "textlint-plugin-asciidoctor": "~1.0.3", "textlint-plugin-html": "~0.1.5", "textlint-plugin-review": "~0.3.3", "textlint-plugin-rst": "~0.1.1", diff --git a/requirements.txt b/requirements.txt index 38b3c91f6f..0fc199a511 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -# NOTE: This file is parsed by .ci/generate_bear_requirements.py +# NOTE: This file is parsed by .ci/generate_bear_metadata.py # Edit coala_dependency in coala-build.yaml git+https://github.com/coala/coala#egg=coala # Dependencies inherited from coala diff --git a/setup.cfg b/setup.cfg index 1c7ee45201..feaf61a6fb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,9 +17,7 @@ addopts = -p no:logging --color=yes --doctest-glob=*.rst - --doctest-modules --doctest-ignore-import-error - --cov --instafail --profile --reorder 'requirements.txt' 'test-requirements.txt' '*' @@ -34,11 +32,11 @@ env = python_paths = .ci/ -reqsfilenamepatterns = - requirements.txt - test-requirements.txt - -reqsignorevcs = True +#reqsfilenamepatterns = +# requirements.txt +# test-requirements.txt +# +#reqsignorevcs = True timeout = 35 diff --git a/test-requirements.txt b/test-requirements.txt index 09914b7d70..13ae6d0d9e 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -19,13 +19,15 @@ pytest-instafail~=0.3.0 pytest-mock~=1.1 pytest-profiling~=1.3.0 pytest-reorder~=0.1.0 -git+https://github.com/jayvdb/pytest-reqs@coala#egg=pytest-reqs +#git+https://github.com/jayvdb/pytest-reqs@coala#egg=pytest-reqs pytest-timeout~=1.3.0 pytest-travis-fold~=1.3.0 requests-mock~=1.2 ipdb~=0.11 pip<10 wheel~=0.29 -ruamel.yaml~=0.15.42 +ruamel.yaml>=0.15.42,<=0.15.94 pytest-pythonpath~=0.7.0 twine~=1.7.4 +pytest-error-for-skips +git+https://github.com/krkd/pytest-cov-threshold#egg=pytest-cov-threshold ; python_version > '3.4' diff --git a/tests/natural_language/SpellCheckBearTest.py b/tests/natural_language/SpellCheckBearTest.py index c4a1547df3..d5c3a4b14b 100644 --- a/tests/natural_language/SpellCheckBearTest.py +++ b/tests/natural_language/SpellCheckBearTest.py @@ -1,6 +1,3 @@ -import platform -import unittest - from bears.natural_language.SpellCheckBear import SpellCheckBear from coalib.testing.LocalBearTestHelper import verify_local_bear @@ -9,9 +6,6 @@ bad_file = 'tihs si surly som incoreclt speling.' -SpellCheckLintBearTest = unittest.skipIf( - platform.system() == 'Windows', - "SpellCheckBear doesn't work on windows")( - verify_local_bear(SpellCheckBear, - valid_files=(good_file,), - invalid_files=(bad_file,))) +SpellCheckLintBearTest = verify_local_bear(SpellCheckBear, + valid_files=(good_file,), + invalid_files=(bad_file,)) diff --git a/tests/vcs/git/GitCommitBearTest.py b/tests/vcs/git/GitCommitBearTest.py index 19dca7e9de..a83b264024 100644 --- a/tests/vcs/git/GitCommitBearTest.py +++ b/tests/vcs/git/GitCommitBearTest.py @@ -80,6 +80,18 @@ def tearDown(self): onerror = None shutil.rmtree(self.gitdir, onerror=onerror) + def test_check_prerequisites(self): + _shutil_which = shutil.which + try: + shutil.which = lambda *args, **kwargs: None + self.assertEqual(GitCommitBear.check_prerequisites(), + 'git is not installed.') + + shutil.which = lambda *args, **kwargs: 'path/to/git' + self.assertTrue(GitCommitBear.check_prerequisites()) + finally: + shutil.which = _shutil_which + def test_git_failure(self): # In this case use a reference to a non-existing commit, so just try # to log all commits on a newly created repository. diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000000..fa201abea2 --- /dev/null +++ b/tox.ini @@ -0,0 +1,141 @@ +[tox] +envlist = py{34,35,36,37}-{all,pip,clang,npm,gem,go,perl,php,cabal,java,java7,java8,scala,elm,r,dart,julia,lua,infer,opam,apt,adhoc,disabled,win,swift,mono}-{list,check,collectonly,skip,noskip}-codecov +minversion = 3.4 +# Doesnt work +#[travis] +#dist = +# precise: py{34,36} +# trusty: py{35,36} +# xenial: py{36,37} + +[travis:env] +# apt_get is the only group allowed to skip +TRAVIS = + true: codecov +TRAVIS_LANGUAGE = + python: pip-noskip + node_js: py36-npm-noskip + ruby: py36-gem-noskip + haskell: py36-cabal-noskip + go: py36-go-noskip + perl: py36-perl-noskip + php: py36-php-noskip + scala: py36-scala-noskip + elm: py36-elm-noskip + r: py36-r-noskip + dart: py36-dart-noskip + julia: py36-julia-noskip + objective_c: py36-swift-noskip + swift: py36-swift-noskip + objectivec: py36-swift-noskip + objective-c: py36-swift-noskip + csharp: py36-mono-noskip + minimal,generic: py36-adhoc-noskip +TRAVIS_JDK_VERSION = + oraclejdk11: py36-java-skip + oraclejdk9: py36-java-skip + oraclejdk8: py36-java8-noskip + openjdk11: py36-java-skip + openjdk10: py36-java-skip + openjdk9: py36-java-skip + openjdk8: py36-java8-noskip + openjdk7: py36-java7-noskip +BEARS = + lua: py36-lua-noskip + infer: py36-infer-noskip + opam: py36-opam-noskip + apt_get: py36-apt-skip + adhoc: py36-adhoc-noskip + clang: py36-clang-noskip + disabled: py36-disabled-noskip + +# pyyaml literally here to support get_tests.py +[testenv] +passenv = + HOME + PATH + CI CI_* + TRAVIS TRAVIS_* + APPVEYOR APPVEYOR_* + TOX_* + PIP_* + VIRTUALENV_* + LOCALAPPDATA + GEM_HOME + GEM_PATH + JULIA_PROJECT + GOROOT + GOPATH + BEARS + BEAR_LIST + DISABLE_BEARS + R_LIBS_USER + R_LIBS_SITE + _R_CHECK_CRAN_INCOMING_ + NOT_CRAN + R_PROFILE +pip_version = 9.0.1 +alwayscopy = true +skipsdist = true +skip_install = true +list_dependencies_command = python -m pip freeze --local +whitelist_externals = + pytest + bash + rm +deps = + # Doing this inside tox failed once + # https://travis-ci.org/jayvdb/coala-bears/jobs/547197301 + # hg+https://bitbucket.org/jayvdb/sarge@win-reg-lookup#egg=sarge + git+https://github.com/coala/coala#egg=coala + pip: -rbear-requirements.txt + # These two are needed for some non-pip bears + !pip: aenum + !pip: PyYAML + npm: docutils-ast-writer~=0.1.2 + apt,clang,mono,adhoc: libclang-py3~=3.4.0 + clang: munkres3~=1.0 + java7,java8: language-check~=1.0 + java7,java8: guess-language-spirit~=0.5.2 + -rtest-requirements.txt + # pytest-cov-threshold is incompatible with py34 + !py34: git+https://github.com/krkd/pytest-cov-threshold + noskip: pytest-error-for-skips +setenv = + all,pip: PIPBEARS=`python .ci/get_tests.py noreqs pip` + all,clang: PIPBEARS=`python .ci/get_tests.py clang` + all,npm: NPMBEARS=`python .ci/get_tests.py npm` + all,elm: NPMBEARS=`python .ci/get_tests.py elm` + all,gem: GEMBEARS=`python .ci/get_tests.py gem` + all,go: GOBEARS=`python .ci/get_tests.py go` + all,perl: PERLBEARS=`python .ci/get_tests.py perl` + all,php: PHPBEARS=`python .ci/get_tests.py php` + all,cabal: CABALBEARS=`python .ci/get_tests.py cabal` + all,java8: JAVABEARS=`python .ci/get_tests.py java` + all,java7: JAVABEARS=`python .ci/get_tests.py java` + all,java: JAVABEARS=`python .ci/get_tests.py java` + all,scala: JAVABEARS=`python .ci/get_tests.py scala` + all,swift: JAVABEARS=`python .ci/get_tests.py swift` + all,mono: MONOBEARS=`python .ci/get_tests.py mono` + all,r: RBEARS=`python .ci/get_tests.py r` + all,dart: DARTBEARS=`python .ci/get_tests.py dart` + all,julia: JULIABEARS=`python .ci/get_tests.py julia` + all,lua: LUABEARS=`python .ci/get_tests.py lua` + all,opam,infer: OPAMBEARS=`python .ci/get_tests.py opam` + all,apt: APTBEARS=`python .ci/get_tests.py apt_get` + adhoc: ADHOCBEARS=`python .ci/get_tests.py {env:BEAR_LIST}` + disabled: DISABLEDBEARS=`python .ci/get_tests.py --disabled {env:BEAR_LIST}` + SELECTED={env:PIPBEARS:} {env:NPMBEARS:} {env:GEMBEARS:} {env:GOBEARS:} {env:PERLBEARS:} {env:PHPBEARS:} {env:CABALBEARS:} {env:JAVABEARS:} {env:MONOBEARS:} {env:RBEARS:} {env:DARTBEARS:} {env:JULIABEARS:} {env:LUABEARS:} {env:OPAMBEARS:} {env:APTBEARS:} {env:ADHOCBEARS:} {env:DISABLEDBEARS:} + noskip: PYTEST_ARGS=--error-for-skips + py34-noskip: PYTEST_ARGS=--error-for-skips -k 'not test_valid_async' + win-noskip: PYTEST_ARGS=--error-for-skips -k 'not test_language_french and not test_valid_async' + collectonly,list: PYTEST_ARGS=--collect-only + codecov: CODECOV_FLAGS=`python .ci/get_codecov_tags.py {envname}` +commands = + check,list,all: python .ci/get_bears.py --missing {env:SELECTED} + java: bash -e -x .ci/deps.coala-bears.sh + !py34,!apt: python .ci/generate_coverage_thresholds.py {posargs:{env:SELECTED}} + py34,apt: rm -f .threshold.json + !list: pytest {env:PYTEST_ARGS:} --cov --cov-fail-under=0 --continue-on-collection-errors --cov-report term-missing:skip-covered --deselect=requirements.txt {posargs:{env:SELECTED}} + codecov: codecov --name={envname} --flags={env:CODECOV_FLAGS} +# Use commands_post =