From f166cdecf161dd3feb2870dd7f022f046dca2ed2 Mon Sep 17 00:00:00 2001
From: Forrest L Norvell If you have a complaint about a package in the public npm registry,
and cannot resolve it with the package
owner, please email
-support@npmjs.com and explain the situation. Any data published to The npm Registry (including user account
information) may be removed or modified at the sole discretion of the
npm server administrators. 2.7.3 2.7.4 This is the API documentation for npm.
To find documentation of the command line
@@ -109,5 +109,5 @@ method names. Use the It will print out extraneous, missing, and invalid packages.
Ian Livingstone
-
+
diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html
index c2cbf7572b..3fd6088c58 100644
--- a/deps/npm/html/doc/api/npm-bin.html
+++ b/deps/npm/html/doc/api/npm-bin.html
@@ -28,5 +28,5 @@ to the npm.bin
property.
-
+
diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html
index 29a5095e40..2eb2c43488 100644
--- a/deps/npm/html/doc/api/npm-bugs.html
+++ b/deps/npm/html/doc/api/npm-bugs.html
@@ -33,5 +33,5 @@ friendly for programmatic use.
-
+
diff --git a/deps/npm/html/doc/api/npm-cache.html b/deps/npm/html/doc/api/npm-cache.html
index f6876aa794..0cb4d14cfd 100644
--- a/deps/npm/html/doc/api/npm-cache.html
+++ b/deps/npm/html/doc/api/npm-cache.html
@@ -42,5 +42,5 @@ incrementation.
-
+
diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html
index 62cb6cf466..7fcced1b69 100644
--- a/deps/npm/html/doc/api/npm-commands.html
+++ b/deps/npm/html/doc/api/npm-commands.html
@@ -36,5 +36,5 @@ usage, or man 3 npm-<command>
for programmatic usage.
-
+
diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html
index 1336074472..b1b6801e6a 100644
--- a/deps/npm/html/doc/api/npm-config.html
+++ b/deps/npm/html/doc/api/npm-config.html
@@ -57,5 +57,5 @@ functions instead.
-
+
diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html
index 8076eb71f9..eb3572ad55 100644
--- a/deps/npm/html/doc/api/npm-deprecate.html
+++ b/deps/npm/html/doc/api/npm-deprecate.html
@@ -47,5 +47,5 @@ a deprecation warning to all who attempt to install it.
-
+
diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html
index f503bef12b..ca14313c03 100644
--- a/deps/npm/html/doc/api/npm-docs.html
+++ b/deps/npm/html/doc/api/npm-docs.html
@@ -33,5 +33,5 @@ friendly for programmatic use.
-
+
diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html
index b0b92ecbb5..73c306cee2 100644
--- a/deps/npm/html/doc/api/npm-edit.html
+++ b/deps/npm/html/doc/api/npm-edit.html
@@ -36,5 +36,5 @@ and how this is used.
-
+
diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html
index 1e5c5abb41..79f4093633 100644
--- a/deps/npm/html/doc/api/npm-explore.html
+++ b/deps/npm/html/doc/api/npm-explore.html
@@ -31,5 +31,5 @@ sure to use npm rebuild <pkg>
if you make any changes.
-
+
diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html
index d36d8e735a..1245b350b3 100644
--- a/deps/npm/html/doc/api/npm-help-search.html
+++ b/deps/npm/html/doc/api/npm-help-search.html
@@ -44,5 +44,5 @@ Name of the file that matched
-
+
diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html
index ee17e10487..0ec6d0c7a9 100644
--- a/deps/npm/html/doc/api/npm-init.html
+++ b/deps/npm/html/doc/api/npm-init.html
@@ -39,5 +39,5 @@ then go ahead and use this programmatically.
-
+
diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html
index 62090ae549..bdc174d03c 100644
--- a/deps/npm/html/doc/api/npm-install.html
+++ b/deps/npm/html/doc/api/npm-install.html
@@ -32,5 +32,5 @@ installed or when an error has been encountered.
-
+
diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html
index 791f9486fc..1ce84e0618 100644
--- a/deps/npm/html/doc/api/npm-link.html
+++ b/deps/npm/html/doc/api/npm-link.html
@@ -42,5 +42,5 @@ the package in the current working directory
-
+
diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html
index c190ea4c85..4a99f46334 100644
--- a/deps/npm/html/doc/api/npm-load.html
+++ b/deps/npm/html/doc/api/npm-load.html
@@ -37,5 +37,5 @@ config object.
-
+
diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html
index 80f4fc8d2e..8bd1400e97 100644
--- a/deps/npm/html/doc/api/npm-ls.html
+++ b/deps/npm/html/doc/api/npm-ls.html
@@ -63,5 +63,5 @@ dependency will only be output once.
-
+
diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html
index 4af3fe06b6..e81d4ad97c 100644
--- a/deps/npm/html/doc/api/npm-outdated.html
+++ b/deps/npm/html/doc/api/npm-outdated.html
@@ -28,5 +28,5 @@ currently outdated.
-
+
diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html
index cb24a5ae7a..c501d1b383 100644
--- a/deps/npm/html/doc/api/npm-owner.html
+++ b/deps/npm/html/doc/api/npm-owner.html
@@ -47,5 +47,5 @@ that is not implemented at this time.
-
+
diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html
index 1d4ee4f791..01b0291a0d 100644
--- a/deps/npm/html/doc/api/npm-pack.html
+++ b/deps/npm/html/doc/api/npm-pack.html
@@ -33,5 +33,5 @@ overwritten the second time.
-
+
diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html
index ce06e5dc95..f063710709 100644
--- a/deps/npm/html/doc/api/npm-prefix.html
+++ b/deps/npm/html/doc/api/npm-prefix.html
@@ -29,5 +29,5 @@
-
+
diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html
index 96d0c91012..f7929be9df 100644
--- a/deps/npm/html/doc/api/npm-prune.html
+++ b/deps/npm/html/doc/api/npm-prune.html
@@ -30,5 +30,5 @@ package's dependencies list.
-
+
diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html
index 1c2f16f4e6..6d53de2723 100644
--- a/deps/npm/html/doc/api/npm-publish.html
+++ b/deps/npm/html/doc/api/npm-publish.html
@@ -46,5 +46,5 @@ the registry. Overwrites when the "force" environment variable is set
-
+
diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html
index e82eac6efe..93b4fe4935 100644
--- a/deps/npm/html/doc/api/npm-rebuild.html
+++ b/deps/npm/html/doc/api/npm-rebuild.html
@@ -30,5 +30,5 @@ the new binary. If no 'packages' parameter is specify, every package wil
-
+
diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html
index 79be96b4b8..75f841d5fe 100644
--- a/deps/npm/html/doc/api/npm-repo.html
+++ b/deps/npm/html/doc/api/npm-repo.html
@@ -33,5 +33,5 @@ friendly for programmatic use.
-
+
diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html
index b070b1167e..f1133a38ff 100644
--- a/deps/npm/html/doc/api/npm-restart.html
+++ b/deps/npm/html/doc/api/npm-restart.html
@@ -52,5 +52,5 @@ behavior will be accompanied by an increase in major version number
-
+
diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html
index 5f1e3e3ef4..85c2df9af5 100644
--- a/deps/npm/html/doc/api/npm-root.html
+++ b/deps/npm/html/doc/api/npm-root.html
@@ -29,5 +29,5 @@
-
+
diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html
index a6c9535f06..3655f4c286 100644
--- a/deps/npm/html/doc/api/npm-run-script.html
+++ b/deps/npm/html/doc/api/npm-run-script.html
@@ -41,5 +41,5 @@ assumed to be the command to run. All other elements are ignored.
-
+
diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html
index 3510cff109..83f59d0af9 100644
--- a/deps/npm/html/doc/api/npm-search.html
+++ b/deps/npm/html/doc/api/npm-search.html
@@ -53,5 +53,5 @@ like).
-
+
diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html
index 6a9469b066..d40c5bd112 100644
--- a/deps/npm/html/doc/api/npm-shrinkwrap.html
+++ b/deps/npm/html/doc/api/npm-shrinkwrap.html
@@ -33,5 +33,5 @@ been saved.
-
+
diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html
index f6f629c808..608de64957 100644
--- a/deps/npm/html/doc/api/npm-start.html
+++ b/deps/npm/html/doc/api/npm-start.html
@@ -28,5 +28,5 @@
-
+
diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html
index 5c4f0ac3ff..dd31b08e89 100644
--- a/deps/npm/html/doc/api/npm-stop.html
+++ b/deps/npm/html/doc/api/npm-stop.html
@@ -28,5 +28,5 @@ in the packages
parameter.
-
+
diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html
index 3ebe86053a..935da0c26b 100644
--- a/deps/npm/html/doc/api/npm-tag.html
+++ b/deps/npm/html/doc/api/npm-tag.html
@@ -36,5 +36,5 @@ used. For more information about how to set this config, check
-
+
diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html
index beac48a4c3..ccc93c07ca 100644
--- a/deps/npm/html/doc/api/npm-test.html
+++ b/deps/npm/html/doc/api/npm-test.html
@@ -30,5 +30,5 @@ in the packages
parameter.
-
+
diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html
index b2b9ff7887..739796752b 100644
--- a/deps/npm/html/doc/api/npm-uninstall.html
+++ b/deps/npm/html/doc/api/npm-uninstall.html
@@ -30,5 +30,5 @@ uninstalled or when an error has been encountered.
-
+
diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html
index 8917d83e8a..4ce0faadfd 100644
--- a/deps/npm/html/doc/api/npm-unpublish.html
+++ b/deps/npm/html/doc/api/npm-unpublish.html
@@ -33,5 +33,5 @@ the root package entry is removed from the registry entirely.
-
+
diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html
index 9d16983ea5..52be0c53c6 100644
--- a/deps/npm/html/doc/api/npm-update.html
+++ b/deps/npm/html/doc/api/npm-update.html
@@ -33,5 +33,5 @@ parameter will be called when done or when an error occurs.
-
+
diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html
index f681655c59..5d96ffe812 100644
--- a/deps/npm/html/doc/api/npm-version.html
+++ b/deps/npm/html/doc/api/npm-version.html
@@ -32,5 +32,5 @@ not have exactly one element. The only element should be a version number.
-
+
diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html
index c1b8fa0cb1..df2f03c40f 100644
--- a/deps/npm/html/doc/api/npm-view.html
+++ b/deps/npm/html/doc/api/npm-view.html
@@ -81,5 +81,5 @@ the field name.
-
+
diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html
index e98cc65583..017f49618a 100644
--- a/deps/npm/html/doc/api/npm-whoami.html
+++ b/deps/npm/html/doc/api/npm-whoami.html
@@ -29,5 +29,5 @@
-
+
diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html
index f463582ea5..74cd146f8e 100644
--- a/deps/npm/html/doc/api/npm.html
+++ b/deps/npm/html/doc/api/npm.html
@@ -23,7 +23,7 @@ npm.load([configObject, ]function (er, npm) {
npm.commands.install(["package"], cb)
})
VERSION
-DESCRIPTION
npm.deref
method to find the real name.
-
+
diff --git a/deps/npm/html/doc/cli/npm-access.html b/deps/npm/html/doc/cli/npm-access.html
index 123a5ca00a..a4aea8b89d 100644
--- a/deps/npm/html/doc/cli/npm-access.html
+++ b/deps/npm/html/doc/cli/npm-access.html
@@ -75,5 +75,5 @@ with an HTTP 402 status code (logically enough), unless you use
-
+
diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html
index 7ea916f613..c7865b4e14 100644
--- a/deps/npm/html/doc/cli/npm-adduser.html
+++ b/deps/npm/html/doc/cli/npm-adduser.html
@@ -68,5 +68,5 @@ precedence over any global configuration.
-
+
diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html
index 46291eb9ea..94b778bd9f 100644
--- a/deps/npm/html/doc/cli/npm-bin.html
+++ b/deps/npm/html/doc/cli/npm-bin.html
@@ -35,5 +35,5 @@
-
+
diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html
index 7969f7660d..04a23c05b6 100644
--- a/deps/npm/html/doc/cli/npm-bugs.html
+++ b/deps/npm/html/doc/cli/npm-bugs.html
@@ -54,5 +54,5 @@ a package.json
in the current folder and use the name
-
+
diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html
index 42f059ec04..4dfe30b3db 100644
--- a/deps/npm/html/doc/cli/npm-build.html
+++ b/deps/npm/html/doc/cli/npm-build.html
@@ -38,5 +38,5 @@ A folder containing a package.json
file in its root.
-
+
diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html
index c956e8581d..298d7ebb18 100644
--- a/deps/npm/html/doc/cli/npm-bundle.html
+++ b/deps/npm/html/doc/cli/npm-bundle.html
@@ -31,5 +31,5 @@ install packages into the local space.
-
+
diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html
index bd5f3aec80..781f252776 100644
--- a/deps/npm/html/doc/cli/npm-cache.html
+++ b/deps/npm/html/doc/cli/npm-cache.html
@@ -81,5 +81,5 @@ they do not make an HTTP request to the registry.
-
+
diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html
index a57b2b0ab1..14ee7e7686 100644
--- a/deps/npm/html/doc/cli/npm-completion.html
+++ b/deps/npm/html/doc/cli/npm-completion.html
@@ -42,5 +42,5 @@ completions based on the arguments.
-
+
diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html
index 0df80a3beb..6afdbb4bf5 100644
--- a/deps/npm/html/doc/cli/npm-config.html
+++ b/deps/npm/html/doc/cli/npm-config.html
@@ -66,5 +66,5 @@ global config.
-
+
diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html
index 8ab58d10ea..aac9b262ab 100644
--- a/deps/npm/html/doc/cli/npm-dedupe.html
+++ b/deps/npm/html/doc/cli/npm-dedupe.html
@@ -63,5 +63,5 @@ versions.
-
+
diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html
index 68c7dfa528..57dc15ea08 100644
--- a/deps/npm/html/doc/cli/npm-deprecate.html
+++ b/deps/npm/html/doc/cli/npm-deprecate.html
@@ -38,5 +38,5 @@ something like this:
-
+
diff --git a/deps/npm/html/doc/cli/npm-dist-tag.html b/deps/npm/html/doc/cli/npm-dist-tag.html
index f0a7ff9aa0..855b3370d8 100644
--- a/deps/npm/html/doc/cli/npm-dist-tag.html
+++ b/deps/npm/html/doc/cli/npm-dist-tag.html
@@ -76,5 +76,5 @@ begin with a number or the letter v
.
-
+
diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html
index df782b7324..57bca77658 100644
--- a/deps/npm/html/doc/cli/npm-docs.html
+++ b/deps/npm/html/doc/cli/npm-docs.html
@@ -56,5 +56,5 @@ the current folder and use the name
property.
-
+
diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html
index 0bb27f7bd4..e62355b4ba 100644
--- a/deps/npm/html/doc/cli/npm-edit.html
+++ b/deps/npm/html/doc/cli/npm-edit.html
@@ -49,5 +49,5 @@ or "notepad"
on Windows.
-
+
diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html
index 481cd5fb67..11e2852fe7 100644
--- a/deps/npm/html/doc/cli/npm-explore.html
+++ b/deps/npm/html/doc/cli/npm-explore.html
@@ -49,5 +49,5 @@ Windows
-
+
diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html
index 8065a649c8..00e24251d8 100644
--- a/deps/npm/html/doc/cli/npm-help-search.html
+++ b/deps/npm/html/doc/cli/npm-help-search.html
@@ -46,5 +46,5 @@ where the terms were found in the documentation.
-
+
diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html
index 2ac6776b35..e27a7041b5 100644
--- a/deps/npm/html/doc/cli/npm-help.html
+++ b/deps/npm/html/doc/cli/npm-help.html
@@ -52,5 +52,5 @@ matches are equivalent to specifying a topic name.
-
+
diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html
index 5a4844a12b..f440313882 100644
--- a/deps/npm/html/doc/cli/npm-init.html
+++ b/deps/npm/html/doc/cli/npm-init.html
@@ -48,5 +48,5 @@ defaults and not prompt you for any options.
-
+
diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html
index ef233eef73..2daed14b23 100644
--- a/deps/npm/html/doc/cli/npm-install.html
+++ b/deps/npm/html/doc/cli/npm-install.html
@@ -240,5 +240,5 @@ affects a real use-case, it will be investigated.
-
+
diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html
index 1158dad6f2..4a14ee51b2 100644
--- a/deps/npm/html/doc/cli/npm-link.html
+++ b/deps/npm/html/doc/cli/npm-link.html
@@ -72,5 +72,5 @@ include that scope, e.g.
-
+
diff --git a/deps/npm/html/doc/cli/npm-logout.html b/deps/npm/html/doc/cli/npm-logout.html
index ff2e950a52..5fd1de1d36 100644
--- a/deps/npm/html/doc/cli/npm-logout.html
+++ b/deps/npm/html/doc/cli/npm-logout.html
@@ -55,5 +55,5 @@ that registry at the same time.
-
+
diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html
index 9c4390c556..65b527209d 100644
--- a/deps/npm/html/doc/cli/npm-ls.html
+++ b/deps/npm/html/doc/cli/npm-ls.html
@@ -22,7 +22,7 @@ installed, as well as their dependencies, in a tree-structure.
limit the results to only the paths to the packages named. Note that
nested packages will also show the paths to the specified packages.
For example, running npm ls promzard
in npm's source tree will show:
-npm@2.7.3 /path/to/npm
+
npm@2.7.4 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
-
+
diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html
index 20997d8737..b93706992c 100644
--- a/deps/npm/html/doc/cli/npm-outdated.html
+++ b/deps/npm/html/doc/cli/npm-outdated.html
@@ -67,5 +67,5 @@ project.
-
+
diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html
index f5a9cb0d26..4a35d71aab 100644
--- a/deps/npm/html/doc/cli/npm-owner.html
+++ b/deps/npm/html/doc/cli/npm-owner.html
@@ -49,5 +49,5 @@ that is not implemented at this time.
-
+
diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html
index d577d06e20..9d63fa076f 100644
--- a/deps/npm/html/doc/cli/npm-pack.html
+++ b/deps/npm/html/doc/cli/npm-pack.html
@@ -41,5 +41,5 @@ overwritten the second time.
-
+
diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html
index 1e9f187355..e0aab08004 100644
--- a/deps/npm/html/doc/cli/npm-prefix.html
+++ b/deps/npm/html/doc/cli/npm-prefix.html
@@ -38,5 +38,5 @@ to contain a package.json file unless -g
is also specified.
-
+
diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html
index 4cb3297474..5b19ac5b8a 100644
--- a/deps/npm/html/doc/cli/npm-prune.html
+++ b/deps/npm/html/doc/cli/npm-prune.html
@@ -39,5 +39,5 @@ packages specified in your devDependencies
.
-
+
diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html
index da14d417e6..5ec4e988ee 100644
--- a/deps/npm/html/doc/cli/npm-publish.html
+++ b/deps/npm/html/doc/cli/npm-publish.html
@@ -66,5 +66,5 @@ it is removed with
-
+
diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html
index 4d179fd4f5..ed0dd148ce 100644
--- a/deps/npm/html/doc/cli/npm-rebuild.html
+++ b/deps/npm/html/doc/cli/npm-rebuild.html
@@ -38,5 +38,5 @@ the new binary.
package.json
in the current folder and use the name
"scripts": {"test": "tap test/\*
-
+
diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html
index 158116faf0..8df680055a 100644
--- a/deps/npm/html/doc/cli/npm-search.html
+++ b/deps/npm/html/doc/cli/npm-search.html
@@ -49,5 +49,5 @@ fall on multiple lines.
-
+
diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html
index 87a4b41d3f..0cc001ad3f 100644
--- a/deps/npm/html/doc/cli/npm-shrinkwrap.html
+++ b/deps/npm/html/doc/cli/npm-shrinkwrap.html
@@ -164,5 +164,5 @@ contents rather than versions.
-
+
diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html
index 07b862e72a..ca70668397 100644
--- a/deps/npm/html/doc/cli/npm-star.html
+++ b/deps/npm/html/doc/cli/npm-star.html
@@ -36,5 +36,5 @@ a vaguely positive way to show that you care.
-
+
diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html
index 27d4a79d83..05c72e30fe 100644
--- a/deps/npm/html/doc/cli/npm-stars.html
+++ b/deps/npm/html/doc/cli/npm-stars.html
@@ -37,5 +37,5 @@ you will most certainly enjoy this command.
-
+
diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html
index b343c63aa4..dbd9417392 100644
--- a/deps/npm/html/doc/cli/npm-start.html
+++ b/deps/npm/html/doc/cli/npm-start.html
@@ -34,5 +34,5 @@
-
+
diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html
index 5611f221c9..7dc2bf7de6 100644
--- a/deps/npm/html/doc/cli/npm-stop.html
+++ b/deps/npm/html/doc/cli/npm-stop.html
@@ -34,5 +34,5 @@
-
+
diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html
index 08fa29bae8..3a671610ac 100644
--- a/deps/npm/html/doc/cli/npm-tag.html
+++ b/deps/npm/html/doc/cli/npm-tag.html
@@ -62,5 +62,5 @@ that do not begin with a number or the letter v
.
-
+
diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html
index b635dad95e..d461e5f966 100644
--- a/deps/npm/html/doc/cli/npm-test.html
+++ b/deps/npm/html/doc/cli/npm-test.html
@@ -37,5 +37,5 @@ true.
-
+
diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html
index cbe3f9904b..6921b46270 100644
--- a/deps/npm/html/doc/cli/npm-uninstall.html
+++ b/deps/npm/html/doc/cli/npm-uninstall.html
@@ -57,5 +57,5 @@ npm uninstall dtrace-provider --save-optional
-
+
diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html
index 2af6e04e3a..202c0a1586 100644
--- a/deps/npm/html/doc/cli/npm-unpublish.html
+++ b/deps/npm/html/doc/cli/npm-unpublish.html
@@ -47,5 +47,5 @@ package again, a new version number must be used.
-
+
diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html
index 484b87aacf..03f83bdc88 100644
--- a/deps/npm/html/doc/cli/npm-update.html
+++ b/deps/npm/html/doc/cli/npm-update.html
@@ -119,5 +119,5 @@ be downgraded.
-
+
diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html
index f0e744085d..bd323a1ab1 100644
--- a/deps/npm/html/doc/cli/npm-version.html
+++ b/deps/npm/html/doc/cli/npm-version.html
@@ -65,5 +65,5 @@ Enter passphrase:
-
+
diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html
index aff1b4319f..cb1c1b21bb 100644
--- a/deps/npm/html/doc/cli/npm-view.html
+++ b/deps/npm/html/doc/cli/npm-view.html
@@ -82,5 +82,5 @@ the field name.
-
+
diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html
index 737d39768a..54f7eb8822 100644
--- a/deps/npm/html/doc/cli/npm-whoami.html
+++ b/deps/npm/html/doc/cli/npm-whoami.html
@@ -33,5 +33,5 @@
-
+
diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html
index 3383b8dab5..059d6f3437 100644
--- a/deps/npm/html/doc/cli/npm.html
+++ b/deps/npm/html/doc/cli/npm.html
@@ -13,7 +13,7 @@
SYNOPSIS
npm <command> [args]
VERSION
-2.7.3
+2.7.4
DESCRIPTION
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
@@ -110,7 +110,7 @@ easily by doing npm view npm contributors
.
the issues list or ask on the mailing list.
BUGS
When you find issues, please report them:
@@ -118,7 +118,7 @@ the issues list or ask on the mailing list.
web:
http://github.com/npm/npm/issues
email:
-npm-@googlegroups.com
+npm-@googlegroups.com
Be sure to include all of the output from the npm command that didn't work
as expected. The npm-debug.log
file is also helpful to provide.
@@ -128,7 +128,7 @@ will no doubt tell you to put the output in a gist or email.
Isaac Z. Schlueter ::
isaacs ::
@izs ::
-i@izs.me
+i@izs.me
SEE ALSO
- npm-help(1)
@@ -154,5 +154,5 @@ will no doubt tell you to put the output in a gist or email.
-
+
diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html
index c386c30f4f..168fc2ec81 100644
--- a/deps/npm/html/doc/files/npm-folders.html
+++ b/deps/npm/html/doc/files/npm-folders.html
@@ -184,5 +184,5 @@ cannot be found elsewhere. See
-
+
diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html
index e7180ca6e7..86a81d44d6 100644
--- a/deps/npm/html/doc/files/npm-global.html
+++ b/deps/npm/html/doc/files/npm-global.html
@@ -184,5 +184,5 @@ cannot be found elsewhere. See
-
+
diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html
index 073d9b8369..37eadfebad 100644
--- a/deps/npm/html/doc/files/npm-json.html
+++ b/deps/npm/html/doc/files/npm-json.html
@@ -496,5 +496,5 @@ ignored.
-
+
diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html
index 16478d6bde..9aea72e9a4 100644
--- a/deps/npm/html/doc/files/npmrc.html
+++ b/deps/npm/html/doc/files/npmrc.html
@@ -77,5 +77,5 @@ manner.
-
+
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
index 4794377a57..13dba5edeb 100644
--- a/deps/npm/html/doc/files/package.json.html
+++ b/deps/npm/html/doc/files/package.json.html
@@ -496,5 +496,5 @@ ignored.
-
+
diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html
index 732dcd929f..7f8fff793b 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -236,5 +236,5 @@
-
+
diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html
index 5e288eea75..c8d521861f 100644
--- a/deps/npm/html/doc/misc/npm-coding-style.html
+++ b/deps/npm/html/doc/misc/npm-coding-style.html
@@ -147,5 +147,5 @@ set to anything."
-
+
diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html
index 4c0998e656..c1060330b2 100644
--- a/deps/npm/html/doc/misc/npm-config.html
+++ b/deps/npm/html/doc/misc/npm-config.html
@@ -788,5 +788,5 @@ exit successfully.
-
+
diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html
index 794fcae4f4..b837dfa85b 100644
--- a/deps/npm/html/doc/misc/npm-developers.html
+++ b/deps/npm/html/doc/misc/npm-developers.html
@@ -189,5 +189,5 @@ from a fresh checkout.
-
+
diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html
index 307fd158b0..e4f8e17920 100644
--- a/deps/npm/html/doc/misc/npm-disputes.html
+++ b/deps/npm/html/doc/misc/npm-disputes.html
@@ -13,7 +13,7 @@
SYNOPSIS
- Get the author email with
npm owner ls <pkgname>
-- Email the author, CC support@npmjs.com
+- Email the author, CC support@npmjs.com
- After a few weeks, if there's no resolution, we'll sort it out.
Don't squat on package names. Publish code or move out of the way.
@@ -51,12 +51,12 @@ Joe's appropriate course of action in each case is the same.
owner (Bob).
- Joe emails Bob, explaining the situation as respectfully as
possible, and what he would like to do with the module name. He
-adds the npm support staff support@npmjs.com to the CC list of
+adds the npm support staff support@npmjs.com to the CC list of
the email. Mention in the email that Bob can run
npm owner add
joe foo
to add Joe as an owner of the foo
package.
- After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can't come to any sort of resolution, email support
-support@npmjs.com and we'll sort it out. ("Reasonable" is
+support@npmjs.com and we'll sort it out. ("Reasonable" is
usually at least 4 weeks, but extra time is allowed around common
holidays.)
@@ -112,5 +112,5 @@ things into it.
-
+
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
index cfbfd7d97d..221fd18e84 100644
--- a/deps/npm/html/doc/misc/npm-faq.html
+++ b/deps/npm/html/doc/misc/npm-faq.html
@@ -236,7 +236,7 @@ that has a package.json in its root, or a git url.
To check if the registry is down, open up
https://registry.npmjs.org/ in a web browser. This will also tell
you if you are just unable to access the internet for some reason.
-If the registry IS down, let us know by emailing support@npmjs.com
+
If the registry IS down, let us know by emailing support@npmjs.com
or posting an issue at https://github.com/npm/npm/issues. If it's
down for the world (and not just on your local network) then we're
probably already being pinged about it.
@@ -307,5 +307,5 @@ good folks at npm, Inc.
-
+
diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html
index cdd703f814..cc2aab8025 100644
--- a/deps/npm/html/doc/misc/npm-index.html
+++ b/deps/npm/html/doc/misc/npm-index.html
@@ -236,5 +236,5 @@
-
+
diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html
index 7915920349..c59e94efe1 100644
--- a/deps/npm/html/doc/misc/npm-registry.html
+++ b/deps/npm/html/doc/misc/npm-registry.html
@@ -70,5 +70,5 @@ effectively implement the entire CouchDB API anyway.
-
+
diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html
index 0163a26f30..99c1a90bf6 100644
--- a/deps/npm/html/doc/misc/npm-scope.html
+++ b/deps/npm/html/doc/misc/npm-scope.html
@@ -78,5 +78,5 @@ that registry instead.
-
+
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
index a34c8c4e47..050fa1a03f 100644
--- a/deps/npm/html/doc/misc/npm-scripts.html
+++ b/deps/npm/html/doc/misc/npm-scripts.html
@@ -203,5 +203,5 @@ scripts is for compilation which must be done on the target architecture.
-
+
diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html
index f448724cb9..f6e1e0fcbe 100644
--- a/deps/npm/html/doc/misc/removing-npm.html
+++ b/deps/npm/html/doc/misc/removing-npm.html
@@ -57,5 +57,5 @@ modules. To track those down, you can do the following:
-
+
diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html
index 03b029f5f5..32c8014701 100644
--- a/deps/npm/html/doc/misc/semver.html
+++ b/deps/npm/html/doc/misc/semver.html
@@ -282,5 +282,5 @@ range, use the satisfies(version, range)
function.
-
+
diff --git a/deps/npm/html/partial/doc/README.html b/deps/npm/html/partial/doc/README.html
index d5a78262d0..0ee224499e 100644
--- a/deps/npm/html/partial/doc/README.html
+++ b/deps/npm/html/partial/doc/README.html
@@ -115,7 +115,7 @@ specific purpose, or lack of malice in any given npm package.
If you have a complaint about a package in the public npm registry,
and cannot resolve it with the package
owner, please email
-support@npmjs.com and explain the situation.
+support@npmjs.com and explain the situation.
Any data published to The npm Registry (including user account
information) may be removed or modified at the sole discretion of the
npm server administrators.
diff --git a/deps/npm/html/partial/doc/api/npm.html b/deps/npm/html/partial/doc/api/npm.html
index 29c3eb1ec8..706cf0a9e4 100644
--- a/deps/npm/html/partial/doc/api/npm.html
+++ b/deps/npm/html/partial/doc/api/npm.html
@@ -12,7 +12,7 @@ npm.load([configObject, ]function (er, npm) {
npm.commands.install(["package"], cb)
})
VERSION
-2.7.3
+2.7.4
DESCRIPTION
This is the API documentation for npm.
To find documentation of the command line
diff --git a/deps/npm/html/partial/doc/cli/npm-ls.html b/deps/npm/html/partial/doc/cli/npm-ls.html
index c74dc1a0f6..76fc9a7e15 100644
--- a/deps/npm/html/partial/doc/cli/npm-ls.html
+++ b/deps/npm/html/partial/doc/cli/npm-ls.html
@@ -11,7 +11,7 @@ installed, as well as their dependencies, in a tree-structure.
limit the results to only the paths to the packages named. Note that
nested packages will also show the paths to the specified packages.
For example, running npm ls promzard
in npm's source tree will show:
-npm@2.7.3 /path/to/npm
+npm@2.7.4 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
It will print out extraneous, missing, and invalid packages.
diff --git a/deps/npm/html/partial/doc/cli/npm.html b/deps/npm/html/partial/doc/cli/npm.html
index 364915af78..c2272b8f0d 100644
--- a/deps/npm/html/partial/doc/cli/npm.html
+++ b/deps/npm/html/partial/doc/cli/npm.html
@@ -2,7 +2,7 @@
SYNOPSIS
npm <command> [args]
VERSION
-2.7.3
+2.7.4
DESCRIPTION
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
@@ -99,7 +99,7 @@ easily by doing npm view npm contributors
.
the issues list or ask on the mailing list.
BUGS
When you find issues, please report them:
@@ -107,7 +107,7 @@ the issues list or ask on the mailing list.
- web:
http://github.com/npm/npm/issues
- email:
-npm-@googlegroups.com
+npm-@googlegroups.com
Be sure to include all of the output from the npm command that didn't work
as expected. The npm-debug.log
file is also helpful to provide.
@@ -117,7 +117,7 @@ will no doubt tell you to put the output in a gist or email.
Isaac Z. Schlueter ::
isaacs ::
@izs ::
-i@izs.me
+i@izs.me
SEE ALSO
- npm-help(1)
diff --git a/deps/npm/html/partial/doc/misc/npm-disputes.html b/deps/npm/html/partial/doc/misc/npm-disputes.html
index 4f75fc5c07..6291bafaf8 100644
--- a/deps/npm/html/partial/doc/misc/npm-disputes.html
+++ b/deps/npm/html/partial/doc/misc/npm-disputes.html
@@ -2,7 +2,7 @@
SYNOPSIS
- Get the author email with
npm owner ls <pkgname>
-- Email the author, CC support@npmjs.com
+- Email the author, CC support@npmjs.com
- After a few weeks, if there's no resolution, we'll sort it out.
Don't squat on package names. Publish code or move out of the way.
@@ -40,12 +40,12 @@ Joe's appropriate course of action in each case is the same.
owner (Bob).
- Joe emails Bob, explaining the situation as respectfully as
possible, and what he would like to do with the module name. He
-adds the npm support staff support@npmjs.com to the CC list of
+adds the npm support staff support@npmjs.com to the CC list of
the email. Mention in the email that Bob can run
npm owner add
joe foo
to add Joe as an owner of the foo
package.
- After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can't come to any sort of resolution, email support
-support@npmjs.com and we'll sort it out. ("Reasonable" is
+support@npmjs.com and we'll sort it out. ("Reasonable" is
usually at least 4 weeks, but extra time is allowed around common
holidays.)
diff --git a/deps/npm/html/partial/doc/misc/npm-faq.html b/deps/npm/html/partial/doc/misc/npm-faq.html
index f63901d876..b8cc31c725 100644
--- a/deps/npm/html/partial/doc/misc/npm-faq.html
+++ b/deps/npm/html/partial/doc/misc/npm-faq.html
@@ -225,7 +225,7 @@ that has a package.json in its root, or a git url.
To check if the registry is down, open up
https://registry.npmjs.org/ in a web browser. This will also tell
you if you are just unable to access the internet for some reason.
-If the registry IS down, let us know by emailing support@npmjs.com
+
If the registry IS down, let us know by emailing support@npmjs.com
or posting an issue at https://github.com/npm/npm/issues. If it's
down for the world (and not just on your local network) then we're
probably already being pinged about it.
diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js
index 6c8a652bea..f59372a296 100644
--- a/deps/npm/lib/adduser.js
+++ b/deps/npm/lib/adduser.js
@@ -135,7 +135,8 @@ function save (c, u, cb) {
if (scope.charAt(0) !== "@") scope = "@" + scope
var scopedRegistry = npm.config.get(scope + ":registry")
- if (scopedRegistry) uri = scopedRegistry
+ var cliRegistry = npm.config.get("registry", "cli")
+ if (scopedRegistry && !cliRegistry) uri = scopedRegistry
}
var params = {
diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js
index 357063551d..b5a9fae0e4 100644
--- a/deps/npm/lib/cache.js
+++ b/deps/npm/lib/cache.js
@@ -300,8 +300,12 @@ function add (args, where, cb) {
case "git":
addRemoteGit(p.spec, false, cb)
break
- case "github":
- maybeGithub(p.spec, cb)
+ case "hosted":
+ if (p.hosted.type === "github") {
+ maybeGithub(p.rawSpec, cb)
+ } else {
+ addRemoteGit(p.spec, false, cb)
+ }
break
default:
if (p.name) return addNamed(p.name, p.spec, null, cb)
diff --git a/deps/npm/lib/cache/maybe-github.js b/deps/npm/lib/cache/maybe-github.js
index e24099115d..44d9031066 100644
--- a/deps/npm/lib/cache/maybe-github.js
+++ b/deps/npm/lib/cache/maybe-github.js
@@ -1,27 +1,28 @@
var assert = require("assert")
, log = require("npmlog")
, addRemoteGit = require("./add-remote-git.js")
+ , hosted = require("hosted-git-info")
module.exports = function maybeGithub (p, cb) {
assert(typeof p === "string", "must pass package name")
assert(typeof cb === "function", "must pass callback")
- var u = "git://github.com/" + p
- log.info("maybeGithub", "Attempting %s from %s", p, u)
+ var parsed = hosted.fromUrl(p)
+ log.info("maybeGithub", "Attempting %s from %s", p, parsed.git())
- return addRemoteGit(u, true, function (er, data) {
+ return addRemoteGit(parsed.git(), true, function (er, data) {
if (er) {
- var upriv = "ssh://git@github.com:" + p
- log.info("maybeGithub", "Attempting %s from %s", p, upriv)
+ log.info("maybeGithub", "Couldn't clone %s", parsed.git())
+ log.info("maybeGithub", "Now attempting %s from %s", p, parsed.ssh())
- return addRemoteGit(upriv, false, function (er, data) {
+ return addRemoteGit(parsed.ssh(), false, function (er, data) {
if (er) return cb(er)
- success(upriv, data)
+ success(parsed.ssh(), data)
})
}
- success(u, data)
+ success(parsed.git(), data)
})
function success (u, data) {
diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js
index 4963b096ef..192f474da6 100644
--- a/deps/npm/lib/outdated.js
+++ b/deps/npm/lib/outdated.js
@@ -36,6 +36,7 @@ var path = require("path")
, npa = require("npm-package-arg")
, readInstalled = require("read-installed")
, long = npm.config.get("long")
+ , log = require("npmlog")
function outdated (args, silent, cb) {
if (typeof cb !== "function") cb = silent, silent = false
@@ -300,7 +301,10 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb, type) {
}
if (args.length && args.indexOf(dep) === -1) return skip()
- if (npa(req).type === "git") return doIt("git", "git")
+ var parsed = npa(req)
+ if (parsed.type === "git" || (parsed.hosted && parsed.hosted.type === "github")) {
+ return doIt("git", "git")
+ }
// search for the latest package
mapToRegistry(dep, npm.config, function (er, uri, auth) {
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 707bd7f274..7c56469152 100644
--- a/deps/npm/man/man1/npm-ls.1
+++ b/deps/npm/man/man1/npm-ls.1
@@ -23,7 +23,7 @@ For example, running \fBnpm ls promzard\fR in npm's source tree will show:
.P
.RS 2
.nf
-npm@2.7.3 /path/to/npm
+npm@2.7.4 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.fi
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index bc5dc46b20..601d61a092 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -10,7 +10,7 @@ npm [args]
.RE
.SH VERSION
.P
-2.7.3
+2.7.4
.SH DESCRIPTION
.P
npm is the package manager for the Node JavaScript platform\. It puts
diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3
index eea3af7496..05f330b5a4 100644
--- a/deps/npm/man/man3/npm.3
+++ b/deps/npm/man/man3/npm.3
@@ -20,7 +20,7 @@ npm\.load([configObject, ]function (er, npm) {
.RE
.SH VERSION
.P
-2.7.3
+2.7.4
.SH DESCRIPTION
.P
This is the API documentation for npm\.
diff --git a/deps/npm/node_modules/fstream-npm/.npmignore b/deps/npm/node_modules/fstream-npm/.npmignore
index 06aea69171..c02f40cee6 100644
--- a/deps/npm/node_modules/fstream-npm/.npmignore
+++ b/deps/npm/node_modules/fstream-npm/.npmignore
@@ -1,2 +1,3 @@
# ignore the output junk from the example scripts
example/output
+node_modules/
diff --git a/deps/npm/node_modules/fstream-npm/example/dir-tar.js b/deps/npm/node_modules/fstream-npm/example/dir-tar.js
index f2bad92e0d..393c796b2e 100644
--- a/deps/npm/node_modules/fstream-npm/example/dir-tar.js
+++ b/deps/npm/node_modules/fstream-npm/example/dir-tar.js
@@ -1,18 +1,18 @@
// this will show what ends up in the fstream-npm package
-var P = require("fstream").DirReader
-var tar = require("tar")
+var P = require('fstream').DirReader
+var tar = require('tar')
function f (entry) {
- return entry.basename !== ".git"
+ return entry.basename !== '.git'
}
-new P({ path: "./", type: "Directory", Directory: true, filter: f })
- .on("package", function (p) {
- console.error("package", p)
+new P({ path: './', type: 'Directory', Directory: true, filter: f })
+ .on('package', function (p) {
+ console.error('package', p)
})
- .on("ignoreFile", function (e) {
- console.error("ignoreFile", e)
+ .on('ignoreFile', function (e) {
+ console.error('ignoreFile', e)
})
- .on("entry", function (e) {
+ .on('entry', function (e) {
console.error(e.constructor.name, e.path.substr(e.root.path.length + 1))
})
.pipe(tar.Pack())
diff --git a/deps/npm/node_modules/fstream-npm/example/dir.js b/deps/npm/node_modules/fstream-npm/example/dir.js
index 75e2eed0ff..e524a3bfdb 100644
--- a/deps/npm/node_modules/fstream-npm/example/dir.js
+++ b/deps/npm/node_modules/fstream-npm/example/dir.js
@@ -1,25 +1,25 @@
// this will show what ends up in the fstream-npm package
-var P = require("../")
-var DW = require("fstream").DirWriter
+var P = require('../')
+var DW = require('fstream').DirWriter
-var target = new DW({ Directory: true, type: "Directory",
- path: __dirname + "/output"})
+var target = new DW({ Directory: true, type: 'Directory',
+ path: __dirname + '/output'})
function f (entry) {
- return entry.basename !== ".git"
+ return entry.basename !== '.git'
}
-P({ path: "./", type: "Directory", isDirectory: true, filter: f })
- .on("package", function (p) {
- console.error("package", p)
+P({ path: './', type: 'Directory', isDirectory: true, filter: f })
+ .on('package', function (p) {
+ console.error('package', p)
})
- .on("ignoreFile", function (e) {
- console.error("ignoreFile", e)
+ .on('ignoreFile', function (e) {
+ console.error('ignoreFile', e)
})
- .on("entry", function (e) {
+ .on('entry', function (e) {
console.error(e.constructor.name, e.path)
})
.pipe(target)
- .on("end", function () {
- console.error("ended")
+ .on('end', function () {
+ console.error('ended')
})
diff --git a/deps/npm/node_modules/fstream-npm/example/example.js b/deps/npm/node_modules/fstream-npm/example/example.js
index 0b53931caa..2c933c4404 100644
--- a/deps/npm/node_modules/fstream-npm/example/example.js
+++ b/deps/npm/node_modules/fstream-npm/example/example.js
@@ -1,12 +1,12 @@
// this will show what ends up in the fstream-npm package
-var P = require("../")
-P({ path: "./" })
- .on("package", function (p) {
- console.error("package", p)
+var P = require('../')
+P({ path: './' })
+ .on('package', function (p) {
+ console.error('package', p)
})
- .on("ignoreFile", function (e) {
- console.error("ignoreFile", e)
+ .on('ignoreFile', function (e) {
+ console.error('ignoreFile', e)
})
- .on("entry", function (e) {
+ .on('entry', function (e) {
console.error(e.constructor.name, e.path.substr(e.root.dirname.length + 1))
})
diff --git a/deps/npm/node_modules/fstream-npm/example/ig-tar.js b/deps/npm/node_modules/fstream-npm/example/ig-tar.js
index c1db81050a..7a5b61fba6 100644
--- a/deps/npm/node_modules/fstream-npm/example/ig-tar.js
+++ b/deps/npm/node_modules/fstream-npm/example/ig-tar.js
@@ -1,18 +1,18 @@
// this will show what ends up in the fstream-npm package
-var P = require("fstream-ignore")
-var tar = require("tar")
+var P = require('fstream-ignore')
+var tar = require('tar')
function f (entry) {
- return entry.basename !== ".git"
+ return entry.basename !== '.git'
}
-new P({ path: "./", type: "Directory", Directory: true, filter: f })
- .on("package", function (p) {
- console.error("package", p)
+new P({ path: './', type: 'Directory', Directory: true, filter: f })
+ .on('package', function (p) {
+ console.error('package', p)
})
- .on("ignoreFile", function (e) {
- console.error("ignoreFile", e)
+ .on('ignoreFile', function (e) {
+ console.error('ignoreFile', e)
})
- .on("entry", function (e) {
+ .on('entry', function (e) {
console.error(e.constructor.name, e.path.substr(e.root.path.length + 1))
})
.pipe(tar.Pack())
diff --git a/deps/npm/node_modules/fstream-npm/example/tar.js b/deps/npm/node_modules/fstream-npm/example/tar.js
index f9bcaea816..b7f7e5f04d 100644
--- a/deps/npm/node_modules/fstream-npm/example/tar.js
+++ b/deps/npm/node_modules/fstream-npm/example/tar.js
@@ -1,6 +1,6 @@
// this will show what ends up in the fstream-npm package
-var P = require("../")
-var tar = require("tar")
+var P = require('../')
+var tar = require('tar')
function f () {
return true
}
@@ -8,18 +8,18 @@ function f () {
// return entry.basename !== ".git"
// }
-new P({ path: "./", type: "Directory", isDirectory: true, filter: f })
- .on("package", function (p) {
- console.error("package", p)
+new P({ path: './', type: 'Directory', isDirectory: true, filter: f })
+ .on('package', function (p) {
+ console.error('package', p)
})
- .on("ignoreFile", function (e) {
- console.error("ignoreFile", e)
+ .on('ignoreFile', function (e) {
+ console.error('ignoreFile', e)
})
- .on("entry", function (e) {
+ .on('entry', function (e) {
console.error(e.constructor.name, e.path)
})
- .on("end", function () {
- console.error("ended")
+ .on('end', function () {
+ console.error('ended')
})
.pipe(tar.Pack())
.pipe(process.stdout)
diff --git a/deps/npm/node_modules/fstream-npm/fstream-npm.js b/deps/npm/node_modules/fstream-npm/fstream-npm.js
index 863f588454..7e44072bc9 100644
--- a/deps/npm/node_modules/fstream-npm/fstream-npm.js
+++ b/deps/npm/node_modules/fstream-npm/fstream-npm.js
@@ -1,7 +1,7 @@
-var Ignore = require("fstream-ignore")
-, inherits = require("inherits")
-, path = require("path")
-, fs = require("fs")
+var Ignore = require('fstream-ignore')
+var inherits = require('inherits')
+var path = require('path')
+var fs = require('fs')
module.exports = Packer
@@ -12,13 +12,13 @@ function Packer (props) {
return new Packer(props)
}
- if (typeof props === "string") {
+ if (typeof props === 'string') {
props = { path: props }
}
- props.ignoreFiles = props.ignoreFiles || [ ".npmignore",
- ".gitignore",
- "package.json" ]
+ props.ignoreFiles = props.ignoreFiles || [ '.npmignore',
+ '.gitignore',
+ 'package.json' ]
Ignore.call(this, props)
@@ -30,7 +30,7 @@ function Packer (props) {
// lives right next to a package.json file.
this.bundleMagic = this.parent &&
this.parent.packageRoot &&
- this.basename === "node_modules"
+ this.basename === 'node_modules'
// in a node_modules folder, resolve symbolic links to
// bundled dependencies when creating the package.
@@ -40,42 +40,44 @@ function Packer (props) {
if (this === this.root ||
this.parent &&
this.parent.bundleMagic &&
- this.basename.charAt(0) !== ".") {
+ this.basename.charAt(0) !== '.') {
this.readBundledLinks()
}
-
- this.on("entryStat", function (entry, props) {
+ this.on('entryStat', function (entry, props) {
// files should *always* get into tarballs
// in a user-writable state, even if they're
// being installed from some wackey vm-mounted
// read-only filesystem.
- entry.mode = props.mode = props.mode | 0200
+ entry.mode = props.mode = props.mode | parseInt('0200', 8)
})
}
Packer.prototype.readBundledLinks = function () {
if (this._paused) {
- this.once("resume", this.addIgnoreFiles)
+ this.once('resume', this.addIgnoreFiles)
return
}
this.pause()
- fs.readdir(this.path + "/node_modules", function (er, list) {
+ fs.readdir(this.path + '/node_modules', function (er, list) {
// no harm if there's no bundle
var l = list && list.length
if (er || l === 0) return this.resume()
var errState = null
- , then = function then (er) {
+ var then = function then (er) {
if (errState) return
- if (er) return errState = er, this.resume()
- if (-- l === 0) return this.resume()
+ if (er) {
+ errState = er
+ return this.resume()
+ }
+ if (--l === 0) return this.resume()
}.bind(this)
list.forEach(function (pkg) {
- if (pkg.charAt(0) === ".") return then()
- var pd = this.path + "/node_modules/" + pkg
+ if (pkg.charAt(0) === '.') return then()
+ var pd = this.path + '/node_modules/' + pkg
fs.realpath(pd, function (er, rp) {
if (er) return then()
this.bundleLinks = this.bundleLinks || {}
@@ -88,7 +90,7 @@ Packer.prototype.readBundledLinks = function () {
Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
// package.json files can never be ignored.
- if (entry === "package.json") return true
+ if (entry === 'package.json') return true
// readme files should never be ignored.
if (entry.match(/^readme(\.[^\.]*)$/i)) return true
@@ -100,19 +102,19 @@ Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
if (entry.match(/^(changes|changelog|history)(\.[^\.]*)?$/i)) return true
// special rules. see below.
- if (entry === "node_modules" && this.packageRoot) return true
+ if (entry === 'node_modules' && this.packageRoot) return true
// some files are *never* allowed under any circumstances
- if (entry === ".git" ||
- entry === ".lock-wscript" ||
+ if (entry === '.git' ||
+ entry === '.lock-wscript' ||
entry.match(/^\.wafpickle-[0-9]+$/) ||
- entry === "CVS" ||
- entry === ".svn" ||
- entry === ".hg" ||
+ entry === 'CVS' ||
+ entry === '.svn' ||
+ entry === '.hg' ||
entry.match(/^\..*\.swp$/) ||
- entry === ".DS_Store" ||
+ entry === '.DS_Store' ||
entry.match(/^\._/) ||
- entry === "npm-debug.log"
+ entry === 'npm-debug.log'
) {
return false
}
@@ -127,13 +129,12 @@ Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
// if they're not already present at a higher level.
if (this.bundleMagic) {
// bubbling up. stop here and allow anything the bundled pkg allows
- if (entry.indexOf("/") !== -1) return true
+ if (entry.indexOf('/') !== -1) return true
// never include the .bin. It's typically full of platform-specific
// stuff like symlinks and .cmd files anyway.
- if (entry === ".bin") return false
+ if (entry === '.bin') return false
- var shouldBundle = false
// the package root.
var p = this.parent
// the package before this one.
@@ -149,12 +150,18 @@ Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
// since it's *not* a symbolic link, if we're *already* in a bundle,
// then we should include everything.
- if (pp && pp.package && pp.basename === "node_modules") {
+ if (pp && pp.package && pp.basename === 'node_modules') {
return true
}
// only include it at this point if it's a bundleDependency
var bd = this.package && this.package.bundleDependencies
+
+ if (bd && !Array.isArray(bd)) {
+ throw new Error(this.package.name + '\'s `bundledDependencies` should ' +
+ 'be an array')
+ }
+
var shouldBundle = bd && bd.indexOf(entry) !== -1
// if we're not going to bundle it, then it doesn't count as a bundleLink
// if (this.bundleLinks && !shouldBundle) delete this.bundleLinks[entry]
@@ -169,8 +176,8 @@ Packer.prototype.addIgnoreFiles = function () {
var entries = this.entries
// if there's a .npmignore, then we do *not* want to
// read the .gitignore.
- if (-1 !== entries.indexOf(".npmignore")) {
- var i = entries.indexOf(".gitignore")
+ if (entries.indexOf('.npmignore') !== -1) {
+ var i = entries.indexOf('.gitignore')
if (i !== -1) {
entries.splice(i, 1)
}
@@ -181,9 +188,8 @@ Packer.prototype.addIgnoreFiles = function () {
Ignore.prototype.addIgnoreFiles.call(this)
}
-
Packer.prototype.readRules = function (buf, e) {
- if (e !== "package.json") {
+ if (e !== 'package.json') {
return Ignore.prototype.readRules.call(this, buf, e)
}
@@ -204,7 +210,7 @@ Packer.prototype.readRules = function (buf, e) {
}
this.packageRoot = true
- this.emit("package", p)
+ this.emit('package', p)
// make bundle deps predictable
if (p.bundledDependencies && !p.bundleDependencies) {
@@ -215,10 +221,10 @@ Packer.prototype.readRules = function (buf, e) {
if (!p.files || !Array.isArray(p.files)) return []
// ignore everything except what's in the files array.
- return ["*"].concat(p.files.map(function (f) {
- return "!" + f
+ return ['*'].concat(p.files.map(function (f) {
+ return '!' + f
})).concat(p.files.map(function (f) {
- return "!" + f.replace(/\/+$/, "") + "/**"
+ return '!' + f.replace(/\/+$/, '') + '/**'
}))
}
@@ -242,20 +248,20 @@ Packer.prototype.getChildProps = function (stat) {
return props
}
-
-var order =
- [ "package.json"
- , ".npmignore"
- , ".gitignore"
- , /^README(\.md)?$/
- , "LICENCE"
- , "LICENSE"
- , /\.js$/ ]
+var order = [
+ 'package.json',
+ '.npmignore',
+ '.gitignore',
+ /^README(\.md)?$/,
+ 'LICENCE',
+ 'LICENSE',
+ /\.js$/
+]
Packer.prototype.sort = function (a, b) {
- for (var i = 0, l = order.length; i < l; i ++) {
+ for (var i = 0, l = order.length; i < l; i++) {
var o = order[i]
- if (typeof o === "string") {
+ if (typeof o === 'string') {
if (a === o) return -1
if (b === o) return 1
} else {
@@ -265,46 +271,44 @@ Packer.prototype.sort = function (a, b) {
}
// deps go in the back
- if (a === "node_modules") return 1
- if (b === "node_modules") return -1
+ if (a === 'node_modules') return 1
+ if (b === 'node_modules') return -1
return Ignore.prototype.sort.call(this, a, b)
}
-
-
Packer.prototype.emitEntry = function (entry) {
if (this._paused) {
- this.once("resume", this.emitEntry.bind(this, entry))
+ this.once('resume', this.emitEntry.bind(this, entry))
return
}
// if there is a .gitignore, then we're going to
// rename it to .npmignore in the output.
- if (entry.basename === ".gitignore") {
- entry.basename = ".npmignore"
+ if (entry.basename === '.gitignore') {
+ entry.basename = '.npmignore'
entry.path = path.resolve(entry.dirname, entry.basename)
}
// all *.gyp files are renamed to binding.gyp for node-gyp
// but only when they are in the same folder as a package.json file.
if (entry.basename.match(/\.gyp$/) &&
- this.entries.indexOf("package.json") !== -1) {
- entry.basename = "binding.gyp"
+ this.entries.indexOf('package.json') !== -1) {
+ entry.basename = 'binding.gyp'
entry.path = path.resolve(entry.dirname, entry.basename)
}
// skip over symbolic links
- if (entry.type === "SymbolicLink") {
+ if (entry.type === 'SymbolicLink') {
entry.abort()
return
}
- if (entry.type !== "Directory") {
+ if (entry.type !== 'Directory') {
// make it so that the folder in the tarball is named "package"
var h = path.dirname((entry.root || entry).path)
- , t = entry.path.substr(h.length + 1).replace(/^[^\/\\]+/, "package")
- , p = h + "/" + t
+ var t = entry.path.substr(h.length + 1).replace(/^[^\/\\]+/, 'package')
+ var p = h + '/' + t
entry.path = p
entry.dirname = path.dirname(p)
@@ -319,11 +323,11 @@ Packer.prototype.emitEntry = function (entry) {
// .pipe() doesn't do anythign special with "child" events, on
// with "entry" events.
var me = this
- entry.on("entry", function (e) {
+ entry.on('entry', function (e) {
if (e.parent === entry) {
e.parent = me
- me.emit("entry", e)
+ me.emit('entry', e)
}
})
- entry.on("package", this.emit.bind(this, "package"))
+ entry.on('package', this.emit.bind(this, 'package'))
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
index 161b82564b..1a505bd4a2 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
@@ -51,5 +51,6 @@
"tarball": "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz"
+ "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json
index 6b2ccc99d2..f3c5d3cfce 100644
--- a/deps/npm/node_modules/fstream-npm/package.json
+++ b/deps/npm/node_modules/fstream-npm/package.json
@@ -6,42 +6,31 @@
},
"name": "fstream-npm",
"description": "fstream class for creating npm packages",
- "version": "1.0.1",
+ "version": "1.0.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-npm.git"
},
+ "scripts": {
+ "test": "standard"
+ },
"main": "./fstream-npm.js",
"dependencies": {
"fstream-ignore": "^1.0.0",
"inherits": "2"
},
+ "devDependencies": {
+ "standard": "^2.7.3"
+ },
"license": "ISC",
- "gitHead": "4a95e1903f93dc122320349bb55e367ddd08ad6b",
+ "readme": "# fstream-npm\n\nThis is an fstream DirReader class that will read a directory and filter\nthings according to the semantics of what goes in an npm package.\n\nFor example:\n\n```javascript\n// This will print out all the files that would be included\n// by 'npm publish' or 'npm install' of this directory.\n\nvar FN = require(\"fstream-npm\")\nFN({ path: \"./\" })\n .on(\"child\", function (e) {\n console.error(e.path.substr(e.root.path.length + 1))\n })\n```\n\n",
+ "readmeFilename": "README.md",
+ "gitHead": "d5e26643135522925effa2c112258f1feeec2ba5",
"bugs": {
"url": "https://github.com/isaacs/fstream-npm/issues"
},
"homepage": "https://github.com/isaacs/fstream-npm",
- "_id": "fstream-npm@1.0.1",
- "scripts": {},
- "_shasum": "1e35c77f0fa24f5d6367e6d447ae7d6ddb482db2",
- "_from": "fstream-npm@1.0.1",
- "_npmVersion": "2.1.3",
- "_nodeVersion": "0.10.31",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "dist": {
- "shasum": "1e35c77f0fa24f5d6367e6d447ae7d6ddb482db2",
- "tarball": "http://registry.npmjs.org/fstream-npm/-/fstream-npm-1.0.1.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.0.1.tgz"
+ "_id": "fstream-npm@1.0.2",
+ "_shasum": "a1d2a4ce6ac2db731f0f66a85b4dddfea9565d77",
+ "_from": "fstream-npm@>=1.0.2 <1.1.0"
}
diff --git a/deps/npm/node_modules/glob/README.md b/deps/npm/node_modules/glob/README.md
index ba95474c28..fa993dcb6d 100644
--- a/deps/npm/node_modules/glob/README.md
+++ b/deps/npm/node_modules/glob/README.md
@@ -79,7 +79,8 @@ with a matching basename. For example, `*.js` would match
The intent for negation would be for a pattern starting with `!` to
match everything that *doesn't* match the supplied pattern. However,
the implementation is weird, and for the time being, this should be
-avoided. The behavior will change or be deprecated in version 5.
+avoided. The behavior is deprecated in version 5, and will be removed
+entirely in version 6.
### Empty Sets
@@ -159,8 +160,6 @@ be immediately available on the `g.found` member.
* `aborted` Boolean which is set to true when calling `abort()`. There
is no way at this time to continue a glob search after aborting, but
you can re-use the statCache to avoid having to duplicate syscalls.
-* `statCache` Collection of all the stat results the glob search
- performed.
* `cache` Convenience object. Each field has the following possible
values:
* `false` - Path does not exist
@@ -173,6 +172,9 @@ be immediately available on the `g.found` member.
path multiple times.
* `symlinks` A record of which paths are symbolic links, which is
relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
### Events
@@ -204,9 +206,9 @@ All options are added to the Glob object, as well.
If you are running many `glob` operations, you can pass a Glob object
as the `options` argument to a subsequent operation to shortcut some
`stat` and `readdir` calls. At the very least, you may pass in shared
-`symlinks`, `statCache`, and `cache` options, so that parallel glob
-operations will be sped up by sharing information about the
-filesystem.
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
* `cwd` The current working directory in which to search. Defaults
to `process.cwd()`.
@@ -242,7 +244,7 @@ filesystem.
* `symlinks` A cache of known symbolic links. You may pass in a
previously generated `symlinks` object to save `lstat` calls when
resolving `**` matches.
-* `sync` Perform a synchronous glob search.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
* `nounique` In some cases, brace-expanded patterns can result in the
same file showing up multiple times in the result set. By default,
this implementation prevents duplicates in the result set. Set this
@@ -260,11 +262,21 @@ filesystem.
* `matchBase` Perform a basename-only match if the pattern does not
contain any slash characters. That is, `*.js` would be treated as
equivalent to `**/*.js`, matching all js files in all directories.
-* `nonegate` Suppress `negate` behavior. (See below.)
-* `nocomment` Suppress `comment` behavior. (See below.)
* `nonull` Return the pattern when no matches are found.
-* `nodir` Do not match directories, only files.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+* `nonegate` Suppress deprecated `negate` behavior. (See below.)
+ Default=true
+* `nocomment` Suppress deprecated `comment` behavior. (See below.)
+ Default=true
## Comparisons to other fnmatch/glob implementations
@@ -272,17 +284,6 @@ While strict compliance with the existing standards is a worthwhile
goal, some discrepancies exist between node-glob and other
implementations, and are intentional.
-If the pattern starts with a `!` character, then it is negated. Set the
-`nonegate` flag to suppress this behavior, and treat leading `!`
-characters normally. This is perhaps relevant if you wish to start the
-pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
-characters at the start of a pattern will negate the pattern multiple
-times.
-
-If a pattern starts with `#`, then it is treated as a comment, and
-will not match anything. Use `\#` to match a literal `#` at the
-start of a line, or set the `nocomment` flag to suppress this behavior.
-
The double-star character `**` is supported by default, unless the
`noglobstar` flag is set. This is supported in the manner of bsdglob
and bash 4.3, where `**` only has special significance if it is the only
@@ -306,6 +307,25 @@ other interpretation of the glob pattern. Thus, a pattern like
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
checked for validity. Since those two are valid, matching proceeds.
+### Comments and Negation
+
+**Note**: In version 5 of this module, negation and comments are
+**disabled** by default. You can explicitly set `nonegate:false` or
+`nocomment:false` to re-enable them. They are going away entirely in
+version 6.
+
+The intent for negation would be for a pattern starting with `!` to
+match everything that *doesn't* match the supplied pattern. However,
+the implementation is weird. It is better to use the `ignore` option
+to set a pattern or set of patterns to exclude from matches. If you
+want the "everything except *x*" type of behavior, you can use `**` as
+the main pattern, and set an `ignore` for the things to exclude.
+
+The comments feature is added in minimatch, primarily to more easily
+support use cases like ignore files, where a `#` at the start of a
+line makes the pattern "empty". However, in the context of a
+straightforward filesystem globber, "comments" don't make much sense.
+
## Windows
**Please only use forward-slashes in glob expressions.**
diff --git a/deps/npm/node_modules/glob/common.js b/deps/npm/node_modules/glob/common.js
index 491b9730bd..d6389591df 100644
--- a/deps/npm/node_modules/glob/common.js
+++ b/deps/npm/node_modules/glob/common.js
@@ -58,11 +58,11 @@ function ignoreMap (pattern) {
var gmatcher = null
if (pattern.slice(-3) === '/**') {
var gpattern = pattern.replace(/(\/\*\*)+$/, '')
- gmatcher = new Minimatch(gpattern, { nonegate: true })
+ gmatcher = new Minimatch(gpattern)
}
return {
- matcher: new Minimatch(pattern, { nonegate: true }),
+ matcher: new Minimatch(pattern),
gmatcher: gmatcher
}
}
@@ -81,6 +81,9 @@ function setopts (self, pattern, options) {
self.pattern = pattern
self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
self.dot = !!options.dot
self.mark = !!options.mark
self.nodir = !!options.nodir
@@ -117,17 +120,42 @@ function setopts (self, pattern, options) {
self.nomount = !!options.nomount
+ // disable comments and negation unless the user explicitly
+ // passes in false as the option.
+ options.nonegate = options.nonegate === false ? false : true
+ options.nocomment = options.nocomment === false ? false : true
+ deprecationWarning(options)
+
self.minimatch = new Minimatch(pattern, options)
self.options = self.minimatch.options
}
+// TODO(isaacs): remove entirely in v6
+// exported to reset in tests
+exports.deprecationWarned
+function deprecationWarning(options) {
+ if (!options.nonegate || !options.nocomment) {
+ if (process.noDeprecation !== true && !exports.deprecationWarned) {
+ var msg = 'glob WARNING: comments and negation will be disabled in v6'
+ if (process.throwDeprecation)
+ throw new Error(msg)
+ else if (process.traceDeprecation)
+ console.trace(msg)
+ else
+ console.error(msg)
+
+ exports.deprecationWarned = true
+ }
+ }
+}
+
function finish (self) {
var nou = self.nounique
var all = nou ? [] : Object.create(null)
for (var i = 0, l = self.matches.length; i < l; i ++) {
var matches = self.matches[i]
- if (!matches) {
+ if (!matches || Object.keys(matches).length === 0) {
if (self.nonull) {
// do like the shell, and spit out the literal glob
var literal = self.minimatch.globSet[i]
@@ -175,7 +203,8 @@ function finish (self) {
}
function mark (self, p) {
- var c = self.cache[p]
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
var m = p
if (c) {
var isDir = c === 'DIR' || Array.isArray(c)
@@ -187,8 +216,9 @@ function mark (self, p) {
m = m.slice(0, -1)
if (m !== p) {
- self.statCache[m] = self.statCache[p]
- self.cache[m] = self.cache[p]
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
}
}
@@ -204,6 +234,8 @@ function makeAbs (self, f) {
abs = f
} else if (self.changedCwd) {
abs = path.resolve(self.cwd, f)
+ } else {
+ abs = path.resolve(f)
}
return abs
}
diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js
index e1a5c9ece5..eac0693cc6 100644
--- a/deps/npm/node_modules/glob/glob.js
+++ b/deps/npm/node_modules/glob/glob.js
@@ -114,6 +114,7 @@ function Glob (pattern, options, cb) {
return new Glob(pattern, options, cb)
setopts(this, pattern, options)
+ this._didRealPath = false
// process each pattern in the minimatch set
var n = this.minimatch.set.length
@@ -163,11 +164,67 @@ Glob.prototype._finish = function () {
if (this.aborted)
return
- //console.error('FINISH', this.matches)
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
common.finish(this)
this.emit('end', this.found)
}
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ fs.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
Glob.prototype._mark = function (p) {
return common.mark(this, p)
}
@@ -372,34 +429,43 @@ Glob.prototype._emitMatch = function (index, e) {
if (this.aborted)
return
- if (!this.matches[index][e]) {
- if (this.paused) {
- this._emitQueue.push([index, e])
- return
- }
+ if (this.matches[index][e])
+ return
- if (this.nodir) {
- var c = this.cache[this._makeAbs(e)]
- if (c === 'DIR' || Array.isArray(c))
- return
- }
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
- this.matches[index][e] = true
- if (!this.stat && !this.mark)
- return this.emit('match', e)
+ var abs = this._makeAbs(e)
- var self = this
- this._stat(this._makeAbs(e), function (er, c, st) {
- self.emit('stat', e, st)
- self.emit('match', e)
- })
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
}
+
+ if (this.mark)
+ e = this._mark(e)
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
}
Glob.prototype._readdirInGlobStar = function (abs, cb) {
if (this.aborted)
return
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
var lstatkey = 'lstat\0' + abs
var self = this
var lstatcb = inflight(lstatkey, lstatcb_)
@@ -487,18 +553,18 @@ Glob.prototype._readdirError = function (f, er, cb) {
// handle errors, and cache the information
switch (er.code) {
case 'ENOTDIR': // totally normal. means it *does* exist.
- this.cache[f] = 'FILE'
+ this.cache[this._makeAbs(f)] = 'FILE'
break
case 'ENOENT': // not terribly unusual
case 'ELOOP':
case 'ENAMETOOLONG':
case 'UNKNOWN':
- this.cache[f] = false
+ this.cache[this._makeAbs(f)] = false
break
default: // some unusual error. Treat as failure.
- this.cache[f] = false
+ this.cache[this._makeAbs(f)] = false
if (this.strict) return this.emit('error', er)
if (!this.silent) console.error('glob error', er)
break
@@ -594,27 +660,27 @@ Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
// Returns either 'DIR', 'FILE', or false
Glob.prototype._stat = function (f, cb) {
- var abs = f
- if (f.charAt(0) === '/')
- abs = path.join(this.root, f)
- else if (this.changedCwd)
- abs = path.resolve(this.cwd, f)
-
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
if (f.length > this.maxLength)
return cb()
- if (!this.stat && ownProp(this.cache, f)) {
- var c = this.cache[f]
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
if (Array.isArray(c))
c = 'DIR'
- // It exists, but not how we need it
- if (abs.slice(-1) === '/' && c !== 'DIR')
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
return cb()
- return cb(null, c)
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
}
var exists
@@ -622,8 +688,13 @@ Glob.prototype._stat = function (f, cb) {
if (stat !== undefined) {
if (stat === false)
return cb(null, stat)
- else
- return cb(null, stat.isDirectory() ? 'DIR' : 'FILE', stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
}
var self = this
@@ -653,12 +724,17 @@ Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
return cb()
}
+ var needDir = f.slice(-1) === '/'
this.statCache[abs] = stat
if (abs.slice(-1) === '/' && !stat.isDirectory())
return cb(null, false, stat)
var c = stat.isDirectory() ? 'DIR' : 'FILE'
- this.cache[f] = this.cache[f] || c
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return cb()
+
return cb(null, c, stat)
}
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 59eff1188f..cf31a8ded6 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -6,7 +6,7 @@
},
"name": "glob",
"description": "a little globber",
- "version": "4.4.2",
+ "version": "5.0.3",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
@@ -42,15 +42,15 @@
"benchclean": "bash benchclean.sh"
},
"license": "ISC",
- "gitHead": "c13abc0df649ec29f8cfec42f818412887736aa1",
+ "gitHead": "2f63d487885fbb51ec8fcb21229bebd0e515c3fb",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
"homepage": "https://github.com/isaacs/node-glob",
- "_id": "glob@4.4.2",
- "_shasum": "3ef93e297ee096c1b9b3ffb1d21025c78ab60548",
- "_from": "glob@>=4.4.2 <4.5.0",
- "_npmVersion": "2.6.0",
+ "_id": "glob@5.0.3",
+ "_shasum": "15528c1c727e474a8e7731541c00b00ec802952d",
+ "_from": "glob@>=5.0.3 <5.1.0",
+ "_npmVersion": "2.7.1",
"_nodeVersion": "1.4.2",
"_npmUser": {
"name": "isaacs",
@@ -63,10 +63,10 @@
}
],
"dist": {
- "shasum": "3ef93e297ee096c1b9b3ffb1d21025c78ab60548",
- "tarball": "http://registry.npmjs.org/glob/-/glob-4.4.2.tgz"
+ "shasum": "15528c1c727e474a8e7731541c00b00ec802952d",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/glob/-/glob-4.4.2.tgz",
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.3.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/glob/sync.js b/deps/npm/node_modules/glob/sync.js
index 315fbfb0b4..f4f5e36d4b 100644
--- a/deps/npm/node_modules/glob/sync.js
+++ b/deps/npm/node_modules/glob/sync.js
@@ -50,6 +50,24 @@ function GlobSync (pattern, options) {
GlobSync.prototype._finish = function () {
assert(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = fs.realpathSync(p, this.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
common.finish(this)
}
@@ -190,21 +208,31 @@ GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index,
GlobSync.prototype._emitMatch = function (index, e) {
- if (!this.matches[index][e]) {
- if (this.nodir) {
- var c = this.cache[this._makeAbs(e)]
- if (c === 'DIR' || Array.isArray(c))
- return
- }
+ var abs = this._makeAbs(e)
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.matches[index][e])
+ return
- this.matches[index][e] = true
- if (this.stat || this.mark)
- this._stat(this._makeAbs(e))
+ if (this.nodir) {
+ var c = this.cache[this._makeAbs(e)]
+ if (c === 'DIR' || Array.isArray(c))
+ return
}
+
+ this.matches[index][e] = true
+ if (this.stat)
+ this._stat(e)
}
GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
var entries
var lstat
var stat
@@ -276,18 +304,18 @@ GlobSync.prototype._readdirError = function (f, er) {
// handle errors, and cache the information
switch (er.code) {
case 'ENOTDIR': // totally normal. means it *does* exist.
- this.cache[f] = 'FILE'
+ this.cache[this._makeAbs(f)] = 'FILE'
break
case 'ENOENT': // not terribly unusual
case 'ELOOP':
case 'ENAMETOOLONG':
case 'UNKNOWN':
- this.cache[f] = false
+ this.cache[this._makeAbs(f)] = false
break
default: // some unusual error. Treat as failure.
- this.cache[f] = false
+ this.cache[this._makeAbs(f)] = false
if (this.strict) throw er
if (!this.silent) console.error('glob error', er)
break
@@ -365,27 +393,27 @@ GlobSync.prototype._processSimple = function (prefix, index) {
// Returns either 'DIR', 'FILE', or false
GlobSync.prototype._stat = function (f) {
- var abs = f
- if (f.charAt(0) === '/')
- abs = path.join(this.root, f)
- else if (this.changedCwd)
- abs = path.resolve(this.cwd, f)
-
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
if (f.length > this.maxLength)
return false
- if (!this.stat && ownProp(this.cache, f)) {
- var c = this.cache[f]
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
if (Array.isArray(c))
c = 'DIR'
- // It exists, but not how we need it
- if (abs.slice(-1) === '/' && c !== 'DIR')
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
return false
- return c
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
}
var exists
@@ -411,11 +439,12 @@ GlobSync.prototype._stat = function (f) {
this.statCache[abs] = stat
- if (abs.slice(-1) === '/' && !stat.isDirectory())
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
return false
- var c = stat.isDirectory() ? 'DIR' : 'FILE'
- this.cache[f] = this.cache[f] || c
return c
}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.npmignore b/deps/npm/node_modules/hosted-git-info/.npmignore
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.npmignore
rename to deps/npm/node_modules/hosted-git-info/.npmignore
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.travis.yml b/deps/npm/node_modules/hosted-git-info/.travis.yml
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.travis.yml
rename to deps/npm/node_modules/hosted-git-info/.travis.yml
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md b/deps/npm/node_modules/hosted-git-info/README.md
similarity index 99%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md
rename to deps/npm/node_modules/hosted-git-info/README.md
index ebf40a2ab2..f1d799b173 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md
+++ b/deps/npm/node_modules/hosted-git-info/README.md
@@ -79,4 +79,3 @@ eg, `npm/hosted-git-info`
Currently this supports Github, Bitbucket and Gitlab. Pull requests for
additional hosts welcome.
-
diff --git a/deps/npm/node_modules/hosted-git-info/README.md~ b/deps/npm/node_modules/hosted-git-info/README.md~
new file mode 100644
index 0000000000..aadbbee1f4
--- /dev/null
+++ b/deps/npm/node_modules/hosted-git-info/README.md~
@@ -0,0 +1,87 @@
+# hosted-git-info
+
+This will let you identify and transform various git hosts URLs between
+protocols. It also can tell you what the URL is for the raw path for
+particular file for direct access without git.
+
+## Usage
+
+```javascript
+var hostedGitInfo = require("hosted-git-info")
+var info = hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git")
+/* info looks like:
+{
+ type: "github",
+ domain: "github.com",
+ user: "npm",
+ project: "hosted-git-info"
+}
+*/
+```
+
+If the URL can't be matched with a git host, `null` will be returned. We
+can match git, ssh and https urls. Additionally, we can match ssh connect
+strings (`git@github.com:npm/hosted-git-info`) and shortcuts (eg,
+`github:npm/hosted-git-info`). Github specifically, is detected in the case
+of a third, unprefixed, form: `npm/hosted-git-info`.
+
+If it does match, the returned object has properties of:
+
+* info.type -- The short name of the service
+* info.domain -- The domain for git protocol use
+* info.user -- The name of the user/org on the git host
+* info.project -- The name of the project on the git host
+
+And methods of:
+
+* info.file(path)
+
+Given the path of a file relative to the repository, returns a URL for
+directly fetching it from the githost. If no comittish was set then
+`master` will be used as the default.
+
+<<<<<<< HEAD
+For example `hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git#v1.0.0").file("package.json")`
+||||||| merged common ancestors
+For example `hostedGitInfo("git@github.com:npm/hosted-git-info.git").file("v1.0.0")`
+=======
+For example `hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git").file("v1.0.0")`
+>>>>>>> Another README fix
+would return `https://raw.githubusercontent.com/npm/hosted-git-info/v1.0.0/package.json`
+
+* info.shortcut()
+
+eg, `github:npm/hosted-git-info`
+
+* info.browse()
+
+eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0`
+
+* info.bugs()
+
+eg, `https://github.com/npm/hosted-git-info/issues`
+
+* info.docs()
+
+eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0#readme`
+
+* info.https()
+
+eg, `https://github.com/npm/hosted-git-info.git`
+
+* info.sshurl()
+
+eg, `git+ssh://git@github.com/npm/hosted-git-info.git`
+
+* info.ssh()
+
+eg, `git@github.com:npm/hosted-git-info.git`
+
+* info.path()
+
+eg, `npm/hosted-git-info`
+
+## Supported hosts
+
+Currently this supports Github, Bitbucket and Gitlab. Pull requests for
+additional hosts welcome.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/index.js b/deps/npm/node_modules/hosted-git-info/index.js
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/index.js
rename to deps/npm/node_modules/hosted-git-info/index.js
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json b/deps/npm/node_modules/hosted-git-info/package.json
similarity index 96%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json
rename to deps/npm/node_modules/hosted-git-info/package.json
index 00606f6a46..4e38cb439d 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json
+++ b/deps/npm/node_modules/hosted-git-info/package.json
@@ -32,7 +32,7 @@
"gitHead": "153325f997813ebf8a7ae07b322b4fa89aa25f7d",
"_id": "hosted-git-info@1.5.3",
"_shasum": "1f46e25e9c0e207852fb7a4b94422ed5f09a03f5",
- "_from": "hosted-git-info@>=1.5.3 <2.0.0",
+ "_from": "hosted-git-info@>=1.5.3 <1.6.0",
"_npmVersion": "2.4.0",
"_nodeVersion": "0.10.33",
"_npmUser": {
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/basic.js b/deps/npm/node_modules/hosted-git-info/test/basic.js
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/basic.js
rename to deps/npm/node_modules/hosted-git-info/test/basic.js
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js b/deps/npm/node_modules/hosted-git-info/test/bitbucket.js
similarity index 99%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js
rename to deps/npm/node_modules/hosted-git-info/test/bitbucket.js
index 089cb28190..8712723145 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js
+++ b/deps/npm/node_modules/hosted-git-info/test/bitbucket.js
@@ -21,4 +21,3 @@ test("fromUrl(bitbucket url)", function (t) {
t.end()
})
-
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js b/deps/npm/node_modules/hosted-git-info/test/gist.js
similarity index 99%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js
rename to deps/npm/node_modules/hosted-git-info/test/gist.js
index a316048cb7..3081c3db42 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js
+++ b/deps/npm/node_modules/hosted-git-info/test/gist.js
@@ -37,4 +37,3 @@ test("fromUrl(gist url)", function (t) {
t.end()
})
-
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js b/deps/npm/node_modules/hosted-git-info/test/github.js
similarity index 99%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js
rename to deps/npm/node_modules/hosted-git-info/test/github.js
index e551c45d7b..1b945d26c3 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js
+++ b/deps/npm/node_modules/hosted-git-info/test/github.js
@@ -39,4 +39,3 @@ test("fromUrl(github url)", function (t) {
t.end()
})
-
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js b/deps/npm/node_modules/hosted-git-info/test/gitlab.js
similarity index 99%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js
rename to deps/npm/node_modules/hosted-git-info/test/gitlab.js
index 1a4e07096c..1b25d60c7d 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js
+++ b/deps/npm/node_modules/hosted-git-info/test/gitlab.js
@@ -22,4 +22,3 @@ test("fromUrl(gitlab url)", function (t) {
t.end()
})
-
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/lib/standard-tests.js b/deps/npm/node_modules/hosted-git-info/test/lib/standard-tests.js
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/lib/standard-tests.js
rename to deps/npm/node_modules/hosted-git-info/test/lib/standard-tests.js
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE b/deps/npm/node_modules/init-package-json/node_modules/glob/LICENSE
similarity index 93%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE
rename to deps/npm/node_modules/init-package-json/node_modules/glob/LICENSE
index 05eeeb88c2..19129e315f 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE
+++ b/deps/npm/node_modules/init-package-json/node_modules/glob/LICENSE
@@ -1,6 +1,6 @@
The ISC License
-Copyright (c) Isaac Z. Schlueter
+Copyright (c) Isaac Z. Schlueter and Contributors
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
diff --git a/deps/npm/node_modules/init-package-json/node_modules/glob/README.md b/deps/npm/node_modules/init-package-json/node_modules/glob/README.md
new file mode 100644
index 0000000000..258257ecb1
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/node_modules/glob/README.md
@@ -0,0 +1,369 @@
+[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
+
+# Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
+
+This is a glob implementation in JavaScript. It uses the `minimatch`
+library to do its matching.
+
+![](oh-my-glob.gif)
+
+## Usage
+
+```javascript
+var glob = require("glob")
+
+// options is optional
+glob("**/*.js", options, function (er, files) {
+ // files is an array of filenames.
+ // If the `nonull` option is set, and nothing
+ // was found, then files is ["**/*.js"]
+ // er is an error object or null.
+})
+```
+
+## Glob Primer
+
+"Globs" are the patterns you type when you do stuff like `ls *.js` on
+the command line, or put `build/*` in a `.gitignore` file.
+
+Before parsing the path part patterns, braced sections are expanded
+into a set. Braced sections start with `{` and end with `}`, with any
+number of comma-delimited sections within. Braced sections may contain
+slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in a
+path portion:
+
+* `*` Matches 0 or more characters in a single path portion
+* `?` Matches 1 character
+* `[...]` Matches a range of characters, similar to a RegExp range.
+ If the first character of the range is `!` or `^` then it matches
+ any character not in the range.
+* `!(pattern|pattern|pattern)` Matches anything that does not match
+ any of the patterns provided.
+* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
+ patterns provided.
+* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
+ patterns provided.
+* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
+* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided
+* `**` If a "globstar" is alone in a path portion, then it matches
+ zero or more directories and subdirectories searching for matches.
+ It does not crawl symlinked directories.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first character,
+then it will not match any glob pattern unless that pattern's
+corresponding path part also has a `.` as its first character.
+
+For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
+However the pattern `a/*/c` would not, because `*` does not start with
+a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has no
+slashes in it, then it will seek for any file anywhere in the tree
+with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Negation
+
+The intent for negation would be for a pattern starting with `!` to
+match everything that *doesn't* match the supplied pattern. However,
+the implementation is weird, and for the time being, this should be
+avoided. The behavior will change or be deprecated in version 5.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned. This
+differs from the shell, where the pattern itself is returned. For
+example:
+
+ $ echo a*s*d*f
+ a*s*d*f
+
+To get the bash-style behavior, set the `nonull:true` in the options.
+
+### See Also:
+
+* `man sh`
+* `man bash` (Search for "Pattern Matching")
+* `man 3 fnmatch`
+* `man 5 gitignore`
+* [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## glob.hasMagic(pattern, [options])
+
+Returns `true` if there are any special characters in the pattern, and
+`false` otherwise.
+
+Note that the options affect the results. If `noext:true` is set in
+the options object, then `+(a|b)` will not be considered a magic
+pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
+then that is considered magical, unless `nobrace:true` is set in the
+options.
+
+## glob(pattern, [options], cb)
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* `cb` {Function}
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array} filenames found matching the pattern
+
+Perform a synchronous glob search.
+
+## Class: glob.Glob
+
+Create a Glob object by instantiating the `glob.Glob` class.
+
+```javascript
+var Glob = require("glob").Glob
+var mg = new Glob(pattern, options, cb)
+```
+
+It's an EventEmitter, and starts walking the filesystem to find matches
+immediately.
+
+### new glob.Glob(pattern, [options], [cb])
+
+* `pattern` {String} pattern to search for
+* `options` {Object}
+* `cb` {Function} Called when an error occurs, or matches are found
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Note that if the `sync` flag is set in the options, then matches will
+be immediately available on the `g.found` member.
+
+### Properties
+
+* `minimatch` The minimatch object that the glob uses.
+* `options` The options object passed in.
+* `aborted` Boolean which is set to true when calling `abort()`. There
+ is no way at this time to continue a glob search after aborting, but
+ you can re-use the statCache to avoid having to duplicate syscalls.
+* `statCache` Collection of all the stat results the glob search
+ performed.
+* `cache` Convenience object. Each field has the following possible
+ values:
+ * `false` - Path does not exist
+ * `true` - Path exists
+ * `'DIR'` - Path exists, and is not a directory
+ * `'FILE'` - Path exists, and is a directory
+ * `[file, entries, ...]` - Path exists, is a directory, and the
+ array value is the results of `fs.readdir`
+* `statCache` Cache of `fs.stat` results, to prevent statting the same
+ path multiple times.
+* `symlinks` A record of which paths are symbolic links, which is
+ relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
+
+### Events
+
+* `end` When the matching is finished, this is emitted with all the
+ matches found. If the `nonull` option is set, and no match was found,
+ then the `matches` list contains the original pattern. The matches
+ are sorted, unless the `nosort` flag is set.
+* `match` Every time a match is found, this is emitted with the matched.
+* `error` Emitted when an unexpected error is encountered, or whenever
+ any fs error occurs if `options.strict` is set.
+* `abort` When `abort()` is called, this event is raised.
+
+### Methods
+
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
+
+### Options
+
+All the options that can be passed to Minimatch can also be passed to
+Glob to change pattern matching behavior. Also, some have been added,
+or have glob-specific ramifications.
+
+All options are false by default, unless otherwise noted.
+
+All options are added to the Glob object, as well.
+
+If you are running many `glob` operations, you can pass a Glob object
+as the `options` argument to a subsequent operation to shortcut some
+`stat` and `readdir` calls. At the very least, you may pass in shared
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
+
+* `cwd` The current working directory in which to search. Defaults
+ to `process.cwd()`.
+* `root` The place where patterns starting with `/` will be mounted
+ onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
+ systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+ Note that an explicit dot in a portion of the pattern will always
+ match dot files.
+* `nomount` By default, a pattern starting with a forward-slash will be
+ "mounted" onto the root setting, so that a valid filesystem path is
+ returned. Set this flag to disable that behavior.
+* `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+* `nosort` Don't sort the results.
+* `stat` Set to true to stat *all* results. This reduces performance
+ somewhat, and is completely unnecessary, unless `readdir` is presumed
+ to be an untrustworthy indicator of file existence.
+* `silent` When an unusual error is encountered when attempting to
+ read a directory, a warning will be printed to stderr. Set the
+ `silent` option to true to suppress these warnings.
+* `strict` When an unusual error is encountered when attempting to
+ read a directory, the process will just continue on in search of
+ other matches. Set the `strict` option to raise an error in these
+ cases.
+* `cache` See `cache` property above. Pass in a previously generated
+ cache object to save some fs calls.
+* `statCache` A cache of results of filesystem information, to prevent
+ unnecessary stat calls. While it should not normally be necessary
+ to set this, you may pass the statCache from one glob() call to the
+ options object of another, if you know that the filesystem will not
+ change between calls. (See "Race Conditions" below.)
+* `symlinks` A cache of known symbolic links. You may pass in a
+ previously generated `symlinks` object to save `lstat` calls when
+ resolving `**` matches.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
+* `nounique` In some cases, brace-expanded patterns can result in the
+ same file showing up multiple times in the result set. By default,
+ this implementation prevents duplicates in the result set. Set this
+ flag to disable that behavior.
+* `nonull` Set to never return an empty set, instead returning a set
+ containing the pattern itself. This is the default in glob(3).
+* `debug` Set to enable debug logging in minimatch and glob.
+* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+* `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+* `noext` Do not match `+(a|b)` "extglob" patterns.
+* `nocase` Perform a case-insensitive match. Note: on
+ case-insensitive filesystems, non-magic patterns will match by
+ default, since `stat` and `readdir` will not raise errors.
+* `matchBase` Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, `*.js` would be treated as
+ equivalent to `**/*.js`, matching all js files in all directories.
+* `nonegate` Suppress `negate` behavior. (See below.)
+* `nocomment` Suppress `comment` behavior. (See below.)
+* `nonull` Return the pattern when no matches are found.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
+* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between node-glob and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.3, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+Note that symlinked directories are not crawled as part of a `**`,
+though their contents may match against subsequent portions of the
+pattern. This prevents infinite loops and duplicates and the like.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then glob returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only `/`
+characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will always
+be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto the
+root setting using `path.join`. On windows, this will by default result
+in `/foo/*` matching `C:\foo\bar.txt`.
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race conditions,
+since it relies on directory walking and such.
+
+As a result, it is possible that a file that exists when glob looks for
+it may have been deleted or modified by the time it returns the result.
+
+As part of its internal implementation, this program caches all stat
+and readdir calls that it makes, in order to cut down on system
+overhead. However, this also makes it even more susceptible to races,
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast majority
+of operations, this is never a problem.
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# to benchmark against bash/zsh
+npm run bench
+
+# to profile javascript
+npm run prof
+```
diff --git a/deps/npm/node_modules/init-package-json/node_modules/glob/common.js b/deps/npm/node_modules/init-package-json/node_modules/glob/common.js
new file mode 100644
index 0000000000..cd7c824481
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/node_modules/glob/common.js
@@ -0,0 +1,237 @@
+exports.alphasort = alphasort
+exports.alphasorti = alphasorti
+exports.isAbsolute = process.platform === "win32" ? absWin : absUnix
+exports.setopts = setopts
+exports.ownProp = ownProp
+exports.makeAbs = makeAbs
+exports.finish = finish
+exports.mark = mark
+exports.isIgnored = isIgnored
+exports.childrenIgnored = childrenIgnored
+
+function ownProp (obj, field) {
+ return Object.prototype.hasOwnProperty.call(obj, field)
+}
+
+var path = require("path")
+var minimatch = require("minimatch")
+var Minimatch = minimatch.Minimatch
+
+function absWin (p) {
+ if (absUnix(p)) return true
+ // pull off the device/UNC bit from a windows path.
+ // from node's lib/path.js
+ var splitDeviceRe =
+ /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
+ var result = splitDeviceRe.exec(p)
+ var device = result[1] || ''
+ var isUnc = device && device.charAt(1) !== ':'
+ var isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+
+ return isAbsolute
+}
+
+function absUnix (p) {
+ return p.charAt(0) === "/" || p === ""
+}
+
+function alphasorti (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase())
+}
+
+function alphasort (a, b) {
+ return a.localeCompare(b)
+}
+
+function setupIgnores (self, options) {
+ self.ignore = options.ignore || []
+
+ if (!Array.isArray(self.ignore))
+ self.ignore = [self.ignore]
+
+ if (self.ignore.length) {
+ self.ignore = self.ignore.map(ignoreMap)
+ }
+}
+
+function ignoreMap (pattern) {
+ var gmatcher = null
+ if (pattern.slice(-3) === '/**') {
+ var gpattern = pattern.replace(/(\/\*\*)+$/, '')
+ gmatcher = new Minimatch(gpattern, { nonegate: true })
+ }
+
+ return {
+ matcher: new Minimatch(pattern, { nonegate: true }),
+ gmatcher: gmatcher
+ }
+}
+
+function setopts (self, pattern, options) {
+ if (!options)
+ options = {}
+
+ // base-matching: just use globstar for that.
+ if (options.matchBase && -1 === pattern.indexOf("/")) {
+ if (options.noglobstar) {
+ throw new Error("base matching requires globstar")
+ }
+ pattern = "**/" + pattern
+ }
+
+ self.pattern = pattern
+ self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
+ self.dot = !!options.dot
+ self.mark = !!options.mark
+ self.nodir = !!options.nodir
+ if (self.nodir)
+ self.mark = true
+ self.sync = !!options.sync
+ self.nounique = !!options.nounique
+ self.nonull = !!options.nonull
+ self.nosort = !!options.nosort
+ self.nocase = !!options.nocase
+ self.stat = !!options.stat
+ self.noprocess = !!options.noprocess
+
+ self.maxLength = options.maxLength || Infinity
+ self.cache = options.cache || Object.create(null)
+ self.statCache = options.statCache || Object.create(null)
+ self.symlinks = options.symlinks || Object.create(null)
+
+ setupIgnores(self, options)
+
+ self.changedCwd = false
+ var cwd = process.cwd()
+ if (!ownProp(options, "cwd"))
+ self.cwd = cwd
+ else {
+ self.cwd = options.cwd
+ self.changedCwd = path.resolve(options.cwd) !== cwd
+ }
+
+ self.root = options.root || path.resolve(self.cwd, "/")
+ self.root = path.resolve(self.root)
+ if (process.platform === "win32")
+ self.root = self.root.replace(/\\/g, "/")
+
+ self.nomount = !!options.nomount
+
+ self.minimatch = new Minimatch(pattern, options)
+ self.options = self.minimatch.options
+}
+
+function finish (self) {
+ var nou = self.nounique
+ var all = nou ? [] : Object.create(null)
+
+ for (var i = 0, l = self.matches.length; i < l; i ++) {
+ var matches = self.matches[i]
+ if (!matches || Object.keys(matches).length === 0) {
+ if (self.nonull) {
+ // do like the shell, and spit out the literal glob
+ var literal = self.minimatch.globSet[i]
+ if (nou)
+ all.push(literal)
+ else
+ all[literal] = true
+ }
+ } else {
+ // had matches
+ var m = Object.keys(matches)
+ if (nou)
+ all.push.apply(all, m)
+ else
+ m.forEach(function (m) {
+ all[m] = true
+ })
+ }
+ }
+
+ if (!nou)
+ all = Object.keys(all)
+
+ if (!self.nosort)
+ all = all.sort(self.nocase ? alphasorti : alphasort)
+
+ // at *some* point we statted all of these
+ if (self.mark) {
+ for (var i = 0; i < all.length; i++) {
+ all[i] = self._mark(all[i])
+ }
+ if (self.nodir) {
+ all = all.filter(function (e) {
+ return !(/\/$/.test(e))
+ })
+ }
+ }
+
+ if (self.ignore.length)
+ all = all.filter(function(m) {
+ return !isIgnored(self, m)
+ })
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
+ var m = p
+ if (c) {
+ var isDir = c === 'DIR' || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
+ }
+ }
+
+ return m
+}
+
+// lotta situps...
+function makeAbs (self, f) {
+ var abs = f
+ if (f.charAt(0) === '/') {
+ abs = path.join(self.root, f)
+ } else if (exports.isAbsolute(f)) {
+ abs = f
+ } else if (self.changedCwd) {
+ abs = path.resolve(self.cwd, f)
+ } else if (self.realpath) {
+ abs = path.resolve(f)
+ }
+ return abs
+}
+
+
+// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
+// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
+function isIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
+
+function childrenIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
diff --git a/deps/npm/node_modules/init-package-json/node_modules/glob/glob.js b/deps/npm/node_modules/init-package-json/node_modules/glob/glob.js
new file mode 100644
index 0000000000..eac0693cc6
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/node_modules/glob/glob.js
@@ -0,0 +1,740 @@
+// Approach:
+//
+// 1. Get the minimatch set
+// 2. For each pattern in the set, PROCESS(pattern, false)
+// 3. Store matches per-set, then uniq them
+//
+// PROCESS(pattern, inGlobStar)
+// Get the first [n] items from pattern that are all strings
+// Join these together. This is PREFIX.
+// If there is no more remaining, then stat(PREFIX) and
+// add to matches if it succeeds. END.
+//
+// If inGlobStar and PREFIX is symlink and points to dir
+// set ENTRIES = []
+// else readdir(PREFIX) as ENTRIES
+// If fail, END
+//
+// with ENTRIES
+// If pattern[n] is GLOBSTAR
+// // handle the case where the globstar match is empty
+// // by pruning it out, and testing the resulting pattern
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
+// // handle other cases.
+// for ENTRY in ENTRIES (not dotfiles)
+// // attach globstar + tail onto the entry
+// // Mark that this entry is a globstar match
+// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
+//
+// else // not globstar
+// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
+// Test ENTRY against pattern[n]
+// If fails, continue
+// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
+//
+// Caveat:
+// Cache all stats and readdirs results to minimize syscall. Since all
+// we ever care about is existence and directory-ness, we can just keep
+// `true` for files, and [children,...] for directories, or `false` for
+// things that don't exist.
+
+module.exports = glob
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var inherits = require('inherits')
+var EE = require('events').EventEmitter
+var path = require('path')
+var assert = require('assert')
+var globSync = require('./sync.js')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var inflight = require('inflight')
+var util = require('util')
+var childrenIgnored = common.childrenIgnored
+
+var once = require('once')
+
+function glob (pattern, options, cb) {
+ if (typeof options === 'function') cb = options, options = {}
+ if (!options) options = {}
+
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
+ }
+
+ return new Glob(pattern, options, cb)
+}
+
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
+
+// old api surface
+glob.glob = glob
+
+glob.hasMagic = function (pattern, options_) {
+ var options = util._extend({}, options_)
+ options.noprocess = true
+
+ var g = new Glob(pattern, options)
+ var set = g.minimatch.set
+ if (set.length > 1)
+ return true
+
+ for (var j = 0; j < set[0].length; j++) {
+ if (typeof set[0][j] !== 'string')
+ return true
+ }
+
+ return false
+}
+
+glob.Glob = Glob
+inherits(Glob, EE)
+function Glob (pattern, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
+ }
+
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
+
+ setopts(this, pattern, options)
+ this._didRealPath = false
+
+ // process each pattern in the minimatch set
+ var n = this.minimatch.set.length
+
+ // The matches are stored as {: true,...} so that
+ // duplicates are automagically pruned.
+ // Later, we do an Object.keys() on these.
+ // Keep them as a list so we can fill in when nonull is set.
+ this.matches = new Array(n)
+
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
+ })
+ }
+
+ var self = this
+ var n = this.minimatch.set.length
+ this._processing = 0
+ this.matches = new Array(n)
+
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
+
+ if (this.noprocess)
+ return this
+
+ if (n === 0)
+ return done()
+
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
+ }
+
+ function done () {
+ --self._processing
+ if (self._processing <= 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
+
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
+ common.finish(this)
+ this.emit('end', this.found)
+}
+
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ fs.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
+Glob.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
+
+Glob.prototype.abort = function () {
+ this.aborted = true
+ this.emit('abort')
+}
+
+Glob.prototype.pause = function () {
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
+}
+
+Glob.prototype.resume = function () {
+ if (this.paused) {
+ this.emit('resume')
+ this.paused = false
+ if (this._emitQueue.length) {
+ var eq = this._emitQueue.slice(0)
+ this._emitQueue.length = 0
+ for (var i = 0; i < eq.length; i ++) {
+ var e = eq[i]
+ this._emitMatch(e[0], e[1])
+ }
+ }
+ if (this._processQueue.length) {
+ var pq = this._processQueue.slice(0)
+ this._processQueue.length = 0
+ for (var i = 0; i < pq.length; i ++) {
+ var p = pq[i]
+ this._processing--
+ this._process(p[0], p[1], p[2], p[3])
+ }
+ }
+ }
+}
+
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
+ assert(this instanceof Glob)
+ assert(typeof cb === 'function')
+
+ if (this.aborted)
+ return
+
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
+
+ //console.error('PROCESS %d', this._processing, pattern)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // see if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index, cb)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip _processing
+ if (childrenIgnored(this, read))
+ return cb()
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
+}
+
+Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return cb()
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return cb()
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return cb()
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+ this._process([e].concat(remain), index, inGlobStar, cb)
+ }
+ cb()
+}
+
+Glob.prototype._emitMatch = function (index, e) {
+ if (this.aborted)
+ return
+
+ if (this.matches[index][e])
+ return
+
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
+
+ var abs = this._makeAbs(e)
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ if (this.mark)
+ e = this._mark(e)
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
+}
+
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
+
+ if (lstatcb)
+ fs.lstat(abs, lstatcb)
+
+ function lstatcb_ (er, lstat) {
+ if (er)
+ return cb()
+
+ var isSym = lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory()) {
+ self.cache[abs] = 'FILE'
+ cb()
+ } else
+ self._readdir(abs, false, cb)
+ }
+}
+
+Glob.prototype._readdir = function (abs, inGlobStar, cb) {
+ if (this.aborted)
+ return
+
+ cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
+ if (!cb)
+ return
+
+ //console.error('RD %j %j', +inGlobStar, abs)
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs, cb)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return cb()
+
+ if (Array.isArray(c))
+ return cb(null, c)
+ }
+
+ var self = this
+ fs.readdir(abs, readdirCb(this, abs, cb))
+}
+
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
+ }
+}
+
+Glob.prototype._readdirEntries = function (abs, entries, cb) {
+ if (this.aborted)
+ return
+
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+ return cb(null, entries)
+}
+
+Glob.prototype._readdirError = function (f, er, cb) {
+ if (this.aborted)
+ return
+
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) return this.emit('error', er)
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+ return cb()
+}
+
+Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+
+Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+ //console.error('pgs2', prefix, remain[0], entries)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return cb()
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false, cb)
+
+ var isSym = this.symlinks[abs]
+ var len = entries.length
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return cb()
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true, cb)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true, cb)
+ }
+
+ cb()
+}
+
+Glob.prototype._processSimple = function (prefix, index, cb) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var self = this
+ this._stat(prefix, function (er, exists) {
+ self._processSimple2(prefix, index, er, exists, cb)
+ })
+}
+Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
+
+ //console.error('ps2', prefix, exists)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return cb()
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+ cb()
+}
+
+// Returns either 'DIR', 'FILE', or false
+Glob.prototype._stat = function (f, cb) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
+ }
+
+ var self = this
+ var statcb = inflight('stat\0' + abs, lstatcb_)
+ if (statcb)
+ fs.lstat(abs, statcb)
+
+ function lstatcb_ (er, lstat) {
+ if (lstat && lstat.isSymbolicLink()) {
+ // If it's a symlink, then treat it as the target, unless
+ // the target does not exist, then treat it as a file.
+ return fs.stat(abs, function (er, stat) {
+ if (er)
+ self._stat2(f, abs, null, lstat, cb)
+ else
+ self._stat2(f, abs, er, stat, cb)
+ })
+ } else {
+ self._stat2(f, abs, er, lstat, cb)
+ }
+ }
+}
+
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er) {
+ this.statCache[abs] = false
+ return cb()
+ }
+
+ var needDir = f.slice(-1) === '/'
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return cb(null, false, stat)
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return cb()
+
+ return cb(null, c, stat)
+}
diff --git a/deps/npm/node_modules/init-package-json/node_modules/glob/package.json b/deps/npm/node_modules/init-package-json/node_modules/glob/package.json
new file mode 100644
index 0000000000..7a2cb4c634
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/node_modules/glob/package.json
@@ -0,0 +1,72 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "name": "glob",
+ "description": "a little globber",
+ "version": "4.5.3",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "devDependencies": {
+ "mkdirp": "0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.5.0",
+ "tick": "0.0.6"
+ },
+ "scripts": {
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "npm run profclean && tap test/*.js",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
+ "bench": "bash benchmark.sh",
+ "prof": "bash prof.sh && cat profile.txt",
+ "benchclean": "bash benchclean.sh"
+ },
+ "license": "ISC",
+ "gitHead": "a4e461ab59a837eee80a4d8dbdbf5ae1054a646f",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-glob/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-glob",
+ "_id": "glob@4.5.3",
+ "_shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "_from": "glob@>=4.4.2 <5.0.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/init-package-json/node_modules/glob/sync.js b/deps/npm/node_modules/init-package-json/node_modules/glob/sync.js
new file mode 100644
index 0000000000..f4f5e36d4b
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/node_modules/glob/sync.js
@@ -0,0 +1,457 @@
+module.exports = globSync
+globSync.GlobSync = GlobSync
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var Glob = require('./glob.js').Glob
+var util = require('util')
+var path = require('path')
+var assert = require('assert')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var childrenIgnored = common.childrenIgnored
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ return new GlobSync(pattern, options).found
+}
+
+function GlobSync (pattern, options) {
+ if (!pattern)
+ throw new Error('must provide pattern')
+
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ if (!(this instanceof GlobSync))
+ return new GlobSync(pattern, options)
+
+ setopts(this, pattern, options)
+
+ if (this.noprocess)
+ return this
+
+ var n = this.minimatch.set.length
+ this.matches = new Array(n)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false)
+ }
+ this._finish()
+}
+
+GlobSync.prototype._finish = function () {
+ assert(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = fs.realpathSync(p, this.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
+ common.finish(this)
+}
+
+
+GlobSync.prototype._process = function (pattern, index, inGlobStar) {
+ assert(this instanceof GlobSync)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // See if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip processing
+ if (childrenIgnored(this, read))
+ return
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
+}
+
+
+GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
+ var entries = this._readdir(abs, inGlobStar)
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix.slice(-1) !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this.matches[index][e] = true
+ }
+ // This was the last one, and no stats were needed
+ return
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix)
+ newPattern = [prefix, e]
+ else
+ newPattern = [e]
+ this._process(newPattern.concat(remain), index, inGlobStar)
+ }
+}
+
+
+GlobSync.prototype._emitMatch = function (index, e) {
+ var abs = this._makeAbs(e)
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[this._makeAbs(e)]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+ if (this.stat)
+ this._stat(e)
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
+ var entries
+ var lstat
+ var stat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ // lstat failed, doesn't exist
+ return null
+ }
+
+ var isSym = lstat.isSymbolicLink()
+ this.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory())
+ this.cache[abs] = 'FILE'
+ else
+ entries = this._readdir(abs, false)
+
+ return entries
+}
+
+GlobSync.prototype._readdir = function (abs, inGlobStar) {
+ var entries
+
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return null
+
+ if (Array.isArray(c))
+ return c
+ }
+
+ try {
+ return this._readdirEntries(abs, fs.readdirSync(abs))
+ } catch (er) {
+ this._readdirError(abs, er)
+ return null
+ }
+}
+
+GlobSync.prototype._readdirEntries = function (abs, entries) {
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+
+ // mark and cache dir-ness
+ return entries
+}
+
+GlobSync.prototype._readdirError = function (f, er) {
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) throw er
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+}
+
+GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
+
+ var entries = this._readdir(abs, inGlobStar)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false)
+
+ var len = entries.length
+ var isSym = this.symlinks[abs]
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true)
+ }
+}
+
+GlobSync.prototype._processSimple = function (prefix, index) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var exists = this._stat(prefix)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this.matches[index][prefix] = true
+}
+
+// Returns either 'DIR', 'FILE', or false
+GlobSync.prototype._stat = function (f) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ var lstat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ return false
+ }
+
+ if (lstat.isSymbolicLink()) {
+ try {
+ stat = fs.statSync(abs)
+ } catch (er) {
+ stat = lstat
+ }
+ } else {
+ stat = lstat
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return false
+
+ return c
+}
+
+GlobSync.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+GlobSync.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index 34e10ef861..a2fb3c7165 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -38,8 +38,6 @@
"prompt",
"start"
],
- "readme": "# init-package-json\n\nA node module to get your node module started.\n\n## Usage\n\n```javascript\nvar init = require('init-package-json')\nvar path = require('path')\n\n// a path to a promzard module. In the event that this file is\n// not found, one will be provided for you.\nvar initFile = path.resolve(process.env.HOME, '.npm-init')\n\n// the dir where we're doin stuff.\nvar dir = process.cwd()\n\n// extra stuff that gets put into the PromZard module's context.\n// In npm, this is the resolved config object. Exposed as 'config'\n// Optional.\nvar configData = { some: 'extra stuff' }\n\n// Any existing stuff from the package.json file is also exposed in the\n// PromZard module as the `package` object. There will also be free\n// vars for:\n// * `filename` path to the package.json file\n// * `basename` the tip of the package dir\n// * `dirname` the parent of the package dir\n\ninit(dir, initFile, configData, function (er, data) {\n // the data's already been written to {dir}/package.json\n // now you can do stuff with it\n})\n```\n\nOr from the command line:\n\n```\n$ npm-init\n```\n\nSee [PromZard](https://github.com/isaacs/promzard) for details about\nwhat can go in the config file.\n",
- "readmeFilename": "README.md",
"gitHead": "53273513f3fbaa017435ca6254d717cc27a85ddc",
"bugs": {
"url": "https://github.com/isaacs/init-package-json/issues"
@@ -47,5 +45,28 @@
"homepage": "https://github.com/isaacs/init-package-json",
"_id": "init-package-json@1.3.0",
"_shasum": "6bb76ed69dd1359581a6f1507d37d309658074d6",
- "_from": "init-package-json@>=1.3.0 <1.4.0"
+ "_from": "init-package-json@>=1.3.0 <1.4.0",
+ "_npmVersion": "2.6.1",
+ "_nodeVersion": "1.2.0",
+ "_npmUser": {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "dist": {
+ "shasum": "6bb76ed69dd1359581a6f1507d37d309658074d6",
+ "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-1.3.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.3.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/node-gyp/addon.gypi b/deps/npm/node_modules/node-gyp/addon.gypi
index a52f93f278..0b81fab202 100644
--- a/deps/npm/node_modules/node-gyp/addon.gypi
+++ b/deps/npm/node_modules/node-gyp/addon.gypi
@@ -1,9 +1,7 @@
{
'target_defaults': {
'type': 'loadable_module',
- 'win_delay_load_hook': 'false',
'product_prefix': '',
-
'include_dirs': [
'<(node_root_dir)/src',
'<(node_root_dir)/deps/uv/include',
@@ -15,34 +13,11 @@
'product_extension': 'node',
'defines': [ 'BUILDING_NODE_EXTENSION' ],
}],
-
['_type=="static_library"', {
# set to `1` to *disable* the -T thin archive 'ld' flag.
# older linkers don't support this flag.
'standalone_static_library': '<(standalone_static_library)'
}],
-
- ['_win_delay_load_hook=="true"', {
- # If the has the 'win_delay_load_hook' option set to 'true', link a
- # delay-load hook into the DLL. That hook ensures that the addon
- # will work regardless of whether the node/iojs binary is named
- # node.exe, iojs.exe, or something else.
- 'conditions': [
- [ 'OS=="win"', {
- 'sources': [
- 'src/win_delay_load_hook.c',
- ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'DelayLoadDLLs': [ 'iojs.exe', 'node.exe' ],
- # Don't print a linker warning when no imports from either .exe
- # are used.
- 'AdditionalOptions': [ '/ignore:4199' ],
- },
- },
- }],
- ],
- }],
],
'conditions': [
@@ -67,7 +42,7 @@
'-luuid.lib',
'-lodbc32.lib',
'-lDelayImp.lib',
- '-l"<(node_root_dir)/$(ConfigurationName)/iojs.lib"'
+ '-l"<(node_root_dir)/$(ConfigurationName)/node.lib"'
],
# warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent'
# needs to have dll-interface to be used by clients of class 'node::ObjectWrap'
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index f9722aeaa5..df24aaf454 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -173,7 +173,7 @@ function build (gyp, argv, callback) {
}
/**
- * Copies the iojs.lib file for the current target architecture into the
+ * Copies the node.lib file for the current target architecture into the
* current proper dev dir location.
*/
@@ -181,15 +181,15 @@ function build (gyp, argv, callback) {
if (!win || !copyDevLib) return doBuild()
var buildDir = path.resolve(nodeDir, buildType)
- , archNodeLibPath = path.resolve(nodeDir, arch, 'iojs.lib')
- , buildNodeLibPath = path.resolve(buildDir, 'iojs.lib')
+ , archNodeLibPath = path.resolve(nodeDir, arch, 'node.lib')
+ , buildNodeLibPath = path.resolve(buildDir, 'node.lib')
mkdirp(buildDir, function (err, isNew) {
if (err) return callback(err)
log.verbose('"' + buildType + '" dir needed to be created?', isNew)
var rs = fs.createReadStream(archNodeLibPath)
, ws = fs.createWriteStream(buildNodeLibPath)
- log.verbose('copying "iojs.lib" for ' + arch, buildNodeLibPath)
+ log.verbose('copying "node.lib" for ' + arch, buildNodeLibPath)
rs.pipe(ws)
rs.on('error', callback)
ws.on('error', callback)
diff --git a/deps/npm/node_modules/node-gyp/lib/install.js b/deps/npm/node_modules/node-gyp/lib/install.js
index f9176b3ab0..6f72e6a93d 100644
--- a/deps/npm/node_modules/node-gyp/lib/install.js
+++ b/deps/npm/node_modules/node-gyp/lib/install.js
@@ -39,7 +39,7 @@ function install (gyp, argv, callback) {
}
}
- var distUrl = gyp.opts['dist-url'] || gyp.opts.disturl || 'https://iojs.org/dist'
+ var distUrl = gyp.opts['dist-url'] || gyp.opts.disturl || 'http://nodejs.org/dist'
// Determine which node dev files version we are installing
@@ -185,7 +185,7 @@ function install (gyp, argv, callback) {
// now download the node tarball
var tarPath = gyp.opts['tarball']
- var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/iojs-v' + version + '.tar.gz'
+ var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/node-v' + version + '.tar.gz'
, badDownload = false
, extractCount = 0
, gunzip = zlib.createGunzip()
@@ -267,7 +267,7 @@ function install (gyp, argv, callback) {
var async = 0
if (win) {
- // need to download iojs.lib
+ // need to download node.lib
async++
downloadNodeLib(deref)
}
@@ -343,36 +343,36 @@ function install (gyp, argv, callback) {
}
function downloadNodeLib (done) {
- log.verbose('on Windows; need to download `iojs.lib`...')
+ log.verbose('on Windows; need to download `node.lib`...')
var dir32 = path.resolve(devDir, 'ia32')
, dir64 = path.resolve(devDir, 'x64')
- , nodeLibPath32 = path.resolve(dir32, 'iojs.lib')
- , nodeLibPath64 = path.resolve(dir64, 'iojs.lib')
- , nodeLibUrl32 = distUrl + '/v' + version + '/win-x86/iojs.lib'
- , nodeLibUrl64 = distUrl + '/v' + version + '/win-x64/iojs.lib'
+ , nodeLibPath32 = path.resolve(dir32, 'node.lib')
+ , nodeLibPath64 = path.resolve(dir64, 'node.lib')
+ , nodeLibUrl32 = distUrl + '/v' + version + '/node.lib'
+ , nodeLibUrl64 = distUrl + '/v' + version + '/x64/node.lib'
- log.verbose('32-bit iojs.lib dir', dir32)
- log.verbose('64-bit iojs.lib dir', dir64)
- log.verbose('`iojs.lib` 32-bit url', nodeLibUrl32)
- log.verbose('`iojs.lib` 64-bit url', nodeLibUrl64)
+ log.verbose('32-bit node.lib dir', dir32)
+ log.verbose('64-bit node.lib dir', dir64)
+ log.verbose('`node.lib` 32-bit url', nodeLibUrl32)
+ log.verbose('`node.lib` 64-bit url', nodeLibUrl64)
var async = 2
mkdir(dir32, function (err) {
if (err) return done(err)
- log.verbose('streaming 32-bit iojs.lib to:', nodeLibPath32)
+ log.verbose('streaming 32-bit node.lib to:', nodeLibPath32)
var req = download(nodeLibUrl32)
if (!req) return
req.on('error', done)
req.on('response', function (res) {
if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 32-bit iojs.lib'))
+ done(new Error(res.statusCode + ' status code downloading 32-bit node.lib'))
return
}
getContentSha(res, function (_, checksum) {
- contentShasums['win-x86/iojs.lib'] = checksum
- log.verbose('content checksum', 'win-x86/iojs.lib', checksum)
+ contentShasums['node.lib'] = checksum
+ log.verbose('content checksum', 'node.lib', checksum)
})
var ws = fs.createWriteStream(nodeLibPath32)
@@ -385,20 +385,20 @@ function install (gyp, argv, callback) {
})
mkdir(dir64, function (err) {
if (err) return done(err)
- log.verbose('streaming 64-bit iojs.lib to:', nodeLibPath64)
+ log.verbose('streaming 64-bit node.lib to:', nodeLibPath64)
var req = download(nodeLibUrl64)
if (!req) return
req.on('error', done)
req.on('response', function (res) {
if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 64-bit iojs.lib'))
+ done(new Error(res.statusCode + ' status code downloading 64-bit node.lib'))
return
}
getContentSha(res, function (_, checksum) {
- contentShasums['win-x64/iojs.lib'] = checksum
- log.verbose('content checksum', 'win-x64/iojs.lib', checksum)
+ contentShasums['x64/node.lib'] = checksum
+ log.verbose('content checksum', 'x64/node.lib', checksum)
})
var ws = fs.createWriteStream(nodeLibPath64)
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/glob/LICENSE
new file mode 100644
index 0000000000..19129e315f
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/README.md b/deps/npm/node_modules/node-gyp/node_modules/glob/README.md
new file mode 100644
index 0000000000..258257ecb1
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/README.md
@@ -0,0 +1,369 @@
+[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
+
+# Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
+
+This is a glob implementation in JavaScript. It uses the `minimatch`
+library to do its matching.
+
+![](oh-my-glob.gif)
+
+## Usage
+
+```javascript
+var glob = require("glob")
+
+// options is optional
+glob("**/*.js", options, function (er, files) {
+ // files is an array of filenames.
+ // If the `nonull` option is set, and nothing
+ // was found, then files is ["**/*.js"]
+ // er is an error object or null.
+})
+```
+
+## Glob Primer
+
+"Globs" are the patterns you type when you do stuff like `ls *.js` on
+the command line, or put `build/*` in a `.gitignore` file.
+
+Before parsing the path part patterns, braced sections are expanded
+into a set. Braced sections start with `{` and end with `}`, with any
+number of comma-delimited sections within. Braced sections may contain
+slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in a
+path portion:
+
+* `*` Matches 0 or more characters in a single path portion
+* `?` Matches 1 character
+* `[...]` Matches a range of characters, similar to a RegExp range.
+ If the first character of the range is `!` or `^` then it matches
+ any character not in the range.
+* `!(pattern|pattern|pattern)` Matches anything that does not match
+ any of the patterns provided.
+* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
+ patterns provided.
+* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
+ patterns provided.
+* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
+* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided
+* `**` If a "globstar" is alone in a path portion, then it matches
+ zero or more directories and subdirectories searching for matches.
+ It does not crawl symlinked directories.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first character,
+then it will not match any glob pattern unless that pattern's
+corresponding path part also has a `.` as its first character.
+
+For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
+However the pattern `a/*/c` would not, because `*` does not start with
+a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has no
+slashes in it, then it will seek for any file anywhere in the tree
+with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Negation
+
+The intent for negation would be for a pattern starting with `!` to
+match everything that *doesn't* match the supplied pattern. However,
+the implementation is weird, and for the time being, this should be
+avoided. The behavior will change or be deprecated in version 5.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned. This
+differs from the shell, where the pattern itself is returned. For
+example:
+
+ $ echo a*s*d*f
+ a*s*d*f
+
+To get the bash-style behavior, set the `nonull:true` in the options.
+
+### See Also:
+
+* `man sh`
+* `man bash` (Search for "Pattern Matching")
+* `man 3 fnmatch`
+* `man 5 gitignore`
+* [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## glob.hasMagic(pattern, [options])
+
+Returns `true` if there are any special characters in the pattern, and
+`false` otherwise.
+
+Note that the options affect the results. If `noext:true` is set in
+the options object, then `+(a|b)` will not be considered a magic
+pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
+then that is considered magical, unless `nobrace:true` is set in the
+options.
+
+## glob(pattern, [options], cb)
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* `cb` {Function}
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array} filenames found matching the pattern
+
+Perform a synchronous glob search.
+
+## Class: glob.Glob
+
+Create a Glob object by instantiating the `glob.Glob` class.
+
+```javascript
+var Glob = require("glob").Glob
+var mg = new Glob(pattern, options, cb)
+```
+
+It's an EventEmitter, and starts walking the filesystem to find matches
+immediately.
+
+### new glob.Glob(pattern, [options], [cb])
+
+* `pattern` {String} pattern to search for
+* `options` {Object}
+* `cb` {Function} Called when an error occurs, or matches are found
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Note that if the `sync` flag is set in the options, then matches will
+be immediately available on the `g.found` member.
+
+### Properties
+
+* `minimatch` The minimatch object that the glob uses.
+* `options` The options object passed in.
+* `aborted` Boolean which is set to true when calling `abort()`. There
+ is no way at this time to continue a glob search after aborting, but
+ you can re-use the statCache to avoid having to duplicate syscalls.
+* `statCache` Collection of all the stat results the glob search
+ performed.
+* `cache` Convenience object. Each field has the following possible
+ values:
+ * `false` - Path does not exist
+ * `true` - Path exists
+ * `'DIR'` - Path exists, and is not a directory
+ * `'FILE'` - Path exists, and is a directory
+ * `[file, entries, ...]` - Path exists, is a directory, and the
+ array value is the results of `fs.readdir`
+* `statCache` Cache of `fs.stat` results, to prevent statting the same
+ path multiple times.
+* `symlinks` A record of which paths are symbolic links, which is
+ relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
+
+### Events
+
+* `end` When the matching is finished, this is emitted with all the
+ matches found. If the `nonull` option is set, and no match was found,
+ then the `matches` list contains the original pattern. The matches
+ are sorted, unless the `nosort` flag is set.
+* `match` Every time a match is found, this is emitted with the matched.
+* `error` Emitted when an unexpected error is encountered, or whenever
+ any fs error occurs if `options.strict` is set.
+* `abort` When `abort()` is called, this event is raised.
+
+### Methods
+
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
+
+### Options
+
+All the options that can be passed to Minimatch can also be passed to
+Glob to change pattern matching behavior. Also, some have been added,
+or have glob-specific ramifications.
+
+All options are false by default, unless otherwise noted.
+
+All options are added to the Glob object, as well.
+
+If you are running many `glob` operations, you can pass a Glob object
+as the `options` argument to a subsequent operation to shortcut some
+`stat` and `readdir` calls. At the very least, you may pass in shared
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
+
+* `cwd` The current working directory in which to search. Defaults
+ to `process.cwd()`.
+* `root` The place where patterns starting with `/` will be mounted
+ onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
+ systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+ Note that an explicit dot in a portion of the pattern will always
+ match dot files.
+* `nomount` By default, a pattern starting with a forward-slash will be
+ "mounted" onto the root setting, so that a valid filesystem path is
+ returned. Set this flag to disable that behavior.
+* `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+* `nosort` Don't sort the results.
+* `stat` Set to true to stat *all* results. This reduces performance
+ somewhat, and is completely unnecessary, unless `readdir` is presumed
+ to be an untrustworthy indicator of file existence.
+* `silent` When an unusual error is encountered when attempting to
+ read a directory, a warning will be printed to stderr. Set the
+ `silent` option to true to suppress these warnings.
+* `strict` When an unusual error is encountered when attempting to
+ read a directory, the process will just continue on in search of
+ other matches. Set the `strict` option to raise an error in these
+ cases.
+* `cache` See `cache` property above. Pass in a previously generated
+ cache object to save some fs calls.
+* `statCache` A cache of results of filesystem information, to prevent
+ unnecessary stat calls. While it should not normally be necessary
+ to set this, you may pass the statCache from one glob() call to the
+ options object of another, if you know that the filesystem will not
+ change between calls. (See "Race Conditions" below.)
+* `symlinks` A cache of known symbolic links. You may pass in a
+ previously generated `symlinks` object to save `lstat` calls when
+ resolving `**` matches.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
+* `nounique` In some cases, brace-expanded patterns can result in the
+ same file showing up multiple times in the result set. By default,
+ this implementation prevents duplicates in the result set. Set this
+ flag to disable that behavior.
+* `nonull` Set to never return an empty set, instead returning a set
+ containing the pattern itself. This is the default in glob(3).
+* `debug` Set to enable debug logging in minimatch and glob.
+* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+* `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+* `noext` Do not match `+(a|b)` "extglob" patterns.
+* `nocase` Perform a case-insensitive match. Note: on
+ case-insensitive filesystems, non-magic patterns will match by
+ default, since `stat` and `readdir` will not raise errors.
+* `matchBase` Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, `*.js` would be treated as
+ equivalent to `**/*.js`, matching all js files in all directories.
+* `nonegate` Suppress `negate` behavior. (See below.)
+* `nocomment` Suppress `comment` behavior. (See below.)
+* `nonull` Return the pattern when no matches are found.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
+* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between node-glob and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.3, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+Note that symlinked directories are not crawled as part of a `**`,
+though their contents may match against subsequent portions of the
+pattern. This prevents infinite loops and duplicates and the like.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then glob returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only `/`
+characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will always
+be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto the
+root setting using `path.join`. On windows, this will by default result
+in `/foo/*` matching `C:\foo\bar.txt`.
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race conditions,
+since it relies on directory walking and such.
+
+As a result, it is possible that a file that exists when glob looks for
+it may have been deleted or modified by the time it returns the result.
+
+As part of its internal implementation, this program caches all stat
+and readdir calls that it makes, in order to cut down on system
+overhead. However, this also makes it even more susceptible to races,
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast majority
+of operations, this is never a problem.
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# to benchmark against bash/zsh
+npm run bench
+
+# to profile javascript
+npm run prof
+```
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/common.js b/deps/npm/node_modules/node-gyp/node_modules/glob/common.js
new file mode 100644
index 0000000000..cd7c824481
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/common.js
@@ -0,0 +1,237 @@
+exports.alphasort = alphasort
+exports.alphasorti = alphasorti
+exports.isAbsolute = process.platform === "win32" ? absWin : absUnix
+exports.setopts = setopts
+exports.ownProp = ownProp
+exports.makeAbs = makeAbs
+exports.finish = finish
+exports.mark = mark
+exports.isIgnored = isIgnored
+exports.childrenIgnored = childrenIgnored
+
+function ownProp (obj, field) {
+ return Object.prototype.hasOwnProperty.call(obj, field)
+}
+
+var path = require("path")
+var minimatch = require("minimatch")
+var Minimatch = minimatch.Minimatch
+
+function absWin (p) {
+ if (absUnix(p)) return true
+ // pull off the device/UNC bit from a windows path.
+ // from node's lib/path.js
+ var splitDeviceRe =
+ /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
+ var result = splitDeviceRe.exec(p)
+ var device = result[1] || ''
+ var isUnc = device && device.charAt(1) !== ':'
+ var isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+
+ return isAbsolute
+}
+
+function absUnix (p) {
+ return p.charAt(0) === "/" || p === ""
+}
+
+function alphasorti (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase())
+}
+
+function alphasort (a, b) {
+ return a.localeCompare(b)
+}
+
+function setupIgnores (self, options) {
+ self.ignore = options.ignore || []
+
+ if (!Array.isArray(self.ignore))
+ self.ignore = [self.ignore]
+
+ if (self.ignore.length) {
+ self.ignore = self.ignore.map(ignoreMap)
+ }
+}
+
+function ignoreMap (pattern) {
+ var gmatcher = null
+ if (pattern.slice(-3) === '/**') {
+ var gpattern = pattern.replace(/(\/\*\*)+$/, '')
+ gmatcher = new Minimatch(gpattern, { nonegate: true })
+ }
+
+ return {
+ matcher: new Minimatch(pattern, { nonegate: true }),
+ gmatcher: gmatcher
+ }
+}
+
+function setopts (self, pattern, options) {
+ if (!options)
+ options = {}
+
+ // base-matching: just use globstar for that.
+ if (options.matchBase && -1 === pattern.indexOf("/")) {
+ if (options.noglobstar) {
+ throw new Error("base matching requires globstar")
+ }
+ pattern = "**/" + pattern
+ }
+
+ self.pattern = pattern
+ self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
+ self.dot = !!options.dot
+ self.mark = !!options.mark
+ self.nodir = !!options.nodir
+ if (self.nodir)
+ self.mark = true
+ self.sync = !!options.sync
+ self.nounique = !!options.nounique
+ self.nonull = !!options.nonull
+ self.nosort = !!options.nosort
+ self.nocase = !!options.nocase
+ self.stat = !!options.stat
+ self.noprocess = !!options.noprocess
+
+ self.maxLength = options.maxLength || Infinity
+ self.cache = options.cache || Object.create(null)
+ self.statCache = options.statCache || Object.create(null)
+ self.symlinks = options.symlinks || Object.create(null)
+
+ setupIgnores(self, options)
+
+ self.changedCwd = false
+ var cwd = process.cwd()
+ if (!ownProp(options, "cwd"))
+ self.cwd = cwd
+ else {
+ self.cwd = options.cwd
+ self.changedCwd = path.resolve(options.cwd) !== cwd
+ }
+
+ self.root = options.root || path.resolve(self.cwd, "/")
+ self.root = path.resolve(self.root)
+ if (process.platform === "win32")
+ self.root = self.root.replace(/\\/g, "/")
+
+ self.nomount = !!options.nomount
+
+ self.minimatch = new Minimatch(pattern, options)
+ self.options = self.minimatch.options
+}
+
+function finish (self) {
+ var nou = self.nounique
+ var all = nou ? [] : Object.create(null)
+
+ for (var i = 0, l = self.matches.length; i < l; i ++) {
+ var matches = self.matches[i]
+ if (!matches || Object.keys(matches).length === 0) {
+ if (self.nonull) {
+ // do like the shell, and spit out the literal glob
+ var literal = self.minimatch.globSet[i]
+ if (nou)
+ all.push(literal)
+ else
+ all[literal] = true
+ }
+ } else {
+ // had matches
+ var m = Object.keys(matches)
+ if (nou)
+ all.push.apply(all, m)
+ else
+ m.forEach(function (m) {
+ all[m] = true
+ })
+ }
+ }
+
+ if (!nou)
+ all = Object.keys(all)
+
+ if (!self.nosort)
+ all = all.sort(self.nocase ? alphasorti : alphasort)
+
+ // at *some* point we statted all of these
+ if (self.mark) {
+ for (var i = 0; i < all.length; i++) {
+ all[i] = self._mark(all[i])
+ }
+ if (self.nodir) {
+ all = all.filter(function (e) {
+ return !(/\/$/.test(e))
+ })
+ }
+ }
+
+ if (self.ignore.length)
+ all = all.filter(function(m) {
+ return !isIgnored(self, m)
+ })
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
+ var m = p
+ if (c) {
+ var isDir = c === 'DIR' || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
+ }
+ }
+
+ return m
+}
+
+// lotta situps...
+function makeAbs (self, f) {
+ var abs = f
+ if (f.charAt(0) === '/') {
+ abs = path.join(self.root, f)
+ } else if (exports.isAbsolute(f)) {
+ abs = f
+ } else if (self.changedCwd) {
+ abs = path.resolve(self.cwd, f)
+ } else if (self.realpath) {
+ abs = path.resolve(f)
+ }
+ return abs
+}
+
+
+// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
+// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
+function isIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
+
+function childrenIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js b/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js
new file mode 100644
index 0000000000..eac0693cc6
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/glob.js
@@ -0,0 +1,740 @@
+// Approach:
+//
+// 1. Get the minimatch set
+// 2. For each pattern in the set, PROCESS(pattern, false)
+// 3. Store matches per-set, then uniq them
+//
+// PROCESS(pattern, inGlobStar)
+// Get the first [n] items from pattern that are all strings
+// Join these together. This is PREFIX.
+// If there is no more remaining, then stat(PREFIX) and
+// add to matches if it succeeds. END.
+//
+// If inGlobStar and PREFIX is symlink and points to dir
+// set ENTRIES = []
+// else readdir(PREFIX) as ENTRIES
+// If fail, END
+//
+// with ENTRIES
+// If pattern[n] is GLOBSTAR
+// // handle the case where the globstar match is empty
+// // by pruning it out, and testing the resulting pattern
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
+// // handle other cases.
+// for ENTRY in ENTRIES (not dotfiles)
+// // attach globstar + tail onto the entry
+// // Mark that this entry is a globstar match
+// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
+//
+// else // not globstar
+// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
+// Test ENTRY against pattern[n]
+// If fails, continue
+// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
+//
+// Caveat:
+// Cache all stats and readdirs results to minimize syscall. Since all
+// we ever care about is existence and directory-ness, we can just keep
+// `true` for files, and [children,...] for directories, or `false` for
+// things that don't exist.
+
+module.exports = glob
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var inherits = require('inherits')
+var EE = require('events').EventEmitter
+var path = require('path')
+var assert = require('assert')
+var globSync = require('./sync.js')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var inflight = require('inflight')
+var util = require('util')
+var childrenIgnored = common.childrenIgnored
+
+var once = require('once')
+
+function glob (pattern, options, cb) {
+ if (typeof options === 'function') cb = options, options = {}
+ if (!options) options = {}
+
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
+ }
+
+ return new Glob(pattern, options, cb)
+}
+
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
+
+// old api surface
+glob.glob = glob
+
+glob.hasMagic = function (pattern, options_) {
+ var options = util._extend({}, options_)
+ options.noprocess = true
+
+ var g = new Glob(pattern, options)
+ var set = g.minimatch.set
+ if (set.length > 1)
+ return true
+
+ for (var j = 0; j < set[0].length; j++) {
+ if (typeof set[0][j] !== 'string')
+ return true
+ }
+
+ return false
+}
+
+glob.Glob = Glob
+inherits(Glob, EE)
+function Glob (pattern, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
+ }
+
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
+
+ setopts(this, pattern, options)
+ this._didRealPath = false
+
+ // process each pattern in the minimatch set
+ var n = this.minimatch.set.length
+
+ // The matches are stored as {: true,...} so that
+ // duplicates are automagically pruned.
+ // Later, we do an Object.keys() on these.
+ // Keep them as a list so we can fill in when nonull is set.
+ this.matches = new Array(n)
+
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
+ })
+ }
+
+ var self = this
+ var n = this.minimatch.set.length
+ this._processing = 0
+ this.matches = new Array(n)
+
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
+
+ if (this.noprocess)
+ return this
+
+ if (n === 0)
+ return done()
+
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
+ }
+
+ function done () {
+ --self._processing
+ if (self._processing <= 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
+
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
+ common.finish(this)
+ this.emit('end', this.found)
+}
+
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ fs.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
+Glob.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
+
+Glob.prototype.abort = function () {
+ this.aborted = true
+ this.emit('abort')
+}
+
+Glob.prototype.pause = function () {
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
+}
+
+Glob.prototype.resume = function () {
+ if (this.paused) {
+ this.emit('resume')
+ this.paused = false
+ if (this._emitQueue.length) {
+ var eq = this._emitQueue.slice(0)
+ this._emitQueue.length = 0
+ for (var i = 0; i < eq.length; i ++) {
+ var e = eq[i]
+ this._emitMatch(e[0], e[1])
+ }
+ }
+ if (this._processQueue.length) {
+ var pq = this._processQueue.slice(0)
+ this._processQueue.length = 0
+ for (var i = 0; i < pq.length; i ++) {
+ var p = pq[i]
+ this._processing--
+ this._process(p[0], p[1], p[2], p[3])
+ }
+ }
+ }
+}
+
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
+ assert(this instanceof Glob)
+ assert(typeof cb === 'function')
+
+ if (this.aborted)
+ return
+
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
+
+ //console.error('PROCESS %d', this._processing, pattern)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // see if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index, cb)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip _processing
+ if (childrenIgnored(this, read))
+ return cb()
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
+}
+
+Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return cb()
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return cb()
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return cb()
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+ this._process([e].concat(remain), index, inGlobStar, cb)
+ }
+ cb()
+}
+
+Glob.prototype._emitMatch = function (index, e) {
+ if (this.aborted)
+ return
+
+ if (this.matches[index][e])
+ return
+
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
+
+ var abs = this._makeAbs(e)
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ if (this.mark)
+ e = this._mark(e)
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
+}
+
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
+
+ if (lstatcb)
+ fs.lstat(abs, lstatcb)
+
+ function lstatcb_ (er, lstat) {
+ if (er)
+ return cb()
+
+ var isSym = lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory()) {
+ self.cache[abs] = 'FILE'
+ cb()
+ } else
+ self._readdir(abs, false, cb)
+ }
+}
+
+Glob.prototype._readdir = function (abs, inGlobStar, cb) {
+ if (this.aborted)
+ return
+
+ cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
+ if (!cb)
+ return
+
+ //console.error('RD %j %j', +inGlobStar, abs)
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs, cb)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return cb()
+
+ if (Array.isArray(c))
+ return cb(null, c)
+ }
+
+ var self = this
+ fs.readdir(abs, readdirCb(this, abs, cb))
+}
+
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
+ }
+}
+
+Glob.prototype._readdirEntries = function (abs, entries, cb) {
+ if (this.aborted)
+ return
+
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+ return cb(null, entries)
+}
+
+Glob.prototype._readdirError = function (f, er, cb) {
+ if (this.aborted)
+ return
+
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) return this.emit('error', er)
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+ return cb()
+}
+
+Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+
+Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+ //console.error('pgs2', prefix, remain[0], entries)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return cb()
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false, cb)
+
+ var isSym = this.symlinks[abs]
+ var len = entries.length
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return cb()
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true, cb)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true, cb)
+ }
+
+ cb()
+}
+
+Glob.prototype._processSimple = function (prefix, index, cb) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var self = this
+ this._stat(prefix, function (er, exists) {
+ self._processSimple2(prefix, index, er, exists, cb)
+ })
+}
+Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
+
+ //console.error('ps2', prefix, exists)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return cb()
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+ cb()
+}
+
+// Returns either 'DIR', 'FILE', or false
+Glob.prototype._stat = function (f, cb) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
+ }
+
+ var self = this
+ var statcb = inflight('stat\0' + abs, lstatcb_)
+ if (statcb)
+ fs.lstat(abs, statcb)
+
+ function lstatcb_ (er, lstat) {
+ if (lstat && lstat.isSymbolicLink()) {
+ // If it's a symlink, then treat it as the target, unless
+ // the target does not exist, then treat it as a file.
+ return fs.stat(abs, function (er, stat) {
+ if (er)
+ self._stat2(f, abs, null, lstat, cb)
+ else
+ self._stat2(f, abs, er, stat, cb)
+ })
+ } else {
+ self._stat2(f, abs, er, lstat, cb)
+ }
+ }
+}
+
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er) {
+ this.statCache[abs] = false
+ return cb()
+ }
+
+ var needDir = f.slice(-1) === '/'
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return cb(null, false, stat)
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return cb()
+
+ return cb(null, c, stat)
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE
new file mode 100644
index 0000000000..05a4010949
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md
new file mode 100644
index 0000000000..d458bc2e0a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md
@@ -0,0 +1,216 @@
+# minimatch
+
+A minimal matching utility.
+
+[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)
+
+
+This is the matching library used internally by npm.
+
+It works by converting glob expressions into JavaScript `RegExp`
+objects.
+
+## Usage
+
+```javascript
+var minimatch = require("minimatch")
+
+minimatch("bar.foo", "*.foo") // true!
+minimatch("bar.foo", "*.bar") // false!
+minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy!
+```
+
+## Features
+
+Supports these glob features:
+
+* Brace Expansion
+* Extended glob matching
+* "Globstar" `**` matching
+
+See:
+
+* `man sh`
+* `man bash`
+* `man 3 fnmatch`
+* `man 5 gitignore`
+
+## Minimatch Class
+
+Create a minimatch object by instanting the `minimatch.Minimatch` class.
+
+```javascript
+var Minimatch = require("minimatch").Minimatch
+var mm = new Minimatch(pattern, options)
+```
+
+### Properties
+
+* `pattern` The original pattern the minimatch object represents.
+* `options` The options supplied to the constructor.
+* `set` A 2-dimensional array of regexp or string expressions.
+ Each row in the
+ array corresponds to a brace-expanded pattern. Each item in the row
+ corresponds to a single path-part. For example, the pattern
+ `{a,b/c}/d` would expand to a set of patterns like:
+
+ [ [ a, d ]
+ , [ b, c, d ] ]
+
+ If a portion of the pattern doesn't have any "magic" in it
+ (that is, it's something like `"foo"` rather than `fo*o?`), then it
+ will be left as a string rather than converted to a regular
+ expression.
+
+* `regexp` Created by the `makeRe` method. A single regular expression
+ expressing the entire pattern. This is useful in cases where you wish
+ to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
+* `negate` True if the pattern is negated.
+* `comment` True if the pattern is a comment.
+* `empty` True if the pattern is `""`.
+
+### Methods
+
+* `makeRe` Generate the `regexp` member if necessary, and return it.
+ Will return `false` if the pattern is invalid.
+* `match(fname)` Return true if the filename matches the pattern, or
+ false otherwise.
+* `matchOne(fileArray, patternArray, partial)` Take a `/`-split
+ filename, and match it against a single row in the `regExpSet`. This
+ method is mainly for internal use, but is exposed so that it can be
+ used by a glob-walker that needs to avoid excessive filesystem calls.
+
+All other methods are internal, and will be called as necessary.
+
+## Functions
+
+The top-level exported function has a `cache` property, which is an LRU
+cache set to store 100 items. So, calling these methods repeatedly
+with the same pattern and options will use the same Minimatch object,
+saving the cost of parsing it multiple times.
+
+### minimatch(path, pattern, options)
+
+Main export. Tests a path against the pattern using the options.
+
+```javascript
+var isJS = minimatch(file, "*.js", { matchBase: true })
+```
+
+### minimatch.filter(pattern, options)
+
+Returns a function that tests its
+supplied argument, suitable for use with `Array.filter`. Example:
+
+```javascript
+var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true}))
+```
+
+### minimatch.match(list, pattern, options)
+
+Match against the list of
+files, in the style of fnmatch or glob. If nothing is matched, and
+options.nonull is set, then return a list containing the pattern itself.
+
+```javascript
+var javascripts = minimatch.match(fileList, "*.js", {matchBase: true}))
+```
+
+### minimatch.makeRe(pattern, options)
+
+Make a regular expression object from the pattern.
+
+## Options
+
+All options are `false` by default.
+
+### debug
+
+Dump a ton of stuff to stderr.
+
+### nobrace
+
+Do not expand `{a,b}` and `{1..3}` brace sets.
+
+### noglobstar
+
+Disable `**` matching against multiple folder names.
+
+### dot
+
+Allow patterns to match filenames starting with a period, even if
+the pattern does not explicitly have a period in that spot.
+
+Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
+is set.
+
+### noext
+
+Disable "extglob" style patterns like `+(a|b)`.
+
+### nocase
+
+Perform a case-insensitive match.
+
+### nonull
+
+When a match is not found by `minimatch.match`, return a list containing
+the pattern itself if this option is set. When not set, an empty list
+is returned if there are no matches.
+
+### matchBase
+
+If set, then patterns without slashes will be matched
+against the basename of the path if it contains slashes. For example,
+`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
+
+### nocomment
+
+Suppress the behavior of treating `#` at the start of a pattern as a
+comment.
+
+### nonegate
+
+Suppress the behavior of treating a leading `!` character as negation.
+
+### flipNegate
+
+Returns from negate expressions the same as if they were not negated.
+(Ie, true on a hit, false on a miss.)
+
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between minimatch and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.1, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then minimatch.match returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/browser.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/browser.js
new file mode 100644
index 0000000000..cf58a3f60c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/browser.js
@@ -0,0 +1,1114 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o any number of characters
+ , star = qmark + "*?"
+
+ // ** when dots are allowed. Anything goes, except .. and .
+ // not (^ or / followed by one or two dots followed by $ or /),
+ // followed by anything, any number of times.
+ , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?"
+
+ // not a ^ or / followed by a dot,
+ // followed by anything, any number of times.
+ , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?"
+
+ // characters that need to be escaped in RegExp.
+ , reSpecials = charSet("().*{}+?[]^$\\!")
+
+// "abc" -> { a:true, b:true, c:true }
+function charSet (s) {
+ return s.split("").reduce(function (set, c) {
+ set[c] = true
+ return set
+ }, {})
+}
+
+// normalizes slashes.
+var slashSplit = /\/+/
+
+minimatch.filter = filter
+function filter (pattern, options) {
+ options = options || {}
+ return function (p, i, list) {
+ return minimatch(p, pattern, options)
+ }
+}
+
+function ext (a, b) {
+ a = a || {}
+ b = b || {}
+ var t = {}
+ Object.keys(b).forEach(function (k) {
+ t[k] = b[k]
+ })
+ Object.keys(a).forEach(function (k) {
+ t[k] = a[k]
+ })
+ return t
+}
+
+minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return minimatch
+
+ var orig = minimatch
+
+ var m = function minimatch (p, pattern, options) {
+ return orig.minimatch(p, pattern, ext(def, options))
+ }
+
+ m.Minimatch = function Minimatch (pattern, options) {
+ return new orig.Minimatch(pattern, ext(def, options))
+ }
+
+ return m
+}
+
+Minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return Minimatch
+ return minimatch.defaults(def).Minimatch
+}
+
+
+function minimatch (p, pattern, options) {
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+
+ // shortcut: comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ return false
+ }
+
+ // "" only matches ""
+ if (pattern.trim() === "") return p === ""
+
+ return new Minimatch(pattern, options).match(p)
+}
+
+function Minimatch (pattern, options) {
+ if (!(this instanceof Minimatch)) {
+ return new Minimatch(pattern, options)
+ }
+
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+ pattern = pattern.trim()
+
+ // windows support: need to use /, not \
+ if (isWindows)
+ pattern = pattern.split("\\").join("/")
+
+ this.options = options
+ this.set = []
+ this.pattern = pattern
+ this.regexp = null
+ this.negate = false
+ this.comment = false
+ this.empty = false
+
+ // make the set of regexps etc.
+ this.make()
+}
+
+Minimatch.prototype.debug = function() {}
+
+Minimatch.prototype.make = make
+function make () {
+ // don't do it more than once.
+ if (this._made) return
+
+ var pattern = this.pattern
+ var options = this.options
+
+ // empty patterns and comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ this.comment = true
+ return
+ }
+ if (!pattern) {
+ this.empty = true
+ return
+ }
+
+ // step 1: figure out negation, etc.
+ this.parseNegate()
+
+ // step 2: expand braces
+ var set = this.globSet = this.braceExpand()
+
+ if (options.debug) this.debug = console.error
+
+ this.debug(this.pattern, set)
+
+ // step 3: now we have a set, so turn each one into a series of path-portion
+ // matching patterns.
+ // These will be regexps, except in the case of "**", which is
+ // set to the GLOBSTAR object for globstar behavior,
+ // and will not contain any / characters
+ set = this.globParts = set.map(function (s) {
+ return s.split(slashSplit)
+ })
+
+ this.debug(this.pattern, set)
+
+ // glob --> regexps
+ set = set.map(function (s, si, set) {
+ return s.map(this.parse, this)
+ }, this)
+
+ this.debug(this.pattern, set)
+
+ // filter out everything that didn't compile properly.
+ set = set.filter(function (s) {
+ return -1 === s.indexOf(false)
+ })
+
+ this.debug(this.pattern, set)
+
+ this.set = set
+}
+
+Minimatch.prototype.parseNegate = parseNegate
+function parseNegate () {
+ var pattern = this.pattern
+ , negate = false
+ , options = this.options
+ , negateOffset = 0
+
+ if (options.nonegate) return
+
+ for ( var i = 0, l = pattern.length
+ ; i < l && pattern.charAt(i) === "!"
+ ; i ++) {
+ negate = !negate
+ negateOffset ++
+ }
+
+ if (negateOffset) this.pattern = pattern.substr(negateOffset)
+ this.negate = negate
+}
+
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+minimatch.braceExpand = function (pattern, options) {
+ return braceExpand(pattern, options)
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function braceExpand (pattern, options) {
+ if (!options) {
+ if (this instanceof Minimatch)
+ options = this.options
+ else
+ options = {}
+ }
+
+ pattern = typeof pattern === "undefined"
+ ? this.pattern : pattern
+
+ if (typeof pattern === "undefined") {
+ throw new Error("undefined pattern")
+ }
+
+ if (options.nobrace ||
+ !pattern.match(/\{.*\}/)) {
+ // shortcut. no need to expand.
+ return [pattern]
+ }
+
+ return expand(pattern)
+}
+
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion. Otherwise, any series
+// of * is equivalent to a single *. Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+Minimatch.prototype.parse = parse
+var SUBPARSE = {}
+function parse (pattern, isSub) {
+ var options = this.options
+
+ // shortcuts
+ if (!options.noglobstar && pattern === "**") return GLOBSTAR
+ if (pattern === "") return ""
+
+ var re = ""
+ , hasMagic = !!options.nocase
+ , escaping = false
+ // ? => one single character
+ , patternListStack = []
+ , plType
+ , stateChar
+ , inClass = false
+ , reClassStart = -1
+ , classStart = -1
+ // . and .. never match anything that doesn't start with .,
+ // even when options.dot is set.
+ , patternStart = pattern.charAt(0) === "." ? "" // anything
+ // not (start or / followed by . or .. followed by / or end)
+ : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
+ : "(?!\\.)"
+ , self = this
+
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case "*":
+ re += star
+ hasMagic = true
+ break
+ case "?":
+ re += qmark
+ hasMagic = true
+ break
+ default:
+ re += "\\"+stateChar
+ break
+ }
+ self.debug('clearStateChar %j %j', stateChar, re)
+ stateChar = false
+ }
+ }
+
+ for ( var i = 0, len = pattern.length, c
+ ; (i < len) && (c = pattern.charAt(i))
+ ; i ++ ) {
+
+ this.debug("%s\t%s %s %j", pattern, i, re, c)
+
+ // skip over any that are escaped.
+ if (escaping && reSpecials[c]) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ SWITCH: switch (c) {
+ case "/":
+ // completely not allowed, even escaped.
+ // Should already be path-split by now.
+ return false
+
+ case "\\":
+ clearStateChar()
+ escaping = true
+ continue
+
+ // the various stateChar values
+ // for the "extglob" stuff.
+ case "?":
+ case "*":
+ case "+":
+ case "@":
+ case "!":
+ this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
+
+ // all of those are literals inside a class, except that
+ // the glob [!a] means [^a] in regexp
+ if (inClass) {
+ this.debug(' in class')
+ if (c === "!" && i === classStart + 1) c = "^"
+ re += c
+ continue
+ }
+
+ // if we already have a stateChar, then it means
+ // that there was something like ** or +? in there.
+ // Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
+ clearStateChar()
+ stateChar = c
+ // if extglob is disabled, then +(asdf|foo) isn't a thing.
+ // just clear the statechar *now*, rather than even diving into
+ // the patternList stuff.
+ if (options.noext) clearStateChar()
+ continue
+
+ case "(":
+ if (inClass) {
+ re += "("
+ continue
+ }
+
+ if (!stateChar) {
+ re += "\\("
+ continue
+ }
+
+ plType = stateChar
+ patternListStack.push({ type: plType
+ , start: i - 1
+ , reStart: re.length })
+ // negation is (?:(?!js)[^/]*)
+ re += stateChar === "!" ? "(?:(?!" : "(?:"
+ this.debug('plType %j %j', stateChar, re)
+ stateChar = false
+ continue
+
+ case ")":
+ if (inClass || !patternListStack.length) {
+ re += "\\)"
+ continue
+ }
+
+ clearStateChar()
+ hasMagic = true
+ re += ")"
+ plType = patternListStack.pop().type
+ // negation is (?:(?!js)[^/]*)
+ // The others are (?:)
+ switch (plType) {
+ case "!":
+ re += "[^/]*?)"
+ break
+ case "?":
+ case "+":
+ case "*": re += plType
+ case "@": break // the default anyway
+ }
+ continue
+
+ case "|":
+ if (inClass || !patternListStack.length || escaping) {
+ re += "\\|"
+ escaping = false
+ continue
+ }
+
+ clearStateChar()
+ re += "|"
+ continue
+
+ // these are mostly the same in regexp and glob
+ case "[":
+ // swallow any state-tracking char before the [
+ clearStateChar()
+
+ if (inClass) {
+ re += "\\" + c
+ continue
+ }
+
+ inClass = true
+ classStart = i
+ reClassStart = re.length
+ re += c
+ continue
+
+ case "]":
+ // a right bracket shall lose its special
+ // meaning and represent itself in
+ // a bracket expression if it occurs
+ // first in the list. -- POSIX.2 2.8.3.2
+ if (i === classStart + 1 || !inClass) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ // handle the case where we left a class open.
+ // "[z-a]" is valid, equivalent to "\[z-a\]"
+ if (inClass) {
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ new RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
+ }
+ }
+
+ // finish up the class.
+ hasMagic = true
+ inClass = false
+ re += c
+ continue
+
+ default:
+ // swallow any state char that wasn't consumed
+ clearStateChar()
+
+ if (escaping) {
+ // no need
+ escaping = false
+ } else if (reSpecials[c]
+ && !(c === "^" && inClass)) {
+ re += "\\"
+ }
+
+ re += c
+
+ } // switch
+ } // for
+
+
+ // handle the case where we left a class open.
+ // "[abc" is valid, equivalent to "\[abc"
+ if (inClass) {
+ // split where the last [ was, and escape it
+ // this is a huge pita. We now have to re-walk
+ // the contents of the would-be class to re-translate
+ // any characters that were passed through as-is
+ var cs = pattern.substr(classStart + 1)
+ , sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0]
+ hasMagic = hasMagic || sp[1]
+ }
+
+ // handle the case where we had a +( thing at the *end*
+ // of the pattern.
+ // each pattern list stack adds 3 chars, and we need to go through
+ // and escape any | chars that were passed through as-is for the regexp.
+ // Go through and escape them, taking care not to double-escape any
+ // | chars that were already escaped.
+ var pl
+ while (pl = patternListStack.pop()) {
+ var tail = re.slice(pl.reStart + 3)
+ // maybe some even number of \, then maybe 1 \, followed by a |
+ tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
+ if (!$2) {
+ // the | isn't already escaped, so escape it.
+ $2 = "\\"
+ }
+
+ // need to escape all those slashes *again*, without escaping the
+ // one that we need for escaping the | character. As it works out,
+ // escaping an even number of slashes can be done by simply repeating
+ // it exactly after itself. That's why this trick works.
+ //
+ // I am sorry that you have to see this.
+ return $1 + $1 + $2 + "|"
+ })
+
+ this.debug("tail=%j\n %s", tail, tail)
+ var t = pl.type === "*" ? star
+ : pl.type === "?" ? qmark
+ : "\\" + pl.type
+
+ hasMagic = true
+ re = re.slice(0, pl.reStart)
+ + t + "\\("
+ + tail
+ }
+
+ // handle trailing things that only matter at the very end.
+ clearStateChar()
+ if (escaping) {
+ // trailing \\
+ re += "\\\\"
+ }
+
+ // only need to apply the nodot start if the re starts with
+ // something that could conceivably capture a dot
+ var addPatternStart = false
+ switch (re.charAt(0)) {
+ case ".":
+ case "[":
+ case "(": addPatternStart = true
+ }
+
+ // if the re is not "" at this point, then we need to make sure
+ // it doesn't match against an empty path part.
+ // Otherwise a/* will match a/, which it should not.
+ if (re !== "" && hasMagic) re = "(?=.)" + re
+
+ if (addPatternStart) re = patternStart + re
+
+ // parsing just a piece of a larger pattern.
+ if (isSub === SUBPARSE) {
+ return [ re, hasMagic ]
+ }
+
+ // skip the regexp for non-magical patterns
+ // unescape anything in it, though, so that it'll be
+ // an exact match against a file etc.
+ if (!hasMagic) {
+ return globUnescape(pattern)
+ }
+
+ var flags = options.nocase ? "i" : ""
+ , regExp = new RegExp("^" + re + "$", flags)
+
+ regExp._glob = pattern
+ regExp._src = re
+
+ return regExp
+}
+
+minimatch.makeRe = function (pattern, options) {
+ return new Minimatch(pattern, options || {}).makeRe()
+}
+
+Minimatch.prototype.makeRe = makeRe
+function makeRe () {
+ if (this.regexp || this.regexp === false) return this.regexp
+
+ // at this point, this.set is a 2d array of partial
+ // pattern strings, or "**".
+ //
+ // It's better to use .match(). This function shouldn't
+ // be used, really, but it's pretty convenient sometimes,
+ // when you just want to work with a regex.
+ var set = this.set
+
+ if (!set.length) return this.regexp = false
+ var options = this.options
+
+ var twoStar = options.noglobstar ? star
+ : options.dot ? twoStarDot
+ : twoStarNoDot
+ , flags = options.nocase ? "i" : ""
+
+ var re = set.map(function (pattern) {
+ return pattern.map(function (p) {
+ return (p === GLOBSTAR) ? twoStar
+ : (typeof p === "string") ? regExpEscape(p)
+ : p._src
+ }).join("\\\/")
+ }).join("|")
+
+ // must match entire pattern
+ // ending in a * or ** will make it less strict.
+ re = "^(?:" + re + ")$"
+
+ // can match anything, as long as it's not this.
+ if (this.negate) re = "^(?!" + re + ").*$"
+
+ try {
+ return this.regexp = new RegExp(re, flags)
+ } catch (ex) {
+ return this.regexp = false
+ }
+}
+
+minimatch.match = function (list, pattern, options) {
+ options = options || {}
+ var mm = new Minimatch(pattern, options)
+ list = list.filter(function (f) {
+ return mm.match(f)
+ })
+ if (mm.options.nonull && !list.length) {
+ list.push(pattern)
+ }
+ return list
+}
+
+Minimatch.prototype.match = match
+function match (f, partial) {
+ this.debug("match", f, this.pattern)
+ // short-circuit in the case of busted things.
+ // comments, etc.
+ if (this.comment) return false
+ if (this.empty) return f === ""
+
+ if (f === "/" && partial) return true
+
+ var options = this.options
+
+ // windows: need to use /, not \
+ if (isWindows)
+ f = f.split("\\").join("/")
+
+ // treat the test path as a set of pathparts.
+ f = f.split(slashSplit)
+ this.debug(this.pattern, "split", f)
+
+ // just ONE of the pattern sets in this.set needs to match
+ // in order for it to be valid. If negating, then just one
+ // match means that we have failed.
+ // Either way, return on the first hit.
+
+ var set = this.set
+ this.debug(this.pattern, "set", set)
+
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename;
+ for (var i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
+
+ for (var i = 0, l = set.length; i < l; i ++) {
+ var pattern = set[i], file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = [filename]
+ }
+ var hit = this.matchOne(file, pattern, partial)
+ if (hit) {
+ if (options.flipNegate) return true
+ return !this.negate
+ }
+ }
+
+ // didn't get any hits. this is success if it's a negative
+ // pattern, failure otherwise.
+ if (options.flipNegate) return false
+ return this.negate
+}
+
+// set partial to true to test if, for example,
+// "/a/b" matches the start of "/*/b/*/d"
+// Partial means, if you run out of file before you run
+// out of pattern, then that's fine, as long as all
+// the parts match.
+Minimatch.prototype.matchOne = function (file, pattern, partial) {
+ var options = this.options
+
+ this.debug("matchOne",
+ { "this": this
+ , file: file
+ , pattern: pattern })
+
+ this.debug("matchOne", file.length, pattern.length)
+
+ for ( var fi = 0
+ , pi = 0
+ , fl = file.length
+ , pl = pattern.length
+ ; (fi < fl) && (pi < pl)
+ ; fi ++, pi ++ ) {
+
+ this.debug("matchOne loop")
+ var p = pattern[pi]
+ , f = file[fi]
+
+ this.debug(pattern, p, f)
+
+ // should be impossible.
+ // some invalid regexp stuff in the set.
+ if (p === false) return false
+
+ if (p === GLOBSTAR) {
+ this.debug('GLOBSTAR', [pattern, p, f])
+
+ // "**"
+ // a/**/b/**/c would match the following:
+ // a/b/x/y/z/c
+ // a/x/y/z/b/c
+ // a/b/x/b/x/c
+ // a/b/c
+ // To do this, take the rest of the pattern after
+ // the **, and see if it would match the file remainder.
+ // If so, return success.
+ // If not, the ** "swallows" a segment, and try again.
+ // This is recursively awful.
+ //
+ // a/**/b/**/c matching a/b/x/y/z/c
+ // - a matches a
+ // - doublestar
+ // - matchOne(b/x/y/z/c, b/**/c)
+ // - b matches b
+ // - doublestar
+ // - matchOne(x/y/z/c, c) -> no
+ // - matchOne(y/z/c, c) -> no
+ // - matchOne(z/c, c) -> no
+ // - matchOne(c, c) yes, hit
+ var fr = fi
+ , pr = pi + 1
+ if (pr === pl) {
+ this.debug('** at the end')
+ // a ** at the end will just swallow the rest.
+ // We have found a match.
+ // however, it will not swallow /.x, unless
+ // options.dot is set.
+ // . and .. are *never* matched by **, for explosively
+ // exponential reasons.
+ for ( ; fi < fl; fi ++) {
+ if (file[fi] === "." || file[fi] === ".." ||
+ (!options.dot && file[fi].charAt(0) === ".")) return false
+ }
+ return true
+ }
+
+ // ok, let's see if we can swallow whatever we can.
+ WHILE: while (fr < fl) {
+ var swallowee = file[fr]
+
+ this.debug('\nglobstar while',
+ file, fr, pattern, pr, swallowee)
+
+ // XXX remove this slice. Just pass the start index.
+ if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+ this.debug('globstar found match!', fr, fl, swallowee)
+ // found a match.
+ return true
+ } else {
+ // can't swallow "." or ".." ever.
+ // can only swallow ".foo" when explicitly asked.
+ if (swallowee === "." || swallowee === ".." ||
+ (!options.dot && swallowee.charAt(0) === ".")) {
+ this.debug("dot detected!", file, fr, pattern, pr)
+ break WHILE
+ }
+
+ // ** swallows a segment, and continue.
+ this.debug('globstar swallow a segment, and continue')
+ fr ++
+ }
+ }
+ // no match was found.
+ // However, in partial mode, we can't say this is necessarily over.
+ // If there's more *pattern* left, then
+ if (partial) {
+ // ran out of file
+ this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
+ if (fr === fl) return true
+ }
+ return false
+ }
+
+ // something other than **
+ // non-magic patterns just have to match exactly
+ // patterns with magic have been turned into regexps.
+ var hit
+ if (typeof p === "string") {
+ if (options.nocase) {
+ hit = f.toLowerCase() === p.toLowerCase()
+ } else {
+ hit = f === p
+ }
+ this.debug("string match", p, f, hit)
+ } else {
+ hit = f.match(p)
+ this.debug("pattern match", p, f, hit)
+ }
+
+ if (!hit) return false
+ }
+
+ // Note: ending in / means that we'll get a final ""
+ // at the end of the pattern. This can only match a
+ // corresponding "" at the end of the file.
+ // If the file ends in /, then it can only match a
+ // a pattern that ends in /, unless the pattern just
+ // doesn't have any more for it. But, a/b/ should *not*
+ // match "a/b/*", even though "" matches against the
+ // [^/]*? pattern, except in partial mode, where it might
+ // simply not be reached yet.
+ // However, a/b/ should still satisfy a/*
+
+ // now either we fell off the end of the pattern, or we're done.
+ if (fi === fl && pi === pl) {
+ // ran out of pattern and filename at the same time.
+ // an exact hit!
+ return true
+ } else if (fi === fl) {
+ // ran out of file, but still had pattern left.
+ // this is ok if we're doing the match as part of
+ // a glob fs traversal.
+ return partial
+ } else if (pi === pl) {
+ // ran out of pattern, still have file left.
+ // this is only acceptable if we're on the very last
+ // empty segment of a file with a trailing slash.
+ // a/* should match a/b/
+ var emptyFileEnd = (fi === fl - 1) && (file[fi] === "")
+ return emptyFileEnd
+ }
+
+ // should be unreachable.
+ throw new Error("wtf?")
+}
+
+
+// replace stuff like \* with *
+function globUnescape (s) {
+ return s.replace(/\\(.)/g, "$1")
+}
+
+
+function regExpEscape (s) {
+ return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
+}
+
+},{"brace-expansion":2}],2:[function(require,module,exports){
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ var expansions = expand(escapeBraces(str));
+ return expansions.filter(identity).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = /^(.*,)+(.+)?$/.test(m.body);
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0]).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ expansions.push([pre, N[j], post[k]].join(''))
+ }
+ }
+
+ return expansions;
+}
+
+
+},{"balanced-match":3,"concat-map":4}],3:[function(require,module,exports){
+module.exports = balanced;
+function balanced(a, b, str) {
+ var bal = 0;
+ var m = {};
+ var ended = false;
+
+ for (var i = 0; i < str.length; i++) {
+ if (a == str.substr(i, a.length)) {
+ if (!('start' in m)) m.start = i;
+ bal++;
+ }
+ else if (b == str.substr(i, b.length) && 'start' in m) {
+ ended = true;
+ bal--;
+ if (!bal) {
+ m.end = i;
+ m.pre = str.substr(0, m.start);
+ m.body = (m.end - m.start > 1)
+ ? str.substring(m.start + a.length, m.end)
+ : '';
+ m.post = str.slice(m.end + b.length);
+ return m;
+ }
+ }
+ }
+
+ // if we opened more than we closed, find the one we closed
+ if (bal && ended) {
+ var start = m.start + a.length;
+ m = balanced(a, b, str.substr(start));
+ if (m) {
+ m.start += start;
+ m.end += start;
+ m.pre = str.slice(0, start) + m.pre;
+ }
+ return m;
+ }
+}
+
+},{}],4:[function(require,module,exports){
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (Array.isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+},{}]},{},[1]);
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js
new file mode 100644
index 0000000000..2bfdf62b74
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js
@@ -0,0 +1,868 @@
+module.exports = minimatch
+minimatch.Minimatch = Minimatch
+
+var isWindows = false
+if (typeof process !== 'undefined' && process.platform === 'win32')
+ isWindows = true
+
+var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
+ , expand = require("brace-expansion")
+
+ // any single thing other than /
+ // don't need to escape / when using new RegExp()
+ , qmark = "[^/]"
+
+ // * => any number of characters
+ , star = qmark + "*?"
+
+ // ** when dots are allowed. Anything goes, except .. and .
+ // not (^ or / followed by one or two dots followed by $ or /),
+ // followed by anything, any number of times.
+ , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?"
+
+ // not a ^ or / followed by a dot,
+ // followed by anything, any number of times.
+ , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?"
+
+ // characters that need to be escaped in RegExp.
+ , reSpecials = charSet("().*{}+?[]^$\\!")
+
+// "abc" -> { a:true, b:true, c:true }
+function charSet (s) {
+ return s.split("").reduce(function (set, c) {
+ set[c] = true
+ return set
+ }, {})
+}
+
+// normalizes slashes.
+var slashSplit = /\/+/
+
+minimatch.filter = filter
+function filter (pattern, options) {
+ options = options || {}
+ return function (p, i, list) {
+ return minimatch(p, pattern, options)
+ }
+}
+
+function ext (a, b) {
+ a = a || {}
+ b = b || {}
+ var t = {}
+ Object.keys(b).forEach(function (k) {
+ t[k] = b[k]
+ })
+ Object.keys(a).forEach(function (k) {
+ t[k] = a[k]
+ })
+ return t
+}
+
+minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return minimatch
+
+ var orig = minimatch
+
+ var m = function minimatch (p, pattern, options) {
+ return orig.minimatch(p, pattern, ext(def, options))
+ }
+
+ m.Minimatch = function Minimatch (pattern, options) {
+ return new orig.Minimatch(pattern, ext(def, options))
+ }
+
+ return m
+}
+
+Minimatch.defaults = function (def) {
+ if (!def || !Object.keys(def).length) return Minimatch
+ return minimatch.defaults(def).Minimatch
+}
+
+
+function minimatch (p, pattern, options) {
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+
+ // shortcut: comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ return false
+ }
+
+ // "" only matches ""
+ if (pattern.trim() === "") return p === ""
+
+ return new Minimatch(pattern, options).match(p)
+}
+
+function Minimatch (pattern, options) {
+ if (!(this instanceof Minimatch)) {
+ return new Minimatch(pattern, options)
+ }
+
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+ pattern = pattern.trim()
+
+ // windows support: need to use /, not \
+ if (isWindows)
+ pattern = pattern.split("\\").join("/")
+
+ this.options = options
+ this.set = []
+ this.pattern = pattern
+ this.regexp = null
+ this.negate = false
+ this.comment = false
+ this.empty = false
+
+ // make the set of regexps etc.
+ this.make()
+}
+
+Minimatch.prototype.debug = function() {}
+
+Minimatch.prototype.make = make
+function make () {
+ // don't do it more than once.
+ if (this._made) return
+
+ var pattern = this.pattern
+ var options = this.options
+
+ // empty patterns and comments match nothing.
+ if (!options.nocomment && pattern.charAt(0) === "#") {
+ this.comment = true
+ return
+ }
+ if (!pattern) {
+ this.empty = true
+ return
+ }
+
+ // step 1: figure out negation, etc.
+ this.parseNegate()
+
+ // step 2: expand braces
+ var set = this.globSet = this.braceExpand()
+
+ if (options.debug) this.debug = console.error
+
+ this.debug(this.pattern, set)
+
+ // step 3: now we have a set, so turn each one into a series of path-portion
+ // matching patterns.
+ // These will be regexps, except in the case of "**", which is
+ // set to the GLOBSTAR object for globstar behavior,
+ // and will not contain any / characters
+ set = this.globParts = set.map(function (s) {
+ return s.split(slashSplit)
+ })
+
+ this.debug(this.pattern, set)
+
+ // glob --> regexps
+ set = set.map(function (s, si, set) {
+ return s.map(this.parse, this)
+ }, this)
+
+ this.debug(this.pattern, set)
+
+ // filter out everything that didn't compile properly.
+ set = set.filter(function (s) {
+ return -1 === s.indexOf(false)
+ })
+
+ this.debug(this.pattern, set)
+
+ this.set = set
+}
+
+Minimatch.prototype.parseNegate = parseNegate
+function parseNegate () {
+ var pattern = this.pattern
+ , negate = false
+ , options = this.options
+ , negateOffset = 0
+
+ if (options.nonegate) return
+
+ for ( var i = 0, l = pattern.length
+ ; i < l && pattern.charAt(i) === "!"
+ ; i ++) {
+ negate = !negate
+ negateOffset ++
+ }
+
+ if (negateOffset) this.pattern = pattern.substr(negateOffset)
+ this.negate = negate
+}
+
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+minimatch.braceExpand = function (pattern, options) {
+ return braceExpand(pattern, options)
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function braceExpand (pattern, options) {
+ if (!options) {
+ if (this instanceof Minimatch)
+ options = this.options
+ else
+ options = {}
+ }
+
+ pattern = typeof pattern === "undefined"
+ ? this.pattern : pattern
+
+ if (typeof pattern === "undefined") {
+ throw new Error("undefined pattern")
+ }
+
+ if (options.nobrace ||
+ !pattern.match(/\{.*\}/)) {
+ // shortcut. no need to expand.
+ return [pattern]
+ }
+
+ return expand(pattern)
+}
+
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion. Otherwise, any series
+// of * is equivalent to a single *. Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+Minimatch.prototype.parse = parse
+var SUBPARSE = {}
+function parse (pattern, isSub) {
+ var options = this.options
+
+ // shortcuts
+ if (!options.noglobstar && pattern === "**") return GLOBSTAR
+ if (pattern === "") return ""
+
+ var re = ""
+ , hasMagic = !!options.nocase
+ , escaping = false
+ // ? => one single character
+ , patternListStack = []
+ , plType
+ , stateChar
+ , inClass = false
+ , reClassStart = -1
+ , classStart = -1
+ // . and .. never match anything that doesn't start with .,
+ // even when options.dot is set.
+ , patternStart = pattern.charAt(0) === "." ? "" // anything
+ // not (start or / followed by . or .. followed by / or end)
+ : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))"
+ : "(?!\\.)"
+ , self = this
+
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case "*":
+ re += star
+ hasMagic = true
+ break
+ case "?":
+ re += qmark
+ hasMagic = true
+ break
+ default:
+ re += "\\"+stateChar
+ break
+ }
+ self.debug('clearStateChar %j %j', stateChar, re)
+ stateChar = false
+ }
+ }
+
+ for ( var i = 0, len = pattern.length, c
+ ; (i < len) && (c = pattern.charAt(i))
+ ; i ++ ) {
+
+ this.debug("%s\t%s %s %j", pattern, i, re, c)
+
+ // skip over any that are escaped.
+ if (escaping && reSpecials[c]) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ SWITCH: switch (c) {
+ case "/":
+ // completely not allowed, even escaped.
+ // Should already be path-split by now.
+ return false
+
+ case "\\":
+ clearStateChar()
+ escaping = true
+ continue
+
+ // the various stateChar values
+ // for the "extglob" stuff.
+ case "?":
+ case "*":
+ case "+":
+ case "@":
+ case "!":
+ this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c)
+
+ // all of those are literals inside a class, except that
+ // the glob [!a] means [^a] in regexp
+ if (inClass) {
+ this.debug(' in class')
+ if (c === "!" && i === classStart + 1) c = "^"
+ re += c
+ continue
+ }
+
+ // if we already have a stateChar, then it means
+ // that there was something like ** or +? in there.
+ // Handle the stateChar, then proceed with this one.
+ self.debug('call clearStateChar %j', stateChar)
+ clearStateChar()
+ stateChar = c
+ // if extglob is disabled, then +(asdf|foo) isn't a thing.
+ // just clear the statechar *now*, rather than even diving into
+ // the patternList stuff.
+ if (options.noext) clearStateChar()
+ continue
+
+ case "(":
+ if (inClass) {
+ re += "("
+ continue
+ }
+
+ if (!stateChar) {
+ re += "\\("
+ continue
+ }
+
+ plType = stateChar
+ patternListStack.push({ type: plType
+ , start: i - 1
+ , reStart: re.length })
+ // negation is (?:(?!js)[^/]*)
+ re += stateChar === "!" ? "(?:(?!" : "(?:"
+ this.debug('plType %j %j', stateChar, re)
+ stateChar = false
+ continue
+
+ case ")":
+ if (inClass || !patternListStack.length) {
+ re += "\\)"
+ continue
+ }
+
+ clearStateChar()
+ hasMagic = true
+ re += ")"
+ plType = patternListStack.pop().type
+ // negation is (?:(?!js)[^/]*)
+ // The others are (?:)
+ switch (plType) {
+ case "!":
+ re += "[^/]*?)"
+ break
+ case "?":
+ case "+":
+ case "*": re += plType
+ case "@": break // the default anyway
+ }
+ continue
+
+ case "|":
+ if (inClass || !patternListStack.length || escaping) {
+ re += "\\|"
+ escaping = false
+ continue
+ }
+
+ clearStateChar()
+ re += "|"
+ continue
+
+ // these are mostly the same in regexp and glob
+ case "[":
+ // swallow any state-tracking char before the [
+ clearStateChar()
+
+ if (inClass) {
+ re += "\\" + c
+ continue
+ }
+
+ inClass = true
+ classStart = i
+ reClassStart = re.length
+ re += c
+ continue
+
+ case "]":
+ // a right bracket shall lose its special
+ // meaning and represent itself in
+ // a bracket expression if it occurs
+ // first in the list. -- POSIX.2 2.8.3.2
+ if (i === classStart + 1 || !inClass) {
+ re += "\\" + c
+ escaping = false
+ continue
+ }
+
+ // handle the case where we left a class open.
+ // "[z-a]" is valid, equivalent to "\[z-a\]"
+ if (inClass) {
+ // split where the last [ was, make sure we don't have
+ // an invalid re. if so, re-walk the contents of the
+ // would-be class to re-translate any characters that
+ // were passed through as-is
+ // TODO: It would probably be faster to determine this
+ // without a try/catch and a new RegExp, but it's tricky
+ // to do safely. For now, this is safe and works.
+ var cs = pattern.substring(classStart + 1, i)
+ try {
+ new RegExp('[' + cs + ']')
+ } catch (er) {
+ // not a valid class!
+ var sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0] + '\\]'
+ hasMagic = hasMagic || sp[1]
+ inClass = false
+ continue
+ }
+ }
+
+ // finish up the class.
+ hasMagic = true
+ inClass = false
+ re += c
+ continue
+
+ default:
+ // swallow any state char that wasn't consumed
+ clearStateChar()
+
+ if (escaping) {
+ // no need
+ escaping = false
+ } else if (reSpecials[c]
+ && !(c === "^" && inClass)) {
+ re += "\\"
+ }
+
+ re += c
+
+ } // switch
+ } // for
+
+
+ // handle the case where we left a class open.
+ // "[abc" is valid, equivalent to "\[abc"
+ if (inClass) {
+ // split where the last [ was, and escape it
+ // this is a huge pita. We now have to re-walk
+ // the contents of the would-be class to re-translate
+ // any characters that were passed through as-is
+ var cs = pattern.substr(classStart + 1)
+ , sp = this.parse(cs, SUBPARSE)
+ re = re.substr(0, reClassStart) + "\\[" + sp[0]
+ hasMagic = hasMagic || sp[1]
+ }
+
+ // handle the case where we had a +( thing at the *end*
+ // of the pattern.
+ // each pattern list stack adds 3 chars, and we need to go through
+ // and escape any | chars that were passed through as-is for the regexp.
+ // Go through and escape them, taking care not to double-escape any
+ // | chars that were already escaped.
+ var pl
+ while (pl = patternListStack.pop()) {
+ var tail = re.slice(pl.reStart + 3)
+ // maybe some even number of \, then maybe 1 \, followed by a |
+ tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) {
+ if (!$2) {
+ // the | isn't already escaped, so escape it.
+ $2 = "\\"
+ }
+
+ // need to escape all those slashes *again*, without escaping the
+ // one that we need for escaping the | character. As it works out,
+ // escaping an even number of slashes can be done by simply repeating
+ // it exactly after itself. That's why this trick works.
+ //
+ // I am sorry that you have to see this.
+ return $1 + $1 + $2 + "|"
+ })
+
+ this.debug("tail=%j\n %s", tail, tail)
+ var t = pl.type === "*" ? star
+ : pl.type === "?" ? qmark
+ : "\\" + pl.type
+
+ hasMagic = true
+ re = re.slice(0, pl.reStart)
+ + t + "\\("
+ + tail
+ }
+
+ // handle trailing things that only matter at the very end.
+ clearStateChar()
+ if (escaping) {
+ // trailing \\
+ re += "\\\\"
+ }
+
+ // only need to apply the nodot start if the re starts with
+ // something that could conceivably capture a dot
+ var addPatternStart = false
+ switch (re.charAt(0)) {
+ case ".":
+ case "[":
+ case "(": addPatternStart = true
+ }
+
+ // if the re is not "" at this point, then we need to make sure
+ // it doesn't match against an empty path part.
+ // Otherwise a/* will match a/, which it should not.
+ if (re !== "" && hasMagic) re = "(?=.)" + re
+
+ if (addPatternStart) re = patternStart + re
+
+ // parsing just a piece of a larger pattern.
+ if (isSub === SUBPARSE) {
+ return [ re, hasMagic ]
+ }
+
+ // skip the regexp for non-magical patterns
+ // unescape anything in it, though, so that it'll be
+ // an exact match against a file etc.
+ if (!hasMagic) {
+ return globUnescape(pattern)
+ }
+
+ var flags = options.nocase ? "i" : ""
+ , regExp = new RegExp("^" + re + "$", flags)
+
+ regExp._glob = pattern
+ regExp._src = re
+
+ return regExp
+}
+
+minimatch.makeRe = function (pattern, options) {
+ return new Minimatch(pattern, options || {}).makeRe()
+}
+
+Minimatch.prototype.makeRe = makeRe
+function makeRe () {
+ if (this.regexp || this.regexp === false) return this.regexp
+
+ // at this point, this.set is a 2d array of partial
+ // pattern strings, or "**".
+ //
+ // It's better to use .match(). This function shouldn't
+ // be used, really, but it's pretty convenient sometimes,
+ // when you just want to work with a regex.
+ var set = this.set
+
+ if (!set.length) return this.regexp = false
+ var options = this.options
+
+ var twoStar = options.noglobstar ? star
+ : options.dot ? twoStarDot
+ : twoStarNoDot
+ , flags = options.nocase ? "i" : ""
+
+ var re = set.map(function (pattern) {
+ return pattern.map(function (p) {
+ return (p === GLOBSTAR) ? twoStar
+ : (typeof p === "string") ? regExpEscape(p)
+ : p._src
+ }).join("\\\/")
+ }).join("|")
+
+ // must match entire pattern
+ // ending in a * or ** will make it less strict.
+ re = "^(?:" + re + ")$"
+
+ // can match anything, as long as it's not this.
+ if (this.negate) re = "^(?!" + re + ").*$"
+
+ try {
+ return this.regexp = new RegExp(re, flags)
+ } catch (ex) {
+ return this.regexp = false
+ }
+}
+
+minimatch.match = function (list, pattern, options) {
+ options = options || {}
+ var mm = new Minimatch(pattern, options)
+ list = list.filter(function (f) {
+ return mm.match(f)
+ })
+ if (mm.options.nonull && !list.length) {
+ list.push(pattern)
+ }
+ return list
+}
+
+Minimatch.prototype.match = match
+function match (f, partial) {
+ this.debug("match", f, this.pattern)
+ // short-circuit in the case of busted things.
+ // comments, etc.
+ if (this.comment) return false
+ if (this.empty) return f === ""
+
+ if (f === "/" && partial) return true
+
+ var options = this.options
+
+ // windows: need to use /, not \
+ if (isWindows)
+ f = f.split("\\").join("/")
+
+ // treat the test path as a set of pathparts.
+ f = f.split(slashSplit)
+ this.debug(this.pattern, "split", f)
+
+ // just ONE of the pattern sets in this.set needs to match
+ // in order for it to be valid. If negating, then just one
+ // match means that we have failed.
+ // Either way, return on the first hit.
+
+ var set = this.set
+ this.debug(this.pattern, "set", set)
+
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename;
+ for (var i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
+
+ for (var i = 0, l = set.length; i < l; i ++) {
+ var pattern = set[i], file = f
+ if (options.matchBase && pattern.length === 1) {
+ file = [filename]
+ }
+ var hit = this.matchOne(file, pattern, partial)
+ if (hit) {
+ if (options.flipNegate) return true
+ return !this.negate
+ }
+ }
+
+ // didn't get any hits. this is success if it's a negative
+ // pattern, failure otherwise.
+ if (options.flipNegate) return false
+ return this.negate
+}
+
+// set partial to true to test if, for example,
+// "/a/b" matches the start of "/*/b/*/d"
+// Partial means, if you run out of file before you run
+// out of pattern, then that's fine, as long as all
+// the parts match.
+Minimatch.prototype.matchOne = function (file, pattern, partial) {
+ var options = this.options
+
+ this.debug("matchOne",
+ { "this": this
+ , file: file
+ , pattern: pattern })
+
+ this.debug("matchOne", file.length, pattern.length)
+
+ for ( var fi = 0
+ , pi = 0
+ , fl = file.length
+ , pl = pattern.length
+ ; (fi < fl) && (pi < pl)
+ ; fi ++, pi ++ ) {
+
+ this.debug("matchOne loop")
+ var p = pattern[pi]
+ , f = file[fi]
+
+ this.debug(pattern, p, f)
+
+ // should be impossible.
+ // some invalid regexp stuff in the set.
+ if (p === false) return false
+
+ if (p === GLOBSTAR) {
+ this.debug('GLOBSTAR', [pattern, p, f])
+
+ // "**"
+ // a/**/b/**/c would match the following:
+ // a/b/x/y/z/c
+ // a/x/y/z/b/c
+ // a/b/x/b/x/c
+ // a/b/c
+ // To do this, take the rest of the pattern after
+ // the **, and see if it would match the file remainder.
+ // If so, return success.
+ // If not, the ** "swallows" a segment, and try again.
+ // This is recursively awful.
+ //
+ // a/**/b/**/c matching a/b/x/y/z/c
+ // - a matches a
+ // - doublestar
+ // - matchOne(b/x/y/z/c, b/**/c)
+ // - b matches b
+ // - doublestar
+ // - matchOne(x/y/z/c, c) -> no
+ // - matchOne(y/z/c, c) -> no
+ // - matchOne(z/c, c) -> no
+ // - matchOne(c, c) yes, hit
+ var fr = fi
+ , pr = pi + 1
+ if (pr === pl) {
+ this.debug('** at the end')
+ // a ** at the end will just swallow the rest.
+ // We have found a match.
+ // however, it will not swallow /.x, unless
+ // options.dot is set.
+ // . and .. are *never* matched by **, for explosively
+ // exponential reasons.
+ for ( ; fi < fl; fi ++) {
+ if (file[fi] === "." || file[fi] === ".." ||
+ (!options.dot && file[fi].charAt(0) === ".")) return false
+ }
+ return true
+ }
+
+ // ok, let's see if we can swallow whatever we can.
+ WHILE: while (fr < fl) {
+ var swallowee = file[fr]
+
+ this.debug('\nglobstar while',
+ file, fr, pattern, pr, swallowee)
+
+ // XXX remove this slice. Just pass the start index.
+ if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+ this.debug('globstar found match!', fr, fl, swallowee)
+ // found a match.
+ return true
+ } else {
+ // can't swallow "." or ".." ever.
+ // can only swallow ".foo" when explicitly asked.
+ if (swallowee === "." || swallowee === ".." ||
+ (!options.dot && swallowee.charAt(0) === ".")) {
+ this.debug("dot detected!", file, fr, pattern, pr)
+ break WHILE
+ }
+
+ // ** swallows a segment, and continue.
+ this.debug('globstar swallow a segment, and continue')
+ fr ++
+ }
+ }
+ // no match was found.
+ // However, in partial mode, we can't say this is necessarily over.
+ // If there's more *pattern* left, then
+ if (partial) {
+ // ran out of file
+ this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
+ if (fr === fl) return true
+ }
+ return false
+ }
+
+ // something other than **
+ // non-magic patterns just have to match exactly
+ // patterns with magic have been turned into regexps.
+ var hit
+ if (typeof p === "string") {
+ if (options.nocase) {
+ hit = f.toLowerCase() === p.toLowerCase()
+ } else {
+ hit = f === p
+ }
+ this.debug("string match", p, f, hit)
+ } else {
+ hit = f.match(p)
+ this.debug("pattern match", p, f, hit)
+ }
+
+ if (!hit) return false
+ }
+
+ // Note: ending in / means that we'll get a final ""
+ // at the end of the pattern. This can only match a
+ // corresponding "" at the end of the file.
+ // If the file ends in /, then it can only match a
+ // a pattern that ends in /, unless the pattern just
+ // doesn't have any more for it. But, a/b/ should *not*
+ // match "a/b/*", even though "" matches against the
+ // [^/]*? pattern, except in partial mode, where it might
+ // simply not be reached yet.
+ // However, a/b/ should still satisfy a/*
+
+ // now either we fell off the end of the pattern, or we're done.
+ if (fi === fl && pi === pl) {
+ // ran out of pattern and filename at the same time.
+ // an exact hit!
+ return true
+ } else if (fi === fl) {
+ // ran out of file, but still had pattern left.
+ // this is ok if we're doing the match as part of
+ // a glob fs traversal.
+ return partial
+ } else if (pi === pl) {
+ // ran out of pattern, still have file left.
+ // this is only acceptable if we're on the very last
+ // empty segment of a file with a trailing slash.
+ // a/* should match a/b/
+ var emptyFileEnd = (fi === fl - 1) && (file[fi] === "")
+ return emptyFileEnd
+ }
+
+ // should be unreachable.
+ throw new Error("wtf?")
+}
+
+
+// replace stuff like \* with *
+function globUnescape (s) {
+ return s.replace(/\\(.)/g, "$1")
+}
+
+
+function regExpEscape (s) {
+ return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore
new file mode 100644
index 0000000000..249bc20eb5
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore
@@ -0,0 +1,2 @@
+node_modules
+*.sw*
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
new file mode 100644
index 0000000000..6e5919de39
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "0.10"
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md
new file mode 100644
index 0000000000..9b5c617974
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md
@@ -0,0 +1,121 @@
+# brace-expansion
+
+[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
+as known from sh/bash, in JavaScript.
+
+[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)
+
+[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)
+
+## Example
+
+```js
+var expand = require('brace-expansion');
+
+expand('file-{a,b,c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('-v{,,}')
+// => ['-v', '-v', '-v']
+
+expand('file{0..2}.jpg')
+// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
+
+expand('file-{a..c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('file{2..0}.jpg')
+// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
+
+expand('file{0..4..2}.jpg')
+// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
+
+expand('file-{a..e..2}.jpg')
+// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
+
+expand('file{00..10..5}.jpg')
+// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
+
+expand('{{A..C},{a..c}}')
+// => ['A', 'B', 'C', 'a', 'b', 'c']
+
+expand('ppp{,config,oe{,conf}}')
+// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
+```
+
+## API
+
+```js
+var expand = require('brace-expansion');
+```
+
+### var expanded = expand(str)
+
+Return an array of all possible and valid expansions of `str`. If none are
+found, `[str]` is returned.
+
+Valid expansions are:
+
+```js
+/^(.*,)+(.+)?$/
+// {a,b,...}
+```
+
+A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+A numeric sequence from `x` to `y` inclusive, with optional increment.
+If `x` or `y` start with a leading `0`, all the numbers will be padded
+to have equal length. Negative numbers and backwards iteration work too.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+An alphabetic sequence from `x` to `y` inclusive, with optional increment.
+`x` and `y` must be exactly one character, and if given, `incr` must be a
+number.
+
+For compatibility reasons, the string `${` is not eligible for brace expansion.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install brace-expansion
+```
+
+## Contributors
+
+- [Julian Gruber](https://github.com/juliangruber)
+- [Isaac Z. Schlueter](https://github.com/isaacs)
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js
new file mode 100644
index 0000000000..36cde4de5c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js
@@ -0,0 +1,7 @@
+var expand = require('./');
+
+console.log(expand('http://any.org/archive{1996..1999}/vol{1..4}/part{a,b,c}.html'));
+console.log(expand('http://www.numericals.com/file{1..100..10}.txt'));
+console.log(expand('http://www.letters.com/file{a..z..2}.txt'));
+console.log(expand('mkdir /usr/local/src/bash/{old,new,dist,bugs}'));
+console.log(expand('chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}'));
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
new file mode 100644
index 0000000000..f8d40f79ac
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
@@ -0,0 +1,190 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = /^(.*,)+(.+)?$/.test(m.body);
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
new file mode 100644
index 0000000000..fd4f2b066b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
@@ -0,0 +1,2 @@
+node_modules
+.DS_Store
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
new file mode 100644
index 0000000000..cc4dba29d9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
new file mode 100644
index 0000000000..dd2730cfde
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
@@ -0,0 +1,5 @@
+
+test:
+ @node_modules/.bin/tape test/*.js
+
+.PHONY: test
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
new file mode 100644
index 0000000000..2aff0ebff4
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
@@ -0,0 +1,80 @@
+# balanced-match
+
+Match balanced string pairs, like `{` and `}` or `` and ``.
+
+[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
+[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
+
+[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)
+
+## Example
+
+Get the first matching pair of braces:
+
+```js
+var balanced = require('balanced-match');
+
+console.log(balanced('{', '}', 'pre{in{nested}}post'));
+console.log(balanced('{', '}', 'pre{first}between{second}post'));
+```
+
+The matches are:
+
+```bash
+$ node example.js
+{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
+{ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: 'first',
+ post: 'between{second}post' }
+```
+
+## API
+
+### var m = balanced(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+object with those keys:
+
+* **start** the index of the first match of `a`
+* **end** the index of the matching `b`
+* **pre** the preamble, `a` and `b` not included
+* **body** the match, `a` and `b` not included
+* **post** the postscript, `a` and `b` not included
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install balanced-match
+```
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
new file mode 100644
index 0000000000..9ce76f480a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
@@ -0,0 +1,4 @@
+var balanced = require('./');
+
+console.log(balanced('{', '}', 'pre{in{nested}}post'));
+console.log(balanced('{', '}', 'pre{first}between{second}post'));
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
new file mode 100644
index 0000000000..d165ae8174
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
@@ -0,0 +1,38 @@
+module.exports = balanced;
+function balanced(a, b, str) {
+ var bal = 0;
+ var m = {};
+ var ended = false;
+
+ for (var i = 0; i < str.length; i++) {
+ if (a == str.substr(i, a.length)) {
+ if (!('start' in m)) m.start = i;
+ bal++;
+ }
+ else if (b == str.substr(i, b.length) && 'start' in m) {
+ ended = true;
+ bal--;
+ if (!bal) {
+ m.end = i;
+ m.pre = str.substr(0, m.start);
+ m.body = (m.end - m.start > 1)
+ ? str.substring(m.start + a.length, m.end)
+ : '';
+ m.post = str.slice(m.end + b.length);
+ return m;
+ }
+ }
+ }
+
+ // if we opened more than we closed, find the one we closed
+ if (bal && ended) {
+ var start = m.start + a.length;
+ m = balanced(a, b, str.substr(start));
+ if (m) {
+ m.start += start;
+ m.end += start;
+ m.pre = str.slice(0, start) + m.pre;
+ }
+ return m;
+ }
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
new file mode 100644
index 0000000000..ede6efefa0
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "balanced-match",
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
+ "version": "0.2.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "homepage": "https://github.com/juliangruber/balanced-match",
+ "main": "index.js",
+ "scripts": {
+ "test": "make test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tape": "~1.1.1"
+ },
+ "keywords": [
+ "match",
+ "regexp",
+ "test",
+ "balanced",
+ "parse"
+ ],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "gitHead": "ba40ed78e7114a4a67c51da768a100184dead39c",
+ "bugs": {
+ "url": "https://github.com/juliangruber/balanced-match/issues"
+ },
+ "_id": "balanced-match@0.2.0",
+ "_shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
+ "_from": "balanced-match@>=0.2.0 <0.3.0",
+ "_npmVersion": "2.1.8",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "dist": {
+ "shasum": "38f6730c03aab6d5edbb52bd934885e756d71674",
+ "tarball": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
new file mode 100644
index 0000000000..36bfd39954
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
@@ -0,0 +1,56 @@
+var test = require('tape');
+var balanced = require('..');
+
+test('balanced', function(t) {
+ t.deepEqual(balanced('{', '}', 'pre{in{nest}}post'), {
+ start: 3,
+ end: 12,
+ pre: 'pre',
+ body: 'in{nest}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', '{{{{{{{{{in}post'), {
+ start: 8,
+ end: 11,
+ pre: '{{{{{{{{',
+ body: 'in',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{body{in}post'), {
+ start: 8,
+ end: 11,
+ pre: 'pre{body',
+ body: 'in',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre}{in{nest}}post'), {
+ start: 4,
+ end: 13,
+ pre: 'pre}',
+ body: 'in{nest}',
+ post: 'post'
+ });
+ t.deepEqual(balanced('{', '}', 'pre{body}between{body2}post'), {
+ start: 3,
+ end: 8,
+ pre: 'pre',
+ body: 'body',
+ post: 'between{body2}post'
+ });
+ t.notOk(balanced('{', '}', 'nope'), 'should be notOk');
+ t.deepEqual(balanced('', '', 'preinnestpost'), {
+ start: 3,
+ end: 19,
+ pre: 'pre',
+ body: 'innest',
+ post: 'post'
+ });
+ t.deepEqual(balanced('', '', 'preinnestpost'), {
+ start: 7,
+ end: 23,
+ pre: 'pre',
+ body: 'innest',
+ post: 'post'
+ });
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
new file mode 100644
index 0000000000..f1d0f13c8a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.4
+ - 0.6
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE
new file mode 100644
index 0000000000..ee27ba4b44
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
new file mode 100644
index 0000000000..408f70a1be
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
@@ -0,0 +1,62 @@
+concat-map
+==========
+
+Concatenative mapdashery.
+
+[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)
+
+[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)
+
+example
+=======
+
+``` js
+var concatMap = require('concat-map');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
+```
+
+***
+
+```
+[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
+```
+
+methods
+=======
+
+``` js
+var concatMap = require('concat-map')
+```
+
+concatMap(xs, fn)
+-----------------
+
+Return an array of concatenated elements by calling `fn(x, i)` for each element
+`x` and each index `i` in the array `xs`.
+
+When `fn(x, i)` returns an array, its result will be concatenated with the
+result array. If `fn(x, i)` returns anything else, that value will be pushed
+onto the end of the result array.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install concat-map
+```
+
+license
+=======
+
+MIT
+
+notes
+=====
+
+This module was written while sitting high above the ground in a tree.
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
new file mode 100644
index 0000000000..33656217b6
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
@@ -0,0 +1,6 @@
+var concatMap = require('../');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
new file mode 100644
index 0000000000..b29a7812e5
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
@@ -0,0 +1,13 @@
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+var isArray = Array.isArray || function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]';
+};
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
new file mode 100644
index 0000000000..b516138098
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "concat-map",
+ "description": "concatenative mapdashery",
+ "version": "0.0.1",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/node-concat-map.git"
+ },
+ "main": "index.js",
+ "keywords": [
+ "concat",
+ "concatMap",
+ "map",
+ "functional",
+ "higher-order"
+ ],
+ "directories": {
+ "example": "example",
+ "test": "test"
+ },
+ "scripts": {
+ "test": "tape test/*.js"
+ },
+ "devDependencies": {
+ "tape": "~2.4.0"
+ },
+ "license": "MIT",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": {
+ "ie": [
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "ff": [
+ 3.5,
+ 10,
+ 15
+ ],
+ "chrome": [
+ 10,
+ 22
+ ],
+ "safari": [
+ 5.1
+ ],
+ "opera": [
+ 12
+ ]
+ }
+ },
+ "bugs": {
+ "url": "https://github.com/substack/node-concat-map/issues"
+ },
+ "homepage": "https://github.com/substack/node-concat-map",
+ "_id": "concat-map@0.0.1",
+ "dist": {
+ "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ },
+ "_from": "concat-map@0.0.1",
+ "_npmVersion": "1.3.21",
+ "_npmUser": {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
new file mode 100644
index 0000000000..fdbd7022f6
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
@@ -0,0 +1,39 @@
+var concatMap = require('../');
+var test = require('tape');
+
+test('empty or not', function (t) {
+ var xs = [ 1, 2, 3, 4, 5, 6 ];
+ var ixes = [];
+ var ys = concatMap(xs, function (x, ix) {
+ ixes.push(ix);
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+ });
+ t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);
+ t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);
+ t.end();
+});
+
+test('always something', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('scalars', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : x;
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('undefs', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function () {});
+ t.same(ys, [ undefined, undefined, undefined, undefined ]);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
new file mode 100644
index 0000000000..5f1866c8b5
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "brace-expansion",
+ "description": "Brace expansion as known from sh/bash",
+ "version": "1.1.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
+ },
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/*.js",
+ "gentest": "bash test/generate.sh"
+ },
+ "dependencies": {
+ "balanced-match": "^0.2.0",
+ "concat-map": "0.0.1"
+ },
+ "devDependencies": {
+ "tape": "^3.0.3"
+ },
+ "keywords": [],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "gitHead": "b5fa3b1c74e5e2dba2d0efa19b28335641bc1164",
+ "bugs": {
+ "url": "https://github.com/juliangruber/brace-expansion/issues"
+ },
+ "_id": "brace-expansion@1.1.0",
+ "_shasum": "c9b7d03c03f37bc704be100e522b40db8f6cfcd9",
+ "_from": "brace-expansion@>=1.0.0 <2.0.0",
+ "_npmVersion": "2.1.10",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ }
+ ],
+ "dist": {
+ "shasum": "c9b7d03c03f37bc704be100e522b40db8f6cfcd9",
+ "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js
new file mode 100644
index 0000000000..5fe2b8ad48
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js
@@ -0,0 +1,32 @@
+var test = require('tape');
+var expand = require('..');
+var fs = require('fs');
+var resfile = __dirname + '/bash-results.txt';
+var cases = fs.readFileSync(resfile, 'utf8').split('><><><><');
+
+// throw away the EOF marker
+cases.pop()
+
+test('matches bash expansions', function(t) {
+ cases.forEach(function(testcase) {
+ var set = testcase.split('\n');
+ var pattern = set.shift();
+ var actual = expand(pattern);
+
+ // If it expands to the empty string, then it's actually
+ // just nothing, but Bash is a singly typed language, so
+ // "nothing" is the same as "".
+ if (set.length === 1 && set[0] === '') {
+ set = []
+ } else {
+ // otherwise, strip off the [] that were added so that
+ // "" expansions would be preserved properly.
+ set = set.map(function (s) {
+ return s.replace(/^\[|\]$/g, '')
+ })
+ }
+
+ t.same(actual, set, pattern);
+ });
+ t.end();
+})
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt
new file mode 100644
index 0000000000..958148d26a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt
@@ -0,0 +1,1075 @@
+A{b,{d,e},{f,g}}Z
+[AbZ]
+[AdZ]
+[AeZ]
+[AfZ]
+[AgZ]><><><><><><><\{a,b}{{a,b},a,b}
+[{a,b}a]
+[{a,b}b]
+[{a,b}a]
+[{a,b}b]><><><><{{a,b}
+[{a]
+[{b]><><><><{a,b}}
+[a}]
+[b}]><><><><{,}
+><><><><><><><{,}b
+[b]
+[b]><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><{-01..5}
+[-01]
+[000]
+[001]
+[002]
+[003]
+[004]
+[005]><><><><{-05..100..5}
+[-05]
+[000]
+[005]
+[010]
+[015]
+[020]
+[025]
+[030]
+[035]
+[040]
+[045]
+[050]
+[055]
+[060]
+[065]
+[070]
+[075]
+[080]
+[085]
+[090]
+[095]
+[100]><><><><{-05..100}
+[-05]
+[-04]
+[-03]
+[-02]
+[-01]
+[000]
+[001]
+[002]
+[003]
+[004]
+[005]
+[006]
+[007]
+[008]
+[009]
+[010]
+[011]
+[012]
+[013]
+[014]
+[015]
+[016]
+[017]
+[018]
+[019]
+[020]
+[021]
+[022]
+[023]
+[024]
+[025]
+[026]
+[027]
+[028]
+[029]
+[030]
+[031]
+[032]
+[033]
+[034]
+[035]
+[036]
+[037]
+[038]
+[039]
+[040]
+[041]
+[042]
+[043]
+[044]
+[045]
+[046]
+[047]
+[048]
+[049]
+[050]
+[051]
+[052]
+[053]
+[054]
+[055]
+[056]
+[057]
+[058]
+[059]
+[060]
+[061]
+[062]
+[063]
+[064]
+[065]
+[066]
+[067]
+[068]
+[069]
+[070]
+[071]
+[072]
+[073]
+[074]
+[075]
+[076]
+[077]
+[078]
+[079]
+[080]
+[081]
+[082]
+[083]
+[084]
+[085]
+[086]
+[087]
+[088]
+[089]
+[090]
+[091]
+[092]
+[093]
+[094]
+[095]
+[096]
+[097]
+[098]
+[099]
+[100]><><><><{0..5..2}
+[0]
+[2]
+[4]><><><><{0001..05..2}
+[0001]
+[0003]
+[0005]><><><><{0001..-5..2}
+[0001]
+[-001]
+[-003]
+[-005]><><><><{0001..-5..-2}
+[0001]
+[-001]
+[-003]
+[-005]><><><><{0001..5..-2}
+[0001]
+[0003]
+[0005]><><><><{01..5}
+[01]
+[02]
+[03]
+[04]
+[05]><><><><{1..05}
+[01]
+[02]
+[03]
+[04]
+[05]><><><><{1..05..3}
+[01]
+[04]><><><><{05..100}
+[005]
+[006]
+[007]
+[008]
+[009]
+[010]
+[011]
+[012]
+[013]
+[014]
+[015]
+[016]
+[017]
+[018]
+[019]
+[020]
+[021]
+[022]
+[023]
+[024]
+[025]
+[026]
+[027]
+[028]
+[029]
+[030]
+[031]
+[032]
+[033]
+[034]
+[035]
+[036]
+[037]
+[038]
+[039]
+[040]
+[041]
+[042]
+[043]
+[044]
+[045]
+[046]
+[047]
+[048]
+[049]
+[050]
+[051]
+[052]
+[053]
+[054]
+[055]
+[056]
+[057]
+[058]
+[059]
+[060]
+[061]
+[062]
+[063]
+[064]
+[065]
+[066]
+[067]
+[068]
+[069]
+[070]
+[071]
+[072]
+[073]
+[074]
+[075]
+[076]
+[077]
+[078]
+[079]
+[080]
+[081]
+[082]
+[083]
+[084]
+[085]
+[086]
+[087]
+[088]
+[089]
+[090]
+[091]
+[092]
+[093]
+[094]
+[095]
+[096]
+[097]
+[098]
+[099]
+[100]><><><><{0a..0z}
+[{0a..0z}]><><><><{a,b\}c,d}
+[a]
+[b}c]
+[d]><><><><{a,b{c,d}
+[{a,bc]
+[{a,bd]><><><><{a,b}c,d}
+[ac,d}]
+[bc,d}]><><><><{a..F}
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]
+[Y]
+[X]
+[W]
+[V]
+[U]
+[T]
+[S]
+[R]
+[Q]
+[P]
+[O]
+[N]
+[M]
+[L]
+[K]
+[J]
+[I]
+[H]
+[G]
+[F]><><><><{A..f}
+[A]
+[B]
+[C]
+[D]
+[E]
+[F]
+[G]
+[H]
+[I]
+[J]
+[K]
+[L]
+[M]
+[N]
+[O]
+[P]
+[Q]
+[R]
+[S]
+[T]
+[U]
+[V]
+[W]
+[X]
+[Y]
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]><><><><{a..Z}
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]><><><><{A..z}
+[A]
+[B]
+[C]
+[D]
+[E]
+[F]
+[G]
+[H]
+[I]
+[J]
+[K]
+[L]
+[M]
+[N]
+[O]
+[P]
+[Q]
+[R]
+[S]
+[T]
+[U]
+[V]
+[W]
+[X]
+[Y]
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]
+[g]
+[h]
+[i]
+[j]
+[k]
+[l]
+[m]
+[n]
+[o]
+[p]
+[q]
+[r]
+[s]
+[t]
+[u]
+[v]
+[w]
+[x]
+[y]
+[z]><><><><{z..A}
+[z]
+[y]
+[x]
+[w]
+[v]
+[u]
+[t]
+[s]
+[r]
+[q]
+[p]
+[o]
+[n]
+[m]
+[l]
+[k]
+[j]
+[i]
+[h]
+[g]
+[f]
+[e]
+[d]
+[c]
+[b]
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]
+[Y]
+[X]
+[W]
+[V]
+[U]
+[T]
+[S]
+[R]
+[Q]
+[P]
+[O]
+[N]
+[M]
+[L]
+[K]
+[J]
+[I]
+[H]
+[G]
+[F]
+[E]
+[D]
+[C]
+[B]
+[A]><><><><{Z..a}
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]><><><><{a..F..2}
+[a]
+[_]
+[]]
+[[]
+[Y]
+[W]
+[U]
+[S]
+[Q]
+[O]
+[M]
+[K]
+[I]
+[G]><><><><{A..f..02}
+[A]
+[C]
+[E]
+[G]
+[I]
+[K]
+[M]
+[O]
+[Q]
+[S]
+[U]
+[W]
+[Y]
+[[]
+[]]
+[_]
+[a]
+[c]
+[e]><><><><{a..Z..5}
+[a]
+[]><><><><><><><{A..z..10}
+[A]
+[K]
+[U]
+[_]
+[i]
+[s]><><><><{z..A..-2}
+[z]
+[x]
+[v]
+[t]
+[r]
+[p]
+[n]
+[l]
+[j]
+[h]
+[f]
+[d]
+[b]
+[`]
+[^]
+[]
+[Z]
+[X]
+[V]
+[T]
+[R]
+[P]
+[N]
+[L]
+[J]
+[H]
+[F]
+[D]
+[B]><><><><{Z..a..20}
+[Z]><><><><{a{,b}
+[{a]
+[{ab]><><><><{a},b}
+[a}]
+[b]><><><><{x,y{,}g}
+[x]
+[yg]
+[yg]><><><><{x,y{}g}
+[x]
+[y{}g]><><><><{{a,b}
+[{a]
+[{b]><><><><{{a,b},c}
+[a]
+[b]
+[c]><><><><{{a,b}c}
+[{ac}]
+[{bc}]><><><><{{a,b},}
+[a]
+[b]><><><><><><><{{a,b},}c
+[ac]
+[bc]
+[c]><><><><{{a,b}.}
+[{a.}]
+[{b.}]><><><><{{a,b}}
+[{a}]
+[{b}]><><><><><><><
+><><><><{-10..00}
+[-10]
+[-09]
+[-08]
+[-07]
+[-06]
+[-05]
+[-04]
+[-03]
+[-02]
+[-01]
+[000]><><><><{a,\\{a,b}c}
+[a]
+[\ac]
+[\bc]><><><><{a,\{a,b}c}
+[ac}]
+[{ac}]
+[bc}]><><><><><><><{-10.\.00}
+[{-10..00}]><><><><><><><><><><{l,n,m}xyz
+[lxyz]
+[nxyz]
+[mxyz]><><><><{abc\,def}
+[{abc,def}]><><><><{abc}
+[{abc}]><><><><{x\,y,\{abc\},trie}
+[x,y]
+[{abc}]
+[trie]><><><><{}
+[{}]><><><><}
+[}]><><><><{
+[{]><><><><><><><{1..10}
+[1]
+[2]
+[3]
+[4]
+[5]
+[6]
+[7]
+[8]
+[9]
+[10]><><><><{0..10,braces}
+[0..10]
+[braces]><><><><{{0..10},braces}
+[0]
+[1]
+[2]
+[3]
+[4]
+[5]
+[6]
+[7]
+[8]
+[9]
+[10]
+[braces]><><><><><><><{3..3}
+[3]><><><><><><><{10..1}
+[10]
+[9]
+[8]
+[7]
+[6]
+[5]
+[4]
+[3]
+[2]
+[1]><><><><{10..1}y
+[10y]
+[9y]
+[8y]
+[7y]
+[6y]
+[5y]
+[4y]
+[3y]
+[2y]
+[1y]><><><><><><><{a..f}
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]><><><><{f..a}
+[f]
+[e]
+[d]
+[c]
+[b]
+[a]><><><><{a..A}
+[a]
+[`]
+[_]
+[^]
+[]]
+[]
+[[]
+[Z]
+[Y]
+[X]
+[W]
+[V]
+[U]
+[T]
+[S]
+[R]
+[Q]
+[P]
+[O]
+[N]
+[M]
+[L]
+[K]
+[J]
+[I]
+[H]
+[G]
+[F]
+[E]
+[D]
+[C]
+[B]
+[A]><><><><{A..a}
+[A]
+[B]
+[C]
+[D]
+[E]
+[F]
+[G]
+[H]
+[I]
+[J]
+[K]
+[L]
+[M]
+[N]
+[O]
+[P]
+[Q]
+[R]
+[S]
+[T]
+[U]
+[V]
+[W]
+[X]
+[Y]
+[Z]
+[[]
+[]
+[]]
+[^]
+[_]
+[`]
+[a]><><><><{f..f}
+[f]><><><><{1..f}
+[{1..f}]><><><><{f..1}
+[{f..1}]><><><><{-1..-10}
+[-1]
+[-2]
+[-3]
+[-4]
+[-5]
+[-6]
+[-7]
+[-8]
+[-9]
+[-10]><><><><{-20..0}
+[-20]
+[-19]
+[-18]
+[-17]
+[-16]
+[-15]
+[-14]
+[-13]
+[-12]
+[-11]
+[-10]
+[-9]
+[-8]
+[-7]
+[-6]
+[-5]
+[-4]
+[-3]
+[-2]
+[-1]
+[0]><><><><><><><><><><{klklkl}{1,2,3}
+[{klklkl}1]
+[{klklkl}2]
+[{klklkl}3]><><><><{1..10..2}
+[1]
+[3]
+[5]
+[7]
+[9]><><><><{-1..-10..2}
+[-1]
+[-3]
+[-5]
+[-7]
+[-9]><><><><{-1..-10..-2}
+[-1]
+[-3]
+[-5]
+[-7]
+[-9]><><><><{10..1..-2}
+[10]
+[8]
+[6]
+[4]
+[2]><><><><{10..1..2}
+[10]
+[8]
+[6]
+[4]
+[2]><><><><{1..20..2}
+[1]
+[3]
+[5]
+[7]
+[9]
+[11]
+[13]
+[15]
+[17]
+[19]><><><><{1..20..20}
+[1]><><><><{100..0..5}
+[100]
+[95]
+[90]
+[85]
+[80]
+[75]
+[70]
+[65]
+[60]
+[55]
+[50]
+[45]
+[40]
+[35]
+[30]
+[25]
+[20]
+[15]
+[10]
+[5]
+[0]><><><><{100..0..-5}
+[100]
+[95]
+[90]
+[85]
+[80]
+[75]
+[70]
+[65]
+[60]
+[55]
+[50]
+[45]
+[40]
+[35]
+[30]
+[25]
+[20]
+[15]
+[10]
+[5]
+[0]><><><><{a..z}
+[a]
+[b]
+[c]
+[d]
+[e]
+[f]
+[g]
+[h]
+[i]
+[j]
+[k]
+[l]
+[m]
+[n]
+[o]
+[p]
+[q]
+[r]
+[s]
+[t]
+[u]
+[v]
+[w]
+[x]
+[y]
+[z]><><><><{a..z..2}
+[a]
+[c]
+[e]
+[g]
+[i]
+[k]
+[m]
+[o]
+[q]
+[s]
+[u]
+[w]
+[y]><><><><{z..a..-2}
+[z]
+[x]
+[v]
+[t]
+[r]
+[p]
+[n]
+[l]
+[j]
+[h]
+[f]
+[d]
+[b]><><><><{2147483645..2147483649}
+[2147483645]
+[2147483646]
+[2147483647]
+[2147483648]
+[2147483649]><><><><{10..0..2}
+[10]
+[8]
+[6]
+[4]
+[2]
+[0]><><><><{10..0..-2}
+[10]
+[8]
+[6]
+[4]
+[2]
+[0]><><><><{-50..-0..5}
+[-50]
+[-45]
+[-40]
+[-35]
+[-30]
+[-25]
+[-20]
+[-15]
+[-10]
+[-5]
+[0]><><><><{1..10.f}
+[{1..10.f}]><><><><{1..ff}
+[{1..ff}]><><><><{1..10..ff}
+[{1..10..ff}]><><><><{1.20..2}
+[{1.20..2}]><><><><{1..20..f2}
+[{1..20..f2}]><><><><{1..20..2f}
+[{1..20..2f}]><><><><{1..2f..2}
+[{1..2f..2}]><><><><{1..ff..2}
+[{1..ff..2}]><><><><{1..ff}
+[{1..ff}]><><><><{1..f}
+[{1..f}]><><><><{1..0f}
+[{1..0f}]><><><><{1..10f}
+[{1..10f}]><><><><{1..10.f}
+[{1..10.f}]><><><><{1..10.f}
+[{1..10.f}]><><><><
\ No newline at end of file
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt
new file mode 100644
index 0000000000..e5161c3da8
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt
@@ -0,0 +1,182 @@
+# skip quotes for now
+# "{x,x}"
+# {"x,x"}
+# {x","x}
+# '{a,b}{{a,b},a,b}'
+A{b,{d,e},{f,g}}Z
+PRE-{a,b}{{a,b},a,b}-POST
+\\{a,b}{{a,b},a,b}
+{{a,b}
+{a,b}}
+{,}
+a{,}
+{,}b
+a{,}b
+a{b}c
+a{1..5}b
+a{01..5}b
+a{-01..5}b
+a{-01..5..3}b
+a{001..9}b
+a{b,c{d,e},{f,g}h}x{y,z
+a{b,c{d,e},{f,g}h}x{y,z\\}
+a{b,c{d,e},{f,g}h}x{y,z}
+a{b{c{d,e}f{x,y{{g}h
+a{b{c{d,e}f{x,y{}g}h
+a{b{c{d,e}f{x,y}}g}h
+a{b{c{d,e}f}g}h
+a{{x,y},z}b
+f{x,y{g,z}}h
+f{x,y{{g,z}}h
+f{x,y{{g,z}}h}
+f{x,y{{g}h
+f{x,y{{g}}h
+f{x,y{}g}h
+z{a,b{,c}d
+z{a,b},c}d
+{-01..5}
+{-05..100..5}
+{-05..100}
+{0..5..2}
+{0001..05..2}
+{0001..-5..2}
+{0001..-5..-2}
+{0001..5..-2}
+{01..5}
+{1..05}
+{1..05..3}
+{05..100}
+{0a..0z}
+{a,b\\}c,d}
+{a,b{c,d}
+{a,b}c,d}
+{a..F}
+{A..f}
+{a..Z}
+{A..z}
+{z..A}
+{Z..a}
+{a..F..2}
+{A..f..02}
+{a..Z..5}
+d{a..Z..5}b
+{A..z..10}
+{z..A..-2}
+{Z..a..20}
+{a{,b}
+{a},b}
+{x,y{,}g}
+{x,y{}g}
+{{a,b}
+{{a,b},c}
+{{a,b}c}
+{{a,b},}
+X{{a,b},}X
+{{a,b},}c
+{{a,b}.}
+{{a,b}}
+X{a..#}X
+# this next one is an empty string
+
+{-10..00}
+# Need to escape slashes in here for reasons i guess.
+{a,\\\\{a,b}c}
+{a,\\{a,b}c}
+a,\\{b,c}
+{-10.\\.00}
+#### bash tests/braces.tests
+# Note that some tests are edited out because some features of
+# bash are intentionally not supported in this brace expander.
+ff{c,b,a}
+f{d,e,f}g
+{l,n,m}xyz
+{abc\\,def}
+{abc}
+{x\\,y,\\{abc\\},trie}
+# not impementing back-ticks obviously
+# XXXX\\{`echo a b c | tr ' ' ','`\\}
+{}
+# We only ever have to worry about parsing a single argument,
+# not a command line, so spaces have a different meaning than bash.
+# { }
+}
+{
+abcd{efgh
+# spaces
+# foo {1,2} bar
+# not impementing back-ticks obviously
+# `zecho foo {1,2} bar`
+# $(zecho foo {1,2} bar)
+# ${var} is not a variable here, like it is in bash. omit.
+# foo{bar,${var}.}
+# foo{bar,${var}}
+# isaacs: skip quotes for now
+# "${var}"{x,y}
+# $var{x,y}
+# ${var}{x,y}
+# new sequence brace operators
+{1..10}
+# this doesn't work yet
+{0..10,braces}
+# but this does
+{{0..10},braces}
+x{{0..10},braces}y
+{3..3}
+x{3..3}y
+{10..1}
+{10..1}y
+x{10..1}y
+{a..f}
+{f..a}
+{a..A}
+{A..a}
+{f..f}
+# mixes are incorrectly-formed brace expansions
+{1..f}
+{f..1}
+# spaces
+# 0{1..9} {10..20}
+# do negative numbers work?
+{-1..-10}
+{-20..0}
+# weirdly-formed brace expansions -- fixed in post-bash-3.1
+a-{b{d,e}}-c
+a-{bdef-{g,i}-c
+# isaacs: skip quotes for now
+# {"klklkl"}{1,2,3}
+# isaacs: this is a valid test, though
+{klklkl}{1,2,3}
+# {"x,x"}
+{1..10..2}
+{-1..-10..2}
+{-1..-10..-2}
+{10..1..-2}
+{10..1..2}
+{1..20..2}
+{1..20..20}
+{100..0..5}
+{100..0..-5}
+{a..z}
+{a..z..2}
+{z..a..-2}
+# make sure brace expansion handles ints > 2**31 - 1 using intmax_t
+{2147483645..2147483649}
+# unwanted zero-padding -- fixed post-bash-4.0
+{10..0..2}
+{10..0..-2}
+{-50..-0..5}
+# bad
+{1..10.f}
+{1..ff}
+{1..10..ff}
+{1.20..2}
+{1..20..f2}
+{1..20..2f}
+{1..2f..2}
+{1..ff..2}
+{1..ff}
+{1..f}
+{1..0f}
+{1..10f}
+{1..10.f}
+{1..10.f}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js
new file mode 100644
index 0000000000..3fcc185a7d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js
@@ -0,0 +1,9 @@
+var test = require('tape');
+var expand = require('..');
+
+test('ignores ${', function(t) {
+ t.deepEqual(expand('${1..3}'), ['${1..3}']);
+ t.deepEqual(expand('${a,b}${c,d}'), ['${a,b}${c,d}']);
+ t.deepEqual(expand('x${a,b}x${c,d}x'), ['x${a,b}x${c,d}x']);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js
new file mode 100644
index 0000000000..fd1132826a
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js
@@ -0,0 +1,9 @@
+var test = require('tape');
+var expand = require('..');
+
+test('empty option', function(t) {
+ t.deepEqual(expand('-v{,,,,}'), [
+ '-v', '-v', '-v', '-v', '-v'
+ ]);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh
new file mode 100644
index 0000000000..e040e664d9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+set -e
+
+# Bash 4.3 because of arbitrary need to pick a single standard.
+
+if [ "${BASH_VERSINFO[0]}" != "4" ] || [ "${BASH_VERSINFO[1]}" != "3" ]; then
+ echo "this script requires bash 4.3" >&2
+ exit 1
+fi
+
+CDPATH= cd "$(dirname "$0")"
+
+js='require("./")(process.argv[1]).join(" ")'
+
+cat cases.txt | \
+ while read case; do
+ if [ "${case:0:1}" = "#" ]; then
+ continue;
+ fi;
+ b="$($BASH -c 'for c in '"$case"'; do echo ["$c"]; done')"
+ echo "$case"
+ echo -n "$b><><><><";
+ done > bash-results.txt
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js
new file mode 100644
index 0000000000..8d434c23d4
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js
@@ -0,0 +1,15 @@
+var test = require('tape');
+var expand = require('..');
+
+test('negative increment', function(t) {
+ t.deepEqual(expand('{3..1}'), ['3', '2', '1']);
+ t.deepEqual(expand('{10..8}'), ['10', '9', '8']);
+ t.deepEqual(expand('{10..08}'), ['10', '09', '08']);
+ t.deepEqual(expand('{c..a}'), ['c', 'b', 'a']);
+
+ t.deepEqual(expand('{4..0..2}'), ['4', '2', '0']);
+ t.deepEqual(expand('{4..0..-2}'), ['4', '2', '0']);
+ t.deepEqual(expand('{e..a..2}'), ['e', 'c', 'a']);
+
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js
new file mode 100644
index 0000000000..54d1e88f68
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js
@@ -0,0 +1,15 @@
+var test = require('tape');
+var expand = require('..');
+
+test('nested', function(t) {
+ t.deepEqual(expand('{a,b{1..3},c}'), [
+ 'a', 'b1', 'b2', 'b3', 'c'
+ ]);
+ t.deepEqual(expand('{{A..Z},{a..z}}'),
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+ );
+ t.deepEqual(expand('ppp{,config,oe{,conf}}'), [
+ 'ppp', 'pppconfig', 'pppoe', 'pppoeconf'
+ ]);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js
new file mode 100644
index 0000000000..d5f62566c9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js
@@ -0,0 +1,9 @@
+var test = require('tape');
+var expand = require('..');
+
+test('order', function(t) {
+ t.deepEqual(expand('a{d,c,b}e'), [
+ 'ade', 'ace', 'abe'
+ ]);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js
new file mode 100644
index 0000000000..f830f7c466
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js
@@ -0,0 +1,12 @@
+var test = require('tape');
+var expand = require('..');
+
+test('pad', function(t) {
+ t.deepEqual(expand('{9..11}'), [
+ '9', '10', '11'
+ ]);
+ t.deepEqual(expand('{09..11}'), [
+ '09', '10', '11'
+ ]);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js
new file mode 100644
index 0000000000..3038fba741
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js
@@ -0,0 +1,7 @@
+var test = require('tape');
+var expand = require('..');
+
+test('x and y of same type', function(t) {
+ t.deepEqual(expand('{a..9}'), ['{a..9}']);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js
new file mode 100644
index 0000000000..18ee665fb9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js
@@ -0,0 +1,49 @@
+var test = require('tape');
+var expand = require('..');
+
+test('numeric sequences', function(t) {
+ t.deepEqual(expand('a{1..2}b{2..3}c'), [
+ 'a1b2c', 'a1b3c', 'a2b2c', 'a2b3c'
+ ]);
+ t.deepEqual(expand('{1..2}{2..3}'), [
+ '12', '13', '22', '23'
+ ]);
+ t.end();
+});
+
+test('numeric sequences with step count', function(t) {
+ t.deepEqual(expand('{0..8..2}'), [
+ '0', '2', '4', '6', '8'
+ ]);
+ t.deepEqual(expand('{1..8..2}'), [
+ '1', '3', '5', '7'
+ ]);
+ t.end();
+});
+
+test('numeric sequence with negative x / y', function(t) {
+ t.deepEqual(expand('{3..-2}'), [
+ '3', '2', '1', '0', '-1', '-2'
+ ]);
+ t.end();
+});
+
+test('alphabetic sequences', function(t) {
+ t.deepEqual(expand('1{a..b}2{b..c}3'), [
+ '1a2b3', '1a2c3', '1b2b3', '1b2c3'
+ ]);
+ t.deepEqual(expand('{a..b}{b..c}'), [
+ 'ab', 'ac', 'bb', 'bc'
+ ]);
+ t.end();
+});
+
+test('alphabetic sequences with step count', function(t) {
+ t.deepEqual(expand('{a..k..2}'), [
+ 'a', 'c', 'e', 'g', 'i', 'k'
+ ]);
+ t.deepEqual(expand('{b..k..2}'), [
+ 'b', 'd', 'f', 'h', 'j'
+ ]);
+ t.end();
+});
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json
new file mode 100644
index 0000000000..fa65e262a3
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json
@@ -0,0 +1,63 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me"
+ },
+ "name": "minimatch",
+ "description": "a glob matcher in javascript",
+ "version": "2.0.4",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/minimatch.git"
+ },
+ "main": "minimatch.js",
+ "scripts": {
+ "test": "tap test/*.js",
+ "prepublish": "browserify -o browser.js -e minimatch.js --bare"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "brace-expansion": "^1.0.0"
+ },
+ "devDependencies": {
+ "browserify": "^9.0.3",
+ "tap": ""
+ },
+ "license": {
+ "type": "MIT",
+ "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
+ },
+ "files": [
+ "minimatch.js",
+ "browser.js"
+ ],
+ "gitHead": "c75d17c23df3b6050338ee654a58490255b36ebc",
+ "bugs": {
+ "url": "https://github.com/isaacs/minimatch/issues"
+ },
+ "homepage": "https://github.com/isaacs/minimatch",
+ "_id": "minimatch@2.0.4",
+ "_shasum": "83bea115803e7a097a78022427287edb762fafed",
+ "_from": "minimatch@>=2.0.1 <3.0.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "83bea115803e7a097a78022427287edb762fafed",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json
new file mode 100644
index 0000000000..7a2cb4c634
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json
@@ -0,0 +1,72 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "name": "glob",
+ "description": "a little globber",
+ "version": "4.5.3",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "devDependencies": {
+ "mkdirp": "0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.5.0",
+ "tick": "0.0.6"
+ },
+ "scripts": {
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "npm run profclean && tap test/*.js",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
+ "bench": "bash benchmark.sh",
+ "prof": "bash prof.sh && cat profile.txt",
+ "benchclean": "bash benchclean.sh"
+ },
+ "license": "ISC",
+ "gitHead": "a4e461ab59a837eee80a4d8dbdbf5ae1054a646f",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-glob/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-glob",
+ "_id": "glob@4.5.3",
+ "_shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "_from": "glob@>=4.4.2 <5.0.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js b/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js
new file mode 100644
index 0000000000..f4f5e36d4b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/sync.js
@@ -0,0 +1,457 @@
+module.exports = globSync
+globSync.GlobSync = GlobSync
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var Glob = require('./glob.js').Glob
+var util = require('util')
+var path = require('path')
+var assert = require('assert')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var childrenIgnored = common.childrenIgnored
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ return new GlobSync(pattern, options).found
+}
+
+function GlobSync (pattern, options) {
+ if (!pattern)
+ throw new Error('must provide pattern')
+
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ if (!(this instanceof GlobSync))
+ return new GlobSync(pattern, options)
+
+ setopts(this, pattern, options)
+
+ if (this.noprocess)
+ return this
+
+ var n = this.minimatch.set.length
+ this.matches = new Array(n)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false)
+ }
+ this._finish()
+}
+
+GlobSync.prototype._finish = function () {
+ assert(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = fs.realpathSync(p, this.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
+ common.finish(this)
+}
+
+
+GlobSync.prototype._process = function (pattern, index, inGlobStar) {
+ assert(this instanceof GlobSync)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // See if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip processing
+ if (childrenIgnored(this, read))
+ return
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
+}
+
+
+GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
+ var entries = this._readdir(abs, inGlobStar)
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix.slice(-1) !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this.matches[index][e] = true
+ }
+ // This was the last one, and no stats were needed
+ return
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix)
+ newPattern = [prefix, e]
+ else
+ newPattern = [e]
+ this._process(newPattern.concat(remain), index, inGlobStar)
+ }
+}
+
+
+GlobSync.prototype._emitMatch = function (index, e) {
+ var abs = this._makeAbs(e)
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[this._makeAbs(e)]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+ if (this.stat)
+ this._stat(e)
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
+ var entries
+ var lstat
+ var stat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ // lstat failed, doesn't exist
+ return null
+ }
+
+ var isSym = lstat.isSymbolicLink()
+ this.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory())
+ this.cache[abs] = 'FILE'
+ else
+ entries = this._readdir(abs, false)
+
+ return entries
+}
+
+GlobSync.prototype._readdir = function (abs, inGlobStar) {
+ var entries
+
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return null
+
+ if (Array.isArray(c))
+ return c
+ }
+
+ try {
+ return this._readdirEntries(abs, fs.readdirSync(abs))
+ } catch (er) {
+ this._readdirError(abs, er)
+ return null
+ }
+}
+
+GlobSync.prototype._readdirEntries = function (abs, entries) {
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+
+ // mark and cache dir-ness
+ return entries
+}
+
+GlobSync.prototype._readdirError = function (f, er) {
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) throw er
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+}
+
+GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
+
+ var entries = this._readdir(abs, inGlobStar)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false)
+
+ var len = entries.length
+ var isSym = this.symlinks[abs]
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true)
+ }
+}
+
+GlobSync.prototype._processSimple = function (prefix, index) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var exists = this._stat(prefix)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this.matches[index][prefix] = true
+}
+
+// Returns either 'DIR', 'FILE', or false
+GlobSync.prototype._stat = function (f) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ var lstat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ return false
+ }
+
+ if (lstat.isSymbolicLink()) {
+ try {
+ stat = fs.statSync(abs)
+ } catch (er) {
+ stat = lstat
+ }
+ } else {
+ stat = lstat
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return false
+
+ return c
+}
+
+GlobSync.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+GlobSync.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
index 94b64535f2..bd516c2977 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
@@ -32,11 +32,27 @@
},
"license": "BSD",
"readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n",
- "readmeFilename": "README.md",
+ "_id": "sigmund@1.0.0",
+ "dist": {
+ "shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
+ "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ },
+ "_npmVersion": "1.1.48",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "_shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
+ "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz",
+ "_from": "sigmund@>=1.0.0 <1.1.0",
"bugs": {
"url": "https://github.com/isaacs/sigmund/issues"
},
- "homepage": "https://github.com/isaacs/sigmund",
- "_id": "sigmund@1.0.0",
- "_from": "sigmund@>=1.0.0 <1.1.0"
+ "homepage": "https://github.com/isaacs/sigmund"
}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
index 505767de85..8bf46ccae0 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
@@ -29,12 +29,30 @@
"type": "MIT",
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
},
- "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself if this option is set. When not set, an empty list\nis returned if there are no matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n",
- "readmeFilename": "README.md",
+ "gitHead": "b374a643976eb55cdc19c60b6dd51ebe9bcc607a",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
"homepage": "https://github.com/isaacs/minimatch",
"_id": "minimatch@1.0.0",
- "_from": "minimatch@>=1.0.0 <2.0.0"
+ "_shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
+ "_from": "minimatch@>=1.0.0 <2.0.0",
+ "_npmVersion": "1.4.21",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c b/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c
deleted file mode 100644
index 05c4c39887..0000000000
--- a/deps/npm/node_modules/node-gyp/src/win_delay_load_hook.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * When this file is linked to a DLL, it sets up a delay-load hook that
- * intervenes when the DLL is trying to load 'node.exe' or 'iojs.exe'
- * dynamically. Instead of trying to locate the .exe file it'll just return
- * a handle to the process image.
- *
- * This allows compiled addons to work when node.exe or iojs.exe is renamed.
- */
-
-#ifdef _MSC_VER
-
-#define WIN32_LEAN_AND_MEAN
-#include
-
-#include
-#include
-
-static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* info) {
- if (event != dliNotePreLoadLibrary)
- return NULL;
-
- if (_stricmp(info->szDll, "iojs.exe") != 0 &&
- _stricmp(info->szDll, "node.exe") != 0)
- return NULL;
-
- HMODULE m = GetModuleHandle(NULL);
- return (FARPROC) m;
-}
-
-PfnDliHook __pfnDliNotifyHook2 = load_exe_hook;
-
-#endif
diff --git a/deps/npm/node_modules/npm-package-arg/README.md b/deps/npm/node_modules/npm-package-arg/README.md
index 602277a378..d37b35533a 100644
--- a/deps/npm/node_modules/npm-package-arg/README.md
+++ b/deps/npm/node_modules/npm-package-arg/README.md
@@ -1,26 +1,54 @@
# npm-package-arg
-Parse the things that can be arguments to `npm install`
+Parse package name and specifier passed to commands like `npm install` or
+`npm cache add`. This just parses the text given-- it's worth noting that
+`npm` has further logic it applies by looking at your disk to figure out
+what ambiguous specifiers are. If you want that logic, please see
+[realize-package-specifier].
-Takes an argument like `foo@1.2`, or `foo@user/foo`, or
-`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`, and
-figures out what type of thing it is.
+[realize-package-specifier]: https://www.npmjs.org/package/realize-package-specifier
-## USAGE
+Arguments look like: `foo@1.2`, `@bar/foo@1.2`, `foo@user/foo`, `http://x.com/foo.tgz`,
+`git+https://github.com/user/foo`, `bitbucket:user/foo`, `foo.tar.gz` or `bar`
+
+## EXAMPLES
```javascript
var assert = require("assert")
var npa = require("npm-package-arg")
// Pass in the descriptor, and it'll return an object
-var parsed = npa("foo@1.2")
+var parsed = npa("@bar/foo@1.2")
+
+// Returns an object like:
+{
+ raw: '@bar/foo@1.2', // what was passed in
+ name: "@bar/foo", // the name of the package
+ scope: "@bar", // the private scope of the package, or null
+ type: "range", // the type of specifier this is
+ spec: ">=1.2.0 <1.3.0" // the expanded specifier
+ rawSpec: "1.2" // the specifier as passed in
+ }
+
+// Parsing urls pointing at hosted git services produces a variation:
+var parsed = npa("git+https://github.com/user/foo")
// Returns an object like:
-// {
-// name: "foo", // The bit in front of the @
-// type: "range", // the type of descriptor this is
-// spec: "1.2" // the specifier for this descriptor
-// }
+{
+ raw: 'git+https://github.com/user/foo',
+ scope: null,
+ name: null,
+ rawSpec: 'git+https://github.com/user/foo',
+ spec: 'user/foo',
+ type: 'hosted',
+ hosted: {
+ type: 'github',
+ ssh: 'git@github.com:user/foo.git',
+ sshurl: 'git+ssh://git@github.com/user/foo.git',
+ https: 'https://github.com/user/foo.git',
+ directUrl: 'https://raw.githubusercontent.com/user/foo/master/package.json'
+ }
+}
// Completely unreasonable invalid garbage throws an error
// Make sure you wrap this in a try/catch if you have not
@@ -30,23 +58,41 @@ assert.throws(function() {
})
```
-For more examples, see the test file.
+## USING
+
+`var npa = require('npm-package-arg')`
+
+* var result = npa(*arg*)
+
+Parses *arg* and returns a result object detailing what *arg* is.
+
+*arg* -- a package descriptor, like: `foo@1.2`, or `foo@user/foo`, or
+`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`
-## Result Objects
+## RESULT OBJECT
The objects that are returned by npm-package-arg contain the following
-fields:
+keys:
* `name` - If known, the `name` field expected in the resulting pkg.
* `type` - One of the following strings:
* `git` - A git repo
- * `github` - A github shorthand, like `user/project`
+ * `hosted` - A hosted project, from github, bitbucket or gitlab. Originally
+ either a full url pointing at one of these services or a shorthand like
+ `user/project` or `github:user/project` for github or `bitbucket:user/project`
+ for bitbucket.
* `tag` - A tagged version, like `"foo@latest"`
* `version` - A specific version number, like `"foo@1.2.3"`
* `range` - A version range, like `"foo@2.x"`
* `local` - A local file or folder path
* `remote` - An http url (presumably to a tgz)
* `spec` - The "thing". URL, the range, git repo, etc.
+* `hosted` - If type=hosted this will be an object with the following keys:
+ * `type` - github, bitbucket or gitlab
+ * `ssh` - The ssh path for this git repo
+ * `sshUrl` - The ssh URL for this git repo
+ * `httpsUrl` - The HTTPS URL for this git repo
+ * `directUrl` - The URL for the package.json in this git repo
* `raw` - The original un-modified string that was provided.
* `rawSpec` - The part after the `name@...`, as it was originally
provided.
diff --git a/deps/npm/node_modules/npm-package-arg/npa.js b/deps/npm/node_modules/npm-package-arg/npa.js
index 8333c75f44..883c5401b4 100644
--- a/deps/npm/node_modules/npm-package-arg/npa.js
+++ b/deps/npm/node_modules/npm-package-arg/npa.js
@@ -3,14 +3,15 @@ var assert = require("assert")
var util = require("util")
var semver = require("semver")
var path = require("path")
+var HostedGit = require("hosted-git-info")
module.exports = npa
var isWindows = process.platform === "win32" || global.FAKE_WINDOWS
-var slashRe = isWindows ? /\\|\// : /\//
+var slashRe = isWindows ? /\\|[/]/ : /[/]/
-var parseName = /^(?:@([^\/]+?)\/)?([^\/]+?)$/
-var nameAt = /^(@([^\/]+?)\/)?([^\/]+?)@/
+var parseName = /^(?:@([^/]+?)[/])?([^/]+?)$/
+var nameAt = /^(@([^/]+?)[/])?([^/]+?)@/
var debug = util.debuglog ? util.debuglog("npa")
: /\bnpa\b/i.test(process.env.NODE_DEBUG || "")
? function () {
@@ -25,7 +26,7 @@ function validName (name) {
var n = name.trim()
if (!n || n.charAt(0) === "."
|| !n.match(/^[a-zA-Z0-9]/)
- || n.match(/[\/\(\)&\?#\|<>@:%\s\\\*'"!~`]/)
+ || n.match(/[/()&?#|<>@:%\s\\*'"!~`]/)
|| n.toLowerCase() === "node_modules"
|| n !== encodeURIComponent(n)
|| n.toLowerCase() === "favicon.ico") {
@@ -70,20 +71,11 @@ function npa (arg) {
urlparse = {}
}
- if (urlparse.protocol) {
+ if (urlparse.protocol || HostedGit.fromUrl(arg)) {
return parseUrl(res, arg, urlparse)
}
- // parse git stuff
- // parse tag/range/local/remote
-
- if (maybeGitHubShorthand(arg)) {
- res.type = "github"
- res.spec = arg
- return res
- }
-
- // at this point, it's not a url, and not github
+ // at this point, it's not a url, and not hosted
// If it's a valid name, and doesn't already have a name, then assume
// $name@"" range
//
@@ -132,19 +124,20 @@ function parseLocal (res, arg) {
res.spec = path.resolve(arg)
}
-function maybeGitHubShorthand (arg) {
- // Note: This does not fully test the git ref format.
- // See https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
- //
- // The only way to do this properly would be to shell out to
- // git-check-ref-format, and as this is a fast sync function,
- // we don't want to do that. Just let git fail if it turns
- // out that the commit-ish is invalid.
- // GH usernames cannot start with . or -
- return /^[^@%\/\s\.-][^@%\/\s]*\/[^@\s\/%]+(?:#.*)?$/.test(arg)
-}
-
function parseUrl (res, arg, urlparse) {
+ var gitHost = HostedGit.fromUrl(arg)
+ if (gitHost) {
+ res.type = "hosted"
+ res.spec = gitHost.toString(),
+ res.hosted = {
+ type: gitHost.type,
+ ssh: gitHost.ssh(),
+ sshUrl: gitHost.sshurl(),
+ httpsUrl: gitHost.https(),
+ directUrl: gitHost.file("package.json")
+ }
+ return res
+ }
// check the protocol, and then see if it's git or not
switch (urlparse.protocol) {
case "git:":
@@ -154,23 +147,23 @@ function parseUrl (res, arg, urlparse) {
case "git+ftp:":
case "git+ssh:":
case "git+file:":
- res.type = 'git'
- res.spec = arg.replace(/^git\+/, '')
+ res.type = "git"
+ res.spec = arg.replace(/^git[+]/, "")
break
- case 'http:':
- case 'https:':
- res.type = 'remote'
+ case "http:":
+ case "https:":
+ res.type = "remote"
res.spec = arg
break
- case 'file:':
- res.type = 'local'
+ case "file:":
+ res.type = "local"
res.spec = urlparse.pathname
- break;
+ break
default:
- throw new Error('Unsupported URL Type: ' + arg)
+ throw new Error("Unsupported URL Type: " + arg)
break
}
@@ -181,7 +174,8 @@ function parseUrl (res, arg, urlparse) {
function Result () {
if (!(this instanceof Result)) return new Result
}
-Result.prototype.name = null
-Result.prototype.type = null
-Result.prototype.spec = null
-Result.prototype.raw = null
+Result.prototype.name = null
+Result.prototype.type = null
+Result.prototype.spec = null
+Result.prototype.raw = null
+Result.prototype.hosted = null
diff --git a/deps/npm/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-package-arg/package.json
index babbd7312a..b742b6f4d2 100644
--- a/deps/npm/node_modules/npm-package-arg/package.json
+++ b/deps/npm/node_modules/npm-package-arg/package.json
@@ -1,12 +1,13 @@
{
"name": "npm-package-arg",
- "version": "2.1.3",
+ "version": "3.1.1",
"description": "Parse the things that can be arguments to `npm install`",
"main": "npa.js",
"directories": {
"test": "test"
},
"dependencies": {
+ "hosted-git-info": "^1.5.3",
"semver": "4"
},
"devDependencies": {
@@ -29,10 +30,34 @@
"url": "https://github.com/npm/npm-package-arg/issues"
},
"homepage": "https://github.com/npm/npm-package-arg",
- "readme": "# npm-package-arg\n\nParse the things that can be arguments to `npm install`\n\nTakes an argument like `foo@1.2`, or `foo@user/foo`, or\n`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`, and\nfigures out what type of thing it is.\n\n## USAGE\n\n```javascript\nvar assert = require(\"assert\")\nvar npa = require(\"npm-package-arg\")\n\n// Pass in the descriptor, and it'll return an object\nvar parsed = npa(\"foo@1.2\")\n\n// Returns an object like:\n// {\n// name: \"foo\", // The bit in front of the @\n// type: \"range\", // the type of descriptor this is\n// spec: \"1.2\" // the specifier for this descriptor\n// }\n\n// Completely unreasonable invalid garbage throws an error\n// Make sure you wrap this in a try/catch if you have not\n// already sanitized the inputs!\nassert.throws(function() {\n npa(\"this is not \\0 a valid package name or url\")\n})\n```\n\nFor more examples, see the test file.\n\n## Result Objects\n\nThe objects that are returned by npm-package-arg contain the following\nfields:\n\n* `name` - If known, the `name` field expected in the resulting pkg.\n* `type` - One of the following strings:\n * `git` - A git repo\n * `github` - A github shorthand, like `user/project`\n * `tag` - A tagged version, like `\"foo@latest\"`\n * `version` - A specific version number, like `\"foo@1.2.3\"`\n * `range` - A version range, like `\"foo@2.x\"`\n * `local` - A local file or folder path\n * `remote` - An http url (presumably to a tgz)\n* `spec` - The \"thing\". URL, the range, git repo, etc.\n* `raw` - The original un-modified string that was provided.\n* `rawSpec` - The part after the `name@...`, as it was originally\n provided.\n* `scope` - If a name is something like `@org/module` then the `scope`\n field will be set to `org`. If it doesn't have a scoped name, then\n scope is `null`.\n",
- "readmeFilename": "README.md",
- "gitHead": "9aaabc2aae746371a05f54cdb57a5f9ada003d8f",
- "_id": "npm-package-arg@2.1.3",
- "_shasum": "dfba34bd82dd327c10cb43a65c8db6ef0b812bf7",
- "_from": "npm-package-arg@~2.1.3"
+ "gitHead": "1dc802d4b449f1599c7275bb948c6ecd265c23a8",
+ "_id": "npm-package-arg@3.1.1",
+ "_shasum": "c9e5f7587f8484d1372a9b386fbf8b2443fc1bdb",
+ "_from": "npm-package-arg@>=3.1.1 <3.2.0",
+ "_npmVersion": "2.6.1",
+ "_nodeVersion": "1.1.0",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "c9e5f7587f8484d1372a9b386fbf8b2443fc1bdb",
+ "tarball": "http://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.1.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.1.1.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/npm-package-arg/test/basic.js b/deps/npm/node_modules/npm-package-arg/test/basic.js
index 98206db205..4991ffcd3e 100644
--- a/deps/npm/node_modules/npm-package-arg/test/basic.js
+++ b/deps/npm/node_modules/npm-package-arg/test/basic.js
@@ -63,11 +63,11 @@ require("tap").test("basic", function (t) {
rawSpec: "=v1.2.3"
},
- "git+ssh://git@github.com/user/foo#1.2.3": {
+ "git+ssh://git@notgithub.com/user/foo#1.2.3": {
name: null,
type: "git",
- spec: "ssh://git@github.com/user/foo#1.2.3",
- raw: "git+ssh://git@github.com/user/foo#1.2.3"
+ spec: "ssh://git@notgithub.com/user/foo#1.2.3",
+ raw: "git+ssh://git@notgithub.com/user/foo#1.2.3"
},
"git+file://path/to/repo#1.2.3": {
@@ -77,19 +77,19 @@ require("tap").test("basic", function (t) {
raw: "git+file://path/to/repo#1.2.3"
},
- "git://github.com/user/foo": {
+ "git://notgithub.com/user/foo": {
name: null,
type: "git",
- spec: "git://github.com/user/foo",
- raw: "git://github.com/user/foo"
+ spec: "git://notgithub.com/user/foo",
+ raw: "git://notgithub.com/user/foo"
},
- "@foo/bar@git+ssh://github.com/user/foo": {
+ "@foo/bar@git+ssh://notgithub.com/user/foo": {
name: "@foo/bar",
scope: "@foo",
- spec: "ssh://github.com/user/foo",
- rawSpec: "git+ssh://github.com/user/foo",
- raw: "@foo/bar@git+ssh://github.com/user/foo"
+ spec: "ssh://notgithub.com/user/foo",
+ rawSpec: "git+ssh://notgithub.com/user/foo",
+ raw: "@foo/bar@git+ssh://notgithub.com/user/foo"
},
"/path/to/foo": {
@@ -134,41 +134,6 @@ require("tap").test("basic", function (t) {
raw: "https://server.com/foo.tgz"
},
- "user/foo-js": {
- name: null,
- type: "github",
- spec: "user/foo-js",
- raw: "user/foo-js"
- },
-
- "user/foo-js#bar/baz": {
- name: null,
- type: "github",
- spec: "user/foo-js#bar/baz",
- raw: "user/foo-js#bar/baz"
- },
-
- "user..blerg--/..foo-js# . . . . . some . tags / / /": {
- name: null,
- type: "github",
- spec: "user..blerg--/..foo-js# . . . . . some . tags / / /",
- raw: "user..blerg--/..foo-js# . . . . . some . tags / / /"
- },
-
- "user/foo-js#bar/baz/bin": {
- name: null,
- type: "github",
- spec: "user/foo-js#bar/baz/bin",
- raw: "user/foo-js#bar/baz/bin"
- },
-
- "foo@user/foo-js": {
- name: "foo",
- type: "github",
- spec: "user/foo-js",
- raw: "foo@user/foo-js"
- },
-
"foo@latest": {
name: "foo",
type: "tag",
@@ -186,8 +151,8 @@ require("tap").test("basic", function (t) {
Object.keys(tests).forEach(function (arg) {
var res = npa(arg)
- t.type(res, "Result")
- t.has(res, tests[arg])
+ t.type(res, "Result", arg + " is result")
+ t.has(res, tests[arg], arg + " matches expectations")
})
// Completely unreasonable invalid garbage throws an error
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/bitbucket.js b/deps/npm/node_modules/npm-package-arg/test/bitbucket.js
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/bitbucket.js
rename to deps/npm/node_modules/npm-package-arg/test/bitbucket.js
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/github.js b/deps/npm/node_modules/npm-package-arg/test/github.js
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/github.js
rename to deps/npm/node_modules/npm-package-arg/test/github.js
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/gitlab.js b/deps/npm/node_modules/npm-package-arg/test/gitlab.js
similarity index 100%
rename from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/gitlab.js
rename to deps/npm/node_modules/npm-package-arg/test/gitlab.js
diff --git a/deps/npm/node_modules/npm-package-arg/test/windows.js b/deps/npm/node_modules/npm-package-arg/test/windows.js
index 51629fe075..e3c8ba6b59 100644
--- a/deps/npm/node_modules/npm-package-arg/test/windows.js
+++ b/deps/npm/node_modules/npm-package-arg/test/windows.js
@@ -6,28 +6,28 @@ var path = require("path")
var cases = {
"C:\\x\\y\\z": {
- raw: 'C:\\x\\y\\z',
+ raw: "C:\\x\\y\\z",
scope: null,
name: null,
- rawSpec: 'C:\\x\\y\\z',
- spec: path.resolve('C:\\x\\y\\z'),
- type: 'local'
+ rawSpec: "C:\\x\\y\\z",
+ spec: path.resolve("C:\\x\\y\\z"),
+ type: "local"
},
"foo@C:\\x\\y\\z": {
- raw: 'foo@C:\\x\\y\\z',
+ raw: "foo@C:\\x\\y\\z",
scope: null,
- name: 'foo',
- rawSpec: 'C:\\x\\y\\z',
- spec: path.resolve('C:\\x\\y\\z'),
- type: 'local'
+ name: "foo",
+ rawSpec: "C:\\x\\y\\z",
+ spec: path.resolve("C:\\x\\y\\z"),
+ type: "local"
},
"foo@/foo/bar/baz": {
- raw: 'foo@/foo/bar/baz',
+ raw: "foo@/foo/bar/baz",
scope: null,
- name: 'foo',
- rawSpec: '/foo/bar/baz',
- spec: path.resolve('/foo/bar/baz'),
- type: 'local'
+ name: "foo",
+ rawSpec: "/foo/bar/baz",
+ spec: path.resolve("/foo/bar/baz"),
+ type: "local"
}
}
diff --git a/deps/npm/node_modules/npm-registry-client/index.js b/deps/npm/node_modules/npm-registry-client/index.js
index 6ea288b0a6..9b99a23738 100644
--- a/deps/npm/node_modules/npm-registry-client/index.js
+++ b/deps/npm/node_modules/npm-registry-client/index.js
@@ -2,23 +2,22 @@
module.exports = RegClient
-var join = require("path").join
- , fs = require("graceful-fs")
+var join = require('path').join
+var fs = require('graceful-fs')
var npmlog
try {
- npmlog = require("npmlog")
-}
-catch (er) {
+ npmlog = require('npmlog')
+} catch (er) {
npmlog = {
- error : noop,
- warn : noop,
- info : noop,
- verbose : noop,
- silly : noop,
- http : noop,
- pause : noop,
- resume : noop
+ error: noop,
+ warn: noop,
+ info: noop,
+ verbose: noop,
+ silly: noop,
+ http: noop,
+ pause: noop,
+ resume: noop
}
}
@@ -36,20 +35,20 @@ function RegClient (config) {
if (this.config.ssl.strict === undefined) this.config.ssl.strict = true
this.config.retry = this.config.retry || {}
- if (typeof this.config.retry.retries !== "number") this.config.retry.retries = 2
- if (typeof this.config.retry.factor !== "number") this.config.retry.factor = 10
- if (typeof this.config.retry.minTimeout !== "number") this.config.retry.minTimeout = 10000
- if (typeof this.config.retry.maxTimeout !== "number") this.config.retry.maxTimeout = 60000
+ if (typeof this.config.retry.retries !== 'number') this.config.retry.retries = 2
+ if (typeof this.config.retry.factor !== 'number') this.config.retry.factor = 10
+ if (typeof this.config.retry.minTimeout !== 'number') this.config.retry.minTimeout = 10000
+ if (typeof this.config.retry.maxTimeout !== 'number') this.config.retry.maxTimeout = 60000
- this.config.userAgent = this.config.userAgent || "node/" + process.version
- this.config.defaultTag = this.config.defaultTag || "latest"
+ this.config.userAgent = this.config.userAgent || 'node/' + process.version
+ this.config.defaultTag = this.config.defaultTag || 'latest'
this.log = this.config.log || npmlog
delete this.config.log
var client = this
- fs.readdirSync(join(__dirname, "lib")).forEach(function (f) {
- var entry = join(__dirname, "lib", f)
+ fs.readdirSync(join(__dirname, 'lib')).forEach(function (f) {
+ var entry = join(__dirname, 'lib', f)
// lib/group-name/operation.js -> client.groupName.operation
var stat = fs.statSync(entry)
@@ -62,14 +61,14 @@ function RegClient (config) {
// keep client.groupName.operation from stomping client.operation
client[groupName] = Object.create(client)
}
- var name = f.replace(/\.js$/, "").replace(/-([a-z])/, dashToCamel)
+ var name = f.replace(/\.js$/, '').replace(/-([a-z])/, dashToCamel)
client[groupName][name] = require(join(entry, f))
})
return
}
if (!f.match(/\.js$/)) return
- var name = f.replace(/\.js$/, "").replace(/-([a-z])/, dashToCamel)
+ var name = f.replace(/\.js$/, '').replace(/-([a-z])/, dashToCamel)
client[name] = require(entry)
})
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/access.js b/deps/npm/node_modules/npm-registry-client/lib/access.js
index c642d16f3f..b671f6b5f2 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/access.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/access.js
@@ -1,30 +1,30 @@
module.exports = access
-var assert = require("assert")
+var assert = require('assert')
function access (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to access")
- assert(params && typeof params === "object", "must pass params to access")
- assert(typeof cb === "function", "muss pass callback to access")
+ assert(typeof uri === 'string', 'must pass registry URI to access')
+ assert(params && typeof params === 'object', 'must pass params to access')
+ assert(typeof cb === 'function', 'muss pass callback to access')
- assert(typeof params.level === "string", "must pass level to access")
+ assert(typeof params.level === 'string', 'must pass level to access')
assert(
- ["public", "restricted"].indexOf(params.level) !== -1,
+ ['public', 'restricted'].indexOf(params.level) !== -1,
"access level must be either 'public' or 'restricted'"
)
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to access"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to access'
)
var body = {
- access : params.level
+ access: params.level
}
var options = {
- method : "POST",
- body : JSON.stringify(body),
- auth : params.auth
+ method: 'POST',
+ body: JSON.stringify(body),
+ auth: params.auth
}
this.request(uri, options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/adduser.js b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
index 5f4abc8efd..bf0a048578 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/adduser.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
@@ -1,45 +1,45 @@
module.exports = adduser
-var url = require("url")
-var assert = require("assert")
+var url = require('url')
+var assert = require('assert')
function adduser (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to adduser")
+ assert(typeof uri === 'string', 'must pass registry URI to adduser')
assert(
- params && typeof params === "object",
- "must pass params to adduser"
+ params && typeof params === 'object',
+ 'must pass params to adduser'
)
- assert(typeof cb === "function", "must pass callback to adduser")
+ assert(typeof cb === 'function', 'must pass callback to adduser')
- assert(params.auth && typeof params.auth, "must pass auth to adduser")
+ assert(params.auth && typeof params.auth, 'must pass auth to adduser')
var auth = params.auth
- assert(typeof auth.username === "string", "must include username in auth")
- assert(typeof auth.password === "string", "must include password in auth")
- assert(typeof auth.email === "string", "must include email in auth")
+ assert(typeof auth.username === 'string', 'must include username in auth')
+ assert(typeof auth.password === 'string', 'must include password in auth')
+ assert(typeof auth.email === 'string', 'must include email in auth')
// normalize registry URL
- if (uri.slice(-1) !== "/") uri += "/"
+ if (uri.slice(-1) !== '/') uri += '/'
var username = auth.username.trim()
var password = auth.password.trim()
var email = auth.email.trim()
// validation
- if (!username) return cb(new Error("No username supplied."))
- if (!password) return cb(new Error("No password supplied."))
- if (!email) return cb(new Error("No email address supplied."))
+ if (!username) return cb(new Error('No username supplied.'))
+ if (!password) return cb(new Error('No password supplied.'))
+ if (!email) return cb(new Error('No email address supplied.'))
if (!email.match(/^[^@]+@[^\.]+\.[^\.]+/)) {
- return cb(new Error("Please use a real email address."))
+ return cb(new Error('Please use a real email address.'))
}
var userobj = {
- _id : "org.couchdb.user:"+username,
- name : username,
- password : password,
- email : email,
- type : "user",
- roles : [],
- date : new Date().toISOString()
+ _id: 'org.couchdb.user:' + username,
+ name: username,
+ password: password,
+ email: email,
+ type: 'user',
+ roles: [],
+ date: new Date().toISOString()
}
var token = this.config.couchToken
@@ -48,22 +48,22 @@ function adduser (uri, params, cb) {
cb = done.call(this, token, cb)
var logObj = Object.keys(userobj).map(function (k) {
- if (k === "password") return [k, "XXXXX"]
+ if (k === 'password') return [k, 'XXXXX']
return [k, userobj[k]]
}).reduce(function (s, kv) {
s[kv[0]] = kv[1]
return s
}, {})
- this.log.verbose("adduser", "before first PUT", logObj)
+ this.log.verbose('adduser', 'before first PUT', logObj)
var client = this
- uri = url.resolve(uri, "-/user/org.couchdb.user:" + encodeURIComponent(username))
+ uri = url.resolve(uri, '-/user/org.couchdb.user:' + encodeURIComponent(username))
var options = {
- method : "PUT",
- body : userobj,
- auth : auth
+ method: 'PUT',
+ body: userobj,
+ auth: auth
}
this.request(
uri,
@@ -73,21 +73,21 @@ function adduser (uri, params, cb) {
return cb(error, data, json, response)
}
- client.log.verbose("adduser", "update existing user")
+ client.log.verbose('adduser', 'update existing user')
return client.request(
- uri+"?write=true",
- { body : userobj, auth : auth },
+ uri + '?write=true',
+ { body: userobj, auth: auth },
function (er, data, json, response) {
if (er || data.error) {
return cb(er, data, json, response)
}
Object.keys(data).forEach(function (k) {
- if (!userobj[k] || k === "roles") {
+ if (!userobj[k] || k === 'roles') {
userobj[k] = data[k]
}
})
- client.log.verbose("adduser", "userobj", logObj)
- client.request(uri+"/-rev/"+userobj._rev, options, cb)
+ client.log.verbose('adduser', 'userobj', logObj)
+ client.request(uri + '/-rev/' + userobj._rev, options, cb)
}
)
}
@@ -107,19 +107,19 @@ function adduser (uri, params, cb) {
}
}
- client.log.verbose("adduser", "back", [error, data, json])
+ client.log.verbose('adduser', 'back', [error, data, json])
if (!error) {
error = new Error(
- (response && response.statusCode || "") + " " +
- "Could not create user\n" + JSON.stringify(data)
+ (response && response.statusCode || '') + ' ' +
+ 'Could not create user\n' + JSON.stringify(data)
)
}
if (response && (response.statusCode === 401 || response.statusCode === 403)) {
- client.log.warn("adduser", "Incorrect username or password\n" +
- "You can reset your account by visiting:\n" +
- "\n" +
- " https://npmjs.org/forgot\n")
+ client.log.warn('adduser', 'Incorrect username or password\n' +
+ 'You can reset your account by visiting:\n' +
+ '\n' +
+ ' https://npmjs.org/forgot\n')
}
return cb(error)
diff --git a/deps/npm/node_modules/npm-registry-client/lib/attempt.js b/deps/npm/node_modules/npm-registry-client/lib/attempt.js
index 7f289efeb8..d41bbc4fae 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/attempt.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/attempt.js
@@ -1,16 +1,19 @@
-var retry = require("retry")
+var retry = require('retry')
module.exports = attempt
-function attempt(cb) {
+function attempt (cb) {
// Tuned to spread 3 attempts over about a minute.
// See formula at .
var operation = retry.operation(this.config.retry)
var client = this
operation.attempt(function (currentAttempt) {
- client.log.info("attempt", "registry request try #"+currentAttempt+
- " at "+(new Date()).toLocaleTimeString())
+ client.log.info(
+ 'attempt',
+ 'registry request try #' + currentAttempt +
+ ' at ' + (new Date()).toLocaleTimeString()
+ )
cb(operation)
})
diff --git a/deps/npm/node_modules/npm-registry-client/lib/authify.js b/deps/npm/node_modules/npm-registry-client/lib/authify.js
index 4d1a4dd4ab..0a259757b3 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/authify.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/authify.js
@@ -2,8 +2,8 @@ module.exports = authify
function authify (authed, parsed, headers, credentials) {
if (credentials && credentials.token) {
- this.log.verbose("request", "using bearer token for auth")
- headers.authorization = "Bearer " + credentials.token
+ this.log.verbose('request', 'using bearer token for auth')
+ headers.authorization = 'Bearer ' + credentials.token
return null
}
@@ -12,11 +12,10 @@ function authify (authed, parsed, headers, credentials) {
if (credentials && credentials.username && credentials.password) {
var username = encodeURIComponent(credentials.username)
var password = encodeURIComponent(credentials.password)
- parsed.auth = username + ":" + password
- }
- else {
+ parsed.auth = username + ':' + password
+ } else {
return new Error(
- "This request requires auth credentials. Run `npm login` and repeat the request."
+ 'This request requires auth credentials. Run `npm login` and repeat the request.'
)
}
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/deprecate.js b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
index c018570d96..04d311cc0c 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
@@ -1,19 +1,19 @@
module.exports = deprecate
-var assert = require("assert")
-var url = require("url")
-var semver = require("semver")
+var assert = require('assert')
+var url = require('url')
+var semver = require('semver')
function deprecate (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to deprecate")
- assert(params && typeof params === "object", "must pass params to deprecate")
- assert(typeof cb === "function", "must pass callback to deprecate")
+ assert(typeof uri === 'string', 'must pass registry URI to deprecate')
+ assert(params && typeof params === 'object', 'must pass params to deprecate')
+ assert(typeof cb === 'function', 'must pass callback to deprecate')
- assert(typeof params.version === "string", "must pass version to deprecate")
- assert(typeof params.message === "string", "must pass message to deprecate")
+ assert(typeof params.version === 'string', 'must pass version to deprecate')
+ assert(typeof params.message === 'string', 'must pass message to deprecate')
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to deprecate"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to deprecate'
)
var version = params.version
@@ -21,10 +21,10 @@ function deprecate (uri, params, cb) {
var auth = params.auth
if (semver.validRange(version) === null) {
- return cb(new Error("invalid version range: "+version))
+ return cb(new Error('invalid version range: ' + version))
}
- this.get(uri + "?write=true", { auth : auth }, function (er, data) {
+ this.get(uri + '?write=true', { auth: auth }, function (er, data) {
if (er) return cb(er)
// filter all the versions that match
Object.keys(data.versions).filter(function (v) {
@@ -34,9 +34,9 @@ function deprecate (uri, params, cb) {
})
// now update the doc on the registry
var options = {
- method : "PUT",
- body : data,
- auth : auth
+ method: 'PUT',
+ body: data,
+ auth: auth
}
this.request(url.resolve(uri, data._id), options, cb)
}.bind(this))
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js
index 7443cbca2f..924199ad1e 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js
@@ -1,43 +1,43 @@
module.exports = add
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
-var npa = require("npm-package-arg")
+var npa = require('npm-package-arg')
function add (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to distTags.add")
+ assert(typeof uri === 'string', 'must pass registry URI to distTags.add')
assert(
- params && typeof params === "object",
- "must pass params to distTags.add"
+ params && typeof params === 'object',
+ 'must pass params to distTags.add'
)
- assert(typeof cb === "function", "muss pass callback to distTags.add")
+ assert(typeof cb === 'function', 'muss pass callback to distTags.add')
assert(
- typeof params.package === "string",
- "must pass package name to distTags.add"
+ typeof params.package === 'string',
+ 'must pass package name to distTags.add'
)
assert(
- typeof params.distTag === "string",
- "must pass package distTag name to distTags.add"
+ typeof params.distTag === 'string',
+ 'must pass package distTag name to distTags.add'
)
assert(
- typeof params.version === "string",
- "must pass version to be mapped to distTag to distTags.add"
+ typeof params.version === 'string',
+ 'must pass version to be mapped to distTag to distTags.add'
)
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to distTags.add"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to distTags.add'
)
var p = npa(params.package)
- var package = p.scope ? params.package.replace("/", "%2f") : params.package
- var rest = "-/package/"+package+"/dist-tags/"+params.distTag
+ var pkg = p.scope ? params.package.replace('/', '%2f') : params.package
+ var rest = '-/package/' + pkg + '/dist-tags/' + params.distTag
var options = {
- method : "PUT",
- body : JSON.stringify(params.version),
- auth : params.auth
+ method: 'PUT',
+ body: JSON.stringify(params.version),
+ auth: params.auth
}
this.request(url.resolve(uri, rest), options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js
index 46bb33f4d5..558e2cf829 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js
@@ -1,37 +1,37 @@
module.exports = fetch
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
-var npa = require("npm-package-arg")
+var npa = require('npm-package-arg')
function fetch (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to distTags.fetch")
+ assert(typeof uri === 'string', 'must pass registry URI to distTags.fetch')
assert(
- params && typeof params === "object",
- "must pass params to distTags.fetch"
+ params && typeof params === 'object',
+ 'must pass params to distTags.fetch'
)
- assert(typeof cb === "function", "muss pass callback to distTags.fetch")
+ assert(typeof cb === 'function', 'muss pass callback to distTags.fetch')
assert(
- typeof params.package === "string",
- "must pass package name to distTags.fetch"
+ typeof params.package === 'string',
+ 'must pass package name to distTags.fetch'
)
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to distTags.fetch"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to distTags.fetch'
)
var p = npa(params.package)
- var package = p.scope ? params.package.replace("/", "%2f") : params.package
- var rest = "-/package/"+package+"/dist-tags"
+ var pkg = p.scope ? params.package.replace('/', '%2f') : params.package
+ var rest = '-/package/' + pkg + '/dist-tags'
var options = {
- method : "GET",
- auth : params.auth
+ method: 'GET',
+ auth: params.auth
}
this.request(url.resolve(uri, rest), options, function (er, data) {
- if (data && typeof data === "object") delete data._etag
+ if (data && typeof data === 'object') delete data._etag
cb(er, data)
})
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js
index dbae245ecf..d2bdda05da 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js
@@ -1,38 +1,38 @@
module.exports = rm
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
-var npa = require("npm-package-arg")
+var npa = require('npm-package-arg')
function rm (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to distTags.rm")
+ assert(typeof uri === 'string', 'must pass registry URI to distTags.rm')
assert(
- params && typeof params === "object",
- "must pass params to distTags.rm"
+ params && typeof params === 'object',
+ 'must pass params to distTags.rm'
)
- assert(typeof cb === "function", "muss pass callback to distTags.rm")
+ assert(typeof cb === 'function', 'muss pass callback to distTags.rm')
assert(
- typeof params.package === "string",
- "must pass package name to distTags.rm"
+ typeof params.package === 'string',
+ 'must pass package name to distTags.rm'
)
assert(
- typeof params.distTag === "string",
- "must pass package distTag name to distTags.rm"
+ typeof params.distTag === 'string',
+ 'must pass package distTag name to distTags.rm'
)
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to distTags.rm"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to distTags.rm'
)
var p = npa(params.package)
- var package = p.scope ? params.package.replace("/", "%2f") : params.package
- var rest = "-/package/"+package+"/dist-tags/"+params.distTag
+ var pkg = p.scope ? params.package.replace('/', '%2f') : params.package
+ var rest = '-/package/' + pkg + '/dist-tags/' + params.distTag
var options = {
- method : "DELETE",
- auth : params.auth
+ method: 'DELETE',
+ auth: params.auth
}
this.request(url.resolve(uri, rest), options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js
index e1e17cde50..7af351d635 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js
@@ -1,39 +1,39 @@
module.exports = set
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
-var npa = require("npm-package-arg")
+var npa = require('npm-package-arg')
function set (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to distTags.set")
+ assert(typeof uri === 'string', 'must pass registry URI to distTags.set')
assert(
- params && typeof params === "object",
- "must pass params to distTags.set"
+ params && typeof params === 'object',
+ 'must pass params to distTags.set'
)
- assert(typeof cb === "function", "muss pass callback to distTags.set")
+ assert(typeof cb === 'function', 'muss pass callback to distTags.set')
assert(
- typeof params.package === "string",
- "must pass package name to distTags.set"
+ typeof params.package === 'string',
+ 'must pass package name to distTags.set'
)
assert(
- params.distTags && typeof params.distTags === "object",
- "must pass distTags map to distTags.set"
+ params.distTags && typeof params.distTags === 'object',
+ 'must pass distTags map to distTags.set'
)
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to distTags.set"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to distTags.set'
)
var p = npa(params.package)
- var package = p.scope ? params.package.replace("/", "%2f") : params.package
- var rest = "-/package/"+package+"/dist-tags"
+ var pkg = p.scope ? params.package.replace('/', '%2f') : params.package
+ var rest = '-/package/' + pkg + '/dist-tags'
var options = {
- method : "PUT",
- body : JSON.stringify(params.distTags),
- auth : params.auth
+ method: 'PUT',
+ body: JSON.stringify(params.distTags),
+ auth: params.auth
}
this.request(url.resolve(uri, rest), options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js
index 6c46fc5322..07ec3e5e75 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js
@@ -1,39 +1,39 @@
module.exports = update
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
-var npa = require("npm-package-arg")
+var npa = require('npm-package-arg')
function update (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to distTags.update")
+ assert(typeof uri === 'string', 'must pass registry URI to distTags.update')
assert(
- params && typeof params === "object",
- "must pass params to distTags.update"
+ params && typeof params === 'object',
+ 'must pass params to distTags.update'
)
- assert(typeof cb === "function", "muss pass callback to distTags.update")
+ assert(typeof cb === 'function', 'muss pass callback to distTags.update')
assert(
- typeof params.package === "string",
- "must pass package name to distTags.update"
+ typeof params.package === 'string',
+ 'must pass package name to distTags.update'
)
assert(
- params.distTags && typeof params.distTags === "object",
- "must pass distTags map to distTags.update"
+ params.distTags && typeof params.distTags === 'object',
+ 'must pass distTags map to distTags.update'
)
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to distTags.update"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to distTags.update'
)
var p = npa(params.package)
- var package = p.scope ? params.package.replace("/", "%2f") : params.package
- var rest = "-/package/"+package+"/dist-tags"
+ var pkg = p.scope ? params.package.replace('/', '%2f') : params.package
+ var rest = '-/package/' + pkg + '/dist-tags'
var options = {
- method : "POST",
- body : JSON.stringify(params.distTags),
- auth : params.auth
+ method: 'POST',
+ body: JSON.stringify(params.distTags),
+ auth: params.auth
}
this.request(url.resolve(uri, rest), options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/fetch.js b/deps/npm/node_modules/npm-registry-client/lib/fetch.js
index 2d1c6f6b82..e931d371ee 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/fetch.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/fetch.js
@@ -1,15 +1,15 @@
-var assert = require("assert")
- , url = require("url")
+var assert = require('assert')
+var url = require('url')
-var request = require("request")
- , once = require("once")
+var request = require('request')
+var once = require('once')
module.exports = fetch
function fetch (uri, params, cb) {
- assert(typeof uri === "string", "must pass uri to request")
- assert(params && typeof params === "object", "must pass params to request")
- assert(typeof cb === "function", "must pass callback to request")
+ assert(typeof uri === 'string', 'must pass uri to request')
+ assert(params && typeof params === 'object', 'must pass params to request')
+ assert(typeof cb === 'function', 'must pass callback to request')
cb = once(cb)
@@ -18,17 +18,16 @@ function fetch (uri, params, cb) {
makeRequest.call(client, uri, params, function (er, req) {
if (er) return cb(er)
- req.on("error", function (er) {
+ req.on('error', function (er) {
if (operation.retry(er)) {
- client.log.info("retry", "will retry, error on last attempt: " + er)
- }
- else {
+ client.log.info('retry', 'will retry, error on last attempt: ' + er)
+ } else {
cb(er)
}
})
- req.on("response", function (res) {
- client.log.http("fetch", "" + res.statusCode, uri)
+ req.on('response', function (res) {
+ client.log.http('fetch', '' + res.statusCode, uri)
var er
var statusCode = res && res.statusCode
@@ -36,40 +35,39 @@ function fetch (uri, params, cb) {
// Work around bug in node v0.10.0 where the CryptoStream
// gets stuck and never starts reading again.
res.resume()
- if (process.version === "v0.10.0") unstick(res)
+ if (process.version === 'v0.10.0') unstick(res)
return cb(null, res)
- }
- // Only retry on 408, 5xx or no `response`.
- else if (statusCode === 408) {
- er = new Error("request timed out")
- }
- else if (statusCode >= 500) {
- er = new Error("server error " + statusCode)
+ // Only retry on 408, 5xx or no `response`.
+ } else if (statusCode === 408) {
+ er = new Error('request timed out')
+ } else if (statusCode >= 500) {
+ er = new Error('server error ' + statusCode)
}
if (er && operation.retry(er)) {
- client.log.info("retry", "will retry, error on last attempt: " + er)
- }
- else {
- cb(new Error("fetch failed with status code " + statusCode))
+ client.log.info('retry', 'will retry, error on last attempt: ' + er)
+ } else {
+ cb(new Error('fetch failed with status code ' + statusCode))
}
})
})
})
}
-function unstick(response) {
- response.resume = function (orig) { return function() {
- var ret = orig.apply(response, arguments)
- if (response.socket.encrypted) response.socket.encrypted.read(0)
- return ret
- }}(response.resume)
+function unstick (response) {
+ response.resume = (function (orig) {
+ return function () {
+ var ret = orig.apply(response, arguments)
+ if (response.socket.encrypted) response.socket.encrypted.read(0)
+ return ret
+ }
+ })(response.resume)
}
function makeRequest (remote, params, cb) {
var parsed = url.parse(remote)
- this.log.http("fetch", "GET", parsed.href)
+ this.log.http('fetch', 'GET', parsed.href)
var headers = params.headers || {}
var er = this.authify(
@@ -82,8 +80,8 @@ function makeRequest (remote, params, cb) {
var opts = this.initialize(
parsed,
- "GET",
- "application/x-tar, application/vnd.github+json; q=0.1",
+ 'GET',
+ 'application/x-tar, application/vnd.github+json; q=0.1',
headers
)
// always want to follow redirects for fetch
diff --git a/deps/npm/node_modules/npm-registry-client/lib/get.js b/deps/npm/node_modules/npm-registry-client/lib/get.js
index 17e1349775..ab0eae10f0 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/get.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/get.js
@@ -1,21 +1,21 @@
module.exports = get
-var assert = require("assert")
- , url = require("url")
+var assert = require('assert')
+var url = require('url')
/*
* This is meant to be overridden in specific implementations if you
* want specialized behavior for metadata (i.e. caching).
*/
function get (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to get")
- assert(params && typeof params === "object", "must pass params to get")
- assert(typeof cb === "function", "must pass callback to get")
+ assert(typeof uri === 'string', 'must pass registry URI to get')
+ assert(params && typeof params === 'object', 'must pass params to get')
+ assert(typeof cb === 'function', 'must pass callback to get')
var parsed = url.parse(uri)
assert(
- parsed.protocol === "http:" || parsed.protocol === "https:",
- "must have a URL that starts with http: or https:"
+ parsed.protocol === 'http:' || parsed.protocol === 'https:',
+ 'must have a URL that starts with http: or https:'
)
this.request(uri, params, cb)
diff --git a/deps/npm/node_modules/npm-registry-client/lib/initialize.js b/deps/npm/node_modules/npm-registry-client/lib/initialize.js
index e7215bc780..4a2160fbbd 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/initialize.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/initialize.js
@@ -1,8 +1,8 @@
-var crypto = require("crypto")
-var HttpAgent = require("http").Agent
-var HttpsAgent = require("https").Agent
+var crypto = require('crypto')
+var HttpAgent = require('http').Agent
+var HttpsAgent = require('https').Agent
-var pkg = require("../package.json")
+var pkg = require('../package.json')
var httpAgent
var httpsAgent
@@ -11,20 +11,20 @@ module.exports = initialize
function initialize (uri, method, accept, headers) {
if (!this.config.sessionToken) {
- this.config.sessionToken = crypto.randomBytes(8).toString("hex")
- this.log.verbose("request id", this.config.sessionToken)
+ this.config.sessionToken = crypto.randomBytes(8).toString('hex')
+ this.log.verbose('request id', this.config.sessionToken)
}
var opts = {
- url : uri,
- method : method,
- headers : headers,
- localAddress : this.config.proxy.localAddress,
- strictSSL : this.config.ssl.strict,
- cert : this.config.ssl.certificate,
- key : this.config.ssl.key,
- ca : this.config.ssl.ca,
- agent : getAgent(uri.protocol, this.config)
+ url: uri,
+ method: method,
+ headers: headers,
+ localAddress: this.config.proxy.localAddress,
+ strictSSL: this.config.ssl.strict,
+ cert: this.config.ssl.certificate,
+ key: this.config.ssl.key,
+ ca: this.config.ssl.ca,
+ agent: getAgent(uri.protocol, this.config)
}
// allow explicit disabling of proxy in environment via CLI
@@ -32,18 +32,16 @@ function initialize (uri, method, accept, headers) {
// how false gets here is the CLI's problem (it's gross)
if (this.config.proxy.http === false) {
opts.proxy = null
- }
- else {
+ } else {
// request will not pay attention to the NOPROXY environment variable if a
// config value named proxy is passed in, even if it's set to null.
var proxy
- if (uri.protocol === "https:") {
+ if (uri.protocol === 'https:') {
proxy = this.config.proxy.https
- }
- else {
+ } else {
proxy = this.config.proxy.http
}
- if (typeof proxy === "string") opts.proxy = proxy
+ if (typeof proxy === 'string') opts.proxy = proxy
}
headers.version = this.version || pkg.version
@@ -51,32 +49,31 @@ function initialize (uri, method, accept, headers) {
if (this.refer) headers.referer = this.refer
- headers["npm-session"] = this.config.sessionToken
- headers["user-agent"] = this.config.userAgent
+ headers['npm-session'] = this.config.sessionToken
+ headers['user-agent'] = this.config.userAgent
return opts
}
function getAgent (protocol, config) {
- if (protocol === "https:") {
+ if (protocol === 'https:') {
if (!httpsAgent) {
httpsAgent = new HttpsAgent({
- keepAlive : true,
- localAddress : config.proxy.localAddress,
- rejectUnauthorized : config.ssl.strict,
- ca : config.ssl.ca,
- cert : config.ssl.cert,
- key : config.ssl.key
+ keepAlive: true,
+ localAddress: config.proxy.localAddress,
+ rejectUnauthorized: config.ssl.strict,
+ ca: config.ssl.ca,
+ cert: config.ssl.certificate,
+ key: config.ssl.key
})
}
return httpsAgent
- }
- else {
+ } else {
if (!httpAgent) {
httpAgent = new HttpAgent({
- keepAlive : true,
- localAddress : config.proxy.localAddress
+ keepAlive: true,
+ localAddress: config.proxy.localAddress
})
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/logout.js b/deps/npm/node_modules/npm-registry-client/lib/logout.js
index 00964a4be7..e66e9b78ac 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/logout.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/logout.js
@@ -1,23 +1,23 @@
module.exports = logout
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
function logout (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to logout")
- assert(params && typeof params === "object", "must pass params to logout")
- assert(typeof cb === "function", "must pass callback to star")
+ assert(typeof uri === 'string', 'must pass registry URI to logout')
+ assert(params && typeof params === 'object', 'must pass params to logout')
+ assert(typeof cb === 'function', 'must pass callback to star')
var auth = params.auth
- assert(auth && typeof auth === "object", "must pass auth to logout")
- assert(typeof auth.token === "string", "can only log out for token auth")
+ assert(auth && typeof auth === 'object', 'must pass auth to logout')
+ assert(typeof auth.token === 'string', 'can only log out for token auth')
- uri = url.resolve(uri, "-/user/token/" + auth.token)
+ uri = url.resolve(uri, '-/user/token/' + auth.token)
var options = {
- method: "DELETE",
+ method: 'DELETE',
auth: auth
}
- this.log.verbose("logout", "invalidating session token for user")
+ this.log.verbose('logout', 'invalidating session token for user')
this.request(uri, options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/publish.js b/deps/npm/node_modules/npm-registry-client/lib/publish.js
index 348648b2ee..f6f37ab47a 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/publish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/publish.js
@@ -1,60 +1,59 @@
module.exports = publish
-var url = require("url")
- , semver = require("semver")
- , crypto = require("crypto")
- , Stream = require("stream").Stream
- , assert = require("assert")
- , fixer = require("normalize-package-data/lib/fixer.js")
- , concat = require("concat-stream")
+var url = require('url')
+var semver = require('semver')
+var crypto = require('crypto')
+var Stream = require('stream').Stream
+var assert = require('assert')
+var fixer = require('normalize-package-data/lib/fixer.js')
+var concat = require('concat-stream')
function escaped (name) {
- return name.replace("/", "%2f")
+ return name.replace('/', '%2f')
}
function publish (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to publish")
- assert(params && typeof params === "object", "must pass params to publish")
- assert(typeof cb === "function", "must pass callback to publish")
+ assert(typeof uri === 'string', 'must pass registry URI to publish')
+ assert(params && typeof params === 'object', 'must pass params to publish')
+ assert(typeof cb === 'function', 'must pass callback to publish')
var access = params.access
assert(
- (!access) || ["public", "restricted"].indexOf(access) !== -1,
+ (!access) || ['public', 'restricted'].indexOf(access) !== -1,
"if present, access level must be either 'public' or 'restricted'"
)
var auth = params.auth
- assert(auth && typeof auth === "object", "must pass auth to publish")
+ assert(auth && typeof auth === 'object', 'must pass auth to publish')
if (!(auth.token ||
(auth.password && auth.username && auth.email))) {
- var er = new Error("auth required for publishing")
- er.code = "ENEEDAUTH"
+ var er = new Error('auth required for publishing')
+ er.code = 'ENEEDAUTH'
return cb(er)
}
var metadata = params.metadata
assert(
- metadata && typeof metadata === "object",
- "must pass package metadata to publish"
+ metadata && typeof metadata === 'object',
+ 'must pass package metadata to publish'
)
try {
fixer.fixNameField(metadata, true)
- }
- catch (er) {
+ } catch (er) {
return cb(er)
}
var version = semver.clean(metadata.version)
- if (!version) return cb(new Error("invalid semver: " + metadata.version))
+ if (!version) return cb(new Error('invalid semver: ' + metadata.version))
metadata.version = version
var body = params.body
- assert(body, "must pass package body to publish")
- assert(body instanceof Stream, "package body passed to publish must be a stream")
+ assert(body, 'must pass package body to publish')
+ assert(body instanceof Stream, 'package body passed to publish must be a stream')
var client = this
var sink = concat(function (tarbuffer) {
putFirst.call(client, uri, metadata, tarbuffer, access, auth, cb)
})
- sink.on("error", cb)
+ sink.on('error', cb)
body.pipe(sink)
}
@@ -63,67 +62,67 @@ function putFirst (registry, data, tarbuffer, access, auth, cb) {
// If 409, then GET and merge, try again.
// If other error, then fail.
- var root =
- { _id : data.name
- , name : data.name
- , description : data.description
- , "dist-tags" : {}
- , versions : {}
- , readme: data.readme || ""
- }
+ var root = {
+ _id: data.name,
+ name: data.name,
+ description: data.description,
+ 'dist-tags': {},
+ versions: {},
+ readme: data.readme || ''
+ }
if (access) root.access = access
if (!auth.token) {
- root.maintainers = [{name : auth.username, email : auth.email}]
+ root.maintainers = [{ name: auth.username, email: auth.email }]
data.maintainers = JSON.parse(JSON.stringify(root.maintainers))
}
root.versions[ data.version ] = data
var tag = data.tag || this.config.defaultTag
- root["dist-tags"][tag] = data.version
+ root['dist-tags'][tag] = data.version
- var tbName = data.name + "-" + data.version + ".tgz"
- , tbURI = data.name + "/-/" + tbName
+ var tbName = data.name + '-' + data.version + '.tgz'
+ var tbURI = data.name + '/-/' + tbName
- data._id = data.name+"@"+data.version
+ data._id = data.name + '@' + data.version
data.dist = data.dist || {}
- data.dist.shasum = crypto.createHash("sha1").update(tarbuffer).digest("hex")
+ data.dist.shasum = crypto.createHash('sha1').update(tarbuffer).digest('hex')
data.dist.tarball = url.resolve(registry, tbURI)
- .replace(/^https:\/\//, "http://")
+ .replace(/^https:\/\//, 'http://')
root._attachments = {}
root._attachments[ tbName ] = {
- "content_type": "application/octet-stream",
- "data": tarbuffer.toString("base64"),
- "length": tarbuffer.length
+ 'content_type': 'application/octet-stream',
+ 'data': tarbuffer.toString('base64'),
+ 'length': tarbuffer.length
}
var fixed = url.resolve(registry, escaped(data.name))
var client = this
var options = {
- method : "PUT",
- body : root,
- auth : auth
+ method: 'PUT',
+ body: root,
+ auth: auth
}
this.request(fixed, options, function (er, parsed, json, res) {
- var r409 = "must supply latest _rev to update existing package"
- var r409b = "Document update conflict."
+ var r409 = 'must supply latest _rev to update existing package'
+ var r409b = 'Document update conflict.'
var conflict = res && res.statusCode === 409
- if (parsed && (parsed.reason === r409 || parsed.reason === r409b))
+ if (parsed && (parsed.reason === r409 || parsed.reason === r409b)) {
conflict = true
+ }
// a 409 is typical here. GET the data and merge in.
if (er && !conflict) {
- client.log.error("publish", "Failed PUT "+(res && res.statusCode))
+ client.log.error('publish', 'Failed PUT ' + (res && res.statusCode))
return cb(er)
}
- if (!er && !conflict)
- return cb(er, parsed, json, res)
+ if (!er && !conflict) return cb(er, parsed, json, res)
// let's see what versions are already published.
- client.request(fixed+"?write=true", { auth : auth }, function (er, current) {
+ client.request(fixed + '?write=true', { auth: auth }, function (er, current) {
if (er) return cb(er)
putNext.call(client, registry, data.version, root, current, auth, cb)
@@ -136,10 +135,9 @@ function putNext (registry, newVersion, root, current, auth, cb) {
// just merge in existing stuff
var curVers = Object.keys(current.versions || {}).map(function (v) {
return semver.clean(v, true)
- }).concat(Object.keys(current.time || {}).map(function(v) {
- if (semver.valid(v, true))
- return semver.clean(v, true)
- }).filter(function(v) {
+ }).concat(Object.keys(current.time || {}).map(function (v) {
+ if (semver.valid(v, true)) return semver.clean(v, true)
+ }).filter(function (v) {
return v
}))
@@ -152,15 +150,15 @@ function putNext (registry, newVersion, root, current, auth, cb) {
for (var i in root) {
switch (i) {
// objects that copy over the new stuffs
- case "dist-tags":
- case "versions":
- case "_attachments":
+ case 'dist-tags':
+ case 'versions':
+ case '_attachments':
for (var j in root[i])
current[i][j] = root[i][j]
break
// ignore these
- case "maintainers":
+ case 'maintainers':
break
// copy
@@ -173,16 +171,16 @@ function putNext (registry, newVersion, root, current, auth, cb) {
var uri = url.resolve(registry, escaped(root.name))
var options = {
- method : "PUT",
- body : current,
- auth : auth
+ method: 'PUT',
+ body: current,
+ auth: auth
}
this.request(uri, options, cb)
}
function conflictError (pkgid, version) {
- var e = new Error("cannot modify pre-existing version")
- e.code = "EPUBLISHCONFLICT"
+ var e = new Error('cannot modify pre-existing version')
+ e.code = 'EPUBLISHCONFLICT'
e.pkgid = pkgid
e.version = version
return e
diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js
index c2a7944e9f..963eabaec0 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/request.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/request.js
@@ -5,21 +5,21 @@ module.exports = regRequest
// 2. send authorization
// 3. content-type is 'application/json' -- metadata
//
-var assert = require("assert")
- , url = require("url")
- , zlib = require("zlib")
- , Stream = require("stream").Stream
+var assert = require('assert')
+var url = require('url')
+var zlib = require('zlib')
+var Stream = require('stream').Stream
-var request = require("request")
- , once = require("once")
+var request = require('request')
+var once = require('once')
function regRequest (uri, params, cb_) {
- assert(typeof uri === "string", "must pass uri to request")
- assert(params && typeof params === "object", "must pass params to request")
- assert(typeof cb_ === "function", "must pass callback to request")
+ assert(typeof uri === 'string', 'must pass uri to request')
+ assert(params && typeof params === 'object', 'must pass params to request')
+ assert(typeof cb_ === 'function', 'must pass callback to request')
- params.method = params.method || "GET"
- this.log.verbose("request", "uri", uri)
+ params.method = params.method || 'GET'
+ this.log.verbose('request', 'uri', uri)
// Since there are multiple places where an error could occur,
// don't let the cb be called more than once.
@@ -30,37 +30,33 @@ function regRequest (uri, params, cb_) {
}
var adduserChange = /\/?-\/user\/org\.couchdb\.user:([^/]+)\/-rev/
- , isUserChange = uri.match(adduserChange)
- , adduserNew = /\/?-\/user\/org\.couchdb\.user:([^/?]+)$/
- , isNewUser = uri.match(adduserNew)
- , alwaysAuth = params.auth && params.auth.alwaysAuth
- , isDelete = params.method === "DELETE"
- , isWrite = params.body || isDelete
+ var isUserChange = uri.match(adduserChange)
+ var adduserNew = /\/?-\/user\/org\.couchdb\.user:([^/?]+)$/
+ var isNewUser = uri.match(adduserNew)
+ var alwaysAuth = params.auth && params.auth.alwaysAuth
+ var isDelete = params.method === 'DELETE'
+ var isWrite = params.body || isDelete
if (isUserChange && !isWrite) {
- return cb(new Error("trying to change user document without writing(?!)"))
+ return cb(new Error('trying to change user document without writing(?!)'))
}
// new users can *not* use auth, because they don't *have* auth yet
if (isUserChange) {
- this.log.verbose("request", "updating existing user; sending authorization")
+ this.log.verbose('request', 'updating existing user; sending authorization')
params.authed = true
- }
- else if (isNewUser) {
- this.log.verbose("request", "new user, so can't send auth")
+ } else if (isNewUser) {
+ this.log.verbose('request', "new user, so can't send auth")
params.authed = false
- }
- else if (alwaysAuth) {
- this.log.verbose("request", "always-auth set; sending authorization")
+ } else if (alwaysAuth) {
+ this.log.verbose('request', 'always-auth set; sending authorization')
params.authed = true
- }
- else if (isWrite) {
- this.log.verbose("request", "sending authorization for write operation")
+ } else if (isWrite) {
+ this.log.verbose('request', 'sending authorization for write operation')
params.authed = true
- }
- else {
+ } else {
// most of the time we don't want to auth
- this.log.verbose("request", "no auth needed")
+ this.log.verbose('request', 'no auth needed')
params.authed = false
}
@@ -68,8 +64,7 @@ function regRequest (uri, params, cb_) {
this.attempt(function (operation) {
makeRequest.call(self, uri, params, function (er, parsed, raw, response) {
if (!er || (er.message && er.message.match(/^SSL Error/))) {
- if (er)
- er.code = "ESSL"
+ if (er) er.code = 'ESSL'
return cb(er, parsed, raw, response)
}
@@ -80,13 +75,13 @@ function regRequest (uri, params, cb_) {
var serverError = statusCode >= 500
var statusRetry = !statusCode || timeout || serverError
if (er && statusRetry && operation.retry(er)) {
- self.log.info("retry", "will retry, error on last attempt: " + er)
+ self.log.info('retry', 'will retry, error on last attempt: ' + er)
return undefined
}
if (response) {
- self.log.verbose("headers", response.headers)
- if (response.headers["npm-notice"]) {
- self.log.warn("notice", response.headers["npm-notice"])
+ self.log.verbose('headers', response.headers)
+ if (response.headers['npm-notice']) {
+ self.log.warn('notice', response.headers['npm-notice'])
}
}
cb.apply(null, arguments)
@@ -101,7 +96,7 @@ function makeRequest (uri, params, cb_) {
var headers = {}
// metadata should be compressed
- headers["accept-encoding"] = "gzip"
+ headers['accept-encoding'] = 'gzip'
var er = this.authify(params.authed, parsed, headers, params.auth)
if (er) return cb_(er)
@@ -109,54 +104,51 @@ function makeRequest (uri, params, cb_) {
var opts = this.initialize(
parsed,
params.method,
- "application/json",
+ 'application/json',
headers
)
- opts.followRedirect = (typeof params.follow === "boolean" ? params.follow : true)
+ opts.followRedirect = (typeof params.follow === 'boolean' ? params.follow : true)
opts.encoding = null // tell request let body be Buffer instance
if (params.etag) {
- this.log.verbose("etag", params.etag)
- headers[params.method === "GET" ? "if-none-match" : "if-match"] = params.etag
+ this.log.verbose('etag', params.etag)
+ headers[params.method === 'GET' ? 'if-none-match' : 'if-match'] = params.etag
}
- if (params.lastModified && params.method === "GET") {
- this.log.verbose("lastModified", params.lastModified)
- headers["if-modified-since"] = params.lastModified
+ if (params.lastModified && params.method === 'GET') {
+ this.log.verbose('lastModified', params.lastModified)
+ headers['if-modified-since'] = params.lastModified
}
// figure out wth body is
if (params.body) {
if (Buffer.isBuffer(params.body)) {
opts.body = params.body
- headers["content-type"] = "application/json"
- headers["content-length"] = params.body.length
- }
- else if (typeof params.body === "string") {
+ headers['content-type'] = 'application/json'
+ headers['content-length'] = params.body.length
+ } else if (typeof params.body === 'string') {
opts.body = params.body
- headers["content-type"] = "application/json"
- headers["content-length"] = Buffer.byteLength(params.body)
- }
- else if (params.body instanceof Stream) {
- headers["content-type"] = "application/octet-stream"
- if (params.body.size) headers["content-length"] = params.body.size
- }
- else {
+ headers['content-type'] = 'application/json'
+ headers['content-length'] = Buffer.byteLength(params.body)
+ } else if (params.body instanceof Stream) {
+ headers['content-type'] = 'application/octet-stream'
+ if (params.body.size) headers['content-length'] = params.body.size
+ } else {
delete params.body._etag
delete params.body._lastModified
opts.json = params.body
}
}
- this.log.http("request", params.method, parsed.href || "/")
+ this.log.http('request', params.method, parsed.href || '/')
var done = requestDone.call(this, params.method, uri, cb)
var req = request(opts, decodeResponseBody(done))
- req.on("error", cb)
- req.on("socket", function (s) {
- s.on("error", cb)
+ req.on('error', cb)
+ req.on('socket', function (s) {
+ s.on('error', cb)
})
if (params.body && (params.body instanceof Stream)) {
@@ -164,7 +156,7 @@ function makeRequest (uri, params, cb_) {
}
}
-function decodeResponseBody(cb) {
+function decodeResponseBody (cb) {
return function (er, response, data) {
if (er) return cb(er, response, data)
@@ -174,7 +166,7 @@ function decodeResponseBody(cb) {
response.socket.destroy()
}
- if (response.headers["content-encoding"] !== "gzip") {
+ if (response.headers['content-encoding'] !== 'gzip') {
return cb(er, response, data)
}
@@ -192,7 +184,7 @@ function requestDone (method, where, cb) {
if (er) return cb(er)
var urlObj = url.parse(where)
- if (urlObj.auth) urlObj.auth = "***"
+ if (urlObj.auth) urlObj.auth = '***'
this.log.http(response.statusCode, url.format(urlObj))
if (Buffer.isBuffer(data)) {
@@ -200,13 +192,13 @@ function requestDone (method, where, cb) {
}
var parsed
- if (data && typeof data === "string" && response.statusCode !== 304) {
+ if (data && typeof data === 'string' && response.statusCode !== 304) {
try {
parsed = JSON.parse(data)
} catch (ex) {
- ex.message += "\n" + data
- this.log.verbose("bad json", data)
- this.log.error("registry", "error parsing json")
+ ex.message += '\n' + data
+ this.log.verbose('bad json', data)
+ this.log.error('registry', 'error parsing json')
return cb(ex, null, data, response)
}
} else if (data) {
@@ -216,9 +208,12 @@ function requestDone (method, where, cb) {
// expect data with any error codes
if (!data && response.statusCode >= 400) {
- return cb( response.statusCode + " "
- + require("http").STATUS_CODES[response.statusCode]
- , null, data, response )
+ return cb(
+ response.statusCode + ' ' + require('http').STATUS_CODES[response.statusCode],
+ null,
+ data,
+ response
+ )
}
er = null
@@ -226,38 +221,36 @@ function requestDone (method, where, cb) {
parsed._etag = response.headers.etag
}
- if (parsed && response.headers["last-modified"]) {
- parsed._lastModified = response.headers["last-modified"]
+ if (parsed && response.headers['last-modified']) {
+ parsed._lastModified = response.headers['last-modified']
}
- // for the search endpoint, the "error" property can be an object
- if (parsed && parsed.error && typeof parsed.error !== "object" ||
+ // for the search endpoint, the 'error' property can be an object
+ if (parsed && parsed.error && typeof parsed.error !== 'object' ||
response.statusCode >= 400) {
var w = url.parse(where).pathname.substr(1)
var name
if (!w.match(/^-/)) {
- w = w.split("/")
- name = w[w.indexOf("_rewrite") + 1]
+ w = w.split('/')
+ name = w[w.indexOf('_rewrite') + 1]
}
if (!parsed.error) {
er = new Error(
- "Registry returned " + response.statusCode +
- " for " + method +
- " on " + where
+ 'Registry returned ' + response.statusCode +
+ ' for ' + method +
+ ' on ' + where
)
- }
- else if (name && parsed.error === "not_found") {
- er = new Error("404 Not Found: " + name)
- }
- else {
+ } else if (name && parsed.error === 'not_found') {
+ er = new Error('404 Not Found: ' + name)
+ } else {
er = new Error(
- parsed.error + " " + (parsed.reason || "") + ": " + w
+ parsed.error + ' ' + (parsed.reason || '') + ': ' + w
)
}
if (name) er.pkgid = name
er.statusCode = response.statusCode
- er.code = "E" + er.statusCode
+ er.code = 'E' + er.statusCode
}
return cb(er, parsed, data, response)
}.bind(this)
diff --git a/deps/npm/node_modules/npm-registry-client/lib/star.js b/deps/npm/node_modules/npm-registry-client/lib/star.js
index 87c5b67c4f..426b40cec8 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/star.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/star.js
@@ -1,50 +1,49 @@
module.exports = star
-var assert = require("assert")
+var assert = require('assert')
function star (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to star")
- assert(params && typeof params === "object", "must pass params to star")
- assert(typeof cb === "function", "must pass callback to star")
+ assert(typeof uri === 'string', 'must pass registry URI to star')
+ assert(params && typeof params === 'object', 'must pass params to star')
+ assert(typeof cb === 'function', 'must pass callback to star')
var starred = params.starred ? true : false
var auth = params.auth
- assert(auth && typeof auth === "object", "must pass auth to star")
+ assert(auth && typeof auth === 'object', 'must pass auth to star')
if (!(auth.token || (auth.password && auth.username && auth.email))) {
- var er = new Error("Must be logged in to star/unstar packages")
- er.code = "ENEEDAUTH"
+ var er = new Error('Must be logged in to star/unstar packages')
+ er.code = 'ENEEDAUTH'
return cb(er)
}
var client = this
- this.request(uri+"?write=true", { auth : auth }, function (er, fullData) {
+ this.request(uri + '?write=true', { auth: auth }, function (er, fullData) {
if (er) return cb(er)
client.whoami(uri, params, function (er, username) {
if (er) return cb(er)
var data = {
- _id : fullData._id,
- _rev : fullData._rev,
- users : fullData.users || {}
+ _id: fullData._id,
+ _rev: fullData._rev,
+ users: fullData.users || {}
}
if (starred) {
- client.log.info("starring", data._id)
+ client.log.info('starring', data._id)
data.users[username] = true
- client.log.verbose("starring", data)
- }
- else {
+ client.log.verbose('starring', data)
+ } else {
delete data.users[username]
- client.log.info("unstarring", data._id)
- client.log.verbose("unstarring", data)
+ client.log.info('unstarring', data._id)
+ client.log.verbose('unstarring', data)
}
var options = {
- method : "PUT",
- body : data,
- auth : auth
+ method: 'PUT',
+ body: data,
+ auth: auth
}
return client.request(uri, options, cb)
})
diff --git a/deps/npm/node_modules/npm-registry-client/lib/stars.js b/deps/npm/node_modules/npm-registry-client/lib/stars.js
index f555512425..ba47f2c1ef 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/stars.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/stars.js
@@ -1,18 +1,18 @@
module.exports = stars
-var assert = require("assert")
-var url = require("url")
+var assert = require('assert')
+var url = require('url')
function stars (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to stars")
- assert(params && typeof params === "object", "must pass params to stars")
- assert(typeof cb === "function", "must pass callback to stars")
+ assert(typeof uri === 'string', 'must pass registry URI to stars')
+ assert(params && typeof params === 'object', 'must pass params to stars')
+ assert(typeof cb === 'function', 'must pass callback to stars')
var auth = params.auth
var name = params.username || (auth && auth.username)
- if (!name) return cb(new Error("must pass either username or auth to stars"))
+ if (!name) return cb(new Error('must pass either username or auth to stars'))
var encoded = encodeURIComponent(name)
- var path = "-/_view/starredByUser?key=\""+encoded+"\""
+ var path = '-/_view/starredByUser?key="' + encoded + '"'
- this.request(url.resolve(uri, path), { auth : auth }, cb)
+ this.request(url.resolve(uri, path), { auth: auth }, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/tag.js b/deps/npm/node_modules/npm-registry-client/lib/tag.js
index cad5154d7f..3b6dad1df2 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/tag.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/tag.js
@@ -1,23 +1,23 @@
module.exports = tag
-var assert = require("assert")
+var assert = require('assert')
function tag (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to tag")
- assert(params && typeof params === "object", "must pass params to tag")
- assert(typeof cb === "function", "must pass callback to tag")
+ assert(typeof uri === 'string', 'must pass registry URI to tag')
+ assert(params && typeof params === 'object', 'must pass params to tag')
+ assert(typeof cb === 'function', 'must pass callback to tag')
- assert(typeof params.version === "string", "must pass version to tag")
- assert(typeof params.tag === "string", "must pass tag name to tag")
+ assert(typeof params.version === 'string', 'must pass version to tag')
+ assert(typeof params.tag === 'string', 'must pass tag name to tag')
assert(
- params.auth && typeof params.auth === "object",
- "must pass auth to tag"
+ params.auth && typeof params.auth === 'object',
+ 'must pass auth to tag'
)
var options = {
- method : "PUT",
- body : JSON.stringify(params.version),
- auth : params.auth
+ method: 'PUT',
+ body: JSON.stringify(params.version),
+ auth: params.auth
}
- this.request(uri+"/"+params.tag, options, cb)
+ this.request(uri + '/' + params.tag, options, cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
index e6e954935c..05c5a4b611 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
@@ -6,63 +6,63 @@ module.exports = unpublish
// else, PUT the modified data
// delete the tarball
-var semver = require("semver")
- , url = require("url")
- , chain = require("slide").chain
- , assert = require("assert")
+var semver = require('semver')
+var url = require('url')
+var chain = require('slide').chain
+var assert = require('assert')
function unpublish (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to unpublish")
- assert(params && typeof params === "object", "must pass params to unpublish")
- assert(typeof cb === "function", "must pass callback to unpublish")
+ assert(typeof uri === 'string', 'must pass registry URI to unpublish')
+ assert(params && typeof params === 'object', 'must pass params to unpublish')
+ assert(typeof cb === 'function', 'must pass callback to unpublish')
var ver = params.version
var auth = params.auth
- assert(auth && typeof auth === "object", "must pass auth to unpublish")
+ assert(auth && typeof auth === 'object', 'must pass auth to unpublish')
var options = {
- timeout : -1,
- follow : false,
- auth : auth
+ timeout: -1,
+ follow: false,
+ auth: auth
}
- this.get(uri + "?write=true", options, function (er, data) {
+ this.get(uri + '?write=true', options, function (er, data) {
if (er) {
- this.log.info("unpublish", uri+" not published")
+ this.log.info('unpublish', uri + ' not published')
return cb()
}
// remove all if no version specified
if (!ver) {
- this.log.info("unpublish", "No version specified, removing all")
- return this.request(uri+"/-rev/"+data._rev, { method : "DELETE", auth : auth }, cb)
+ this.log.info('unpublish', 'No version specified, removing all')
+ return this.request(uri + '/-rev/' + data._rev, { method: 'DELETE', auth: auth }, cb)
}
var versions = data.versions || {}
- , versionPublic = versions.hasOwnProperty(ver)
+ var versionPublic = versions.hasOwnProperty(ver)
var dist
if (!versionPublic) {
- this.log.info("unpublish", uri+"@"+ver+" not published")
+ this.log.info('unpublish', uri + '@' + ver + ' not published')
} else {
dist = versions[ver].dist
- this.log.verbose("unpublish", "removing attachments", dist)
+ this.log.verbose('unpublish', 'removing attachments', dist)
}
delete versions[ver]
// if it was the only version, then delete the whole package.
if (!Object.keys(versions).length) {
- this.log.info("unpublish", "No versions remain, removing entire package")
- return this.request(uri+"/-rev/"+data._rev, { method : "DELETE", auth : auth }, cb)
+ this.log.info('unpublish', 'No versions remain, removing entire package')
+ return this.request(uri + '/-rev/' + data._rev, { method: 'DELETE', auth: auth }, cb)
}
if (!versionPublic) return cb()
- var latestVer = data["dist-tags"].latest
- for (var tag in data["dist-tags"]) {
- if (data["dist-tags"][tag] === ver) delete data["dist-tags"][tag]
+ var latestVer = data['dist-tags'].latest
+ for (var tag in data['dist-tags']) {
+ if (data['dist-tags'][tag] === ver) delete data['dist-tags'][tag]
}
if (latestVer === ver) {
- data["dist-tags"].latest =
+ data['dist-tags'].latest =
Object.getOwnPropertyNames(versions).sort(semver.compareLoose).pop()
}
@@ -71,9 +71,9 @@ function unpublish (uri, params, cb) {
delete data._attachments
var cb_ = detacher.call(this, uri, data, dist, auth, cb)
- this.request(uri+"/-rev/"+rev, { method : "PUT", body : data, auth : auth }, function (er) {
+ this.request(uri + '/-rev/' + rev, { method: 'PUT', body: data, auth: auth }, function (er) {
if (er) {
- this.log.error("unpublish", "Failed to update data")
+ this.log.error('unpublish', 'Failed to update data')
}
cb_(er)
}.bind(this))
@@ -83,7 +83,7 @@ function unpublish (uri, params, cb) {
function detacher (uri, data, dist, credentials, cb) {
return function (er) {
if (er) return cb(er)
- this.get(escape(uri, data.name), { auth : credentials }, function (er, data) {
+ this.get(escape(uri, data.name), { auth: credentials }, function (er, data) {
if (er) return cb(er)
var tb = url.parse(dist.tarball)
@@ -103,19 +103,18 @@ function detacher (uri, data, dist, credentials, cb) {
function detach (uri, data, path, rev, credentials, cb) {
if (rev) {
- path += "/-rev/" + rev
- this.log.info("detach", path)
- return this.request(url.resolve(uri, path), { method : "DELETE", auth : credentials }, cb)
+ path += '/-rev/' + rev
+ this.log.info('detach', path)
+ return this.request(url.resolve(uri, path), { method: 'DELETE', auth: credentials }, cb)
}
- this.get(escape(uri, data.name), { auth : credentials }, function (er, data) {
+ this.get(escape(uri, data.name), { auth: credentials }, function (er, data) {
rev = data._rev
- if (!rev) return cb(new Error(
- "No _rev found in "+data._id))
+ if (!rev) return cb(new Error('No _rev found in ' + data._id))
detach.call(this, data, path, rev, cb)
}.bind(this))
}
function escape (base, name) {
- var escaped = name.replace(/\//, "%2f")
+ var escaped = name.replace(/\//, '%2f')
return url.resolve(base, escaped)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/whoami.js b/deps/npm/node_modules/npm-registry-client/lib/whoami.js
index 4c099ebec6..68db49e59a 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/whoami.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/whoami.js
@@ -1,19 +1,19 @@
module.exports = whoami
-var url = require("url")
- , assert = require("assert")
+var url = require('url')
+var assert = require('assert')
function whoami (uri, params, cb) {
- assert(typeof uri === "string", "must pass registry URI to whoami")
- assert(params && typeof params === "object", "must pass params to whoami")
- assert(typeof cb === "function", "must pass callback to whoami")
+ assert(typeof uri === 'string', 'must pass registry URI to whoami')
+ assert(params && typeof params === 'object', 'must pass params to whoami')
+ assert(typeof cb === 'function', 'must pass callback to whoami')
var auth = params.auth
- assert(auth && typeof auth === "object", "must pass auth to whoami")
+ assert(auth && typeof auth === 'object', 'must pass auth to whoami')
if (auth.username) return process.nextTick(cb.bind(this, null, auth.username))
- this.request(url.resolve(uri, "-/whoami"), { auth : auth }, function (er, userdata) {
+ this.request(url.resolve(uri, '-/whoami'), { auth: auth }, function (er, userdata) {
if (er) return cb(er)
cb(null, userdata.username)
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json
index fc7904b67b..19228ab6fd 100644
--- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json
@@ -26,8 +26,6 @@
"url": "http://juliangruber.com"
},
"license": "MIT",
- "readme": "\n# isarray\n\n`Array#isArray` for older browsers.\n\n## Usage\n\n```js\nvar isArray = require('isarray');\n\nconsole.log(isArray([])); // => true\nconsole.log(isArray({})); // => false\n```\n\n## Installation\n\nWith [npm](http://npmjs.org) do\n\n```bash\n$ npm install isarray\n```\n\nThen bundle for the browser with\n[browserify](https://github.com/substack/browserify).\n\nWith [component](http://component.io) do\n\n```bash\n$ component install juliangruber/isarray\n```\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber <julian@juliangruber.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
- "readmeFilename": "README.md",
"_id": "isarray@0.0.1",
"dist": {
"shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
@@ -50,5 +48,6 @@
"_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"bugs": {
"url": "https://github.com/juliangruber/isarray/issues"
- }
+ },
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md
deleted file mode 100644
index 21683f5e59..0000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md
+++ /dev/null
@@ -1,101 +0,0 @@
-# npm-package-arg
-
-Parse package name and specifier passed to commands like `npm install` or
-`npm cache add`. This just parses the text given-- it's worth noting that
-`npm` has further logic it applies by looking at your disk to figure out
-what ambiguous specifiers are. If you want that logic, please see
-[realize-package-specifier].
-
-[realize-package-specifier]: https://www.npmjs.org/package/realize-package-specifier
-
-Arguments look like: `foo@1.2`, `@bar/foo@1.2`, `foo@user/foo`, `http://x.com/foo.tgz`,
-`git+https://github.com/user/foo`, `bitbucket:user/foo`, `foo.tar.gz` or `bar`
-
-## EXAMPLES
-
-```javascript
-var assert = require("assert")
-var npa = require("npm-package-arg")
-
-// Pass in the descriptor, and it'll return an object
-var parsed = npa("@bar/foo@1.2")
-
-// Returns an object like:
-{
- raw: '@bar/foo@1.2', // what was passed in
- name: "foo", // the name of the package
- scope: "@bar", // the private scope of the package, or null
- type: "range", // the type of specifier this is
- spec: ">=1.2.0 <1.3.0" // the expanded specifier
- rawSpec: "1.2" // the specifier as passed in
- }
-
-// Parsing urls pointing at hosted git services produces a variation:
-var parsed = npa("git+https://github.com/user/foo")
-
-// Returns an object like:
-{
- raw: 'git+https://github.com/user/foo',
- scope: null,
- name: null,
- rawSpec: 'git+https://github.com/user/foo',
- spec: 'user/foo',
- type: 'hosted',
- hosted: {
- type: 'github',
- ssh: 'git@github.com:user/foo.git',
- sshurl: 'git+ssh://git@github.com/user/foo.git',
- https: 'https://github.com/user/foo.git',
- directUrl: 'https://raw.githubusercontent.com/user/foo/master/package.json'
- }
-}
-
-// Completely unreasonable invalid garbage throws an error
-// Make sure you wrap this in a try/catch if you have not
-// already sanitized the inputs!
-assert.throws(function() {
- npa("this is not \0 a valid package name or url")
-})
-```
-
-## USING
-
-`var npa = require('npm-package-arg')`
-
-* var result = npa(*arg*)
-
-Parses *arg* and returns a result object detailing what *arg* is.
-
-*arg* -- a package descriptor, like: `foo@1.2`, or `foo@user/foo`, or
-`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`
-
-## RESULT OBJECT
-
-The objects that are returned by npm-package-arg contain the following
-keys:
-
-* `name` - If known, the `name` field expected in the resulting pkg.
-* `type` - One of the following strings:
- * `git` - A git repo
- * `hosted` - A hosted project, from github, bitbucket or gitlab. Originally
- either a full url pointing at one of these services or a shorthand like
- `user/project` or `github:user/project` for github or `bitbucket:user/project`
- for bitbucket.
- * `tag` - A tagged version, like `"foo@latest"`
- * `version` - A specific version number, like `"foo@1.2.3"`
- * `range` - A version range, like `"foo@2.x"`
- * `local` - A local file or folder path
- * `remote` - An http url (presumably to a tgz)
-* `spec` - The "thing". URL, the range, git repo, etc.
-* `hosted` - If type=hosted this will be an object with the following keys:
- * `type` - github, bitbucket or gitlab
- * `ssh` - The ssh path for this git repo
- * `sshUrl` - The ssh URL for this git repo
- * `httpsUrl` - The HTTPS URL for this git repo
- * `directUrl` - The URL for the package.json in this git repo
-* `raw` - The original un-modified string that was provided.
-* `rawSpec` - The part after the `name@...`, as it was originally
- provided.
-* `scope` - If a name is something like `@org/module` then the `scope`
- field will be set to `org`. If it doesn't have a scoped name, then
- scope is `null`.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js
deleted file mode 100644
index 883c5401b4..0000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js
+++ /dev/null
@@ -1,181 +0,0 @@
-var url = require("url")
-var assert = require("assert")
-var util = require("util")
-var semver = require("semver")
-var path = require("path")
-var HostedGit = require("hosted-git-info")
-
-module.exports = npa
-
-var isWindows = process.platform === "win32" || global.FAKE_WINDOWS
-var slashRe = isWindows ? /\\|[/]/ : /[/]/
-
-var parseName = /^(?:@([^/]+?)[/])?([^/]+?)$/
-var nameAt = /^(@([^/]+?)[/])?([^/]+?)@/
-var debug = util.debuglog ? util.debuglog("npa")
- : /\bnpa\b/i.test(process.env.NODE_DEBUG || "")
- ? function () {
- console.error("NPA: " + util.format.apply(util, arguments).split("\n").join("\nNPA: "))
- } : function () {}
-
-function validName (name) {
- if (!name) {
- debug("not a name %j", name)
- return false
- }
- var n = name.trim()
- if (!n || n.charAt(0) === "."
- || !n.match(/^[a-zA-Z0-9]/)
- || n.match(/[/()&?#|<>@:%\s\\*'"!~`]/)
- || n.toLowerCase() === "node_modules"
- || n !== encodeURIComponent(n)
- || n.toLowerCase() === "favicon.ico") {
- debug("not a valid name %j", name)
- return false
- }
- return n
-}
-
-function npa (arg) {
- assert.equal(typeof arg, "string")
- arg = arg.trim()
-
- var res = new Result
- res.raw = arg
- res.scope = null
-
- // See if it's something like foo@...
- var nameparse = arg.match(nameAt)
- debug("nameparse", nameparse)
- if (nameparse && validName(nameparse[3]) &&
- (!nameparse[2] || validName(nameparse[2]))) {
- res.name = (nameparse[1] || "") + nameparse[3]
- if (nameparse[2])
- res.scope = "@" + nameparse[2]
- arg = arg.substr(nameparse[0].length)
- } else {
- res.name = null
- }
-
- res.rawSpec = arg
- res.spec = arg
-
- var urlparse = url.parse(arg)
- debug("urlparse", urlparse)
-
- // windows paths look like urls
- // don't be fooled!
- if (isWindows && urlparse && urlparse.protocol &&
- urlparse.protocol.match(/^[a-zA-Z]:$/)) {
- debug("windows url-ish local path", urlparse)
- urlparse = {}
- }
-
- if (urlparse.protocol || HostedGit.fromUrl(arg)) {
- return parseUrl(res, arg, urlparse)
- }
-
- // at this point, it's not a url, and not hosted
- // If it's a valid name, and doesn't already have a name, then assume
- // $name@"" range
- //
- // if it's got / chars in it, then assume that it's local.
-
- if (res.name) {
- var version = semver.valid(arg, true)
- var range = semver.validRange(arg, true)
- // foo@...
- if (version) {
- res.spec = version
- res.type = "version"
- } else if (range) {
- res.spec = range
- res.type = "range"
- } else if (slashRe.test(arg)) {
- parseLocal(res, arg)
- } else {
- res.type = "tag"
- res.spec = arg
- }
- } else {
- var p = arg.match(parseName)
- if (p && validName(p[2]) &&
- (!p[1] || validName(p[1]))) {
- res.type = "range"
- res.spec = "*"
- res.rawSpec = ""
- res.name = arg
- if (p[1])
- res.scope = "@" + p[1]
- } else {
- parseLocal(res, arg)
- }
- }
-
- return res
-}
-
-function parseLocal (res, arg) {
- // turns out nearly every character is allowed in fs paths
- if (/\0/.test(arg)) {
- throw new Error("Invalid Path: " + JSON.stringify(arg))
- }
- res.type = "local"
- res.spec = path.resolve(arg)
-}
-
-function parseUrl (res, arg, urlparse) {
- var gitHost = HostedGit.fromUrl(arg)
- if (gitHost) {
- res.type = "hosted"
- res.spec = gitHost.toString(),
- res.hosted = {
- type: gitHost.type,
- ssh: gitHost.ssh(),
- sshUrl: gitHost.sshurl(),
- httpsUrl: gitHost.https(),
- directUrl: gitHost.file("package.json")
- }
- return res
- }
- // check the protocol, and then see if it's git or not
- switch (urlparse.protocol) {
- case "git:":
- case "git+http:":
- case "git+https:":
- case "git+rsync:":
- case "git+ftp:":
- case "git+ssh:":
- case "git+file:":
- res.type = "git"
- res.spec = arg.replace(/^git[+]/, "")
- break
-
- case "http:":
- case "https:":
- res.type = "remote"
- res.spec = arg
- break
-
- case "file:":
- res.type = "local"
- res.spec = urlparse.pathname
- break
-
- default:
- throw new Error("Unsupported URL Type: " + arg)
- break
- }
-
- return res
-}
-
-
-function Result () {
- if (!(this instanceof Result)) return new Result
-}
-Result.prototype.name = null
-Result.prototype.type = null
-Result.prototype.spec = null
-Result.prototype.raw = null
-Result.prototype.hosted = null
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json
deleted file mode 100644
index ad8c540f32..0000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "npm-package-arg",
- "version": "3.1.0",
- "description": "Parse the things that can be arguments to `npm install`",
- "main": "npa.js",
- "directories": {
- "test": "test"
- },
- "dependencies": {
- "hosted-git-info": "^1.5.3",
- "semver": "4"
- },
- "devDependencies": {
- "tap": "^0.4.9"
- },
- "scripts": {
- "test": "tap test/*.js"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/npm/npm-package-arg"
- },
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me/"
- },
- "license": "ISC",
- "bugs": {
- "url": "https://github.com/npm/npm-package-arg/issues"
- },
- "homepage": "https://github.com/npm/npm-package-arg",
- "gitHead": "3d5c7f91c5e90e4b9792d881080c462f718f4747",
- "_id": "npm-package-arg@3.1.0",
- "_shasum": "8ce9d8ad83ae9fcc433783ca813e4e91f885703e",
- "_from": "npm-package-arg@>=3.0.0 <4.0.0",
- "_npmVersion": "2.4.1",
- "_nodeVersion": "1.0.4",
- "_npmUser": {
- "name": "iarna",
- "email": "me@re-becca.org"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- {
- "name": "othiym23",
- "email": "ogd@aoaioxxysz.net"
- },
- {
- "name": "iarna",
- "email": "me@re-becca.org"
- }
- ],
- "dist": {
- "shasum": "8ce9d8ad83ae9fcc433783ca813e4e91f885703e",
- "tarball": "http://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.1.0.tgz"
- },
- "_resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.1.0.tgz",
- "readme": "ERROR: No README data found!"
-}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js
deleted file mode 100644
index 4991ffcd3e..0000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js
+++ /dev/null
@@ -1,168 +0,0 @@
-var npa = require("../npa.js")
-var path = require("path")
-
-require("tap").test("basic", function (t) {
- t.setMaxListeners(999)
-
- var tests = {
- "foo@1.2": {
- name: "foo",
- type: "range",
- spec: ">=1.2.0 <1.3.0",
- raw: "foo@1.2",
- rawSpec: "1.2"
- },
-
- "@foo/bar": {
- raw: "@foo/bar",
- name: "@foo/bar",
- scope: "@foo",
- rawSpec: "",
- spec: "*",
- type: "range"
- },
-
- "@foo/bar@": {
- raw: "@foo/bar@",
- name: "@foo/bar",
- scope: "@foo",
- rawSpec: "",
- spec: "*",
- type: "range"
- },
-
- "@foo/bar@baz": {
- raw: "@foo/bar@baz",
- name: "@foo/bar",
- scope: "@foo",
- rawSpec: "baz",
- spec: "baz",
- type: "tag"
- },
-
- "@f fo o al/ a d s ;f ": {
- raw: "@f fo o al/ a d s ;f",
- name: null,
- rawSpec: "@f fo o al/ a d s ;f",
- spec: path.resolve("@f fo o al/ a d s ;f"),
- type: "local"
- },
-
- "foo@1.2.3": {
- name: "foo",
- type: "version",
- spec: "1.2.3",
- raw: "foo@1.2.3"
- },
-
- "foo@=v1.2.3": {
- name: "foo",
- type: "version",
- spec: "1.2.3",
- raw: "foo@=v1.2.3",
- rawSpec: "=v1.2.3"
- },
-
- "git+ssh://git@notgithub.com/user/foo#1.2.3": {
- name: null,
- type: "git",
- spec: "ssh://git@notgithub.com/user/foo#1.2.3",
- raw: "git+ssh://git@notgithub.com/user/foo#1.2.3"
- },
-
- "git+file://path/to/repo#1.2.3": {
- name: null,
- type: "git",
- spec: "file://path/to/repo#1.2.3",
- raw: "git+file://path/to/repo#1.2.3"
- },
-
- "git://notgithub.com/user/foo": {
- name: null,
- type: "git",
- spec: "git://notgithub.com/user/foo",
- raw: "git://notgithub.com/user/foo"
- },
-
- "@foo/bar@git+ssh://notgithub.com/user/foo": {
- name: "@foo/bar",
- scope: "@foo",
- spec: "ssh://notgithub.com/user/foo",
- rawSpec: "git+ssh://notgithub.com/user/foo",
- raw: "@foo/bar@git+ssh://notgithub.com/user/foo"
- },
-
- "/path/to/foo": {
- name: null,
- type: "local",
- spec: "/path/to/foo",
- raw: "/path/to/foo"
- },
-
- "file:path/to/foo": {
- name: null,
- type: "local",
- spec: "path/to/foo",
- raw: "file:path/to/foo"
- },
-
- "file:~/path/to/foo": {
- name: null,
- type: "local",
- spec: "~/path/to/foo",
- raw: "file:~/path/to/foo"
- },
-
- "file:../path/to/foo": {
- name: null,
- type: "local",
- spec: "../path/to/foo",
- raw: "file:../path/to/foo"
- },
-
- "file:///path/to/foo": {
- name: null,
- type: "local",
- spec: "/path/to/foo",
- raw: "file:///path/to/foo"
- },
-
- "https://server.com/foo.tgz": {
- name: null,
- type: "remote",
- spec: "https://server.com/foo.tgz",
- raw: "https://server.com/foo.tgz"
- },
-
- "foo@latest": {
- name: "foo",
- type: "tag",
- spec: "latest",
- raw: "foo@latest"
- },
-
- "foo": {
- name: "foo",
- type: "range",
- spec: "*",
- raw: "foo"
- }
- }
-
- Object.keys(tests).forEach(function (arg) {
- var res = npa(arg)
- t.type(res, "Result", arg + " is result")
- t.has(res, tests[arg], arg + " matches expectations")
- })
-
- // Completely unreasonable invalid garbage throws an error
- t.throws(function() {
- npa("this is not a \0 valid package name or url")
- })
-
- t.throws(function() {
- npa("gopher://yea right")
- }, "Unsupported URL Type: gopher://yea right")
-
- t.end()
-})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js
deleted file mode 100644
index e3c8ba6b59..0000000000
--- a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js
+++ /dev/null
@@ -1,41 +0,0 @@
-global.FAKE_WINDOWS = true
-
-var npa = require("../npa.js")
-var test = require("tap").test
-var path = require("path")
-
-var cases = {
- "C:\\x\\y\\z": {
- raw: "C:\\x\\y\\z",
- scope: null,
- name: null,
- rawSpec: "C:\\x\\y\\z",
- spec: path.resolve("C:\\x\\y\\z"),
- type: "local"
- },
- "foo@C:\\x\\y\\z": {
- raw: "foo@C:\\x\\y\\z",
- scope: null,
- name: "foo",
- rawSpec: "C:\\x\\y\\z",
- spec: path.resolve("C:\\x\\y\\z"),
- type: "local"
- },
- "foo@/foo/bar/baz": {
- raw: "foo@/foo/bar/baz",
- scope: null,
- name: "foo",
- rawSpec: "/foo/bar/baz",
- spec: path.resolve("/foo/bar/baz"),
- type: "local"
- }
-}
-
-test("parse a windows path", function (t) {
- Object.keys(cases).forEach(function (c) {
- var expect = cases[c]
- var actual = npa(c)
- t.same(actual, expect, c)
- })
- t.end()
-})
diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json
index 35b1ea4608..5643d79a41 100644
--- a/deps/npm/node_modules/npm-registry-client/package.json
+++ b/deps/npm/node_modules/npm-registry-client/package.json
@@ -6,13 +6,13 @@
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "6.1.1",
+ "version": "6.1.2",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client"
},
"main": "index.js",
"scripts": {
- "test": "tap test/*.js"
+ "test": "standard && tap test/*.js"
},
"dependencies": {
"chownr": "0",
@@ -32,6 +32,7 @@
"devDependencies": {
"negotiator": "^0.4.9",
"nock": "^0.56.0",
+ "standard": "^3.2.0",
"tap": ""
},
"optionalDependencies": {
@@ -40,12 +41,12 @@
"license": "ISC",
"readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\nvar uri = \"npm://registry.npmjs.org/npm\"\nvar params = {timeout: 1000}\n\nclient.get(uri, params, function (error, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Registry URLs\n\nThe registry calls take either a full URL pointing to a resource in the\nregistry, or a base URL for the registry as a whole (including the registry\npath – but be sure to terminate the path with `/`). `http` and `https` URLs are\nthe only ones supported.\n\n## Using the client\n\nEvery call to the client follows the same pattern:\n\n* `uri` {String} The *fully-qualified* URI of the registry API method being\n invoked.\n* `params` {Object} Per-request parameters.\n* `callback` {Function} Callback to be invoked when the call is complete.\n\n### Credentials\n\nMany requests to the registry can by authenticated, and require credentials\nfor authorization. These credentials always look the same:\n\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `alwaysAuth` {Boolean} Whether calls to the target registry are always\n authed.\n\n**or**\n\n* `token` {String}\n* `alwaysAuth` {Boolean} Whether calls to the target registry are always\n authed.\n\n## API\n\n### client.access(uri, params, cb)\n\n* `uri` {String} Registry URL for the package's access API endpoint.\n Looks like `/-/package//access`.\n* `params` {Object} Object containing per-request properties.\n * `access` {String} New access level for the package. Can be either\n `public` or `restricted`. Registry will raise an error if trying\n to change the access level of an unscoped package.\n * `auth` {Credentials}\n\nSet the access level for scoped packages. For now, there are only two\naccess levels: \"public\" and \"restricted\".\n\n### client.adduser(uri, params, cb)\n\n* `uri` {String} Base registry URL.\n* `params` {Object} Object containing per-request properties.\n * `auth` {Credentials}\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nAdd a user account to the registry, or verify the credentials.\n\n### client.deprecate(uri, params, cb)\n\n* `uri` {String} Full registry URI for the deprecated package.\n* `params` {Object} Object containing per-request properties.\n * `version` {String} Semver version range.\n * `message` {String} The message to use as a deprecation warning.\n * `auth` {Credentials}\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n### client.distTags.fetch(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `auth` {Credentials}\n* `cb` {Function}\n\nFetch all of the `dist-tags` for the named package.\n\n### client.distTags.add(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTag` {String} Name of the new `dist-tag`.\n * `version` {String} Exact version to be mapped to the `dist-tag`.\n * `auth` {Credentials}\n* `cb` {Function}\n\nAdd (or replace) a single dist-tag onto the named package.\n\n### client.distTags.set(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTags` {Object} Object containing a map from tag names to package\n versions.\n * `auth` {Credentials}\n* `cb` {Function}\n\nSet all of the `dist-tags` for the named package at once, creating any\n`dist-tags` that do not already exit. Any `dist-tags` not included in the\n`distTags` map will be removed.\n\n### client.distTags.update(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTags` {Object} Object containing a map from tag names to package\n versions.\n * `auth` {Credentials}\n* `cb` {Function}\n\nUpdate the values of multiple `dist-tags`, creating any `dist-tags` that do\nnot already exist. Any pre-existing `dist-tags` not included in the `distTags`\nmap will be left alone.\n\n### client.distTags.rm(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTag` {String} Name of the new `dist-tag`.\n * `auth` {Credentials}\n* `cb` {Function}\n\nRemove a single `dist-tag` from the named package.\n\n### client.get(uri, params, cb)\n\n* `uri` {String} The complete registry URI to fetch\n* `params` {Object} Object containing per-request properties.\n * `timeout` {Number} Duration before the request times out. Optional\n (default: never).\n * `follow` {Boolean} Follow 302/301 responses. Optional (default: true).\n * `staleOk` {Boolean} If there's cached data available, then return that to\n the callback quickly, and update the cache the background. Optional\n (default: false).\n * `auth` {Credentials} Optional.\n* `cb` {Function}\n\nFetches data from the registry via a GET request, saving it in the cache folder\nwith the ETag or the \"Last Modified\" timestamp.\n\n### client.publish(uri, params, cb)\n\n* `uri` {String} The registry URI for the package to publish.\n* `params` {Object} Object containing per-request properties.\n * `metadata` {Object} Package metadata.\n * `access` {String} Access for the package. Can be `public` or `restricted` (no default).\n * `body` {Stream} Stream of the package body / tarball.\n * `auth` {Credentials}\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder.\n\n### client.star(uri, params, cb)\n\n* `uri` {String} The complete registry URI for the package to star.\n* `params` {Object} Object containing per-request properties.\n * `starred` {Boolean} True to star the package, false to unstar it. Optional\n (default: false).\n * `auth` {Credentials}\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or unstar a\npackage, though other writes do require that the user be the package owner.\n\n### client.stars(uri, params, cb)\n\n* `uri` {String} The base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `username` {String} Name of user to fetch starred packages for. Optional\n (default: user in `auth`).\n * `auth` {Credentials} Optional (required if `username` is omitted).\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n### client.tag(uri, params, cb)\n\n* `uri` {String} The complete registry URI to tag\n* `params` {Object} Object containing per-request properties.\n * `version` {String} Version to tag.\n * `tag` {String} Tag name to apply.\n * `auth` {Credentials}\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\nspecified version.\n\n### client.unpublish(uri, params, cb)\n\n* `uri` {String} The complete registry URI of the package to unpublish.\n* `params` {Object} Object containing per-request properties.\n * `version` {String} version to unpublish. Optional – omit to unpublish all\n versions.\n * `auth` {Credentials}\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When the\nlast version us unpublished, the entire document is removed from the database.\n\n### client.whoami(uri, params, cb)\n\n* `uri` {String} The base registry for the URI.\n* `params` {Object} Object containing per-request properties.\n * `auth` {Credentials}\n* `cb` {Function}\n\nSimple call to see who the registry thinks you are. Especially useful with\ntoken-based auth.\n\n\n## PLUMBING\n\nThe below are primarily intended for use by the rest of the API, or by the npm\ncaching logic directly.\n\n### client.request(uri, params, cb)\n\n* `uri` {String} URI pointing to the resource to request.\n* `params` {Object} Object containing per-request properties.\n * `method` {String} HTTP method. Optional (default: \"GET\").\n * `body` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON. Optional – body\n only used for write operations.\n * `etag` {String} The cached ETag. Optional.\n * `lastModified` {String} The cached Last-Modified timestamp. Optional.\n * `follow` {Boolean} Follow 302/301 responses. Optional (default: true).\n * `auth` {Credentials} Optional.\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a generic request to the registry. All the other methods are wrappers\naround `client.request`.\n\n### client.fetch(uri, params, cb)\n\n* `uri` {String} The complete registry URI to upload to\n* `params` {Object} Object containing per-request properties.\n * `headers` {Stream} HTTP headers to be included with the request. Optional.\n * `auth` {Credentials} Optional.\n* `cb` {Function}\n\nFetch a package from a URL, with auth set appropriately if included. Used to\ncache remote tarballs as well as request package tarballs from the registry.\n\n# Configuration\n\nThe client uses its own configuration, which is just passed in as a simple\nnested object. The following are the supported values (with their defaults, if\nany):\n\n* `proxy.http` {URL} The URL to proxy HTTP requests through.\n* `proxy.https` {URL} The URL to proxy HTTPS requests through. Defaults to be\n the same as `proxy.http` if unset.\n* `proxy.localAddress` {IP} The local address to use on multi-homed systems.\n* `ssl.ca` {String} Certificate signing authority certificates to trust.\n* `ssl.certificate` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates.\n* `ssl.key` {String} Private key (PEM encoded) for client certificate.\n* `ssl.strict` {Boolean} Whether or not to be strict with SSL certificates.\n Default = `true`\n* `retry.count` {Number} Number of times to retry on GET failures. Default = 2.\n* `retry.factor` {Number} `factor` setting for `node-retry`. Default = 10.\n* `retry.minTimeout` {Number} `minTimeout` setting for `node-retry`.\n Default = 10000 (10 seconds)\n* `retry.maxTimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default = 60000 (60 seconds)\n* `userAgent` {String} User agent header to send. Default =\n `\"node/{process.version}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `defaultTag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `couchToken` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login).\n* `sessionToken` {string} A random identifier for this set of client requests.\n Default = 8 random hexadecimal bytes.\n",
"readmeFilename": "README.md",
- "gitHead": "88399fa1ebc5473125466ffa940c5b7df9e693bc",
+ "gitHead": "93606bb3d6c23971ff5d43763dfa10aada5775da",
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
"homepage": "https://github.com/isaacs/npm-registry-client",
- "_id": "npm-registry-client@6.1.1",
- "_shasum": "ffc74d9d85f3228fcd21a7eaad8a8ed134a5dddb",
- "_from": "npm-registry-client@>=6.1.1 <6.2.0"
+ "_id": "npm-registry-client@6.1.2",
+ "_shasum": "b74ba7efa9bfbbce46a1bd15fa97dc7d784099cb",
+ "_from": "npm-registry-client@>=6.1.2 <7.0.0"
}
diff --git a/deps/npm/node_modules/npm-registry-client/test/00-setup.js b/deps/npm/node_modules/npm-registry-client/test/00-setup.js
index ae6d03ed3f..747768fb85 100644
--- a/deps/npm/node_modules/npm-registry-client/test/00-setup.js
+++ b/deps/npm/node_modules/npm-registry-client/test/00-setup.js
@@ -1,10 +1,10 @@
-var tap = require("tap")
-var rimraf = require("rimraf")
+var tap = require('tap')
+var rimraf = require('rimraf')
-tap.test("setup", function (t) {
- rimraf(__dirname + "/fixtures/cache", function (er) {
+tap.test('setup', function (t) {
+ rimraf(__dirname + '/fixtures/cache', function (er) {
if (er) throw er
- t.pass("cache cleaned")
+ t.pass('cache cleaned')
t.end()
})
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/access.js b/deps/npm/node_modules/npm-registry-client/test/access.js
index 52ecdda4a4..4081c329f7 100644
--- a/deps/npm/node_modules/npm-registry-client/test/access.js
+++ b/deps/npm/node_modules/npm-registry-client/test/access.js
@@ -1,95 +1,95 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function nop() {}
+function nop () {}
-var URI = "http://localhost:1337/-/package/underscore/access"
-var TOKEN = "foo"
+var URI = 'http://localhost:1337/-/package/underscore/access'
+var TOKEN = 'foo'
var AUTH = {
- token : TOKEN
+ token: TOKEN
}
-var LEVEL = "public"
+var LEVEL = 'public'
var PARAMS = {
- level : LEVEL,
- auth : AUTH
+ level: LEVEL,
+ auth: AUTH
}
-test("access call contract", function (t) {
+test('access call contract', function (t) {
t.throws(function () {
client.access(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.access([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.access(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.access(URI, "", nop)
- }, "params must be object")
+ client.access(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.access(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.access(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.access(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- auth : AUTH
+ auth: AUTH
}
client.access(URI, params, nop)
},
- { name : "AssertionError", message : "must pass level to access" },
- "access must include level"
+ { name: 'AssertionError', message: 'must pass level to access' },
+ 'access must include level'
)
t.throws(
function () {
var params = {
- level : LEVEL
+ level: LEVEL
}
client.access(URI, params, nop)
},
- { name : "AssertionError", message : "must pass auth to access" },
- "access must include auth"
+ { name: 'AssertionError', message: 'must pass auth to access' },
+ 'access must include auth'
)
t.end()
})
-test("set access level on a package", function (t) {
- server.expect("POST", "/-/package/underscore/access", function (req, res) {
- t.equal(req.method, "POST")
+test('set access level on a package', function (t) {
+ server.expect('POST', '/-/package/underscore/access', function (req, res) {
+ t.equal(req.method, 'POST')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var updated = JSON.parse(b)
- t.deepEqual(updated, { access : "public" })
+ t.deepEqual(updated, { access: 'public' })
res.statusCode = 201
- res.json({accessChanged : true})
+ res.json({ accessChanged: true })
})
})
client.access(URI, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.ok(data.accessChanged, "access level set")
+ t.ifError(error, 'no errors')
+ t.ok(data.accessChanged, 'access level set')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/adduser-new.js b/deps/npm/node_modules/npm-registry-client/test/adduser-new.js
index 3789fc954b..d8c415bc5f 100644
--- a/deps/npm/node_modules/npm-registry-client/test/adduser-new.js
+++ b/deps/npm/node_modules/npm-registry-client/test/adduser-new.js
@@ -1,38 +1,40 @@
-var tap = require("tap")
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var password = "%1234@asdf%"
- , username = "username"
- , email = "i@izs.me"
- , userdata = {
- name: username,
- email: email,
- _id: "org.couchdb.user:username",
- type: "user",
- roles: [],
- date: "2012-06-07T04:11:21.591Z" }
- , SD = require("string_decoder").StringDecoder
- , decoder = new SD()
-
-tap.test("create new user account", function (t) {
+var password = '%1234@asdf%'
+var username = 'username'
+var email = 'i@izs.me'
+var userdata = {
+ name: username,
+ email: email,
+ _id: 'org.couchdb.user:username',
+ type: 'user',
+ roles: [],
+ date: '2012-06-07T04:11:21.591Z'
+}
+
+var SD = require('string_decoder').StringDecoder
+var decoder = new SD()
+
+tap.test('create new user account', function (t) {
var auth = {
- username : username,
- password : password,
- email : email
+ username: username,
+ password: password,
+ email: email
}
- var params = { auth : auth }
+ var params = { auth: auth }
- server.expect("/registry/_design/app/_rewrite/-/user/org.couchdb.user:username", function (req, res) {
- t.equal(req.method, "PUT")
- var b = ""
- req.on("data", function (d) {
+ server.expect('/registry/_design/app/_rewrite/-/user/org.couchdb.user:username', function (req, res) {
+ t.equal(req.method, 'PUT')
+ var b = ''
+ req.on('data', function (d) {
b += decoder.write(d)
})
- req.on("end", function () {
+ req.on('end', function () {
var o = JSON.parse(b)
userdata.password = password
userdata.date = o.date
@@ -44,11 +46,11 @@ tap.test("create new user account", function (t) {
})
client.adduser(
- "http://localhost:1337/registry/_design/app/_rewrite",
+ 'http://localhost:1337/registry/_design/app/_rewrite',
params,
function (er, data) {
if (er) throw er
- t.deepEqual(data, auth, "received expected auth data")
+ t.deepEqual(data, auth, 'received expected auth data')
t.end()
}
)
diff --git a/deps/npm/node_modules/npm-registry-client/test/adduser-update.js b/deps/npm/node_modules/npm-registry-client/test/adduser-update.js
index 6732f7ba0e..18aad3ebe4 100644
--- a/deps/npm/node_modules/npm-registry-client/test/adduser-update.js
+++ b/deps/npm/node_modules/npm-registry-client/test/adduser-update.js
@@ -1,51 +1,50 @@
-var tap = require("tap")
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var password = "%1234@asdf%"
-, username = "username"
-, email = "i@izs.me"
-, userdata = {
+var password = '%1234@asdf%'
+var username = 'username'
+var email = 'i@izs.me'
+var userdata = {
name: username,
email: email,
- _id: "org.couchdb.user:username",
- type: "user",
+ _id: 'org.couchdb.user:username',
+ type: 'user',
roles: [],
- date: "2012-06-07T04:11:21.591Z" }
-, SD = require("string_decoder").StringDecoder
-, decoder = new SD()
+ date: '2012-06-07T04:11:21.591Z' }
+var SD = require('string_decoder').StringDecoder
+var decoder = new SD()
-
-tap.test("update a user acct", function (t) {
+tap.test('update a user acct', function (t) {
var auth = {
- username : username,
- password : password,
- email : email
+ username: username,
+ password: password,
+ email: email
}
- var params = { auth : auth }
+ var params = { auth: auth }
- server.expect("PUT", "/-/user/org.couchdb.user:username", function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('PUT', '/-/user/org.couchdb.user:username', function (req, res) {
+ t.equal(req.method, 'PUT')
res.statusCode = 409
- res.json({error: "conflict"})
+ res.json({error: 'conflict'})
})
- server.expect("GET", "/-/user/org.couchdb.user:username?write=true", function (req, res) {
- t.equal(req.method, "GET")
+ server.expect('GET', '/-/user/org.couchdb.user:username?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(userdata)
})
- server.expect("PUT", "/-/user/org.couchdb.user:username/-rev/" + userdata._rev, function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('PUT', '/-/user/org.couchdb.user:username/-rev/' + userdata._rev, function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.on("data", function (d) {
+ var b = ''
+ req.on('data', function (d) {
b += decoder.write(d)
})
- req.on("end", function () {
+ req.on('end', function () {
var o = JSON.parse(b)
userdata.password = password
userdata.date = o.date
@@ -57,11 +56,11 @@ tap.test("update a user acct", function (t) {
})
client.adduser(
- "http://localhost:1337/",
+ 'http://localhost:1337/',
params,
function (er, data) {
if (er) throw er
- t.deepEqual(data, auth, "got expected auth data")
+ t.deepEqual(data, auth, 'got expected auth data')
t.end()
}
)
diff --git a/deps/npm/node_modules/npm-registry-client/test/adduser.js b/deps/npm/node_modules/npm-registry-client/test/adduser.js
index fccb037afe..10816ebf95 100644
--- a/deps/npm/node_modules/npm-registry-client/test/adduser.js
+++ b/deps/npm/node_modules/npm-registry-client/test/adduser.js
@@ -1,153 +1,153 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
function nop () {}
-var URI = "https://npm.registry:8043/rewrite"
-var USERNAME = "username"
-var PASSWORD = "password"
-var EMAIL = "n@p.m"
-var AUTH = {
- auth : {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var URI = 'https://npm.registry:8043/rewrite'
+var USERNAME = 'username'
+var PASSWORD = 'password'
+var EMAIL = 'n@p.m'
+var AUTH = {
+ auth: {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
}
-test("adduser call contract", function (t) {
+test('adduser call contract', function (t) {
t.throws(function () {
client.adduser(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.adduser([], AUTH, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.adduser(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.adduser(URI, "", nop)
- }, "params must be object")
+ client.adduser(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.adduser(URI, AUTH, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.adduser(URI, AUTH, "callback")
- }, "callback must be function")
+ client.adduser(URI, AUTH, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- auth : {
- password : PASSWORD,
- email : EMAIL
+ auth: {
+ password: PASSWORD,
+ email: EMAIL
}
}
client.adduser(URI, params, nop)
},
- { name : "AssertionError", message : "must include username in auth" },
- "auth must include username"
+ { name: 'AssertionError', message: 'must include username in auth' },
+ 'auth must include username'
)
t.throws(
function () {
var params = {
- auth : {
- username : USERNAME,
- email : EMAIL
+ auth: {
+ username: USERNAME,
+ email: EMAIL
}
}
client.adduser(URI, params, nop)
},
- { name : "AssertionError", message : "must include password in auth" },
- "auth must include password"
+ { name: 'AssertionError', message: 'must include password in auth' },
+ 'auth must include password'
)
t.throws(
function () {
var params = {
- auth : {
- username : USERNAME,
- password : PASSWORD
+ auth: {
+ username: USERNAME,
+ password: PASSWORD
}
}
client.adduser(URI, params, nop)
},
- { name : "AssertionError", message : "must include email in auth" },
- "auth must include email"
+ { name: 'AssertionError', message: 'must include email in auth' },
+ 'auth must include email'
)
- t.test("username missing", function (t) {
+ t.test('username missing', function (t) {
var params = {
- auth : {
- username : "",
- password : PASSWORD,
- email : EMAIL
+ auth: {
+ username: '',
+ password: PASSWORD,
+ email: EMAIL
}
}
client.adduser(URI, params, function (err) {
- t.equal(err && err.message, "No username supplied.", "username must not be empty")
+ t.equal(err && err.message, 'No username supplied.', 'username must not be empty')
t.end()
})
})
- t.test("password missing", function (t) {
+ t.test('password missing', function (t) {
var params = {
- auth : {
- username : USERNAME,
- password : "",
- email : EMAIL
+ auth: {
+ username: USERNAME,
+ password: '',
+ email: EMAIL
}
}
client.adduser(URI, params, function (err) {
t.equal(
err && err.message,
- "No password supplied.",
- "password must not be empty"
+ 'No password supplied.',
+ 'password must not be empty'
)
t.end()
})
})
- t.test("email missing", function (t) {
+ t.test('email missing', function (t) {
var params = {
- auth : {
- username : USERNAME,
- password : PASSWORD,
- email : ""
+ auth: {
+ username: USERNAME,
+ password: PASSWORD,
+ email: ''
}
}
client.adduser(URI, params, function (err) {
t.equal(
err && err.message,
- "No email address supplied.",
- "email must not be empty"
+ 'No email address supplied.',
+ 'email must not be empty'
)
t.end()
})
})
- t.test("email malformed", function (t) {
+ t.test('email malformed', function (t) {
var params = {
- auth : {
- username : USERNAME,
- password : PASSWORD,
- email : "lolbutts"
+ auth: {
+ username: USERNAME,
+ password: PASSWORD,
+ email: 'lolbutts'
}
}
client.adduser(URI, params, function (err) {
t.equal(
err && err.message,
- "Please use a real email address.",
- "email must look like email"
+ 'Please use a real email address.',
+ 'email must look like email'
)
t.end()
})
@@ -156,7 +156,7 @@ test("adduser call contract", function (t) {
t.end()
})
-test("cleanup", function (t) {
+test('cleanup', function (t) {
server.close()
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/config-defaults.js b/deps/npm/node_modules/npm-registry-client/test/config-defaults.js
index 46756297a3..a432da8581 100644
--- a/deps/npm/node_modules/npm-registry-client/test/config-defaults.js
+++ b/deps/npm/node_modules/npm-registry-client/test/config-defaults.js
@@ -1,42 +1,42 @@
-var test = require("tap").test
+var test = require('tap').test
-require("./lib/server.js").close()
-var common = require("./lib/common.js")
+require('./lib/server.js').close()
+var common = require('./lib/common.js')
-test("config defaults", function (t) {
+test('config defaults', function (t) {
var client = common.freshClient()
var proxy = client.config.proxy
- t.notOk(proxy.http, "no default value for HTTP proxy")
- t.notOk(proxy.https, "no default value for HTTPS proxy")
- t.notOk(proxy.localAddress, "no default value for local address")
+ t.notOk(proxy.http, 'no default value for HTTP proxy')
+ t.notOk(proxy.https, 'no default value for HTTPS proxy')
+ t.notOk(proxy.localAddress, 'no default value for local address')
var ssl = client.config.ssl
- t.notOk(ssl.ca, "no default value for SSL certificate authority bundle")
- t.notOk(ssl.certificate, "no default value for SSL client certificate")
- t.notOk(ssl.key, "no default value for SSL client certificate key")
- t.equal(ssl.strict, true, "SSL is strict by default")
+ t.notOk(ssl.ca, 'no default value for SSL certificate authority bundle')
+ t.notOk(ssl.certificate, 'no default value for SSL client certificate')
+ t.notOk(ssl.key, 'no default value for SSL client certificate key')
+ t.equal(ssl.strict, true, 'SSL is strict by default')
var retry = client.config.retry
- t.equal(retry.retries, 2, "default retry count is 2")
- t.equal(retry.factor, 10, "default retry factor is 10")
- t.equal(retry.minTimeout, 10000, "retry minimum timeout is 10000 (10 seconds)")
- t.equal(retry.maxTimeout, 60000, "retry maximum timeout is 60000 (60 seconds)")
+ t.equal(retry.retries, 2, 'default retry count is 2')
+ t.equal(retry.factor, 10, 'default retry factor is 10')
+ t.equal(retry.minTimeout, 10000, 'retry minimum timeout is 10000 (10 seconds)')
+ t.equal(retry.maxTimeout, 60000, 'retry maximum timeout is 60000 (60 seconds)')
- t.equal(client.config.userAgent, "node/"+process.version, "default userAgent")
+ t.equal(client.config.userAgent, 'node/' + process.version, 'default userAgent')
t.ok(client.log.info, "there's a default logger")
- t.equal(client.config.defaultTag, "latest", "default tag is 'latest'")
- t.notOk(client.config.couchToken, "no couchToken by default")
- t.notOk(client.config.sessionToken, "no sessionToken by default")
+ t.equal(client.config.defaultTag, 'latest', 'default tag is "latest"')
+ t.notOk(client.config.couchToken, 'no couchToken by default')
+ t.notOk(client.config.sessionToken, 'no sessionToken by default')
t.end()
})
-test("missing HTTPS proxy defaults to HTTP proxy", function (t) {
- var client = common.freshClient({ proxy : { http : "http://proxy.npm:8088/" }})
+test('missing HTTPS proxy defaults to HTTP proxy', function (t) {
+ var client = common.freshClient({ proxy: { http: 'http://proxy.npm:8088/' }})
- t.equal(client.config.proxy.http, "http://proxy.npm:8088/", "HTTP proxy set")
- t.equal(client.config.proxy.http, client.config.proxy.https, "HTTP === HTTPS")
+ t.equal(client.config.proxy.http, 'http://proxy.npm:8088/', 'HTTP proxy set')
+ t.equal(client.config.proxy.http, client.config.proxy.https, 'HTTP === HTTPS')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/config-override.js b/deps/npm/node_modules/npm-registry-client/test/config-override.js
index 4e12406925..026cb199cb 100644
--- a/deps/npm/node_modules/npm-registry-client/test/config-override.js
+++ b/deps/npm/node_modules/npm-registry-client/test/config-override.js
@@ -1,44 +1,44 @@
-var test = require("tap").test
+var test = require('tap').test
-require("./lib/server.js").close()
-var common = require("./lib/common.js")
+require('./lib/server.js').close()
+var common = require('./lib/common.js')
var config = {
- proxy : {
- http : "http://proxy.npm:8088/",
- https : "https://proxy.npm:8043/",
- localAddress : "localhost.localdomain"
+ proxy: {
+ http: 'http://proxy.npm:8088/',
+ https: 'https://proxy.npm:8043/',
+ localAddress: 'localhost.localdomain'
},
- ssl : {
- ca : "not including a PEM",
- certificate : "still not including a PEM",
- key : "nope",
- strict : false
+ ssl: {
+ ca: 'not including a PEM',
+ certificate: 'still not including a PEM',
+ key: 'nope',
+ strict: false
},
- retry : {
- count : 1,
- factor : 9001,
- minTimeout : -1,
- maxTimeout : Infinity
+ retry: {
+ count: 1,
+ factor: 9001,
+ minTimeout: -1,
+ maxTimeout: Infinity
},
- userAgent : "npm-awesome/4 (Mozilla 5.0)",
- log : { fake : function () {} },
- defaultTag : "next",
- couchToken : { object : true },
- sessionToken : "hamchunx"
+ userAgent: 'npm-awesome/4 (Mozilla 5.0)',
+ log: { fake: function () {} },
+ defaultTag: 'next',
+ couchToken: { object: true },
+ sessionToken: 'hamchunx'
}
-test("config defaults", function (t) {
+test('config defaults', function (t) {
var client = common.freshClient(config)
var proxy = client.config.proxy
- t.equal(proxy.http, "http://proxy.npm:8088/")
- t.equal(proxy.https, "https://proxy.npm:8043/")
- t.equal(proxy.localAddress, "localhost.localdomain")
+ t.equal(proxy.http, 'http://proxy.npm:8088/')
+ t.equal(proxy.https, 'https://proxy.npm:8043/')
+ t.equal(proxy.localAddress, 'localhost.localdomain')
var ssl = client.config.ssl
- t.equal(ssl.ca, "not including a PEM")
- t.equal(ssl.certificate, "still not including a PEM")
- t.equal(ssl.key, "nope")
+ t.equal(ssl.ca, 'not including a PEM')
+ t.equal(ssl.certificate, 'still not including a PEM')
+ t.equal(ssl.key, 'nope')
t.equal(ssl.strict, false)
var retry = client.config.retry
@@ -47,11 +47,11 @@ test("config defaults", function (t) {
t.equal(retry.minTimeout, -1)
t.equal(retry.maxTimeout, Infinity)
- t.equal(client.config.userAgent, "npm-awesome/4 (Mozilla 5.0)")
+ t.equal(client.config.userAgent, 'npm-awesome/4 (Mozilla 5.0)')
t.ok(client.log.fake)
- t.equal(client.config.defaultTag, "next")
+ t.equal(client.config.defaultTag, 'next')
t.ok(client.config.couchToken.object)
- t.equal(client.config.sessionToken, "hamchunx")
+ t.equal(client.config.sessionToken, 'hamchunx')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/deprecate.js b/deps/npm/node_modules/npm-registry-client/test/deprecate.js
index 84b82b919c..d49f71215c 100644
--- a/deps/npm/node_modules/npm-registry-client/test/deprecate.js
+++ b/deps/npm/node_modules/npm-registry-client/test/deprecate.js
@@ -1,98 +1,98 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
-var cache = require("./fixtures/underscore/cache.json")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
+var cache = require('./fixtures/underscore/cache.json')
var client = common.freshClient()
function nop () {}
-var URI = "https://npm.registry:8043/rewrite"
-var VERSION = "1.3.2"
-var MESSAGE = "uhhh"
-var TOKEN = "lolbutts"
-var AUTH = {
- token : TOKEN
+var URI = 'https://npm.registry:8043/rewrite'
+var VERSION = '1.3.2'
+var MESSAGE = 'uhhh'
+var TOKEN = 'lolbutts'
+var AUTH = {
+ token: TOKEN
}
-var PARAMS = {
- version : VERSION,
- message : MESSAGE,
- auth : AUTH
+var PARAMS = {
+ version: VERSION,
+ message: MESSAGE,
+ auth: AUTH
}
-test("deprecate call contract", function (t) {
+test('deprecate call contract', function (t) {
t.throws(function () {
client.deprecate(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.deprecate([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.deprecate(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.deprecate(URI, "", nop)
- }, "params must be object")
+ client.deprecate(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.deprecate(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.deprecate(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.deprecate(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- message : MESSAGE,
- auth : AUTH
+ message: MESSAGE,
+ auth: AUTH
}
client.deprecate(URI, params, nop)
},
- { name : "AssertionError", message : "must pass version to deprecate" },
- "params must include version to deprecate"
+ { name: 'AssertionError', message: 'must pass version to deprecate' },
+ 'params must include version to deprecate'
)
t.throws(
function () {
var params = {
- version : VERSION,
- auth : AUTH
+ version: VERSION,
+ auth: AUTH
}
client.deprecate(URI, params, nop)
},
- { name : "AssertionError", message : "must pass message to deprecate" },
- "params must include deprecation message"
+ { name: 'AssertionError', message: 'must pass message to deprecate' },
+ 'params must include deprecation message'
)
t.throws(
function () {
var params = {
- version : VERSION,
- message : MESSAGE
+ version: VERSION,
+ message: MESSAGE
}
client.deprecate(URI, params, nop)
},
- { name : "AssertionError", message : "must pass auth to deprecate" },
- "params must include auth"
+ { name: 'AssertionError', message: 'must pass auth to deprecate' },
+ 'params must include auth'
)
- t.test("malformed semver in deprecation", function (t) {
+ t.test('malformed semver in deprecation', function (t) {
var params = {
- version : "-9001",
- message : MESSAGE,
- auth : AUTH
+ version: '-9001',
+ message: MESSAGE,
+ auth: AUTH
}
client.deprecate(URI, params, function (err) {
t.equal(
err && err.message,
- "invalid version range: -9001",
- "got expected semver validation failure"
+ 'invalid version range: -9001',
+ 'got expected semver validation failure'
)
t.end()
})
@@ -101,54 +101,54 @@ test("deprecate call contract", function (t) {
t.end()
})
-test("deprecate a package", function (t) {
- server.expect("GET", "/underscore?write=true", function (req, res) {
- t.equal(req.method, "GET")
+test('deprecate a package', function (t) {
+ server.expect('GET', '/underscore?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(cache)
})
- server.expect("PUT", "/underscore", function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('PUT', '/underscore', function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var updated = JSON.parse(b)
- var undeprecated = [
- "1.0.3", "1.0.4", "1.1.0", "1.1.1", "1.1.2", "1.1.3", "1.1.4", "1.1.5", "1.1.6",
- "1.1.7", "1.2.0", "1.2.1", "1.2.2", "1.2.3", "1.2.4", "1.3.0", "1.3.1", "1.3.3"
+ var undeprecated = [
+ '1.0.3', '1.0.4', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6',
+ '1.1.7', '1.2.0', '1.2.1', '1.2.2', '1.2.3', '1.2.4', '1.3.0', '1.3.1', '1.3.3'
]
for (var i = 0; i < undeprecated.length; i++) {
var current = undeprecated[i]
t.notEqual(
updated.versions[current].deprecated,
MESSAGE,
- current + " not deprecated"
+ current + ' not deprecated'
)
}
t.equal(
updated.versions[VERSION].deprecated,
MESSAGE,
- VERSION + " deprecated"
+ VERSION + ' deprecated'
)
res.statusCode = 201
- res.json({deprecated:true})
+ res.json({ deprecated: true })
})
})
client.deprecate(
- common.registry + "/underscore",
+ common.registry + '/underscore',
PARAMS,
function (er, data) {
t.ifError(er)
- t.ok(data.deprecated, "was deprecated")
+ t.ok(data.deprecated, 'was deprecated')
t.end()
}
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js
index a215c67d93..e66d80a3e3 100644
--- a/deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js
+++ b/deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js
@@ -1,140 +1,140 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function nop() {}
+function nop () {}
-var BASE_URL = "http://localhost:1337/"
-var URI = "/-/package/underscore/dist-tags/test"
-var TOKEN = "foo"
+var BASE_URL = 'http://localhost:1337/'
+var URI = '/-/package/underscore/dist-tags/test'
+var TOKEN = 'foo'
var AUTH = {
- token : TOKEN
+ token: TOKEN
}
-var PACKAGE = "underscore"
-var DIST_TAG = "test"
-var VERSION = "3.1.3"
+var PACKAGE = 'underscore'
+var DIST_TAG = 'test'
+var VERSION = '3.1.3'
var PARAMS = {
- package : PACKAGE,
- distTag : DIST_TAG,
- version : VERSION,
- auth : AUTH
+ 'package': PACKAGE,
+ distTag: DIST_TAG,
+ version: VERSION,
+ auth: AUTH
}
-test("distTags.add call contract", function (t) {
+test('distTags.add call contract', function (t) {
t.throws(function () {
client.distTags.add(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.distTags.add([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.distTags.add(BASE_URL, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.distTags.add(BASE_URL, "", nop)
- }, "params must be object")
+ client.distTags.add(BASE_URL, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.distTags.add(BASE_URL, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.distTags.add(BASE_URL, PARAMS, "callback")
- }, "callback must be function")
+ client.distTags.add(BASE_URL, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- distTag : DIST_TAG,
- version : VERSION,
- auth : AUTH
+ distTag: DIST_TAG,
+ version: VERSION,
+ auth: AUTH
}
client.distTags.add(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package name to distTags.add"
+ name: 'AssertionError',
+ message: 'must pass package name to distTags.add'
},
- "distTags.add must include package name"
+ 'distTags.add must include package name'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- version : VERSION,
- auth : AUTH
+ 'package': PACKAGE,
+ version: VERSION,
+ auth: AUTH
}
client.distTags.add(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package distTag name to distTags.add"
+ name: 'AssertionError',
+ message: 'must pass package distTag name to distTags.add'
},
- "distTags.add must include dist-tag"
+ 'distTags.add must include dist-tag'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- distTag : DIST_TAG,
- auth : AUTH
+ 'package': PACKAGE,
+ distTag: DIST_TAG,
+ auth: AUTH
}
client.distTags.add(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass version to be mapped to distTag to distTags.add"
+ name: 'AssertionError',
+ message: 'must pass version to be mapped to distTag to distTags.add'
},
- "distTags.add must include version"
+ 'distTags.add must include version'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- distTag : DIST_TAG,
- version : VERSION
+ 'package': PACKAGE,
+ distTag: DIST_TAG,
+ version: VERSION
}
client.distTags.add(BASE_URL, params, nop)
},
- { name : "AssertionError", message : "must pass auth to distTags.add" },
- "distTags.add must include auth"
+ { name: 'AssertionError', message: 'must pass auth to distTags.add' },
+ 'distTags.add must include auth'
)
t.end()
})
-test("add a new dist-tag to a package", function (t) {
- server.expect("PUT", URI, function (req, res) {
- t.equal(req.method, "PUT")
+test('add a new dist-tag to a package', function (t) {
+ server.expect('PUT', URI, function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
t.doesNotThrow(function () {
var parsed = JSON.parse(b)
t.deepEqual(parsed, VERSION)
res.statusCode = 200
- res.json({ "test" : VERSION })
- }, "got valid JSON from client")
+ res.json({ test: VERSION })
+ }, 'got valid JSON from client')
})
})
client.distTags.add(BASE_URL, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.ok(data.test, "dist-tag added")
+ t.ifError(error, 'no errors')
+ t.ok(data.test, 'dist-tag added')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js
index c108b6b392..ef0901ea7f 100644
--- a/deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js
+++ b/deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js
@@ -1,97 +1,97 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function nop() {}
+function nop () {}
-var BASE_URL = "http://localhost:1337/"
-var URI = "/-/package/underscore/dist-tags"
-var TOKEN = "foo"
+var BASE_URL = 'http://localhost:1337/'
+var URI = '/-/package/underscore/dist-tags'
+var TOKEN = 'foo'
var AUTH = {
- token : TOKEN
+ token: TOKEN
}
-var PACKAGE = "underscore"
+var PACKAGE = 'underscore'
var PARAMS = {
- package : PACKAGE,
- auth : AUTH
+ 'package': PACKAGE,
+ auth: AUTH
}
-test("distTags.fetch call contract", function (t) {
+test('distTags.fetch call contract', function (t) {
t.throws(function () {
client.distTags.fetch(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.distTags.fetch([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.distTags.fetch(BASE_URL, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.distTags.fetch(BASE_URL, "", nop)
- }, "params must be object")
+ client.distTags.fetch(BASE_URL, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.distTags.fetch(BASE_URL, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.distTags.fetch(BASE_URL, PARAMS, "callback")
- }, "callback must be function")
+ client.distTags.fetch(BASE_URL, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- auth : AUTH
+ auth: AUTH
}
client.distTags.fetch(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package name to distTags.fetch"
+ name: 'AssertionError',
+ message: 'must pass package name to distTags.fetch'
},
- "distTags.fetch must include package name"
+ 'distTags.fetch must include package name'
)
t.throws(
function () {
var params = {
- package : PACKAGE
+ 'package': PACKAGE
}
client.distTags.fetch(BASE_URL, params, nop)
},
- { name : "AssertionError", message : "must pass auth to distTags.fetch" },
- "distTags.fetch must include auth"
+ { name: 'AssertionError', message: 'must pass auth to distTags.fetch' },
+ 'distTags.fetch must include auth'
)
t.end()
})
-test("fetch dist-tags for a package", function (t) {
- server.expect("GET", URI, function (req, res) {
- t.equal(req.method, "GET")
+test('fetch dist-tags for a package', function (t) {
+ server.expect('GET', URI, function (req, res) {
+ t.equal(req.method, 'GET')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
- t.notOk(b, "no request body")
+ req.on('end', function () {
+ t.notOk(b, 'no request body')
res.statusCode = 200
- res.json({ a : "1.0.0", b : "2.0.0", _etag : "xxx" })
+ res.json({ a: '1.0.0', b: '2.0.0', _etag: 'xxx' })
})
})
client.distTags.fetch(BASE_URL, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.same(data, { a : "1.0.0", b : "2.0.0" }, "etag filtered from response")
+ t.ifError(error, 'no errors')
+ t.same(data, { a: '1.0.0', b: '2.0.0' }, 'etag filtered from response')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js
index 6268a06aaa..a035014dc6 100644
--- a/deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js
+++ b/deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js
@@ -1,107 +1,107 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function nop() {}
+function nop () {}
-var BASE_URL = "http://localhost:1337/"
-var URI = "/-/package/underscore/dist-tags/test"
-var TOKEN = "foo"
+var BASE_URL = 'http://localhost:1337/'
+var URI = '/-/package/underscore/dist-tags/test'
+var TOKEN = 'foo'
var AUTH = {
- token : TOKEN
+ token: TOKEN
}
-var PACKAGE = "underscore"
-var DIST_TAG = "test"
+var PACKAGE = 'underscore'
+var DIST_TAG = 'test'
var PARAMS = {
- package : PACKAGE,
- distTag : DIST_TAG,
- auth : AUTH
+ 'package': PACKAGE,
+ distTag: DIST_TAG,
+ auth: AUTH
}
-test("distTags.rm call contract", function (t) {
+test('distTags.rm call contract', function (t) {
t.throws(function () {
client.distTags.rm(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.distTags.rm([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.distTags.rm(BASE_URL, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.distTags.rm(BASE_URL, "", nop)
- }, "params must be object")
+ client.distTags.rm(BASE_URL, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.distTags.rm(BASE_URL, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.distTags.rm(BASE_URL, PARAMS, "callback")
- }, "callback must be function")
+ client.distTags.rm(BASE_URL, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- distTag : DIST_TAG,
- auth : AUTH
+ distTag: DIST_TAG,
+ auth: AUTH
}
client.distTags.rm(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package name to distTags.rm"
+ name: 'AssertionError',
+ message: 'must pass package name to distTags.rm'
},
- "distTags.rm must include package name"
+ 'distTags.rm must include package name'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- auth : AUTH
+ 'package': PACKAGE,
+ auth: AUTH
}
client.distTags.rm(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package distTag name to distTags.rm"
+ name: 'AssertionError',
+ message: 'must pass package distTag name to distTags.rm'
},
- "distTags.rm must include dist-tag"
+ 'distTags.rm must include dist-tag'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- distTag : DIST_TAG
+ 'package': PACKAGE,
+ distTag: DIST_TAG
}
client.distTags.rm(BASE_URL, params, nop)
},
- { name : "AssertionError", message : "must pass auth to distTags.rm" },
- "distTags.rm must include auth"
+ { name: 'AssertionError', message: 'must pass auth to distTags.rm' },
+ 'distTags.rm must include auth'
)
t.end()
})
-test("remove a dist-tag from a package", function (t) {
- server.expect("DELETE", URI, function (req, res) {
- t.equal(req.method, "DELETE")
+test('remove a dist-tag from a package', function (t) {
+ server.expect('DELETE', URI, function (req, res) {
+ t.equal(req.method, 'DELETE')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
- t.notOk(b, "got no message body")
+ req.on('end', function () {
+ t.notOk(b, 'got no message body')
res.statusCode = 200
res.json({})
@@ -109,8 +109,8 @@ test("remove a dist-tag from a package", function (t) {
})
client.distTags.rm(BASE_URL, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.notOk(data.test, "dist-tag removed")
+ t.ifError(error, 'no errors')
+ t.notOk(data.test, 'dist-tag removed')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js
index ff5591dbd2..691aef13ea 100644
--- a/deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js
+++ b/deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js
@@ -1,111 +1,111 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function nop() {}
+function nop () {}
-var BASE_URL = "http://localhost:1337/"
-var URI = "/-/package/underscore/dist-tags"
-var TOKEN = "foo"
+var BASE_URL = 'http://localhost:1337/'
+var URI = '/-/package/underscore/dist-tags'
+var TOKEN = 'foo'
var AUTH = {
- token : TOKEN
+ token: TOKEN
}
-var PACKAGE = "underscore"
+var PACKAGE = 'underscore'
var DIST_TAGS = {
- "a" : "8.0.8",
- "b" : "3.0.3"
+ 'a': '8.0.8',
+ 'b': '3.0.3'
}
var PARAMS = {
- package : PACKAGE,
- distTags : DIST_TAGS,
- auth : AUTH
+ 'package': PACKAGE,
+ distTags: DIST_TAGS,
+ auth: AUTH
}
-test("distTags.set call contract", function (t) {
+test('distTags.set call contract', function (t) {
t.throws(function () {
client.distTags.set(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.distTags.set([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.distTags.set(BASE_URL, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.distTags.set(BASE_URL, "", nop)
- }, "params must be object")
+ client.distTags.set(BASE_URL, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.distTags.set(BASE_URL, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.distTags.set(BASE_URL, PARAMS, "callback")
- }, "callback must be function")
+ client.distTags.set(BASE_URL, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- distTags : DIST_TAGS,
- auth : AUTH
+ distTags: DIST_TAGS,
+ auth: AUTH
}
client.distTags.set(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package name to distTags.set"
+ name: 'AssertionError',
+ message: 'must pass package name to distTags.set'
},
- "distTags.set must include package name"
+ 'distTags.set must include package name'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- auth : AUTH
+ 'package': PACKAGE,
+ auth: AUTH
}
client.distTags.set(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass distTags map to distTags.set"
+ name: 'AssertionError',
+ message: 'must pass distTags map to distTags.set'
},
- "distTags.set must include dist-tags"
+ 'distTags.set must include dist-tags'
)
t.throws(
function () {
var params = {
- package : PACKAGE,
- distTags : DIST_TAGS
+ 'package': PACKAGE,
+ distTags: DIST_TAGS
}
client.distTags.set(BASE_URL, params, nop)
},
- { name : "AssertionError", message : "must pass auth to distTags.set" },
- "distTags.set must include auth"
+ { name: 'AssertionError', message: 'must pass auth to distTags.set' },
+ 'distTags.set must include auth'
)
t.end()
})
-test("set dist-tags for a package", function (t) {
- server.expect("PUT", URI, function (req, res) {
- t.equal(req.method, "PUT")
+test('set dist-tags for a package', function (t) {
+ server.expect('PUT', URI, function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var d = JSON.parse(b)
- t.deepEqual(d, DIST_TAGS, "got back tags")
+ t.deepEqual(d, DIST_TAGS, 'got back tags')
res.statusCode = 200
res.json(DIST_TAGS)
@@ -113,8 +113,8 @@ test("set dist-tags for a package", function (t) {
})
client.distTags.set(BASE_URL, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.ok(data.a && data.b, "dist-tags set")
+ t.ifError(error, 'no errors')
+ t.ok(data.a && data.b, 'dist-tags set')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js
index 7c29e1114d..4a829c85d1 100644
--- a/deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js
+++ b/deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js
@@ -1,111 +1,102 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function nop() {}
+function nop () {}
-var BASE_URL = "http://localhost:1337/"
-var URI = "/-/package/underscore/dist-tags"
-var TOKEN = "foo"
+var BASE_URL = 'http://localhost:1337/'
+var URI = '/-/package/underscore/dist-tags'
+var TOKEN = 'foo'
var AUTH = {
- token : TOKEN
+ token: TOKEN
}
-var PACKAGE = "underscore"
+var PACKAGE = 'underscore'
var DIST_TAGS = {
- "a" : "8.0.8",
- "b" : "3.0.3"
+ 'a': '8.0.8',
+ 'b': '3.0.3'
}
var PARAMS = {
- package : PACKAGE,
- distTags : DIST_TAGS,
- auth : AUTH
+ 'package': PACKAGE,
+ distTags: DIST_TAGS,
+ auth: AUTH
}
-test("distTags.update call contract", function (t) {
+test('distTags.update call contract', function (t) {
t.throws(function () {
client.distTags.update(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.distTags.update([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.distTags.update(BASE_URL, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.distTags.update(BASE_URL, "", nop)
- }, "params must be object")
+ client.distTags.update(BASE_URL, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.distTags.update(BASE_URL, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.distTags.update(BASE_URL, PARAMS, "callback")
- }, "callback must be function")
+ client.distTags.update(BASE_URL, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
- var params = {
- distTags : DIST_TAGS,
- auth : AUTH
- }
+ var params = { distTags: DIST_TAGS, auth: AUTH }
client.distTags.update(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass package name to distTags.update"
+ name: 'AssertionError',
+ message: 'must pass package name to distTags.update'
},
- "distTags.update must include package name"
+ 'distTags.update must include package name'
)
t.throws(
function () {
- var params = {
- package : PACKAGE,
- auth : AUTH
- }
+ var params = { 'package': PACKAGE, auth: AUTH }
client.distTags.update(BASE_URL, params, nop)
},
{
- name : "AssertionError",
- message : "must pass distTags map to distTags.update"
+ name: 'AssertionError',
+ message: 'must pass distTags map to distTags.update'
},
- "distTags.update must include dist-tags"
+ 'distTags.update must include dist-tags'
)
t.throws(
function () {
- var params = {
- package : PACKAGE,
- distTags : DIST_TAGS
- }
+ var params = { 'package': PACKAGE, distTags: DIST_TAGS }
client.distTags.update(BASE_URL, params, nop)
},
- { name : "AssertionError", message : "must pass auth to distTags.update" },
- "distTags.update must include auth"
+ { name: 'AssertionError', message: 'must pass auth to distTags.update' },
+ 'distTags.update must include auth'
)
t.end()
})
-test("update dist-tags for a package", function (t) {
- server.expect("POST", URI, function (req, res) {
- t.equal(req.method, "POST")
+test('update dist-tags for a package', function (t) {
+ server.expect('POST', URI, function (req, res) {
+ t.equal(req.method, 'POST')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var d = JSON.parse(b)
- t.deepEqual(d, DIST_TAGS, "got back tags")
+ t.deepEqual(d, DIST_TAGS, 'got back tags')
res.statusCode = 200
res.json(DIST_TAGS)
@@ -113,8 +104,8 @@ test("update dist-tags for a package", function (t) {
})
client.distTags.update(BASE_URL, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.ok(data.a && data.b, "dist-tags set")
+ t.ifError(error, 'no errors')
+ t.ok(data.a && data.b, 'dist-tags set')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-404.js b/deps/npm/node_modules/npm-registry-client/test/fetch-404.js
index 25def1bec8..e05e36f26c 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-404.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-404.js
@@ -1,22 +1,22 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var tap = require("tap")
-var cat = require("concat-stream")
+var tap = require('tap')
+var cat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
-tap.test("fetch with a 404 response", function (t) {
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+tap.test('fetch with a 404 response', function (t) {
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(200, {
- "content-type" : "application/x-tar",
- "content-encoding" : "gzip"
+ 'content-type': 'application/x-tar',
+ 'content-encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
@@ -25,18 +25,18 @@ tap.test("fetch with a 404 response", function (t) {
var client = common.freshClient()
var defaulted = {}
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3.tgz',
defaulted,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = cat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-408.js b/deps/npm/node_modules/npm-registry-client/test/fetch-408.js
index 1e48bd42e6..d49b149f63 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-408.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-408.js
@@ -1,29 +1,29 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var tap = require("tap")
-var cat = require("concat-stream")
+var tap = require('tap')
+var cat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
-tap.test("fetch with retry on timeout", function (t) {
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+tap.test('fetch with retry on timeout', function (t) {
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(408)
res.end()
})
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(200, {
- "content-type" : "application/x-tar",
- "content-encoding" : "gzip"
+ 'content-type': 'application/x-tar',
+ 'content-encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
@@ -33,18 +33,18 @@ tap.test("fetch with retry on timeout", function (t) {
var defaulted = {}
client.config.retry.minTimeout = 100
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3.tgz',
defaulted,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = cat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-503.js b/deps/npm/node_modules/npm-registry-client/test/fetch-503.js
index 239e2e7740..04f5901e8c 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-503.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-503.js
@@ -1,29 +1,29 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var tap = require("tap")
-var cat = require("concat-stream")
+var tap = require('tap')
+var cat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
-tap.test("fetch with retry on server error", function (t) {
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+tap.test('fetch with retry on server error', function (t) {
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(503)
res.end()
})
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(200, {
- "content-type" : "application/x-tar",
- "content-encoding" : "gzip"
+ 'content-type': 'application/x-tar',
+ 'content-encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
@@ -33,18 +33,18 @@ tap.test("fetch with retry on server error", function (t) {
var defaulted = {}
client.config.retry.minTimeout = 100
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3.tgz',
defaulted,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = cat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js b/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js
index e3171a5594..ccfd4b77f2 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js
@@ -1,54 +1,54 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var tap = require("tap")
-var cat = require("concat-stream")
+var tap = require('tap')
+var cat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
-tap.test("basic fetch with scoped always-auth enabled", function (t) {
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+tap.test('basic fetch with scoped always-auth enabled', function (t) {
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
t.equal(
req.headers.authorization,
- "Basic dXNlcm5hbWU6JTEyMzRAYXNkZiU=",
- "got expected auth header"
+ 'Basic dXNlcm5hbWU6JTEyMzRAYXNkZiU=',
+ 'got expected auth header'
)
res.writeHead(200, {
- "content-type" : "application/x-tar",
- "content-encoding" : "gzip"
+ 'content-type': 'application/x-tar',
+ 'content-encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
})
var auth = {
- username : "username",
- password : "%1234@asdf%",
- email : "i@izs.me",
- alwaysAuth : true
+ username: 'username',
+ password: '%1234@asdf%',
+ email: 'i@izs.me',
+ alwaysAuth: true
}
var client = common.freshClient()
- var authed = { auth : auth }
+ var authed = { auth: auth }
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3.tgz',
authed,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = cat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-basic.js b/deps/npm/node_modules/npm-registry-client/test/fetch-basic.js
index 68e67f023d..7bf4d1bd1a 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-basic.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-basic.js
@@ -1,70 +1,70 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var test = require("tap").test
-var concat = require("concat-stream")
+var test = require('tap').test
+var concat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
function nop () {}
-var URI = "https://npm.registry:8043/rewrite"
-var USERNAME = "username"
-var PASSWORD = "hi"
-var EMAIL = "n@p.m"
-var HEADERS = {
- "npm-custom" : "lolbutts"
+var URI = 'https://npm.registry:8043/rewrite'
+var USERNAME = 'username'
+var PASSWORD = 'hi'
+var EMAIL = 'n@p.m'
+var HEADERS = {
+ 'npm-custom': 'lolbutts'
}
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
-var PARAMS = {
- headers : HEADERS,
- auth : AUTH
+var PARAMS = {
+ headers: HEADERS,
+ auth: AUTH
}
-test("fetch call contract", function (t) {
+test('fetch call contract', function (t) {
t.throws(function () {
client.get(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.get([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.get(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.get(URI, "", nop)
- }, "params must be object")
+ client.get(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.get(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.get(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.get(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.end()
})
-test("basic fetch", function (t) {
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+test('basic fetch', function (t) {
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(200, {
- "content-type" : "application/x-tar",
- "content-encoding" : "gzip"
+ 'content-type': 'application/x-tar',
+ 'content-encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
@@ -72,18 +72,18 @@ test("basic fetch", function (t) {
var defaulted = {}
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3.tgz',
defaulted,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = concat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js b/deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js
index 643ac9927a..43f25f1ad7 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js
@@ -1,45 +1,44 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var tap = require("tap")
-var cat = require("concat-stream")
-var Negotiator = require("negotiator")
+var tap = require('tap')
+var cat = require('concat-stream')
+var Negotiator = require('negotiator')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
tap.test("fetch accepts github api's json", function (t) {
- server.expect("/underscore/-/underscore-1.3.3", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+ server.expect('/underscore/-/underscore-1.3.3', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
var negotiator = new Negotiator(req)
// fetching a tarball from `api.github.com` returns a 415 error if json is
// not accepted
- if (negotiator.mediaTypes().indexOf("application/vnd.github+json") === -1) {
+ if (negotiator.mediaTypes().indexOf('application/vnd.github+json') === -1) {
res.writeHead(415, {
- "Content-Type" : "application/json"
+ 'Content-Type': 'application/json'
})
- }
- else {
+ } else {
res.writeHead(302, {
- "Content-Type" : "text/html",
- "Location" : "/underscore/-/underscore-1.3.3.tgz"
+ 'Content-Type': 'text/html',
+ 'Location': '/underscore/-/underscore-1.3.3.tgz'
})
}
res.end()
})
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(200, {
- "Content-Type" : "application/x-tar",
- "Content-Encoding" : "gzip"
+ 'Content-Type': 'application/x-tar',
+ 'Content-Encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
@@ -48,18 +47,18 @@ tap.test("fetch accepts github api's json", function (t) {
var client = common.freshClient()
var defaulted = {}
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3',
defaulted,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = cat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js b/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js
index 4133770447..2fb92c2c20 100644
--- a/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js
@@ -1,50 +1,50 @@
-var resolve = require("path").resolve
-var createReadStream = require("graceful-fs").createReadStream
-var readFileSync = require("graceful-fs").readFileSync
+var resolve = require('path').resolve
+var createReadStream = require('graceful-fs').createReadStream
+var readFileSync = require('graceful-fs').readFileSync
-var tap = require("tap")
-var cat = require("concat-stream")
+var tap = require('tap')
+var cat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+var tgz = resolve(__dirname, './fixtures/underscore/1.3.3/package.tgz')
-tap.test("basic fetch with scoped always-auth disabled", function (t) {
- server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
- t.notOk(req.headers.authorization, "received no auth header")
+tap.test('basic fetch with scoped always-auth disabled', function (t) {
+ server.expect('/underscore/-/underscore-1.3.3.tgz', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
+ t.notOk(req.headers.authorization, 'received no auth header')
res.writeHead(200, {
- "content-type" : "application/x-tar",
- "content-encoding" : "gzip"
+ 'content-type': 'application/x-tar',
+ 'content-encoding': 'gzip'
})
createReadStream(tgz).pipe(res)
})
var auth = {
- username : "username",
- password : "%1234@asdf%",
- email : "i@izs.me",
- alwaysAuth : false
+ username: 'username',
+ password: '%1234@asdf%',
+ email: 'i@izs.me',
+ alwaysAuth: false
}
var client = common.freshClient()
- var authed = { auth : auth }
+ var authed = { auth: auth }
client.fetch(
- "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ 'http://localhost:1337/underscore/-/underscore-1.3.3.tgz',
authed,
function (er, res) {
- t.ifError(er, "loaded successfully")
+ t.ifError(er, 'loaded successfully')
var sink = cat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
- res.on("error", function (error) {
- t.ifError(error, "no errors on stream")
+ res.on('error', function (error) {
+ t.ifError(error, 'no errors on stream')
})
res.pipe(sink)
diff --git a/deps/npm/node_modules/npm-registry-client/test/get-basic.js b/deps/npm/node_modules/npm-registry-client/test/get-basic.js
index 1f28bdfbfa..a2ab27fe0f 100644
--- a/deps/npm/node_modules/npm-registry-client/test/get-basic.js
+++ b/deps/npm/node_modules/npm-registry-client/test/get-basic.js
@@ -1,80 +1,80 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var us = require("./fixtures/underscore/1.3.3/cache.json")
-var usroot = require("./fixtures/underscore/cache.json")
+var us = require('./fixtures/underscore/1.3.3/cache.json')
+var usroot = require('./fixtures/underscore/cache.json')
function nop () {}
-var URI = "https://npm.registry:8043/rewrite"
-var TIMEOUT = 3600
-var FOLLOW = false
+var URI = 'https://npm.registry:8043/rewrite'
+var TIMEOUT = 3600
+var FOLLOW = false
var STALE_OK = true
-var TOKEN = "lolbutts"
-var AUTH = {
- token : TOKEN
+var TOKEN = 'lolbutts'
+var AUTH = {
+ token: TOKEN
}
-var PARAMS = {
- timeout : TIMEOUT,
- follow : FOLLOW,
- staleOk : STALE_OK,
- auth : AUTH
+var PARAMS = {
+ timeout: TIMEOUT,
+ follow: FOLLOW,
+ staleOk: STALE_OK,
+ auth: AUTH
}
-test("get call contract", function (t) {
+test('get call contract', function (t) {
t.throws(function () {
client.get(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.get([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.get(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.get(URI, "", nop)
- }, "params must be object")
+ client.get(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.get(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.get(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.get(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.end()
})
-test("basic request", function (t) {
- server.expect("/underscore/1.3.3", function (req, res) {
+test('basic request', function (t) {
+ server.expect('/underscore/1.3.3', function (req, res) {
res.json(us)
})
- server.expect("/underscore", function (req, res) {
+ server.expect('/underscore', function (req, res) {
res.json(usroot)
})
- server.expect("/@bigco%2funderscore", function (req, res) {
+ server.expect('/@bigco%2funderscore', function (req, res) {
res.json(usroot)
})
t.plan(3)
- client.get("http://localhost:1337/underscore/1.3.3", PARAMS, function (er, data) {
+ client.get('http://localhost:1337/underscore/1.3.3', PARAMS, function (er, data) {
t.deepEqual(data, us)
})
- client.get("http://localhost:1337/underscore", PARAMS, function (er, data) {
+ client.get('http://localhost:1337/underscore', PARAMS, function (er, data) {
t.deepEqual(data, usroot)
})
- client.get("http://localhost:1337/@bigco%2funderscore", PARAMS, function (er, data) {
+ client.get('http://localhost:1337/@bigco%2funderscore', PARAMS, function (er, data) {
t.deepEqual(data, usroot)
})
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/get-error-403.js b/deps/npm/node_modules/npm-registry-client/test/get-error-403.js
index dc20a8caf7..c9c96d354e 100644
--- a/deps/npm/node_modules/npm-registry-client/test/get-error-403.js
+++ b/deps/npm/node_modules/npm-registry-client/test/get-error-403.js
@@ -1,30 +1,30 @@
-var tap = require("tap")
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-tap.test("get fails with 403", function (t) {
- server.expect("/habanero", function (req, res) {
- t.equal(req.method, "GET", "got expected method")
+tap.test('get fails with 403', function (t) {
+ server.expect('/habanero', function (req, res) {
+ t.equal(req.method, 'GET', 'got expected method')
res.writeHead(403)
- res.end("{\"error\":\"get that cat out of the toilet that's gross omg\"}")
+ res.end('{"error":"get that cat out of the toilet that\'s gross omg"}')
})
var client = common.freshClient()
client.config.retry.minTimeout = 100
client.get(
- "http://localhost:1337/habanero",
+ 'http://localhost:1337/habanero',
{},
function (er) {
- t.ok(er, "failed as expected")
+ t.ok(er, 'failed as expected')
- t.equal(er.statusCode, 403, "status code was attached as expected")
- t.equal(er.code, "E403", "error code was formatted as expected")
+ t.equal(er.statusCode, 403, 'status code was attached as expected')
+ t.equal(er.code, 'E403', 'error code was formatted as expected')
t.equal(
er.message,
- "get that cat out of the toilet that's gross omg : habanero",
- "got error message"
+ 'get that cat out of the toilet that\'s gross omg : habanero',
+ 'got error message'
)
t.end()
diff --git a/deps/npm/node_modules/npm-registry-client/test/initialize.js b/deps/npm/node_modules/npm-registry-client/test/initialize.js
index 980a9a7d9d..aefbe626fc 100644
--- a/deps/npm/node_modules/npm-registry-client/test/initialize.js
+++ b/deps/npm/node_modules/npm-registry-client/test/initialize.js
@@ -1,74 +1,91 @@
-var test = require("tap").test
+var test = require('tap').test
-// var server = require("./lib/server.js")
-var Client = require("../")
+// var server = require('./lib/server.js')
+var Client = require('../')
-test("defaulted initialization", function (t) {
+test('defaulted initialization', function (t) {
var client = new Client()
var options = client.initialize(
- "http://localhost:1337/",
- "GET",
- "application/json",
+ 'http://localhost:1337/',
+ 'GET',
+ 'application/json',
{}
)
- t.equal(options.url, "http://localhost:1337/", "URLs match")
- t.equal(options.method, "GET", "methods match")
+ t.equal(options.url, 'http://localhost:1337/', 'URLs match')
+ t.equal(options.method, 'GET', 'methods match')
t.equal(options.proxy, undefined, "proxy won't overwrite environment")
- t.equal(options.localAddress, undefined, "localAddress has no default value")
- t.equal(options.strictSSL, true, "SSL is strict by default")
+ t.equal(options.localAddress, undefined, 'localAddress has no default value')
+ t.equal(options.strictSSL, true, 'SSL is strict by default')
- t.equal(options.headers.accept, "application/json", "accept header set")
+ t.equal(options.headers.accept, 'application/json', 'accept header set')
t.equal(
options.headers.version,
- require("../package.json").version,
- "npm-registry-client version is present in headers"
+ require('../package.json').version,
+ 'npm-registry-client version is present in headers'
)
- t.ok(options.headers["npm-session"], "request ID generated")
- t.ok(options.headers["user-agent"], "user-agent preset")
+ t.ok(options.headers['npm-session'], 'request ID generated')
+ t.ok(options.headers['user-agent'], 'user-agent preset')
- var HttpAgent = require("http").Agent
- t.ok(options.agent instanceof HttpAgent, "got an HTTP agent for an HTTP URL")
+ var HttpAgent = require('http').Agent
+ t.ok(options.agent instanceof HttpAgent, 'got an HTTP agent for an HTTP URL')
t.end()
})
-test("referer set on client", function (t) {
+test('referer set on client', function (t) {
var client = new Client()
- client.refer = "xtestx"
+ client.refer = 'xtestx'
var options = client.initialize(
- "http://localhost:1337/",
- "GET",
- "application/json",
+ 'http://localhost:1337/',
+ 'GET',
+ 'application/json',
{}
)
- t.equal(options.headers.referer, "xtestx", "referer header set")
+ t.equal(options.headers.referer, 'xtestx', 'referer header set')
t.end()
})
-test("initializing with proxy explicitly disabled", function (t) {
- var client = new Client({ proxy : { http : false }})
+test('initializing with proxy explicitly disabled', function (t) {
+ var client = new Client({ proxy: { http: false }})
var options = client.initialize(
- "http://localhost:1337/",
- "GET",
- "application/json",
+ 'http://localhost:1337/',
+ 'GET',
+ 'application/json',
{}
)
- t.ok("proxy" in options, "proxy overridden by explicitly setting to false")
- t.equal(options.proxy, null, "request will override proxy when empty proxy passed in")
+ t.ok('proxy' in options, 'proxy overridden by explicitly setting to false')
+ t.equal(options.proxy, null, 'request will override proxy when empty proxy passed in')
t.end()
})
-test("initializing with proxy undefined", function (t) {
- var client = new Client({ proxy : { http : undefined }})
+test('initializing with proxy undefined', function (t) {
+ var client = new Client({ proxy: { http: undefined }})
var options = client.initialize(
- "http://localhost:1337/",
- "GET",
- "application/json",
+ 'http://localhost:1337/',
+ 'GET',
+ 'application/json',
{}
)
- t.notOk("proxy" in options, "proxy can be read from env.PROXY by request")
+ t.notOk('proxy' in options, 'proxy can be read from env.PROXY by request')
+ t.end()
+})
+
+test('initializing with a certificate should map down to the https agent', function (t) {
+ var certificate = '-----BEGIN CERTIFICATE----- TEST\nTEST -----END CERTIFICATE-----\n'
+ var client = new Client({
+ ssl: {
+ certificate: certificate
+ }
+ })
+ var options = client.initialize(
+ { protocol: 'https:' },
+ 'GET',
+ 'application/json',
+ {}
+ )
+ t.equal(options.agent.options.cert, certificate, 'certificate will be saved properly on agent')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/lib/common.js b/deps/npm/node_modules/npm-registry-client/test/lib/common.js
index 178a75bb5e..8b7875d4c0 100644
--- a/deps/npm/node_modules/npm-registry-client/test/lib/common.js
+++ b/deps/npm/node_modules/npm-registry-client/test/lib/common.js
@@ -1,14 +1,14 @@
-var server = require("./server.js")
-var RC = require("../../")
-var REGISTRY = "http://localhost:" + server.port
+var server = require('./server.js')
+var RC = require('../../')
+var REGISTRY = 'http://localhost:' + server.port
module.exports = {
- port : server.port,
- registry : REGISTRY,
- freshClient : function freshClient(config) {
+ port: server.port,
+ registry: REGISTRY,
+ freshClient: function freshClient (config) {
var client = new RC(config)
server.log = client.log
- client.log.level = "silent"
+ client.log.level = 'silent'
return client
}
diff --git a/deps/npm/node_modules/npm-registry-client/test/lib/server.js b/deps/npm/node_modules/npm-registry-client/test/lib/server.js
index 775f7548cf..60b116d80f 100644
--- a/deps/npm/node_modules/npm-registry-client/test/lib/server.js
+++ b/deps/npm/node_modules/npm-registry-client/test/lib/server.js
@@ -3,7 +3,7 @@
var http = require('http')
var server = http.createServer(handler)
var port = server.port = process.env.PORT || 1337
-var assert = require("assert")
+var assert = require('assert')
server.listen(port)
module.exports = server
@@ -15,13 +15,13 @@ function handler (req, res) {
// If we got authorization, make sure it's the right password.
if (req.headers.authorization && req.headers.authorization.match(/^Basic/)) {
- var auth = req.headers.authorization.replace(/^Basic /, "")
- auth = new Buffer(auth, "base64").toString("utf8")
- assert.equal(auth, "username:%1234@asdf%")
+ var auth = req.headers.authorization.replace(/^Basic /, '')
+ auth = new Buffer(auth, 'base64').toString('utf8')
+ assert.equal(auth, 'username:%1234@asdf%')
}
var u = '* ' + req.url
- , mu = req.method + ' ' + req.url
+ var mu = req.method + ' ' + req.url
var k = server._expect[mu] ? mu : server._expect[u] ? u : null
if (!k) throw Error('unexpected request: ' + req.method + ' ' + req.url)
@@ -29,13 +29,12 @@ function handler (req, res) {
var fn = server._expect[k].shift()
if (!fn) throw Error('unexpected request: ' + req.method + ' ' + req.url)
-
var remain = (Object.keys(server._expect).reduce(function (s, k) {
return s + server._expect[k].length
}, 0))
if (remain === 0) server.close()
- else this.log.info("fake-registry", "TEST SERVER: %d reqs remain", remain)
- this.log.info("fake-registry", Object.keys(server._expect).map(function(k) {
+ else this.log.info('fake-registry', 'TEST SERVER: %d reqs remain', remain)
+ this.log.info('fake-registry', Object.keys(server._expect).map(function (k) {
return [k, server._expect[k].length]
}).reduce(function (acc, kv) {
acc[kv[0]] = kv[1]
@@ -52,7 +51,7 @@ function json (o) {
}
// this log is meanto to be overridden
-server.log = require("npmlog")
+server.log = require('npmlog')
server.expect = function (method, u, fn) {
if (typeof u === 'function') {
diff --git a/deps/npm/node_modules/npm-registry-client/test/logout.js b/deps/npm/node_modules/npm-registry-client/test/logout.js
index bbf1b8c095..7836d805ae 100644
--- a/deps/npm/node_modules/npm-registry-client/test/logout.js
+++ b/deps/npm/node_modules/npm-registry-client/test/logout.js
@@ -1,43 +1,43 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
function nop () {}
-var URI = "http://localhost:1337/rewrite"
-var TOKEN = "b00b00feed"
+var URI = 'http://localhost:1337/rewrite'
+var TOKEN = 'b00b00feed'
var PARAMS = {
auth: {
token: TOKEN
}
}
-test("logout call contract", function (t) {
+test('logout call contract', function (t) {
t.throws(function () {
client.logout(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.logout([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.logout(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.logout(URI, "", nop)
- }, "params must be object")
+ client.logout(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.logout(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.logout(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.logout(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
@@ -46,29 +46,29 @@ test("logout call contract", function (t) {
}
client.logout(URI, params, nop)
},
- { name: "AssertionError", message: "can only log out for token auth" },
- "auth must include token"
+ { name: 'AssertionError', message: 'can only log out for token auth' },
+ 'auth must include token'
)
t.end()
})
-test("log out from a token-based registry", function (t) {
- server.expect("DELETE", "/-/user/token/" + TOKEN, function (req, res) {
- t.equal(req.method, "DELETE")
- t.equal(req.headers.authorization, "Bearer " + TOKEN, "request is authed")
+test('log out from a token-based registry', function (t) {
+ server.expect('DELETE', '/-/user/token/' + TOKEN, function (req, res) {
+ t.equal(req.method, 'DELETE')
+ t.equal(req.headers.authorization, 'Bearer ' + TOKEN, 'request is authed')
- res.json({message: "ok"})
+ res.json({message: 'ok'})
})
client.logout(URI, PARAMS, function (er) {
- t.ifError(er, "no errors")
+ t.ifError(er, 'no errors')
t.end()
})
})
-test("cleanup", function (t) {
+test('cleanup', function (t) {
server.close()
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js b/deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js
index b9d9a24d66..42f6727213 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js
@@ -1,88 +1,88 @@
-var tap = require("tap")
-var fs = require("fs")
+var tap = require('tap')
+var fs = require('fs')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var auth = {
- username : "username",
- password : "%1234@asdf%",
- email : "i@izs.me",
- alwaysAuth : true
+ username: 'username',
+ password: '%1234@asdf%',
+ email: 'i@izs.me',
+ alwaysAuth: true
}
var client = common.freshClient()
-tap.test("publish again", function (t) {
+tap.test('publish again', function (t) {
// not really a tarball, but doesn't matter
- var bodyPath = require.resolve("../package.json")
- var tarball = fs.createReadStream(bodyPath, "base64")
- var pd = fs.readFileSync(bodyPath, "base64")
- var pkg = require("../package.json")
+ var bodyPath = require.resolve('../package.json')
+ var tarball = fs.createReadStream(bodyPath)
+ var pd = fs.readFileSync(bodyPath, 'base64')
+ var pkg = require('../package.json')
var lastTime = null
- server.expect("/@npm%2fnpm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ server.expect('/@npm%2fnpm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var o = lastTime = JSON.parse(b)
- t.equal(o._id, "@npm/npm-registry-client")
- t.equal(o["dist-tags"].latest, pkg.version)
+ t.equal(o._id, '@npm/npm-registry-client')
+ t.equal(o['dist-tags'].latest, pkg.version)
t.has(o.versions[pkg.version], pkg)
- t.same(o.maintainers, [ { name: "username", email: "i@izs.me" } ])
- var att = o._attachments[ pkg.name + "-" + pkg.version + ".tgz" ]
+ t.same(o.maintainers, [ { name: 'username', email: 'i@izs.me' } ])
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
t.same(att.data, pd)
res.statusCode = 409
- res.json({reason: "must supply latest _rev to update existing package"})
+ res.json({reason: 'must supply latest _rev to update existing package'})
})
})
- server.expect("/@npm%2fnpm-registry-client?write=true", function (req, res) {
- t.equal(req.method, "GET")
+ server.expect('/@npm%2fnpm-registry-client?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
t.ok(lastTime)
for (var i in lastTime.versions) {
var v = lastTime.versions[i]
delete lastTime.versions[i]
- lastTime.versions["0.0.2"] = v
- lastTime["dist-tags"] = { latest: "0.0.2" }
+ lastTime.versions['0.0.2'] = v
+ lastTime['dist-tags'] = { latest: '0.0.2' }
}
- lastTime._rev = "asdf"
+ lastTime._rev = 'asdf'
res.json(lastTime)
})
- server.expect("/@npm%2fnpm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('/@npm%2fnpm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
t.ok(lastTime)
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function() {
+ req.on('end', function () {
var o = JSON.parse(b)
- t.equal(o._rev, "asdf")
- t.deepEqual(o.versions["0.0.2"], o.versions[pkg.version])
+ t.equal(o._rev, 'asdf')
+ t.deepEqual(o.versions['0.0.2'], o.versions[pkg.version])
res.statusCode = 201
res.json({created: true})
})
})
- pkg.name = "@npm/npm-registry-client"
+ pkg.name = '@npm/npm-registry-client'
var params = {
- metadata : pkg,
- access : "restricted",
- body : tarball,
- auth : auth
+ metadata: pkg,
+ access: 'restricted',
+ body: tarball,
+ auth: auth
}
- client.publish("http://localhost:1337/", params, function (er, data) {
+ client.publish('http://localhost:1337/', params, function (er, data) {
if (er) throw er
t.deepEqual(data, { created: true })
t.end()
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish-again.js b/deps/npm/node_modules/npm-registry-client/test/publish-again.js
index f5da5b2435..5beec90e4a 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish-again.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-again.js
@@ -1,86 +1,86 @@
-var tap = require("tap")
-var fs = require("fs")
+var tap = require('tap')
+var fs = require('fs')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var auth = {
- username : "username",
- password : "%1234@asdf%",
- email : "i@izs.me",
- alwaysAuth : true
+ username: 'username',
+ password: '%1234@asdf%',
+ email: 'i@izs.me',
+ alwaysAuth: true
}
var client = common.freshClient()
-tap.test("publish again", function (t) {
+tap.test('publish again', function (t) {
// not really a tarball, but doesn't matter
- var bodyPath = require.resolve("../package.json")
- var tarball = fs.createReadStream(bodyPath, "base64")
- var pd = fs.readFileSync(bodyPath, "base64")
- var pkg = require("../package.json")
+ var bodyPath = require.resolve('../package.json')
+ var tarball = fs.createReadStream(bodyPath)
+ var pd = fs.readFileSync(bodyPath, 'base64')
+ var pkg = require('../package.json')
var lastTime = null
- server.expect("/npm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ server.expect('/npm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var o = lastTime = JSON.parse(b)
- t.equal(o._id, "npm-registry-client")
- t.equal(o["dist-tags"].latest, pkg.version)
+ t.equal(o._id, 'npm-registry-client')
+ t.equal(o['dist-tags'].latest, pkg.version)
t.has(o.versions[pkg.version], pkg)
- t.same(o.maintainers, [ { name: "username", email: "i@izs.me" } ])
- var att = o._attachments[ pkg.name + "-" + pkg.version + ".tgz" ]
+ t.same(o.maintainers, [ { name: 'username', email: 'i@izs.me' } ])
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
t.same(att.data, pd)
res.statusCode = 409
- res.json({reason: "must supply latest _rev to update existing package"})
+ res.json({reason: 'must supply latest _rev to update existing package'})
})
})
- server.expect("/npm-registry-client?write=true", function (req, res) {
- t.equal(req.method, "GET")
+ server.expect('/npm-registry-client?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
t.ok(lastTime)
for (var i in lastTime.versions) {
var v = lastTime.versions[i]
delete lastTime.versions[i]
- lastTime.versions["0.0.2"] = v
- lastTime["dist-tags"] = { latest: "0.0.2" }
+ lastTime.versions['0.0.2'] = v
+ lastTime['dist-tags'] = { latest: '0.0.2' }
}
- lastTime._rev = "asdf"
+ lastTime._rev = 'asdf'
res.json(lastTime)
})
- server.expect("/npm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('/npm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
t.ok(lastTime)
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function() {
+ req.on('end', function () {
var o = JSON.parse(b)
- t.equal(o._rev, "asdf")
- t.deepEqual(o.versions["0.0.2"], o.versions[pkg.version])
+ t.equal(o._rev, 'asdf')
+ t.deepEqual(o.versions['0.0.2'], o.versions[pkg.version])
res.statusCode = 201
res.json({created: true})
})
})
var params = {
- metadata : pkg,
- access : "public",
- body : tarball,
- auth : auth
+ metadata: pkg,
+ access: 'public',
+ body: tarball,
+ auth: auth
}
- client.publish("http://localhost:1337/", params, function (er, data) {
+ client.publish('http://localhost:1337/', params, function (er, data) {
if (er) throw er
t.deepEqual(data, { created: true })
t.end()
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js b/deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js
index 50b3f93493..5cb66d1e07 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js
@@ -1,42 +1,42 @@
-var createReadStream = require("fs").createReadStream
+var createReadStream = require('fs').createReadStream
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
-var config = { retry : { retries : 0 } }
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
+var config = { retry: { retries: 0 } }
var client = common.freshClient(config)
-var URI = "http://localhost:1337/"
-var USERNAME = "username"
-var PASSWORD = "%1234@asdf%"
-var EMAIL = "i@izs.me"
-var METADATA = require("../package.json")
-var ACCESS = "public"
+var URI = 'http://localhost:1337/'
+var USERNAME = 'username'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var METADATA = require('../package.json')
+var ACCESS = 'public'
// not really a tarball, but doesn't matter
-var BODY_PATH = require.resolve("../package.json")
-var BODY = createReadStream(BODY_PATH, "base64")
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var BODY_PATH = require.resolve('../package.json')
+var BODY = createReadStream(BODY_PATH)
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
-var PARAMS = {
- metadata : METADATA,
- access : ACCESS,
- body : BODY,
- auth : AUTH
+var PARAMS = {
+ metadata: METADATA,
+ access: ACCESS,
+ body: BODY,
+ auth: AUTH
}
-test("publish with a 500 response but no message", function (t){
- server.expect("/npm-registry-client", function (req, res) {
+test('publish with a 500 response but no message', function (t) {
+ server.expect('/npm-registry-client', function (req, res) {
res.statusCode = 500
- res.json({ success : false })
+ res.json({ success: false })
})
client.publish(URI, PARAMS, function (er, data) {
- t.ok(er, "got expected error")
- t.notOk(data, "no payload on failure")
+ t.ok(er, 'got expected error')
+ t.notOk(data, 'no payload on failure')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js b/deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js
index 203c800048..d4704ca491 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js
@@ -1,52 +1,52 @@
-var tap = require("tap")
-var crypto = require("crypto")
-var fs = require("fs")
+var tap = require('tap')
+var crypto = require('crypto')
+var fs = require('fs')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
-var auth = { token : "of-glad-tidings" }
+var auth = { token: 'of-glad-tidings' }
var client = common.freshClient()
-tap.test("publish", function (t) {
+tap.test('publish', function (t) {
// not really a tarball, but doesn't matter
- var bodyPath = require.resolve("../package.json")
- var tarball = fs.createReadStream(bodyPath, "base64")
- var pd = fs.readFileSync(bodyPath, "base64")
- var pkg = require("../package.json")
- pkg.name = "@npm/npm-registry-client"
-
- server.expect("/@npm%2fnpm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
- t.equal(req.headers.authorization, "Bearer of-glad-tidings")
-
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var bodyPath = require.resolve('../package.json')
+ var tarball = fs.createReadStream(bodyPath)
+ var pd = fs.readFileSync(bodyPath, 'base64')
+ var pkg = require('../package.json')
+ pkg.name = '@npm/npm-registry-client'
+
+ server.expect('/@npm%2fnpm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ t.equal(req.headers.authorization, 'Bearer of-glad-tidings')
+
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var o = JSON.parse(b)
- t.equal(o._id, "@npm/npm-registry-client")
- t.equal(o["dist-tags"].latest, pkg.version)
+ t.equal(o._id, '@npm/npm-registry-client')
+ t.equal(o['dist-tags'].latest, pkg.version)
t.has(o.versions[pkg.version], pkg)
t.same(o.maintainers, o.versions[pkg.version].maintainers)
- var att = o._attachments[ pkg.name + "-" + pkg.version + ".tgz" ]
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
t.same(att.data, pd)
- var hash = crypto.createHash("sha1").update(pd, "base64").digest("hex")
+ var hash = crypto.createHash('sha1').update(pd, 'base64').digest('hex')
t.equal(o.versions[pkg.version].dist.shasum, hash)
res.statusCode = 201
- res.json({created:true})
+ res.json({ created: true })
})
})
var params = {
- metadata : pkg,
- access : "restricted",
- body : tarball,
- auth : auth
+ metadata: pkg,
+ access: 'restricted',
+ body: tarball,
+ auth: auth
}
client.publish(common.registry, params, function (er, data) {
if (er) throw er
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish-scoped.js b/deps/npm/node_modules/npm-registry-client/test/publish-scoped.js
index 6bb48617df..7758c3c12b 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish-scoped.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-scoped.js
@@ -1,59 +1,59 @@
-var tap = require("tap")
-var crypto = require("crypto")
-var fs = require("fs")
+var tap = require('tap')
+var crypto = require('crypto')
+var fs = require('fs')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var auth = {
- username : "username",
- password : "%1234@asdf%",
- email : "ogd@aoaioxxysz.net"
+ username: 'username',
+ password: '%1234@asdf%',
+ email: 'ogd@aoaioxxysz.net'
}
var client = common.freshClient()
-var _auth = new Buffer("username:%1234@asdf%").toString("base64")
+var _auth = new Buffer('username:%1234@asdf%').toString('base64')
-tap.test("publish", function (t) {
+tap.test('publish', function (t) {
// not really a tarball, but doesn't matter
- var bodyPath = require.resolve("../package.json")
- var tarball = fs.createReadStream(bodyPath, "base64")
- var pd = fs.readFileSync(bodyPath, "base64")
- var pkg = require("../package.json")
- pkg.name = "@npm/npm-registry-client"
-
- server.expect("/@npm%2fnpm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
- t.equal(req.headers.authorization, "Basic " + _auth)
-
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var bodyPath = require.resolve('../package.json')
+ var tarball = fs.createReadStream(bodyPath)
+ var pd = fs.readFileSync(bodyPath, 'base64')
+ var pkg = require('../package.json')
+ pkg.name = '@npm/npm-registry-client'
+
+ server.expect('/@npm%2fnpm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ t.equal(req.headers.authorization, 'Basic ' + _auth)
+
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var o = JSON.parse(b)
- t.equal(o._id, "@npm/npm-registry-client")
- t.equal(o["dist-tags"].latest, pkg.version)
+ t.equal(o._id, '@npm/npm-registry-client')
+ t.equal(o['dist-tags'].latest, pkg.version)
t.has(o.versions[pkg.version], pkg)
- t.same(o.maintainers, [ { name: "username", email: "ogd@aoaioxxysz.net" } ])
+ t.same(o.maintainers, [ { name: 'username', email: 'ogd@aoaioxxysz.net' } ])
t.same(o.maintainers, o.versions[pkg.version].maintainers)
- var att = o._attachments[ pkg.name + "-" + pkg.version + ".tgz" ]
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
t.same(att.data, pd)
- var hash = crypto.createHash("sha1").update(pd, "base64").digest("hex")
+ var hash = crypto.createHash('sha1').update(pd, 'base64').digest('hex')
t.equal(o.versions[pkg.version].dist.shasum, hash)
res.statusCode = 201
- res.json({created:true})
+ res.json({ created: true })
})
})
var params = {
- metadata : pkg,
- access : "restricted",
- body : tarball,
- auth : auth
+ metadata: pkg,
+ access: 'restricted',
+ body: tarball,
+ auth: auth
}
client.publish(common.registry, params, function (er, data) {
if (er) throw er
diff --git a/deps/npm/node_modules/npm-registry-client/test/publish.js b/deps/npm/node_modules/npm-registry-client/test/publish.js
index 5a87b64c09..f2c257e95c 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish.js
@@ -1,125 +1,125 @@
-var test = require("tap").test
-var crypto = require("crypto")
-var fs = require("fs")
+var test = require('tap').test
+var crypto = require('crypto')
+var fs = require('fs')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
function nop () {}
-var URI = "http://localhost:1337/"
-var USERNAME = "username"
-var PASSWORD = "%1234@asdf%"
-var EMAIL = "i@izs.me"
-var METADATA = require("../package.json")
-var ACCESS = "public"
+var URI = 'http://localhost:1337/'
+var USERNAME = 'username'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var METADATA = require('../package.json')
+var ACCESS = 'public'
// not really a tarball, but doesn't matter
-var BODY_PATH = require.resolve("../package.json")
-var BODY = fs.createReadStream(BODY_PATH, "base64")
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var BODY_PATH = require.resolve('../package.json')
+var BODY = fs.createReadStream(BODY_PATH)
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
-var PARAMS = {
- metadata : METADATA,
- access : ACCESS,
- body : BODY,
- auth : AUTH
+var PARAMS = {
+ metadata: METADATA,
+ access: ACCESS,
+ body: BODY,
+ auth: AUTH
}
-test("publish call contract", function (t) {
+test('publish call contract', function (t) {
t.throws(function () {
client.publish(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.publish([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.publish(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.publish(URI, "", nop)
- }, "params must be object")
+ client.publish(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.publish(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.publish(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.publish(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- access : ACCESS,
- body : BODY,
- auth : AUTH
+ access: ACCESS,
+ body: BODY,
+ auth: AUTH
}
client.publish(URI, params, nop)
},
- { name : "AssertionError", message : "must pass package metadata to publish" },
- "params must include metadata for package"
+ { name: 'AssertionError', message: 'must pass package metadata to publish' },
+ 'params must include metadata for package'
)
t.throws(
function () {
var params = {
- metadata : METADATA,
- access : ACCESS,
- auth : AUTH
+ metadata: METADATA,
+ access: ACCESS,
+ auth: AUTH
}
client.publish(URI, params, nop)
},
- { name : "AssertionError", message : "must pass package body to publish" },
- "params must include body of package to publish"
+ { name: 'AssertionError', message: 'must pass package body to publish' },
+ 'params must include body of package to publish'
)
t.throws(
function () {
var params = {
- metadata : METADATA,
- access : ACCESS,
- body : BODY
+ metadata: METADATA,
+ access: ACCESS,
+ body: BODY
}
client.publish(URI, params, nop)
},
- { name : "AssertionError", message : "must pass auth to publish" },
- "params must include auth"
+ { name: 'AssertionError', message: 'must pass auth to publish' },
+ 'params must include auth'
)
t.throws(
function () {
var params = {
- metadata : -1,
- access : ACCESS,
- body : BODY,
- auth : AUTH
+ metadata: -1,
+ access: ACCESS,
+ body: BODY,
+ auth: AUTH
}
client.publish(URI, params, nop)
},
- { name : "AssertionError", message : "must pass package metadata to publish" },
- "metadata must be object"
+ { name: 'AssertionError', message: 'must pass package metadata to publish' },
+ 'metadata must be object'
)
t.throws(
function () {
var params = {
- metadata : METADATA,
- access : "hamchunx",
- body : BODY,
- auth : AUTH
+ metadata: METADATA,
+ access: 'hamchunx',
+ body: BODY,
+ auth: AUTH
}
client.publish(URI, params, nop)
},
{
- name : "AssertionError",
- message : "if present, access level must be either 'public' or 'restricted'"
+ name: 'AssertionError',
+ message: "if present, access level must be either 'public' or 'restricted'"
},
"access level must be 'public' or 'restricted'"
)
@@ -127,34 +127,34 @@ test("publish call contract", function (t) {
t.throws(
function () {
var params = {
- metadata : METADATA,
- access : ACCESS,
- body : -1,
- auth : AUTH
+ metadata: METADATA,
+ access: ACCESS,
+ body: -1,
+ auth: AUTH
}
client.publish(URI, params, nop)
},
{
- name : "AssertionError",
- message : "package body passed to publish must be a stream"
+ name: 'AssertionError',
+ message: 'package body passed to publish must be a stream'
},
- "body must be a Stream"
+ 'body must be a Stream'
)
- t.test("malformed semver in publish", function (t) {
+ t.test('malformed semver in publish', function (t) {
var metadata = JSON.parse(JSON.stringify(METADATA))
- metadata.version = "%!@#$"
+ metadata.version = '%!@#$'
var params = {
- metadata : metadata,
- access : ACCESS,
- message : BODY,
- auth : AUTH
+ metadata: metadata,
+ access: ACCESS,
+ message: BODY,
+ auth: AUTH
}
client.publish(URI, params, function (err) {
t.equal(
err && err.message,
- "invalid semver: %!@#$",
- "got expected semver validation failure"
+ 'invalid semver: %!@#$',
+ 'got expected semver validation failure'
)
t.end()
})
@@ -163,41 +163,41 @@ test("publish call contract", function (t) {
t.end()
})
-test("publish", function (t) {
- var pd = fs.readFileSync(BODY_PATH, "base64")
+test('publish', function (t) {
+ var pd = fs.readFileSync(BODY_PATH, 'base64')
- server.expect("/npm-registry-client", function (req, res) {
- t.equal(req.method, "PUT")
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ server.expect('/npm-registry-client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var o = JSON.parse(b)
- t.equal(o._id, "npm-registry-client")
- t.equal(o["dist-tags"].latest, METADATA.version)
+ t.equal(o._id, 'npm-registry-client')
+ t.equal(o['dist-tags'].latest, METADATA.version)
t.equal(o.access, ACCESS)
t.has(o.versions[METADATA.version], METADATA)
- t.same(o.maintainers, [{ name : "username", email : "i@izs.me" }])
+ t.same(o.maintainers, [{ name: 'username', email: 'i@izs.me' }])
t.same(o.maintainers, o.versions[METADATA.version].maintainers)
- var att = o._attachments[METADATA.name+"-"+METADATA.version+".tgz"]
+ var att = o._attachments[METADATA.name + '-' + METADATA.version + '.tgz']
t.same(att.data, pd)
- var hash = crypto.createHash("sha1").update(pd, "base64").digest("hex")
+ var hash = crypto.createHash('sha1').update(pd, 'base64').digest('hex')
t.equal(o.versions[METADATA.version].dist.shasum, hash)
res.statusCode = 201
- res.json({ created : true })
+ res.json({ created: true })
})
})
client.publish(URI, PARAMS, function (er, data) {
if (er) throw er
- t.deepEqual(data, { created : true })
+ t.deepEqual(data, { created: true })
t.end()
})
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/redirects.js b/deps/npm/node_modules/npm-registry-client/test/redirects.js
index ba38143495..d589f161a6 100644
--- a/deps/npm/node_modules/npm-registry-client/test/redirects.js
+++ b/deps/npm/node_modules/npm-registry-client/test/redirects.js
@@ -1,49 +1,49 @@
-var tap = require("tap")
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
var pkg = {
- _id: "some-package@1.2.3",
- name: "some-package",
- version: "1.2.3"
+ _id: 'some-package@1.2.3',
+ name: 'some-package',
+ version: '1.2.3'
}
-tap.test("basic request", function (t) {
+tap.test('basic request', function (t) {
// Expect one request for { follow : false }
- server.expect("/-/some-package/1.2.3", function (req, res) {
+ server.expect('/-/some-package/1.2.3', function (req, res) {
res.writeHead(301, {
- "Location": "/some-package/1.2.3"
+ 'Location': '/some-package/1.2.3'
})
- res.end("Redirecting")
+ res.end('Redirecting')
})
// Expect 2 requests for { follow : true }
- server.expect("/-/some-package/1.2.3", function (req, res) {
+ server.expect('/-/some-package/1.2.3', function (req, res) {
res.writeHead(301, {
- "Location": "/some-package/1.2.3"
+ 'Location': '/some-package/1.2.3'
})
- res.end("Redirecting")
+ res.end('Redirecting')
})
- server.expect("/some-package/1.2.3", function (req, res) {
+ server.expect('/some-package/1.2.3', function (req, res) {
res.json(pkg)
})
t.plan(2)
client.get(
- "http://localhost:1337/-/some-package/1.2.3",
- { follow : false },
+ 'http://localhost:1337/-/some-package/1.2.3',
+ { follow: false },
function (er) {
- t.ok(er, "Error must be set")
+ t.ok(er, 'Error must be set')
}
)
client.get(
- "http://localhost:1337/-/some-package/1.2.3",
- { follow : true },
+ 'http://localhost:1337/-/some-package/1.2.3',
+ { follow: true },
function (er, data) {
t.deepEqual(data, pkg)
}
diff --git a/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js b/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js
index 5f6a33daa3..27a76b8a81 100644
--- a/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js
+++ b/deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js
@@ -1,55 +1,55 @@
-var zlib = require("zlib")
-var tap = require("tap")
+var zlib = require('zlib')
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient({
- retry : {
- count : 1,
- minTimeout : 10,
- maxTimeout : 100
+ retry: {
+ count: 1,
+ minTimeout: 10,
+ maxTimeout: 100
}
})
-var TEST_URL = common.registry+"/some-package-gzip/1.2.3"
+var TEST_URL = common.registry + '/some-package-gzip/1.2.3'
var pkg = {
- _id : "some-package-gzip@1.2.3",
- name : "some-package-gzip",
- version : "1.2.3"
+ _id: 'some-package-gzip@1.2.3',
+ name: 'some-package-gzip',
+ version: '1.2.3'
}
zlib.gzip(JSON.stringify(pkg), function (err, pkgGzip) {
- tap.test("request gzip package content", function (t) {
- t.ifError(err, "example package compressed")
+ tap.test('request gzip package content', function (t) {
+ t.ifError(err, 'example package compressed')
- server.expect("GET", "/some-package-gzip/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package-gzip/1.2.3', function (req, res) {
res.statusCode = 200
- res.setHeader("Content-Encoding", "gzip")
- res.setHeader("Content-Type", "application/json")
+ res.setHeader('Content-Encoding', 'gzip')
+ res.setHeader('Content-Type', 'application/json')
res.end(pkgGzip)
})
client.get(TEST_URL, {}, function (er, data) {
if (er) throw er
- t.deepEqual(data, pkg, "some-package-gzip version 1.2.3")
+ t.deepEqual(data, pkg, 'some-package-gzip version 1.2.3')
t.end()
})
})
- tap.test("request wrong gzip package content", function (t) {
+ tap.test('request wrong gzip package content', function (t) {
// will retry 3 times
for (var i = 0; i < 3; i++) {
- server.expect("GET", "/some-package-gzip/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package-gzip/1.2.3', function (req, res) {
res.statusCode = 200
- res.setHeader("Content-Encoding", "gzip")
- res.setHeader("Content-Type", "application/json")
- res.end(new Buffer("wrong gzip content"))
+ res.setHeader('Content-Encoding', 'gzip')
+ res.setHeader('Content-Type', 'application/json')
+ res.end(new Buffer('wrong gzip content'))
})
}
client.get(TEST_URL, {}, function (er) {
- t.ok(er, "ungzip error")
+ t.ok(er, 'ungzip error')
t.end()
})
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/request.js b/deps/npm/node_modules/npm-registry-client/test/request.js
index cdc4b75f54..0024c9b215 100644
--- a/deps/npm/node_modules/npm-registry-client/test/request.js
+++ b/deps/npm/node_modules/npm-registry-client/test/request.js
@@ -1,252 +1,252 @@
-var Readable = require("stream").Readable
-var inherits = require("util").inherits
+var Readable = require('stream').Readable
+var inherits = require('util').inherits
-var test = require("tap").test
-var concat = require("concat-stream")
+var test = require('tap').test
+var concat = require('concat-stream')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-function OneA() {
+function OneA () {
Readable.call(this)
- this.push("A")
+ this.push('A')
this.push(null)
}
inherits(OneA, Readable)
function nop () {}
-var URI = "http://localhost:1337/"
-var USERNAME = "username"
-var PASSWORD = "%1234@asdf%"
-var EMAIL = "i@izs.me"
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var URI = 'http://localhost:1337/'
+var USERNAME = 'username'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
-var PARAMS = { auth : AUTH }
+var PARAMS = { auth: AUTH }
-test("request call contract", function (t) {
+test('request call contract', function (t) {
t.throws(
function () {
client.request(undefined, PARAMS, nop)
},
- { name : "AssertionError", message : "must pass uri to request" },
- "requires a URI"
+ { name: 'AssertionError', message: 'must pass uri to request' },
+ 'requires a URI'
)
t.throws(
function () {
client.request([], PARAMS, nop)
},
- { name : "AssertionError", message : "must pass uri to request" },
- "requires URI to be a string"
+ { name: 'AssertionError', message: 'must pass uri to request' },
+ 'requires URI to be a string'
)
t.throws(
function () {
client.request(URI, undefined, nop)
},
- { name : "AssertionError", message : "must pass params to request" },
- "requires params object"
+ { name: 'AssertionError', message: 'must pass params to request' },
+ 'requires params object'
)
t.throws(
function () {
- client.request(URI, "", nop)
+ client.request(URI, '', nop)
},
- { name : "AssertionError", message : "must pass params to request" },
- "params must be object"
+ { name: 'AssertionError', message: 'must pass params to request' },
+ 'params must be object'
)
t.throws(
function () {
client.request(URI, PARAMS, undefined)
},
- { name : "AssertionError", message : "must pass callback to request" },
- "requires callback"
+ { name: 'AssertionError', message: 'must pass callback to request' },
+ 'requires callback'
)
t.throws(
function () {
- client.request(URI, PARAMS, "callback")
+ client.request(URI, PARAMS, 'callback')
},
- { name : "AssertionError", message : "must pass callback to request" },
- "callback must be function"
+ { name: 'AssertionError', message: 'must pass callback to request' },
+ 'callback must be function'
)
t.end()
})
-test("run request through its paces", function (t) {
+test('run request through its paces', function (t) {
t.plan(27)
- server.expect("/request-defaults", function (req, res) {
- t.equal(req.method, "GET", "uses GET by default")
+ server.expect('/request-defaults', function (req, res) {
+ t.equal(req.method, 'GET', 'uses GET by default')
req.pipe(concat(function (d) {
- t.notOk(d.toString("utf7"), "no data included in request")
+ t.notOk(d.toString('utf7'), 'no data included in request')
res.statusCode = 200
- res.json({ fetched : "defaults" })
+ res.json({ fetched: 'defaults' })
}))
})
- server.expect("/last-modified", function (req, res) {
- t.equal(req.headers["if-modified-since"], "test-last-modified",
- "got test if-modified-since")
+ server.expect('/last-modified', function (req, res) {
+ t.equal(req.headers['if-modified-since'], 'test-last-modified',
+ 'got test if-modified-since')
res.statusCode = 200
- res.json({ fetched : "last-modified" })
+ res.json({ fetched: 'last-modified' })
})
- server.expect("/etag", function (req, res) {
- t.equal(req.headers["if-none-match"], "test-etag", "got test etag")
+ server.expect('/etag', function (req, res) {
+ t.equal(req.headers['if-none-match'], 'test-etag', 'got test etag')
res.statusCode = 200
- res.json({ fetched : "etag" })
+ res.json({ fetched: 'etag' })
})
- server.expect("POST", "/etag-post", function (req, res) {
- t.equal(req.headers["if-match"], "post-etag", "got test post etag")
+ server.expect('POST', '/etag-post', function (req, res) {
+ t.equal(req.headers['if-match'], 'post-etag', 'got test post etag')
res.statusCode = 200
- res.json({ posted : "etag" })
+ res.json({ posted: 'etag' })
})
- server.expect("PUT", "/body-stream", function (req, res) {
+ server.expect('PUT', '/body-stream', function (req, res) {
req.pipe(concat(function (d) {
- t.equal(d.toString("utf8"), "A", "streamed expected data")
+ t.equal(d.toString('utf8'), 'A', 'streamed expected data')
res.statusCode = 200
- res.json({ put : "stream" })
+ res.json({ put: 'stream' })
}))
})
- server.expect("PUT", "/body-buffer", function (req, res) {
+ server.expect('PUT', '/body-buffer', function (req, res) {
req.pipe(concat(function (d) {
- t.equal(d.toString("utf8"), "hi", "streamed expected data")
+ t.equal(d.toString('utf8'), 'hi', 'streamed expected data')
res.statusCode = 200
- res.json({ put : "buffer" })
+ res.json({ put: 'buffer' })
}))
})
- server.expect("PUT", "/body-string", function (req, res) {
+ server.expect('PUT', '/body-string', function (req, res) {
req.pipe(concat(function (d) {
- t.equal(d.toString("utf8"), "erp", "streamed expected data")
+ t.equal(d.toString('utf8'), 'erp', 'streamed expected data')
res.statusCode = 200
- res.json({ put : "string" })
+ res.json({ put: 'string' })
}))
})
- server.expect("PUT", "/body-object", function (req, res) {
+ server.expect('PUT', '/body-object', function (req, res) {
req.pipe(concat(function (d) {
- t.equal(d.toString("utf8"), '["tricky"]', "streamed expected data")
+ t.equal(d.toString('utf8'), '["tricky"]', 'streamed expected data')
res.statusCode = 200
- res.json({ put : "object" })
+ res.json({ put: 'object' })
}))
})
- server.expect("GET", "/body-error-string", function (req, res) {
+ server.expect('GET', '/body-error-string', function (req, res) {
req.pipe(concat(function () {
res.statusCode = 200
- res.json({ "error" : "not really an error", "reason" : "unknown" })
+ res.json({ error: 'not really an error', reason: 'unknown' })
}))
})
- server.expect("GET", "/body-error-object", function (req, res) {
+ server.expect('GET', '/body-error-object', function (req, res) {
req.pipe(concat(function () {
res.statusCode = 200
- res.json({ "error" : {} })
+ res.json({ error: {} })
}))
})
var defaults = {}
client.request(
- common.registry+"/request-defaults",
+ common.registry + '/request-defaults',
defaults,
function (er, data, raw, response) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { fetched : "defaults" }, "confirmed defaults work")
- t.equal(response.headers.connection, "keep-alive", "keep-alive set")
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { fetched: 'defaults' }, 'confirmed defaults work')
+ t.equal(response.headers.connection, 'keep-alive', 'keep-alive set')
}
)
- var lastModified = { lastModified : "test-last-modified" }
- client.request(common.registry+"/last-modified", lastModified, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { fetched : "last-modified" }, "last-modified request sent")
+ var lastModified = { lastModified: 'test-last-modified' }
+ client.request(common.registry + '/last-modified', lastModified, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { fetched: 'last-modified' }, 'last-modified request sent')
})
- var etagged = { etag : "test-etag" }
- client.request(common.registry+"/etag", etagged, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { fetched : "etag" }, "etag request sent")
+ var etagged = { etag: 'test-etag' }
+ client.request(common.registry + '/etag', etagged, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { fetched: 'etag' }, 'etag request sent')
})
var postEtagged = {
- method : "post",
- etag : "post-etag"
+ method: 'post',
+ etag: 'post-etag'
}
- client.request(common.registry+"/etag-post", postEtagged, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { posted : "etag" }, "POST etag request sent")
+ client.request(common.registry + '/etag-post', postEtagged, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { posted: 'etag' }, 'POST etag request sent')
})
var putStream = {
- method : "PUT",
- body : new OneA(),
- auth : AUTH
+ method: 'PUT',
+ body: new OneA(),
+ auth: AUTH
}
- client.request(common.registry+"/body-stream", putStream, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { put : "stream" }, "PUT request with stream sent")
+ client.request(common.registry + '/body-stream', putStream, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { put: 'stream' }, 'PUT request with stream sent')
})
var putBuffer = {
- method : "PUT",
- body : new Buffer("hi"),
- auth : AUTH
+ method: 'PUT',
+ body: new Buffer('hi'),
+ auth: AUTH
}
- client.request(common.registry+"/body-buffer", putBuffer, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { put : "buffer" }, "PUT request with buffer sent")
+ client.request(common.registry + '/body-buffer', putBuffer, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { put: 'buffer' }, 'PUT request with buffer sent')
})
var putString = {
- method : "PUT",
- body : "erp",
- auth : AUTH
+ method: 'PUT',
+ body: 'erp',
+ auth: AUTH
}
- client.request(common.registry+"/body-string", putString, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { put : "string" }, "PUT request with string sent")
+ client.request(common.registry + '/body-string', putString, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { put: 'string' }, 'PUT request with string sent')
})
var putObject = {
- method : "PUT",
- body : { toJSON : function () { return [ "tricky" ] } },
- auth : AUTH
+ method: 'PUT',
+ body: { toJSON: function () { return ['tricky'] } },
+ auth: AUTH
}
- client.request(common.registry+"/body-object", putObject, function (er, data) {
- t.ifError(er, "call worked")
- t.deepEquals(data, { put : "object" }, "PUT request with object sent")
+ client.request(common.registry + '/body-object', putObject, function (er, data) {
+ t.ifError(er, 'call worked')
+ t.deepEquals(data, { put: 'object' }, 'PUT request with object sent')
})
- client.request(common.registry+"/body-error-string", defaults, function (er) {
+ client.request(common.registry + '/body-error-string', defaults, function (er) {
t.equal(
er && er.message,
- "not really an error unknown: body-error-string",
- "call worked"
+ 'not really an error unknown: body-error-string',
+ 'call worked'
)
})
- client.request(common.registry+"/body-error-object", defaults, function (er) {
- t.ifError(er, "call worked")
+ client.request(common.registry + '/body-error-object', defaults, function (er) {
+ t.ifError(er, 'call worked')
})
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/retries.js b/deps/npm/node_modules/npm-registry-client/test/retries.js
index 0f0fa36673..3101a5d576 100644
--- a/deps/npm/node_modules/npm-registry-client/test/retries.js
+++ b/deps/npm/node_modules/npm-registry-client/test/retries.js
@@ -1,49 +1,49 @@
-var tap = require("tap")
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient({
- retry : {
- retries : 6,
- minTimeout : 10,
- maxTimeout : 100
+ retry: {
+ retries: 6,
+ minTimeout: 10,
+ maxTimeout: 100
}
})
var pkg = {
- _id : "some-package@1.2.3",
- name : "some-package",
- version : "1.2.3"
+ _id: 'some-package@1.2.3',
+ name: 'some-package',
+ version: '1.2.3'
}
-tap.test("create new user account", function (t) {
+tap.test('create new user account', function (t) {
// first time, return a 408
- server.expect("GET", "/some-package/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package/1.2.3', function (req, res) {
res.statusCode = 408
- res.end("Timeout")
+ res.end('Timeout')
})
// then, slam the door in their face
- server.expect("GET", "/some-package/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package/1.2.3', function (req, res) {
res.destroy()
})
// then, blame someone else
- server.expect("GET", "/some-package/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package/1.2.3', function (req, res) {
res.statusCode = 502
- res.end("Gateway Timeout")
+ res.end('Gateway Timeout')
})
// 'No one's home right now, come back later'
- server.expect("GET", "/some-package/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package/1.2.3', function (req, res) {
res.statusCode = 503
- res.setHeader("retry-after", "10")
- res.end("Come back later")
+ res.setHeader('retry-after', '10')
+ res.end('Come back later')
})
// finally, you may enter.
- server.expect("GET", "/some-package/1.2.3", function (req, res) {
+ server.expect('GET', '/some-package/1.2.3', function (req, res) {
res.statusCode = 200
res.json(pkg)
})
- client.get("http://localhost:1337/some-package/1.2.3", {}, function (er, data) {
+ client.get('http://localhost:1337/some-package/1.2.3', {}, function (er, data) {
if (er) throw er
t.deepEqual(data, pkg)
t.end()
diff --git a/deps/npm/node_modules/npm-registry-client/test/star.js b/deps/npm/node_modules/npm-registry-client/test/star.js
index 0d899ee500..ff00bab1c8 100644
--- a/deps/npm/node_modules/npm-registry-client/test/star.js
+++ b/deps/npm/node_modules/npm-registry-client/test/star.js
@@ -1,178 +1,168 @@
-var test = require("tap").test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var test = require('tap').test
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var cache = require("./fixtures/underscore/cache.json")
-var nock = require("nock")
+var cache = require('./fixtures/underscore/cache.json')
+var nock = require('nock')
function nop () {}
-var URI = "https://npm.registry:8043/rewrite"
-var STARRED = true
-var USERNAME = "username"
-var PASSWORD = "%1234@asdf%"
-var EMAIL = "i@izs.me"
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var URI = 'https://npm.registry:8043/rewrite'
+var STARRED = true
+var USERNAME = 'username'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
-var PARAMS = {
- starred : STARRED,
- auth : AUTH
+var PARAMS = {
+ starred: STARRED,
+ auth: AUTH
}
-test("star call contract", function (t) {
+test('star call contract', function (t) {
t.throws(function () {
client.star(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.star([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.star(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.star(URI, "", nop)
- }, "params must be object")
+ client.star(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.star(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.star(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.star(URI, PARAMS, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
- var params = {
- starred : STARRED
- }
+ var params = { starred: STARRED }
client.star(URI, params, nop)
},
- { name : "AssertionError", message : "must pass auth to star" },
- "params must include auth"
+ { name: 'AssertionError', message: 'must pass auth to star' },
+ 'params must include auth'
)
t.end()
})
-test("star a package", function (t) {
- server.expect("GET", "/underscore?write=true", function (req, res) {
- t.equal(req.method, "GET")
+test('star a package', function (t) {
+ server.expect('GET', '/underscore?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(cache)
})
- server.expect("PUT", "/underscore", function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('PUT', '/underscore', function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var updated = JSON.parse(b)
var already = [
- "vesln", "mvolkmann", "lancehunt", "mikl", "linus", "vasc", "bat",
- "dmalam", "mbrevoort", "danielr", "rsimoes", "thlorenz"
+ 'vesln', 'mvolkmann', 'lancehunt', 'mikl', 'linus', 'vasc', 'bat',
+ 'dmalam', 'mbrevoort', 'danielr', 'rsimoes', 'thlorenz'
]
for (var i = 0; i < already.length; i++) {
var current = already[i]
t.ok(
updated.users[current],
- current + " still likes this package"
+ current + ' still likes this package'
)
}
- t.ok(updated.users[USERNAME], "user is in the starred list")
+ t.ok(updated.users[USERNAME], 'user is in the starred list')
res.statusCode = 201
- res.json({ starred : true })
+ res.json({ starred: true })
})
})
- var params = {
- starred : STARRED,
- auth : AUTH
- }
+ var params = { starred: STARRED, auth: AUTH }
- client.star("http://localhost:1337/underscore", params, function (er, data) {
- t.ifError(er, "no errors")
- t.ok(data.starred, "was starred")
+ client.star('http://localhost:1337/underscore', params, function (er, data) {
+ t.ifError(er, 'no errors')
+ t.ok(data.starred, 'was starred')
t.end()
})
})
-test("if password auth, only sets authorization on put", function (t) {
- var starGet = nock("http://localhost:1010")
- .get("/underscore?write=true")
+test('if password auth, only sets authorization on put', function (t) {
+ var starGet = nock('http://localhost:1010')
+ .get('/underscore?write=true')
.reply(200, {})
- var starPut = nock("http://localhost:1010", {
- reqheaders : {
- authorization : "Basic " + new Buffer(AUTH.username+":"+
- AUTH.password).toString("base64")
+ var starPut = nock('http://localhost:1010', {
+ reqheaders: {
+ authorization: 'Basic ' + new Buffer(AUTH.username + ':' +
+ AUTH.password).toString('base64')
}
})
- .put("/underscore")
+ .put('/underscore')
.reply(200)
- var params = {
- starred : STARRED,
- auth : AUTH
- }
+ var params = { starred: STARRED, auth: AUTH }
- client.star("http://localhost:1010/underscore", params, function (er) {
- t.ifError(er, "starred without issues")
+ client.star('http://localhost:1010/underscore', params, function (er) {
+ t.ifError(er, 'starred without issues')
starGet.done()
starPut.done()
t.end()
})
})
-test("if token auth, sets bearer on get and put", function (t) {
- var starGet = nock("http://localhost:1010", {
- reqheaders : {
- authorization : "Bearer foo"
+test('if token auth, sets bearer on get and put', function (t) {
+ var starGet = nock('http://localhost:1010', {
+ reqheaders: {
+ authorization: 'Bearer foo'
}
})
- .get("/underscore?write=true")
+ .get('/underscore?write=true')
.reply(200, {})
- var getUser = nock("http://localhost:1010", {
- reqheaders : {
- authorization : "Bearer foo"
+ var getUser = nock('http://localhost:1010', {
+ reqheaders: {
+ authorization: 'Bearer foo'
}
})
- .get("/-/whoami")
- .reply(200, {
- username : "bcoe"
- })
+ .get('/-/whoami')
+ .reply(200, { username: 'bcoe' })
- var starPut = nock("http://localhost:1010", {
- reqheaders : {
- authorization : "Bearer foo"
+ var starPut = nock('http://localhost:1010', {
+ reqheaders: {
+ authorization: 'Bearer foo'
}
})
- .put("/underscore")
+ .put('/underscore')
.reply(200)
var params = {
- starred : STARRED,
- auth : {
- token : "foo"
+ starred: STARRED,
+ auth: {
+ token: 'foo'
}
}
- client.star("http://localhost:1010/underscore", params, function (er) {
- t.ifError(er, "starred without error")
+ client.star('http://localhost:1010/underscore', params, function (er) {
+ t.ifError(er, 'starred without error')
starGet.done()
starPut.done()
getUser.done()
diff --git a/deps/npm/node_modules/npm-registry-client/test/stars.js b/deps/npm/node_modules/npm-registry-client/test/stars.js
index cd1c28686a..d990e05c5e 100644
--- a/deps/npm/node_modules/npm-registry-client/test/stars.js
+++ b/deps/npm/node_modules/npm-registry-client/test/stars.js
@@ -1,62 +1,62 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
function nop () {}
-var URI = "https://npm.registry:8043/rewrite"
-var USERNAME = "sample"
-var PASSWORD = "%1234@asdf%"
-var EMAIL = "i@izs.me"
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var URI = 'https://npm.registry:8043/rewrite'
+var USERNAME = 'sample'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
-var PARAMS = {
- username : USERNAME,
- auth : AUTH
+var PARAMS = {
+ username: USERNAME,
+ auth: AUTH
}
var USERS = [
- "benjamincoe",
- "seldo",
- "ceejbot"
+ 'benjamincoe',
+ 'seldo',
+ 'ceejbot'
]
-test("stars call contract", function (t) {
+test('stars call contract', function (t) {
t.throws(function () {
client.stars(undefined, PARAMS, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.stars([], PARAMS, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.stars(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.stars(URI, "", nop)
- }, "params must be object")
+ client.stars(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.stars(URI, PARAMS, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.stars(URI, PARAMS, "callback")
- }, "callback must be function")
+ client.stars(URI, PARAMS, 'callback')
+ }, 'callback must be function')
- t.test("no username anywhere", function (t) {
+ t.test('no username anywhere', function (t) {
var params = {}
client.stars(URI, params, function (err) {
t.equal(
err && err.message,
- "must pass either username or auth to stars",
- "username must not be empty")
+ 'must pass either username or auth to stars',
+ 'username must not be empty')
t.end()
})
})
@@ -64,16 +64,16 @@ test("stars call contract", function (t) {
t.end()
})
-test("get the stars for a package", function (t) {
- server.expect("GET", "/-/_view/starredByUser?key=%22sample%22", function (req, res) {
- t.equal(req.method, "GET")
+test('get the stars for a package', function (t) {
+ server.expect('GET', '/-/_view/starredByUser?key=%22sample%22', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(USERS)
})
- client.stars("http://localhost:1337/", PARAMS, function (er, info) {
- t.ifError(er, "no errors")
- t.deepEqual(info, USERS, "got the list of users")
+ client.stars('http://localhost:1337/', PARAMS, function (er, info) {
+ t.ifError(er, 'no errors')
+ t.deepEqual(info, USERS, 'got the list of users')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/tag.js b/deps/npm/node_modules/npm-registry-client/test/tag.js
index 4116586ee3..2ab5134e4e 100644
--- a/deps/npm/node_modules/npm-registry-client/test/tag.js
+++ b/deps/npm/node_modules/npm-registry-client/test/tag.js
@@ -1,115 +1,106 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
function nop () {}
-var URI = "http://localhost:1337/underscore"
-var USERNAME = "username"
-var PASSWORD = "%1234@asdf%"
-var EMAIL = "i@izs.me"
-var VERSION = "1.3.2"
-var TAG = "not-lodash"
-var AUTH = {
- username : USERNAME,
- password : PASSWORD,
- email : EMAIL
+var URI = 'http://localhost:1337/underscore'
+var USERNAME = 'username'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var VERSION = '1.3.2'
+var TAG = 'not-lodash'
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
}
var PARAMS = {
- tag : TAG,
- version : VERSION,
- auth : AUTH
+ tag: TAG,
+ version: VERSION,
+ auth: AUTH
}
-test("tag call contract", function (t) {
+test('tag call contract', function (t) {
t.throws(function () {
client.tag(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.tag([], AUTH, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.tag(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.tag(URI, "", nop)
- }, "params must be object")
+ client.tag(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.tag(URI, AUTH, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.tag(URI, AUTH, "callback")
- }, "callback must be function")
+ client.tag(URI, AUTH, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
- var params = {
- tag : TAG,
- auth : AUTH
- }
+ var params = { tag: TAG, auth: AUTH }
client.tag(URI, params, nop)
},
- { name : "AssertionError", message : "must pass version to tag" },
- "tag must include version"
+ { name: 'AssertionError', message: 'must pass version to tag' },
+ 'tag must include version'
)
t.throws(
function () {
- var params = {
- version : VERSION,
- auth : AUTH
- }
+ var params = { version: VERSION, auth: AUTH }
client.tag(URI, params, nop)
},
- { name : "AssertionError", message : "must pass tag name to tag" },
- "tag must include name"
+ { name: 'AssertionError', message: 'must pass tag name to tag' },
+ 'tag must include name'
)
t.throws(
function () {
- var params = {
- version : VERSION,
- tag : TAG
- }
+ var params = { version: VERSION, tag: TAG }
client.tag(URI, params, nop)
},
- { name : "AssertionError", message : "must pass auth to tag" },
- "params must include auth"
+ { name: 'AssertionError', message: 'must pass auth to tag' },
+ 'params must include auth'
)
t.end()
})
-test("tag a package", function (t) {
- server.expect("PUT", "/underscore/not-lodash", function (req, res) {
- t.equal(req.method, "PUT")
+test('tag a package', function (t) {
+ server.expect('PUT', '/underscore/not-lodash', function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var updated = JSON.parse(b)
- t.deepEqual(updated, "1.3.2")
+ t.deepEqual(updated, '1.3.2')
res.statusCode = 201
- res.json({tagged:true})
+ res.json({ tagged: true })
})
})
client.tag(URI, PARAMS, function (error, data) {
- t.ifError(error, "no errors")
- t.ok(data.tagged, "was tagged")
+ t.ifError(error, 'no errors')
+ t.ok(data.tagged, 'was tagged')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js b/deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js
index 88ee13f377..d3222de470 100644
--- a/deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js
+++ b/deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js
@@ -1,41 +1,41 @@
-var tap = require("tap")
+var tap = require('tap')
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var cache = require("./fixtures/@npm/npm-registry-client/cache.json")
+var cache = require('./fixtures/@npm/npm-registry-client/cache.json')
-var REV = "/-rev/213-0a1049cf56172b7d9a1184742c6477b9"
-var PACKAGE = "/@npm%2fnpm-registry-client"
-var URI = common.registry + PACKAGE
-var TOKEN = "of-glad-tidings"
-var VERSION = "3.0.6"
-var AUTH = {
- token : TOKEN
+var REV = '/-rev/213-0a1049cf56172b7d9a1184742c6477b9'
+var PACKAGE = '/@npm%2fnpm-registry-client'
+var URI = common.registry + PACKAGE
+var TOKEN = 'of-glad-tidings'
+var VERSION = '3.0.6'
+var AUTH = {
+ token: TOKEN
}
-var PARAMS = {
- version : VERSION,
- auth : AUTH
+var PARAMS = {
+ version: VERSION,
+ auth: AUTH
}
-tap.test("unpublish a package", function (t) {
- server.expect("GET", "/@npm%2fnpm-registry-client?write=true", function (req, res) {
- t.equal(req.method, "GET")
+tap.test('unpublish a package', function (t) {
+ server.expect('GET', '/@npm%2fnpm-registry-client?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(cache)
})
- server.expect("PUT", "/@npm%2fnpm-registry-client" + REV, function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('PUT', '/@npm%2fnpm-registry-client' + REV, function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf-8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf-8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var updated = JSON.parse(b)
t.notOk(updated.versions[VERSION])
})
@@ -43,20 +43,24 @@ tap.test("unpublish a package", function (t) {
res.json(cache)
})
- server.expect("GET", PACKAGE, function (req, res) {
- t.equal(req.method, "GET")
+ server.expect('GET', PACKAGE, function (req, res) {
+ t.equal(req.method, 'GET')
res.json(cache)
})
- server.expect("DELETE", PACKAGE+"/-"+PACKAGE+"-"+VERSION+".tgz"+REV, function (req, res) {
- t.equal(req.method, "DELETE")
+ server.expect(
+ 'DELETE',
+ PACKAGE + '/-' + PACKAGE + '-' + VERSION + '.tgz' + REV,
+ function (req, res) {
+ t.equal(req.method, 'DELETE')
- res.json({unpublished:true})
- })
+ res.json({ unpublished: true })
+ }
+ )
client.unpublish(URI, PARAMS, function (er) {
- t.ifError(er, "no errors")
+ t.ifError(er, 'no errors')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/unpublish.js b/deps/npm/node_modules/npm-registry-client/test/unpublish.js
index edc42699e9..afb16b7877 100644
--- a/deps/npm/node_modules/npm-registry-client/test/unpublish.js
+++ b/deps/npm/node_modules/npm-registry-client/test/unpublish.js
@@ -1,81 +1,81 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
-var cache = require("./fixtures/underscore/cache.json")
+var cache = require('./fixtures/underscore/cache.json')
function nop () {}
-var REV = "/-rev/72-47f2986bfd8e8b55068b204588bbf484"
-var URI = "http://localhost:1337/underscore"
-var TOKEN = "of-glad-tidings"
-var VERSION = "1.3.2"
-var AUTH = {
- token : TOKEN
+var REV = '/-rev/72-47f2986bfd8e8b55068b204588bbf484'
+var URI = 'http://localhost:1337/underscore'
+var TOKEN = 'of-glad-tidings'
+var VERSION = '1.3.2'
+var AUTH = {
+ token: TOKEN
}
var PARAMS = {
- version : VERSION,
- auth : AUTH
+ version: VERSION,
+ auth: AUTH
}
-test("unpublish call contract", function (t) {
+test('unpublish call contract', function (t) {
t.throws(function () {
client.unpublish(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.unpublish([], AUTH, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.unpublish(URI, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.unpublish(URI, "", nop)
- }, "params must be object")
+ client.unpublish(URI, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.unpublish(URI, AUTH, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.unpublish(URI, AUTH, "callback")
- }, "callback must be function")
+ client.unpublish(URI, AUTH, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {
- version : VERSION
+ version: VERSION
}
client.unpublish(URI, params, nop)
},
- { name : "AssertionError", message : "must pass auth to unpublish" },
- "must pass auth to unpublish"
+ { name: 'AssertionError', message: 'must pass auth to unpublish' },
+ 'must pass auth to unpublish'
)
t.end()
})
-test("unpublish a package", function (t) {
- server.expect("GET", "/underscore?write=true", function (req, res) {
- t.equal(req.method, "GET")
+test('unpublish a package', function (t) {
+ server.expect('GET', '/underscore?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(cache)
})
- server.expect("PUT", "/underscore" + REV, function (req, res) {
- t.equal(req.method, "PUT")
+ server.expect('PUT', '/underscore' + REV, function (req, res) {
+ t.equal(req.method, 'PUT')
- var b = ""
- req.setEncoding("utf-8")
- req.on("data", function (d) {
+ var b = ''
+ req.setEncoding('utf-8')
+ req.on('data', function (d) {
b += d
})
- req.on("end", function () {
+ req.on('end', function () {
var updated = JSON.parse(b)
t.notOk(updated.versions[VERSION])
})
@@ -83,20 +83,20 @@ test("unpublish a package", function (t) {
res.json(cache)
})
- server.expect("GET", "/underscore", function (req, res) {
- t.equal(req.method, "GET")
+ server.expect('GET', '/underscore', function (req, res) {
+ t.equal(req.method, 'GET')
res.json(cache)
})
- server.expect("DELETE", "/underscore/-/underscore-1.3.2.tgz" + REV, function (req, res) {
- t.equal(req.method, "DELETE")
+ server.expect('DELETE', '/underscore/-/underscore-1.3.2.tgz' + REV, function (req, res) {
+ t.equal(req.method, 'DELETE')
- res.json({unpublished:true})
+ res.json({ unpublished: true })
})
client.unpublish(URI, PARAMS, function (error) {
- t.ifError(error, "no errors")
+ t.ifError(error, 'no errors')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/whoami.js b/deps/npm/node_modules/npm-registry-client/test/whoami.js
index 21b70e82fa..764fc0c304 100644
--- a/deps/npm/node_modules/npm-registry-client/test/whoami.js
+++ b/deps/npm/node_modules/npm-registry-client/test/whoami.js
@@ -1,68 +1,68 @@
-var test = require("tap").test
+var test = require('tap').test
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
var client = common.freshClient()
function nop () {}
-var WHOIAM = "wombat"
-var TOKEN = "not-bad-meaning-bad-but-bad-meaning-wombat"
-var AUTH = { token : TOKEN }
-var PARAMS = { auth : AUTH }
+var WHOIAM = 'wombat'
+var TOKEN = 'not-bad-meaning-bad-but-bad-meaning-wombat'
+var AUTH = { token: TOKEN }
+var PARAMS = { auth: AUTH }
-test("whoami call contract", function (t) {
+test('whoami call contract', function (t) {
t.throws(function () {
client.whoami(undefined, AUTH, nop)
- }, "requires a URI")
+ }, 'requires a URI')
t.throws(function () {
client.whoami([], AUTH, nop)
- }, "requires URI to be a string")
+ }, 'requires URI to be a string')
t.throws(function () {
client.whoami(common.registry, undefined, nop)
- }, "requires params object")
+ }, 'requires params object')
t.throws(function () {
- client.whoami(common.registry, "", nop)
- }, "params must be object")
+ client.whoami(common.registry, '', nop)
+ }, 'params must be object')
t.throws(function () {
client.whoami(common.registry, AUTH, undefined)
- }, "requires callback")
+ }, 'requires callback')
t.throws(function () {
- client.whoami(common.registry, AUTH, "callback")
- }, "callback must be function")
+ client.whoami(common.registry, AUTH, 'callback')
+ }, 'callback must be function')
t.throws(
function () {
var params = {}
client.whoami(common.registry, params, nop)
},
- { name : "AssertionError", message : "must pass auth to whoami" },
- "must pass auth to whoami"
+ { name: 'AssertionError', message: 'must pass auth to whoami' },
+ 'must pass auth to whoami'
)
t.end()
})
-test("whoami", function (t) {
- server.expect("GET", "/-/whoami", function (req, res) {
- t.equal(req.method, "GET")
+test('whoami', function (t) {
+ server.expect('GET', '/-/whoami', function (req, res) {
+ t.equal(req.method, 'GET')
// only available for token-based auth for now
t.equal(
req.headers.authorization,
- "Bearer not-bad-meaning-bad-but-bad-meaning-wombat"
+ 'Bearer not-bad-meaning-bad-but-bad-meaning-wombat'
)
- res.json({username : WHOIAM})
+ res.json({ username: WHOIAM })
})
client.whoami(common.registry, PARAMS, function (error, wombat) {
- t.ifError(error, "no errors")
- t.equal(wombat, WHOIAM, "im a wombat")
+ t.ifError(error, 'no errors')
+ t.equal(wombat, WHOIAM, 'im a wombat')
t.end()
})
diff --git a/deps/npm/node_modules/npm-registry-client/test/zz-cleanup.js b/deps/npm/node_modules/npm-registry-client/test/zz-cleanup.js
index f030b11ee0..35253c7acd 100644
--- a/deps/npm/node_modules/npm-registry-client/test/zz-cleanup.js
+++ b/deps/npm/node_modules/npm-registry-client/test/zz-cleanup.js
@@ -1,10 +1,10 @@
-var tap = require("tap")
-var rimraf = require("rimraf")
+var tap = require('tap')
+var rimraf = require('rimraf')
-tap.test("teardown", function (t) {
- rimraf(__dirname + "/fixtures/cache", function (er) {
+tap.test('teardown', function (t) {
+ rimraf(__dirname + '/fixtures/cache', function (er) {
if (er) throw er
- t.pass("cache cleaned")
+ t.pass('cache cleaned')
t.end()
})
})
diff --git a/deps/npm/node_modules/npmlog/README.md b/deps/npm/node_modules/npmlog/README.md
index ad67688d72..a57cf429d4 100644
--- a/deps/npm/node_modules/npmlog/README.md
+++ b/deps/npm/node_modules/npmlog/README.md
@@ -80,6 +80,26 @@ stream.
Disable colors on all messages.
+## log.enableProgress()
+
+Enable the display of log activity spinner and progress bar
+
+## log.disableProgress()
+
+Disable the display of a progress bar
+
+## log.enableUnicode()
+
+Force the unicode theme to be used for the progress bar.
+
+## log.disableUnicode()
+
+Disable the use of unicode in the progress bar.
+
+## log.setGaugeTemplate(template)
+
+Overrides the default gauge template.
+
## log.pause()
Stop emitting messages to the stream, but do not drop them.
@@ -123,6 +143,28 @@ Note that if the number is `Infinity`, then setting the level to that
will cause all log messages to be suppressed. If the number is
`-Infinity`, then the only way to show it is to enable all log messages.
+## log.newItem(name, todo, weight)
+
+* `name` {String} Optional; progress item name.
+* `todo` {Number} Optional; total amount of work to be done. Default 0.
+* `weight` {Number} Optional; the weight of this item relative to others. Default 1.
+
+This adds a new `are-we-there-yet` item tracker to the progress tracker. The
+object returned has the `log[level]` methods but is otherwise an
+`are-we-there-yet` `Tracker` object.
+
+## log.newStream(name, todo, weight)
+
+This adds a new `are-we-there-yet` stream tracker to the progress tracker. The
+object returned has the `log[level]` methods but is otherwise an
+`are-we-there-yet` `TrackerStream` object.
+
+## log.newGroup(name, weight)
+
+This adds a new `are-we-there-yet` tracker group to the progress tracker. The
+object returned has the `log[level]` methods but is otherwise an
+`are-we-there-yet` `TrackerGroup` object.
+
# Events
Events are all emitted with the message object.
diff --git a/deps/npm/node_modules/npmlog/log.js b/deps/npm/node_modules/npmlog/log.js
index 38b7c74ac1..067f6ff10d 100644
--- a/deps/npm/node_modules/npmlog/log.js
+++ b/deps/npm/node_modules/npmlog/log.js
@@ -1,3 +1,6 @@
+'use strict'
+var Progress = require('are-we-there-yet')
+var Gauge = require('gauge')
var EE = require('events').EventEmitter
var log = exports = module.exports = new EE
var util = require('util')
@@ -20,6 +23,88 @@ log.disableColor = function () {
// default level
log.level = 'info'
+log.gauge = new Gauge(log.cursor)
+log.tracker = new Progress.TrackerGroup()
+
+// no progress bars unless asked
+log.progressEnabled = false
+
+var gaugeTheme = undefined
+
+log.enableUnicode = function () {
+ gaugeTheme = gauge.unicode
+ log.gauge.setTheme(gaugeTheme)
+}
+
+log.disableUnicode = function () {
+ gaugeTheme = gauge.ascii
+ log.gauge.setTheme(gaugeTheme)
+}
+
+var gaugeTemplate = undefined
+log.setGaugeTemplate = function (template) {
+ gaugeTemplate = template
+ log.gauge.setTemplate(gaugeTemplate)
+}
+
+log.enableProgress = function () {
+ if (this.progressEnabled) return
+ this.progressEnabled = true
+ if (this._pause) return
+ this.tracker.on('change', this.showProgress)
+ this.gauge.enable()
+ this.showProgress()
+}
+
+log.disableProgress = function () {
+ if (!this.progressEnabled) return
+ this.clearProgress()
+ this.progressEnabled = false
+ this.tracker.removeListener('change', this.showProgress)
+ this.gauge.disable()
+}
+
+var trackerConstructors = ['newGroup', 'newItem', 'newStream']
+
+var mixinLog = function (tracker) {
+ // mixin the public methods from log into the tracker
+ // (except: conflicts and one's we handle specially)
+ Object.keys(log).forEach(function (P) {
+ if (P[0] === '_') return
+ if (trackerConstructors.filter(function (C) { return C === P }).length) return
+ if (tracker[P]) return
+ if (typeof log[P] !== 'function') return
+ var func = log[P]
+ tracker[P] = function () {
+ return func.apply(log, arguments)
+ }
+ })
+ // if the new tracker is a group, make sure any subtrackers get
+ // mixed in too
+ if (tracker instanceof Progress.TrackerGroup) {
+ trackerConstructors.forEach(function (C) {
+ var func = tracker[C]
+ tracker[C] = function () { return mixinLog(func.apply(tracker, arguments)) }
+ })
+ }
+ return tracker
+}
+
+// Add tracker constructors to the top level log object
+trackerConstructors.forEach(function (C) {
+ log[C] = function () { return mixinLog(this.tracker[C].apply(this.tracker, arguments)) }
+})
+
+log.clearProgress = function () {
+ if (!this.progressEnabled) return
+ this.gauge.hide()
+}
+
+log.showProgress = function (name) {
+ if (!this.progressEnabled) return
+ this.gauge.show(name, this.tracker.completed())
+}.bind(log) // bind for use in tracker's on-change listener
+
// temporarily stop emitting, but don't drop
log.pause = function () {
this._paused = true
@@ -34,6 +119,7 @@ log.resume = function () {
b.forEach(function (m) {
this.emitLog(m)
}, this)
+ if (this.progressEnabled) this.enableProgress()
}
log._buffer = []
@@ -88,6 +174,7 @@ log.emitLog = function (m) {
this._buffer.push(m)
return
}
+ if (this.progressEnabled) this.gauge.pulse(m.prefix)
var l = this.levels[m.level]
if (l === undefined) return
if (l < this.levels[this.level]) return
@@ -95,6 +182,7 @@ log.emitLog = function (m) {
var style = log.style[m.level]
var disp = log.disp[m.level] || m.level
+ this.clearProgress()
m.message.split(/\r?\n/).forEach(function (line) {
if (this.heading) {
this.write(this.heading, this.headingStyle)
@@ -106,12 +194,17 @@ log.emitLog = function (m) {
this.write(p, this.prefixStyle)
this.write(' ' + line + '\n')
}, this)
+ this.showProgress()
}
log.write = function (msg, style) {
if (!this.cursor) return
if (this.stream !== this.cursor.stream) {
this.cursor = ansi(this.stream, { enabled: colorEnabled })
+ var options = {}
+ if (gaugeTheme != null) options.theme = gaugeTheme
+ if (gaugeTemplate != null) options.template = gaugeTemplate
+ this.gauge = new Gauge(options, this.cursor)
}
style = style || {}
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore
new file mode 100644
index 0000000000..926ddf616c
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore
@@ -0,0 +1,3 @@
+*~
+.#*
+node_modules
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/README.md b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/README.md
new file mode 100644
index 0000000000..3491c5956c
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/README.md
@@ -0,0 +1,183 @@
+are-we-there-yet
+----------------
+
+Track complex hiearchies of asynchronous task completion statuses. This is
+intended to give you a way of recording and reporting the progress of the big
+recursive fan-out and gather type workflows that are so common in async.
+
+What you do with this completion data is up to you, but the most common use case is to
+feed it to one of the many progress bar modules.
+
+Most progress bar modules include a rudamentary version of this, but my
+needs were more complex.
+
+Usage
+=====
+
+```javascript
+var TrackerGroup = require("are-we-there-yet").TrackerGroup
+
+var top = new TrackerGroup("program")
+
+var single = top.newItem("one thing", 100)
+single.completeWork(20)
+
+console.log(top.completed()) // 0.2
+
+fs.stat("file", function(er, stat) {
+ if (er) throw er
+ var stream = top.newStream("file", stat.size)
+ console.log(top.completed()) // now 0.1 as single is 50% of the job and is 20% complete
+ // and 50% * 20% == 10%
+ fs.createReadStream("file").pipe(stream).on("data", function (chunk) {
+ // do stuff with chunk
+ })
+ top.on("change", function (name) {
+ // called each time a chunk is read from "file"
+ // top.completed() will start at 0.1 and fill up to 0.6 as the file is read
+ })
+})
+```
+
+Shared Methods
+==============
+
+All tracker objects described below have the following methods, they, along
+with the event comprise the interface for consumers of tracker objects.
+
+* var completed = tracker.completed()
+
+Returns the ratio of completed work to work to be done. Range of 0 to 1.
+
+* tracker.finish()
+
+Marks the tracker as completed. With a TrackerGroup this marks all of its
+components as completed.
+
+Marks all of the components of this tracker as finished, which in turn means
+that `tracker.completed()` for this will now be 1.
+
+This will result in one or more `change` events being emitted.
+
+Events
+======
+
+All tracker objects emit `change` events with an argument of the name of the
+thing changing.
+
+TrackerGroup
+============
+
+* var tracker = new TrackerGroup(**name**)
+
+ * **name** *(optional)* - The name of this tracker group, used in change
+ notifications if the component updating didn't have a name. Defaults to undefined.
+
+Creates a new empty tracker aggregation group. These are trackers whose
+completion status is determined by the completion status of other trackers.
+
+* tracker.addUnit(**otherTracker**, **weight**)
+
+ * **otherTracker** - Any of the other are-we-there-yet tracker objects
+ * **weight** *(optional)* - The weight to give the tracker, defaults to 1.
+
+Adds the **otherTracker** to this aggregation group. The weight determines
+how long you expect this tracker to take to complete in proportion to other
+units. So for instance, if you add one tracker with a weight of 1 and
+another with a weight of 2, you're saying the second will take twice as long
+to complete as the first. As such, the first will account for 33% of the
+completion of this tracker and the second will account for the other 67%.
+
+Returns **otherTracker**.
+
+* var subGroup = tracker.newGroup(**name**, **weight**)
+
+The above is exactly equivalent to:
+
+```javascript
+ var subGroup = tracker.addUnit(new TrackerGroup(name), weight)
+```
+
+* var subItem = tracker.newItem(**name**, **todo**, **weight**)
+
+The above is exactly equivalent to:
+
+```javascript
+ var subItem = tracker.addUnit(new Tracker(name, todo), weight)
+```
+
+* var subStream = tracker.newStream(**name**, **todo**, **weight**)
+
+The above is exactly equivalent to:
+
+```javascript
+ var subStream = tracker.addUnit(new TrackerStream(name, todo), weight)
+```
+
+* console.log( tracker.debug() )
+
+Returns a tree showing the completion of this tracker group and all of its
+children, including recursively entering all of the children.
+
+Tracker
+=======
+
+* var tracker = new Tracker(**name**, **todo**)
+
+ * **name** *(optional)* The name of this counter to report in change
+ events. Defaults to undefined.
+ * **todo** *(optional)* The amount of work todo (a number). Defaults to 0.
+
+Ordinarily these are constructed as a part of a tracker group (via `newItem`) but they c
+
+* var completed = tracker.completed()
+
+Returns the ratio of completed work to work to be done. Range of 0 to 1. If
+total work to be done is 0 then it will return 0.
+
+* tracker.addWork(**todo**)
+
+ * **todo** A number to add to the amount of work to be done.
+
+Increases the amount of work to be done, thus decreasing the completion
+percentage. Triggers a `change` event.
+
+* tracker.completeWork(**completed**)
+
+ * **completed** A number to add to the work complete
+
+Increase the amount of work complete, thus increasing the completion percentage.
+Will never increase the work completed past the amount of work todo. That is,
+percentages > 100% are not allowed. Triggers a `change` event.
+
+* tracker.finish()
+
+Marks this tracker as finished, tracker.completed() will now be 1. Triggers
+a `change` event.
+
+TrackerStream
+=============
+
+* var tracker = new TrackerStream(**name**, **size**, **options**)
+
+ * **name** *(optional)* The name of this counter to report in change
+ events. Defaults to undefined.
+ * **size** *(optional)* The number of bytes being sent through this stream.
+ * **options** *(optional)* A hash of stream options
+
+The tracker stream object is a pass through stream that updates an internal
+tracker object each time a block passes through. It's intended to track
+downloads, file extraction and other related activities. You use it by piping
+your data source into it and then using it as your data source.
+
+If your data has a length attribute then that's used as the amount of work
+completed when the chunk is passed through. If it does not (eg, object
+streams) then each chunk counts as completing 1 unit of work, so your size
+should be the total number of objects being streamed.
+
+* tracker.addWork(**todo**)
+
+ * **todo** Increase the expected overall size by **todo** bytes.
+
+Increases the amount of work to be done, thus decreasing the completion
+percentage. Triggers a `change` event.
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/index.js b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/index.js
new file mode 100644
index 0000000000..ffbdfb174a
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/index.js
@@ -0,0 +1,130 @@
+"use strict"
+var stream = require("stream");
+var EventEmitter = require("events").EventEmitter
+var util = require("util")
+var delegate = require("delegates")
+
+var TrackerGroup = exports.TrackerGroup = function (name) {
+ EventEmitter.call(this)
+ this.name = name
+ this.trackGroup = []
+ var self = this
+ this.totalWeight = 0
+ var noteChange = this.noteChange = function (name) {
+ self.emit("change", name || this.name)
+ }.bind(this)
+ this.trackGroup.forEach(function(unit) {
+ unit.on("change", noteChange)
+ })
+}
+util.inherits(TrackerGroup, EventEmitter)
+
+TrackerGroup.prototype.completed = function () {
+ if (this.trackGroup.length==0) return 0
+ var valPerWeight = 1 / this.totalWeight
+ var completed = 0
+ this.trackGroup.forEach(function(T) {
+ completed += valPerWeight * T.weight * T.completed()
+ })
+ return completed
+}
+
+TrackerGroup.prototype.addUnit = function (unit, weight, noChange) {
+ unit.weight = weight || 1
+ this.totalWeight += unit.weight
+ this.trackGroup.push(unit)
+ unit.on("change", this.noteChange)
+ if (! noChange) this.emit("change", this.name)
+ return unit
+}
+
+TrackerGroup.prototype.newGroup = function (name, weight) {
+ return this.addUnit(new TrackerGroup(name), weight)
+}
+
+TrackerGroup.prototype.newItem = function (name, todo, weight) {
+ return this.addUnit(new Tracker(name, todo), weight)
+}
+
+TrackerGroup.prototype.newStream = function (name, todo, weight) {
+ return this.addUnit(new TrackerStream(name, todo), weight)
+}
+
+TrackerGroup.prototype.finish = function () {
+ if (! this.trackGroup.length) { this.addUnit(new Tracker(), 1, true) }
+ var self = this
+ this.trackGroup.forEach(function(T) {
+ T.removeListener("change", self.noteChange)
+ T.finish()
+ })
+ this.emit("change", this.name)
+}
+
+var buffer = " "
+TrackerGroup.prototype.debug = function (depth) {
+ depth = depth || 0
+ var indent = depth ? buffer.substr(0,depth) : ""
+ var output = indent + (this.name||"top") + ": " + this.completed() + "\n"
+ this.trackGroup.forEach(function(T) {
+ if (T instanceof TrackerGroup) {
+ output += T.debug(depth + 1)
+ }
+ else {
+ output += indent + " " + T.name + ": " + T.completed() + "\n"
+ }
+ })
+ return output
+}
+
+var Tracker = exports.Tracker = function (name,todo) {
+ EventEmitter.call(this)
+ this.name = name
+ this.workDone = 0
+ this.workTodo = todo || 0
+}
+util.inherits(Tracker, EventEmitter)
+
+Tracker.prototype.completed = function () {
+ return this.workTodo==0 ? 0 : this.workDone / this.workTodo
+}
+
+Tracker.prototype.addWork = function (work) {
+ this.workTodo += work
+ this.emit("change", this.name)
+}
+
+Tracker.prototype.completeWork = function (work) {
+ this.workDone += work
+ if (this.workDone > this.workTodo) this.workDone = this.workTodo
+ this.emit("change", this.name)
+}
+
+Tracker.prototype.finish = function () {
+ this.workTodo = this.workDone = 1
+ this.emit("change", this.name)
+}
+
+
+var TrackerStream = exports.TrackerStream = function (name, size, options) {
+ stream.Transform.call(this, options)
+ this.tracker = new Tracker(name, size)
+ this.name = name
+ var self = this
+ this.tracker.on("change", function (name) { self.emit("change", name) })
+}
+util.inherits(TrackerStream, stream.Transform)
+
+TrackerStream.prototype._transform = function (data, encoding, cb) {
+ this.tracker.completeWork(data.length ? data.length : 1)
+ this.push(data)
+ cb()
+}
+
+TrackerStream.prototype._flush = function (cb) {
+ this.tracker.finish()
+ cb()
+}
+
+delegate(TrackerStream.prototype, "tracker")
+ .method("completed")
+ .method("addWork")
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore
new file mode 100644
index 0000000000..c2658d7d1b
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md
new file mode 100644
index 0000000000..aee31a4c35
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md
@@ -0,0 +1,16 @@
+
+0.1.0 / 2014-10-17
+==================
+
+ * adds `.fluent()` to api
+
+0.0.3 / 2014-01-13
+==================
+
+ * fix receiver for .method()
+
+0.0.2 / 2014-01-13
+==================
+
+ * Object.defineProperty() sucks
+ * Initial commit
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile
new file mode 100644
index 0000000000..a9dcfd50db
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile
@@ -0,0 +1,8 @@
+
+test:
+ @./node_modules/.bin/mocha \
+ --require should \
+ --reporter spec \
+ --bail
+
+.PHONY: test
\ No newline at end of file
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md
new file mode 100644
index 0000000000..ab8cf4ace1
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md
@@ -0,0 +1,94 @@
+
+# delegates
+
+ Node method and accessor delegation utilty.
+
+## Installation
+
+```
+$ npm install delegates
+```
+
+## Example
+
+```js
+var delegate = require('delegates');
+
+...
+
+delegate(proto, 'request')
+ .method('acceptsLanguages')
+ .method('acceptsEncodings')
+ .method('acceptsCharsets')
+ .method('accepts')
+ .method('is')
+ .access('querystring')
+ .access('idempotent')
+ .access('socket')
+ .access('length')
+ .access('query')
+ .access('search')
+ .access('status')
+ .access('method')
+ .access('path')
+ .access('body')
+ .access('host')
+ .access('url')
+ .getter('subdomains')
+ .getter('protocol')
+ .getter('header')
+ .getter('stale')
+ .getter('fresh')
+ .getter('secure')
+ .getter('ips')
+ .getter('ip')
+```
+
+# API
+
+## Delegate(proto, prop)
+
+Creates a delegator instance used to configure using the `prop` on the given
+`proto` object. (which is usually a prototype)
+
+## Delegate#method(name)
+
+Allows the given method `name` to be accessed on the host.
+
+## Delegate#getter(name)
+
+Creates a "getter" for the property with the given `name` on the delegated
+object.
+
+## Delegate#setter(name)
+
+Creates a "setter" for the property with the given `name` on the delegated
+object.
+
+## Delegate#access(name)
+
+Creates an "accessor" (ie: both getter *and* setter) for the property with the
+given `name` on the delegated object.
+
+## Delegate#fluent(name)
+
+A unique type of "accessor" that works for a "fluent" API. When called as a
+getter, the method returns the expected value. However, if the method is called
+with a value, it will return itself so it can be chained. For example:
+
+```js
+delegate(proto, 'request')
+ .fluent('query')
+
+// getter
+var q = request.query();
+
+// setter (chainable)
+request
+ .query({ a: 1 })
+ .query({ b: 2 });
+```
+
+# License
+
+ MIT
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js
new file mode 100644
index 0000000000..17c222d529
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js
@@ -0,0 +1,121 @@
+
+/**
+ * Expose `Delegator`.
+ */
+
+module.exports = Delegator;
+
+/**
+ * Initialize a delegator.
+ *
+ * @param {Object} proto
+ * @param {String} target
+ * @api public
+ */
+
+function Delegator(proto, target) {
+ if (!(this instanceof Delegator)) return new Delegator(proto, target);
+ this.proto = proto;
+ this.target = target;
+ this.methods = [];
+ this.getters = [];
+ this.setters = [];
+ this.fluents = [];
+}
+
+/**
+ * Delegate method `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.method = function(name){
+ var proto = this.proto;
+ var target = this.target;
+ this.methods.push(name);
+
+ proto[name] = function(){
+ return this[target][name].apply(this[target], arguments);
+ };
+
+ return this;
+};
+
+/**
+ * Delegator accessor `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.access = function(name){
+ return this.getter(name).setter(name);
+};
+
+/**
+ * Delegator getter `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.getter = function(name){
+ var proto = this.proto;
+ var target = this.target;
+ this.getters.push(name);
+
+ proto.__defineGetter__(name, function(){
+ return this[target][name];
+ });
+
+ return this;
+};
+
+/**
+ * Delegator setter `name`.
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.setter = function(name){
+ var proto = this.proto;
+ var target = this.target;
+ this.setters.push(name);
+
+ proto.__defineSetter__(name, function(val){
+ return this[target][name] = val;
+ });
+
+ return this;
+};
+
+/**
+ * Delegator fluent accessor
+ *
+ * @param {String} name
+ * @return {Delegator} self
+ * @api public
+ */
+
+Delegator.prototype.fluent = function (name) {
+ var proto = this.proto;
+ var target = this.target;
+ this.fluents.push(name);
+
+ proto[name] = function(val){
+ if ('undefined' != typeof val) {
+ this[target][name] = val;
+ return this;
+ } else {
+ return this[target][name];
+ }
+ };
+
+ return this;
+};
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json
new file mode 100644
index 0000000000..7c5dc77523
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "delegates",
+ "version": "0.1.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/node-delegates"
+ },
+ "description": "delegate methods and accessors to another property",
+ "keywords": [
+ "delegate",
+ "delegation"
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/visionmedia/node-delegates/issues"
+ },
+ "homepage": "https://github.com/visionmedia/node-delegates",
+ "_id": "delegates@0.1.0",
+ "_shasum": "b4b57be11a1653517a04b27f0949bdc327dfe390",
+ "_from": "delegates@>=0.1.0 <0.2.0",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "dominicbarnes",
+ "email": "dominic@dbarnes.info"
+ },
+ "maintainers": [
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ {
+ "name": "dominicbarnes",
+ "email": "dominic@dbarnes.info"
+ }
+ ],
+ "dist": {
+ "shasum": "b4b57be11a1653517a04b27f0949bdc327dfe390",
+ "tarball": "http://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz",
+ "readme": "ERROR: No README data found!",
+ "scripts": {}
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js
new file mode 100644
index 0000000000..7b6e3d4df1
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js
@@ -0,0 +1,94 @@
+
+var assert = require('assert');
+var delegate = require('..');
+
+describe('.method(name)', function(){
+ it('should delegate methods', function(){
+ var obj = {};
+
+ obj.request = {
+ foo: function(bar){
+ assert(this == obj.request);
+ return bar;
+ }
+ };
+
+ delegate(obj, 'request').method('foo');
+
+ obj.foo('something').should.equal('something');
+ })
+})
+
+describe('.getter(name)', function(){
+ it('should delegate getters', function(){
+ var obj = {};
+
+ obj.request = {
+ get type() {
+ return 'text/html';
+ }
+ }
+
+ delegate(obj, 'request').getter('type');
+
+ obj.type.should.equal('text/html');
+ })
+})
+
+describe('.setter(name)', function(){
+ it('should delegate setters', function(){
+ var obj = {};
+
+ obj.request = {
+ get type() {
+ return this._type.toUpperCase();
+ },
+
+ set type(val) {
+ this._type = val;
+ }
+ }
+
+ delegate(obj, 'request').setter('type');
+
+ obj.type = 'hey';
+ obj.request.type.should.equal('HEY');
+ })
+})
+
+describe('.access(name)', function(){
+ it('should delegate getters and setters', function(){
+ var obj = {};
+
+ obj.request = {
+ get type() {
+ return this._type.toUpperCase();
+ },
+
+ set type(val) {
+ this._type = val;
+ }
+ }
+
+ delegate(obj, 'request').access('type');
+
+ obj.type = 'hey';
+ obj.type.should.equal('HEY');
+ })
+})
+
+describe('.fluent(name)', function () {
+ it('should delegate in a fluent fashion', function () {
+ var obj = {
+ settings: {
+ env: 'development'
+ }
+ };
+
+ delegate(obj, 'settings').fluent('env');
+
+ obj.env().should.equal('development');
+ obj.env('production').should.equal(obj);
+ obj.settings.env.should.equal('production');
+ })
+})
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/package.json b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/package.json
new file mode 100644
index 0000000000..6b6ce356cf
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "are-we-there-yet",
+ "version": "1.0.3",
+ "description": "Keep track of the overall completion of many dispirate processes",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/iarna/are-we-there-yet.git"
+ },
+ "author": {
+ "name": "Rebecca Turner",
+ "url": "http://re-becca.org"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/iarna/are-we-there-yet/issues"
+ },
+ "homepage": "https://github.com/iarna/are-we-there-yet",
+ "devDependencies": {
+ "tap": "^0.4.13"
+ },
+ "dependencies": {
+ "delegates": "^0.1.0"
+ },
+ "gitHead": "a038607bf1617149cd3a0cf335b3ed08341f0565",
+ "_id": "are-we-there-yet@1.0.3",
+ "_shasum": "699fa10313a9e9d1a5d68b3883c605994161fddd",
+ "_from": "are-we-there-yet@>=1.0.0 <1.1.0",
+ "_npmVersion": "2.6.1",
+ "_nodeVersion": "0.10.36",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "699fa10313a9e9d1a5d68b3883c605994161fddd",
+ "tarball": "http://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js
new file mode 100644
index 0000000000..18c31c32cf
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js
@@ -0,0 +1,56 @@
+"use strict"
+var test = require("tap").test
+var Tracker = require("../index.js").Tracker
+
+var timeoutError = new Error("timeout")
+var testEvent = function (obj,event,next) {
+ var timeout = setTimeout(function(){
+ obj.removeListener(event, eventHandler)
+ next(timeoutError)
+ }, 10)
+ var eventHandler = function () {
+ var args = Array.prototype.slice.call(arguments)
+ args.unshift(null)
+ clearTimeout(timeout)
+ next.apply(null, args)
+ }
+ obj.once(event, eventHandler)
+}
+
+test("Tracker", function (t) {
+ t.plan(10)
+
+ var name = "test"
+ var track = new Tracker(name)
+
+ t.is(track.completed(), 0, "Nothing todo is 0 completion")
+
+ var todo = 100
+ track = new Tracker(name, todo)
+ t.is(track.completed(), 0, "Nothing done is 0 completion")
+
+ testEvent(track, "change", afterCompleteWork)
+ track.completeWork(100)
+ function afterCompleteWork(er, onChangeName) {
+ t.is(er, null, "completeWork: on change event fired")
+ t.is(onChangeName, name, "completeWork: on change emits the correct name")
+ }
+ t.is(track.completed(), 1, "completeWork: 100% completed")
+
+ testEvent(track, "change", afterAddWork)
+ track.addWork(100)
+ function afterAddWork(er, onChangeName) {
+ t.is(er, null, "addWork: on change event fired")
+ t.is(onChangeName, name, "addWork: on change emits the correct name")
+ }
+ t.is(track.completed(), 0.5, "addWork: 50% completed")
+
+
+ track.completeWork(200)
+ t.is(track.completed(), 1, "completeWork: Over completion is still only 100% complete")
+
+ track = new Tracker(name, todo)
+ track.completeWork(50)
+ track.finish()
+ t.is(track.completed(), 1, "finish: Explicitly finishing moves to 100%")
+})
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js
new file mode 100644
index 0000000000..f97e1034ff
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js
@@ -0,0 +1,87 @@
+"use strict"
+var test = require("tap").test
+var Tracker = require("../index.js").Tracker
+var TrackerGroup = require("../index.js").TrackerGroup
+
+var timeoutError = new Error("timeout")
+var testEvent = function (obj,event,next) {
+ var timeout = setTimeout(function(){
+ obj.removeListener(event, eventHandler)
+ next(timeoutError)
+ }, 10)
+ var eventHandler = function () {
+ var args = Array.prototype.slice.call(arguments)
+ args.unshift(null)
+ clearTimeout(timeout)
+ next.apply(null, args)
+ }
+ obj.once(event, eventHandler)
+}
+
+test("TrackerGroup", function (t) {
+ var name = "test"
+
+ var track = new TrackerGroup(name)
+ t.is(track.completed(), 0, "Nothing todo is 0 completion")
+ testEvent(track, "change", afterFinishEmpty)
+ track.finish()
+ var a, b
+ function afterFinishEmpty(er, onChangeName) {
+ t.is(er, null, "finishEmpty: on change event fired")
+ t.is(onChangeName, name, "finishEmpty: on change emits the correct name")
+ t.is(track.completed(), 1, "finishEmpty: Finishing an empty group actually finishes it")
+
+ track = new TrackerGroup(name)
+ a = track.newItem("a", 10, 1)
+ b = track.newItem("b", 10, 1)
+ t.is(track.completed(), 0, "Initially empty")
+ testEvent(track, "change", afterCompleteWork)
+ a.completeWork(5)
+ }
+ function afterCompleteWork(er, onChangeName) {
+ t.is(er, null, "on change event fired")
+ t.is(onChangeName, "a", "on change emits the correct name")
+ t.is(track.completed(), 0.25, "Complete half of one is a quarter overall")
+ testEvent(track, "change", afterFinishAll)
+ track.finish()
+ }
+ function afterFinishAll(er, onChangeName) {
+ t.is(er, null, "finishAll: on change event fired")
+ t.is(onChangeName, name, "finishAll: on change emits the correct name")
+ t.is(track.completed(), 1, "Finishing everything ")
+
+ track = new TrackerGroup(name)
+ a = track.newItem("a", 10, 2)
+ b = track.newItem("b", 10, 1)
+ t.is(track.completed(), 0, "weighted: Initially empty")
+ testEvent(track, "change", afterWeightedCompleteWork)
+ a.completeWork(5)
+ }
+ function afterWeightedCompleteWork(er, onChangeName) {
+ t.is(er, null, "weighted: on change event fired")
+ t.is(onChangeName, "a", "weighted: on change emits the correct name")
+ t.is(Math.round(track.completed()*100), 33, "weighted: Complete half of double weighted")
+ testEvent(track, "change", afterWeightedFinishAll)
+ track.finish()
+ }
+ function afterWeightedFinishAll(er, onChangeName) {
+ t.is(er, null, "weightedFinishAll: on change event fired")
+ t.is(onChangeName, name, "weightedFinishAll: on change emits the correct name")
+ t.is(track.completed(), 1, "weightedFinishaAll: Finishing everything ")
+
+ track = new TrackerGroup(name)
+ a = track.newGroup("a", 10)
+ b = track.newGroup("b", 10)
+ var a1 = a.newItem("a.1",10)
+ a1.completeWork(5)
+ t.is(track.completed(), 0.25, "nested: Initially quarter done")
+ testEvent(track, "change", afterNestedComplete)
+ b.finish()
+ }
+ function afterNestedComplete(er, onChangeName) {
+ t.is(er, null, "nestedComplete: on change event fired")
+ t.is(onChangeName, "b", "nestedComplete: on change emits the correct name")
+ t.is(track.completed(), 0.75, "nestedComplete: Finishing everything ")
+ t.end()
+ }
+})
diff --git a/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js
new file mode 100644
index 0000000000..ca9a7879b9
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js
@@ -0,0 +1,65 @@
+"use strict"
+var test = require("tap").test
+var util = require("util")
+var stream = require("stream")
+var TrackerStream = require("../index.js").TrackerStream
+
+var timeoutError = new Error("timeout")
+var testEvent = function (obj,event,next) {
+ var timeout = setTimeout(function(){
+ obj.removeListener(event, eventHandler)
+ next(timeoutError)
+ }, 10)
+ var eventHandler = function () {
+ var args = Array.prototype.slice.call(arguments)
+ args.unshift(null)
+ clearTimeout(timeout)
+ next.apply(null, args)
+ }
+ obj.once(event, eventHandler)
+}
+
+var Sink = function () {
+ stream.Writable.apply(this,arguments)
+}
+util.inherits(Sink, stream.Writable)
+Sink.prototype._write = function (data, encoding, cb) {
+ cb()
+}
+
+test("TrackerStream", function (t) {
+ t.plan(9)
+
+ var name = "test"
+ var track = new TrackerStream(name)
+
+ t.is(track.completed(), 0, "Nothing todo is 0 completion")
+
+ var todo = 10
+ track = new TrackerStream(name, todo)
+ t.is(track.completed(), 0, "Nothing done is 0 completion")
+
+ track.pipe(new Sink())
+
+ testEvent(track, "change", afterCompleteWork)
+ track.write("0123456789")
+ function afterCompleteWork(er, onChangeName) {
+ t.is(er, null, "write: on change event fired")
+ t.is(onChangeName, name, "write: on change emits the correct name")
+ t.is(track.completed(), 1, "write: 100% completed")
+
+ testEvent(track, "change", afterAddWork)
+ track.addWork(10)
+ }
+ function afterAddWork(er, onChangeName) {
+ t.is(er, null, "addWork: on change event fired")
+ t.is(track.completed(), 0.5, "addWork: 50% completed")
+
+ testEvent(track, "change", afterAllWork)
+ track.write("ABCDEFGHIJKLMNOPQRST")
+ }
+ function afterAllWork(er) {
+ t.is(er, null, "allWork: on change event fired")
+ t.is(track.completed(), 1, "allWork: 100% completed")
+ }
+})
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/.npmignore b/deps/npm/node_modules/npmlog/node_modules/gauge/.npmignore
new file mode 100644
index 0000000000..df22a16c63
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/.npmignore
@@ -0,0 +1,32 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# Commenting this out is preferred by some people, see
+# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
+node_modules
+
+# Users Environment Variables
+.lock-wscript
+
+# Editor cruft
+*~
+.#*
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/LICENSE b/deps/npm/node_modules/npmlog/node_modules/gauge/LICENSE
new file mode 100644
index 0000000000..e756052969
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2014, Rebecca Turner
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/README.md
new file mode 100644
index 0000000000..2486d3ce30
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/README.md
@@ -0,0 +1,161 @@
+gauge
+=====
+
+A nearly stateless terminal based horizontal guage / progress bar.
+
+```javascript
+var Gauge = require("gauge")
+
+var gauge = new Gauge()
+
+gauge.show("test", 0.20)
+
+gauge.pulse("this")
+
+gauge.hide()
+```
+
+![](example.png)
+
+
+### `var gauge = new Gauge([options], [ansiStream])`
+
+* **options** – *(optional)* An option object. (See [below] for details.)
+* **ansiStream** – *(optional)* A stream that's been blessed by the [ansi]
+ module to include various commands for controlling the cursor in a terminal.
+
+[ansi]: https://www.npmjs.com/package/ansi
+[below]: #theme-objects
+
+Constructs a new gauge. Gauges are drawn on a single line, and are not drawn
+if the current terminal isn't a tty.
+
+The **options** object can have the following properties, all of which are
+optional:
+
+* maxUpdateFrequency: defaults to 50 msec, the gauge will not be drawn more
+ than once in this period of time. This applies to `show` and `pulse`
+ calls, but if you `hide` and then `show` the gauge it will draw it
+ regardless of time since last draw.
+* theme: defaults to Gauge.unicode` if the terminal supports
+ unicode according to [has-unicode], otherwise it defaults to `Gauge.ascii`.
+ Details on the [theme object](#theme-objects) are documented elsewhere.
+* template: see [documentation elsewhere](#template-objects) for
+ defaults and details.
+
+[has-unicode]: https://www.npmjs.com/package/has-unicode
+
+If **ansiStream** isn't passed in, then one will be constructed from stderr
+with `ansi(process.stderr)`.
+
+### `gauge.show([name, [completed]])`
+
+* **name** – *(optional)* The name of the current thing contributing to progress. Defaults to the last value used, or "".
+* **completed** – *(optional)* The portion completed as a value between 0 and 1. Defaults to the last value used, or 0.
+
+If `process.stdout.isTTY` is false then this does nothing. If completed is 0
+and `gauge.pulse` has never been called, then similarly nothing will be printed.
+
+If `maxUpdateFrequency` msec haven't passed since the last call to `show` or
+`pulse` then similarly, nothing will be printed. (Actually, the update is
+deferred until `maxUpdateFrequency` msec have passed and if nothing else has
+happened, the gauge update will happen.)
+
+### `gauge.hide()`
+
+Removes the gauge from the terminal.
+
+### `gauge.pulse([name])`
+
+* **name** – *(optional)* The specific thing that triggered this pulse
+
+Spins the spinner in the gauge to show output. If **name** is included then
+it will be combined with the last name passed to `gauge.show` using the
+subsection property of the theme (typically a right facing arrow).
+
+### `gauge.disable()`
+
+Hides the gauge and ignores further calls to `show` or `pulse`.
+
+### `gauge.enable()`
+
+Shows the gauge and resumes updating when `show` or `pulse` is called.
+
+### `gauge.setTheme(theme)`
+
+Change the active theme, will be displayed with the next show or pulse
+
+### `gauge.setTemplate(template)`
+
+Change the active template, will be displayed with the next show or pulse
+
+### Theme Objects
+
+There are two theme objects available as a part of the module, `Gauge.unicode` and `Gauge.ascii`.
+Theme objects have the follow properties:
+
+| Property | Unicode | ASCII |
+| ---------- | ------- | ----- |
+| startgroup | ╢ | \| |
+| endgroup | ╟ | \| |
+| complete | █ | # |
+| incomplete | ░ | - |
+| spinner | ▀▐▄▌ | -\\\|/ |
+| subsection | → | -> |
+
+*startgroup*, *endgroup* and *subsection* can be as many characters as you want.
+
+*complete* and *incomplete* should be a single character width each.
+
+*spinner* is a list of characters to use in turn when displaying an activity
+spinner. The Gauge will spin as many characters as you give here.
+
+### Template Objects
+
+A template is an array of objects and strings that, after being evaluated,
+will be turned into the gauge line. The default template is:
+
+```javascript
+[
+ {type: "name", separated: true, maxLength: 25, minWidth: 25, align: "left"},
+ {type: "spinner", separated: true},
+ {type: "startgroup"},
+ {type: "completionbar"},
+ {type: "endgroup"}
+]
+```
+
+The various template elements can either be **plain strings**, in which case they will
+be be included verbatum in the output.
+
+If the template element is an object, it can have the following keys:
+
+* *type* can be:
+ * `name` – The most recent name passed to `show`; if this is in response to a
+ `pulse` then the name passed to `pulse` will be appended along with the
+ subsection property from the theme.
+ * `spinner` – If you've ever called `pulse` this will be one of the characters
+ from the spinner property of the theme.
+ * `startgroup` – The `startgroup` property from the theme.
+ * `completionbar` – This progress bar itself
+ * `endgroup` – The `endgroup` property from the theme.
+* *separated* – If true, the element will be separated with spaces from things on
+ either side (and margins count as space, so it won't be indented), but only
+ if its included.
+* *maxLength* – The maximum length for this element. If its value is longer it
+ will be truncated.
+* *minLength* – The minimum length for this element. If its value is shorter it
+ will be padded according to the *align* value.
+* *align* – (Default: left) Possible values "left", "right" and "center". Works
+ as you'd expect from word processors.
+* *length* – Provides a single value for both *minLength* and *maxLength*. If both
+ *length* and *minLength or *maxLength* are specifed then the latter take precedence.
+
+### Tracking Completion
+
+If you have more than one thing going on that you want to track completion
+of, you may find the related [are-we-there-yet] helpful. It's `change`
+event can be wired up to the `show` method to get a more traditional
+progress bar interface.
+
+[are-we-there-yet]: https://www.npmjs.com/package/are-we-there-yet
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/README.md~ b/deps/npm/node_modules/npmlog/node_modules/gauge/README.md~
new file mode 100644
index 0000000000..cdab5bc27f
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/README.md~
@@ -0,0 +1,153 @@
+gauge
+=====
+
+A nearly stateless terminal based horizontal guage / progress bar.
+
+```javascript
+var Gauge = require("gauge")
+
+var gauge = new Gauge()
+
+gauge.show("test", 0.20)
+
+gauge.pulse("this")
+
+gauge.hide()
+```
+
+![](example.png)
+
+
+### `var gauge = new Gauge([options], [ansiStream])`
+
+* **options** – *(optional)* An option object. (See [below] for details.)
+* **ansiStream** – *(optional)* A stream that's been blessed by the [ansi]
+ module to include various commands for controlling the cursor in a terminal.
+
+[ansi]: https://www.npmjs.com/package/ansi
+[below]: #theme-objects
+
+Constructs a new gauge. Gauges are drawn on a single line, and are not drawn
+if the current terminal isn't a tty.
+
+The **options** object can have the following properties, all of which are
+optional:
+
+* maxUpdateFrequency: defaults to 50 msec, the gauge will not be drawn more
+ than once in this period of time. This applies to `show` and `pulse`
+ calls, but if you `hide` and then `show` the gauge it will draw it
+ regardless of time since last draw.
+* theme: defaults to Gauge.unicode` if the terminal supports
+ unicode according to [has-unicode], otherwise it defaults to `Gauge.ascii`.
+ Details on the [theme object](#theme-objects) are documented elsewhere.
+* template: see [documentation elsewhere](#template-objects) for
+ defaults and details.
+
+[has-unicode]: https://www.npmjs.com/package/has-unicode
+
+If **ansiStream** isn't passed in, then one will be constructed from stderr
+with `ansi(process.stderr)`.
+
+### `gauge.show([name, [completed]])`
+
+* **name** – *(optional)* The name of the current thing contributing to progress. Defaults to the last value used, or "".
+* **completed** – *(optional)* The portion completed as a value between 0 and 1. Defaults to the last value used, or 0.
+
+If `process.stdout.isTTY` is false then this does nothing. If completed is 0
+and `gauge.pulse` has never been called, then similarly nothing will be printed.
+
+If `maxUpdateFrequency` msec haven't passed since the last call to `show` or
+`pulse` then similarly, nothing will be printed. (Actually, the update is
+deferred until `maxUpdateFrequency` msec have passed and if nothing else has
+happened, the gauge update will happen.)
+
+### `gauge.hide()`
+
+Removes the gauge from the terminal.
+
+### `gauge.pulse([name])`
+
+* **name** – *(optional)* The specific thing that triggered this pulse
+
+Spins the spinner in the gauge to show output. If **name** is included then
+it will be combined with the last name passed to `gauge.show` using the
+subsection property of the theme (typically a right facing arrow).
+
+### `gauge.disable()`
+
+Hides the gauge and ignores further calls to `show` or `pulse`.
+
+### `gauge.enable()`
+
+Shows the gauge and resumes updating when `show` or `pulse` is called.
+
+### Theme Objects
+
+There are two theme objects available as a part of the module, `Gauge.unicode` and `Gauge.ascii`.
+Theme objects have the follow properties:
+
+| Property | Unicode | ASCII |
+| ---------- | ------- | ----- |
+| startgroup | ╢ | \| |
+| endgroup | ╟ | \| |
+| complete | █ | # |
+| incomplete | ░ | - |
+| spinner | ▀▐▄▌ | -\\\|/ |
+| subsection | → | -> |
+
+*startgroup*, *endgroup* and *subsection* can be as many characters as you want.
+
+*complete* and *incomplete* should be a single character width each.
+
+*spinner* is a list of characters to use in turn when displaying an activity
+spinner. The Gauge will spin as many characters as you give here.
+
+### Template Objects
+
+A template is an array of objects and strings that, after being evaluated,
+will be turned into the gauge line. The default template is:
+
+```javascript
+[
+ {type: "name", separated: true, maxLength: 25, minWidth: 25, align: "left"},
+ {type: "spinner", separated: true},
+ {type: "startgroup"},
+ {type: "completionbar"},
+ {type: "endgroup"}
+]
+```
+
+The various template elements can either be **plain strings**, in which case they will
+be be included verbatum in the output.
+
+If the template element is an object, it can have the following keys:
+
+* *type* can be:
+ * `name` – The most recent name passed to `show`; if this is in response to a
+ `pulse` then the name passed to `pulse` will be appended along with the
+ subsection property from the theme.
+ * `spinner` – If you've ever called `pulse` this will be one of the characters
+ from the spinner property of the theme.
+ * `startgroup` – The `startgroup` property from the theme.
+ * `completionbar` – This progress bar itself
+ * `endgroup` – The `endgroup` property from the theme.
+* *separated* – If true, the element will be separated with spaces from things on
+ either side (and margins count as space, so it won't be indented), but only
+ if its included.
+* *maxLength* – The maximum length for this element. If its value is longer it
+ will be truncated.
+* *minLength* – The minimum length for this element. If its value is shorter it
+ will be padded according to the *align* value.
+* *align* – (Default: left) Possible values "left", "right" and "center". Works
+ as you'd expect from word processors.
+* *length* – Provides a single value for both *minLength* and *maxLength*. If both
+ *length* and *minLength or *maxLength* are specifed then the latter take precedence.
+
+### Tracking Completion
+
+If you have more than one thing going on that you want to track completion
+of, you may find the related [are-we-there-yet] helpful. It's `change`
+event can be wired up to the `show` method to get a more traditional
+progress bar interface.
+
+[are-we-there-yet]: https://www.npmjs.com/package/are-we-there-yet
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/example.png b/deps/npm/node_modules/npmlog/node_modules/gauge/example.png
new file mode 100644
index 0000000000000000000000000000000000000000..2667cac459e177fb25252516d08c61f978e7b432
GIT binary patch
literal 19689
zcmeFYRa9I}-!IsN5FiA%V8Mes1ZdoYyL+(U*0=^paCZ-l6WpEPE{#KQZ7jG$I8C1S
zdB3yHnl)=K=3*}9cJEzPyK4Wt>SrCQq#%X*n(#FM06>-gD6RqkyaWLNaP~;>uq(v(
zHeLY08(d2WRcz|X8J}~Wf5fvE{4S1ivb-BWyTPrV-yPdp=PbhoU`}H-^Z`7yjJ;Exv&3R
zkMLUjasEBx%>kfYta%y0sD|us<6F*3KM|Z7lhQ-=h>Rf&I1?sd)wYTK$;Zx)^N`!x
zfl!vC*O1V2XVLORKSW#}f(pPwc6=?>GxqI<7SQ-!muv*Ve**6ERgE(O)&trnb#f{s
zKrCaYC3`7#Cmp*DQ(b82+1Gh=0DEFDRsr01ve5Anlfq7(*DpfKZi(NKZe(J3RZeLW
zhqRDo#bgSge3GE=DWDVTk-l$8p)+CAF0Ex_9G0Lr70UV;)0=khm$d08>zd>adgC)+
zwAb~WR(h<`PCd0ol7bTg-mzx*Sly%8#UV9tg=P~bn>j&^>->?FN;exmE
zU$B)@4`EpJc}5%QCMoTs96=lm>>Ngr6fnoa2t%WH93}oha(Oa|h=Ewn2to|rILU=)
zF9OKFai9vMWxvB_*$l1UI^F0Z*YIx?OCTU&|MWyFw9M^2ElC>{=kOuuM!$rWOvXI0
z*dko=ysLDckq*%%q|Ir{B*3&?>xE_l25=~{`|>>5@h6X-?;(=Kn=$6>BFt4$5sj@7
z0gbWI*Aa0u1bkFO;qNZnl2B+;O3~&w-^^}(B=9?IBjaY5>_hDrp*=zH^+)ch%=gzO
zgFjikKe%5{E~Nof`eWq5F;@~pB0PI!y>3njP|rFIF&w{q9vPQf97ga^dUBCt@X`rT
zv$W5ero`s|%0o2QBjCWzk0aP-RMVU3n5-;RumLR+_XCr%g}fE!B--r!R$60({bI#$
zzugNf3k!%Gjm(X#AJjtj^2*704C~uN)yT$AY|Dh$xv_(WN$zs9saS0D&O5!
zi%{*}X!ETJHu7zuH*LPr!`9lkV#T&!!rs{d)CsZUL|5Gy3}^SppWL(cW3~k}1#}~Y
zC$Rl#H_;H1I(^KMB)&nrUBJ@)Lei;I#W62&_)-HsW!|zB&bnJc=44*Zogx!CH&;Ts
z$*hZ~Rhj63@Idf@<%tbw9rQ)%u0w>`O`+UWXm*!J7Dcb6#zZ%IC!)2bGr`DKc2*`_yCM}9fjBl8TQ5Dd=gkKH
z2K|QXhR7%Es`z;^Vyf7Wgj6VTd~^Xl6x(sHrFEt6r3^?>u{VQoPC^fx>l70RZf))jf|X>3N5g^_-VxaGq83NPW6WW7)qgH;%sBtNyYK$r|X$X8@EC+rs0Gn6f6@HK^lRL`O!G||_%Mn1J
z9l;gR9ibaBzFFJv5xp6u%UkZcROd)K-T%X@*m)*=8ogvy?WweL`ebfkTB}gG;#3KH
zj&m*p%&S|Ycb;MX2q
zG_ihJ8ZnF9F}h4a{pRvuW<|H$-=g)xgpUr
zEE7USPZR#1)@)*|Dk0w&jD9N3v5q*j8%M4SQ1Vh*6C7|C#4a*ncpJ?%k_JyMh{LDJ9v5s~8s8e%%CYJd6Q5PdUh``C
zFY>vgM7qwp^|q-;sC;Sq{>v0CuUh7=@UHako$mS2K*6lR+i0U`h9sH9U!&@xd=$PZ
z3@ZG}u;cpylmb>bwXcafoH}Z6IdyHv|H!p2KQNx_SY}*iU%qM*$TnpU<+B{md*|lk
zmUPd2&5T|kRo$-;&8#S(m}K#F*MtS0C2G!~!eYgIg<$2r&G1(19?2)_*89ZeQh)8&
zR`4yt9qw)2{g0deyW~5e*AwU;QHqe?B7u-H@aJ*FkzOO~;Dh+I_)je!P^*KnP169;agA^MjwpnkNYI;XEh66dZc+ReyeQLrnENeUh9e
z`c>3;{b<{6*sb)Z=7~maMXhd=%XR~W0wn*_!A9H$%a8dV%#T**2T6v(nuXD*st2N{{V#|^{ec;IB52H(cC&M^<_&}#(Wm{bxsv$izJJDVQ$_lgTFj1G}p?TUvGxRE%z*Yv}FGd
z{WW!$er`YG#dVE${HQZnaaa;oVpZ%~Qod4HXD^ScLs`D}OUTx*AFcx)wJxcy1&tjI
zkMu=wPq4v5*28^SH+gV+G!JR9fE5Vzi|wuo49v5$TNd{5^wAXiB({4x*q=_cOc?!W
zd?~e!+=gvNGow(>E5TcLIDNABFcl~tQ1FMt(!w*%;=`&?y2F*^a6;0RGx;ua20D*l
z{Y=Z{1;RB74Rf;rzwh9!%A;BTu!}94ZGSnB9`Ee$c>}kZJu9(bSt*m`^%A?r7b4@Q^(?xm+=`ve4HFvu
z!#}@0?^6A%qUFf(V)I_$Fe_P6T(SLv*-OSt=S=Qe`_lQ>F3sJGJD`D_59D6u#Hpy`
zgk`&O-14;ga=q`Y2@+jNV-7d|@dTMP+NIkGXUDmuXv
zyW!z~&>#Y+Py!6Uc6W>Y3J&i0{l)b7#Y6&S%e8b6()bNu{%!`ttKrV^GZs#6tAl{A
z_vHY9CT!O%;Fdf?m&7RQ3eKT4q;waVR)dQ0X-f8k1iIkh0}W+d3GXNATK_z
z2PIJ1h5?_O_k$1*y)Y0*00@MW2vp!@!V`CYEAGc2E^o+>i!JRzE2&2-@!63VTUnS<
zT%3tlTv1d^L_vf@L6lirnAV*aPeYViTvAOzLY7-zPh8H*Qi|123|~h^7*{j$i#Ud&
zf~35HoSqz)vVs!5rk|Aplc>6pzKXcGO0=wohN}XDx`vp7hJK(ty|KEmhNe2Vz89@=
zw4^>LQU&+3wy1@sfsMMAwU?m>cC=9RH5ZLA0~*@-t2l|Qp3ObfrGTm17s{COQS+ua=x0oL>AWu
z$p=S7dBrA0M1_Y%7G*{F1;!Oxr8G1~XnQ0VRK?iT#Tq6g#h1nfJyyP
z*pz1HR@CWH*q{A9DqNNjO)N?~(#Zc0OLY-g@(V?k(DNmA(#aDS0Y
zcS%rjd1YknV0Wo+Voi5mW!rGsm%$3J?E03L%DjQffU26x(YkM44at>F-92@cd99@=c>aFP;Y^oiFKn5$uhf7)^6BA=K<0Fvn3CPemWODrH#CYE*Kn
z3j)*#FTOFrcSV>D@gI)p#GLrrNn|i_81oVjPw9&T%{e;~oN?nTvoA(&X?LwId_D@9
zvV|>{F~9%#Jbl04Q@xz#m7il#6i{~=TeSoL9B^;>yb%C^kg>XPQ7rEVtGby##M+Ve
z#KIu(Prmb`$=hqHpUJ12*mbg$3=26?#I{2#wafa>c`ZBIhN|asOA6ilQ>qdH=<9{A
z$$*$O{K9Vy|JNDo+_@}th|P5>6dv+4bz;z*AiObZ^P
zegtkWDfkE9yKMc~dC!f>%b&
zwS0k!qGHa(VheOwslzwMOuo&N`LnDfNHZ@Zd_Vt@x9zKb{cN2}P65%0=yqz1Z9&l%
zxo@i8^Kh3|Oo9X`$R6-Q8Zq9nXxU~?$Zi@kr=L}%nCp#~_vXJ*hhIU?6!!yZMgQnD
zQ5xZ9#t+$4=tR#hzPFy5>#L2Q>9~J)-Xmz%=Fr`GNtGZ_l~HIKzv<5mVh+PknnLp}
zZTMbaZaJ>5@mr~+YWG*jLm5QaXomFjFGP%Mrl=PZsI~T_P4S(
ze61CxXJ=o1ETZIn`kDlGMsyw&d*>{WPsFb7HSkutGInBJNBLr=sC>Yixg@!65?3Jo
zqj-O>>|02co)~cj9vD7O8&n%`L@{M`FkF~cBM3%B!SZqMMKrt`qxhzo>avQF6{@jM
zw>;scS5V@?ZR0)38RW^N1AEinjeI=?IG0l?Dj>5#*PDuI>yX`2+%G3}EU^M;!>R5CRh&p%n8FX%R8ztBJ2Z5+n^xXzhGV1S#t)F#
z$C`{w_PTedfmh%9&}=$0A*g#Nx$QrO=@>${GGV=rzWtrj21Sl%zM9Q^o_$KASlhQ7
zJzMB-e**7ELC9W>*hs3MQ?$t-n#-2`_^|Y*(}%(zr@SdA;M_Lp0XQ+xwC4r-1HyY_
z)k{GtytkG|Nuuprqh47-f2bBQQk){l{bkjz
z#2ncBG41X5fy0mSo2X$5pNYg%F-V*R7ExJTaEC2=sLpOb@RPv=LC(vBnccSccE}9C
z68y#Gj^-~?us3#LTUh#zFTe0A2W%kbU7plgFH+kXjZ2jSeJQj@Qa~HcD(;&2$48Lw
zpasF=V<4E4+dIl&Omm^+QtOEic=P3`%gQP0UB-Pzdu3GA@V>=z+I^{Qo3U65tk#?!
z=W5$lj_Ud9%FS-Qd&dz6Acl9|CS9JfcMq|uzhI?zY*n?64J$nNY$U^4HI)a`xw+nKST5LD(z|uBP>~iLw5HX
z?Z~yV_FWZzmb#lkifPkxY2Z!{0Km@FCl}MfCN&i{V!V!8D+f*{R|6H~VL$Sf@!5f}
z+XyKlS0g0amDwTr!kRJ6ns$mJTXPOG<#>RQD55)X$6CB*V-5o?FxIeJy+sE=2DIa^
zk5+^dANu4I4P69Fdl{BlH(F_;0K{qDG(-;_q(WCeZ_UNL(L@mr2uA||z%c0=g9IQv
z6r%7$8vEFh-$DO(URNk~u=Igs!zbn2mjGdq4({n=jO!@Dx=DoPcP%wRI9Q9aUL1=r
zP;p!fQv(CPHZ4xz#tt?B0CB_(Vay)q7ndQ*aw8Q-1YjUS9FdJ*-Fh#75(vh7YXBFM
z2Hqq{9Ph?f6!f}`NSp6Cr}|)J)f2tKlh&U7Kq){!XcioHKkWHcLeS9I*Oy$8YBh7b
zQSnZ#E#+Xr`vpKn7IYDks~&4l+(5ONY5;njS}M1QWXZ~8xqhA+ZMl{c8+jc!g_*ZBkXGP09N
zu}FHub)H)TAhCDs5j0^meu_QsO>XqmPctdhjI*s63soQB5jF8xtORCgV5`^dl7~$S
zQij~55(6V4)Z!`27u?)UAyNCiYKoW00Dq{QHC3sx&f-ftdhKTD&1)K!uspjUY?AJO
zhhbw>C*#MCn69!H76Y5OD<6n}03Tf-kOs=e5QT;qVb%kYM@KgjN_>*KtbN$50>G3A
z;KW=g&eH@VP-cVhyqR!pAyN5%8-;U-bP3!kBL<$yy%$QbF2@t^LUz}?g4-cs#c#t~B`nX#ilMT~we
zU_qnbK~km^zBDFVsKW5!;o%a+>doxJ0tu7Bv}cJTta?JxP{bo_k#lOR-AVFnT%ep1
z4ToTku9Td#rGX8JvckKUfV>PS5-#mKEz>B_#l;y}yRy|9PE{+5ZLLyx*B{T(jr0+P
zi$@KOe^!=kTRa#&lCTL!{vdJrM`|%GS53OaD)^r-YxSR^1;7dnR`D*UTgIJz_LX^YsL8sdl
zEK`aEa&dcSap9gSTmOMG5dlyc
z0z+WKFa-8{*f4$#VDeC_fz)46r^gNwgPskvs8xkq#r6W)aG@l&T0
zf0N!CXgxX`ku!h^lfwN4FIVD+zC+o^ob!7x--IK<0U&HHbufsPSM@K%y2xoT-xIK@
zS(#xG5L>;t&&}UQ3DP@c2E*$L)N%Zv4u17fz?o-uTwK98O4`{5d-71Oeqzpv`9)YV
zy@1xH$vc-@IrGdr>BC*^P70A4aZwPA5|GHOaurH6a?GnRKcd8@7qK&mLTb|^e}6P^
zy)a~^%zK@G9O`Lhp&`4E=f&|Wj%rbd;M2i@E5taC41a*u;IsRAT$0E86HFpG?dld@
zQI5s396_O$Bd4*NjJi)r975uV{;XgzIwNG``_@y@cR)~4yx+uq8LzUgE)iMI@6VA^
zZ^}Fe_=i~MRDm`5RJaXmf6*0fdGKBHgkGy%wR;Y*Hnf+nFinNLQv9O|$XzldTXJL<
z83IQJgG{frL`{>$>;-2sE^9}fmdGJ6p(_p8RLJ)A?bJtz@;+UrHq*jQo+Z+y4hZZ_
zwxxPGxkW5cn-p_bu9{d{W$B)%eT}+ahhlp9@qiMGD+%7e9m=J`V^l#e7RYx-gqr%ROoM@E
z4ZGVt4!p%3*=_B@gcu}A8*4u0as~RMm!DI9p0lW4CX^Oak>s~-I1Q;%;*o?WR|OHj
z_q(OR;%EA1WWGXm#=#6scFcldE8!k+H)V(bOEcc~kF_4MJiUv&_x(gTB#XA=4eOl&
z(8?XpS`Nc~`g$F^nxq6gB6$I`OOJ|B-L9~x{d@rz`9ITJ8QqJdCeK(bGi7|rm`I%H
zVFciSnYl*O){V1``E3Ays^iSU!lz;FjinMu3tx!unzt!Ip{(EY6w--qgP)`m7wPs7
zobqWi)>4BgwyJw$Sp`xLnx7VNOqVNLv!r7o%Wq_)%a%PM
z$fDm;M&ijNBQc`2cuNr$}
zXMqad=>uIAcBbz9ydKy>6B@j?{T93^+QFXzG~aw+Zp
zLL|*E1827*VtKXe9@nr_9pH#Tl8j*-_o4Ixe7?4w$8U%g=whRiimx6#B@g
z_$jwQ@&Ou|yLUe*G?^Qx=UUX*QL3r6b&k8Ui+?75wtO3LpQktz-jp>;10bstmx|`m
z!M*Kslx5G_lPHWC9LkG~c{LS>CzySkVm?Nv+e&-M2zwVg8X)@yM#Y6;2@bqAqbQ=n
zJHqcctLeH_2mzM;-EH%1gun8(cTfuvzoCy4jZvnI-Fn=TLzG*K{{7UavvfaCJRqbeLI@;~lN@<7=BJ509vCUu)*bAs(V#m}>%1*(wg@P;XzqK|@e^CELGNK~Iu8QGBQ(
z#<@Euc@Y2Yo(3pq+vm2Wi`~alwn(s0dj8TeBHtwJzQJz60~Cvc84s-;85GV)?dks*dMCL06LAgjZL;w
zk!rUppF=@o8}20*T?rWpEzTR2eLKpl@UnuJH=)#(URo^kj{Ig6E<`~z4DD!zv}vF>
z;v*Q>dXQGUFd*hm`>8QAM)sO7VDy=#=AQ9ZBWn(ngqd0IsYZC44n*MIR^;oU?FG}+T0l<{0@0NJT$;q58J(;4OSK>>6xA6=Q2
z{UN#k1(k67LtVjgUETWxAxPX;zC%Rr~u^shAo%+;tXo1Wiz-
ze4s?Sfiww;1NOkzpzT6pnR59?I&MJucW7l$PclpMWp0kIfPPi7>q^CFQ#juX3WSVJ
znid#rvQOl!pBLcfrHQu1+aO;TsC^``^yztclBi(+@DtH^O8PV7tVEuFv~$yEVj!F7
zA5-h)rL6qC4QfWSARDmg0DB+)uf_!J!C{^Ry|<3-$o^^}pqr6!*~Y09*Zw=VRgE+}U`^50b4VFsyd)jMYSW-_||7;vUnjinhkX&!jxBN6CJt!_sJs8SeeA
z@SRv7)`GPrVP^6xfy-;_mB*k~(X!seAJ7(oAM^}De$%tflUX_{msn9w8dUmnvQ2XS
zg;VB+E{wc^;_;0y$QGQRHMAR2-$I97guA)smXJ?c6&}_}fAD>3)Irm6V(@uckZ0YfRcv@vzDs`FFh-`I`K^(!xdOssHa2;>
zsx*xEpsDU4FqT!zJ~B?*=Rr%~P#c$ZGt`-G#!EKOu5=z_HEpi>S%fSij-19J$+R-c
ze1-`%V0N`tml90Lw%JOkmagVv%Nxi7;rHYtmr&5W_bp_HnVPNj#ZTBVdShj&1xX!a
z7dmF9_X*bJ{SEFe2oz+-WhAh%Zd*k&X&(Z9#I|;8<8&b0D5k)F$}0Qqb1Ppg!O%VO
zf`HyT2L}#VH5?5+I!>^SG&N25^l=dFjzl1d1Ak2#=e2
z5hiIw-AjF3MM@bNnF4|Wi;E2o1!tqXn@|a4bmhq6C&j0QCu-diQy@^Uhn12O-pqb^
zI!lH9_0T*wr|#DG#rg6OdA-x=1XXDmF#H~(kWKPw>>=JO+P^m?3yLpOAZ#aTDF;a
zYo+xfdUa2K4z7{%psQdj>*$A`1%YvQ`5E~4=eSi1_2Jhoi9H*_0Gn|5!7TjD;Wn~Y
zsGLP?W_oGFa}v8MnvnH+ZP|7VLK{;7Tter8vNRp$4sHY@h6QnpW<90r_s5k-2lH5h
z?e)jGN?Y5m$w&gcc?&w4i>k7VMyg6t@|B~g6=BBH_w@|)G^-g$`#N#3Yi0T_Qv
zGB~~yb;{F}3Ecs?hJ}s){(Nj0Ia+=GHD3upJ?BfTWp^PeA#rSEd+K?Mwyx$cRau~P
z^6()}I(+(N^nutf9(m2$IBzjD4fc9wXWCHIYyj;u1l8-Tg7YE#T!;iu^=pf#t1=-@
zCmXozgpoPXhd3G+H9IF&V-S_j0vQPgMNM`l89-%c+m@vIq
zhEH;wG7lQ8{!u87fBA4*o6%)Q--Twtr`jI&J|tx&YiRDZiU4p%ElVM_`;%Cx1@Es}
zIxNV}?95duH4`J}*i=|6*PLu$DwH}h@#ThBRRS@g1L+uycvd-kT`~1Bo(ILChCJ%``|yfh=4x6B;P>_^6uZZd~LDijI3$#dahl!GJiFqN;`sN*1o
zGAVA36-1S{TM7qQ4TC}(o=^n|I$+mK9#@G6evZTY+be_K{pv4_N4tvpo`;dCd3y9B
z#wzca=0|!4ayt$>%t8>PudtxnZtWlZ;&;|xS%wUVS({ktIN)3NdP;0$Yq_Rccp!o8
zA}~~hdhPoxqx^*sJ+n3h(ywlO!{vllD-B+u;4$Jee1L@R@vi*_t7hSVb5|u2eWJH3
zjXIsGK4E93WWi@$fV*8wRxsD*TF~$qwU{+*z}QpHKjZa4JxqxehUd2xd&ADULSGP2
zl5%m=p*ED5C;Ts>9jo59!!a&DMmBT9r$sv=THsyZ$t7&C6eONNICr_|j62*bT$uI{)8uwe{9lMUfsDi0q{{DdH!T9rmk+R4dN
zp^v<4((i$n!&-T}KGwLp6esf~LS3+SkmkdMAM>#8qUfBpDpkCO9=21&Y3g_V@e`7g
z{z&ONg^pjuq!mFjy{Mk-20gS!r{Bv&5#+f~I%;UDMn&_qa&*zt54@IjI
zQmZkBgr4%Q;SSOO@ex0}2{{%f-8)F$6&ZR99Tz@Np_csiU&i0i1O5c^I
zKU=UB>+i>ja6^mehb`NgFOYY`tJEL%Rl;$Tel)0FT~o}b+v^nxLn+|P6)>W8rDt@jSO%Hm1uJxnF^
z=Lw0DMdBFPJ-|EQt^IlO+J72{WW31xU6%XV!Vin-o|8IzrFi>CJXm_^~PapcZ?1=SBkhS%zLwunqd3_tU6$7HYxcr
z&{7&Dd)!-&V>f}xAi)za8{nUSO+w%pqIt)n9`=P1F9)6m9aSmpc$6vbMQ82iy20Vw
zNZU!L^KVn|-NC!4yO?sj53LU|P+AySfVGCrWIEZHUzz{bi{b-8_ijnpF;33wdo>f@
z%neeW#%h>m{7h^xNXjWQZ@!0z^^I>$SVl0DcO4dVG!06C)L06hHClkUg$|`L>eS@>
zkII9S68)Myu_{z9lo`;s{~gA-_{DmvQC^e}JR#PzLX8fF7cL2pYA5NG05yMo8K8~6
z!m#(Y30m~b=lpSSNa!%ih$RYdg3TeylYPn|QN@4NW>2t~y8o_W5K>VflYj~T$ML;4
zAtE5gzm3#zNbo}RxVuC^cX!^K#j%1PUS%=>03@EzS%6SdllWzVR)yhrQDCvad`C2J
z?q6yNBS0yO5yt}!?;{*_>Nu*kcab;V%J$=2+b>t2Ln-Je-a{-?Gcz-Fw}@7Od@Z>!
z4gXnu|Hun5{t{BfM4q65R}q*{hL%|XP0|NRzU5GhC(?$o&gWUcK26SxUik2l*r+Un
zcRk!Ps2LPV*ZGlnR?72+724kM3!&|+L;L@guupQ7DU-pLZPi{}9Ju-Bt~F3ywSDbp
zV?rKA@&8W-_CF;}g@+=2a>}sV_Q+dJ*nta((*+g8FD@<$=jpeJk?<}iv{|;a?0j?^
zt!XdVA!q>+m(<*PLSiK0G=wZK1=;59$e>NiUt^D2I^Db
zW?nqzB!tT|7hs)LZ;Vd?DdUouz*Fr}869v!_<#+1;8Y+HVi4WJE(ZD5Gn?vAhz#Jm
zZ_n9DR;;0%J1)PCX{%q>ubI|RnZnB`Fn35@rex}{xkdIobfIA>fx5$}Rjc>=-%_7X
zQ}<{P*@?Hh&PC+8nA}U7o72pK_Nriv%lTgIO)uWW_>Tr=m(QKdz{N!dpuj6(nJ_fj
zW#3z{?pxMrMJg{##77-&jdUzZ7;$}8wl$&FspEVSJuY
z_3PMK9@n=DXV8SWd1L)FO+!N@C66yL;mZ;@-FGXxH5V)G3-tI_gE??2<0^F~k6WLJ5FrZ`tr=E?1|a&awE`BR
zhk0*}6bdW`D}~?&O*^FTu|G6)9E^Z4Nu@Cy?ZC-eA>6^DGN1UU=y>>#?YLd
zX`1QEyj~ylnZHx&LnryVMB!3~a@B2K1xu6ucc54A)8u|cH)`4jj4!9Ch3`Ww?`ui3un~ZPS#4XHdMXX5-im8dRIaQkK$uXGx
zgt5V5S#MZ?ZlS~uCmnk~$A5Dyoyg#3!sB)H={lpp%tePwaVb(mCR7ICl=jZu^gA3z;=1g?=r*EdjY(~^)nXrSagHob0Q9~p`3-Vm08ur;i0Ai_4hR*Awy
z>-VWl9UP%!I!%HN@W(Z&E)-H-Qe;-r!1&`tYq0Ty6#?wM0ND!Nrr<;lDGtwxx7-Fzk=>ol~arlONjS_ryiw;kJ>
zQsPv~*~s;bHEEV*&l|+usELye7%j9U3W`+P7*GbWi*+VU29VUFf>C{$0X^EFfb0ub
zhJL)mtbZ6qZpy!mg66-Bg5kf6;uIA-6XhE;#*AS6{D<`Uye~#
zbIWOaQw#YLwko+ga=UB;j^94V6(S{*@*B*uDy=s{Boc%R>39wSXgb&kXR|I^uKfJj
za;(;?B4g#V4;t16@$iQzwVl9a)1JIaCP>|xA@)wQvt8$8j#DTt-goIEp8vX&gjZVG
z;=VqM_dEqcfBQuKGX;Nip?4-CXvI&Dylg;^cwIjpO7mP8Eor#~bC6>H;;@XNn(8k-
zC*4Xt$ZfE6Wzo~WSx@F1&sH2pwq--AzTsT%85Uug&r)fR34SH8p{;q=ZNwdye~uMMo4(tF8jhH`nVU1H-rp^6E2WLvFL_g_cq1^ft>?y-p^mxqT!VWJrf54Dx19&
zndVt%j7-LvyXp@jl+f
zh&QqVS4f1u-4%*o9T>l7Yue9{`kGj=%!mgYbSbdmm^Ju*Ltt=(v5>;kxjytK#Zp(8
z+*YX+w0x)K*PK;nny0l-(7=E@?u2oTo~Zc1)sXB2qa+c0h8R!9l}6MNxJM^ej@u=V
zL5JGv+PAm4gnoo53#`%0Z!ahXxg`ULcFX4b)kjs>KTUh;aYv2(Di^Zef8O?Uh^QEj
z@>8IB_W0Lt?rqnee8HBm{-Rtwcr%}O`91}c-l<~xt+Ly@sBp%@O}dr~rEXr5>aU6|
zU$eFyYW5a3th|aTpUKYBU$Ud~57|j1n>8CZNDL2FIpwYqi*62czbX+Uaa1F5x!V8a
zMsDwAi>bf_^`FKmSu*%Aq8yEV
z1~V21jqXG`NOn@+YeKXwh-f(*c_wZbHj=I=urk9;F*3v9Yg@7#Rfm0eD1D|`+Ow}!
zwJNcChG2HnR$ti#%SRv0;Q>pSj&vs%Uz{f+M5lJ1JO!2|3D&F-rvm=%W$gAAUC4o%
zV0P~iYc)|15$?I{V3Xlt6?($Q95*QY0Dgt2UOWk(Sd7ZQ)N<-5HOe+;{SlOKrDEf_
z_ThGwC&&;3R{Edz9*-jjum?TUzE)gfM!%h_EiHr!HEk>;Gq_-~CW7!XAEVMt%6G|t
zslGmJ-|N~EurezWakKxHO?QGvFi`Zvo%z^tA4B||b^|Q;Nh#cKzVfe11LasKh#Pay
zc1o9-JJ1%V8Qx{^6%>y8Gr3D-V$YKJ9|o9w_RIkFNf@<4O`Zv0-A3?uK(3%mfp;Z0
zXR6Cj19tidPu>z}X-xzx<5B)t8PlIW=HhPNGpy(fqfQwdhWg$wX)tBPoQ}U%mj&2a
zWp;5cl%1qHFHa&P8K@lnO2FGkp}<|=64at9e{_^T{|IvGdD2Dr`^%>V(ra_b$`tHH
zj}9||B~_0~Fx%Ux@L+uMsju$uEb$>t-=sf5ZWHKie=R?hlcS(@2PD$siPL5k0O4SFl*?PX51W
z?DeTq{*!UyaL-Hl7<|Kywg9@PG@&0{YQW+qeuyCzBY2OtH9^1qh3
zU@}_PB^THD{OdX)HS5dk=kPkol6ISW$;T7&2OYpiD@dx?+g}un`jP`Sf8O_xZ*_Xb
z#mx1@x-zW%X<`(QKB}E|z8QcFKRb7ZC;(|DppWcs2YwZl^EnB%d)%zl^!8H{3cZ2-
zfXYS6%qj_-6r{={Cr9BC<3SJb(fm2K9IXZ_s`lQZz~>M>&UlWlZ*#0olp-@Q944fA5b;r`{@?Jr0U+cDR1V#a7^C2GwpdV1V26(CBarL$
z?BV^lG(*ABD7}uB9kHuLSGQ3WU1@n;hqSa#GuP#S!yGB
zPOn8lHt~Q%49YVws9k$D;gT>5`acMCjUB17;phqrRjf2m=ODB|KU+(mI6nLxymI;o
zX25-g6MGb|PIjHBa51T)V~hLW+&BK+px1U)Udj@MgS^^KH9Kq0&9M)A6e>UaoAfx*
zGT)Q?ZS+%#f@i-fOfCj&NK{S?puzz*aQ0qmWjiCg5l*3LJ^l9bWy=+p*!>%pQa+Ft
zBkuX3qhfMbX}sczHPlQS_?8eevC^bMt4&M1Fd}ol756@fS=*OFq`ZlMsNt)u=7%v
zP43wxla>;N!4NR?hbyG%r)snH0!7Lz3KIIDj`;DGs@n)X*n2VN*kF_7Bfy}rrZTAZ
zMbgE5zVD8}SOBINNaGt;?d*D@PW7oYWui6F3&c~~JPH8u5=sK6f_QiH@Q`Y?R7#GFw{iE(JJ#Z7DcvPC1U={GibTmz6C6VDeq
zXTSzC(8o1|_gwL}Bdr$my
z>Jft|xjrQ6Gwj`B6fKHV8^T1Yk&h^-p;3?k_~(QZY+lC)E9YQm5qg&0Unk!skx-7m
z$VVN3or@V(ap($1P6;}
zsH2D_XgF}>=$Ph>e~~S&UB3{{kofCL1=w`{UT7L0r1s+s#?TCo4KwRNZ>G6Ss_hEA!yo3r>)r)>B?;b(0~kmmF7I|OROc82^LSNWBq{dnrjCL08&EhF+Qtb7ll^9rze9`}GXW99>B^=+*
z77jLrLbw}^LCWKoHz%8Hcv~@dtJ&DO@!U<9!5p7H$j}wn!7$P}Ta`fkD`|G05#WGNk3Y635iEL?F)zLoeQ;D~M;#pCltw}3^MrpaP9>~A8rom~_D
zHE-bn7;`-v3{6Ng};xYWaU~$##TA(vmtm=9_0B)3F809+z^0dYT~grsh4LZHWcm)y6{-$+>_~(GL{^xa#6h#c2R9yi
zn$=n0iRM*tVS!Ru4_zW_N4^p$`wvUCc!jJ9tdA?dB>v~jDP{(4(DBSw+&;`*Y&Vr<
z{|rbZgY{(MiDVBiZZKJwg+T&4c^DD~=oP0SiT{u2q@AaThnpabPNI4L51m|M@J;Si
z>=j`BD@g8#nyPxiVmTLBu3c`gJ%h~`%)k58Tvv%x*(!D0)~yd+o;RfK?fZD`R-DU;=g%>Fl5(xU#WuKm
zl7S^_-nLe3zINu}|MY8HsnDNvT2t!L@S^10`T8G?#V0rTrBDB{?uiu#s84#y_4(n(
zpFj6^RD8?YDrjo4!fUGBiWy#3>rYy~TVeUE3Ro;(it8w9zdP~dc8h}9fAVDxfyOmh
zHh%f{-R((ditX7$*MCj;ocm)pq+i*%o9upNy8&vyQtx%@Jd!$=`ZEm^4+hS+3chzl
zde#}M1bsq4_vV$aTDf=c6+zi~(&q*L=Zk{7jf-Eb
zNI9#cIdhr)YUAx4QodVPw|Q5e)VF%>`@c6k@t~K4w%(#*-AR8Iebx-VwQcv$SZ6UA
z;4lvG3?)CN`;dvsr8eM+%GeH2FPD4K;$f%US6-b>?>r-QWNN=j#hQxoXEh^(D}ZVgtbj9w$ug$tE&Ybe8lgLCwulAKVO=B~I%i^K<=?MK
z7hiPD2F=hN4^`MyWA|A=Gq>ViEofJcjLUJ=7Re`{OS`|SL?r-MWM_5trH9z@``i3{
zbJaL2>HoROH&(0^w6A)c@vH7r|Cbdi(`B{Z>Aw~g`&rZa^JlBg#F}!u$9BN2uSx6D
zKLe-4bT3|1?hA9>S9oVqPkPlw&6G_>naWEJZduZLKHYBF%;HmG`d+r(;2j-(Jr+l_
z|4!FB>LAvAp>c9Mo5s=a&%`_%6K;Jh&@bybW|q0L^6<;XhlfA6edbtJTo+g8Q6d7|
zy#dq>TwwL;w81=$d4FsLXZJiT4n11l70_C{YU3Q>T1}JP+R!c)!^MYImpb`(t;qP}
z!#DTX3n8U5dB0}Qj&X7SnzRbEWyGOmnW@k<1Kr#vk*PYdB{i+Wnyx|ShdTQnx~@(C
z2wILSF-=Qg9;e%@8|DiX!7E9D5ds`Wd~sVa#$|c5hr*1n5B5_L~%m_MOoXB+X
zRA5P0eTJBQmjMbwvbb1>PIV&o3AcpcIDl4
zO>Z%DHr+W9F_$T*6=1XBgv`qqFP}QrEWUC;GpREER>nfH*1un89W|dh_r>qEYv9XE
z`Q)Wci!^6n)7~9!92}UHX5PKebLqUJz{RmwkvGj8Ir5)k*4>9=gRfU}njp00i_
I>zopr0Q(ie!T
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md
new file mode 100644
index 0000000000..4393106fda
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md
@@ -0,0 +1,39 @@
+has-unicode
+===========
+
+Try to guess if your terminal supports unicode
+
+```javascript
+var hasUnicode = require("has-unicode")
+
+if (hasUnicode()) {
+ // the terminal probably has unicode support
+}
+```
+```javascript
+var hasUnicode = require("has-unicode").tryHarder
+hasUnicode(function(unicodeSupported) {
+ if (unicodeSupported) {
+ // the terminal probably has unicode support
+ }
+})
+```
+
+## Detecting Unicode
+
+What we actually detect is UTF-8 support, as that's what Node itself supports.
+If you have a UTF-16 locale then you won't be detected as unicode capable.
+
+### Windows
+
+Since at least Windows 7, `cmd` and `powershell` have been unicode capable.
+As such, we report any Windows installation as unicode capable.
+
+
+### Unix Like Operating Systems
+
+We look at the environment variables `LC_ALL`, `LC_CTYPE`, and `LANG` in
+that order. For `LC_ALL` and `LANG`, it looks for `.UTF-8` in the value.
+For `LC_CTYPE` it looks to see if the value is `UTF-8`. This is sufficient
+for most POSIX systems. While locale data can be put in `/etc/locale.conf`
+as well, AFAIK it's always copied into the environment.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md~ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md~
new file mode 100644
index 0000000000..e712b7000c
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md~
@@ -0,0 +1,4 @@
+has-unicode
+===========
+
+Try to guess if your terminal supports unicode
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/index.js
new file mode 100644
index 0000000000..edceb70309
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/index.js
@@ -0,0 +1,18 @@
+"use strict"
+var os = require("os")
+var child_process = require("child_process")
+
+var hasUnicode = module.exports = function () {
+ // Supported Win32 platforms (>XP) support unicode in the console, though
+ // font support isn't fantastic.
+ if (os.type() == "Windows_NT") { return true }
+
+ var isUTF8 = /[.]UTF-8/
+ if (isUTF8.test(process.env.LC_ALL)
+ || process.env.LC_CTYPE == 'UTF-8'
+ || isUTF8.test(process.env.LANG)) {
+ return true
+ }
+
+ return false
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/package.json
new file mode 100644
index 0000000000..b2b2d2b9d7
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "has-unicode",
+ "version": "1.0.0",
+ "description": "Try to guess if your terminal supports unicode",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/iarna/has-unicode"
+ },
+ "keywords": [
+ "unicode",
+ "terminal"
+ ],
+ "author": {
+ "name": "Rebecca Turner",
+ "email": "me@re-becca.org"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/iarna/has-unicode/issues"
+ },
+ "homepage": "https://github.com/iarna/has-unicode",
+ "devDependencies": {
+ "require-inject": "^1.1.1",
+ "tap": "^0.4.13"
+ },
+ "gitHead": "a8c3dcf3be5f0c8f8e26a3e7ffea7da24344a006",
+ "_id": "has-unicode@1.0.0",
+ "_shasum": "bac5c44e064c2ffc3b8fcbd8c71afe08f9afc8cc",
+ "_from": "has-unicode@>=1.0.0 <2.0.0",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.33",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "bac5c44e064c2ffc3b8fcbd8c71afe08f9afc8cc",
+ "tarball": "http://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/test/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/test/index.js
new file mode 100644
index 0000000000..2394c14ef7
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/test/index.js
@@ -0,0 +1,26 @@
+"use strict"
+var test = require("tap").test
+var requireInject = require("require-inject")
+
+test("Windows", function (t) {
+ t.plan(1)
+ var hasUnicode = requireInject("../index.js", {
+ os: { type: function () { return "Windows_NT" } }
+ })
+ t.is(hasUnicode(), true, "Windows is assumed to be unicode aware")
+})
+test("Unix Env", function (t) {
+ t.plan(3)
+ var hasUnicode = requireInject("../index.js", {
+ os: { type: function () { return "Linux" } },
+ child_process: { exec: function (cmd,cb) { cb(new Error("not available")) } }
+ })
+ process.env.LANG = "en_US.UTF-8"
+ process.env.LC_ALL = null
+ t.is(hasUnicode(), true, "Linux with a UTF8 language")
+ process.env.LANG = null
+ process.env.LC_ALL = "en_US.UTF-8"
+ t.is(hasUnicode(), true, "Linux with UTF8 locale")
+ process.env.LC_ALL = null
+ t.is(hasUnicode(), false, "Linux without UTF8 language or locale")
+})
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/LICENSE.txt b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/LICENSE.txt
new file mode 100644
index 0000000000..17764328c8
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/README.md
new file mode 100644
index 0000000000..ad04ea956e
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/README.md
@@ -0,0 +1,20 @@
+# lodash._basetostring v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseToString` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._basetostring
+```
+
+In Node.js/io.js:
+
+```js
+var baseToString = require('lodash._basetostring');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._basetostring) for more details.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/index.js
new file mode 100644
index 0000000000..71ac885889
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/index.js
@@ -0,0 +1,25 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * Converts `value` to a string if it is not one. An empty string is returned
+ * for `null` or `undefined` values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ if (typeof value == 'string') {
+ return value;
+ }
+ return value == null ? '' : (value + '');
+}
+
+module.exports = baseToString;
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/package.json
new file mode 100644
index 0000000000..e46c18bd5a
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "lodash._basetostring",
+ "version": "3.0.0",
+ "description": "The modern build of lodash’s internal `baseToString` as a module.",
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/lodash/lodash"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "_id": "lodash._basetostring@3.0.0",
+ "_shasum": "75a9a4aaaa2b2a8761111ff5431e7d83c1daf0e2",
+ "_from": "lodash._basetostring@3.0.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "75a9a4aaaa2b2a8761111ff5431e7d83c1daf0e2",
+ "tarball": "http://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/LICENSE.txt b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/LICENSE.txt
new file mode 100644
index 0000000000..17764328c8
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/README.md
new file mode 100644
index 0000000000..7825373fdc
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/README.md
@@ -0,0 +1,20 @@
+# lodash._createpad v3.0.1
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `createPad` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._createpad
+```
+
+In Node.js/io.js:
+
+```js
+var createPad = require('lodash._createpad');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._createpad) for more details.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/index.js
new file mode 100644
index 0000000000..d932de7c6e
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/index.js
@@ -0,0 +1,40 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var repeat = require('lodash.repeat');
+
+/** Native method references. */
+var ceil = Math.ceil;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsFinite = global.isFinite;
+
+/**
+ * Creates the pad required for `string` based on the given padding length.
+ * The `chars` string may be truncated if the number of padding characters
+ * exceeds the padding length.
+ *
+ * @private
+ * @param {string} string The string to create padding for.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the pad for `string`.
+ */
+function createPad(string, length, chars) {
+ var strLength = string.length;
+ length = +length;
+
+ if (strLength >= length || !nativeIsFinite(length)) {
+ return '';
+ }
+ var padLength = length - strLength;
+ chars = chars == null ? ' ' : (chars + '');
+ return repeat(chars, ceil(padLength / chars.length)).slice(0, padLength);
+}
+
+module.exports = createPad;
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/LICENSE.txt b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/LICENSE.txt
new file mode 100644
index 0000000000..17764328c8
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/README.md
new file mode 100644
index 0000000000..d2796e3f73
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/README.md
@@ -0,0 +1,20 @@
+# lodash.repeat v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.repeat` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.repeat
+```
+
+In Node.js/io.js:
+
+```js
+var repeat = require('lodash.repeat');
+```
+
+See the [documentation](https://lodash.com/docs#repeat) or [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash.repeat) for more details.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/index.js
new file mode 100644
index 0000000000..68e1008134
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/index.js
@@ -0,0 +1,57 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var baseToString = require('lodash._basetostring');
+
+/** Native method references. */
+var floor = Math.floor;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsFinite = global.isFinite;
+
+/**
+ * Repeats the given string `n` times.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to repeat.
+ * @param {number} [n=0] The number of times to repeat the string.
+ * @returns {string} Returns the repeated string.
+ * @example
+ *
+ * _.repeat('*', 3);
+ * // => '***'
+ *
+ * _.repeat('abc', 2);
+ * // => 'abcabc'
+ *
+ * _.repeat('abc', 0);
+ * // => ''
+ */
+function repeat(string, n) {
+ var result = '';
+ string = baseToString(string);
+ n = +n;
+ if (n < 1 || !string || !nativeIsFinite(n)) {
+ return result;
+ }
+ // Leverage the exponentiation by squaring algorithm for a faster repeat.
+ // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
+ do {
+ if (n % 2) {
+ result += string;
+ }
+ n = floor(n / 2);
+ string += string;
+ } while (n);
+
+ return result;
+}
+
+module.exports = repeat;
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/package.json
new file mode 100644
index 0000000000..1b1019b81d
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/package.json
@@ -0,0 +1,81 @@
+{
+ "name": "lodash.repeat",
+ "version": "3.0.0",
+ "description": "The modern build of lodash’s `_.repeat` as a module.",
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/lodash/lodash"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "dependencies": {
+ "lodash._basetostring": "^3.0.0"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "_id": "lodash.repeat@3.0.0",
+ "_shasum": "c340f4136c99dc5b2e397b3fd50cffbd172a94b0",
+ "_from": "lodash.repeat@>=3.0.0 <4.0.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "c340f4136c99dc5b2e397b3fd50cffbd172a94b0",
+ "tarball": "http://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/package.json
new file mode 100644
index 0000000000..979ee46b7f
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/package.json
@@ -0,0 +1,91 @@
+{
+ "name": "lodash._createpad",
+ "version": "3.0.1",
+ "description": "The modern build of lodash’s internal `createPad` as a module.",
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/lodash/lodash"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "dependencies": {
+ "lodash.repeat": "^3.0.0"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "_id": "lodash._createpad@3.0.1",
+ "_shasum": "90c6bdbc84c48edfa026896e31856b1a0ec50842",
+ "_from": "lodash._createpad@3.0.1",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "dist": {
+ "shasum": "90c6bdbc84c48edfa026896e31856b1a0ec50842",
+ "tarball": "http://registry.npmjs.org/lodash._createpad/-/lodash._createpad-3.0.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/lodash._createpad/-/lodash._createpad-3.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/LICENSE.txt b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/LICENSE.txt
new file mode 100644
index 0000000000..17764328c8
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/README.md
new file mode 100644
index 0000000000..57c0bff72e
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/README.md
@@ -0,0 +1,20 @@
+# lodash.pad v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.pad` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.pad
+```
+
+In Node.js/io.js:
+
+```js
+var pad = require('lodash.pad');
+```
+
+See the [documentation](https://lodash.com/docs#pad) or [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash.pad) for more details.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/index.js
new file mode 100644
index 0000000000..f08b0fa639
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/index.js
@@ -0,0 +1,58 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var baseToString = require('lodash._basetostring'),
+ createPad = require('lodash._createpad');
+
+/** Native method references. */
+var ceil = Math.ceil,
+ floor = Math.floor;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsFinite = global.isFinite;
+
+/**
+ * Pads `string` on the left and right sides if it is shorter then the given
+ * padding length. The `chars` string may be truncated if the number of padding
+ * characters can't be evenly divided by the padding length.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.pad('abc', 8);
+ * // => ' abc '
+ *
+ * _.pad('abc', 8, '_-');
+ * // => '_-abc_-_'
+ *
+ * _.pad('abc', 3);
+ * // => 'abc'
+ */
+function pad(string, length, chars) {
+ string = baseToString(string);
+ length = +length;
+
+ var strLength = string.length;
+ if (strLength >= length || !nativeIsFinite(length)) {
+ return string;
+ }
+ var mid = (length - strLength) / 2,
+ leftLength = floor(mid),
+ rightLength = ceil(mid);
+
+ chars = createPad('', rightLength, chars);
+ return chars.slice(0, leftLength) + string + chars;
+}
+
+module.exports = pad;
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/package.json
new file mode 100644
index 0000000000..82085426ad
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "lodash.pad",
+ "version": "3.0.0",
+ "description": "The modern build of lodash’s `_.pad` as a module.",
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/lodash/lodash"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "dependencies": {
+ "lodash._basetostring": "^3.0.0",
+ "lodash._createpad": "^3.0.0"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "_id": "lodash.pad@3.0.0",
+ "_shasum": "1824e4756a3504b3af7b7a5b9d1f7501b43b2c25",
+ "_from": "lodash.pad@>=3.0.0 <4.0.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "1824e4756a3504b3af7b7a5b9d1f7501b43b2c25",
+ "tarball": "http://registry.npmjs.org/lodash.pad/-/lodash.pad-3.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/LICENSE.txt b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/LICENSE.txt
new file mode 100644
index 0000000000..17764328c8
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/README.md
new file mode 100644
index 0000000000..cd29e458b3
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/README.md
@@ -0,0 +1,20 @@
+# lodash.padleft v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.padLeft` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.padleft
+```
+
+In Node.js/io.js:
+
+```js
+var padLeft = require('lodash.padleft');
+```
+
+See the [documentation](https://lodash.com/docs#padLeft) or [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash.padleft) for more details.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/index.js
new file mode 100644
index 0000000000..975619611c
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/index.js
@@ -0,0 +1,40 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var baseToString = require('lodash._basetostring'),
+ createPad = require('lodash._createpad');
+
+/**
+ * Pads `string` on the left side if it is shorter then the given padding
+ * length. The `chars` string may be truncated if the number of padding
+ * characters exceeds the padding length.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padLeft('abc', 6);
+ * // => ' abc'
+ *
+ * _.padLeft('abc', 6, '_-');
+ * // => '_-_abc'
+ *
+ * _.padLeft('abc', 3);
+ * // => 'abc'
+ */
+function padLeft(string, length, chars) {
+ string = baseToString(string);
+ return string && (createPad(string, length, chars) + string);
+}
+
+module.exports = padLeft;
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/package.json
new file mode 100644
index 0000000000..11d7a975ab
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "lodash.padleft",
+ "version": "3.0.0",
+ "description": "The modern build of lodash’s `_.padLeft` as a module.",
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/lodash/lodash"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "dependencies": {
+ "lodash._basetostring": "^3.0.0",
+ "lodash._createpad": "^3.0.0"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "_id": "lodash.padleft@3.0.0",
+ "_shasum": "448ac9e28ceb15d0ce9ae8e59dc9311ad17b4390",
+ "_from": "lodash.padleft@>=3.0.0 <4.0.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "448ac9e28ceb15d0ce9ae8e59dc9311ad17b4390",
+ "tarball": "http://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/LICENSE.txt b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/LICENSE.txt
new file mode 100644
index 0000000000..17764328c8
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/README.md b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/README.md
new file mode 100644
index 0000000000..b22b12d3e7
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/README.md
@@ -0,0 +1,20 @@
+# lodash.padright v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.padRight` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.padright
+```
+
+In Node.js/io.js:
+
+```js
+var padRight = require('lodash.padright');
+```
+
+See the [documentation](https://lodash.com/docs#padRight) or [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash.padright) for more details.
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/index.js b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/index.js
new file mode 100644
index 0000000000..dea148f530
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/index.js
@@ -0,0 +1,40 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var baseToString = require('lodash._basetostring'),
+ createPad = require('lodash._createpad');
+
+/**
+ * Pads `string` on the right side if it is shorter then the given padding
+ * length. The `chars` string may be truncated if the number of padding
+ * characters exceeds the padding length.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padRight('abc', 6);
+ * // => 'abc '
+ *
+ * _.padRight('abc', 6, '_-');
+ * // => 'abc_-_'
+ *
+ * _.padRight('abc', 3);
+ * // => 'abc'
+ */
+function padRight(string, length, chars) {
+ string = baseToString(string);
+ return string && (string + createPad(string, length, chars));
+}
+
+module.exports = padRight;
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/package.json
new file mode 100644
index 0000000000..1afbbe96c1
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "lodash.padright",
+ "version": "3.0.0",
+ "description": "The modern build of lodash’s `_.padRight` as a module.",
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/lodash/lodash"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "dependencies": {
+ "lodash._basetostring": "^3.0.0",
+ "lodash._createpad": "^3.0.0"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "_id": "lodash.padright@3.0.0",
+ "_shasum": "caf2c8222c36d448fe0407b028630e6c5d1b06c6",
+ "_from": "lodash.padright@>=3.0.0 <4.0.0",
+ "_npmVersion": "2.3.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "caf2c8222c36d448fe0407b028630e6c5d1b06c6",
+ "tarball": "http://registry.npmjs.org/lodash.padright/-/lodash.padright-3.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/package.json b/deps/npm/node_modules/npmlog/node_modules/gauge/package.json
new file mode 100644
index 0000000000..7014a31d6b
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "gauge",
+ "version": "1.2.0",
+ "description": "A terminal based horizontal guage",
+ "main": "progress-bar.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/iarna/gauge"
+ },
+ "keywords": [
+ "progressbar",
+ "progress",
+ "gauge"
+ ],
+ "author": {
+ "name": "Rebecca Turner",
+ "email": "me@re-becca.org"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/iarna/gauge/issues"
+ },
+ "homepage": "https://github.com/iarna/gauge",
+ "dependencies": {
+ "ansi": "^0.3.0",
+ "has-unicode": "^1.0.0",
+ "lodash.pad": "^3.0.0",
+ "lodash.padleft": "^3.0.0",
+ "lodash.padright": "^3.0.0"
+ },
+ "devDependencies": {
+ "tap": "^0.4.13"
+ },
+ "gitHead": "db15c35374816b3fc3b9e1e54866f31ed7f4a733",
+ "_id": "gauge@1.2.0",
+ "_shasum": "3094ab1285633f799814388fc8f2de67b4c012c5",
+ "_from": "gauge@>=1.2.0 <1.3.0",
+ "_npmVersion": "2.6.0",
+ "_nodeVersion": "1.1.0",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "3094ab1285633f799814388fc8f2de67b4c012c5",
+ "tarball": "http://registry.npmjs.org/gauge/-/gauge-1.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js b/deps/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js
new file mode 100644
index 0000000000..39dbf2ac43
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js
@@ -0,0 +1,209 @@
+"use strict"
+var hasUnicode = require("has-unicode")
+var ansi = require("ansi")
+var align = {
+ center: require("lodash.pad"),
+ left: require("lodash.padright"),
+ right: require("lodash.padleft")
+}
+var defaultStream = process.stderr
+function isTTY() {
+ return process.stderr.isTTY
+}
+function getWritableTTYColumns() {
+ // One less than the actual as writing to the final column wraps the line
+ return process.stderr.columns - 1
+}
+
+var ProgressBar = module.exports = function (options, cursor) {
+ if (! options) options = {}
+ if (! cursor && options.write) {
+ cursor = options
+ options = {}
+ }
+ if (! cursor) {
+ cursor = ansi(defaultStream)
+ }
+ this.cursor = cursor
+ this.showing = false
+ this.theme = options.theme || (hasUnicode() ? ProgressBar.unicode : ProgressBar.ascii)
+ this.template = options.template || [
+ {type: "name", separated: true, length: 25},
+ {type: "spinner", separated: true},
+ {type: "startgroup"},
+ {type: "completionbar"},
+ {type: "endgroup"}
+ ]
+ this.updatefreq = options.maxUpdateFrequency || 50
+ this.lastName = ""
+ this.lastCompleted = 0
+ this.spun = 0
+ this.last = new Date(0)
+}
+ProgressBar.prototype = {}
+
+ProgressBar.unicode = {
+ startgroup: "╢",
+ endgroup: "╟",
+ complete: "█",
+ incomplete: "░",
+ spinner: "▀▐▄▌",
+ subsection: "→"
+}
+
+ProgressBar.ascii = {
+ startgroup: "|",
+ endgroup: "|",
+ complete: "#",
+ incomplete: "-",
+ spinner: "-\\|/",
+ subsection: "->"
+}
+
+ProgressBar.prototype.setTheme = function(theme) {
+ this.theme = theme
+}
+
+ProgressBar.prototype.setTemplate = function(template) {
+ this.template = template
+}
+
+ProgressBar.prototype.disable = function() {
+ this.hide()
+ this.disabled = true
+}
+
+ProgressBar.prototype.enable = function() {
+ this.disabled = false
+ this.show()
+}
+
+ProgressBar.prototype.hide = function() {
+ if (!isTTY()) return
+ if (this.disabled) return
+ this.cursor.show()
+ if (this.showing) this.cursor.up(1)
+ this.cursor.horizontalAbsolute(0).eraseLine()
+ this.showing = false
+}
+
+var repeat = function (str, count) {
+ var out = ""
+ for (var ii=0; ii P | |----|\n' ],
+ [ 'show' ] ])
+})
diff --git a/deps/npm/node_modules/npmlog/package.json b/deps/npm/node_modules/npmlog/package.json
index 3d36b8a15a..260ce66e71 100644
--- a/deps/npm/node_modules/npmlog/package.json
+++ b/deps/npm/node_modules/npmlog/package.json
@@ -6,7 +6,7 @@
},
"name": "npmlog",
"description": "logger for npm",
- "version": "0.1.1",
+ "version": "1.2.0",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/npmlog.git"
@@ -16,20 +16,43 @@
"test": "tap test/*.js"
},
"dependencies": {
- "ansi": "~0.3.0"
+ "ansi": "~0.3.0",
+ "are-we-there-yet": "~1.0.0",
+ "gauge": "~1.2.0"
},
"devDependencies": {
"tap": ""
},
"license": "BSD",
- "readme": "# npmlog\n\nThe logger util that npm uses.\n\nThis logger is very basic. It does the logging for npm. It supports\ncustom levels and colored output.\n\nBy default, logs are written to stderr. If you want to send log messages\nto outputs other than streams, then you can change the `log.stream`\nmember, or you can just listen to the events that it emits, and do\nwhatever you want with them.\n\n# Basic Usage\n\n```\nvar log = require('npmlog')\n\n// additional stuff ---------------------------+\n// message ----------+ |\n// prefix ----+ | |\n// level -+ | | |\n// v v v v\n log.info('fyi', 'I have a kitty cat: %j', myKittyCat)\n```\n\n## log.level\n\n* {String}\n\nThe level to display logs at. Any logs at or above this level will be\ndisplayed. The special level `silent` will prevent anything from being\ndisplayed ever.\n\n## log.record\n\n* {Array}\n\nAn array of all the log messages that have been entered.\n\n## log.maxRecordSize\n\n* {Number}\n\nThe maximum number of records to keep. If log.record gets bigger than\n10% over this value, then it is sliced down to 90% of this value.\n\nThe reason for the 10% window is so that it doesn't have to resize a\nlarge array on every log entry.\n\n## log.prefixStyle\n\n* {Object}\n\nA style object that specifies how prefixes are styled. (See below)\n\n## log.headingStyle\n\n* {Object}\n\nA style object that specifies how the heading is styled. (See below)\n\n## log.heading\n\n* {String} Default: \"\"\n\nIf set, a heading that is printed at the start of every line.\n\n## log.stream\n\n* {Stream} Default: `process.stderr`\n\nThe stream where output is written.\n\n## log.enableColor()\n\nForce colors to be used on all messages, regardless of the output\nstream.\n\n## log.disableColor()\n\nDisable colors on all messages.\n\n## log.pause()\n\nStop emitting messages to the stream, but do not drop them.\n\n## log.resume()\n\nEmit all buffered messages that were written while paused.\n\n## log.log(level, prefix, message, ...)\n\n* `level` {String} The level to emit the message at\n* `prefix` {String} A string prefix. Set to \"\" to skip.\n* `message...` Arguments to `util.format`\n\nEmit a log message at the specified level.\n\n## log\\[level](prefix, message, ...)\n\nFor example,\n\n* log.silly(prefix, message, ...)\n* log.verbose(prefix, message, ...)\n* log.info(prefix, message, ...)\n* log.http(prefix, message, ...)\n* log.warn(prefix, message, ...)\n* log.error(prefix, message, ...)\n\nLike `log.log(level, prefix, message, ...)`. In this way, each level is\ngiven a shorthand, so you can do `log.info(prefix, message)`.\n\n## log.addLevel(level, n, style, disp)\n\n* `level` {String} Level indicator\n* `n` {Number} The numeric level\n* `style` {Object} Object with fg, bg, inverse, etc.\n* `disp` {String} Optional replacement for `level` in the output.\n\nSets up a new level with a shorthand function and so forth.\n\nNote that if the number is `Infinity`, then setting the level to that\nwill cause all log messages to be suppressed. If the number is\n`-Infinity`, then the only way to show it is to enable all log messages.\n\n# Events\n\nEvents are all emitted with the message object.\n\n* `log` Emitted for all messages\n* `log.` Emitted for all messages with the `` level.\n* `` Messages with prefixes also emit their prefix as an event.\n\n# Style Objects\n\nStyle objects can have the following fields:\n\n* `fg` {String} Color for the foreground text\n* `bg` {String} Color for the background\n* `bold`, `inverse`, `underline` {Boolean} Set the associated property\n* `bell` {Boolean} Make a noise (This is pretty annoying, probably.)\n\n# Message Objects\n\nEvery log event is emitted with a message object, and the `log.record`\nlist contains all of them that have been created. They have the\nfollowing fields:\n\n* `id` {Number}\n* `level` {String}\n* `prefix` {String}\n* `message` {String} Result of `util.format()`\n* `messageRaw` {Array} Arguments to `util.format()`\n",
- "readmeFilename": "README.md",
- "gitHead": "b58e360cd99db707d1191ce6125ae53d79f075a1",
+ "gitHead": "1fe2892a8b9dacb775d4fb365315865f421f4ca9",
"bugs": {
"url": "https://github.com/isaacs/npmlog/issues"
},
"homepage": "https://github.com/isaacs/npmlog",
- "_id": "npmlog@0.1.1",
- "_shasum": "8b9b9e4405d7ec48c31c2346965aadc7abaecaa5",
- "_from": "npmlog@latest"
+ "_id": "npmlog@1.2.0",
+ "_shasum": "b512f18ae8696a0192ada78ba00c06dbbd91bafb",
+ "_from": "npmlog@>=1.2.0 <1.3.0",
+ "_npmVersion": "2.6.0",
+ "_nodeVersion": "1.1.0",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "b512f18ae8696a0192ada78ba00c06dbbd91bafb",
+ "tarball": "http://registry.npmjs.org/npmlog/-/npmlog-1.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/npmlog/test/progress.js b/deps/npm/node_modules/npmlog/test/progress.js
new file mode 100644
index 0000000000..14dfb32740
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/test/progress.js
@@ -0,0 +1,114 @@
+'use strict'
+
+var test = require('tap').test
+var log = require('../log.js')
+
+var actions = []
+log.gauge = {
+ enable: function () {
+ actions.push(['enable'])
+ },
+ disable: function () {
+ actions.push(['disable'])
+ },
+ hide: function () {
+ actions.push(['hide'])
+ },
+ show: function (name, completed) {
+ actions.push(['show', name, completed])
+ },
+ pulse: function (name) {
+ actions.push(['pulse', name])
+ }
+}
+
+function didActions(t, msg, output) {
+ var tests = []
+ for (var ii = 0; ii < output.length; ++ ii) {
+ for (var jj = 0; jj < output[ii].length; ++ jj) {
+ tests.push({cmd: ii, arg: jj})
+ }
+ }
+ t.is(actions.length, output.length, msg)
+ tests.forEach(function (test) {
+ t.is(actions[test.cmd] ? actions[test.cmd][test.arg] : null,
+ output[test.cmd][test.arg],
+ msg + ': ' + output[test.cmd] + (test.arg ? ' arg #'+test.arg : ''))
+ })
+ actions = []
+}
+
+
+test('enableProgress', function (t) {
+ t.plan(6)
+ log.enableProgress()
+ didActions(t, 'enableProgress', [ [ 'enable' ], [ 'show', undefined, 0 ] ])
+ log.enableProgress()
+ didActions(t, 'enableProgress again', [])
+})
+
+test('disableProgress', function (t) {
+ t.plan(4)
+ log.disableProgress()
+ didActions(t, 'disableProgress', [ [ 'hide' ], [ 'disable' ] ])
+ log.disableProgress()
+ didActions(t, 'disableProgress again', [])
+})
+
+test('showProgress', function (t) {
+ t.plan(5)
+ log.showProgress('foo')
+ didActions(t, 'showProgress disabled', [])
+ log.enableProgress()
+ actions = []
+ log.showProgress('foo')
+ didActions(t, 'showProgress', [ [ 'show', 'foo', 0 ] ])
+})
+
+test('clearProgress', function (t) {
+ t.plan(3)
+ log.clearProgress()
+ didActions(t, 'clearProgress', [ [ 'hide' ] ])
+ log.disableProgress()
+ actions = []
+ log.clearProgress()
+ didActions(t, 'clearProgress disabled', [ ])
+})
+
+test("newItem", function (t) {
+ t.plan(12)
+ log.enableProgress()
+ actions = []
+ var a = log.newItem("test", 10)
+ didActions(t, "newItem", [ [ 'show', undefined, 0 ] ])
+ a.completeWork(5)
+ didActions(t, "newItem:completeWork", [ [ 'show', 'test', 0.5 ] ])
+ a.finish()
+ didActions(t, "newItem:finish", [ [ 'show', 'test', 1 ] ])
+})
+
+// test that log objects proxy through. And test that completion status filters up
+test("newGroup", function (t) {
+ t.plan(23)
+ var a = log.newGroup("newGroup")
+ didActions(t, "newGroup", [ [ 'show', undefined, 0.5 ] ])
+ a.warn("test", "this is a test")
+ didActions(t, "newGroup:warn", [ [ 'pulse', 'test' ], [ 'hide' ], [ 'show', undefined, 0.5 ] ])
+ var b = a.newItem("newGroup2", 10)
+ didActions(t, "newGroup:newItem", [ [ 'show', 'newGroup', 0.5 ] ])
+ b.completeWork(5)
+ didActions(t, "newGroup:completeWork", [ [ 'show', 'newGroup2', 0.75 ] ])
+ a.finish()
+ didActions(t, "newGroup:finish", [ [ 'show', 'newGroup', 1 ] ])
+})
+
+test("newStream", function (t) {
+ t.plan(13)
+ var a = log.newStream("newStream", 10)
+ didActions(t, "newStream", [ [ 'show', undefined, 0.6666666666666666 ] ])
+ a.write("abcde")
+ didActions(t, "newStream", [ [ 'show', 'newStream', 0.8333333333333333 ] ])
+ a.write("fghij")
+ didActions(t, "newStream", [ [ 'show', 'newStream', 1 ] ])
+ t.is(log.tracker.completed(), 1, "Overall completion")
+})
diff --git a/deps/npm/node_modules/read-package-json/node_modules/glob/LICENSE b/deps/npm/node_modules/read-package-json/node_modules/glob/LICENSE
new file mode 100644
index 0000000000..19129e315f
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/glob/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/read-package-json/node_modules/glob/README.md b/deps/npm/node_modules/read-package-json/node_modules/glob/README.md
new file mode 100644
index 0000000000..258257ecb1
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/glob/README.md
@@ -0,0 +1,369 @@
+[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
+
+# Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
+
+This is a glob implementation in JavaScript. It uses the `minimatch`
+library to do its matching.
+
+![](oh-my-glob.gif)
+
+## Usage
+
+```javascript
+var glob = require("glob")
+
+// options is optional
+glob("**/*.js", options, function (er, files) {
+ // files is an array of filenames.
+ // If the `nonull` option is set, and nothing
+ // was found, then files is ["**/*.js"]
+ // er is an error object or null.
+})
+```
+
+## Glob Primer
+
+"Globs" are the patterns you type when you do stuff like `ls *.js` on
+the command line, or put `build/*` in a `.gitignore` file.
+
+Before parsing the path part patterns, braced sections are expanded
+into a set. Braced sections start with `{` and end with `}`, with any
+number of comma-delimited sections within. Braced sections may contain
+slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in a
+path portion:
+
+* `*` Matches 0 or more characters in a single path portion
+* `?` Matches 1 character
+* `[...]` Matches a range of characters, similar to a RegExp range.
+ If the first character of the range is `!` or `^` then it matches
+ any character not in the range.
+* `!(pattern|pattern|pattern)` Matches anything that does not match
+ any of the patterns provided.
+* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
+ patterns provided.
+* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
+ patterns provided.
+* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
+* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided
+* `**` If a "globstar" is alone in a path portion, then it matches
+ zero or more directories and subdirectories searching for matches.
+ It does not crawl symlinked directories.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first character,
+then it will not match any glob pattern unless that pattern's
+corresponding path part also has a `.` as its first character.
+
+For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
+However the pattern `a/*/c` would not, because `*` does not start with
+a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has no
+slashes in it, then it will seek for any file anywhere in the tree
+with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Negation
+
+The intent for negation would be for a pattern starting with `!` to
+match everything that *doesn't* match the supplied pattern. However,
+the implementation is weird, and for the time being, this should be
+avoided. The behavior will change or be deprecated in version 5.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned. This
+differs from the shell, where the pattern itself is returned. For
+example:
+
+ $ echo a*s*d*f
+ a*s*d*f
+
+To get the bash-style behavior, set the `nonull:true` in the options.
+
+### See Also:
+
+* `man sh`
+* `man bash` (Search for "Pattern Matching")
+* `man 3 fnmatch`
+* `man 5 gitignore`
+* [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## glob.hasMagic(pattern, [options])
+
+Returns `true` if there are any special characters in the pattern, and
+`false` otherwise.
+
+Note that the options affect the results. If `noext:true` is set in
+the options object, then `+(a|b)` will not be considered a magic
+pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
+then that is considered magical, unless `nobrace:true` is set in the
+options.
+
+## glob(pattern, [options], cb)
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* `cb` {Function}
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array} filenames found matching the pattern
+
+Perform a synchronous glob search.
+
+## Class: glob.Glob
+
+Create a Glob object by instantiating the `glob.Glob` class.
+
+```javascript
+var Glob = require("glob").Glob
+var mg = new Glob(pattern, options, cb)
+```
+
+It's an EventEmitter, and starts walking the filesystem to find matches
+immediately.
+
+### new glob.Glob(pattern, [options], [cb])
+
+* `pattern` {String} pattern to search for
+* `options` {Object}
+* `cb` {Function} Called when an error occurs, or matches are found
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Note that if the `sync` flag is set in the options, then matches will
+be immediately available on the `g.found` member.
+
+### Properties
+
+* `minimatch` The minimatch object that the glob uses.
+* `options` The options object passed in.
+* `aborted` Boolean which is set to true when calling `abort()`. There
+ is no way at this time to continue a glob search after aborting, but
+ you can re-use the statCache to avoid having to duplicate syscalls.
+* `statCache` Collection of all the stat results the glob search
+ performed.
+* `cache` Convenience object. Each field has the following possible
+ values:
+ * `false` - Path does not exist
+ * `true` - Path exists
+ * `'DIR'` - Path exists, and is not a directory
+ * `'FILE'` - Path exists, and is a directory
+ * `[file, entries, ...]` - Path exists, is a directory, and the
+ array value is the results of `fs.readdir`
+* `statCache` Cache of `fs.stat` results, to prevent statting the same
+ path multiple times.
+* `symlinks` A record of which paths are symbolic links, which is
+ relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
+
+### Events
+
+* `end` When the matching is finished, this is emitted with all the
+ matches found. If the `nonull` option is set, and no match was found,
+ then the `matches` list contains the original pattern. The matches
+ are sorted, unless the `nosort` flag is set.
+* `match` Every time a match is found, this is emitted with the matched.
+* `error` Emitted when an unexpected error is encountered, or whenever
+ any fs error occurs if `options.strict` is set.
+* `abort` When `abort()` is called, this event is raised.
+
+### Methods
+
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
+
+### Options
+
+All the options that can be passed to Minimatch can also be passed to
+Glob to change pattern matching behavior. Also, some have been added,
+or have glob-specific ramifications.
+
+All options are false by default, unless otherwise noted.
+
+All options are added to the Glob object, as well.
+
+If you are running many `glob` operations, you can pass a Glob object
+as the `options` argument to a subsequent operation to shortcut some
+`stat` and `readdir` calls. At the very least, you may pass in shared
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
+
+* `cwd` The current working directory in which to search. Defaults
+ to `process.cwd()`.
+* `root` The place where patterns starting with `/` will be mounted
+ onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
+ systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+ Note that an explicit dot in a portion of the pattern will always
+ match dot files.
+* `nomount` By default, a pattern starting with a forward-slash will be
+ "mounted" onto the root setting, so that a valid filesystem path is
+ returned. Set this flag to disable that behavior.
+* `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+* `nosort` Don't sort the results.
+* `stat` Set to true to stat *all* results. This reduces performance
+ somewhat, and is completely unnecessary, unless `readdir` is presumed
+ to be an untrustworthy indicator of file existence.
+* `silent` When an unusual error is encountered when attempting to
+ read a directory, a warning will be printed to stderr. Set the
+ `silent` option to true to suppress these warnings.
+* `strict` When an unusual error is encountered when attempting to
+ read a directory, the process will just continue on in search of
+ other matches. Set the `strict` option to raise an error in these
+ cases.
+* `cache` See `cache` property above. Pass in a previously generated
+ cache object to save some fs calls.
+* `statCache` A cache of results of filesystem information, to prevent
+ unnecessary stat calls. While it should not normally be necessary
+ to set this, you may pass the statCache from one glob() call to the
+ options object of another, if you know that the filesystem will not
+ change between calls. (See "Race Conditions" below.)
+* `symlinks` A cache of known symbolic links. You may pass in a
+ previously generated `symlinks` object to save `lstat` calls when
+ resolving `**` matches.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
+* `nounique` In some cases, brace-expanded patterns can result in the
+ same file showing up multiple times in the result set. By default,
+ this implementation prevents duplicates in the result set. Set this
+ flag to disable that behavior.
+* `nonull` Set to never return an empty set, instead returning a set
+ containing the pattern itself. This is the default in glob(3).
+* `debug` Set to enable debug logging in minimatch and glob.
+* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+* `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+* `noext` Do not match `+(a|b)` "extglob" patterns.
+* `nocase` Perform a case-insensitive match. Note: on
+ case-insensitive filesystems, non-magic patterns will match by
+ default, since `stat` and `readdir` will not raise errors.
+* `matchBase` Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, `*.js` would be treated as
+ equivalent to `**/*.js`, matching all js files in all directories.
+* `nonegate` Suppress `negate` behavior. (See below.)
+* `nocomment` Suppress `comment` behavior. (See below.)
+* `nonull` Return the pattern when no matches are found.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
+* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between node-glob and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.3, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+Note that symlinked directories are not crawled as part of a `**`,
+though their contents may match against subsequent portions of the
+pattern. This prevents infinite loops and duplicates and the like.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then glob returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only `/`
+characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will always
+be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto the
+root setting using `path.join`. On windows, this will by default result
+in `/foo/*` matching `C:\foo\bar.txt`.
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race conditions,
+since it relies on directory walking and such.
+
+As a result, it is possible that a file that exists when glob looks for
+it may have been deleted or modified by the time it returns the result.
+
+As part of its internal implementation, this program caches all stat
+and readdir calls that it makes, in order to cut down on system
+overhead. However, this also makes it even more susceptible to races,
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast majority
+of operations, this is never a problem.
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# to benchmark against bash/zsh
+npm run bench
+
+# to profile javascript
+npm run prof
+```
diff --git a/deps/npm/node_modules/read-package-json/node_modules/glob/common.js b/deps/npm/node_modules/read-package-json/node_modules/glob/common.js
new file mode 100644
index 0000000000..cd7c824481
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/glob/common.js
@@ -0,0 +1,237 @@
+exports.alphasort = alphasort
+exports.alphasorti = alphasorti
+exports.isAbsolute = process.platform === "win32" ? absWin : absUnix
+exports.setopts = setopts
+exports.ownProp = ownProp
+exports.makeAbs = makeAbs
+exports.finish = finish
+exports.mark = mark
+exports.isIgnored = isIgnored
+exports.childrenIgnored = childrenIgnored
+
+function ownProp (obj, field) {
+ return Object.prototype.hasOwnProperty.call(obj, field)
+}
+
+var path = require("path")
+var minimatch = require("minimatch")
+var Minimatch = minimatch.Minimatch
+
+function absWin (p) {
+ if (absUnix(p)) return true
+ // pull off the device/UNC bit from a windows path.
+ // from node's lib/path.js
+ var splitDeviceRe =
+ /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
+ var result = splitDeviceRe.exec(p)
+ var device = result[1] || ''
+ var isUnc = device && device.charAt(1) !== ':'
+ var isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+
+ return isAbsolute
+}
+
+function absUnix (p) {
+ return p.charAt(0) === "/" || p === ""
+}
+
+function alphasorti (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase())
+}
+
+function alphasort (a, b) {
+ return a.localeCompare(b)
+}
+
+function setupIgnores (self, options) {
+ self.ignore = options.ignore || []
+
+ if (!Array.isArray(self.ignore))
+ self.ignore = [self.ignore]
+
+ if (self.ignore.length) {
+ self.ignore = self.ignore.map(ignoreMap)
+ }
+}
+
+function ignoreMap (pattern) {
+ var gmatcher = null
+ if (pattern.slice(-3) === '/**') {
+ var gpattern = pattern.replace(/(\/\*\*)+$/, '')
+ gmatcher = new Minimatch(gpattern, { nonegate: true })
+ }
+
+ return {
+ matcher: new Minimatch(pattern, { nonegate: true }),
+ gmatcher: gmatcher
+ }
+}
+
+function setopts (self, pattern, options) {
+ if (!options)
+ options = {}
+
+ // base-matching: just use globstar for that.
+ if (options.matchBase && -1 === pattern.indexOf("/")) {
+ if (options.noglobstar) {
+ throw new Error("base matching requires globstar")
+ }
+ pattern = "**/" + pattern
+ }
+
+ self.pattern = pattern
+ self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
+ self.dot = !!options.dot
+ self.mark = !!options.mark
+ self.nodir = !!options.nodir
+ if (self.nodir)
+ self.mark = true
+ self.sync = !!options.sync
+ self.nounique = !!options.nounique
+ self.nonull = !!options.nonull
+ self.nosort = !!options.nosort
+ self.nocase = !!options.nocase
+ self.stat = !!options.stat
+ self.noprocess = !!options.noprocess
+
+ self.maxLength = options.maxLength || Infinity
+ self.cache = options.cache || Object.create(null)
+ self.statCache = options.statCache || Object.create(null)
+ self.symlinks = options.symlinks || Object.create(null)
+
+ setupIgnores(self, options)
+
+ self.changedCwd = false
+ var cwd = process.cwd()
+ if (!ownProp(options, "cwd"))
+ self.cwd = cwd
+ else {
+ self.cwd = options.cwd
+ self.changedCwd = path.resolve(options.cwd) !== cwd
+ }
+
+ self.root = options.root || path.resolve(self.cwd, "/")
+ self.root = path.resolve(self.root)
+ if (process.platform === "win32")
+ self.root = self.root.replace(/\\/g, "/")
+
+ self.nomount = !!options.nomount
+
+ self.minimatch = new Minimatch(pattern, options)
+ self.options = self.minimatch.options
+}
+
+function finish (self) {
+ var nou = self.nounique
+ var all = nou ? [] : Object.create(null)
+
+ for (var i = 0, l = self.matches.length; i < l; i ++) {
+ var matches = self.matches[i]
+ if (!matches || Object.keys(matches).length === 0) {
+ if (self.nonull) {
+ // do like the shell, and spit out the literal glob
+ var literal = self.minimatch.globSet[i]
+ if (nou)
+ all.push(literal)
+ else
+ all[literal] = true
+ }
+ } else {
+ // had matches
+ var m = Object.keys(matches)
+ if (nou)
+ all.push.apply(all, m)
+ else
+ m.forEach(function (m) {
+ all[m] = true
+ })
+ }
+ }
+
+ if (!nou)
+ all = Object.keys(all)
+
+ if (!self.nosort)
+ all = all.sort(self.nocase ? alphasorti : alphasort)
+
+ // at *some* point we statted all of these
+ if (self.mark) {
+ for (var i = 0; i < all.length; i++) {
+ all[i] = self._mark(all[i])
+ }
+ if (self.nodir) {
+ all = all.filter(function (e) {
+ return !(/\/$/.test(e))
+ })
+ }
+ }
+
+ if (self.ignore.length)
+ all = all.filter(function(m) {
+ return !isIgnored(self, m)
+ })
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
+ var m = p
+ if (c) {
+ var isDir = c === 'DIR' || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
+ }
+ }
+
+ return m
+}
+
+// lotta situps...
+function makeAbs (self, f) {
+ var abs = f
+ if (f.charAt(0) === '/') {
+ abs = path.join(self.root, f)
+ } else if (exports.isAbsolute(f)) {
+ abs = f
+ } else if (self.changedCwd) {
+ abs = path.resolve(self.cwd, f)
+ } else if (self.realpath) {
+ abs = path.resolve(f)
+ }
+ return abs
+}
+
+
+// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
+// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
+function isIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
+
+function childrenIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/glob/glob.js b/deps/npm/node_modules/read-package-json/node_modules/glob/glob.js
new file mode 100644
index 0000000000..eac0693cc6
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/glob/glob.js
@@ -0,0 +1,740 @@
+// Approach:
+//
+// 1. Get the minimatch set
+// 2. For each pattern in the set, PROCESS(pattern, false)
+// 3. Store matches per-set, then uniq them
+//
+// PROCESS(pattern, inGlobStar)
+// Get the first [n] items from pattern that are all strings
+// Join these together. This is PREFIX.
+// If there is no more remaining, then stat(PREFIX) and
+// add to matches if it succeeds. END.
+//
+// If inGlobStar and PREFIX is symlink and points to dir
+// set ENTRIES = []
+// else readdir(PREFIX) as ENTRIES
+// If fail, END
+//
+// with ENTRIES
+// If pattern[n] is GLOBSTAR
+// // handle the case where the globstar match is empty
+// // by pruning it out, and testing the resulting pattern
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
+// // handle other cases.
+// for ENTRY in ENTRIES (not dotfiles)
+// // attach globstar + tail onto the entry
+// // Mark that this entry is a globstar match
+// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
+//
+// else // not globstar
+// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
+// Test ENTRY against pattern[n]
+// If fails, continue
+// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
+//
+// Caveat:
+// Cache all stats and readdirs results to minimize syscall. Since all
+// we ever care about is existence and directory-ness, we can just keep
+// `true` for files, and [children,...] for directories, or `false` for
+// things that don't exist.
+
+module.exports = glob
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var inherits = require('inherits')
+var EE = require('events').EventEmitter
+var path = require('path')
+var assert = require('assert')
+var globSync = require('./sync.js')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var inflight = require('inflight')
+var util = require('util')
+var childrenIgnored = common.childrenIgnored
+
+var once = require('once')
+
+function glob (pattern, options, cb) {
+ if (typeof options === 'function') cb = options, options = {}
+ if (!options) options = {}
+
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
+ }
+
+ return new Glob(pattern, options, cb)
+}
+
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
+
+// old api surface
+glob.glob = glob
+
+glob.hasMagic = function (pattern, options_) {
+ var options = util._extend({}, options_)
+ options.noprocess = true
+
+ var g = new Glob(pattern, options)
+ var set = g.minimatch.set
+ if (set.length > 1)
+ return true
+
+ for (var j = 0; j < set[0].length; j++) {
+ if (typeof set[0][j] !== 'string')
+ return true
+ }
+
+ return false
+}
+
+glob.Glob = Glob
+inherits(Glob, EE)
+function Glob (pattern, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
+ }
+
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
+
+ setopts(this, pattern, options)
+ this._didRealPath = false
+
+ // process each pattern in the minimatch set
+ var n = this.minimatch.set.length
+
+ // The matches are stored as {: true,...} so that
+ // duplicates are automagically pruned.
+ // Later, we do an Object.keys() on these.
+ // Keep them as a list so we can fill in when nonull is set.
+ this.matches = new Array(n)
+
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
+ })
+ }
+
+ var self = this
+ var n = this.minimatch.set.length
+ this._processing = 0
+ this.matches = new Array(n)
+
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
+
+ if (this.noprocess)
+ return this
+
+ if (n === 0)
+ return done()
+
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
+ }
+
+ function done () {
+ --self._processing
+ if (self._processing <= 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
+
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
+ common.finish(this)
+ this.emit('end', this.found)
+}
+
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ fs.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
+Glob.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
+
+Glob.prototype.abort = function () {
+ this.aborted = true
+ this.emit('abort')
+}
+
+Glob.prototype.pause = function () {
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
+}
+
+Glob.prototype.resume = function () {
+ if (this.paused) {
+ this.emit('resume')
+ this.paused = false
+ if (this._emitQueue.length) {
+ var eq = this._emitQueue.slice(0)
+ this._emitQueue.length = 0
+ for (var i = 0; i < eq.length; i ++) {
+ var e = eq[i]
+ this._emitMatch(e[0], e[1])
+ }
+ }
+ if (this._processQueue.length) {
+ var pq = this._processQueue.slice(0)
+ this._processQueue.length = 0
+ for (var i = 0; i < pq.length; i ++) {
+ var p = pq[i]
+ this._processing--
+ this._process(p[0], p[1], p[2], p[3])
+ }
+ }
+ }
+}
+
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
+ assert(this instanceof Glob)
+ assert(typeof cb === 'function')
+
+ if (this.aborted)
+ return
+
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
+
+ //console.error('PROCESS %d', this._processing, pattern)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // see if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index, cb)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip _processing
+ if (childrenIgnored(this, read))
+ return cb()
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
+}
+
+Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return cb()
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return cb()
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return cb()
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+ this._process([e].concat(remain), index, inGlobStar, cb)
+ }
+ cb()
+}
+
+Glob.prototype._emitMatch = function (index, e) {
+ if (this.aborted)
+ return
+
+ if (this.matches[index][e])
+ return
+
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
+
+ var abs = this._makeAbs(e)
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ if (this.mark)
+ e = this._mark(e)
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
+}
+
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
+
+ if (lstatcb)
+ fs.lstat(abs, lstatcb)
+
+ function lstatcb_ (er, lstat) {
+ if (er)
+ return cb()
+
+ var isSym = lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory()) {
+ self.cache[abs] = 'FILE'
+ cb()
+ } else
+ self._readdir(abs, false, cb)
+ }
+}
+
+Glob.prototype._readdir = function (abs, inGlobStar, cb) {
+ if (this.aborted)
+ return
+
+ cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
+ if (!cb)
+ return
+
+ //console.error('RD %j %j', +inGlobStar, abs)
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs, cb)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return cb()
+
+ if (Array.isArray(c))
+ return cb(null, c)
+ }
+
+ var self = this
+ fs.readdir(abs, readdirCb(this, abs, cb))
+}
+
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
+ }
+}
+
+Glob.prototype._readdirEntries = function (abs, entries, cb) {
+ if (this.aborted)
+ return
+
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+ return cb(null, entries)
+}
+
+Glob.prototype._readdirError = function (f, er, cb) {
+ if (this.aborted)
+ return
+
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) return this.emit('error', er)
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+ return cb()
+}
+
+Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+
+Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+ //console.error('pgs2', prefix, remain[0], entries)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return cb()
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false, cb)
+
+ var isSym = this.symlinks[abs]
+ var len = entries.length
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return cb()
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true, cb)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true, cb)
+ }
+
+ cb()
+}
+
+Glob.prototype._processSimple = function (prefix, index, cb) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var self = this
+ this._stat(prefix, function (er, exists) {
+ self._processSimple2(prefix, index, er, exists, cb)
+ })
+}
+Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
+
+ //console.error('ps2', prefix, exists)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return cb()
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+ cb()
+}
+
+// Returns either 'DIR', 'FILE', or false
+Glob.prototype._stat = function (f, cb) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
+ }
+
+ var self = this
+ var statcb = inflight('stat\0' + abs, lstatcb_)
+ if (statcb)
+ fs.lstat(abs, statcb)
+
+ function lstatcb_ (er, lstat) {
+ if (lstat && lstat.isSymbolicLink()) {
+ // If it's a symlink, then treat it as the target, unless
+ // the target does not exist, then treat it as a file.
+ return fs.stat(abs, function (er, stat) {
+ if (er)
+ self._stat2(f, abs, null, lstat, cb)
+ else
+ self._stat2(f, abs, er, stat, cb)
+ })
+ } else {
+ self._stat2(f, abs, er, lstat, cb)
+ }
+ }
+}
+
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er) {
+ this.statCache[abs] = false
+ return cb()
+ }
+
+ var needDir = f.slice(-1) === '/'
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return cb(null, false, stat)
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return cb()
+
+ return cb(null, c, stat)
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/glob/package.json b/deps/npm/node_modules/read-package-json/node_modules/glob/package.json
new file mode 100644
index 0000000000..7a2cb4c634
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/glob/package.json
@@ -0,0 +1,72 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "name": "glob",
+ "description": "a little globber",
+ "version": "4.5.3",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "devDependencies": {
+ "mkdirp": "0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.5.0",
+ "tick": "0.0.6"
+ },
+ "scripts": {
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "npm run profclean && tap test/*.js",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
+ "bench": "bash benchmark.sh",
+ "prof": "bash prof.sh && cat profile.txt",
+ "benchclean": "bash benchclean.sh"
+ },
+ "license": "ISC",
+ "gitHead": "a4e461ab59a837eee80a4d8dbdbf5ae1054a646f",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-glob/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-glob",
+ "_id": "glob@4.5.3",
+ "_shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "_from": "glob@>=4.4.2 <5.0.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/glob/sync.js b/deps/npm/node_modules/read-package-json/node_modules/glob/sync.js
new file mode 100644
index 0000000000..f4f5e36d4b
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/glob/sync.js
@@ -0,0 +1,457 @@
+module.exports = globSync
+globSync.GlobSync = GlobSync
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var Glob = require('./glob.js').Glob
+var util = require('util')
+var path = require('path')
+var assert = require('assert')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var childrenIgnored = common.childrenIgnored
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ return new GlobSync(pattern, options).found
+}
+
+function GlobSync (pattern, options) {
+ if (!pattern)
+ throw new Error('must provide pattern')
+
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ if (!(this instanceof GlobSync))
+ return new GlobSync(pattern, options)
+
+ setopts(this, pattern, options)
+
+ if (this.noprocess)
+ return this
+
+ var n = this.minimatch.set.length
+ this.matches = new Array(n)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false)
+ }
+ this._finish()
+}
+
+GlobSync.prototype._finish = function () {
+ assert(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = fs.realpathSync(p, this.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
+ common.finish(this)
+}
+
+
+GlobSync.prototype._process = function (pattern, index, inGlobStar) {
+ assert(this instanceof GlobSync)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // See if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip processing
+ if (childrenIgnored(this, read))
+ return
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
+}
+
+
+GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
+ var entries = this._readdir(abs, inGlobStar)
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix.slice(-1) !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this.matches[index][e] = true
+ }
+ // This was the last one, and no stats were needed
+ return
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix)
+ newPattern = [prefix, e]
+ else
+ newPattern = [e]
+ this._process(newPattern.concat(remain), index, inGlobStar)
+ }
+}
+
+
+GlobSync.prototype._emitMatch = function (index, e) {
+ var abs = this._makeAbs(e)
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[this._makeAbs(e)]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+ if (this.stat)
+ this._stat(e)
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
+ var entries
+ var lstat
+ var stat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ // lstat failed, doesn't exist
+ return null
+ }
+
+ var isSym = lstat.isSymbolicLink()
+ this.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory())
+ this.cache[abs] = 'FILE'
+ else
+ entries = this._readdir(abs, false)
+
+ return entries
+}
+
+GlobSync.prototype._readdir = function (abs, inGlobStar) {
+ var entries
+
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return null
+
+ if (Array.isArray(c))
+ return c
+ }
+
+ try {
+ return this._readdirEntries(abs, fs.readdirSync(abs))
+ } catch (er) {
+ this._readdirError(abs, er)
+ return null
+ }
+}
+
+GlobSync.prototype._readdirEntries = function (abs, entries) {
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+
+ // mark and cache dir-ness
+ return entries
+}
+
+GlobSync.prototype._readdirError = function (f, er) {
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) throw er
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+}
+
+GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
+
+ var entries = this._readdir(abs, inGlobStar)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false)
+
+ var len = entries.length
+ var isSym = this.symlinks[abs]
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true)
+ }
+}
+
+GlobSync.prototype._processSimple = function (prefix, index) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var exists = this._stat(prefix)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this.matches[index][prefix] = true
+}
+
+// Returns either 'DIR', 'FILE', or false
+GlobSync.prototype._stat = function (f) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ var lstat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ return false
+ }
+
+ if (lstat.isSymbolicLink()) {
+ try {
+ stat = fs.statSync(abs)
+ } catch (er) {
+ stat = lstat
+ }
+ } else {
+ stat = lstat
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return false
+
+ return c
+}
+
+GlobSync.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+GlobSync.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
diff --git a/deps/npm/node_modules/read-package-json/package.json b/deps/npm/node_modules/read-package-json/package.json
index a61555cef7..143d6d7396 100644
--- a/deps/npm/node_modules/read-package-json/package.json
+++ b/deps/npm/node_modules/read-package-json/package.json
@@ -31,8 +31,6 @@
"graceful-fs": "2 || 3"
},
"license": "ISC",
- "readme": "# read-package-json\n\nThis is the thing that npm uses to read package.json files. It\nvalidates some stuff, and loads some default things.\n\nIt keeps a cache of the files you've read, so that you don't end\nup reading the same package.json file multiple times.\n\nNote that if you just want to see what's literally in the package.json\nfile, you can usually do `var data = require('some-module/package.json')`.\n\nThis module is basically only needed by npm, but it's handy to see what\nnpm will see when it looks at your package.\n\n## Usage\n\n```javascript\nvar readJson = require('read-package-json')\n\n// readJson(filename, [logFunction=noop], [strict=false], cb)\nreadJson('/path/to/package.json', console.error, false, function (er, data) {\n if (er) {\n console.error(\"There was an error reading the file\")\n return\n }\n\n console.error('the package data is', data)\n});\n```\n\n## readJson(file, [logFn = noop], [strict = false], cb)\n\n* `file` {String} The path to the package.json file\n* `logFn` {Function} Function to handle logging. Defaults to a noop.\n* `strict` {Boolean} True to enforce SemVer 2.0 version strings, and\n other strict requirements.\n* `cb` {Function} Gets called with `(er, data)`, as is The Node Way.\n\nReads the JSON file and does the things.\n\n## `package.json` Fields\n\nSee `man 5 package.json` or `npm help json`.\n\n## readJson.log\n\nBy default this is a reference to the `npmlog` module. But if that\nmodule can't be found, then it'll be set to just a dummy thing that does\nnothing.\n\nReplace with your own `{log,warn,error}` object for fun loggy time.\n\n## readJson.extras(file, data, cb)\n\nRun all the extra stuff relative to the file, with the parsed data.\n\nModifies the data as it does stuff. Calls the cb when it's done.\n\n## readJson.extraSet = [fn, fn, ...]\n\nArray of functions that are called by `extras`. Each one receives the\narguments `fn(file, data, cb)` and is expected to call `cb(er, data)`\nwhen done or when an error occurs.\n\nOrder is indeterminate, so each function should be completely\nindependent.\n\nMix and match!\n\n## readJson.cache\n\nThe `lru-cache` object that readJson uses to not read the same file over\nand over again. See\n[lru-cache](https://github.com/isaacs/node-lru-cache) for details.\n\n## Other Relevant Files Besides `package.json`\n\nSome other files have an effect on the resulting data object, in the\nfollowing ways:\n\n### `README?(.*)`\n\nIf there is a `README` or `README.*` file present, then npm will attach\na `readme` field to the data with the contents of this file.\n\nOwing to the fact that roughly 100% of existing node modules have\nMarkdown README files, it will generally be assumed to be Markdown,\nregardless of the extension. Please plan accordingly.\n\n### `server.js`\n\nIf there is a `server.js` file, and there is not already a\n`scripts.start` field, then `scripts.start` will be set to `node\nserver.js`.\n\n### `AUTHORS`\n\nIf there is not already a `contributors` field, then the `contributors`\nfield will be set to the contents of the `AUTHORS` file, split by lines,\nand parsed.\n\n### `bindings.gyp`\n\nIf a bindings.gyp file exists, and there is not already a\n`scripts.install` field, then the `scripts.install` field will be set to\n`node-gyp rebuild`.\n\n### `wscript`\n\nIf a wscript file exists, and there is not already a `scripts.install`\nfield, then the `scripts.install` field will be set to `node-waf clean ;\nnode-waf configure build`.\n\nNote that the `bindings.gyp` file supercedes this, since node-waf has\nbeen deprecated in favor of node-gyp.\n\n### `index.js`\n\nIf the json file does not exist, but there is a `index.js` file\npresent instead, and that file has a package comment, then it will try\nto parse the package comment, and use that as the data instead.\n\nA package comment looks like this:\n\n```javascript\n/**package\n * { \"name\": \"my-bare-module\"\n * , \"version\": \"1.2.3\"\n * , \"description\": \"etc....\" }\n **/\n\n// or...\n\n/**package\n{ \"name\": \"my-bare-module\"\n, \"version\": \"1.2.3\"\n, \"description\": \"etc....\" }\n**/\n```\n\nThe important thing is that it starts with `/**package`, and ends with\n`**/`. If the package.json file exists, then the index.js is not\nparsed.\n\n### `{directories.man}/*.[0-9]`\n\nIf there is not already a `man` field defined as an array of files or a\nsingle file, and\nthere is a `directories.man` field defined, then that directory will\nbe searched for manpages.\n\nAny valid manpages found in that directory will be assigned to the `man`\narray, and installed in the appropriate man directory at package install\ntime, when installed globally on a Unix system.\n\n### `{directories.bin}/*`\n\nIf there is not already a `bin` field defined as a string filename or a\nhash of ` : ` pairs, then the `directories.bin`\ndirectory will be searched and all the files within it will be linked as\nexecutables at install time.\n\nWhen installing locally, npm links bins into `node_modules/.bin`, which\nis in the `PATH` environ when npm runs scripts. When\ninstalling globally, they are linked into `{prefix}/bin`, which is\npresumably in the `PATH` environment variable.\n",
- "readmeFilename": "README.md",
"gitHead": "d307d827f1a4f13a3a8bc4d747bb854779ad35c8",
"bugs": {
"url": "https://github.com/isaacs/read-package-json/issues"
@@ -40,5 +38,28 @@
"homepage": "https://github.com/isaacs/read-package-json",
"_id": "read-package-json@1.3.2",
"_shasum": "5228bc7ad1f33ded75184ece48710036101affa2",
- "_from": "read-package-json@>=1.3.2 <1.4.0"
+ "_from": "read-package-json@>=1.3.2 <1.4.0",
+ "_npmVersion": "2.7.0",
+ "_nodeVersion": "1.2.0",
+ "_npmUser": {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "dist": {
+ "shasum": "5228bc7ad1f33ded75184ece48710036101affa2",
+ "tarball": "http://registry.npmjs.org/read-package-json/-/read-package-json-1.3.2.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-1.3.2.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/realize-package-specifier/README.md b/deps/npm/node_modules/realize-package-specifier/README.md
index 577014a48c..dac3b64c51 100644
--- a/deps/npm/node_modules/realize-package-specifier/README.md
+++ b/deps/npm/node_modules/realize-package-specifier/README.md
@@ -13,6 +13,8 @@ realizePackageSpecifier("foo.tar.gz", ".", function (err, package) {
})
```
+## Using
+
* realizePackageSpecifier(*spec*, [*where*,] *callback*)
Parses *spec* using `npm-package-arg` and then uses stat to check to see if
@@ -34,14 +36,17 @@ new type of `directory`. 2) The `local` type only refers to tarballs. 2)
For all `local` and `directory` type results spec will contain the full path of
the local package.
-## Result Objects
+## Result Object
The full definition of the result object is:
* `name` - If known, the `name` field expected in the resulting pkg.
* `type` - One of the following strings:
* `git` - A git repo
- * `github` - A github shorthand, like `user/project`
+ * `hosted` - A hosted project, from github, bitbucket or gitlab. Originally
+ either a full url pointing at one of these services or a shorthand like
+ `user/project` or `github:user/project` for github or `bitbucket:user/project`
+ for bitbucket.
* `tag` - A tagged version, like `"foo@latest"`
* `version` - A specific version number, like `"foo@1.2.3"`
* `range` - A version range, like `"foo@2.x"`
@@ -49,6 +54,12 @@ The full definition of the result object is:
* `directory` - A local package directory
* `remote` - An http url (presumably to a tgz)
* `spec` - The "thing". URL, the range, git repo, etc.
+* `hosted` - If type=hosted this will be an object with the following keys:
+ * `type` - github, bitbucket or gitlab
+ * `ssh` - The ssh path for this git repo
+ * `sshurl` - The ssh URL for this git repo
+ * `https` - The HTTPS URL for this git repo
+ * `directUrl` - The URL for the package.json in this git repo
* `raw` - The original un-modified string that was provided.
* `rawSpec` - The part after the `name@...`, as it was originally
provided.
diff --git a/deps/npm/node_modules/realize-package-specifier/package.json b/deps/npm/node_modules/realize-package-specifier/package.json
index b04c49a35e..0353dd96aa 100644
--- a/deps/npm/node_modules/realize-package-specifier/package.json
+++ b/deps/npm/node_modules/realize-package-specifier/package.json
@@ -1,6 +1,6 @@
{
"name": "realize-package-specifier",
- "version": "1.3.0",
+ "version": "2.2.0",
"description": "Like npm-package-arg, but more so, producing full file paths and differentiating local tar and directory sources.",
"main": "index.js",
"scripts": {
@@ -19,19 +19,36 @@
"homepage": "https://github.com/npm/realize-package-specifier",
"dependencies": {
"dezalgo": "^1.0.1",
- "npm-package-arg": "^2.1.3"
+ "npm-package-arg": "^3.1.0"
},
"devDependencies": {
"require-inject": "^1.1.0",
"tap": "^0.4.12"
},
- "gitHead": "d05d49409e28404473a292cf99df05642a24c08f",
- "readme": "realize-package-specifier\n-------------------------\n\nParse a package specifier, peeking at the disk to differentiate between\nlocal tarballs, directories and named modules. This implements the logic\nused by `npm install` and `npm cache` to determine where to get packages\nfrom.\n\n```javascript\nvar realizePackageSpecifier = require(\"realize-package-specifier\")\nrealizePackageSpecifier(\"foo.tar.gz\", \".\", function (err, package) {\n …\n})\n```\n\n* realizePackageSpecifier(*spec*, [*where*,] *callback*)\n\nParses *spec* using `npm-package-arg` and then uses stat to check to see if\nit refers to a local tarball or package directory. Stats are done relative\nto *where*. If it does then the local module is loaded. If it doesn't then\ntarget is left as a remote package specifier. Package directories are\nrecognized by the presence of a package.json in them.\n\n*spec* -- a package specifier, like: `foo@1.2`, or `foo@user/foo`, or\n`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`\n\n*where* (optional, default: .) -- The directory in which we should look for\nlocal tarballs or package directories.\n\n*callback* function(*err*, *result*) -- Called once we've determined what\nkind of specifier this is. The *result* object will be very like the one\nreturned by `npm-package-arg` except with three differences: 1) There's a\nnew type of `directory`. 2) The `local` type only refers to tarballs. 2)\nFor all `local` and `directory` type results spec will contain the full path of\nthe local package.\n\n## Result Objects\n\nThe full definition of the result object is:\n\n* `name` - If known, the `name` field expected in the resulting pkg.\n* `type` - One of the following strings:\n * `git` - A git repo\n * `github` - A github shorthand, like `user/project`\n * `tag` - A tagged version, like `\"foo@latest\"`\n * `version` - A specific version number, like `\"foo@1.2.3\"`\n * `range` - A version range, like `\"foo@2.x\"`\n * `local` - A local file path\n * `directory` - A local package directory\n * `remote` - An http url (presumably to a tgz)\n* `spec` - The \"thing\". URL, the range, git repo, etc.\n* `raw` - The original un-modified string that was provided.\n* `rawSpec` - The part after the `name@...`, as it was originally\n provided.\n* `scope` - If a name is something like `@org/module` then the `scope`\n field will be set to `org`. If it doesn't have a scoped name, then\n scope is `null`.\n\n",
- "readmeFilename": "README.md",
+ "gitHead": "8810720d191647f06a505fc5da8d0634a21526b8",
"bugs": {
"url": "https://github.com/npm/realize-package-specifier/issues"
},
- "_id": "realize-package-specifier@1.3.0",
- "_shasum": "23374a84e6a9188483f346cc939eb58eec85efa5",
- "_from": "realize-package-specifier@~1.3.0"
+ "_id": "realize-package-specifier@2.2.0",
+ "_shasum": "95278b6021a39158f284e15756e827fc2998ed9c",
+ "_from": "realize-package-specifier@>=2.2.0 <2.3.0",
+ "_npmVersion": "2.4.1",
+ "_nodeVersion": "1.0.4",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "95278b6021a39158f284e15756e827fc2998ed9c",
+ "tarball": "http://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-2.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-2.2.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/realize-package-specifier/test/basic.js b/deps/npm/node_modules/realize-package-specifier/test/basic.js
index b371826e7d..7fe659fbf6 100644
--- a/deps/npm/node_modules/realize-package-specifier/test/basic.js
+++ b/deps/npm/node_modules/realize-package-specifier/test/basic.js
@@ -61,7 +61,7 @@ var rps = requireInject("../index", {
})
test("realize-package-specifier", function (t) {
- t.plan(12)
+ t.plan(13)
rps("a.tar.gz", function (err, result) {
t.is(result.type, "local", "local tarball")
})
@@ -90,7 +90,8 @@ test("realize-package-specifier", function (t) {
t.is(result.type, "directory", "local package directory")
})
rps("e/2", function (err, result) {
- t.is(result.type, "github", "github package dependency")
+ t.is(result.type, "hosted", "hosted package dependency")
+ t.is(result.hosted.type, "github", "github package dependency")
})
rps("1", function (err, result) {
t.is(result.type, "local", "range like local file is still a local file")
@@ -100,7 +101,7 @@ test("realize-package-specifier", function (t) {
})
})
test("named realize-package-specifier", function (t) {
- t.plan(12)
+ t.plan(13)
rps("a@a.tar.gz", function (err, result) {
t.is(result.type, "local", "named local tarball")
@@ -130,7 +131,8 @@ test("named realize-package-specifier", function (t) {
t.is(result.type, "directory", "local package directory")
})
rps("e@e/2", function (err, result) {
- t.is(result.type, "github", "github package dependency")
+ t.is(result.type, "hosted", "hosted package dependency")
+ t.is(result.hosted.type, "github", "github package dependency")
})
rps("e@1", function (err, result) {
t.is(result.type, "range", "range like specifier is never a local file")
diff --git a/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js b/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js
index be07aa56a3..bd7ab4aec3 100644
--- a/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js
+++ b/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js
@@ -64,11 +64,11 @@ test("npa-basic", function (t) {
rawSpec: "=v1.2.3"
},
- "git+ssh://git@github.com/user/foo#1.2.3": {
+ "git+ssh://git@notgithub.com/user/foo#1.2.3": {
name: null,
type: "git",
- spec: "ssh://git@github.com/user/foo#1.2.3",
- raw: "git+ssh://git@github.com/user/foo#1.2.3"
+ spec: "ssh://git@notgithub.com/user/foo#1.2.3",
+ raw: "git+ssh://git@notgithub.com/user/foo#1.2.3"
},
"git+file://path/to/repo#1.2.3": {
@@ -78,19 +78,19 @@ test("npa-basic", function (t) {
raw: "git+file://path/to/repo#1.2.3"
},
- "git://github.com/user/foo": {
+ "git://notgithub.com/user/foo": {
name: null,
type: "git",
- spec: "git://github.com/user/foo",
- raw: "git://github.com/user/foo"
+ spec: "git://notgithub.com/user/foo",
+ raw: "git://notgithub.com/user/foo"
},
- "@foo/bar@git+ssh://github.com/user/foo": {
+ "@foo/bar@git+ssh://notgithub.com/user/foo": {
name: "@foo/bar",
scope: "@foo",
- spec: "ssh://github.com/user/foo",
- rawSpec: "git+ssh://github.com/user/foo",
- raw: "@foo/bar@git+ssh://github.com/user/foo"
+ spec: "ssh://notgithub.com/user/foo",
+ rawSpec: "git+ssh://notgithub.com/user/foo",
+ raw: "@foo/bar@git+ssh://notgithub.com/user/foo"
},
"/path/to/foo": {
@@ -99,28 +99,18 @@ test("npa-basic", function (t) {
spec: "/path/to/foo",
raw: "/path/to/foo"
},
-
"file:path/to/foo": {
name: null,
type: "local",
spec: path.resolve(__dirname,"..","path/to/foo"),
raw: "file:path/to/foo"
},
-
- "file:~/path/to/foo": {
- name: null,
- type: "local",
- spec: path.resolve(__dirname,"..","~/path/to/foo"),
- raw: "file:~/path/to/foo"
- },
-
"file:../path/to/foo": {
name: null,
type: "local",
spec: path.resolve(__dirname,"..","../path/to/foo"),
raw: "file:../path/to/foo"
},
-
"file:///path/to/foo": {
name: null,
type: "local",
@@ -135,41 +125,6 @@ test("npa-basic", function (t) {
raw: "https://server.com/foo.tgz"
},
- "user/foo-js": {
- name: null,
- type: "github",
- spec: "user/foo-js",
- raw: "user/foo-js"
- },
-
- "user/foo-js#bar/baz": {
- name: null,
- type: "github",
- spec: "user/foo-js#bar/baz",
- raw: "user/foo-js#bar/baz"
- },
-
- "user..blerg--/..foo-js# . . . . . some . tags / / /": {
- name: null,
- type: "github",
- spec: "user..blerg--/..foo-js# . . . . . some . tags / / /",
- raw: "user..blerg--/..foo-js# . . . . . some . tags / / /"
- },
-
- "user/foo-js#bar/baz/bin": {
- name: null,
- type: "github",
- spec: "user/foo-js#bar/baz/bin",
- raw: "user/foo-js#bar/baz/bin"
- },
-
- "foo@user/foo-js": {
- name: "foo",
- type: "github",
- spec: "user/foo-js",
- raw: "foo@user/foo-js"
- },
-
"foo@latest": {
name: "foo",
type: "tag",
@@ -189,9 +144,9 @@ test("npa-basic", function (t) {
Object.keys(tests).forEach(function (arg) {
rps(arg, path.resolve(__dirname,'..'), function(err, res) {
- t.notOk(err, "No error")
- t.type(res, "Result")
- t.has(res, tests[arg])
+ t.notOk(err, arg + " no error")
+ t.type(res, "Result", arg + " got right result time")
+ t.has(res, tests[arg], arg + " result has correct values")
})
})
diff --git a/deps/npm/node_modules/realize-package-specifier/test/npa-bitbucket.js b/deps/npm/node_modules/realize-package-specifier/test/npa-bitbucket.js
new file mode 100644
index 0000000000..7cc95d5589
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/test/npa-bitbucket.js
@@ -0,0 +1,86 @@
+var test = require("tap").test;
+var rps = require("../index.js")
+var path = require("path")
+
+test("npa-bitbucket", function (t) {
+ t.setMaxListeners(999)
+
+ var tests = {
+ "bitbucket:user/foo-js": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo-js.git",
+ raw: "bitbucket:user/foo-js"
+ },
+
+ "bitbucket:user/foo-js#bar/baz": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo-js.git#bar/baz",
+ raw: "bitbucket:user/foo-js#bar/baz"
+ },
+
+ "bitbucket:user..blerg--/..foo-js# . . . . . some . tags / / /": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user..blerg--/..foo-js.git# . . . . . some . tags / / /",
+ raw: "bitbucket:user..blerg--/..foo-js# . . . . . some . tags / / /"
+ },
+
+ "bitbucket:user/foo-js#bar/baz/bin": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo-js.git#bar/baz/bin",
+ raw: "bitbucket:user/foo-js#bar/baz/bin"
+ },
+
+ "foo@bitbucket:user/foo-js": {
+ name: "foo",
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo-js.git",
+ raw: "foo@bitbucket:user/foo-js"
+ },
+
+ "git+ssh://git@bitbucket.org/user/foo#1.2.3": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo.git#1.2.3",
+ raw: "git+ssh://git@bitbucket.org/user/foo#1.2.3"
+ },
+
+ "https://bitbucket.org/user/foo.git": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo.git",
+ raw: "https://bitbucket.org/user/foo.git"
+ },
+
+ "@foo/bar@git+ssh://bitbucket.org/user/foo": {
+ name: "@foo/bar",
+ scope: "@foo",
+ type: "hosted",
+ hosted: { type: "bitbucket" },
+ spec: "git+ssh://git@bitbucket.org/user/foo.git",
+ rawSpec: "git+ssh://bitbucket.org/user/foo",
+ raw: "@foo/bar@git+ssh://bitbucket.org/user/foo"
+ }
+ }
+
+ t.plan( Object.keys(tests).length * 3 )
+
+ Object.keys(tests).forEach(function (arg) {
+ rps(arg, path.resolve(__dirname,'..'), function(err, res) {
+ t.notOk(err, "No error")
+ t.type(res, "Result")
+ t.has(res, tests[arg])
+ })
+ })
+
+})
diff --git a/deps/npm/node_modules/realize-package-specifier/test/npa-github.js b/deps/npm/node_modules/realize-package-specifier/test/npa-github.js
new file mode 100644
index 0000000000..1e6b72e1e3
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/test/npa-github.js
@@ -0,0 +1,110 @@
+var test = require("tap").test;
+var rps = require("../index.js")
+var path = require("path")
+
+test("npa-github", function (t) {
+ t.setMaxListeners(999)
+
+ var tests = {
+ "user/foo-js": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo-js.git",
+ raw: "user/foo-js"
+ },
+
+ "user/foo-js#bar/baz": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo-js.git#bar/baz",
+ raw: "user/foo-js#bar/baz"
+ },
+
+ "user..blerg--/..foo-js# . . . . . some . tags / / /": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user..blerg--/..foo-js.git# . . . . . some . tags / / /",
+ raw: "user..blerg--/..foo-js# . . . . . some . tags / / /"
+ },
+
+ "user/foo-js#bar/baz/bin": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo-js.git#bar/baz/bin",
+ raw: "user/foo-js#bar/baz/bin"
+ },
+
+ "foo@user/foo-js": {
+ name: "foo",
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo-js.git",
+ raw: "foo@user/foo-js"
+ },
+
+ "github:user/foo-js": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo-js.git",
+ raw: "github:user/foo-js"
+ },
+
+ "git+ssh://git@github.com/user/foo#1.2.3": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo.git#1.2.3",
+ raw: "git+ssh://git@github.com/user/foo#1.2.3"
+ },
+
+ "git://github.com/user/foo": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo.git",
+ raw: "git://github.com/user/foo"
+ },
+
+ "https://github.com/user/foo.git": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo.git",
+ raw: "https://github.com/user/foo.git"
+ },
+
+ "@foo/bar@git+ssh://github.com/user/foo": {
+ name: "@foo/bar",
+ scope: "@foo",
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/user/foo.git",
+ rawSpec: "git+ssh://github.com/user/foo",
+ raw: "@foo/bar@git+ssh://github.com/user/foo"
+ },
+
+ "foo@bar/foo": {
+ name: "foo",
+ type: "hosted",
+ hosted: { type: "github" },
+ spec: "git+ssh://git@github.com/bar/foo.git",
+ raw: "foo@bar/foo"
+ }
+ }
+
+ t.plan( Object.keys(tests).length * 3 )
+
+ Object.keys(tests).forEach(function (arg) {
+ rps(arg, path.resolve(__dirname,'..'), function(err, res) {
+ t.notOk(err, "No error")
+ t.type(res, "Result")
+ t.has(res, tests[arg])
+ })
+ })
+
+})
diff --git a/deps/npm/node_modules/realize-package-specifier/test/npa-gitlab.js b/deps/npm/node_modules/realize-package-specifier/test/npa-gitlab.js
new file mode 100644
index 0000000000..b6efb29a39
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/test/npa-gitlab.js
@@ -0,0 +1,86 @@
+var test = require("tap").test;
+var rps = require("../index.js")
+var path = require("path")
+
+test("npa-gitlab", function (t) {
+ t.setMaxListeners(999)
+
+ var tests = {
+ "gitlab:user/foo-js": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo-js.git",
+ raw: "gitlab:user/foo-js"
+ },
+
+ "gitlab:user/foo-js#bar/baz": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo-js.git#bar/baz",
+ raw: "gitlab:user/foo-js#bar/baz"
+ },
+
+ "gitlab:user..blerg--/..foo-js# . . . . . some . tags / / /": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user..blerg--/..foo-js.git# . . . . . some . tags / / /",
+ raw: "gitlab:user..blerg--/..foo-js# . . . . . some . tags / / /"
+ },
+
+ "gitlab:user/foo-js#bar/baz/bin": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo-js.git#bar/baz/bin",
+ raw: "gitlab:user/foo-js#bar/baz/bin"
+ },
+
+ "foo@gitlab:user/foo-js": {
+ name: "foo",
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo-js.git",
+ raw: "foo@gitlab:user/foo-js"
+ },
+
+ "git+ssh://git@gitlab.com/user/foo#1.2.3": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo.git#1.2.3",
+ raw: "git+ssh://git@gitlab.com/user/foo#1.2.3"
+ },
+
+ "https://gitlab.com/user/foo.git": {
+ name: null,
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo.git",
+ raw: "https://gitlab.com/user/foo.git"
+ },
+
+ "@foo/bar@git+ssh://gitlab.com/user/foo": {
+ name: "@foo/bar",
+ scope: "@foo",
+ type: "hosted",
+ hosted: { type: "gitlab" },
+ spec: "git+ssh://git@gitlab.com/user/foo.git",
+ rawSpec: "git+ssh://gitlab.com/user/foo",
+ raw: "@foo/bar@git+ssh://gitlab.com/user/foo"
+ }
+ }
+
+ t.plan( Object.keys(tests).length * 3 )
+
+ Object.keys(tests).forEach(function (arg) {
+ rps(arg, path.resolve(__dirname,'..'), function(err, res) {
+ t.notOk(err, "No error")
+ t.type(res, "Result")
+ t.has(res, tests[arg])
+ })
+ })
+
+})
diff --git a/deps/npm/node_modules/request/.eslintrc b/deps/npm/node_modules/request/.eslintrc
index 9c3350d6bb..8538b419c1 100644
--- a/deps/npm/node_modules/request/.eslintrc
+++ b/deps/npm/node_modules/request/.eslintrc
@@ -3,6 +3,8 @@
"node": true
},
"rules": {
+ // 2-space indentation
+ "indent": [2, 2],
// Disallow semi-colons, unless needed to disambiguate statement
"semi": [2, "never"],
// Require strings to use single quotes
@@ -17,6 +19,21 @@
"no-unused-vars": [2, {"args":"none"}],
// Allow leading underscores for method names
// REASON: we use underscores to denote private methods
- "no-underscore-dangle": 0
+ "no-underscore-dangle": 0,
+ // Allow multi spaces around operators since they are
+ // used for alignment. This is not consistent in the
+ // code.
+ "no-multi-spaces": 0,
+ // Style rule is: most objects use { beforeColon: false, afterColon: true }, unless aligning which uses:
+ //
+ // {
+ // beforeColon : true,
+ // afterColon : true
+ // }
+ //
+ // eslint can't handle this, so the check is disabled.
+ "key-spacing": 0,
+ // Allow shadowing vars in outer scope (needs discussion)
+ "no-shadow": 0
}
}
diff --git a/deps/npm/node_modules/request/node_modules/bl/.jshintrc b/deps/npm/node_modules/request/node_modules/bl/.jshintrc
new file mode 100644
index 0000000000..c8ef3ca409
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/bl/.jshintrc
@@ -0,0 +1,59 @@
+{
+ "predef": [ ]
+ , "bitwise": false
+ , "camelcase": false
+ , "curly": false
+ , "eqeqeq": false
+ , "forin": false
+ , "immed": false
+ , "latedef": false
+ , "noarg": true
+ , "noempty": true
+ , "nonew": true
+ , "plusplus": false
+ , "quotmark": true
+ , "regexp": false
+ , "undef": true
+ , "unused": true
+ , "strict": false
+ , "trailing": true
+ , "maxlen": 120
+ , "asi": true
+ , "boss": true
+ , "debug": true
+ , "eqnull": true
+ , "esnext": true
+ , "evil": true
+ , "expr": true
+ , "funcscope": false
+ , "globalstrict": false
+ , "iterator": false
+ , "lastsemic": true
+ , "laxbreak": true
+ , "laxcomma": true
+ , "loopfunc": true
+ , "multistr": false
+ , "onecase": false
+ , "proto": false
+ , "regexdash": false
+ , "scripturl": true
+ , "smarttabs": false
+ , "shadow": false
+ , "sub": true
+ , "supernew": false
+ , "validthis": true
+ , "browser": true
+ , "couch": false
+ , "devel": false
+ , "dojo": false
+ , "mootools": false
+ , "node": true
+ , "nonstandard": true
+ , "prototypejs": false
+ , "rhino": false
+ , "worker": true
+ , "wsh": false
+ , "nomen": false
+ , "onevar": false
+ , "passfail": false
+}
\ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc b/deps/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc
new file mode 100644
index 0000000000..77887b5f0f
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc
@@ -0,0 +1,30 @@
+{
+ "maxdepth": 4,
+ "maxstatements": 200,
+ "maxcomplexity": 12,
+ "maxlen": 80,
+ "maxparams": 5,
+
+ "curly": true,
+ "eqeqeq": true,
+ "immed": true,
+ "latedef": false,
+ "noarg": true,
+ "noempty": true,
+ "nonew": true,
+ "undef": true,
+ "unused": "vars",
+ "trailing": true,
+
+ "quotmark": true,
+ "expr": true,
+ "asi": true,
+
+ "browser": false,
+ "esnext": true,
+ "devel": false,
+ "node": false,
+ "nonstandard": false,
+
+ "predef": ["require", "module", "__dirname", "__filename"]
+}
diff --git a/deps/npm/node_modules/request/node_modules/har-validator/node_modules/require-directory/.jshintrc b/deps/npm/node_modules/request/node_modules/har-validator/node_modules/require-directory/.jshintrc
new file mode 100644
index 0000000000..e14e4dcbd2
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/har-validator/node_modules/require-directory/.jshintrc
@@ -0,0 +1,67 @@
+{
+ "maxerr" : 50,
+ "bitwise" : true,
+ "camelcase" : true,
+ "curly" : true,
+ "eqeqeq" : true,
+ "forin" : true,
+ "immed" : true,
+ "indent" : 2,
+ "latedef" : true,
+ "newcap" : true,
+ "noarg" : true,
+ "noempty" : true,
+ "nonew" : true,
+ "plusplus" : true,
+ "quotmark" : true,
+ "undef" : true,
+ "unused" : true,
+ "strict" : true,
+ "trailing" : true,
+ "maxparams" : false,
+ "maxdepth" : false,
+ "maxstatements" : false,
+ "maxcomplexity" : false,
+ "maxlen" : false,
+ "asi" : false,
+ "boss" : false,
+ "debug" : false,
+ "eqnull" : true,
+ "es5" : false,
+ "esnext" : false,
+ "moz" : false,
+ "evil" : false,
+ "expr" : true,
+ "funcscope" : true,
+ "globalstrict" : true,
+ "iterator" : true,
+ "lastsemic" : false,
+ "laxbreak" : false,
+ "laxcomma" : false,
+ "loopfunc" : false,
+ "multistr" : false,
+ "proto" : false,
+ "scripturl" : false,
+ "smarttabs" : false,
+ "shadow" : false,
+ "sub" : false,
+ "supernew" : false,
+ "validthis" : false,
+ "browser" : true,
+ "couch" : false,
+ "devel" : true,
+ "dojo" : false,
+ "jquery" : false,
+ "mootools" : false,
+ "node" : true,
+ "nonstandard" : false,
+ "prototypejs" : false,
+ "rhino" : false,
+ "worker" : false,
+ "wsh" : false,
+ "yui" : false,
+ "nomen" : true,
+ "onevar" : true,
+ "passfail" : false,
+ "white" : true
+}
diff --git a/deps/npm/node_modules/request/node_modules/qs/.jshintrc b/deps/npm/node_modules/request/node_modules/qs/.jshintrc
new file mode 100644
index 0000000000..997b3f7d45
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/qs/.jshintrc
@@ -0,0 +1,10 @@
+{
+ "node": true,
+
+ "curly": true,
+ "latedef": true,
+ "quotmark": true,
+ "undef": true,
+ "unused": true,
+ "trailing": true
+}
diff --git a/deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc b/deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc
new file mode 100644
index 0000000000..4c1c8d4972
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc
@@ -0,0 +1,5 @@
+{
+ "node": true,
+ "asi": true,
+ "laxcomma": true
+}
diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/LICENSE b/deps/npm/node_modules/rimraf/node_modules/glob/LICENSE
new file mode 100644
index 0000000000..19129e315f
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/node_modules/glob/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/README.md b/deps/npm/node_modules/rimraf/node_modules/glob/README.md
new file mode 100644
index 0000000000..258257ecb1
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/node_modules/glob/README.md
@@ -0,0 +1,369 @@
+[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies)
+
+# Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
+
+This is a glob implementation in JavaScript. It uses the `minimatch`
+library to do its matching.
+
+![](oh-my-glob.gif)
+
+## Usage
+
+```javascript
+var glob = require("glob")
+
+// options is optional
+glob("**/*.js", options, function (er, files) {
+ // files is an array of filenames.
+ // If the `nonull` option is set, and nothing
+ // was found, then files is ["**/*.js"]
+ // er is an error object or null.
+})
+```
+
+## Glob Primer
+
+"Globs" are the patterns you type when you do stuff like `ls *.js` on
+the command line, or put `build/*` in a `.gitignore` file.
+
+Before parsing the path part patterns, braced sections are expanded
+into a set. Braced sections start with `{` and end with `}`, with any
+number of comma-delimited sections within. Braced sections may contain
+slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in a
+path portion:
+
+* `*` Matches 0 or more characters in a single path portion
+* `?` Matches 1 character
+* `[...]` Matches a range of characters, similar to a RegExp range.
+ If the first character of the range is `!` or `^` then it matches
+ any character not in the range.
+* `!(pattern|pattern|pattern)` Matches anything that does not match
+ any of the patterns provided.
+* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
+ patterns provided.
+* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
+ patterns provided.
+* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
+* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided
+* `**` If a "globstar" is alone in a path portion, then it matches
+ zero or more directories and subdirectories searching for matches.
+ It does not crawl symlinked directories.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first character,
+then it will not match any glob pattern unless that pattern's
+corresponding path part also has a `.` as its first character.
+
+For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
+However the pattern `a/*/c` would not, because `*` does not start with
+a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has no
+slashes in it, then it will seek for any file anywhere in the tree
+with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Negation
+
+The intent for negation would be for a pattern starting with `!` to
+match everything that *doesn't* match the supplied pattern. However,
+the implementation is weird, and for the time being, this should be
+avoided. The behavior will change or be deprecated in version 5.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned. This
+differs from the shell, where the pattern itself is returned. For
+example:
+
+ $ echo a*s*d*f
+ a*s*d*f
+
+To get the bash-style behavior, set the `nonull:true` in the options.
+
+### See Also:
+
+* `man sh`
+* `man bash` (Search for "Pattern Matching")
+* `man 3 fnmatch`
+* `man 5 gitignore`
+* [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## glob.hasMagic(pattern, [options])
+
+Returns `true` if there are any special characters in the pattern, and
+`false` otherwise.
+
+Note that the options affect the results. If `noext:true` is set in
+the options object, then `+(a|b)` will not be considered a magic
+pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
+then that is considered magical, unless `nobrace:true` is set in the
+options.
+
+## glob(pattern, [options], cb)
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* `cb` {Function}
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array} filenames found matching the pattern
+
+Perform a synchronous glob search.
+
+## Class: glob.Glob
+
+Create a Glob object by instantiating the `glob.Glob` class.
+
+```javascript
+var Glob = require("glob").Glob
+var mg = new Glob(pattern, options, cb)
+```
+
+It's an EventEmitter, and starts walking the filesystem to find matches
+immediately.
+
+### new glob.Glob(pattern, [options], [cb])
+
+* `pattern` {String} pattern to search for
+* `options` {Object}
+* `cb` {Function} Called when an error occurs, or matches are found
+ * `err` {Error | null}
+ * `matches` {Array} filenames found matching the pattern
+
+Note that if the `sync` flag is set in the options, then matches will
+be immediately available on the `g.found` member.
+
+### Properties
+
+* `minimatch` The minimatch object that the glob uses.
+* `options` The options object passed in.
+* `aborted` Boolean which is set to true when calling `abort()`. There
+ is no way at this time to continue a glob search after aborting, but
+ you can re-use the statCache to avoid having to duplicate syscalls.
+* `statCache` Collection of all the stat results the glob search
+ performed.
+* `cache` Convenience object. Each field has the following possible
+ values:
+ * `false` - Path does not exist
+ * `true` - Path exists
+ * `'DIR'` - Path exists, and is not a directory
+ * `'FILE'` - Path exists, and is a directory
+ * `[file, entries, ...]` - Path exists, is a directory, and the
+ array value is the results of `fs.readdir`
+* `statCache` Cache of `fs.stat` results, to prevent statting the same
+ path multiple times.
+* `symlinks` A record of which paths are symbolic links, which is
+ relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
+
+### Events
+
+* `end` When the matching is finished, this is emitted with all the
+ matches found. If the `nonull` option is set, and no match was found,
+ then the `matches` list contains the original pattern. The matches
+ are sorted, unless the `nosort` flag is set.
+* `match` Every time a match is found, this is emitted with the matched.
+* `error` Emitted when an unexpected error is encountered, or whenever
+ any fs error occurs if `options.strict` is set.
+* `abort` When `abort()` is called, this event is raised.
+
+### Methods
+
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
+
+### Options
+
+All the options that can be passed to Minimatch can also be passed to
+Glob to change pattern matching behavior. Also, some have been added,
+or have glob-specific ramifications.
+
+All options are false by default, unless otherwise noted.
+
+All options are added to the Glob object, as well.
+
+If you are running many `glob` operations, you can pass a Glob object
+as the `options` argument to a subsequent operation to shortcut some
+`stat` and `readdir` calls. At the very least, you may pass in shared
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
+
+* `cwd` The current working directory in which to search. Defaults
+ to `process.cwd()`.
+* `root` The place where patterns starting with `/` will be mounted
+ onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
+ systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+ Note that an explicit dot in a portion of the pattern will always
+ match dot files.
+* `nomount` By default, a pattern starting with a forward-slash will be
+ "mounted" onto the root setting, so that a valid filesystem path is
+ returned. Set this flag to disable that behavior.
+* `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+* `nosort` Don't sort the results.
+* `stat` Set to true to stat *all* results. This reduces performance
+ somewhat, and is completely unnecessary, unless `readdir` is presumed
+ to be an untrustworthy indicator of file existence.
+* `silent` When an unusual error is encountered when attempting to
+ read a directory, a warning will be printed to stderr. Set the
+ `silent` option to true to suppress these warnings.
+* `strict` When an unusual error is encountered when attempting to
+ read a directory, the process will just continue on in search of
+ other matches. Set the `strict` option to raise an error in these
+ cases.
+* `cache` See `cache` property above. Pass in a previously generated
+ cache object to save some fs calls.
+* `statCache` A cache of results of filesystem information, to prevent
+ unnecessary stat calls. While it should not normally be necessary
+ to set this, you may pass the statCache from one glob() call to the
+ options object of another, if you know that the filesystem will not
+ change between calls. (See "Race Conditions" below.)
+* `symlinks` A cache of known symbolic links. You may pass in a
+ previously generated `symlinks` object to save `lstat` calls when
+ resolving `**` matches.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
+* `nounique` In some cases, brace-expanded patterns can result in the
+ same file showing up multiple times in the result set. By default,
+ this implementation prevents duplicates in the result set. Set this
+ flag to disable that behavior.
+* `nonull` Set to never return an empty set, instead returning a set
+ containing the pattern itself. This is the default in glob(3).
+* `debug` Set to enable debug logging in minimatch and glob.
+* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+* `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+* `noext` Do not match `+(a|b)` "extglob" patterns.
+* `nocase` Perform a case-insensitive match. Note: on
+ case-insensitive filesystems, non-magic patterns will match by
+ default, since `stat` and `readdir` will not raise errors.
+* `matchBase` Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, `*.js` would be treated as
+ equivalent to `**/*.js`, matching all js files in all directories.
+* `nonegate` Suppress `negate` behavior. (See below.)
+* `nocomment` Suppress `comment` behavior. (See below.)
+* `nonull` Return the pattern when no matches are found.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
+* `ignore` Add a pattern or an array of patterns to exclude matches.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between node-glob and other
+implementations, and are intentional.
+
+If the pattern starts with a `!` character, then it is negated. Set the
+`nonegate` flag to suppress this behavior, and treat leading `!`
+characters normally. This is perhaps relevant if you wish to start the
+pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
+characters at the start of a pattern will negate the pattern multiple
+times.
+
+If a pattern starts with `#`, then it is treated as a comment, and
+will not match anything. Use `\#` to match a literal `#` at the
+start of a line, or set the `nocomment` flag to suppress this behavior.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.3, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+Note that symlinked directories are not crawled as part of a `**`,
+though their contents may match against subsequent portions of the
+pattern. This prevents infinite loops and duplicates and the like.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then glob returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only `/`
+characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will always
+be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto the
+root setting using `path.join`. On windows, this will by default result
+in `/foo/*` matching `C:\foo\bar.txt`.
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race conditions,
+since it relies on directory walking and such.
+
+As a result, it is possible that a file that exists when glob looks for
+it may have been deleted or modified by the time it returns the result.
+
+As part of its internal implementation, this program caches all stat
+and readdir calls that it makes, in order to cut down on system
+overhead. However, this also makes it even more susceptible to races,
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast majority
+of operations, this is never a problem.
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# to benchmark against bash/zsh
+npm run bench
+
+# to profile javascript
+npm run prof
+```
diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/common.js b/deps/npm/node_modules/rimraf/node_modules/glob/common.js
new file mode 100644
index 0000000000..cd7c824481
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/node_modules/glob/common.js
@@ -0,0 +1,237 @@
+exports.alphasort = alphasort
+exports.alphasorti = alphasorti
+exports.isAbsolute = process.platform === "win32" ? absWin : absUnix
+exports.setopts = setopts
+exports.ownProp = ownProp
+exports.makeAbs = makeAbs
+exports.finish = finish
+exports.mark = mark
+exports.isIgnored = isIgnored
+exports.childrenIgnored = childrenIgnored
+
+function ownProp (obj, field) {
+ return Object.prototype.hasOwnProperty.call(obj, field)
+}
+
+var path = require("path")
+var minimatch = require("minimatch")
+var Minimatch = minimatch.Minimatch
+
+function absWin (p) {
+ if (absUnix(p)) return true
+ // pull off the device/UNC bit from a windows path.
+ // from node's lib/path.js
+ var splitDeviceRe =
+ /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
+ var result = splitDeviceRe.exec(p)
+ var device = result[1] || ''
+ var isUnc = device && device.charAt(1) !== ':'
+ var isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+
+ return isAbsolute
+}
+
+function absUnix (p) {
+ return p.charAt(0) === "/" || p === ""
+}
+
+function alphasorti (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase())
+}
+
+function alphasort (a, b) {
+ return a.localeCompare(b)
+}
+
+function setupIgnores (self, options) {
+ self.ignore = options.ignore || []
+
+ if (!Array.isArray(self.ignore))
+ self.ignore = [self.ignore]
+
+ if (self.ignore.length) {
+ self.ignore = self.ignore.map(ignoreMap)
+ }
+}
+
+function ignoreMap (pattern) {
+ var gmatcher = null
+ if (pattern.slice(-3) === '/**') {
+ var gpattern = pattern.replace(/(\/\*\*)+$/, '')
+ gmatcher = new Minimatch(gpattern, { nonegate: true })
+ }
+
+ return {
+ matcher: new Minimatch(pattern, { nonegate: true }),
+ gmatcher: gmatcher
+ }
+}
+
+function setopts (self, pattern, options) {
+ if (!options)
+ options = {}
+
+ // base-matching: just use globstar for that.
+ if (options.matchBase && -1 === pattern.indexOf("/")) {
+ if (options.noglobstar) {
+ throw new Error("base matching requires globstar")
+ }
+ pattern = "**/" + pattern
+ }
+
+ self.pattern = pattern
+ self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
+ self.dot = !!options.dot
+ self.mark = !!options.mark
+ self.nodir = !!options.nodir
+ if (self.nodir)
+ self.mark = true
+ self.sync = !!options.sync
+ self.nounique = !!options.nounique
+ self.nonull = !!options.nonull
+ self.nosort = !!options.nosort
+ self.nocase = !!options.nocase
+ self.stat = !!options.stat
+ self.noprocess = !!options.noprocess
+
+ self.maxLength = options.maxLength || Infinity
+ self.cache = options.cache || Object.create(null)
+ self.statCache = options.statCache || Object.create(null)
+ self.symlinks = options.symlinks || Object.create(null)
+
+ setupIgnores(self, options)
+
+ self.changedCwd = false
+ var cwd = process.cwd()
+ if (!ownProp(options, "cwd"))
+ self.cwd = cwd
+ else {
+ self.cwd = options.cwd
+ self.changedCwd = path.resolve(options.cwd) !== cwd
+ }
+
+ self.root = options.root || path.resolve(self.cwd, "/")
+ self.root = path.resolve(self.root)
+ if (process.platform === "win32")
+ self.root = self.root.replace(/\\/g, "/")
+
+ self.nomount = !!options.nomount
+
+ self.minimatch = new Minimatch(pattern, options)
+ self.options = self.minimatch.options
+}
+
+function finish (self) {
+ var nou = self.nounique
+ var all = nou ? [] : Object.create(null)
+
+ for (var i = 0, l = self.matches.length; i < l; i ++) {
+ var matches = self.matches[i]
+ if (!matches || Object.keys(matches).length === 0) {
+ if (self.nonull) {
+ // do like the shell, and spit out the literal glob
+ var literal = self.minimatch.globSet[i]
+ if (nou)
+ all.push(literal)
+ else
+ all[literal] = true
+ }
+ } else {
+ // had matches
+ var m = Object.keys(matches)
+ if (nou)
+ all.push.apply(all, m)
+ else
+ m.forEach(function (m) {
+ all[m] = true
+ })
+ }
+ }
+
+ if (!nou)
+ all = Object.keys(all)
+
+ if (!self.nosort)
+ all = all.sort(self.nocase ? alphasorti : alphasort)
+
+ // at *some* point we statted all of these
+ if (self.mark) {
+ for (var i = 0; i < all.length; i++) {
+ all[i] = self._mark(all[i])
+ }
+ if (self.nodir) {
+ all = all.filter(function (e) {
+ return !(/\/$/.test(e))
+ })
+ }
+ }
+
+ if (self.ignore.length)
+ all = all.filter(function(m) {
+ return !isIgnored(self, m)
+ })
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
+ var m = p
+ if (c) {
+ var isDir = c === 'DIR' || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
+ }
+ }
+
+ return m
+}
+
+// lotta situps...
+function makeAbs (self, f) {
+ var abs = f
+ if (f.charAt(0) === '/') {
+ abs = path.join(self.root, f)
+ } else if (exports.isAbsolute(f)) {
+ abs = f
+ } else if (self.changedCwd) {
+ abs = path.resolve(self.cwd, f)
+ } else if (self.realpath) {
+ abs = path.resolve(f)
+ }
+ return abs
+}
+
+
+// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
+// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
+function isIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
+
+function childrenIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/glob.js b/deps/npm/node_modules/rimraf/node_modules/glob/glob.js
new file mode 100644
index 0000000000..eac0693cc6
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/node_modules/glob/glob.js
@@ -0,0 +1,740 @@
+// Approach:
+//
+// 1. Get the minimatch set
+// 2. For each pattern in the set, PROCESS(pattern, false)
+// 3. Store matches per-set, then uniq them
+//
+// PROCESS(pattern, inGlobStar)
+// Get the first [n] items from pattern that are all strings
+// Join these together. This is PREFIX.
+// If there is no more remaining, then stat(PREFIX) and
+// add to matches if it succeeds. END.
+//
+// If inGlobStar and PREFIX is symlink and points to dir
+// set ENTRIES = []
+// else readdir(PREFIX) as ENTRIES
+// If fail, END
+//
+// with ENTRIES
+// If pattern[n] is GLOBSTAR
+// // handle the case where the globstar match is empty
+// // by pruning it out, and testing the resulting pattern
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
+// // handle other cases.
+// for ENTRY in ENTRIES (not dotfiles)
+// // attach globstar + tail onto the entry
+// // Mark that this entry is a globstar match
+// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
+//
+// else // not globstar
+// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
+// Test ENTRY against pattern[n]
+// If fails, continue
+// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
+//
+// Caveat:
+// Cache all stats and readdirs results to minimize syscall. Since all
+// we ever care about is existence and directory-ness, we can just keep
+// `true` for files, and [children,...] for directories, or `false` for
+// things that don't exist.
+
+module.exports = glob
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var inherits = require('inherits')
+var EE = require('events').EventEmitter
+var path = require('path')
+var assert = require('assert')
+var globSync = require('./sync.js')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var inflight = require('inflight')
+var util = require('util')
+var childrenIgnored = common.childrenIgnored
+
+var once = require('once')
+
+function glob (pattern, options, cb) {
+ if (typeof options === 'function') cb = options, options = {}
+ if (!options) options = {}
+
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
+ }
+
+ return new Glob(pattern, options, cb)
+}
+
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
+
+// old api surface
+glob.glob = glob
+
+glob.hasMagic = function (pattern, options_) {
+ var options = util._extend({}, options_)
+ options.noprocess = true
+
+ var g = new Glob(pattern, options)
+ var set = g.minimatch.set
+ if (set.length > 1)
+ return true
+
+ for (var j = 0; j < set[0].length; j++) {
+ if (typeof set[0][j] !== 'string')
+ return true
+ }
+
+ return false
+}
+
+glob.Glob = Glob
+inherits(Glob, EE)
+function Glob (pattern, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
+ }
+
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
+
+ setopts(this, pattern, options)
+ this._didRealPath = false
+
+ // process each pattern in the minimatch set
+ var n = this.minimatch.set.length
+
+ // The matches are stored as {: true,...} so that
+ // duplicates are automagically pruned.
+ // Later, we do an Object.keys() on these.
+ // Keep them as a list so we can fill in when nonull is set.
+ this.matches = new Array(n)
+
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
+ })
+ }
+
+ var self = this
+ var n = this.minimatch.set.length
+ this._processing = 0
+ this.matches = new Array(n)
+
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
+
+ if (this.noprocess)
+ return this
+
+ if (n === 0)
+ return done()
+
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
+ }
+
+ function done () {
+ --self._processing
+ if (self._processing <= 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
+
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
+ common.finish(this)
+ this.emit('end', this.found)
+}
+
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ fs.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
+Glob.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
+
+Glob.prototype.abort = function () {
+ this.aborted = true
+ this.emit('abort')
+}
+
+Glob.prototype.pause = function () {
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
+}
+
+Glob.prototype.resume = function () {
+ if (this.paused) {
+ this.emit('resume')
+ this.paused = false
+ if (this._emitQueue.length) {
+ var eq = this._emitQueue.slice(0)
+ this._emitQueue.length = 0
+ for (var i = 0; i < eq.length; i ++) {
+ var e = eq[i]
+ this._emitMatch(e[0], e[1])
+ }
+ }
+ if (this._processQueue.length) {
+ var pq = this._processQueue.slice(0)
+ this._processQueue.length = 0
+ for (var i = 0; i < pq.length; i ++) {
+ var p = pq[i]
+ this._processing--
+ this._process(p[0], p[1], p[2], p[3])
+ }
+ }
+ }
+}
+
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
+ assert(this instanceof Glob)
+ assert(typeof cb === 'function')
+
+ if (this.aborted)
+ return
+
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
+
+ //console.error('PROCESS %d', this._processing, pattern)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // see if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index, cb)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip _processing
+ if (childrenIgnored(this, read))
+ return cb()
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
+}
+
+Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return cb()
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return cb()
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return cb()
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+ this._process([e].concat(remain), index, inGlobStar, cb)
+ }
+ cb()
+}
+
+Glob.prototype._emitMatch = function (index, e) {
+ if (this.aborted)
+ return
+
+ if (this.matches[index][e])
+ return
+
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
+
+ var abs = this._makeAbs(e)
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ if (this.mark)
+ e = this._mark(e)
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
+}
+
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
+
+ if (lstatcb)
+ fs.lstat(abs, lstatcb)
+
+ function lstatcb_ (er, lstat) {
+ if (er)
+ return cb()
+
+ var isSym = lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory()) {
+ self.cache[abs] = 'FILE'
+ cb()
+ } else
+ self._readdir(abs, false, cb)
+ }
+}
+
+Glob.prototype._readdir = function (abs, inGlobStar, cb) {
+ if (this.aborted)
+ return
+
+ cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
+ if (!cb)
+ return
+
+ //console.error('RD %j %j', +inGlobStar, abs)
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs, cb)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return cb()
+
+ if (Array.isArray(c))
+ return cb(null, c)
+ }
+
+ var self = this
+ fs.readdir(abs, readdirCb(this, abs, cb))
+}
+
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
+ }
+}
+
+Glob.prototype._readdirEntries = function (abs, entries, cb) {
+ if (this.aborted)
+ return
+
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+ return cb(null, entries)
+}
+
+Glob.prototype._readdirError = function (f, er, cb) {
+ if (this.aborted)
+ return
+
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) return this.emit('error', er)
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+ return cb()
+}
+
+Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+
+Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+ //console.error('pgs2', prefix, remain[0], entries)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return cb()
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false, cb)
+
+ var isSym = this.symlinks[abs]
+ var len = entries.length
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return cb()
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true, cb)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true, cb)
+ }
+
+ cb()
+}
+
+Glob.prototype._processSimple = function (prefix, index, cb) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var self = this
+ this._stat(prefix, function (er, exists) {
+ self._processSimple2(prefix, index, er, exists, cb)
+ })
+}
+Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
+
+ //console.error('ps2', prefix, exists)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return cb()
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+ cb()
+}
+
+// Returns either 'DIR', 'FILE', or false
+Glob.prototype._stat = function (f, cb) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
+ }
+
+ var self = this
+ var statcb = inflight('stat\0' + abs, lstatcb_)
+ if (statcb)
+ fs.lstat(abs, statcb)
+
+ function lstatcb_ (er, lstat) {
+ if (lstat && lstat.isSymbolicLink()) {
+ // If it's a symlink, then treat it as the target, unless
+ // the target does not exist, then treat it as a file.
+ return fs.stat(abs, function (er, stat) {
+ if (er)
+ self._stat2(f, abs, null, lstat, cb)
+ else
+ self._stat2(f, abs, er, stat, cb)
+ })
+ } else {
+ self._stat2(f, abs, er, lstat, cb)
+ }
+ }
+}
+
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er) {
+ this.statCache[abs] = false
+ return cb()
+ }
+
+ var needDir = f.slice(-1) === '/'
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return cb(null, false, stat)
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return cb()
+
+ return cb(null, c, stat)
+}
diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/package.json b/deps/npm/node_modules/rimraf/node_modules/glob/package.json
new file mode 100644
index 0000000000..7a2cb4c634
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/node_modules/glob/package.json
@@ -0,0 +1,72 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "name": "glob",
+ "description": "a little globber",
+ "version": "4.5.3",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ },
+ "devDependencies": {
+ "mkdirp": "0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.5.0",
+ "tick": "0.0.6"
+ },
+ "scripts": {
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "npm run profclean && tap test/*.js",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
+ "bench": "bash benchmark.sh",
+ "prof": "bash prof.sh && cat profile.txt",
+ "benchclean": "bash benchclean.sh"
+ },
+ "license": "ISC",
+ "gitHead": "a4e461ab59a837eee80a4d8dbdbf5ae1054a646f",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-glob/issues"
+ },
+ "homepage": "https://github.com/isaacs/node-glob",
+ "_id": "glob@4.5.3",
+ "_shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "_from": "glob@>=4.4.2 <5.0.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c6cb73d3226c1efef04de3c56d012f03377ee15f",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/rimraf/node_modules/glob/sync.js b/deps/npm/node_modules/rimraf/node_modules/glob/sync.js
new file mode 100644
index 0000000000..f4f5e36d4b
--- /dev/null
+++ b/deps/npm/node_modules/rimraf/node_modules/glob/sync.js
@@ -0,0 +1,457 @@
+module.exports = globSync
+globSync.GlobSync = GlobSync
+
+var fs = require('fs')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var Glob = require('./glob.js').Glob
+var util = require('util')
+var path = require('path')
+var assert = require('assert')
+var common = require('./common.js')
+var alphasort = common.alphasort
+var alphasorti = common.alphasorti
+var isAbsolute = common.isAbsolute
+var setopts = common.setopts
+var ownProp = common.ownProp
+var childrenIgnored = common.childrenIgnored
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ return new GlobSync(pattern, options).found
+}
+
+function GlobSync (pattern, options) {
+ if (!pattern)
+ throw new Error('must provide pattern')
+
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ if (!(this instanceof GlobSync))
+ return new GlobSync(pattern, options)
+
+ setopts(this, pattern, options)
+
+ if (this.noprocess)
+ return this
+
+ var n = this.minimatch.set.length
+ this.matches = new Array(n)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false)
+ }
+ this._finish()
+}
+
+GlobSync.prototype._finish = function () {
+ assert(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = fs.realpathSync(p, this.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
+ common.finish(this)
+}
+
+
+GlobSync.prototype._process = function (pattern, index, inGlobStar) {
+ assert(this instanceof GlobSync)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // See if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip processing
+ if (childrenIgnored(this, read))
+ return
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
+}
+
+
+GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
+ var entries = this._readdir(abs, inGlobStar)
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix.slice(-1) !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this.matches[index][e] = true
+ }
+ // This was the last one, and no stats were needed
+ return
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix)
+ newPattern = [prefix, e]
+ else
+ newPattern = [e]
+ this._process(newPattern.concat(remain), index, inGlobStar)
+ }
+}
+
+
+GlobSync.prototype._emitMatch = function (index, e) {
+ var abs = this._makeAbs(e)
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[this._makeAbs(e)]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+ if (this.stat)
+ this._stat(e)
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
+ var entries
+ var lstat
+ var stat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ // lstat failed, doesn't exist
+ return null
+ }
+
+ var isSym = lstat.isSymbolicLink()
+ this.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && !lstat.isDirectory())
+ this.cache[abs] = 'FILE'
+ else
+ entries = this._readdir(abs, false)
+
+ return entries
+}
+
+GlobSync.prototype._readdir = function (abs, inGlobStar) {
+ var entries
+
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return null
+
+ if (Array.isArray(c))
+ return c
+ }
+
+ try {
+ return this._readdirEntries(abs, fs.readdirSync(abs))
+ } catch (er) {
+ this._readdirError(abs, er)
+ return null
+ }
+}
+
+GlobSync.prototype._readdirEntries = function (abs, entries) {
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+
+ // mark and cache dir-ness
+ return entries
+}
+
+GlobSync.prototype._readdirError = function (f, er) {
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ this.cache[this._makeAbs(f)] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) throw er
+ if (!this.silent) console.error('glob error', er)
+ break
+ }
+}
+
+GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
+
+ var entries = this._readdir(abs, inGlobStar)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false)
+
+ var len = entries.length
+ var isSym = this.symlinks[abs]
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true)
+ }
+}
+
+GlobSync.prototype._processSimple = function (prefix, index) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var exists = this._stat(prefix)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this.matches[index][prefix] = true
+}
+
+// Returns either 'DIR', 'FILE', or false
+GlobSync.prototype._stat = function (f) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ var lstat
+ try {
+ lstat = fs.lstatSync(abs)
+ } catch (er) {
+ return false
+ }
+
+ if (lstat.isSymbolicLink()) {
+ try {
+ stat = fs.statSync(abs)
+ } catch (er) {
+ stat = lstat
+ }
+ } else {
+ stat = lstat
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c !== 'DIR')
+ return false
+
+ return c
+}
+
+GlobSync.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+GlobSync.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 5ac08e8c71..0a75480c7a 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "2.7.3",
+ "version": "2.7.4",
"name": "npm",
"description": "a package manager for JavaScript",
"keywords": [
@@ -50,11 +50,12 @@
"fs-vacuum": "~1.2.5",
"fs-write-stream-atomic": "~1.0.2",
"fstream": "~1.0.4",
- "fstream-npm": "~1.0.1",
+ "fstream-npm": "~1.0.2",
"github-url-from-git": "~1.4.0",
"github-url-from-username-repo": "~1.0.2",
- "glob": "~4.4.2",
+ "glob": "~5.0.3",
"graceful-fs": "~3.0.6",
+ "hosted-git-info": "~1.5.3",
"inflight": "~1.0.4",
"inherits": "~2.0.1",
"ini": "~1.3.3",
@@ -69,10 +70,10 @@
"normalize-package-data": "~1.0.3",
"npm-cache-filename": "~1.0.1",
"npm-install-checks": "~1.0.5",
- "npm-package-arg": "~2.1.3",
- "npm-registry-client": "~6.1.1",
+ "npm-package-arg": "~3.1.1",
+ "npm-registry-client": "~6.1.2",
"npm-user-validate": "~0.1.1",
- "npmlog": "~0.1.1",
+ "npmlog": "~1.2.0",
"once": "~1.3.1",
"opener": "~1.4.0",
"osenv": "~0.1.0",
@@ -81,7 +82,7 @@
"read-installed": "~3.1.5",
"read-package-json": "~1.3.2",
"readable-stream": "~1.0.33",
- "realize-package-specifier": "~1.3.0",
+ "realize-package-specifier": "~2.2.0",
"request": "~2.53.0",
"retry": "~0.6.1",
"rimraf": "~2.3.2",
@@ -122,6 +123,7 @@
"github-url-from-username-repo",
"glob",
"graceful-fs",
+ "hosted-git-info",
"inflight",
"inherits",
"ini",
@@ -167,8 +169,8 @@
"devDependencies": {
"marked": "~0.3.3",
"marked-man": "~0.1.4",
- "nock": "~1.1.0",
- "npm-registry-couchapp": "~2.6.2",
+ "nock": "~1.2.0",
+ "npm-registry-couchapp": "~2.6.7",
"npm-registry-mock": "~1.0.0",
"require-inject": "~1.1.0",
"sprintf-js": "~1.0.2",
diff --git a/deps/npm/test/tap/adduser-legacy-auth.js b/deps/npm/test/tap/adduser-legacy-auth.js
index abed823872..9090c67b40 100644
--- a/deps/npm/test/tap/adduser-legacy-auth.js
+++ b/deps/npm/test/tap/adduser-legacy-auth.js
@@ -12,6 +12,7 @@ var pkg = path.resolve(__dirname, "adduser-legacy-auth")
var outfile = path.resolve(pkg, "_npmrc")
var contents = "_auth=" + new Buffer("u:x").toString("base64") + "\n" +
+ "registry=https://nonexistent.lvh.me/registry\n" +
"email=u@p.me\n"
var responses = {
diff --git a/deps/npm/test/tap/bundled-dependencies-nonarray.js b/deps/npm/test/tap/bundled-dependencies-nonarray.js
new file mode 100644
index 0000000000..938aa629a5
--- /dev/null
+++ b/deps/npm/test/tap/bundled-dependencies-nonarray.js
@@ -0,0 +1,77 @@
+var fs = require('graceful-fs')
+var path = require('path')
+
+var osenv = require('osenv')
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var test = require('tap').test
+
+var npm = require('../../lib/npm.js')
+var common = require('../common-tap.js')
+
+var dir = path.resolve(__dirname, 'bundleddependencies')
+var pkg = path.resolve(dir, 'pkg-with-bundled')
+var dep = path.resolve(dir, 'a-bundled-dep')
+
+test('setup', function (t) {
+ bootstrap()
+ t.end()
+})
+
+test('errors on non-array bundleddependencies', function (t) {
+ t.plan(6)
+ process.chdir(pkg)
+ npm.load({},
+ function () {
+ common.npm(['install'], { cwd: pkg }, function (err, code, stdout, stderr) {
+ t.ifError(err, 'npm install ran without issue')
+ t.notOk(code, 'exited with a non-error code')
+ t.notOk(stderr, 'no error output')
+
+ common.npm(['install', './pkg-with-bundled'], { cwd: dir },
+ function (err, code, stdout, stderr) {
+ t.ifError(err, 'npm install ran without issue')
+ t.ok(code, 'exited with a error code')
+ t.ok(stderr.indexOf('be an array') > -1, 'nice error output')
+ }
+ )
+ })
+ }
+ )
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
+
+var pj = JSON.stringify({
+ name: 'pkg-with-bundled',
+ version: '1.0.0',
+ dependencies: {
+ 'a-bundled-dep': 'file:../a-bundled-dep'
+ },
+ bundledDependencies: {
+ 'a-bundled-dep': 'file:../a-bundled-dep'
+ }
+}, null, 2) + '\n'
+
+var pjDep = JSON.stringify({
+ name: 'a-bundled-dep',
+ version: '2.0.0'
+}, null, 2) + '\n'
+
+function bootstrap () {
+ mkdirp.sync(dir)
+
+ mkdirp.sync(pkg)
+ fs.writeFileSync(path.resolve(pkg, 'package.json'), pj)
+
+ mkdirp.sync(dep)
+ fs.writeFileSync(path.resolve(dep, 'package.json'), pjDep)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(dir)
+}
diff --git a/deps/npm/test/tap/config-meta.js b/deps/npm/test/tap/config-meta.js
index faced80d99..5e0c1b7e7c 100644
--- a/deps/npm/test/tap/config-meta.js
+++ b/deps/npm/test/tap/config-meta.js
@@ -57,9 +57,9 @@ test("get lines", function (t) {
matches.shift()
matches.forEach(function (m) {
m = m.split(")").shift()
- var literal = m.match(/^['"].+['"]$/)
+ var literal = m.match(/^['"].+?['"]/)
if (literal) {
- m = m.slice(1, -1)
+ m = literal[0].slice(1, -1)
if (!m.match(/^\_/) && m !== "argv")
CONFS[m] = {
file: f,
diff --git a/deps/npm/test/tap/outdated-git.js b/deps/npm/test/tap/outdated-git.js
index cc89ff19d9..32bfead672 100644
--- a/deps/npm/test/tap/outdated-git.js
+++ b/deps/npm/test/tap/outdated-git.js
@@ -1,31 +1,59 @@
-var common = require("../common-tap.js")
-var test = require("tap").test
-var npm = require("../../")
-var mkdirp = require("mkdirp")
-var rimraf = require("rimraf")
-var path = require("path")
+var fs = require('graceful-fs')
+var path = require('path')
+
+var test = require('tap').test
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+
+var common = require('../common-tap.js')
+var npm = require('../../')
// config
-var pkg = path.resolve(__dirname, "outdated-git")
-var cache = path.resolve(pkg, "cache")
-mkdirp.sync(cache)
+var pkg = path.resolve(__dirname, 'outdated-git')
+var cache = path.resolve(pkg, 'cache')
+test('setup', function (t) {
+ setup()
+ t.end()
+})
-test("dicovers new versions in outdated", function (t) {
+test('discovers new versions in outdated', function (t) {
process.chdir(pkg)
t.plan(5)
- npm.load({cache: cache, registry: common.registry}, function () {
+ npm.load({cache: cache, registry: common.registry, loglevel: 'silent'}, function () {
npm.commands.outdated([], function (er, d) {
- t.equal("git", d[0][3])
- t.equal("git", d[0][4])
- t.equal("git://github.com/robertkowalski/foo-private.git", d[0][5])
- t.equal("git://user:pass@github.com/robertkowalski/foo-private.git", d[1][5])
- t.equal("git+https://github.com/robertkowalski/foo", d[2][5])
+ t.equal('git', d[0][3])
+ t.equal('git', d[0][4])
+ t.equal('git://github.com/robertkowalski/foo-private.git', d[0][5])
+ t.equal('git://user:pass@github.com/robertkowalski/foo-private.git', d[1][5])
+ t.equal('git+https://github.com/robertkowalski/foo', d[2][5])
})
})
})
-test("cleanup", function (t) {
- rimraf.sync(cache)
+test('cleanup', function (t) {
+ cleanup()
t.end()
})
+
+var json = {
+ name: 'outdated-git',
+ author: 'Rocko Artischocko',
+ description: 'fixture',
+ version: '0.0.1',
+ main: 'index.js',
+ dependencies: {
+ 'foo-private': 'git://github.com/robertkowalski/foo-private.git',
+ 'foo-private-credentials': 'git://user:pass@github.com/robertkowalski/foo-private.git',
+ 'foo-github': 'robertkowalski/foo'
+ }
+}
+
+function setup () {
+ mkdirp.sync(cache)
+ fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2), 'utf8')
+}
+
+function cleanup () {
+ rimraf.sync(pkg)
+}
diff --git a/deps/npm/test/tap/outdated-git/README.md b/deps/npm/test/tap/outdated-git/README.md
deleted file mode 100644
index d173390cb0..0000000000
--- a/deps/npm/test/tap/outdated-git/README.md
+++ /dev/null
@@ -1 +0,0 @@
-just a test
diff --git a/deps/npm/test/tap/outdated-git/package.json b/deps/npm/test/tap/outdated-git/package.json
deleted file mode 100644
index 209936dde6..0000000000
--- a/deps/npm/test/tap/outdated-git/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "outdated-git",
- "author": "Rocko Artischocko",
- "description": "fixture",
- "version": "0.0.1",
- "main": "index.js",
- "dependencies": {
- "foo-private": "git://github.com/robertkowalski/foo-private.git",
- "foo-private-credentials": "git://user:pass@github.com/robertkowalski/foo-private.git",
- "foo-github": "robertkowalski/foo"
- }
-}
diff --git a/deps/npm/test/tap/version-message-config.js b/deps/npm/test/tap/version-message-config.js
new file mode 100644
index 0000000000..7ce3b4c6bc
--- /dev/null
+++ b/deps/npm/test/tap/version-message-config.js
@@ -0,0 +1,88 @@
+var common = require('../common-tap.js')
+var fs = require('fs')
+var path = require('path')
+
+var chain = require('slide').chain
+var mkdirp = require('mkdirp')
+var osenv = require('osenv')
+var rimraf = require('rimraf')
+var test = require('tap').test
+
+var npm = require('../../lib/npm.js')
+
+var pkg = path.resolve(__dirname, 'version-message-config')
+var cache = path.resolve(pkg, 'cache')
+var npmrc = path.resolve(pkg, '.npmrc')
+var packagePath = path.resolve(pkg, 'package.json')
+
+var json = { name: 'blah', version: '0.1.2' }
+
+var configContents = 'sign-git-tag=false\nmessage=":bookmark: %s"\n'
+
+test('npm version with message config', function (t) {
+ setup()
+
+ npm.load({ prefix: pkg, userconfig: npmrc }, function () {
+ var git = require('../../lib/utils/git.js')
+
+ var opts = { cwd: pkg, env: { PATH: process.env.PATH } }
+ chain(
+ [
+ git.chainableExec(['init'], opts),
+ git.chainableExec(['config', 'user.name', 'PhantomFaker'], opts),
+ git.chainableExec(['config', 'user.email', 'nope@not.real'], opts),
+ git.chainableExec(['add', 'package.json'], opts),
+ git.chainableExec(['add', '.npmrc'], opts),
+ git.chainableExec(['commit', '-m', 'stub package'], opts)
+ ],
+ function (er) {
+ t.ifErr(er, 'git bootstrap ran without error')
+
+ common.npm(
+ [
+ 'version',
+ 'patch',
+ '--loglevel', 'silent'
+ // package config is picked up from env
+ ],
+ opts,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, 'npm version ran without issue')
+ t.notOk(code, 'exited with a non-error code')
+ t.notOk(stderr, 'no error output')
+
+ git.whichAndExec(
+ ['log'],
+ { cwd: pkg, env: process.env },
+ function (er, log, stderr) {
+ t.ok(log.match(/:bookmark: 0\.1\.3/g), 'config was picked up by version')
+ t.end()
+ }
+ )
+ }
+ )
+ }
+ )
+ })
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
+
+function cleanup () {
+ // windows fix for locked files
+ process.chdir(osenv.tmpdir())
+
+ rimraf.sync(pkg)
+}
+
+function setup () {
+ cleanup()
+ mkdirp.sync(cache)
+ process.chdir(pkg)
+
+ fs.writeFileSync(packagePath, JSON.stringify(json), 'utf8')
+ fs.writeFileSync(npmrc, configContents, 'ascii')
+}