summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorForrest L Norvell <forrest@npmjs.com>2015-03-27 04:07:44 -0700
committerJulien Gilli <julien.gilli@joyent.com>2015-03-27 16:43:35 -0700
commit2704c6293303dd038b60ea9bc035f05e8736203a (patch)
tree187709dc6826b92214e61f378f93e21ec085b0ae
parent13e1131406b2239f99962ecc05b8179aa781d0f8 (diff)
downloadnode-new-2704c6293303dd038b60ea9bc035f05e8736203a.tar.gz
deps: upgrade npm to 2.7.4
Reviewed-By: Julien Gilli <julien.gilli@joyent.com> PR-URL: https://github.com/joyent/node/pull/14180
-rw-r--r--deps/npm/.mailmap13
-rw-r--r--deps/npm/AUTHORS351
-rw-r--r--deps/npm/CHANGELOG.md195
-rw-r--r--deps/npm/doc/cli/npm-install.md2
-rw-r--r--deps/npm/doc/cli/npm-link.md3
-rw-r--r--deps/npm/doc/cli/npm-run-script.md7
-rw-r--r--deps/npm/html/doc/README.html4
-rw-r--r--deps/npm/html/doc/api/npm-bin.html2
-rw-r--r--deps/npm/html/doc/api/npm-bugs.html2
-rw-r--r--deps/npm/html/doc/api/npm-cache.html2
-rw-r--r--deps/npm/html/doc/api/npm-commands.html2
-rw-r--r--deps/npm/html/doc/api/npm-config.html2
-rw-r--r--deps/npm/html/doc/api/npm-deprecate.html2
-rw-r--r--deps/npm/html/doc/api/npm-docs.html2
-rw-r--r--deps/npm/html/doc/api/npm-edit.html2
-rw-r--r--deps/npm/html/doc/api/npm-explore.html2
-rw-r--r--deps/npm/html/doc/api/npm-help-search.html2
-rw-r--r--deps/npm/html/doc/api/npm-init.html2
-rw-r--r--deps/npm/html/doc/api/npm-install.html2
-rw-r--r--deps/npm/html/doc/api/npm-link.html2
-rw-r--r--deps/npm/html/doc/api/npm-load.html2
-rw-r--r--deps/npm/html/doc/api/npm-ls.html2
-rw-r--r--deps/npm/html/doc/api/npm-outdated.html2
-rw-r--r--deps/npm/html/doc/api/npm-owner.html2
-rw-r--r--deps/npm/html/doc/api/npm-pack.html2
-rw-r--r--deps/npm/html/doc/api/npm-prefix.html2
-rw-r--r--deps/npm/html/doc/api/npm-prune.html2
-rw-r--r--deps/npm/html/doc/api/npm-publish.html2
-rw-r--r--deps/npm/html/doc/api/npm-rebuild.html2
-rw-r--r--deps/npm/html/doc/api/npm-repo.html2
-rw-r--r--deps/npm/html/doc/api/npm-restart.html2
-rw-r--r--deps/npm/html/doc/api/npm-root.html2
-rw-r--r--deps/npm/html/doc/api/npm-run-script.html2
-rw-r--r--deps/npm/html/doc/api/npm-search.html2
-rw-r--r--deps/npm/html/doc/api/npm-shrinkwrap.html2
-rw-r--r--deps/npm/html/doc/api/npm-start.html2
-rw-r--r--deps/npm/html/doc/api/npm-stop.html2
-rw-r--r--deps/npm/html/doc/api/npm-tag.html2
-rw-r--r--deps/npm/html/doc/api/npm-test.html2
-rw-r--r--deps/npm/html/doc/api/npm-uninstall.html2
-rw-r--r--deps/npm/html/doc/api/npm-unpublish.html2
-rw-r--r--deps/npm/html/doc/api/npm-update.html2
-rw-r--r--deps/npm/html/doc/api/npm-version.html2
-rw-r--r--deps/npm/html/doc/api/npm-view.html2
-rw-r--r--deps/npm/html/doc/api/npm-whoami.html2
-rw-r--r--deps/npm/html/doc/api/npm.html4
-rw-r--r--deps/npm/html/doc/cli/npm-access.html2
-rw-r--r--deps/npm/html/doc/cli/npm-adduser.html2
-rw-r--r--deps/npm/html/doc/cli/npm-bin.html2
-rw-r--r--deps/npm/html/doc/cli/npm-bugs.html2
-rw-r--r--deps/npm/html/doc/cli/npm-build.html2
-rw-r--r--deps/npm/html/doc/cli/npm-bundle.html2
-rw-r--r--deps/npm/html/doc/cli/npm-cache.html2
-rw-r--r--deps/npm/html/doc/cli/npm-completion.html2
-rw-r--r--deps/npm/html/doc/cli/npm-config.html2
-rw-r--r--deps/npm/html/doc/cli/npm-dedupe.html2
-rw-r--r--deps/npm/html/doc/cli/npm-deprecate.html2
-rw-r--r--deps/npm/html/doc/cli/npm-dist-tag.html2
-rw-r--r--deps/npm/html/doc/cli/npm-docs.html2
-rw-r--r--deps/npm/html/doc/cli/npm-edit.html2
-rw-r--r--deps/npm/html/doc/cli/npm-explore.html2
-rw-r--r--deps/npm/html/doc/cli/npm-help-search.html2
-rw-r--r--deps/npm/html/doc/cli/npm-help.html2
-rw-r--r--deps/npm/html/doc/cli/npm-init.html2
-rw-r--r--deps/npm/html/doc/cli/npm-install.html6
-rw-r--r--deps/npm/html/doc/cli/npm-link.html5
-rw-r--r--deps/npm/html/doc/cli/npm-logout.html2
-rw-r--r--deps/npm/html/doc/cli/npm-ls.html4
-rw-r--r--deps/npm/html/doc/cli/npm-outdated.html2
-rw-r--r--deps/npm/html/doc/cli/npm-owner.html2
-rw-r--r--deps/npm/html/doc/cli/npm-pack.html2
-rw-r--r--deps/npm/html/doc/cli/npm-prefix.html2
-rw-r--r--deps/npm/html/doc/cli/npm-prune.html2
-rw-r--r--deps/npm/html/doc/cli/npm-publish.html2
-rw-r--r--deps/npm/html/doc/cli/npm-rebuild.html2
-rw-r--r--deps/npm/html/doc/cli/npm-repo.html2
-rw-r--r--deps/npm/html/doc/cli/npm-restart.html2
-rw-r--r--deps/npm/html/doc/cli/npm-rm.html2
-rw-r--r--deps/npm/html/doc/cli/npm-root.html2
-rw-r--r--deps/npm/html/doc/cli/npm-run-script.html8
-rw-r--r--deps/npm/html/doc/cli/npm-search.html2
-rw-r--r--deps/npm/html/doc/cli/npm-shrinkwrap.html2
-rw-r--r--deps/npm/html/doc/cli/npm-star.html2
-rw-r--r--deps/npm/html/doc/cli/npm-stars.html2
-rw-r--r--deps/npm/html/doc/cli/npm-start.html2
-rw-r--r--deps/npm/html/doc/cli/npm-stop.html2
-rw-r--r--deps/npm/html/doc/cli/npm-tag.html2
-rw-r--r--deps/npm/html/doc/cli/npm-test.html2
-rw-r--r--deps/npm/html/doc/cli/npm-uninstall.html2
-rw-r--r--deps/npm/html/doc/cli/npm-unpublish.html2
-rw-r--r--deps/npm/html/doc/cli/npm-update.html2
-rw-r--r--deps/npm/html/doc/cli/npm-version.html2
-rw-r--r--deps/npm/html/doc/cli/npm-view.html2
-rw-r--r--deps/npm/html/doc/cli/npm-whoami.html2
-rw-r--r--deps/npm/html/doc/cli/npm.html10
-rw-r--r--deps/npm/html/doc/files/npm-folders.html2
-rw-r--r--deps/npm/html/doc/files/npm-global.html2
-rw-r--r--deps/npm/html/doc/files/npm-json.html2
-rw-r--r--deps/npm/html/doc/files/npmrc.html2
-rw-r--r--deps/npm/html/doc/files/package.json.html2
-rw-r--r--deps/npm/html/doc/index.html2
-rw-r--r--deps/npm/html/doc/misc/npm-coding-style.html2
-rw-r--r--deps/npm/html/doc/misc/npm-config.html2
-rw-r--r--deps/npm/html/doc/misc/npm-developers.html2
-rw-r--r--deps/npm/html/doc/misc/npm-disputes.html8
-rw-r--r--deps/npm/html/doc/misc/npm-faq.html4
-rw-r--r--deps/npm/html/doc/misc/npm-index.html2
-rw-r--r--deps/npm/html/doc/misc/npm-registry.html2
-rw-r--r--deps/npm/html/doc/misc/npm-scope.html2
-rw-r--r--deps/npm/html/doc/misc/npm-scripts.html2
-rw-r--r--deps/npm/html/doc/misc/removing-npm.html2
-rw-r--r--deps/npm/html/doc/misc/semver.html2
-rw-r--r--deps/npm/html/partial/doc/README.html2
-rw-r--r--deps/npm/html/partial/doc/api/npm.html2
-rw-r--r--deps/npm/html/partial/doc/cli/npm-install.html4
-rw-r--r--deps/npm/html/partial/doc/cli/npm-link.html3
-rw-r--r--deps/npm/html/partial/doc/cli/npm-ls.html2
-rw-r--r--deps/npm/html/partial/doc/cli/npm-run-script.html6
-rw-r--r--deps/npm/html/partial/doc/cli/npm.html8
-rw-r--r--deps/npm/html/partial/doc/misc/npm-disputes.html6
-rw-r--r--deps/npm/html/partial/doc/misc/npm-faq.html2
-rw-r--r--deps/npm/lib/adduser.js3
-rw-r--r--deps/npm/lib/cache.js8
-rw-r--r--deps/npm/lib/cache/add-named.js7
-rw-r--r--deps/npm/lib/cache/add-remote-git.js532
-rw-r--r--deps/npm/lib/cache/add-remote-tarball.js2
-rw-r--r--deps/npm/lib/cache/maybe-github.js17
-rw-r--r--deps/npm/lib/config/defaults.js15
-rw-r--r--deps/npm/lib/dedupe.js27
-rw-r--r--deps/npm/lib/install.js148
-rw-r--r--deps/npm/lib/link.js20
-rw-r--r--deps/npm/lib/npm.js1
-rw-r--r--deps/npm/lib/outdated.js6
-rw-r--r--deps/npm/lib/publish.js13
-rw-r--r--deps/npm/lib/shrinkwrap.js8
-rw-r--r--deps/npm/lib/stars.js11
-rw-r--r--deps/npm/lib/update.js20
-rw-r--r--deps/npm/lib/utils/error-handler.js3
-rw-r--r--deps/npm/lib/utils/gently-rm.js159
-rw-r--r--deps/npm/lib/whoami.js24
-rw-r--r--deps/npm/man/man1/npm-install.14
-rw-r--r--deps/npm/man/man1/npm-link.13
-rw-r--r--deps/npm/man/man1/npm-ls.12
-rw-r--r--deps/npm/man/man1/npm-run-script.17
-rw-r--r--deps/npm/man/man1/npm.12
-rw-r--r--deps/npm/man/man3/npm.32
-rw-r--r--deps/npm/node_modules/fstream-npm/.npmignore1
-rw-r--r--deps/npm/node_modules/fstream-npm/example/dir-tar.js18
-rw-r--r--deps/npm/node_modules/fstream-npm/example/dir.js26
-rw-r--r--deps/npm/node_modules/fstream-npm/example/example.js14
-rw-r--r--deps/npm/node_modules/fstream-npm/example/ig-tar.js18
-rw-r--r--deps/npm/node_modules/fstream-npm/example/tar.js20
-rw-r--r--deps/npm/node_modules/fstream-npm/fstream-npm.js140
-rw-r--r--deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json3
-rw-r--r--deps/npm/node_modules/fstream-npm/package.json37
-rw-r--r--deps/npm/node_modules/glob/README.md62
-rw-r--r--deps/npm/node_modules/glob/common.js44
-rw-r--r--deps/npm/node_modules/glob/glob.js167
-rw-r--r--deps/npm/node_modules/glob/package.json21
-rw-r--r--deps/npm/node_modules/glob/sync.js94
-rw-r--r--deps/npm/node_modules/graceful-fs/package.json20
-rw-r--r--deps/npm/node_modules/graceful-fs/polyfills.js2
-rw-r--r--deps/npm/node_modules/hosted-git-info/.npmignore (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.npmignore)0
-rw-r--r--deps/npm/node_modules/hosted-git-info/.travis.yml (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.travis.yml)0
-rw-r--r--deps/npm/node_modules/hosted-git-info/README.md (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md)1
-rw-r--r--deps/npm/node_modules/hosted-git-info/README.md~87
-rw-r--r--deps/npm/node_modules/hosted-git-info/index.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/index.js)0
-rw-r--r--deps/npm/node_modules/hosted-git-info/package.json (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json)2
-rw-r--r--deps/npm/node_modules/hosted-git-info/test/basic.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/basic.js)0
-rw-r--r--deps/npm/node_modules/hosted-git-info/test/bitbucket.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js)1
-rw-r--r--deps/npm/node_modules/hosted-git-info/test/gist.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js)1
-rw-r--r--deps/npm/node_modules/hosted-git-info/test/github.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js)1
-rw-r--r--deps/npm/node_modules/hosted-git-info/test/gitlab.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js)1
-rw-r--r--deps/npm/node_modules/hosted-git-info/test/lib/standard-tests.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/lib/standard-tests.js)0
-rw-r--r--deps/npm/node_modules/inflight/.eslintrc17
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/glob/LICENSE (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE)2
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/glob/README.md369
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/glob/common.js237
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/glob/glob.js740
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/glob/package.json72
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/glob/sync.js457
-rw-r--r--deps/npm/node_modules/init-package-json/package.json27
-rw-r--r--deps/npm/node_modules/minimatch/.npmignore1
-rw-r--r--deps/npm/node_modules/minimatch/benchmark.js15
-rw-r--r--deps/npm/node_modules/minimatch/browser.js115
-rw-r--r--deps/npm/node_modules/minimatch/minimatch.js23
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md7
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE18
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown2
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js6
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json69
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js2
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json26
-rw-r--r--deps/npm/node_modules/minimatch/package.json29
-rw-r--r--deps/npm/node_modules/minimatch/test/basic.js399
-rw-r--r--deps/npm/node_modules/minimatch/test/brace-expand.js45
-rw-r--r--deps/npm/node_modules/minimatch/test/defaults.js274
-rw-r--r--deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js8
-rw-r--r--deps/npm/node_modules/node-gyp/README.md13
-rw-r--r--deps/npm/node_modules/node-gyp/lib/build.js10
-rw-r--r--deps/npm/node_modules/node-gyp/lib/node-gyp.js4
-rw-r--r--deps/npm/node_modules/node-gyp/lib/rebuild.js2
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/LICENSE15
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/README.md369
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/common.js237
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/glob.js740
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE23
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md216
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/browser.js1114
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js868
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore2
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml (renamed from deps/npm/node_modules/minimatch/.travis.yml)3
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md121
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js7
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js (renamed from deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.bak)20
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore2
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml4
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile5
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md80
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js4
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js38
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json73
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js56
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml4
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE18
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown62
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js6
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js13
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json83
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js39
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json75
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js32
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt1075
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt182
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js9
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js9
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh24
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js15
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js15
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js9
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js12
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js7
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js49
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json63
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/package.json72
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/glob/sync.js457
-rw-r--r--deps/npm/node_modules/node-gyp/package.json24
-rw-r--r--deps/npm/node_modules/normalize-git-url/.eslintrc19
-rw-r--r--deps/npm/node_modules/npm-package-arg/README.md76
-rw-r--r--deps/npm/node_modules/npm-package-arg/npa.js74
-rw-r--r--deps/npm/node_modules/npm-package-arg/package.json39
-rw-r--r--deps/npm/node_modules/npm-package-arg/test/basic.js59
-rw-r--r--deps/npm/node_modules/npm-package-arg/test/bitbucket.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/bitbucket.js)0
-rw-r--r--deps/npm/node_modules/npm-package-arg/test/github.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/github.js)0
-rw-r--r--deps/npm/node_modules/npm-package-arg/test/gitlab.js (renamed from deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/gitlab.js)0
-rw-r--r--deps/npm/node_modules/npm-package-arg/test/windows.js28
-rw-r--r--deps/npm/node_modules/npm-registry-client/index.js45
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/access.js24
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/adduser.js82
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/attempt.js11
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/authify.js11
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/deprecate.js30
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js40
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js32
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js34
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js36
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js36
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/fetch.js66
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/get.js14
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/initialize.js65
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/logout.js20
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/publish.js126
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/request.js167
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/star.js39
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/stars.js16
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/tag.js24
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/unpublish.js67
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/whoami.js14
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json5
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md101
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js181
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json63
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js168
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js41
-rw-r--r--deps/npm/node_modules/npm-registry-client/package.json13
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/00-setup.js10
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/access.js72
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser-new.js58
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser-update.js59
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser.js128
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/config-defaults.js46
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/config-override.js64
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/deprecate.js116
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js116
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js76
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js92
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js94
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js97
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-404.js34
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-408.js38
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-503.js38
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-authed.js48
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-basic.js78
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js49
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js46
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json1
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json1
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgzbin0 -> 58692 bytes
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json1
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/get-basic.js64
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/get-error-403.js26
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/initialize.js91
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/lib/common.js14
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/lib/server.js17
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/logout.js46
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js86
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-again.js84
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js54
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js60
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-scoped.js68
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish.js176
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/redirects.js38
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js48
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/request.js218
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/retries.js42
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/star.js164
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/stars.js70
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/tag.js99
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js64
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/unpublish.js78
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/whoami.js50
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/zz-cleanup.js10
-rw-r--r--deps/npm/node_modules/npmlog/README.md42
-rw-r--r--deps/npm/node_modules/npmlog/log.js93
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/.npmignore3
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/README.md183
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/index.js130
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/.npmignore1
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/History.md16
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Makefile8
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/Readme.md94
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/index.js121
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/package.json49
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates/test/index.js94
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/package.json51
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/tracker.js56
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackergroup.js87
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/are-we-there-yet/test/trackerstream.js65
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/.npmignore32
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/LICENSE13
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/README.md161
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/README.md~153
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/example.pngbin0 -> 19689 bytes
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/.npmignore32
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/LICENSE13
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md39
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/README.md~4
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/index.js18
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/package.json53
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/test/index.js26
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/LICENSE.txt22
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/README.md20
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/index.js25
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._basetostring/package.json72
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/LICENSE.txt22
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/README.md20
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/index.js40
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/LICENSE.txt22
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/README.md20
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/index.js57
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/node_modules/lodash.repeat/package.json81
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash._createpad/package.json91
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/LICENSE.txt22
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/README.md20
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/index.js58
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.pad/package.json82
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/LICENSE.txt22
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/README.md20
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/index.js40
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padleft/package.json82
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/LICENSE.txt22
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/README.md20
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/index.js40
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/lodash.padright/package.json82
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/package.json60
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js209
-rw-r--r--deps/npm/node_modules/npmlog/node_modules/gauge/test/progress-bar.js148
-rw-r--r--deps/npm/node_modules/npmlog/package.json39
-rw-r--r--deps/npm/node_modules/npmlog/test/progress.js114
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/.eslintrc17
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/glob/LICENSE15
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/glob/README.md369
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/glob/common.js237
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/glob/glob.js740
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/glob/package.json72
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/glob/sync.js457
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.editorconfig14
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.npmignore28
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/LICENSE21
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/README.md29
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/index.js21
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.editorconfig19
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.npmignore6
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/README.md242
-rwxr-xr-xdeps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/benchmark.js40
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/package.json9
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/Grammar.md219
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/JSON5.md50
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/index.js32
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/analyze.js91
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/document.js484
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/parse.js751
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/stringify.js382
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js71
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js45
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.json63
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml45
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/portable-json5-tests.yaml916
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_analyze.js52
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_document.js214
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_errors.js55
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_parse.js170
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_portable.js59
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_stringify.js89
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_tokenize.js98
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_updates.js21
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/author.yaml30
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/deep-object.yaml35
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/delete.yaml35
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-array.yaml31
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-object.yaml31
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/npm-array-bin.yaml28
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/pkg-json5.yaml35
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/package.json61
-rw-r--r--deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/test/test.js32
-rw-r--r--deps/npm/node_modules/read-package-json/package.json24
-rw-r--r--deps/npm/node_modules/read-package-json/read-json.js5
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/emptybin.json2
-rw-r--r--deps/npm/node_modules/read-package-json/test/fixtures/erroneous.json4
-rw-r--r--deps/npm/node_modules/read-package-json/test/helpful.js17
-rw-r--r--deps/npm/node_modules/realize-package-specifier/README.md15
-rw-r--r--deps/npm/node_modules/realize-package-specifier/package.json33
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/basic.js10
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/npa-basic.js71
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/npa-bitbucket.js86
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/npa-github.js110
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/npa-gitlab.js86
-rw-r--r--deps/npm/node_modules/request/.eslintrc39
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/.jshintrc59
-rw-r--r--deps/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/xtend/.jshintrc30
-rw-r--r--deps/npm/node_modules/request/node_modules/har-validator/node_modules/require-directory/.jshintrc67
-rw-r--r--deps/npm/node_modules/request/node_modules/isstream/.jshintrc59
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/.jshintrc10
-rw-r--r--deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc5
-rw-r--r--deps/npm/node_modules/rimraf/AUTHORS6
-rw-r--r--deps/npm/node_modules/rimraf/README.md10
-rw-r--r--deps/npm/node_modules/rimraf/node_modules/glob/LICENSE15
-rw-r--r--deps/npm/node_modules/rimraf/node_modules/glob/README.md369
-rw-r--r--deps/npm/node_modules/rimraf/node_modules/glob/common.js237
-rw-r--r--deps/npm/node_modules/rimraf/node_modules/glob/glob.js740
-rw-r--r--deps/npm/node_modules/rimraf/node_modules/glob/package.json72
-rw-r--r--deps/npm/node_modules/rimraf/node_modules/glob/sync.js457
-rw-r--r--deps/npm/node_modules/rimraf/package.json48
-rw-r--r--deps/npm/node_modules/rimraf/rimraf.js173
-rw-r--r--deps/npm/node_modules/rimraf/test/run.sh16
-rw-r--r--deps/npm/node_modules/rimraf/test/setup.sh47
-rw-r--r--deps/npm/node_modules/rimraf/test/test-async.js5
-rw-r--r--deps/npm/node_modules/rimraf/test/test-sync.js3
-rw-r--r--deps/npm/package.json32
-rwxr-xr-xdeps/npm/scripts/update-authors.sh20
-rw-r--r--deps/npm/test/tap/add-remote-git-fake-windows.js4
-rw-r--r--deps/npm/test/tap/add-remote-git-shrinkwrap.js171
-rw-r--r--deps/npm/test/tap/adduser-legacy-auth.js1
-rw-r--r--deps/npm/test/tap/bundled-dependencies-nonarray.js77
-rw-r--r--deps/npm/test/tap/config-meta.js4
-rw-r--r--deps/npm/test/tap/config-semver-tag.js27
-rw-r--r--deps/npm/test/tap/dedupe-scoped.js146
-rw-r--r--deps/npm/test/tap/git-dependency-install-link.js184
-rw-r--r--deps/npm/test/tap/outdated-git.js64
-rw-r--r--deps/npm/test/tap/outdated-git/README.md1
-rw-r--r--deps/npm/test/tap/outdated-git/package.json12
-rw-r--r--deps/npm/test/tap/publish-invalid-semver-tag.js79
-rw-r--r--deps/npm/test/tap/shrinkwrap-dev-dependency.js73
-rw-r--r--deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json12
-rw-r--r--deps/npm/test/tap/shrinkwrap-dev-dependency/package.json12
-rw-r--r--deps/npm/test/tap/shrinkwrap-prod-dependency.js89
-rw-r--r--deps/npm/test/tap/update-examples.js10
-rw-r--r--deps/npm/test/tap/version-message-config.js88
488 files changed, 25704 insertions, 5015 deletions
diff --git a/deps/npm/.mailmap b/deps/npm/.mailmap
index c90d447486..1f5332c470 100644
--- a/deps/npm/.mailmap
+++ b/deps/npm/.mailmap
@@ -1,5 +1,6 @@
Arlo Breault <arlolra@gmail.com>
Alex K. Wolfe <alexkwolfe@gmail.com>
+Andrew Bradley <cspotcode@gmail.com>
Andrew Lunny <alunny@gmail.com>
Benjamin Coe <bencoe@gmail.com>
Brian White <mscdex@mscdex.net> <mscdex@gmail.com>
@@ -8,16 +9,19 @@ Dalmais Maxence <root@ip-10-195-202-5.ec2.internal>
David Beitey <david@davidjb.com>
Domenic Denicola <domenic@domenicdenicola.com>
Einar Otto Stangvik <einaros@gmail.com>
-Evan Lucas <evan@btc.com> <evanlucas@me.com> <evan.lucas@hattiesburgclinic.com>
+Evan Lucas <evan@btc.com> <evanlucas@me.com>
+Evan Lucas <evan@btc.com> <evan.lucas@hattiesburgclinic.com>
Faiq Raza <faiqrazarizvi@gmail.com>
Forbes Lindesay <forbes@lindesay.co.uk>
-Forrest L. Norvell <forrest@npmjs.com> <ogd@aoaioxxysz.net>
+Forrest L Norvell <ogd@aoaioxxysz.net> <forrest@npmjs.com>
Gabriel Barros <descartavel1@gmail.com>
Geoff Flarity <geoff.flarity@gmail.com> <gflarity@raptvm-x02.(none)>
Isaac Z. Schlueter <i@izs.me> <i@foohack.com>
+Isaac Z. Schlueter <i@izs.me> isaacs <i@izs.me>
Jake Verbaten <raynos2@gmail.com>
James Sanders <jimmyjazz14@gmail.com>
Jason Smith <jhs@iriscouch.com>
+Jonas Weber <github@jonasw.de>
Kris Windham <kriswindham@gmail.com>
Lin Clark <lin.w.clark@gmail.com>
Maciej Małecki <me@mmalecki.com> <maciej.malecki@notimplemented.org>
@@ -26,6 +30,9 @@ Maxim Bogushevich <boga1@mail.ru>
Max Goodman <c@chromakode.com>
Nicolas Morel <marsup@gmail.com>
Olivier Melcher <olivier.melcher@gmail.com>
+Ryan Emery <seebees@gmail.com>
+Sam Mikes <smikes@cubane.com>
+Tony <zearin@gonk.net>
Visnu Pitiyanuvath <visnupx@gmail.com>
Will Elwood <w.elwood08@gmail.com>
-Zeke Sikelianos <zeke@sikelianos.com> \ No newline at end of file
+Zeke Sikelianos <zeke@sikelianos.com>
diff --git a/deps/npm/AUTHORS b/deps/npm/AUTHORS
index 20ff0440fc..0ccd3b04e1 100644
--- a/deps/npm/AUTHORS
+++ b/deps/npm/AUTHORS
@@ -1,4 +1,25 @@
# Authors sorted by whether or not they're me
+Isaac Z. Schlueter <i@izs.me>
+Steve Steiner <ssteinerX@gmail.com>
+Mikeal Rogers <mikeal.rogers@gmail.com>
+Aaron Blohowiak <aaron.blohowiak@gmail.com>
+Martyn Smith <martyn@dollyfish.net.nz>
+Charlie Robbins <charlie.robbins@gmail.com>
+Francisco Treacy <francisco.treacy@gmail.com>
+Cliffano Subagio <cliffano@gmail.com>
+Christian Eager <christian.eager@nokia.com>
+Dav Glass <davglass@gmail.com>
+Alex K. Wolfe <alexkwolfe@gmail.com>
+James Sanders <jimmyjazz14@gmail.com>
+Reid Burke <me@reidburke.com>
+Arlo Breault <arlolra@gmail.com>
+Timo Derstappen <teemow@gmail.com>
+Bart Teeuwisse <bart.teeuwisse@thecodemill.biz>
+Ben Noordhuis <info@bnoordhuis.nl>
+Tor Valamo <tor.valamo@gmail.com>
+Whyme.Lyu <5longluna@gmail.com>
+Olivier Melcher <olivier.melcher@gmail.com>
+Tomaž Muraus <kami@k5-storitve.net>
Evan Meagher <evan.meagher@gmail.com>
Orlando Vazquez <ovazquez@gmail.com>
Kai Chen <kaichenxyz@gmail.com>
@@ -7,245 +28,239 @@ Geoff Flarity <geoff.flarity@gmail.com>
Max Goodman <c@chromakode.com>
Pete Kruckenberg <pete@kruckenberg.com>
Laurie Harper <laurie@holoweb.net>
-Neil Gentleman <ngentleman@gmail.com>
-Kris Kowal <kris.kowal@cixar.com>
-Alex Gorbatchev <alex.gorbatchev@gmail.com>
-Shawn Wildermuth <shawn@wildermuth.com>
-Wesley de Souza <wesleywex@gmail.com>
+Chris Wong <chris@chriswongstudio.com>
+Scott Bronson <brons_github@rinspin.com>
+Federico Romero <federomero@gmail.com>
+Visnu Pitiyanuvath <visnupx@gmail.com>
+Irakli Gozalishvili <rfobic@gmail.com>
+Mark Cahill <mark@tiemonster.info>
+Tony <zearin@gonk.net>
+Iain Sproat <iainsproat@gmail.com>
+Trent Mick <trentm@gmail.com>
+Felix Geisendörfer <felix@debuggable.com>
+Jameson Little <t.jameson.little@gmail.com>
+Conny Brunnkvist <conny@fuchsia.se>
+Will Elwood <w.elwood08@gmail.com>
+Dean Landolt <dean@deanlandolt.com>
+Oleg Efimov <efimovov@gmail.com>
+Martin Cooper <mfncooper@gmail.com>
+Jann Horn <jannhorn@googlemail.com>
+Andrew Bradley <cspotcode@gmail.com>
+Maciej Małecki <me@mmalecki.com>
+Stephen Sugden <glurgle@gmail.com>
+Michael Budde <mbudde@gmail.com>
+Jason Smith <jhs@iriscouch.com>
+Gautham Pai <buzypi@gmail.com>
+David Trejo <david.daniel.trejo@gmail.com>
+Paul Vorbach <paul@vorb.de>
+George Ornbo <george@shapeshed.com>
+Tim Oxley <secoif@gmail.com>
+Tyler Green <tyler.green2@gmail.com>
+Dave Pacheco <dap@joyent.com>
+atomizer <danila.gerasimov@gmail.com>
+Rod Vagg <rod@vagg.org>
+Christian Howe <coderarity@gmail.com>
+Andrew Lunny <alunny@gmail.com>
+Henrik Hodne <dvyjones@binaryhex.com>
+Adam Blackburn <regality@gmail.com>
+Kris Windham <kriswindham@gmail.com>
+Jens Grunert <jens.grunert@gmail.com>
+Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
+Dalmais Maxence <root@ip-10-195-202-5.ec2.internal>
+Marcus Ekwall <marcus.ekwall@gmail.com>
+Aaron Stacy <aaron.r.stacy@gmail.com>
+Phillip Howell <phowell@cothm.org>
+Domenic Denicola <domenic@domenicdenicola.com>
+James Halliday <mail@substack.net>
+Jeremy Cantrell <jmcantrell@gmail.com>
+Trent Mick <trent.mick@joyent.com>
+Ribettes <patlogan29@gmail.com>
+Don Park <donpark@docuverse.com>
+Einar Otto Stangvik <einaros@gmail.com>
+Kei Son <heyacct@gmail.com>
+Nicolas Morel <marsup@gmail.com>
+Mark Dube <markisdee@gmail.com>
+Nathan Rajlich <nathan@tootallnate.net>
+Maxim Bogushevich <boga1@mail.ru>
+Meaglin <Meaglin.wasabi@gmail.com>
+Ben Evans <ben@bensbit.co.uk>
+Nathan Zadoks <nathan@nathan7.eu>
+Brian White <mscdex@mscdex.net>
+Jed Schmidt <tr@nslator.jp>
+Ian Livingstone <ianl@cs.dal.ca>
Patrick Pfeiffer <patrick@buzzle.at>
-yoyoyogi <yogesh.k@gmail.com>
Paul Miller <paul@paulmillr.com>
-Jérémy Lal <kapouer@melix.org>
-J. Tangelder <j.tangelder@gmail.com>
-seebees <seebees@gmail.com>
-Anders Janmyr <anders@janmyr.com>
-Jean Lauliac <jean@lauliac.com>
+Ryan Emery <seebees@gmail.com>
Carl Lange <carl@flax.ie>
-Chris Meyers <chris.meyers.fsu@gmail.com>
-Andrey Kislyuk <kislyuk@gmail.com>
Jan Lehnardt <jan@apache.org>
-Ludwig Magnusson <ludwig@mediatool.com>
-Thorsten Lorenz <thlorenz@gmx.de>
Stuart P. Bentley <stuart@testtrack4.com>
-wmertens <Wout.Mertens@gmail.com>
Johan Sköld <johan@skold.cc>
-Nick Santos <nick@medium.com>
Stuart Knightley <stuart@stuartk.com>
-Terin Stock <terinjokes@gmail.com>
Niggler <nirk.niggler@gmail.com>
-Faiq Raza <faiqrazarizvi@gmail.com>
Paolo Fragomeni <paolo@async.ly>
-Thomas Torp <thomas@erupt.no>
Jaakko Manninen <jaakko@rocketpack.fi>
-Sam Mikes <smikes@cubane.com>
Luke Arduini <luke.arduini@gmail.com>
Larz Conwell <larz@larz-laptop.(none)>
Marcel Klehr <mklehr@gmx.net>
Robert Kowalski <rok@kowalski.gd>
-Chris Wong <chris@chriswongstudio.com>
Forbes Lindesay <forbes@lindesay.co.uk>
-Scott Bronson <brons_github@rinspin.com>
Vaz Allen <vaz@tryptid.com>
-Federico Romero <federomero@gmail.com>
Jake Verbaten <raynos2@gmail.com>
-Visnu Pitiyanuvath <visnupx@gmail.com>
Schabse Laks <Dev@SLaks.net>
-Irakli Gozalishvili <rfobic@gmail.com>
Florian Margaine <florian@margaine.com>
-Mark Cahill <mark@tiemonster.info>
-Zearin <zearin@gonk.net>
-Iain Sproat <iainsproat@gmail.com>
-Trent Mick <trentm@gmail.com>
-Felix Geisendörfer <felix@debuggable.com>
-Julian Gruber <julian@juliangruber.com>
-Benjamin Coe <bencoe@gmail.com>
-Alex Ford <Alex.Ford@CodeTunnel.com>
-Matt Hickford <matt.hickford@gmail.com>
-Sean McGivern <sean.mcgivern@rightscale.com>
-C J Silverio <ceejceej@gmail.com>
-Mat Tyndall <mat.tyndall@gmail.com>
-Robin Tweedie <robin@songkick.com>
-Tauren Mills <tauren@sportzing.com>
-Miroslav Bajtoš <miroslav@strongloop.com>
-Isaac Z. Schlueter <i@izs.me>
-Ron Martinez <ramartin.net@gmail.com>
-David Glasser <glasser@davidglasser.net>
-Steve Steiner <ssteinerX@gmail.com>
-Kazuhito Hokamura <k.hokamura@gmail.com>
-Gianluca Casati <casati_gianluca@yahoo.it>
-Mikeal Rogers <mikeal.rogers@gmail.com>
-Tristan Davies <github@tristan.io>
-Aaron Blohowiak <aaron.blohowiak@gmail.com>
-David Volm <david@volminator.com>
-Martyn Smith <martyn@dollyfish.net.nz>
-Lin Clark <lin.w.clark@gmail.com>
-Charlie Robbins <charlie.robbins@gmail.com>
-Ben Page <bpage@dewalch.com>
-Francisco Treacy <francisco.treacy@gmail.com>
-Jeff Jo <jeffjo@squareup.com>
Johan Nordberg <its@johan-nordberg.com>
-Cliffano Subagio <cliffano@gmail.com>
-martinvd <martinvdpub@gmail.com>
Ian Babrou <ibobrik@gmail.com>
-Christian Eager <christian.eager@nokia.com>
Di Wu <dwu@palantir.com>
Mathias Bynens <mathias@qiwi.be>
Matt McClure <matt.mcclure@mapmyfitness.com>
-Jameson Little <t.jameson.little@gmail.com>
Matt Lunn <matt@mattlunn.me.uk>
-Conny Brunnkvist <conny@fuchsia.se>
Alexey Kreschuk <akrsch@gmail.com>
-Will Elwood <w.elwood08@gmail.com>
elisee <elisee@sparklin.org>
-Dean Landolt <dean@deanlandolt.com>
Robert Gieseke <robert.gieseke@gmail.com>
-Oleg Efimov <efimovov@gmail.com>
François Frisch <francoisfrisch@gmail.com>
-Martin Cooper <mfncooper@gmail.com>
-Jann Horn <jannhorn@googlemail.com>
-cspotcode <cspotcode@gmail.com>
-Maciej Małecki <me@mmalecki.com>
-Stephen Sugden <glurgle@gmail.com>
-Forrest L Norvell <forrest@npmjs.com>
-Karsten Tinnefeld <k.tinnefeld@googlemail.com>
-Bryan Burgers <bryan@burgers.io>
-David Beitey <david@davidjb.com>
-Evan You <yyou@google.com>
-Zach Pomerantz <zmp@umich.edu>
-Mark J. Titorenko <nospam-github.com@titorenko.net>
-Chris Williams <cwilliams88@gmail.com>
-Oddur Sigurdsson <oddurs@gmail.com>
-sudodoki <smd.deluzion@gmail.com>
-Eric Mill <eric@konklone.com>
-Mick Thompson <dthompson@gmail.com>
-Gabriel Barros <descartavel1@gmail.com>
-Felix Rabe <felix@rabe.io>
-KevinSheedy <kevinsheedy@gmail.com>
-Aleksey Smolenchuk <aleksey@uber.com>
-Ed Morley <emorley@mozilla.com>
-Blaine Bublitz <blaine@iceddev.com>
-Andrey Fedorov <anfedorov@gmail.com>
Trevor Burnham <tburnham@hubspot.com>
-Daijiro Wachi <daijiro.wachi@gmail.com>
Alan Shaw <alan@freestyle-developments.co.uk>
TJ Holowaychuk <tj@vision-media.ca>
Luke Arduini <luke.arduini@me.com>
Nicholas Kinsey <pyro@feisty.io>
-Michael Budde <mbudde@gmail.com>
Paulo Cesar <pauloc062@gmail.com>
-Jason Smith <jhs@iriscouch.com>
Elan Shanker <elan.shanker@gmail.com>
-Gautham Pai <buzypi@gmail.com>
Jon Spencer <jon@jonspencer.ca>
-David Trejo <david.daniel.trejo@gmail.com>
Jason Diamond <jason@diamond.name>
-Paul Vorbach <paul@vorb.de>
Maximilian Antoni <mail@maxantoni.de>
-George Ornbo <george@shapeshed.com>
-Tim Oxley <secoif@gmail.com>
-Tyler Green <tyler.green2@gmail.com>
-Dave Pacheco <dap@joyent.com>
-atomizer <danila.gerasimov@gmail.com>
-Michael Hayes <michael@hayes.io>
-Chris Dickinson <christopher.s.dickinson@gmail.com>
-Bradley Meck <bradley.meck@gmail.com>
-GeJ <geraud@gcu.info>
-Andrew Terris <atterris@gmail.com>
-Michael Nisi <michael.nisi@gmail.com>
-Luc Thevenard <lucthevenard@gmail.com>
-fengmk2 <fengmk2@gmail.com>
-Aria Stewart <aredridel@nbtsc.org>
-Adam Meadows <adam.meadows@gmail.com>
-Charlie Rudolph <charles.w.rudolph@gmail.com>
-Chulki Lee <chulki.lee@gmail.com>
-Vladimir Rutsky <rutsky@users.noreply.github.com>
-不四 <busi.hyy@taobao.com>
-Isaac Murchie <isaac@saucelabs.com>
-Marcin Wosinek <marcin.wosinek@gmail.com>
-David Marr <davemarr@gmail.com>
-Bryan English <bryan@bryanenglish.com>
-Anthony Zotti <amZotti@users.noreply.github.com>
Thom Blake <tblake@brightroll.com>
-Karl Horky <karl.horky@gmail.com>
Jess Martin <jessmartin@gmail.com>
Spain Train <michael.spainhower@opower.com>
Alex Rodionov <p0deje@gmail.com>
Matt Colyer <matt@colyer.name>
-Rod Vagg <rod@vagg.org>
Evan You <yyx990803@gmail.com>
-Christian Howe <coderarity@gmail.com>
bitspill <bitspill+github@bitspill.net>
-Andrew Lunny <alunny@gmail.com>
Gabriel Falkenberg <gabriel.falkenberg@gmail.com>
-Henrik Hodne <dvyjones@binaryhex.com>
Alexej Yaroshevich <alex@qfox.ru>
-Adam Blackburn <regality@gmail.com>
Quim Calpe <quim@kalpe.com>
-Kris Windham <kriswindham@gmail.com>
-Jens Grunert <jens.grunert@gmail.com>
-Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
-Dalmais Maxence <root@ip-10-195-202-5.ec2.internal>
-Marcus Ekwall <marcus.ekwall@gmail.com>
-Jordan Harband <ljharb@gmail.com>
Steve Mason <stevem@brandwatch.com>
Wil Moore III <wil.moore@wilmoore.com>
Sergey Belov <peimei@ya.ru>
Tom Huang <hzlhu.dargon@gmail.com>
CamilleM <camille.moulin@alterway.fr>
-Aaron Stacy <aaron.r.stacy@gmail.com>
Sébastien Santoro <dereckson@espace-win.org>
-Phillip Howell <phowell@cothm.org>
Evan Lucas <evan@btc.com>
-Domenic Denicola <domenic@domenicdenicola.com>
Quinn Slack <qslack@qslack.com>
-James Halliday <mail@substack.net>
Alex Kocharin <alex@kocharin.ru>
-Jeremy Cantrell <jmcantrell@gmail.com>
-Evan Lucas <evan.lucas@hattiesburgclinic.com>
-Trent Mick <trent.mick@joyent.com>
-Ribettes <patlogan29@gmail.com>
-Don Park <donpark@docuverse.com>
-Einar Otto Stangvik <einaros@gmail.com>
-Kei Son <heyacct@gmail.com>
-Dav Glass <davglass@gmail.com>
-Alex K. Wolfe <alexkwolfe@gmail.com>
-James Sanders <jimmyjazz14@gmail.com>
-Reid Burke <me@reidburke.com>
-Arlo Breault <arlolra@gmail.com>
-Timo Derstappen <teemow@gmail.com>
-Bart Teeuwisse <bart.teeuwisse@thecodemill.biz>
-Ben Noordhuis <info@bnoordhuis.nl>
-Tor Valamo <tor.valamo@gmail.com>
-Whyme.Lyu <5longluna@gmail.com>
Daniel Santiago <daniel.santiago@highlevelwebs.com>
Denis Gladkikh <outcoldman@gmail.com>
Andrew Horton <andrew.j.horton@gmail.com>
Zeke Sikelianos <zeke@sikelianos.com>
Dylan Greene <dylang@gmail.com>
-Nicolas Morel <marsup@gmail.com>
Franck Cuny <franck.cuny@gmail.com>
-Mark Dube <markisdee@gmail.com>
-dead_horse <dead_horse@qq.com>
Yeonghoon Park <sola92@gmail.com>
-Nathan Rajlich <nathan@tootallnate.net>
-Kenan Yildirim <kenan@kenany.me>
Rafael de Oleza <rafa@spotify.com>
-Maxim Bogushevich <boga1@mail.ru>
-Laurie Voss <git@seldo.com>
Mikola Lysenko <mikolalysenko@gmail.com>
-Meaglin <Meaglin.wasabi@gmail.com>
-Rebecca Turner <turner@mikomi.org>
Yazhong Liu <yorkiefixer@gmail.com>
-Ben Evans <ben@bensbit.co.uk>
+Younghoon Park <sola92@gmail.com>
+Neil Gentleman <ngentleman@gmail.com>
+Kris Kowal <kris.kowal@cixar.com>
+Alex Gorbatchev <alex.gorbatchev@gmail.com>
+Shawn Wildermuth <shawn@wildermuth.com>
+Wesley de Souza <wesleywex@gmail.com>
+yoyoyogi <yogesh.k@gmail.com>
+J. Tangelder <j.tangelder@gmail.com>
+Jean Lauliac <jean@lauliac.com>
+Andrey Kislyuk <kislyuk@gmail.com>
+Thorsten Lorenz <thlorenz@gmx.de>
+Julian Gruber <julian@juliangruber.com>
+Benjamin Coe <bencoe@gmail.com>
+Alex Ford <Alex.Ford@CodeTunnel.com>
+Matt Hickford <matt.hickford@gmail.com>
+Sean McGivern <sean.mcgivern@rightscale.com>
+C J Silverio <ceejceej@gmail.com>
+Robin Tweedie <robin@songkick.com>
+Miroslav Bajtoš <miroslav@strongloop.com>
+David Glasser <glasser@davidglasser.net>
+Gianluca Casati <casati_gianluca@yahoo.it>
+Forrest L Norvell <ogd@aoaioxxysz.net>
+Karsten Tinnefeld <k.tinnefeld@googlemail.com>
+Bryan Burgers <bryan@burgers.io>
+David Beitey <david@davidjb.com>
+Evan You <yyou@google.com>
+Zach Pomerantz <zmp@umich.edu>
+Chris Williams <cwilliams88@gmail.com>
+sudodoki <smd.deluzion@gmail.com>
+Mick Thompson <dthompson@gmail.com>
+Felix Rabe <felix@rabe.io>
+Michael Hayes <michael@hayes.io>
+Chris Dickinson <christopher.s.dickinson@gmail.com>
+Bradley Meck <bradley.meck@gmail.com>
+GeJ <geraud@gcu.info>
+Andrew Terris <atterris@gmail.com>
+Michael Nisi <michael.nisi@gmail.com>
+fengmk2 <fengmk2@gmail.com>
+Adam Meadows <adam.meadows@gmail.com>
+Chulki Lee <chulki.lee@gmail.com>
+不四 <busi.hyy@taobao.com>
+dead_horse <dead_horse@qq.com>
+Kenan Yildirim <kenan@kenany.me>
+Laurie Voss <git@seldo.com>
+Rebecca Turner <turner@mikomi.org>
Hunter Loftis <hunter@hunterloftis.com>
-Nathan Zadoks <nathan@nathan7.eu>
Peter Richardson <github@zoomy.net>
-Brian White <mscdex@mscdex.net>
Jussi Kalliokoski <jussi.kalliokoski@gmail.com>
-Jed Schmidt <tr@nslator.jp>
Filip Weiss <me@fiws.net>
-Ian Livingstone <ianl@cs.dal.ca>
timoweiss <timoweiss@Timo-MBP.local>
Christopher Hiller <chiller@badwing.com>
-Olivier Melcher <olivier.melcher@gmail.com>
-Tomaž Muraus <kami@k5-storitve.net>
+Jérémy Lal <kapouer@melix.org>
+Anders Janmyr <anders@janmyr.com>
+Chris Meyers <chris.meyers.fsu@gmail.com>
+Ludwig Magnusson <ludwig@mediatool.com>
+wmertens <Wout.Mertens@gmail.com>
+Nick Santos <nick@medium.com>
+Terin Stock <terinjokes@gmail.com>
+Faiq Raza <faiqrazarizvi@gmail.com>
+Thomas Torp <thomas@erupt.no>
+Sam Mikes <smikes@cubane.com>
+Mat Tyndall <mat.tyndall@gmail.com>
+Tauren Mills <tauren@sportzing.com>
+Ron Martinez <ramartin.net@gmail.com>
+Kazuhito Hokamura <k.hokamura@gmail.com>
+Tristan Davies <github@tristan.io>
+David Volm <david@volminator.com>
+Lin Clark <lin.w.clark@gmail.com>
+Ben Page <bpage@dewalch.com>
+Jeff Jo <jeffjo@squareup.com>
+martinvd <martinvdpub@gmail.com>
+Mark J. Titorenko <nospam-github.com@titorenko.net>
+Oddur Sigurdsson <oddurs@gmail.com>
+Eric Mill <eric@konklone.com>
+Gabriel Barros <descartavel1@gmail.com>
+KevinSheedy <kevinsheedy@gmail.com>
+Aleksey Smolenchuk <aleksey@uber.com>
+Ed Morley <emorley@mozilla.com>
+Blaine Bublitz <blaine@iceddev.com>
+Andrey Fedorov <anfedorov@gmail.com>
+Daijiro Wachi <daijiro.wachi@gmail.com>
+Luc Thevenard <lucthevenard@gmail.com>
+Aria Stewart <aredridel@nbtsc.org>
+Charlie Rudolph <charles.w.rudolph@gmail.com>
+Vladimir Rutsky <rutsky@users.noreply.github.com>
+Isaac Murchie <isaac@saucelabs.com>
+Marcin Wosinek <marcin.wosinek@gmail.com>
+David Marr <davemarr@gmail.com>
+Bryan English <bryan@bryanenglish.com>
+Anthony Zotti <amZotti@users.noreply.github.com>
+Karl Horky <karl.horky@gmail.com>
+Jordan Harband <ljharb@gmail.com>
+Guðlaugur Stefán Egilsson <gulli@kolibri.is>
+Helge Skogly Holm <helge.holm@gmail.com>
+Peter A. Shevtsov <petr.shevtsov@gmail.com>
+Alain Kalker <a.c.kalker@gmail.com>
+Bryant Williams <b.n.williams@gmail.com>
+Jonas Weber <github@jonasw.de>
+Tim Whidden <twhid@twhid.com>
+Andreas <functino@users.noreply.github.com>
+Karolis Narkevicius <karolis.n@gmail.com>
+Adrian Lynch <adi_ady_ade@hotmail.com>
+Richard Littauer <richard.littauer@gmail.com>
+Oli Evans <oli@zilla.org.uk>
+Matt Brennan <mattyb1000@gmail.com>
+Jeff Barczewski <jeff.barczewski@gmail.com>
+Danny Fritz <dannyfritz@gmail.com>
diff --git a/deps/npm/CHANGELOG.md b/deps/npm/CHANGELOG.md
index 006eb06ff2..ee2004cd5b 100644
--- a/deps/npm/CHANGELOG.md
+++ b/deps/npm/CHANGELOG.md
@@ -1,3 +1,192 @@
+### v2.7.4 (2015-03-20):
+
+#### BUG FIXES
+
+* [`fe1bc38`](https://github.com/npm/npm/commit/fe1bc387a14475e373557de669e03d9d006d3173)
+ [#7672](https://github.com/npm/npm/issues/7672) `npm-registry-client@3.1.2`:
+ Fix client-side certificate handling by correcting property name.
+ ([@atamon](https://github.com/atamon))
+* [`3ce3cc2`](https://github.com/npm/npm/commit/3ce3cc242fc345bca6820185a4f5a013c5bc1944)
+ [#7635](https://github.com/npm/npm/issues/7635) `fstream-npm@1.0.2`: Raise a
+ more descriptive error when `bundledDependencies` isn't an array.
+ ([@KenanY](https://github.com/KenanY))
+* [`3a12723`](https://github.com/npm/npm/commit/3a127235076a1f00bc8befba56c024c6d0e7f477)
+ [#7661](https://github.com/npm/npm/issues/7661) Allow setting `--registry` on
+ the command line to trump the mapped registry for `--scope`.
+ ([@othiym23](https://github.com/othiym23))
+* [`89ce829`](https://github.com/npm/npm/commit/89ce829a00b526d0518f5cd855c323bffe182af0)
+ [#7630](https://github.com/npm/npm/issues/7630) `hosted-git-info@1.5.3`: Part
+ 3 of ensuring that GitHub shorthand is handled consistently.
+ ([@othiym23](https://github.com/othiym23))
+* [`63313eb`](https://github.com/npm/npm/commit/63313eb0c37891c355546fd1093010c8a0c3cd81)
+ [#7630](https://github.com/npm/npm/issues/7630)
+ `realize-package-specifier@2.2.0`: Part 2 of ensuring that GitHub shorthand
+ is handled consistently. ([@othiym23](https://github.com/othiym23))
+* [`3ed41bf`](https://github.com/npm/npm/commit/3ed41bf64a1bb752bb3155c74dd6ffbbd28c89c9)
+ [#7630](https://github.com/npm/npm/issues/7630) `npm-package-arg@3.1.1`: Part
+ 1 of ensuring that GitHub shorthand is handled consistently.
+ ([@othiym23](https://github.com/othiym23))
+
+#### DEPENDENCY UPDATES
+
+* [`6a498c6`](https://github.com/npm/npm/commit/6a498c6aaa00611a0a1ea405255900c327103f8b)
+ `npm-registry-couchapp@2.6.7`: Ensure that npm continues to work with new
+ registry architecture. ([@bcoe](https://github.com/bcoe))
+* [`bd72c47`](https://github.com/npm/npm/commit/bd72c47ce8c58e287d496902c11845c8fea420d6)
+ `glob@5.0.3`: Updated to latest version.
+ ([@isaacs](https://github.com/isaacs))
+* [`4bfbaa2`](https://github.com/npm/npm/commit/4bfbaa2d8b9dc7067d999de8f55676db3a4f4196)
+ `npmlog@1.2.0`: Getting up to date with latest version (but not using any of
+ the new features). ([@othiym23](https://github.com/othiym23))
+
+#### A NEW REGRESSION TEST
+
+* [`3703b0b`](https://github.com/npm/npm/commit/3703b0b87c127a64649bdbfc3bc697ebccc4aa24)
+ Add regression test for `npm version` to ensure `message` property in config
+ continues to be honored. ([@dannyfritz](https://github.com/dannyfritz))
+
+### v2.7.3 (2015-03-16):
+
+#### HAHA WHOOPS LIL SHINKWRAP ISSUE THERE LOL
+
+* [`1549106`](https://github.com/npm/npm/commit/1549106f518000633915686f5f1ccc6afcf77f8f)
+ [#7641](https://github.com/npm/npm/issues/7641) Due to 448efd0, running `npm
+ shrinkwrap --dev` caused production dependencies to no longer be included in
+ `npm-shrinkwrap.json`. Whoopsie! ([@othiym23](https://github.com/othiym23))
+
+### v2.7.2 (2015-03-12):
+
+#### NPM GASTROENTEROLOGY
+
+* [`fb0ac26`](https://github.com/npm/npm/commit/fb0ac26eecdd76f6eaa4a96a865b7c6f52ce5aa5)
+ [#7579](https://github.com/npm/npm/issues/7579) Only block removing files and
+ links when we're sure npm isn't responsible for them. This change is hard to
+ summarize, because if things are working correctly you should never see it,
+ but if you want more context, just [go read the commit
+ message](https://github.com/npm/npm/commit/fb0ac26eecdd76f6eaa4a96a865b7c6f52ce5aa5),
+ which lays it all out. ([@othiym23](https://github.com/othiym23))
+* [`051c473`](https://github.com/npm/npm/commit/051c4738486a826300f205b71590781ce7744f01)
+ [#7552](https://github.com/npm/npm/issues/7552) `bundledDependencies` are now
+ properly included in the installation context. This is another fantastically
+ hard-to-summarize bug, and once again, I encourage you to [read the commit
+ message](https://github.com/npm/npm/commit/051c4738486a826300f205b71590781ce7744f01)
+ if you're curious about the details. The snappy takeaway is that this
+ unbreaks many use cases for `ember-cli`. ([@othiym23](https://github.com/othiym23))
+
+#### LESS DRAMATIC CHANGES
+
+* [`fcd9247`](https://github.com/npm/npm/commit/fcd92476f3a9092f6f8c83a19a24fe63b206edcd)
+ [#7597](https://github.com/npm/npm/issues/7597) Awk varies pretty
+ dramatically from platform to platform, so use Perl to generate the AUTHORS
+ list instead. ([@KenanY](https://github.com/KenanY))
+* [`721b17a`](https://github.com/npm/npm/commit/721b17a31690bec074eb8763d823d6de63406005)
+ [#7598](https://github.com/npm/npm/issues/7598) `npm install --save` really
+ isn't experimental anymore. ([@RichardLitt](https://github.com/RichardLitt))
+
+#### DEPENDENCY REFRESH
+
+* [`a91f2c7`](https://github.com/npm/npm/commit/a91f2c7c9a5183d9cde7aae040ebd9ccdf104be7)
+ [#7559](https://github.com/npm/npm/issues/7559) `node-gyp@1.0.3` Switch
+ `node-gyp` to use `stdio` instead of `customFds` so it stops printing a
+ deprecation warning every time you build a native dependency.
+ ([@jeffbski](https://github.com/jeffbski))
+* [`0c85db7`](https://github.com/npm/npm/commit/0c85db7f0dde41762411e40a029153e6a65ef483)
+ `rimraf@2.3.2`: Globbing now deals with paths containing valid glob
+ metacharacters better. ([@isaacs](https://github.com/isaacs))
+* [`d14588e`](https://github.com/npm/npm/commit/d14588ed09b032c4c770e34b4c0f2436f5fccf6e)
+ `minimatch@2.0.4`: Bug fixes. ([@isaacs](https://github.com/isaacs))
+* [`aa9952e`](https://github.com/npm/npm/commit/aa9952e8270a6c1b7f97e579875dd6e3aa22abfd)
+ `graceful-fs@3.0.6`: Bug fixes. ([@isaacs](https://github.com/isaacs))
+
+### v2.7.1 (2015-03-05):
+
+#### GITSANITY
+
+* [`6823807`](https://github.com/npm/npm/commit/6823807bba6c00228a724e1205ae90d67df0adad)
+ [#7121](https://github.com/npm/npm/issues/7121) `npm install --save` for Git
+ dependencies saves the URL passed in, instead of the temporary directory used
+ to clone the remote repo. Fixes using Git dependencies when shrinkwwapping.
+ In the process, rewrote the Git dependency caching code. Again. No more
+ single-letter variable names, and a much clearer workflow.
+ ([@othiym23](https://github.com/othiym23))
+* [`c8258f3`](https://github.com/npm/npm/commit/c8258f31365b045e5fcf15b865a363abbc3be616)
+ [#7486](https://github.com/npm/npm/issues/7486) When installing Git remotes,
+ the caching code was passing in the function `gitEnv` instead of the results
+ of invoking it. ([@functino](https://github.com/functino))
+* [`c618eed`](https://github.com/npm/npm/commit/c618eeda3e321fd454d77c476b53a0330f2344cc)
+ [#2556](https://github.com/npm/npm/issues/2556) Make it possible to install
+ Git dependencies when using `--link` by not linking just the Git
+ dependencies. ([@smikes](https://github.com/smikes))
+
+#### WHY DID THIS TAKE SO LONG.
+
+* [`abdd040`](https://github.com/npm/npm/commit/abdd040da90932535472f593d5433a67ee074801)
+ `read-package-json@1.3.2`: Provide more helpful error messages when JSON
+ parse errors are encountered by using a more forgiving JSON parser than
+ JSON.parse. ([@smikes](https://github.com/smikes))
+
+#### BUGS & TWEAKS
+
+* [`c56cfcd`](https://github.com/npm/npm/commit/c56cfcd79cd8ab4ccd06d2c03d7e04030d576683)
+ [#7525](https://github.com/npm/npm/issues/7525) `npm dedupe` handles scoped
+ packages. ([@KidkArolis](https://github.com/KidkArolis))
+* [`1b8ba74`](https://github.com/npm/npm/commit/1b8ba7426393cbae2c76ad2c35953782d4401871)
+ [#7531](https://github.com/npm/npm/issues/7531) `npm stars` and `npm whoami`
+ will no longer send the registry the error text saying you need to log in as
+ your username. ([@othiym23](https://github.com/othiym23))
+* [`6de1e91`](https://github.com/npm/npm/commit/6de1e91116a5105dfa75126532b9083d8672e034)
+ [#6441](https://github.com/npm/npm/issues/6441) Prevent needless reinstalls
+ by only updating packages when the current version isn't the same as the
+ version returned as `wanted` by `npm outdated`.
+ ([@othiym23](https://github.com/othiym23))
+* [`2abc3ee`](https://github.com/npm/npm/commit/2abc3ee08f0cabc4e7bfd7b973c0b59dc44715ff)
+ Add `npm upgrade` as an alias for `npm update`.
+ ([@othiym23](https://github.com/othiym23))
+* [`bcd4722`](https://github.com/npm/npm/commit/bcd47224e18884191a5d0057c2b2fff83ac8206e)
+ [#7508](https://github.com/npm/npm/issues/7508) FreeBSD uses `EAI_FAIL`
+ instead of `ENOTFOUND`. ([@othiym23](https://github.com/othiym23))
+* [`21c1ac4`](https://github.com/npm/npm/commit/21c1ac41280f0716a208cde14025a2ad5ef61fed)
+ [#7507](https://github.com/npm/npm/issues/7507) Update support URL in generic
+ error handler to `https:` from `http:`.
+ ([@watilde](https://github.com/watilde))
+* [`b6bd99a`](https://github.com/npm/npm/commit/b6bd99a73f575545fbbaef95c12237c47dd32561)
+ [#7492](https://github.com/npm/npm/issues/7492) On install, the
+ `package.json` `engineStrict` deprecation only warns for the current package.
+ ([@othiym23](https://github.com/othiym23))
+* [`4ef1412`](https://github.com/npm/npm/commit/4ef1412d0061239da2b1c4460ed6db37cc9ded27)
+ [#7075](https://github.com/npm/npm/issues/7075) If you try to tag a release
+ as a valid semver range, `npm publish` and `npm tag` will error early instead
+ of proceeding. ([@smikes](https://github.com/smikes))
+* [`ad53d0f`](https://github.com/npm/npm/commit/ad53d0f666125d9f50d661b54901c6e5bab4d603)
+ Use `rimraf` in npm build script because Windows doesn't know what rm is.
+ ([@othiym23](https://github.com/othiym23))
+* [`8885c4d`](https://github.com/npm/npm/commit/8885c4dfb618f2838930b5c5149abea300a762d6)
+ `rimraf@2.3.1`: Better Windows support.
+ ([@isaacs](https://github.com/isaacs))
+* [`8885c4d`](https://github.com/npm/npm/commit/8885c4dfb618f2838930b5c5149abea300a762d6)
+ `glob@4.4.2`: Handle bad symlinks properly.
+ ([@isaacs](https://github.com/isaacs))
+
+###E TYPSO & CLARFIICATIONS
+
+dId yuo know that submiting fxies for doc tpyos is an exclelent way to get
+strated contriburting to a new open-saurce porject?
+
+* [`42c605c`](https://github.com/npm/npm/commit/42c605c7b401f603c32ea70427e1a7666adeafd9)
+ Fix typo in `CHANGELOG.md` ([@adrianblynch](https://github.com/adrianblynch))
+* [`c9bd58d`](https://github.com/npm/npm/commit/c9bd58dd637b9c41441023584a13e3818d5db336)
+ Add note about `node_modules/.bin` being added to the path in `npm
+ run-script`. ([@quarterto](https://github.com/quarterto))
+* [`903bdd1`](https://github.com/npm/npm/commit/903bdd105b205d6e45d3a2ab83eea8e4071e9aeb)
+ Matt Ranney confused the world when he renamed `node-redis` to `redis`. "The
+ world" includes npm's documentation.
+ ([@RichardLitt](https://github.com/RichardLitt))
+* [`dea9bb2`](https://github.com/npm/npm/commit/dea9bb2319183fe54bf4d173d8533d46d2c6611c)
+ Fix typo in contributor link. ([@watilde](https://github.com/watilde))
+* [`1226ca9`](https://github.com/npm/npm/commit/1226ca98d4d7650cc3ba16bf7ac62e44820f3bfa)
+ Properly close code block in npm-install.md.
+ ([@olizilla](https://github.com/olizilla))
+
### v2.7.0 (2015-02-26):
#### SOMETIMES SEMVER MEANS "SUBJECTIVE-EMPATHETIC VERSIONING"
@@ -14,7 +203,7 @@ If the patch below were landed on its own, free of context, it would be a
breaking change. But, since the "new" behavior is how the documentation claims
this feature has always worked, I'm classifying it as a patch-level bug fix. I
apologize in advance if this breaks anybody's deployment scripts, and if it
-turns out to be a significant regression in practics, we can revert this change
+turns out to be a significant regression in practice, we can revert this change
and move it to `npm@3`, which is allowed to make breaking changes due to being
a new major version of semver.
@@ -65,7 +254,7 @@ tracker, and they included some nice small features and fixes:
[#7354](https://github.com/npm/npm/issues/7354) Add `--if-present` flag to
allow e.g. CI systems to call (semi-) standard build tasks defined in
`package.json`, but don't raise an error if no such script is defined.
- ([@jussi](https://github.com/jussi)-kalliokoski)
+ ([@jussi-kalliokoski](https://github.com/jussi-kalliokoski))
* [`7bf85cc`](https://github.com/npm/npm/commit/7bf85cc372ab5698593b01e139c383fa62c92516)
[#4005](https://github.com/npm/npm/issues/4005)
[#6248](https://github.com/npm/npm/issues/6248) Globally unlink a package
@@ -1077,7 +1266,7 @@ Other changes:
* [`b706d63`](https://github.com/npm/npm/commit/b706d637d5965dbf8f7ce07dc5c4bc80887f30d8)
[#3059](https://github.com/npm/npm/issues/3059) disable prepublish when
running `npm install --production`
- ([@jussi](https://github.com/jussi)-kalliokoski)
+ ([@jussi-kalliokoski](https://github.com/jussi-kalliokoski))
* [`119f068`](https://github.com/npm/npm/commit/119f068eae2a36fa8b9c9ca557c70377792243a4)
attach the node version used when publishing a package to its registry
metadata ([@othiym23](https://github.com/othiym23))
diff --git a/deps/npm/doc/cli/npm-install.md b/deps/npm/doc/cli/npm-install.md
index 6b2ac7778c..acc221d31f 100644
--- a/deps/npm/doc/cli/npm-install.md
+++ b/deps/npm/doc/cli/npm-install.md
@@ -157,7 +157,7 @@ after packing it up into a tarball (b).
* `npm install <githubname>/<githubrepo>`:
- Install the package at `https://github.com/githubname/githubrepo" by
+ Install the package at `https://github.com/githubname/githubrepo` by
attempting to clone it using `git`.
Example:
diff --git a/deps/npm/doc/cli/npm-link.md b/deps/npm/doc/cli/npm-link.md
index a48fb97785..d634e3458c 100644
--- a/deps/npm/doc/cli/npm-link.md
+++ b/deps/npm/doc/cli/npm-link.md
@@ -38,7 +38,8 @@ For example:
npm link redis # link-install the package
Now, any changes to ~/projects/node-redis will be reflected in
-~/projects/node-bloggy/node_modules/node-redis/
+~/projects/node-bloggy/node_modules/node-redis/. Note that the link should
+be to the package name, not the directory name for that package.
You may also shortcut the two steps in one. For example, to do the
above use-case in a shorter way:
diff --git a/deps/npm/doc/cli/npm-run-script.md b/deps/npm/doc/cli/npm-run-script.md
index 9e6e17e1d0..487bd5942a 100644
--- a/deps/npm/doc/cli/npm-run-script.md
+++ b/deps/npm/doc/cli/npm-run-script.md
@@ -29,6 +29,13 @@ environment variables that will be available to the script at runtime. If an
"env" command is defined in your package it will take precedence over the
built-in.
+In addition to the shell's pre-existing `PATH`, `npm run` adds
+`node_modules/.bin` to the `PATH` provided to scripts. Any binaries provided by
+locally-installed dependencies can be used without the `node_modules/.bin`
+prefix. For example, if there is a `devDependency` on `tap` in your package,
+you should write `"scripts": {"test": "tap test/\*.js"}` instead of `"scripts":
+{"test": "node_modules/.bin/tap test/\*.js"}` to run your tests.
+
## SEE ALSO
* npm-scripts(7)
diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html
index a85c865b09..72c7ec0136 100644
--- a/deps/npm/html/doc/README.html
+++ b/deps/npm/html/doc/README.html
@@ -126,7 +126,7 @@ specific purpose, or lack of malice in any given npm package.</p>
<p>If you have a complaint about a package in the public npm registry,
and cannot <a href="https://docs.npmjs.com/misc/disputes">resolve it with the package
owner</a>, please email
-<a href="&#109;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#x73;&#117;&#112;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#109;">&#x73;&#117;&#112;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#109;</a> and explain the situation.</p>
+<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#115;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#x63;&#x6f;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#x63;&#x6f;&#x6d;</a> and explain the situation.</p>
<p>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.</p>
@@ -169,5 +169,5 @@ will no doubt tell you to put the output in a gist or email.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@2.7.0</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html
index 40b07e5d7f..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 <code>npm.bin</code> property.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bin &mdash; npm@2.7.0</p>
+<p id="footer">npm-bin &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html
index d39cf2440d..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bugs &mdash; npm@2.7.0</p>
+<p id="footer">npm-bugs &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-cache.html b/deps/npm/html/doc/api/npm-cache.html
index 4f0c96be74..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-cache &mdash; npm@2.7.0</p>
+<p id="footer">npm-cache &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html
index ebf5b0e74e..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 <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-commands &mdash; npm@2.7.0</p>
+<p id="footer">npm-commands &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html
index 11877eb6c0..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-config &mdash; npm@2.7.0</p>
+<p id="footer">npm-config &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html
index a8d8753152..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-deprecate &mdash; npm@2.7.0</p>
+<p id="footer">npm-deprecate &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html
index f3fce38b78..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-docs &mdash; npm@2.7.0</p>
+<p id="footer">npm-docs &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html
index 1b8b2264d4..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-edit &mdash; npm@2.7.0</p>
+<p id="footer">npm-edit &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html
index b26c04af59..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 <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-explore &mdash; npm@2.7.0</p>
+<p id="footer">npm-explore &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html
index 99f7a5e556..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</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-help-search &mdash; npm@2.7.0</p>
+<p id="footer">npm-help-search &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html
index ffeae2c3ad..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-init &mdash; npm@2.7.0</p>
+<p id="footer">npm-init &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html
index a2267a58fd..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-install &mdash; npm@2.7.0</p>
+<p id="footer">npm-install &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html
index 67caab6b89..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</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-link &mdash; npm@2.7.0</p>
+<p id="footer">npm-link &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html
index e3b6641bb6..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-load &mdash; npm@2.7.0</p>
+<p id="footer">npm-load &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html
index 1040339764..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-ls &mdash; npm@2.7.0</p>
+<p id="footer">npm-ls &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html
index 2fbda56fa7..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-outdated &mdash; npm@2.7.0</p>
+<p id="footer">npm-outdated &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html
index 3a86a8b026..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-owner &mdash; npm@2.7.0</p>
+<p id="footer">npm-owner &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html
index 7dbdf463e2..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-pack &mdash; npm@2.7.0</p>
+<p id="footer">npm-pack &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html
index 62c91d8c74..f063710709 100644
--- a/deps/npm/html/doc/api/npm-prefix.html
+++ b/deps/npm/html/doc/api/npm-prefix.html
@@ -29,5 +29,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prefix &mdash; npm@2.7.0</p>
+<p id="footer">npm-prefix &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html
index ae9cf1c4dd..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&#39;s dependencies list.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prune &mdash; npm@2.7.0</p>
+<p id="footer">npm-prune &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html
index d0ae43fa39..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 &quot;force&quot; environment variable is set
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-publish &mdash; npm@2.7.0</p>
+<p id="footer">npm-publish &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html
index 4ae5944032..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 &#39;packages&#39; parameter is specify, every package wil
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-rebuild &mdash; npm@2.7.0</p>
+<p id="footer">npm-rebuild &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html
index 60b8a9aebb..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-repo &mdash; npm@2.7.0</p>
+<p id="footer">npm-repo &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html
index b657e5e9b1..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</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-restart &mdash; npm@2.7.0</p>
+<p id="footer">npm-restart &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html
index a40933007f..85c2df9af5 100644
--- a/deps/npm/html/doc/api/npm-root.html
+++ b/deps/npm/html/doc/api/npm-root.html
@@ -29,5 +29,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-root &mdash; npm@2.7.0</p>
+<p id="footer">npm-root &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html
index 5e3eaf840b..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-run-script &mdash; npm@2.7.0</p>
+<p id="footer">npm-run-script &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html
index 9e5a72e97f..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).</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-search &mdash; npm@2.7.0</p>
+<p id="footer">npm-search &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html
index 47bba84e1d..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-shrinkwrap &mdash; npm@2.7.0</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html
index cca572f495..608de64957 100644
--- a/deps/npm/html/doc/api/npm-start.html
+++ b/deps/npm/html/doc/api/npm-start.html
@@ -28,5 +28,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-start &mdash; npm@2.7.0</p>
+<p id="footer">npm-start &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html
index cb2ae75494..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 <code>packages</code> parameter.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-stop &mdash; npm@2.7.0</p>
+<p id="footer">npm-stop &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html
index 14dfbd32aa..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
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-tag &mdash; npm@2.7.0</p>
+<p id="footer">npm-tag &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html
index e60d561e81..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 <code>packages</code> parameter.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-test &mdash; npm@2.7.0</p>
+<p id="footer">npm-test &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html
index 3eea11c6f4..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-uninstall &mdash; npm@2.7.0</p>
+<p id="footer">npm-uninstall &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html
index f9abc239ec..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-unpublish &mdash; npm@2.7.0</p>
+<p id="footer">npm-unpublish &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html
index 851fbdae2c..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-update &mdash; npm@2.7.0</p>
+<p id="footer">npm-update &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html
index 0277a27412..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-version &mdash; npm@2.7.0</p>
+<p id="footer">npm-version &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html
index f68cec8d58..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-view &mdash; npm@2.7.0</p>
+<p id="footer">npm-view &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html
index 8eac49bcb4..017f49618a 100644
--- a/deps/npm/html/doc/api/npm-whoami.html
+++ b/deps/npm/html/doc/api/npm-whoami.html
@@ -29,5 +29,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-whoami &mdash; npm@2.7.0</p>
+<p id="footer">npm-whoami &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html
index 69585f5c98..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([&quot;package&quot;], cb)
})
</code></pre><h2 id="version">VERSION</h2>
-<p>2.7.0</p>
+<p>2.7.4</p>
<h2 id="description">DESCRIPTION</h2>
<p>This is the API documentation for npm.
To find documentation of the command line
@@ -109,5 +109,5 @@ method names. Use the <code>npm.deref</code> method to find the real name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm &mdash; npm@2.7.0</p>
+<p id="footer">npm &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-access.html b/deps/npm/html/doc/cli/npm-access.html
index 836ef8c4da..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
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-access &mdash; npm@2.7.0</p>
+<p id="footer">npm-access &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html
index 93818e9aef..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-adduser &mdash; npm@2.7.0</p>
+<p id="footer">npm-adduser &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html
index c9b43ad0c4..94b778bd9f 100644
--- a/deps/npm/html/doc/cli/npm-bin.html
+++ b/deps/npm/html/doc/cli/npm-bin.html
@@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bin &mdash; npm@2.7.0</p>
+<p id="footer">npm-bin &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html
index f19b04c837..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 <code>package.json</code> in the current folder and use the <code>name</code>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bugs &mdash; npm@2.7.0</p>
+<p id="footer">npm-bugs &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html
index 21d010e9a8..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 <code>package.json</code> file in its root.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-build &mdash; npm@2.7.0</p>
+<p id="footer">npm-build &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html
index 35b09036a4..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bundle &mdash; npm@2.7.0</p>
+<p id="footer">npm-bundle &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html
index 516e769021..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-cache &mdash; npm@2.7.0</p>
+<p id="footer">npm-cache &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html
index 58548888a6..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-completion &mdash; npm@2.7.0</p>
+<p id="footer">npm-completion &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html
index 4b55be25e9..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-config &mdash; npm@2.7.0</p>
+<p id="footer">npm-config &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html
index 1c06741d37..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-dedupe &mdash; npm@2.7.0</p>
+<p id="footer">npm-dedupe &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html
index 6411329570..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:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-deprecate &mdash; npm@2.7.0</p>
+<p id="footer">npm-deprecate &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-dist-tag.html b/deps/npm/html/doc/cli/npm-dist-tag.html
index 0b679b856d..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 <code>v</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-dist-tag &mdash; npm@2.7.0</p>
+<p id="footer">npm-dist-tag &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html
index 3ea861db29..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 <code>name</code> property.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-docs &mdash; npm@2.7.0</p>
+<p id="footer">npm-docs &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html
index d3d535dc9d..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 <code>&quot;notepad&quot;</code> on Windows.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-edit &mdash; npm@2.7.0</p>
+<p id="footer">npm-edit &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html
index 835290f5c8..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</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-explore &mdash; npm@2.7.0</p>
+<p id="footer">npm-explore &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html
index 17b3f5dec9..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-help-search &mdash; npm@2.7.0</p>
+<p id="footer">npm-help-search &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html
index 5c0efe03e5..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-help &mdash; npm@2.7.0</p>
+<p id="footer">npm-help &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html
index 3aa29a8106..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-init &mdash; npm@2.7.0</p>
+<p id="footer">npm-init &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html
index e43c2d05f0..2daed14b23 100644
--- a/deps/npm/html/doc/cli/npm-install.html
+++ b/deps/npm/html/doc/cli/npm-install.html
@@ -132,8 +132,8 @@ fetch the package by name if it is not valid.
npm install @myorg/privatepackage@&quot;&gt;=0.1.0 &lt;0.2.0&quot;
</code></pre></li>
<li><p><code>npm install &lt;githubname&gt;/&lt;githubrepo&gt;</code>:</p>
-<p> Install the package at <code>https://github.com/githubname/githubrepo&quot; by
- attempting to clone it using</code>git`.</p>
+<p> Install the package at <code>https://github.com/githubname/githubrepo</code> by
+ attempting to clone it using <code>git</code>.</p>
<p> Example:</p>
<pre><code> npm install mygithubuser/myproject
</code></pre><p> To reference a package in a git repo that is not on GitHub, see git
@@ -240,5 +240,5 @@ affects a real use-case, it will be investigated.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-install &mdash; npm@2.7.0</p>
+<p id="footer">npm-install &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html
index 818d660ec0..4a14ee51b2 100644
--- a/deps/npm/html/doc/cli/npm-link.html
+++ b/deps/npm/html/doc/cli/npm-link.html
@@ -35,7 +35,8 @@ npm link # creates global link
cd ~/projects/node-bloggy # go into some other package directory.
npm link redis # link-install the package
</code></pre><p>Now, any changes to ~/projects/node-redis will be reflected in
-~/projects/node-bloggy/node_modules/node-redis/</p>
+~/projects/node-bloggy/node_modules/node-redis/. Note that the link should
+be to the package name, not the directory name for that package. </p>
<p>You may also shortcut the two steps in one. For example, to do the
above use-case in a shorter way:</p>
<pre><code>cd ~/projects/node-bloggy # go into the dir of your main project
@@ -71,5 +72,5 @@ include that scope, e.g.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-link &mdash; npm@2.7.0</p>
+<p id="footer">npm-link &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-logout.html b/deps/npm/html/doc/cli/npm-logout.html
index 4a77e01c59..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-logout &mdash; npm@2.7.0</p>
+<p id="footer">npm-logout &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html
index 861aad2310..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.</p>
limit the results to only the paths to the packages named. Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-<pre><code>npm@2.7.0 /path/to/npm
+<pre><code>npm@2.7.4 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
@@ -97,5 +97,5 @@ project.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-ls &mdash; npm@2.7.0</p>
+<p id="footer">npm-ls &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html
index 10df0aacd3..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-outdated &mdash; npm@2.7.0</p>
+<p id="footer">npm-outdated &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html
index 01b8380c9a..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-owner &mdash; npm@2.7.0</p>
+<p id="footer">npm-owner &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html
index b3f70935a0..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-pack &mdash; npm@2.7.0</p>
+<p id="footer">npm-pack &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html
index caef5516d6..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 <code>-g</code> is also specified.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prefix &mdash; npm@2.7.0</p>
+<p id="footer">npm-prefix &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html
index fbf0aaf84c..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 <code>devDependencies</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prune &mdash; npm@2.7.0</p>
+<p id="footer">npm-prune &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html
index 3cd7406fc1..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 <a href="../cli/npm-unpublish.html"><a href="../cli/npm-unpub
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-publish &mdash; npm@2.7.0</p>
+<p id="footer">npm-publish &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html
index 898d904a1c..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-rebuild &mdash; npm@2.7.0</p>
+<p id="footer">npm-rebuild &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html
index 50840d500d..09bc008dee 100644
--- a/deps/npm/html/doc/cli/npm-repo.html
+++ b/deps/npm/html/doc/cli/npm-repo.html
@@ -42,5 +42,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-repo &mdash; npm@2.7.0</p>
+<p id="footer">npm-repo &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html
index c09e1039ed..dde4bc9f28 100644
--- a/deps/npm/html/doc/cli/npm-restart.html
+++ b/deps/npm/html/doc/cli/npm-restart.html
@@ -53,5 +53,5 @@ behavior will be accompanied by an increase in major version number</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-restart &mdash; npm@2.7.0</p>
+<p id="footer">npm-restart &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html
index 09ef1100ff..f3d4e6fc0d 100644
--- a/deps/npm/html/doc/cli/npm-rm.html
+++ b/deps/npm/html/doc/cli/npm-rm.html
@@ -39,5 +39,5 @@ on its behalf.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-rm &mdash; npm@2.7.0</p>
+<p id="footer">npm-rm &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html
index 39b6e6ca88..98907fe361 100644
--- a/deps/npm/html/doc/cli/npm-root.html
+++ b/deps/npm/html/doc/cli/npm-root.html
@@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-root &mdash; npm@2.7.0</p>
+<p id="footer">npm-root &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html
index ca0f575cfc..7a6b3923d5 100644
--- a/deps/npm/html/doc/cli/npm-run-script.html
+++ b/deps/npm/html/doc/cli/npm-run-script.html
@@ -30,6 +30,12 @@ and not to any pre or post script.</p>
environment variables that will be available to the script at runtime. If an
&quot;env&quot; command is defined in your package it will take precedence over the
built-in.</p>
+<p>In addition to the shell&#39;s pre-existing <code>PATH</code>, <code>npm run</code> adds
+<code>node_modules/.bin</code> to the <code>PATH</code> provided to scripts. Any binaries provided by
+locally-installed dependencies can be used without the <code>node_modules/.bin</code>
+prefix. For example, if there is a <code>devDependency</code> on <code>tap</code> in your package,
+you should write <code>&quot;scripts&quot;: {&quot;test&quot;: &quot;tap test/\*.js&quot;}</code> instead of <code>&quot;scripts&quot;:
+{&quot;test&quot;: &quot;node_modules/.bin/tap test/\*.js&quot;}</code> to run your tests.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../misc/npm-scripts.html"><a href="../misc/npm-scripts.html">npm-scripts(7)</a></a></li>
@@ -50,5 +56,5 @@ built-in.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-run-script &mdash; npm@2.7.0</p>
+<p id="footer">npm-run-script &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html
index eb4c522e55..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-search &mdash; npm@2.7.0</p>
+<p id="footer">npm-search &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html
index 3676105b2c..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-shrinkwrap &mdash; npm@2.7.0</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html
index 0a31eb6990..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-star &mdash; npm@2.7.0</p>
+<p id="footer">npm-star &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html
index 3d893db265..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-stars &mdash; npm@2.7.0</p>
+<p id="footer">npm-stars &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html
index 5a163f6a07..dbd9417392 100644
--- a/deps/npm/html/doc/cli/npm-start.html
+++ b/deps/npm/html/doc/cli/npm-start.html
@@ -34,5 +34,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-start &mdash; npm@2.7.0</p>
+<p id="footer">npm-start &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html
index 8b401e7c58..7dc2bf7de6 100644
--- a/deps/npm/html/doc/cli/npm-stop.html
+++ b/deps/npm/html/doc/cli/npm-stop.html
@@ -34,5 +34,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-stop &mdash; npm@2.7.0</p>
+<p id="footer">npm-stop &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html
index dae1ecc4df..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 <code>v</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-tag &mdash; npm@2.7.0</p>
+<p id="footer">npm-tag &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html
index 8ae25dd8af..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-test &mdash; npm@2.7.0</p>
+<p id="footer">npm-test &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html
index 9cd72c7055..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
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-uninstall &mdash; npm@2.7.0</p>
+<p id="footer">npm-uninstall &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html
index e363c0a618..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-unpublish &mdash; npm@2.7.0</p>
+<p id="footer">npm-unpublish &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html
index 2a132bbf8a..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 <em>downgraded</em>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-update &mdash; npm@2.7.0</p>
+<p id="footer">npm-update &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html
index d167770d0c..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:
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-version &mdash; npm@2.7.0</p>
+<p id="footer">npm-version &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html
index 99ffc892e6..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-view &mdash; npm@2.7.0</p>
+<p id="footer">npm-view &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html
index d284a41aa1..54f7eb8822 100644
--- a/deps/npm/html/doc/cli/npm-whoami.html
+++ b/deps/npm/html/doc/cli/npm-whoami.html
@@ -33,5 +33,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-whoami &mdash; npm@2.7.0</p>
+<p id="footer">npm-whoami &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html
index 8b67cacba6..059d6f3437 100644
--- a/deps/npm/html/doc/cli/npm.html
+++ b/deps/npm/html/doc/cli/npm.html
@@ -13,7 +13,7 @@
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm &lt;command&gt; [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>2.7.0</p>
+<p>2.7.4</p>
<h2 id="description">DESCRIPTION</h2>
<p>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 <code>npm view npm contributors</code>.</p>
the issues list or ask on the mailing list.</p>
<ul>
<li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
-<li><a href="&#109;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#110;&#x70;&#109;&#45;&#64;&#x67;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#111;&#117;&#112;&#115;&#46;&#99;&#111;&#x6d;">&#110;&#x70;&#109;&#45;&#64;&#x67;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#111;&#117;&#112;&#115;&#46;&#99;&#111;&#x6d;</a></li>
+<li><a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#x6f;&#x3a;&#x6e;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#x6d;">&#x6e;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#x6d;</a></li>
</ul>
<h2 id="bugs">BUGS</h2>
<p>When you find issues, please report them:</p>
@@ -118,7 +118,7 @@ the issues list or ask on the mailing list.</p>
<li>web:
<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
<li>email:
-<a href="&#x6d;&#x61;&#105;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#x6d;&#45;&#64;&#x67;&#111;&#x6f;&#103;&#x6c;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#109;">&#x6e;&#112;&#x6d;&#45;&#64;&#x67;&#111;&#x6f;&#103;&#x6c;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#109;</a></li>
+<a href="&#109;&#97;&#105;&#108;&#x74;&#111;&#58;&#110;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#x6c;&#x65;&#103;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#99;&#111;&#109;">&#110;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#x6c;&#x65;&#103;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#99;&#111;&#109;</a></li>
</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
@@ -128,7 +128,7 @@ will no doubt tell you to put the output in a gist or email.</p>
<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
-<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#x69;&#x40;&#x69;&#122;&#115;&#x2e;&#x6d;&#101;">&#x69;&#x40;&#x69;&#122;&#115;&#x2e;&#x6d;&#101;</a></p>
+<a href="&#x6d;&#x61;&#105;&#108;&#x74;&#111;&#x3a;&#x69;&#x40;&#105;&#122;&#115;&#x2e;&#109;&#101;">&#x69;&#x40;&#105;&#122;&#115;&#x2e;&#109;&#101;</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-help.html"><a href="../cli/npm-help.html">npm-help(1)</a></a></li>
@@ -154,5 +154,5 @@ will no doubt tell you to put the output in a gist or email.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm &mdash; npm@2.7.0</p>
+<p id="footer">npm &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html
index 6b1d6d053b..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 <code><a href="../files/package.json.html"><a hr
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-folders &mdash; npm@2.7.0</p>
+<p id="footer">npm-folders &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html
index e642f4f3cb..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 <code><a href="../files/package.json.html"><a hr
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-global &mdash; npm@2.7.0</p>
+<p id="footer">npm-global &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html
index 9a9e1349f9..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-json &mdash; npm@2.7.0</p>
+<p id="footer">npm-json &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html
index d9b6dd3cfa..9aea72e9a4 100644
--- a/deps/npm/html/doc/files/npmrc.html
+++ b/deps/npm/html/doc/files/npmrc.html
@@ -77,5 +77,5 @@ manner.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npmrc &mdash; npm@2.7.0</p>
+<p id="footer">npmrc &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
index 9494757ea6..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">package.json &mdash; npm@2.7.0</p>
+<p id="footer">package.json &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html
index 65c679573a..7f8fff793b 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -236,5 +236,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">index &mdash; npm@2.7.0</p>
+<p id="footer">index &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html
index 195ae02c54..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.&quot;</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-coding-style &mdash; npm@2.7.0</p>
+<p id="footer">npm-coding-style &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html
index 11b7793fed..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-config &mdash; npm@2.7.0</p>
+<p id="footer">npm-config &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html
index e91f9f3890..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-developers &mdash; npm@2.7.0</p>
+<p id="footer">npm-developers &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html
index b4efe49d8f..e4f8e17920 100644
--- a/deps/npm/html/doc/misc/npm-disputes.html
+++ b/deps/npm/html/doc/misc/npm-disputes.html
@@ -13,7 +13,7 @@
<h2 id="synopsis">SYNOPSIS</h2>
<ol>
<li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
-<li>Email the author, CC <a href="&#x6d;&#97;&#x69;&#108;&#116;&#x6f;&#x3a;&#x73;&#x75;&#x70;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#111;&#x6d;">&#x73;&#x75;&#x70;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#x6d;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;">&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;</a></li>
<li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
</ol>
<p>Don&#39;t squat on package names. Publish code or move out of the way.</p>
@@ -51,12 +51,12 @@ Joe&#39;s appropriate course of action in each case is the same.</p>
owner (Bob).</li>
<li>Joe emails Bob, explaining the situation <strong>as respectfully as
possible</strong>, and what he would like to do with the module name. He
-adds the npm support staff <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#46;&#99;&#111;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#46;&#99;&#111;&#x6d;</a> to the CC list of
+adds the npm support staff <a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#115;&#46;&#x63;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#115;&#46;&#x63;&#111;&#x6d;</a> to the CC list of
the email. Mention in the email that Bob can run <code>npm owner add
joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
<li>After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can&#39;t come to any sort of resolution, email support
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#111;&#58;&#x73;&#117;&#112;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;">&#x73;&#117;&#112;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
+<a href="&#109;&#97;&#105;&#108;&#x74;&#111;&#x3a;&#x73;&#x75;&#112;&#x70;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;">&#x73;&#x75;&#112;&#x70;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
usually at least 4 weeks, but extra time is allowed around common
holidays.)</li>
</ol>
@@ -112,5 +112,5 @@ things into it.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-disputes &mdash; npm@2.7.0</p>
+<p id="footer">npm-disputes &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
index cfc8ef69e8..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.
<p>To check if the registry is down, open up
<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a> in a web browser. This will also tell
you if you are just unable to access the internet for some reason.</p>
-<p>If the registry IS down, let us know by emailing <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#116;&#x40;&#110;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;">&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#116;&#x40;&#110;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#x61;&#105;&#108;&#116;&#x6f;&#x3a;&#x73;&#x75;&#112;&#x70;&#x6f;&#x72;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#46;&#x63;&#111;&#109;">&#x73;&#x75;&#112;&#x70;&#x6f;&#x72;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#46;&#x63;&#111;&#109;</a>
or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. If it&#39;s
down for the world (and not just on your local network) then we&#39;re
probably already being pinged about it.</p>
@@ -307,5 +307,5 @@ good folks at <a href="http://www.npmjs.com">npm, Inc.</a></p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-faq &mdash; npm@2.7.0</p>
+<p id="footer">npm-faq &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html
index dd0540ec58..cc2aab8025 100644
--- a/deps/npm/html/doc/misc/npm-index.html
+++ b/deps/npm/html/doc/misc/npm-index.html
@@ -236,5 +236,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-index &mdash; npm@2.7.0</p>
+<p id="footer">npm-index &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html
index f1751c889f..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-registry &mdash; npm@2.7.0</p>
+<p id="footer">npm-registry &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html
index f1aef4a8e3..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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-scope &mdash; npm@2.7.0</p>
+<p id="footer">npm-scope &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
index e2b675beb8..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.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-scripts &mdash; npm@2.7.0</p>
+<p id="footer">npm-scripts &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html
index f9a9be698b..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:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">removing-npm &mdash; npm@2.7.0</p>
+<p id="footer">removing-npm &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html
index 9b445e3320..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 <code>satisfies(version, range)</code> function.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">semver &mdash; npm@2.7.0</p>
+<p id="footer">semver &mdash; npm@2.7.4</p>
diff --git a/deps/npm/html/partial/doc/README.html b/deps/npm/html/partial/doc/README.html
index 76974ea17c..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.</p>
<p>If you have a complaint about a package in the public npm registry,
and cannot <a href="https://docs.npmjs.com/misc/disputes">resolve it with the package
owner</a>, please email
-<a href="&#109;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#x73;&#117;&#112;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#109;">&#x73;&#117;&#112;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#109;</a> and explain the situation.</p>
+<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#115;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#x63;&#x6f;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#x63;&#x6f;&#x6d;</a> and explain the situation.</p>
<p>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.</p>
diff --git a/deps/npm/html/partial/doc/api/npm.html b/deps/npm/html/partial/doc/api/npm.html
index a3d22dc303..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([&quot;package&quot;], cb)
})
</code></pre><h2 id="version">VERSION</h2>
-<p>2.7.0</p>
+<p>2.7.4</p>
<h2 id="description">DESCRIPTION</h2>
<p>This is the API documentation for npm.
To find documentation of the command line
diff --git a/deps/npm/html/partial/doc/cli/npm-install.html b/deps/npm/html/partial/doc/cli/npm-install.html
index a8e84d1a00..dc601780c3 100644
--- a/deps/npm/html/partial/doc/cli/npm-install.html
+++ b/deps/npm/html/partial/doc/cli/npm-install.html
@@ -121,8 +121,8 @@ fetch the package by name if it is not valid.
npm install @myorg/privatepackage@&quot;&gt;=0.1.0 &lt;0.2.0&quot;
</code></pre></li>
<li><p><code>npm install &lt;githubname&gt;/&lt;githubrepo&gt;</code>:</p>
-<p> Install the package at <code>https://github.com/githubname/githubrepo&quot; by
- attempting to clone it using</code>git`.</p>
+<p> Install the package at <code>https://github.com/githubname/githubrepo</code> by
+ attempting to clone it using <code>git</code>.</p>
<p> Example:</p>
<pre><code> npm install mygithubuser/myproject
</code></pre><p> To reference a package in a git repo that is not on GitHub, see git
diff --git a/deps/npm/html/partial/doc/cli/npm-link.html b/deps/npm/html/partial/doc/cli/npm-link.html
index 1a33cf2c3e..d25a64005b 100644
--- a/deps/npm/html/partial/doc/cli/npm-link.html
+++ b/deps/npm/html/partial/doc/cli/npm-link.html
@@ -24,7 +24,8 @@ npm link # creates global link
cd ~/projects/node-bloggy # go into some other package directory.
npm link redis # link-install the package
</code></pre><p>Now, any changes to ~/projects/node-redis will be reflected in
-~/projects/node-bloggy/node_modules/node-redis/</p>
+~/projects/node-bloggy/node_modules/node-redis/. Note that the link should
+be to the package name, not the directory name for that package. </p>
<p>You may also shortcut the two steps in one. For example, to do the
above use-case in a shorter way:</p>
<pre><code>cd ~/projects/node-bloggy # go into the dir of your main project
diff --git a/deps/npm/html/partial/doc/cli/npm-ls.html b/deps/npm/html/partial/doc/cli/npm-ls.html
index a3cab85695..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.</p>
limit the results to only the paths to the packages named. Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-<pre><code>npm@2.7.0 /path/to/npm
+<pre><code>npm@2.7.4 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
diff --git a/deps/npm/html/partial/doc/cli/npm-run-script.html b/deps/npm/html/partial/doc/cli/npm-run-script.html
index 5ee7644078..4d3b6722f0 100644
--- a/deps/npm/html/partial/doc/cli/npm-run-script.html
+++ b/deps/npm/html/partial/doc/cli/npm-run-script.html
@@ -19,6 +19,12 @@ and not to any pre or post script.</p>
environment variables that will be available to the script at runtime. If an
&quot;env&quot; command is defined in your package it will take precedence over the
built-in.</p>
+<p>In addition to the shell&#39;s pre-existing <code>PATH</code>, <code>npm run</code> adds
+<code>node_modules/.bin</code> to the <code>PATH</code> provided to scripts. Any binaries provided by
+locally-installed dependencies can be used without the <code>node_modules/.bin</code>
+prefix. For example, if there is a <code>devDependency</code> on <code>tap</code> in your package,
+you should write <code>&quot;scripts&quot;: {&quot;test&quot;: &quot;tap test/\*.js&quot;}</code> instead of <code>&quot;scripts&quot;:
+{&quot;test&quot;: &quot;node_modules/.bin/tap test/\*.js&quot;}</code> to run your tests.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
diff --git a/deps/npm/html/partial/doc/cli/npm.html b/deps/npm/html/partial/doc/cli/npm.html
index a290535ece..c2272b8f0d 100644
--- a/deps/npm/html/partial/doc/cli/npm.html
+++ b/deps/npm/html/partial/doc/cli/npm.html
@@ -2,7 +2,7 @@
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm &lt;command&gt; [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>2.7.0</p>
+<p>2.7.4</p>
<h2 id="description">DESCRIPTION</h2>
<p>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 <code>npm view npm contributors</code>.</p>
the issues list or ask on the mailing list.</p>
<ul>
<li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
-<li><a href="&#109;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#110;&#x70;&#109;&#45;&#64;&#x67;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#111;&#117;&#112;&#115;&#46;&#99;&#111;&#x6d;">&#110;&#x70;&#109;&#45;&#64;&#x67;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#111;&#117;&#112;&#115;&#46;&#99;&#111;&#x6d;</a></li>
+<li><a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#x6f;&#x3a;&#x6e;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#x6d;">&#x6e;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#x6d;</a></li>
</ul>
<h2 id="bugs">BUGS</h2>
<p>When you find issues, please report them:</p>
@@ -107,7 +107,7 @@ the issues list or ask on the mailing list.</p>
<li>web:
<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
<li>email:
-<a href="&#x6d;&#x61;&#105;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#x6d;&#45;&#64;&#x67;&#111;&#x6f;&#103;&#x6c;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#109;">&#x6e;&#112;&#x6d;&#45;&#64;&#x67;&#111;&#x6f;&#103;&#x6c;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#x63;&#x6f;&#109;</a></li>
+<a href="&#109;&#97;&#105;&#108;&#x74;&#111;&#58;&#110;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#x6c;&#x65;&#103;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#99;&#111;&#109;">&#110;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#x6c;&#x65;&#103;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#99;&#111;&#109;</a></li>
</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
@@ -117,7 +117,7 @@ will no doubt tell you to put the output in a gist or email.</p>
<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
-<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#x69;&#x40;&#x69;&#122;&#115;&#x2e;&#x6d;&#101;">&#x69;&#x40;&#x69;&#122;&#115;&#x2e;&#x6d;&#101;</a></p>
+<a href="&#x6d;&#x61;&#105;&#108;&#x74;&#111;&#x3a;&#x69;&#x40;&#105;&#122;&#115;&#x2e;&#109;&#101;">&#x69;&#x40;&#105;&#122;&#115;&#x2e;&#109;&#101;</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
diff --git a/deps/npm/html/partial/doc/misc/npm-disputes.html b/deps/npm/html/partial/doc/misc/npm-disputes.html
index 2a9cb8246f..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 @@
<h2 id="synopsis">SYNOPSIS</h2>
<ol>
<li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
-<li>Email the author, CC <a href="&#x6d;&#97;&#x69;&#108;&#116;&#x6f;&#x3a;&#x73;&#x75;&#x70;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#111;&#x6d;">&#x73;&#x75;&#x70;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#x6d;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;">&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;</a></li>
<li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
</ol>
<p>Don&#39;t squat on package names. Publish code or move out of the way.</p>
@@ -40,12 +40,12 @@ Joe&#39;s appropriate course of action in each case is the same.</p>
owner (Bob).</li>
<li>Joe emails Bob, explaining the situation <strong>as respectfully as
possible</strong>, and what he would like to do with the module name. He
-adds the npm support staff <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#46;&#99;&#111;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#46;&#99;&#111;&#x6d;</a> to the CC list of
+adds the npm support staff <a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#115;&#46;&#x63;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#64;&#110;&#112;&#x6d;&#x6a;&#115;&#46;&#x63;&#111;&#x6d;</a> to the CC list of
the email. Mention in the email that Bob can run <code>npm owner add
joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
<li>After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can&#39;t come to any sort of resolution, email support
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#111;&#58;&#x73;&#117;&#112;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;">&#x73;&#117;&#112;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
+<a href="&#109;&#97;&#105;&#108;&#x74;&#111;&#x3a;&#x73;&#x75;&#112;&#x70;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;">&#x73;&#x75;&#112;&#x70;&#111;&#114;&#x74;&#x40;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
usually at least 4 weeks, but extra time is allowed around common
holidays.)</li>
</ol>
diff --git a/deps/npm/html/partial/doc/misc/npm-faq.html b/deps/npm/html/partial/doc/misc/npm-faq.html
index 60db91f90b..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.
<p>To check if the registry is down, open up
<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a> in a web browser. This will also tell
you if you are just unable to access the internet for some reason.</p>
-<p>If the registry IS down, let us know by emailing <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#116;&#x40;&#110;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;">&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#116;&#x40;&#110;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#x61;&#105;&#108;&#116;&#x6f;&#x3a;&#x73;&#x75;&#112;&#x70;&#x6f;&#x72;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#46;&#x63;&#111;&#109;">&#x73;&#x75;&#112;&#x70;&#x6f;&#x72;&#116;&#x40;&#x6e;&#112;&#x6d;&#x6a;&#x73;&#46;&#x63;&#111;&#109;</a>
or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. If it&#39;s
down for the world (and not just on your local network) then we&#39;re
probably already being pinged about it.</p>
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/add-named.js b/deps/npm/lib/cache/add-named.js
index d81b7b0da6..cb5a3fa8a6 100644
--- a/deps/npm/lib/cache/add-named.js
+++ b/deps/npm/lib/cache/add-named.js
@@ -12,7 +12,6 @@ var path = require("path")
, addRemoteTarball = require("./add-remote-tarball.js")
, cachedPackageRoot = require("./cached-package-root.js")
, mapToRegistry = require("../utils/map-to-registry.js")
- , warnStrict = require("../utils/warn-deprecated.js")("engineStrict")
module.exports = addNamed
@@ -92,12 +91,6 @@ function engineFilter (data) {
Object.keys(data.versions || {}).forEach(function (v) {
var eng = data.versions[v].engines
if (!eng) return
- if (data.versions[v].engineStrict) {
- warnStrict([
- "Per-package engineStrict (found in package.json for "+data.name+")",
- "won't be used in npm 3+. Use the config setting `engine-strict` instead."
- ], data.name)
- }
if (!strict && !data.versions[v].engineStrict) return
if (eng.node && !semver.satisfies(nodev, eng.node, true)
|| eng.npm && !semver.satisfies(npmv, eng.npm, true)) {
diff --git a/deps/npm/lib/cache/add-remote-git.js b/deps/npm/lib/cache/add-remote-git.js
index 974c158f9c..9eaf6b18a5 100644
--- a/deps/npm/lib/cache/add-remote-git.js
+++ b/deps/npm/lib/cache/add-remote-git.js
@@ -1,269 +1,330 @@
-var mkdir = require("mkdirp")
- , assert = require("assert")
- , git = require("../utils/git.js")
- , fs = require("graceful-fs")
- , log = require("npmlog")
- , path = require("path")
- , url = require("url")
- , chownr = require("chownr")
- , crypto = require("crypto")
- , npm = require("../npm.js")
- , rm = require("../utils/gently-rm.js")
- , inflight = require("inflight")
- , getCacheStat = require("./get-stat.js")
- , addLocal = require("./add-local.js")
- , realizePackageSpecifier = require("realize-package-specifier")
- , normalizeGitUrl = require("normalize-git-url")
- , randomBytes = require("crypto").pseudoRandomBytes // only need uniqueness
-
-var remotes = path.resolve(npm.config.get("cache"), "_git-remotes")
-var templates = path.join(remotes, "_templates")
+var mkdir = require('mkdirp')
+var assert = require('assert')
+var git = require('../utils/git.js')
+var fs = require('graceful-fs')
+var log = require('npmlog')
+var path = require('path')
+var url = require('url')
+var chownr = require('chownr')
+var crypto = require('crypto')
+var npm = require('../npm.js')
+var rm = require('../utils/gently-rm.js')
+var inflight = require('inflight')
+var getCacheStat = require('./get-stat.js')
+var addLocal = require('./add-local.js')
+var realizePackageSpecifier = require('realize-package-specifier')
+var normalizeGitUrl = require('normalize-git-url')
+var randomBytes = require('crypto').pseudoRandomBytes // only need uniqueness
+
+var remotes = path.resolve(npm.config.get('cache'), '_git-remotes')
+var templates = path.join(remotes, '_templates')
var VALID_VARIABLES = [
- "GIT_SSH",
- "GIT_SSL_NO_VERIFY",
- "GIT_PROXY_COMMAND",
- "GIT_SSL_CAINFO"
+ 'GIT_SSH',
+ 'GIT_SSL_NO_VERIFY',
+ 'GIT_PROXY_COMMAND',
+ 'GIT_SSL_CAINFO'
]
-// 1. cacheDir = path.join(cache,'_git-remotes',sha1(u))
-// 2. checkGitDir(cacheDir) ? 4. : 3. (rm cacheDir if necessary)
-// 3. git clone --mirror u cacheDir
-// 4. cd cacheDir && git fetch -a origin
-// 5. git archive /tmp/random.tgz
-// 6. addLocalTarball(/tmp/random.tgz) <gitref> --format=tar --prefix=package/
-// silent flag is used if this should error quietly
-module.exports = function addRemoteGit (u, silent, cb) {
- assert(typeof u === "string", "must have git URL")
- assert(typeof cb === "function", "must have callback")
-
- log.verbose("addRemoteGit", "u=%j silent=%j", u, silent)
- var normalized = normalizeGitUrl(u)
- log.silly("addRemoteGit", "normalized", normalized)
-
- var v = crypto.createHash("sha1").update(normalized.url).digest("hex").slice(0, 8)
- v = normalized.url.replace(/[^a-zA-Z0-9]+/g, "-")+"-"+v
- log.silly("addRemoteGit", "v", v)
-
- var p = path.join(remotes, v)
- cb = inflight(p, cb)
- if (!cb) return log.verbose("addRemoteGit", p, "already in flight; waiting")
- log.verbose("addRemoteGit", p, "not in flight; cloning")
+module.exports = function addRemoteGit (uri, silent, cb) {
+ assert(typeof uri === 'string', 'must have git URL')
+ assert(typeof cb === 'function', 'must have callback')
+
+ // reconstruct the URL as it was passed in – realizePackageSpecifier
+ // strips off `git+` and `maybeGithub` doesn't include it.
+ var originalURL
+ if (!/^git[+:]/.test(uri)) {
+ originalURL = 'git+' + uri
+ } else {
+ originalURL = uri
+ }
- getGitDir(function (er) {
- if (er) return cb(er)
- checkGitDir(p, normalized.url, normalized.branch, u, silent, function (er, data) {
- if (er) return cb(er, data)
+ // break apart the origin URL and the branch / tag / commitish
+ var normalized = normalizeGitUrl(uri)
+ var gitURL = normalized.url
+ var treeish = normalized.branch
- addModeRecursive(p, npm.modes.file, function (er) {
- return cb(er, data)
- })
- })
- })
-}
+ // ensure that similarly-named remotes don't collide
+ var repoID = gitURL.replace(/[^a-zA-Z0-9]+/g, '-') + '-' +
+ crypto.createHash('sha1').update(gitURL).digest('hex').slice(0, 8)
+ var cachedRemote = path.join(remotes, repoID)
-function getGitDir (cb) {
- getCacheStat(function (er, st) {
- if (er) return cb(er)
+ // set later, as the callback flow proceeds
+ var resolvedURL
+ var resolvedTreeish
+ var tmpdir
- // We don't need global templates when cloning. Use an empty directory for
- // the templates, creating it (and setting its permissions) if necessary.
- mkdir(templates, function (er) {
- if (er) return cb(er)
+ cb = inflight(repoID, cb)
+ if (!cb) {
+ return log.verbose('addRemoteGit', repoID, 'already in flight; waiting')
+ }
+ log.verbose('addRemoteGit', repoID, 'not in flight; caching')
- // Ensure that both the template and remotes directories have the correct
- // permissions.
- fs.chown(templates, st.uid, st.gid, function (er) {
- if (er) return cb(er)
+ // initialize the remotes cache with the correct perms
+ getGitDir(function (er) {
+ if (er) return cb(er)
+ fs.stat(cachedRemote, function (er, s) {
+ if (er) return mirrorRemote(finish)
+ if (!s.isDirectory()) return resetRemote(finish)
- fs.chown(remotes, st.uid, st.gid, function (er) {
- cb(er, st)
- })
- })
+ validateExistingRemote(finish)
})
+
+ // always set permissions on the cached remote
+ function finish (er, data) {
+ if (er) return cb(er, data)
+ addModeRecursive(cachedRemote, npm.modes.file, function (er) {
+ return cb(er, data)
+ })
+ }
})
-}
-function checkGitDir (p, u, co, origUrl, silent, cb) {
- fs.stat(p, function (er, s) {
- if (er) return cloneGitRemote(p, u, co, origUrl, silent, cb)
- if (!s.isDirectory()) return rm(p, function (er) {
+ // don't try too hard to hold on to a remote
+ function resetRemote (cb) {
+ log.info('addRemoteGit', 'resetting', cachedRemote)
+ rm(cachedRemote, function (er) {
if (er) return cb(er)
- cloneGitRemote(p, u, co, origUrl, silent, cb)
+ mirrorRemote(cb)
})
+ }
+ // reuse a cached remote when possible, but nuke it if it's in an
+ // inconsistent state
+ function validateExistingRemote (cb) {
git.whichAndExec(
- [ "config", "--get", "remote.origin.url" ],
- { cwd : p, env : gitEnv },
+ ['config', '--get', 'remote.origin.url'],
+ { cwd: cachedRemote, env: gitEnv() },
function (er, stdout, stderr) {
- var stdoutTrimmed = (stdout + "\n" + stderr).trim()
- if (er || u !== stdout.trim()) {
- log.warn( "`git config --get remote.origin.url` returned "
- + "wrong result ("+u+")", stdoutTrimmed )
- return rm(p, function (er){
- if (er) return cb(er)
- cloneGitRemote(p, u, co, origUrl, silent, cb)
- })
+ var originURL = stdout.trim()
+ stderr = stderr.trim()
+ log.verbose('addRemoteGit', 'remote.origin.url:', originURL)
+
+ if (stderr || er) {
+ log.warn('addRemoteGit', 'resetting remote', cachedRemote, 'because of error:', stderr || er)
+ return resetRemote(cb)
+ } else if (gitURL !== originURL) {
+ log.warn(
+ 'addRemoteGit',
+ 'pre-existing cached repo', cachedRemote, 'points to', originURL, 'and not', gitURL
+ )
+ return resetRemote(cb)
}
- log.verbose("git remote.origin.url", stdoutTrimmed)
- fetchRemote(p, u, co, origUrl, cb)
+
+ log.verbose('addRemoteGit', 'updating existing cached remote', cachedRemote)
+ updateRemote(cb)
}
)
- })
-}
+ }
-function cloneGitRemote (p, u, co, origUrl, silent, cb) {
- mkdir(p, function (er) {
- if (er) return cb(er)
+ // make a complete bare mirror of the remote repo
+ // NOTE: npm uses a blank template directory to prevent weird inconsistencies
+ // https://github.com/npm/npm/issues/5867
+ function mirrorRemote (cb) {
+ mkdir(cachedRemote, function (er) {
+ if (er) return cb(er)
- git.whichAndExec(
- [ "clone", "--template=" + templates, "--mirror", u, p ],
- { cwd : p, env : gitEnv() },
- function (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- if (silent) {
- log.verbose("git clone " + u, stdout)
- } else {
- log.error("git clone " + u, stdout)
+ var args = [
+ 'clone',
+ '--template=' + templates,
+ '--mirror',
+ gitURL, cachedRemote
+ ]
+ git.whichAndExec(
+ ['clone', '--template=' + templates, '--mirror', gitURL, cachedRemote],
+ { cwd: cachedRemote, env: gitEnv() },
+ function (er, stdout, stderr) {
+ if (er) {
+ var combined = (stdout + '\n' + stderr).trim()
+ var command = 'git ' + args.join(' ') + ':'
+ if (silent) {
+ log.verbose(command, combined)
+ } else {
+ log.error(command, combined)
+ }
+ return cb(er)
}
- return cb(er)
+ log.verbose('addRemoteGit', 'git clone ' + gitURL, stdout.trim())
+ setPermissions(cb)
}
- log.verbose("git clone " + u, stdout)
- fetchRemote(p, u, co, origUrl, cb)
- }
- )
- })
-}
+ )
+ })
+ }
-function fetchRemote (p, u, co, origUrl, cb) {
- git.whichAndExec(
- [ "fetch", "-a", "origin" ],
- { cwd : p, env : gitEnv() },
- function (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- log.error("git fetch -a origin ("+u+")", stdout)
- return cb(er)
- }
- log.verbose("git fetch -a origin ("+u+")", stdout)
+ function setPermissions (cb) {
+ if (process.platform === 'win32') {
+ log.verbose('addRemoteGit', 'skipping chownr on Windows')
+ resolveHead(cb)
+ } else {
+ getGitDir(function (er, cs) {
+ if (er) {
+ log.error('addRemoteGit', 'could not get cache stat')
+ return cb(er)
+ }
- if (process.platform === "win32") {
- log.silly("verifyOwnership", "skipping for windows")
- resolveHead(p, u, co, origUrl, cb)
- }
- else {
- getGitDir(function (er, cs) {
+ chownr(cachedRemote, cs.uid, cs.gid, function (er) {
if (er) {
- log.error("Could not get cache stat")
+ log.error(
+ 'addRemoteGit',
+ 'Failed to change folder ownership under npm cache for',
+ cachedRemote
+ )
return cb(er)
}
- chownr(p, cs.uid, cs.gid, function (er) {
- if (er) {
- log.error("Failed to change folder ownership under npm cache for %s", p)
- return cb(er)
- }
-
- resolveHead(p, u, co, origUrl, cb)
- })
+ log.verbose('addRemoteGit', 'set permissions on', cachedRemote)
+ resolveHead(cb)
})
- }
+ })
}
- )
-}
-
-function resolveHead (p, u, co, origUrl, cb) {
- git.whichAndExec(
- [ "rev-list", "-n1", co ],
- { cwd : p, env : gitEnv() },
- function (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- log.error("Failed resolving git HEAD (" + u + ")", stderr)
- return cb(er)
- }
- log.verbose("git rev-list -n1 " + co, stdout)
- var parsed = url.parse(origUrl)
- parsed.hash = stdout
- var resolved = url.format(parsed)
+ }
- if (!/^git[+:]/.test(parsed.protocol)) {
- resolved = "git+" + resolved
- }
+ // always fetch the origin, even right after mirroring, because this way
+ // permissions will get set correctly
+ function updateRemote (cb) {
+ git.whichAndExec(
+ ['fetch', '-a', 'origin'],
+ { cwd: cachedRemote, env: gitEnv() },
+ function (er, stdout, stderr) {
+ if (er) {
+ var combined = (stdout + '\n' + stderr).trim()
+ log.error('git fetch -a origin (' + gitURL + ')', combined)
+ return cb(er)
+ }
+ log.verbose('addRemoteGit', 'git fetch -a origin (' + gitURL + ')', stdout.trim())
- // https://github.com/npm/npm/issues/3224
- // node incorrectly sticks a / at the start of the path We know that the
- // host won't change, so split and detect this
- var spo = origUrl.split(parsed.host)
- var spr = resolved.split(parsed.host)
- if (spo[1].charAt(0) === ":" && spr[1].charAt(0) === "/") {
- spr[1] = spr[1].slice(1)
+ setPermissions(cb)
}
- resolved = spr.join(parsed.host)
+ )
+ }
- log.verbose("resolved git url", resolved)
- cache(p, u, stdout, resolved, cb)
- }
- )
-}
+ // branches and tags are both symbolic labels that can be attached to different
+ // commits, so resolve the commitish to the current actual treeish the label
+ // corresponds to
+ //
+ // important for shrinkwrap
+ function resolveHead (cb) {
+ log.verbose('addRemoteGit', 'original treeish:', treeish)
+ var args = ['rev-list', '-n1', treeish]
+ git.whichAndExec(
+ args,
+ { cwd: cachedRemote, env: gitEnv() },
+ function (er, stdout, stderr) {
+ if (er) {
+ log.error('git ' + args.join(' ') + ':', stderr)
+ return cb(er)
+ }
-/**
- * Make an actual clone from the bare (mirrored) cache. There is no safe way to
- * do a one-step clone to a treeish that isn't guaranteed to be a branch, so
- * this has to be two steps.
- */
-function cache (p, u, treeish, resolved, cb) {
- // generate a unique filename
- randomBytes(6, function (er, random) {
- if (er) return cb(er)
+ resolvedTreeish = stdout.trim()
+ log.silly('addRemoteGit', 'resolved treeish:', resolvedTreeish)
- var tmp = path.join(
- npm.tmp,
- "git-cache-"+random.toString("hex"),
- treeish
- )
+ resolvedURL = getResolved(originalURL, resolvedTreeish)
+ log.verbose('addRemoteGit', 'resolved Git URL:', resolvedURL)
- mkdir(tmp, function (er) {
- if (er) return cb(er)
+ // generate a unique filename
+ tmpdir = path.join(
+ npm.tmp,
+ 'git-cache-' + randomBytes(6).toString('hex'),
+ resolvedTreeish
+ )
+ log.silly('addRemoteGit', 'Git working directory:', tmpdir)
- git.whichAndExec(["clone", p, tmp], { cwd : p, env : gitEnv() }, clone)
- })
+ mkdir(tmpdir, function (er) {
+ if (er) return cb(er)
- function clone (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- log.error("Failed to clone "+resolved+" from "+u, stderr)
- return cb(er)
+ cloneResolved(cb)
+ })
}
- log.verbose("git clone", "from", p)
- log.verbose("git clone", stdout)
+ )
+ }
- git.whichAndExec(["checkout", treeish], { cwd : tmp, env : gitEnv() }, checkout)
- }
+ // make a clone from the mirrored cache so we have a temporary directory in
+ // which we can check out the resolved treeish
+ function cloneResolved (cb) {
+ var args = ['clone', cachedRemote, tmpdir]
+ git.whichAndExec(
+ args,
+ { cwd: cachedRemote, env: gitEnv() },
+ function (er, stdout, stderr) {
+ stdout = (stdout + '\n' + stderr).trim()
+ if (er) {
+ log.error('git ' + args.join(' ') + ':', stderr)
+ return cb(er)
+ }
+ log.verbose('addRemoteGit', 'clone', stdout)
- function checkout (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- log.error("Failed to check out "+treeish, stderr)
- return cb(er)
+ checkoutTreeish(cb)
}
- log.verbose("git checkout", stdout)
+ )
+ }
- realizePackageSpecifier(tmp, function (er, spec) {
+ // there is no safe way to do a one-step clone to a treeish that isn't
+ // guaranteed to be a branch, so explicitly check out the treeish once it's
+ // cloned
+ function checkoutTreeish (cb) {
+ var args = ['checkout', resolvedTreeish]
+ git.whichAndExec(
+ args,
+ { cwd: tmpdir, env: gitEnv() },
+ function (er, stdout, stderr) {
+ stdout = (stdout + '\n' + stderr).trim()
if (er) {
- log.error("Failed to map", tmp, "to a package specifier")
+ log.error('git ' + args.join(' ') + ':', stderr)
return cb(er)
}
+ log.verbose('addRemoteGit', 'checkout', stdout)
- // https://github.com/npm/npm/issues/6400
- // ensure pack logic is applied
- addLocal(spec, null, function (er, data) {
- if (data) data._resolved = resolved
- cb(er, data)
+ // convince addLocal that the checkout is a local dependency
+ realizePackageSpecifier(tmpdir, function (er, spec) {
+ if (er) {
+ log.error('addRemoteGit', 'Failed to map', tmpdir, 'to a package specifier')
+ return cb(er)
+ }
+
+ // ensure pack logic is applied
+ // https://github.com/npm/npm/issues/6400
+ addLocal(spec, null, function (er, data) {
+ if (data) {
+ log.verbose('addRemoteGit', 'data._resolved:', resolvedURL)
+ data._resolved = resolvedURL
+
+ // the spec passed to addLocal is not what the user originally requested,
+ // so remap
+ // https://github.com/npm/npm/issues/7121
+ if (!data._fromGitHub) {
+ log.silly('addRemoteGit', 'data._from:', originalURL)
+ data._from = originalURL
+ } else {
+ log.silly('addRemoteGit', 'data._from:', data._from, '(GitHub)')
+ }
+ }
+
+ cb(er, data)
+ })
+ })
+ }
+ )
+ }
+}
+
+function getGitDir (cb) {
+ getCacheStat(function (er, stats) {
+ if (er) return cb(er)
+
+ // We don't need global templates when cloning. Use an empty directory for
+ // the templates, creating it (and setting its permissions) if necessary.
+ mkdir(templates, function (er) {
+ if (er) return cb(er)
+
+ // Ensure that both the template and remotes directories have the correct
+ // permissions.
+ fs.chown(templates, stats.uid, stats.gid, function (er) {
+ if (er) return cb(er)
+
+ fs.chown(remotes, stats.uid, stats.gid, function (er) {
+ cb(er, stats)
})
})
- }
+ })
})
}
@@ -280,41 +341,60 @@ function gitEnv () {
return gitEnv_
}
+function getResolved (uri, treeish) {
+ var parsed = url.parse(uri)
+ parsed.hash = treeish
+ if (!/^git[+:]/.test(parsed.protocol)) {
+ parsed.protocol = 'git+' + parsed.protocol
+ }
+ var resolved = url.format(parsed)
+
+ // node incorrectly sticks a / at the start of the path We know that the host
+ // won't change, so split and detect this
+ // https://github.com/npm/npm/issues/3224
+ var spo = uri.split(parsed.host)
+ var spr = resolved.split(parsed.host)
+ if (spo[1].charAt(0) === ':' && spr[1].charAt(0) === '/') {
+ spr[1] = spr[1].slice(1)
+ }
+ return spr.join(parsed.host)
+}
+
// similar to chmodr except it add permissions rather than overwriting them
// adapted from https://github.com/isaacs/chmodr/blob/master/chmodr.js
-function addModeRecursive(p, mode, cb) {
- fs.readdir(p, function (er, children) {
+function addModeRecursive (cachedRemote, mode, cb) {
+ fs.readdir(cachedRemote, function (er, children) {
// Any error other than ENOTDIR means it's not readable, or doesn't exist.
// Give up.
- if (er && er.code !== "ENOTDIR") return cb(er)
- if (er || !children.length) return addMode(p, mode, cb)
+ if (er && er.code !== 'ENOTDIR') return cb(er)
+ if (er || !children.length) return addMode(cachedRemote, mode, cb)
var len = children.length
var errState = null
children.forEach(function (child) {
- addModeRecursive(path.resolve(p, child), mode, then)
+ addModeRecursive(path.resolve(cachedRemote, child), mode, then)
})
function then (er) {
if (errState) return undefined
if (er) return cb(errState = er)
- if (--len === 0) return addMode(p, dirMode(mode), cb)
+ if (--len === 0) return addMode(cachedRemote, dirMode(mode), cb)
}
})
}
-function addMode(p, mode, cb) {
- fs.stat(p, function (er, stats) {
+function addMode (cachedRemote, mode, cb) {
+ fs.stat(cachedRemote, function (er, stats) {
if (er) return cb(er)
mode = stats.mode | mode
- fs.chmod(p, mode, cb)
+ fs.chmod(cachedRemote, mode, cb)
})
}
// taken from https://github.com/isaacs/chmodr/blob/master/chmodr.js
-function dirMode(mode) {
- if (mode & parseInt("0400", 8)) mode |= parseInt("0100", 8)
- if (mode & parseInt( "040", 8)) mode |= parseInt( "010", 8)
- if (mode & parseInt( "04", 8)) mode |= parseInt( "01", 8)
+function dirMode (mode) {
+ if (mode & parseInt('0400', 8)) mode |= parseInt('0100', 8)
+ if (mode & parseInt('040', 8)) mode |= parseInt('010', 8)
+ if (mode & parseInt('04', 8)) mode |= parseInt('01', 8)
return mode
}
diff --git a/deps/npm/lib/cache/add-remote-tarball.js b/deps/npm/lib/cache/add-remote-tarball.js
index e87ac54bb1..66d2200966 100644
--- a/deps/npm/lib/cache/add-remote-tarball.js
+++ b/deps/npm/lib/cache/add-remote-tarball.js
@@ -19,8 +19,8 @@ function addRemoteTarball (u, pkgData, shasum, auth, cb_) {
function cb (er, data) {
if (data) {
data._from = u
- data._shasum = data._shasum || shasum
data._resolved = u
+ data._shasum = data._shasum || shasum
}
cb_(er, data)
}
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/config/defaults.js b/deps/npm/lib/config/defaults.js
index e49ce210b3..e5744772ed 100644
--- a/deps/npm/lib/config/defaults.js
+++ b/deps/npm/lib/config/defaults.js
@@ -32,12 +32,6 @@ function validateSemver (data, k, val) {
data[k] = semver.valid(val)
}
-function validateTag (data, k, val) {
- val = ("" + val).trim()
- if (!val || semver.validRange(val)) return false
- data[k] = val
-}
-
function validateStream (data, k, val) {
if (!(val instanceof Stream)) return false
data[k] = val
@@ -47,10 +41,6 @@ nopt.typeDefs.semver = { type: semver, validate: validateSemver }
nopt.typeDefs.Stream = { type: Stream, validate: validateStream }
nopt.typeDefs.Umask = { type: Umask, validate: validateUmask }
-// Don't let --tag=1.2.3 ever be a thing
-var tag = {}
-nopt.typeDefs.tag = { type: tag, validate: validateTag }
-
nopt.invalidHandler = function (k, val, type) {
log.warn("invalid config", k + "=" + JSON.stringify(val))
@@ -60,9 +50,6 @@ nopt.invalidHandler = function (k, val, type) {
}
switch (type) {
- case tag:
- log.warn("invalid config", "Tag must not be a SemVer range")
- break
case Umask:
log.warn("invalid config", "Must be umask, octal number in range 0000..0777")
break
@@ -312,7 +299,7 @@ exports.types =
, "sign-git-tag": Boolean
, spin: ["always", Boolean]
, "strict-ssl": Boolean
- , tag : tag
+ , tag : String
, tmp : path
, unicode : Boolean
, "unsafe-perm" : Boolean
diff --git a/deps/npm/lib/dedupe.js b/deps/npm/lib/dedupe.js
index 6a4abd7307..c63705e18d 100644
--- a/deps/npm/lib/dedupe.js
+++ b/deps/npm/lib/dedupe.js
@@ -314,11 +314,28 @@ function readInstalled (dir, counter, parent, cb) {
})
fs.readdir(path.resolve(dir, "node_modules"), function (er, c) {
- children = c || [] // error is ok, just means no children.
- children = children.filter(function (p) {
- return !p.match(/^[\._-]/)
- })
- next()
+ children = children || [] // error is ok, just means no children.
+ // check if there are scoped packages.
+ asyncMap(c || [], function (child, cb) {
+ if (child.indexOf('@') === 0) {
+ fs.readdir(path.resolve(dir, "node_modules", child), function (er, scopedChildren) {
+ // error is ok, just means no children.
+ (scopedChildren || []).forEach(function (sc) {
+ children.push(path.join(child, sc))
+ })
+ cb()
+ })
+ } else {
+ children.push(child)
+ cb()
+ }
+ }, function (er) {
+ if (er) return cb(er)
+ children = children.filter(function (p) {
+ return !p.match(/^[\._-]/)
+ })
+ next();
+ });
})
function next () {
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index 73580e5afa..d9a8c9af0d 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -109,6 +109,7 @@ var npm = require("./npm.js")
, locker = require("./utils/locker.js")
, lock = locker.lock
, unlock = locker.unlock
+ , warnStrict = require("./utils/warn-deprecated.js")("engineStrict")
, warnPeers = require("./utils/warn-deprecated.js")("peerDependencies")
function install (args, cb_) {
@@ -117,7 +118,7 @@ function install (args, cb_) {
function cb (er, installed) {
if (er) return cb_(er)
- findPeerInvalid(where, function (er, problem) {
+ validateInstall(where, function (er, problem) {
if (er) return cb_(er)
if (problem) {
@@ -244,11 +245,24 @@ function install (args, cb_) {
})
}
-function findPeerInvalid (where, cb) {
- readInstalled(where, { log: log.warn, dev: true }, function (er, data) {
- if (er) return cb(er)
+function validateInstall (where, cb) {
+ readJson(path.resolve(where, 'package.json'), log.warn, function (er, data) {
+ if (er
+ && er.code !== 'ENOENT'
+ && er.code !== 'ENOTDIR') return cb(er)
+
+ if (data && data.engineStrict) {
+ warnStrict([
+ "Per-package engineStrict (found in this package's package.json) ",
+ "won't be used in npm 3+. Use the config setting `engine-strict` instead."
+ ], data.name)
+ }
+
+ readInstalled(where, { log: log.warn, dev: true }, function (er, data) {
+ if (er) return cb(er)
- cb(null, findPeerInvalid_(data.dependencies, []))
+ cb(null, findPeerInvalid_(data.dependencies, []))
+ })
})
}
@@ -388,7 +402,6 @@ function readWrap (w) {
// if the -S|--save option is specified, then write installed packages
// as dependencies to a package.json file.
-// This is experimental.
function save (where, installed, tree, pretty, hasArguments, cb) {
if (!hasArguments ||
!npm.config.get("save") &&
@@ -684,34 +697,72 @@ function installMany (what, where, context, cb) {
if (er) return cb(er)
- // each target will be a data object corresponding
- // to a package, folder, or whatever that is in the cache now.
- var newPrev = Object.create(context.family)
- , newAnc = Object.create(context.ancestors)
+ var bundled = data.bundleDependencies || data.bundledDependencies || []
+ // only take the hit for readInstalled if there are probably bundled
+ // dependencies to read
+ if (bundled.length) {
+ readInstalled(where, { dev: true }, andBuildResolvedTree)
+ } else {
+ andBuildResolvedTree()
+ }
+
+ function andBuildResolvedTree (er, current) {
+ if (er) return cb(er)
+
+ // each target will be a data object corresponding
+ // to a package, folder, or whatever that is in the cache now.
+ var newPrev = Object.create(context.family)
+ , newAnc = Object.create(context.ancestors)
+
+ if (!context.root) {
+ newAnc[data.name] = data.version
+ }
+ bundled.forEach(function (bundle) {
+ var bundleData = current.dependencies[bundle]
+ if ((!bundleData || !bundleData.version) && current.devDependencies) {
+ log.verbose(
+ 'installMany', bundle, 'was bundled with',
+ data.name + '@' + data.version +
+ ", but wasn't found in dependencies. Trying devDependencies"
+ )
+ bundleData = current.devDependencies[bundle]
+ }
- if (!context.root) {
- newAnc[data.name] = data.version
+ if (!bundleData || !bundleData.version) {
+ log.warn(
+ 'installMany', bundle, 'was bundled with',
+ data.name + '@' + data.version +
+ ", but bundled package wasn't found in unpacked tree"
+ )
+ } else {
+ log.verbose(
+ 'installMany', bundle + '@' + bundleData.version,
+ 'was bundled with', data.name + '@' + data.version
+ )
+ newPrev[bundle] = bundleData.version
+ }
+ })
+ targets.forEach(function (t) {
+ newPrev[t.name] = t.version
+ })
+ log.silly("install resolved", targets)
+ targets.filter(function (t) { return t }).forEach(function (t) {
+ log.info("install", "%s into %s", t._id, where)
+ })
+ asyncMap(targets, function (target, cb) {
+ log.info("installOne", target._id)
+ var wrapData = wrap ? wrap[target.name] : null
+ var newWrap = wrapData && wrapData.dependencies
+ ? wrap[target.name].dependencies || {}
+ : null
+ var newContext = { family: newPrev
+ , ancestors: newAnc
+ , parent: parent
+ , explicit: false
+ , wrap: newWrap }
+ installOne(target, where, newContext, cb)
+ }, cb)
}
- targets.forEach(function (t) {
- newPrev[t.name] = t.version
- })
- log.silly("install resolved", targets)
- targets.filter(function (t) { return t }).forEach(function (t) {
- log.info("install", "%s into %s", t._id, where)
- })
- asyncMap(targets, function (target, cb) {
- log.info("installOne", target._id)
- var wrapData = wrap ? wrap[target.name] : null
- var newWrap = wrapData && wrapData.dependencies
- ? wrap[target.name].dependencies || {}
- : null
- var newContext = { family: newPrev
- , ancestors: newAnc
- , parent: parent
- , explicit: false
- , wrap: newWrap }
- installOne(target, where, newContext, cb)
- }, cb)
})
})
}
@@ -746,9 +797,9 @@ function targetResolver (where, context, deps) {
// if it's a bundled dep, then assume that anything there is valid.
// otherwise, make sure that it's a semver match with what we want.
var bd = parent.bundleDependencies
- if (bd && bd.indexOf(d.name) !== -1 ||
- semver.satisfies(d.version, deps[d.name] || "*", true) ||
- deps[d.name] === d._resolved) {
+ var isBundled = bd && bd.indexOf(d.name) !== -1
+ var currentIsSatisfactory = semver.satisfies(d.version, deps[d.name] || "*", true)
+ if (isBundled || currentIsSatisfactory || deps[d.name] === d._resolved) {
return cb(null, d.name)
}
@@ -787,6 +838,7 @@ function targetResolver (where, context, deps) {
// check for a version installed higher in the tree.
// If installing from a shrinkwrap, it must match exactly.
if (context.family[what]) {
+ log.verbose('install', what, 'is installed as', context.family[what])
if (wrap && wrap[what].version === context.family[what]) {
log.verbose("shrinkwrap", "use existing", what)
return cb(null, [])
@@ -854,8 +906,11 @@ function targetResolver (where, context, deps) {
function installOne (target, where, context, cb) {
// the --link flag makes this a "link" command if it's at the
// the top level.
+ var isGit = false
+ if (target && target._from) isGit = npa(target._from).type === 'git'
+
if (where === npm.prefix && npm.config.get("link")
- && !npm.config.get("global")) {
+ && !npm.config.get("global") && !isGit) {
return localLink(target, where, context, cb)
}
installOne_(target, where, context, function (er, installedWhat) {
@@ -938,18 +993,12 @@ function installOne_ (target, where, context, cb_) {
if (prettyWhere === ".") prettyWhere = null
cb_ = inflight(target.name + ":" + where, cb_)
- if (!cb_) return log.verbose(
- "installOne",
- "of", target.name,
- "to", where,
- "already in flight; waiting"
- )
- else log.verbose(
- "installOne",
- "of", target.name,
- "to", where,
- "not in flight; installing"
- )
+ if (!cb_) {
+ return log.verbose("installOne", "of", target.name, "to", where, "already in flight; waiting")
+ }
+ else {
+ log.verbose("installOne", "of", target.name, "to", where, "not in flight; installing")
+ }
function cb(er, data) {
unlock(nm, target.name, function () { cb_(er, data) })
@@ -1109,8 +1158,9 @@ function prepareForInstallMany (packageData, depsKey, bundled, wrap, family) {
// something in the "family" list, unless we're installing
// from a shrinkwrap.
if (wrap) return wrap
- if (semver.validRange(family[d], true))
+ if (semver.validRange(family[d], true)) {
return !semver.satisfies(family[d], packageData[depsKey][d], true)
+ }
return true
}).map(function (d) {
var v = packageData[depsKey][d]
diff --git a/deps/npm/lib/link.js b/deps/npm/lib/link.js
index 8c6a930290..387fb35c3a 100644
--- a/deps/npm/lib/link.js
+++ b/deps/npm/lib/link.js
@@ -8,7 +8,6 @@ var npm = require("./npm.js")
, asyncMap = require("slide").asyncMap
, chain = require("slide").chain
, path = require("path")
- , rm = require("./utils/gently-rm.js")
, build = require("./build.js")
, npa = require("npm-package-arg")
@@ -128,20 +127,17 @@ function linkPkg (folder, cb_) {
return cb(er)
}
var target = path.resolve(npm.globalDir, d.name)
- rm(target, function (er) {
+ symlink(me, target, function (er) {
if (er) return cb(er)
- symlink(me, target, function (er) {
+ log.verbose("link", "build target", target)
+ // also install missing dependencies.
+ npm.commands.install(me, [], function (er) {
if (er) return cb(er)
- log.verbose("link", "build target", target)
- // also install missing dependencies.
- npm.commands.install(me, [], function (er) {
+ // build the global stuff. Don't run *any* scripts, because
+ // install command already will have done that.
+ build([target], true, build._noLC, true, function (er) {
if (er) return cb(er)
- // build the global stuff. Don't run *any* scripts, because
- // install command already will have done that.
- build([target], true, build._noLC, true, function (er) {
- if (er) return cb(er)
- resultPrinter(path.basename(me), me, target, cb)
- })
+ resultPrinter(path.basename(me), me, target, cb)
})
})
})
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index 3cd21cac1d..459a3c3245 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -66,6 +66,7 @@ var commandCache = {}
, "i" : "install"
, "isntall" : "install"
, "up" : "update"
+ , "upgrade" : "update"
, "c" : "config"
, "dist-tags" : "dist-tag"
, "info" : "view"
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/lib/publish.js b/deps/npm/lib/publish.js
index 06a3404af9..92a9a9b671 100644
--- a/deps/npm/lib/publish.js
+++ b/deps/npm/lib/publish.js
@@ -13,10 +13,12 @@ var npm = require("./npm.js")
, cachedPackageRoot = require("./cache/cached-package-root.js")
, createReadStream = require("graceful-fs").createReadStream
, npa = require("npm-package-arg")
+ , semver = require('semver')
-publish.usage = "npm publish <tarball>"
- + "\nnpm publish <folder>"
+publish.usage = "npm publish <tarball> [--tag <tagname>]"
+ + "\nnpm publish <folder> [--tag <tagname>]"
+ "\n\nPublishes '.' if no argument supplied"
+ + "\n\nSets tag `latest` if no --tag specified"
publish.completion = function (opts, cb) {
// publish can complete to a folder with a package.json
@@ -34,6 +36,13 @@ function publish (args, isRetry, cb) {
if (args.length !== 1) return cb(publish.usage)
log.verbose("publish", args)
+
+ var t = npm.config.get('tag').trim()
+ if (semver.validRange(t)) {
+ var er = new Error("Tag name must not be a valid SemVer range: " + t)
+ return cb(er)
+ }
+
var arg = args[0]
// if it's a local folder, then run the prepublish there, first.
readJson(path.resolve(arg, "package.json"), function (er, data) {
diff --git a/deps/npm/lib/shrinkwrap.js b/deps/npm/lib/shrinkwrap.js
index a5783837c6..03192a3fa4 100644
--- a/deps/npm/lib/shrinkwrap.js
+++ b/deps/npm/lib/shrinkwrap.js
@@ -20,6 +20,12 @@ function shrinkwrap (args, silent, cb) {
log.warn("shrinkwrap", "doesn't take positional args")
}
+ // https://github.com/npm/npm/issues/7641
+ // introduced because `npm ls` can now show dev and prod depenednecy
+ // trees separately
+ if (npm.config.get("dev")) {
+ npm.config.set("production", true)
+ }
npm.commands.ls([], true, function (er, _, pkginfo) {
if (er) return cb(er)
shrinkwrap_(pkginfo, silent, npm.config.get("dev"), cb)
@@ -45,7 +51,7 @@ function shrinkwrap_ (pkginfo, silent, dev, cb) {
return
}
- log.warn("shrinkwrap", "Excluding devDependency: %s", dep)
+ log.warn("shrinkwrap", "Excluding devDependency: %s", dep, data.dependencies)
delete pkginfo.dependencies[dep]
})
}
diff --git a/deps/npm/lib/stars.js b/deps/npm/lib/stars.js
index 087e8d9bf2..01ec76e42c 100644
--- a/deps/npm/lib/stars.js
+++ b/deps/npm/lib/stars.js
@@ -9,6 +9,17 @@ var npm = require("./npm.js")
function stars (args, cb) {
npm.commands.whoami([], true, function (er, username) {
var name = args.length === 1 ? args[0] : username
+
+ if (er) {
+ if (er.code === 'ENEEDAUTH' && !name) {
+ var needAuth = new Error("'npm stars' on your own user account requires auth")
+ needAuth.code = 'ENEEDAUTH'
+ return cb(needAuth)
+ }
+
+ if (er.code !== 'ENEEDAUTH') return cb(er)
+ }
+
mapToRegistry("", npm.config, function (er, uri, auth) {
if (er) return cb(er)
diff --git a/deps/npm/lib/update.js b/deps/npm/lib/update.js
index 06d199cc09..3e9438e923 100644
--- a/deps/npm/lib/update.js
+++ b/deps/npm/lib/update.js
@@ -22,10 +22,26 @@ update.completion = npm.commands.outdated.completion
function update (args, cb) {
npm.commands.outdated(args, true, function (er, outdated) {
- log.info("outdated", "updating", outdated)
if (er) return cb(er)
- asyncMap(outdated, function (ww, cb) {
+ var wanted = outdated.filter(function (ww) {
+ var dep = ww[1]
+ var current = ww[2]
+ var wanted = ww[3]
+ var latest = ww[4]
+ if (current === wanted && wanted !== latest) {
+ log.verbose(
+ 'outdated',
+ 'not updating', dep,
+ "because it's currently at the maximum version that matches its specified semver range"
+ )
+ }
+ return current !== wanted
+ })
+ if (wanted.length === 0) return cb()
+
+ log.info('outdated', 'updating', wanted)
+ asyncMap(wanted, function (ww, cb) {
// [[ dir, dep, has, want, req ]]
var where = ww[0]
, dep = ww[1]
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index de12c63632..1c80ab590f 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -287,6 +287,7 @@ function errorHandler (er) {
case "ECONNRESET":
case "ENOTFOUND":
case "ETIMEDOUT":
+ case "EAI_FAIL":
log.error("network", [er.message
,"This is most likely not a problem with npm itself"
,"and is related to network connectivity."
@@ -354,7 +355,7 @@ function errorHandler (er) {
default:
log.error("", er.message || er)
log.error("", ["", "If you need help, you may report this error at:"
- ," <http://github.com/npm/npm/issues>"
+ ," <https://github.com/npm/npm/issues>"
].join("\n"))
break
}
diff --git a/deps/npm/lib/utils/gently-rm.js b/deps/npm/lib/utils/gently-rm.js
index 587ad0eb1b..ad0b4d0399 100644
--- a/deps/npm/lib/utils/gently-rm.js
+++ b/deps/npm/lib/utils/gently-rm.js
@@ -3,19 +3,19 @@
module.exports = gentlyRm
-var npm = require("../npm.js")
- , log = require("npmlog")
- , resolve = require("path").resolve
- , dirname = require("path").dirname
- , lstat = require("graceful-fs").lstat
- , readlink = require("graceful-fs").readlink
- , isInside = require("path-is-inside")
- , vacuum = require("fs-vacuum")
- , some = require("async-some")
- , asyncMap = require("slide").asyncMap
- , normalize = require("path").normalize
-
-function gentlyRm (path, gently, base, cb) {
+var npm = require('../npm.js')
+var log = require('npmlog')
+var resolve = require('path').resolve
+var dirname = require('path').dirname
+var lstat = require('graceful-fs').lstat
+var readlink = require('graceful-fs').readlink
+var isInside = require('path-is-inside')
+var vacuum = require('fs-vacuum')
+var some = require('async-some')
+var asyncMap = require('slide').asyncMap
+var normalize = require('path').normalize
+
+function gentlyRm (target, gently, base, cb) {
if (!cb) {
cb = base
base = undefined
@@ -26,85 +26,110 @@ function gentlyRm (path, gently, base, cb) {
gently = false
}
- // never rm the root, prefix, or bin dirs.
- // just a safety precaution.
+ log.silly(
+ 'gentlyRm',
+ target,
+ 'is being', gently ? 'gently removed' : 'purged',
+ base ? 'from base ' + base : ''
+ )
+
+ // never rm the root, prefix, or bin dirs
+ //
+ // globals included because of `npm link` -- as far as the package requesting
+ // the link is concerned, the linked package is always installed globally
var prefixes = [
- npm.dir, npm.root, npm.bin, npm.prefix,
- npm.globalDir, npm.globalRoot, npm.globalBin, npm.globalPrefix
+ npm.prefix,
+ npm.globalPrefix,
+ npm.dir,
+ npm.root,
+ npm.globalDir,
+ npm.bin,
+ npm.globalBin
]
- var resolved = normalize(resolve(path))
+ var resolved = normalize(resolve(npm.prefix, target))
if (prefixes.indexOf(resolved) !== -1) {
- log.verbose("gentlyRm", resolved, "is part of npm and can't be removed")
- return cb(new Error("May not delete: "+resolved))
+ log.verbose('gentlyRm', resolved, "is part of npm and can't be removed")
+ return cb(new Error('May not delete: ' + resolved))
}
- var options = {log : log.silly.bind(log, "gentlyRm")}
- if (npm.config.get("force") || !gently) options.purge = true
- if (base) options.base = normalize(base)
+ var options = { log: log.silly.bind(log, 'vacuum-fs') }
+ if (npm.config.get('force') || !gently) options.purge = true
+ if (base) options.base = normalize(resolve(npm.prefix, base))
if (!gently) {
- log.verbose("gentlyRm", "vacuuming", resolved)
+ log.verbose('gentlyRm', "don't care about contents; nuking", resolved)
return vacuum(resolved, options, cb)
}
- var parent = options.base = normalize(base ? base : npm.prefix)
- log.verbose("gentlyRm", "verifying that", parent, "is managed by npm")
+ var parent = options.base = normalize(base ? resolve(npm.prefix, base) : npm.prefix)
+
+ // is the parent directory managed by npm?
+ log.silly('gentlyRm', 'verifying', parent, 'is an npm working directory')
some(prefixes, isManaged(parent), function (er, matched) {
if (er) return cb(er)
if (!matched) {
- log.verbose("gentlyRm", parent, "is not managed by npm")
+ log.error('gentlyRm', 'containing path', parent, "isn't under npm's control")
return clobberFail(resolved, parent, cb)
}
+ log.silly('gentlyRm', 'containing path', parent, "is under npm's control, in", matched)
- log.silly("gentlyRm", parent, "is managed by npm")
-
+ // is the target directly contained within the (now known to be
+ // managed) parent?
if (isInside(resolved, parent)) {
- log.silly("gentlyRm", resolved, "is under", parent)
- log.verbose("gentlyRm", "vacuuming", resolved, "up to", parent)
+ log.silly('gentlyRm', 'deletion target', resolved, 'is under', parent)
+ log.verbose('gentlyRm', 'vacuuming from', resolved, 'up to', parent)
return vacuum(resolved, options, cb)
}
+ log.silly('gentlyRm', resolved, 'is not under', parent)
- log.silly("gentlyRm", resolved, "is not under", parent)
- log.silly("gentlyRm", "checking to see if", resolved, "is a link")
- lstat(resolved, function (er, stat) {
- if (er) {
- if (er.code === "ENOENT") return cb(null)
- return cb(er)
- }
+ // the target isn't directly within the parent, but is it itself managed?
+ log.silly('gentlyRm', 'verifying', resolved, 'is an npm working directory')
+ some(prefixes, isManaged(resolved), function (er, matched) {
+ if (er) return cb(er)
- if (!stat.isSymbolicLink()) {
- log.verbose("gentlyRm", resolved, "is outside", parent, "and not a link")
- return clobberFail(resolved, parent, cb)
+ if (matched) {
+ log.silly('gentlyRm', resolved, "is under npm's control, in", matched)
+ options.base = matched
+ log.verbose('gentlyRm', 'removing', resolved, 'with base', options.base)
+ return vacuum(resolved, options, cb)
}
+ log.verbose('gentlyRm', resolved, "is not under npm's control")
- log.silly("gentlyRm", resolved, "is a link")
- readlink(resolved, function (er, link) {
+ // the target isn't managed directly, but maybe it's a link...
+ log.silly('gentlyRm', 'checking to see if', resolved, 'is a link')
+ lstat(resolved, function (er, stat) {
if (er) {
- if (er.code === "ENOENT") return cb(null)
+ // race conditions are common when unbuilding
+ if (er.code === 'ENOENT') return cb(null)
return cb(er)
}
- var source = resolve(dirname(resolved), link)
- if (isInside(source, parent)) {
- log.silly("gentlyRm", source, "inside", parent)
- log.verbose("gentlyRm", "vacuuming", resolved)
- return vacuum(resolved, options, cb)
+ if (!stat.isSymbolicLink()) {
+ log.error('gentlyRm', resolved, 'is outside', parent, 'and not a link')
+ return clobberFail(resolved, parent, cb)
}
- log.silly("gentlyRm", "checking to see if", source, "is managed by npm")
- some(prefixes, isManaged(source), function (er, matched) {
- if (er) return cb(er)
+ // ...and maybe the link source, when read...
+ log.silly('gentlyRm', resolved, 'is a link')
+ readlink(resolved, function (er, link) {
+ if (er) {
+ // race conditions are common when unbuilding
+ if (er.code === 'ENOENT') return cb(null)
+ return cb(er)
+ }
- if (matched) {
- log.silly("gentlyRm", source, "is under", matched)
- log.verbose("gentlyRm", "removing", resolved)
- vacuum(resolved, options, cb)
+ // ...is inside the managed parent
+ var source = resolve(dirname(resolved), link)
+ if (isInside(source, parent)) {
+ log.silly('gentlyRm', source, 'symlink target', resolved, 'is inside', parent)
+ log.verbose('gentlyRm', 'vacuuming', resolved)
+ return vacuum(resolved, options, cb)
}
- log.verbose("gentlyRm", source, "is not managed by npm")
- return clobberFail(path, parent, cb)
+ log.error('gentlyRm', source, 'symlink target', resolved, 'is not controlled by npm', parent)
+ return clobberFail(target, parent, cb)
})
})
})
@@ -115,28 +140,28 @@ var resolvedPaths = {}
function isManaged (target) {
return function predicate (path, cb) {
if (!path) {
- log.verbose("isManaged", "no path")
+ log.verbose('isManaged', 'no path passed for target', target)
return cb(null, false)
}
asyncMap([path, target], resolveSymlink, function (er, results) {
if (er) {
- if (er.code === "ENOENT") return cb(null, false)
+ if (er.code === 'ENOENT') return cb(null, false)
return cb(er)
}
- var path = results[0]
+ var path = results[0]
var target = results[1]
var inside = isInside(target, path)
- log.silly("isManaged", target, inside ? "is" : "is not", "inside", path)
+ if (!inside) log.silly('isManaged', target, 'is not inside', path)
return cb(null, inside && path)
})
}
function resolveSymlink (toResolve, cb) {
- var resolved = resolve(toResolve)
+ var resolved = resolve(npm.prefix, toResolve)
// if the path has already been memoized, return immediately
var cached = resolvedPaths[resolved]
@@ -164,9 +189,9 @@ function isManaged (target) {
}
}
-function clobberFail (p, g, cb) {
- var er = new Error("Refusing to delete: "+p+" not in "+g)
- er.code = "EEXIST"
- er.path = p
+function clobberFail (target, root, cb) {
+ var er = new Error('Refusing to delete: ' + target + ' not in ' + root)
+ er.code = 'EEXIST'
+ er.path = target
return cb(er)
}
diff --git a/deps/npm/lib/whoami.js b/deps/npm/lib/whoami.js
index 42cede1b82..d92a6574a1 100644
--- a/deps/npm/lib/whoami.js
+++ b/deps/npm/lib/whoami.js
@@ -14,14 +14,6 @@ function whoami (args, silent, cb) {
var registry = npm.config.get("registry")
if (!registry) return cb(new Error("no default registry set"))
- function noUser () {
- // At this point, if they have a credentials object, it doesn't have a
- // token or auth in it. Probably just the default registry.
- var msg = "Not authed. Run 'npm adduser'"
- if (!silent) console.log(msg)
- cb(null, msg)
- }
-
var auth = npm.config.getCredentialsByURI(registry)
if (auth) {
if (auth.username) {
@@ -31,7 +23,13 @@ function whoami (args, silent, cb) {
else if (auth.token) {
return npm.registry.whoami(registry, { auth : auth }, function (er, username) {
if (er) return cb(er)
- if (!username) return noUser()
+ if (!username) {
+ var needNewSession = new Error(
+ "Your auth token is no longer valid. Please log in again."
+ )
+ needNewSession.code = 'ENEEDAUTH'
+ return cb(needNewSession)
+ }
if (!silent) console.log(username)
cb(null, username)
@@ -39,5 +37,11 @@ function whoami (args, silent, cb) {
}
}
- process.nextTick(noUser)
+ // At this point, if they have a credentials object, it doesn't have a token
+ // or auth in it. Probably just the default registry.
+ var needAuth = new Error(
+ "'npm whoami' requires you to be logged in."
+ )
+ needAuth.code = 'ENEEDAUTH'
+ process.nextTick(cb.bind(this, needAuth))
}
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index 3f01a6085f..e8416eb4c3 100644
--- a/deps/npm/man/man1/npm-install.1
+++ b/deps/npm/man/man1/npm-install.1
@@ -182,8 +182,8 @@ fetch the package by name if it is not valid\.
.RE
.IP \(bu 2
\fBnpm install <githubname>/<githubrepo>\fR:
- Install the package at \fBhttps://github\.com/githubname/githubrepo" by
- attempting to clone it using\fRgit`\.
+ Install the package at \fBhttps://github\.com/githubname/githubrepo\fR by
+ attempting to clone it using \fBgit\fR\|\.
Example:
.P
.RS 2
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 57bd6d9222..523731f3b5 100644
--- a/deps/npm/man/man1/npm-link.1
+++ b/deps/npm/man/man1/npm-link.1
@@ -45,7 +45,8 @@ npm link redis # link\-install the package
.RE
.P
Now, any changes to ~/projects/node\-redis will be reflected in
-~/projects/node\-bloggy/node_modules/node\-redis/
+~/projects/node\-bloggy/node_modules/node\-redis/\. Note that the link should
+be to the package name, not the directory name for that package\.
.P
You may also shortcut the two steps in one\. For example, to do the
above use\-case in a shorter way:
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 4f0b0e98c7..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.0 /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-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index b095ddb65f..7f94067d30 100644
--- a/deps/npm/man/man1/npm-run-script.1
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -35,6 +35,13 @@ The \fBenv\fR script is a special built\-in command that can be used to list
environment variables that will be available to the script at runtime\. If an
"env" command is defined in your package it will take precedence over the
built\-in\.
+.P
+In addition to the shell's pre\-existing \fBPATH\fR, \fBnpm run\fR adds
+\fBnode_modules/\.bin\fR to the \fBPATH\fR provided to scripts\. Any binaries provided by
+locally\-installed dependencies can be used without the \fBnode_modules/\.bin\fR
+prefix\. For example, if there is a \fBdevDependency\fR on \fBtap\fR in your package,
+you should write \fB"scripts": {"test": "tap test/\\*\.js"}\fR instead of \fB"scripts":
+{"test": "node_modules/\.bin/tap test/\\*\.js"}\fR to run your tests\.
.SH SEE ALSO
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index 4dc37963e9..601d61a092 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -10,7 +10,7 @@ npm <command> [args]
.RE
.SH VERSION
.P
-2.7.0
+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 cd71b11511..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.0
+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 0075c1fb86..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,17 +688,33 @@ 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
- var statcb = inflight('stat\0' + abs, statcb_)
+ var statcb = inflight('stat\0' + abs, lstatcb_)
if (statcb)
- fs.stat(abs, statcb)
+ fs.lstat(abs, statcb)
- function statcb_ (er, stat) {
- self._stat2(f, abs, er, stat, cb)
+ 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)
+ }
}
}
@@ -642,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 8c11fbb77e..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.1",
+ "version": "5.0.3",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
@@ -42,16 +42,16 @@
"benchclean": "bash benchclean.sh"
},
"license": "ISC",
- "gitHead": "a10b0294183788c0e9f56fc3ac88832e2c3513bc",
+ "gitHead": "2f63d487885fbb51ec8fcb21229bebd0e515c3fb",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
"homepage": "https://github.com/isaacs/node-glob",
- "_id": "glob@4.4.1",
- "_shasum": "8395b16d01f4a58f0bf3f6359174997b78d74197",
- "_from": "glob@>=4.4.1 <4.5.0",
- "_npmVersion": "2.6.0",
- "_nodeVersion": "1.1.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",
"email": "i@izs.me"
@@ -63,9 +63,10 @@
}
],
"dist": {
- "shasum": "8395b16d01f4a58f0bf3f6359174997b78d74197",
- "tarball": "http://registry.npmjs.org/glob/-/glob-4.4.1.tgz"
+ "shasum": "15528c1c727e474a8e7731541c00b00ec802952d",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/glob/-/glob-4.4.1.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 7aa0d07c59..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,46 +393,58 @@ 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
var stat = this.statCache[abs]
if (!stat) {
+ var lstat
try {
- stat = fs.statSync(abs)
+ 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
- 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/graceful-fs/package.json b/deps/npm/node_modules/graceful-fs/package.json
index c373eebb7a..a0194923a9 100644
--- a/deps/npm/node_modules/graceful-fs/package.json
+++ b/deps/npm/node_modules/graceful-fs/package.json
@@ -6,7 +6,7 @@
},
"name": "graceful-fs",
"description": "A drop-in replacement for fs, making various improvements.",
- "version": "3.0.5",
+ "version": "3.0.6",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-graceful-fs.git"
@@ -43,16 +43,16 @@
"rimraf": "^2.2.8",
"tap": "^0.4.13"
},
- "gitHead": "a6cd37cff01ac3af8d0ab2fd180290538fabd326",
+ "gitHead": "8c93aeee947014dafa113dcc8fa04d2e6a6e3e14",
"bugs": {
"url": "https://github.com/isaacs/node-graceful-fs/issues"
},
"homepage": "https://github.com/isaacs/node-graceful-fs",
- "_id": "graceful-fs@3.0.5",
- "_shasum": "4a880474bdeb716fe3278cf29792dec38dfac418",
- "_from": "graceful-fs@>=3.0.5 <3.1.0",
- "_npmVersion": "2.1.9",
- "_nodeVersion": "0.10.16",
+ "_id": "graceful-fs@3.0.6",
+ "_shasum": "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb",
+ "_from": "graceful-fs@>=3.0.6 <3.1.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -64,9 +64,9 @@
}
],
"dist": {
- "shasum": "4a880474bdeb716fe3278cf29792dec38dfac418",
- "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
+ "shasum": "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb",
+ "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
},
- "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz",
+ "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/graceful-fs/polyfills.js b/deps/npm/node_modules/graceful-fs/polyfills.js
index 9d62af5861..42705391aa 100644
--- a/deps/npm/node_modules/graceful-fs/polyfills.js
+++ b/deps/npm/node_modules/graceful-fs/polyfills.js
@@ -214,7 +214,7 @@ if (process.platform === "win32") {
&& Date.now() - start < 1000) {
return rename_(from, to, CB)
}
- cb(er)
+ if(cb) cb(er)
})
}
}
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
index 58e97a7875..58e97a7875 100644
--- 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
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
index 7dc6619174..7dc6619174 100644
--- 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
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
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
index c2ad10a3bc..c2ad10a3bc 100644
--- 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
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
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
index e56ef9a05a..e56ef9a05a 100644
--- 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
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
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
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
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
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
index c505342fa0..c505342fa0 100644
--- 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
diff --git a/deps/npm/node_modules/inflight/.eslintrc b/deps/npm/node_modules/inflight/.eslintrc
new file mode 100644
index 0000000000..b7a1550efc
--- /dev/null
+++ b/deps/npm/node_modules/inflight/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "env" : {
+ "node" : true
+ },
+ "rules" : {
+ "semi": [2, "never"],
+ "strict": 0,
+ "quotes": [1, "single", "avoid-escape"],
+ "no-use-before-define": 0,
+ "curly": 0,
+ "no-underscore-dangle": 0,
+ "no-lonely-if": 1,
+ "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
+ "no-mixed-requires": 0,
+ "space-infix-ops": 0
+ }
+}
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
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<String>} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array<String>} 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<String>} 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 {<filename>: 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/minimatch/.npmignore b/deps/npm/node_modules/minimatch/.npmignore
deleted file mode 100644
index b2a4ba5910..0000000000
--- a/deps/npm/node_modules/minimatch/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-# nothing here
diff --git a/deps/npm/node_modules/minimatch/benchmark.js b/deps/npm/node_modules/minimatch/benchmark.js
deleted file mode 100644
index e7deca390c..0000000000
--- a/deps/npm/node_modules/minimatch/benchmark.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var m = require('./minimatch.js')
-var pattern = "**/*.js"
-var expand = require('brace-expansion')
-var files = expand('x/y/z/{1..1000}.js')
-var start = process.hrtime()
-
-for (var i = 0; i < 1000; i++) {
- for (var f = 0; f < files.length; f++) {
- var res = m(pattern, files[f])
- }
- if (!(i%10)) process.stdout.write('.')
-}
-console.log('done')
-var dur = process.hrtime(start)
-console.log('%s ms', dur[0]*1e3 + dur[1]/1e6)
diff --git a/deps/npm/node_modules/minimatch/browser.js b/deps/npm/node_modules/minimatch/browser.js
index 2b86fae246..cf58a3f60c 100644
--- a/deps/npm/node_modules/minimatch/browser.js
+++ b/deps/npm/node_modules/minimatch/browser.js
@@ -1,5 +1,4 @@
(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-(function (process){
module.exports = minimatch
minimatch.Minimatch = Minimatch
@@ -443,6 +442,29 @@ function parse (pattern, isSub) {
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
@@ -846,8 +868,7 @@ function regExpEscape (s) {
return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
}
-}).call(this,require('_process'))
-},{"_process":5,"brace-expansion":2}],2:[function(require,module,exports){
+},{"brace-expansion":2}],2:[function(require,module,exports){
var concatMap = require('concat-map');
var balanced = require('balanced-match');
@@ -1090,92 +1111,4 @@ module.exports = function (xs, fn) {
return res;
};
-},{}],5:[function(require,module,exports){
-// shim for using process in browser
-
-var process = module.exports = {};
-
-process.nextTick = (function () {
- var canSetImmediate = typeof window !== 'undefined'
- && window.setImmediate;
- var canMutationObserver = typeof window !== 'undefined'
- && window.MutationObserver;
- var canPost = typeof window !== 'undefined'
- && window.postMessage && window.addEventListener
- ;
-
- if (canSetImmediate) {
- return function (f) { return window.setImmediate(f) };
- }
-
- var queue = [];
-
- if (canMutationObserver) {
- var hiddenDiv = document.createElement("div");
- var observer = new MutationObserver(function () {
- var queueList = queue.slice();
- queue.length = 0;
- queueList.forEach(function (fn) {
- fn();
- });
- });
-
- observer.observe(hiddenDiv, { attributes: true });
-
- return function nextTick(fn) {
- if (!queue.length) {
- hiddenDiv.setAttribute('yes', 'no');
- }
- queue.push(fn);
- };
- }
-
- if (canPost) {
- window.addEventListener('message', function (ev) {
- var source = ev.source;
- if ((source === window || source === null) && ev.data === 'process-tick') {
- ev.stopPropagation();
- if (queue.length > 0) {
- var fn = queue.shift();
- fn();
- }
- }
- }, true);
-
- return function nextTick(fn) {
- queue.push(fn);
- window.postMessage('process-tick', '*');
- };
- }
-
- return function nextTick(fn) {
- setTimeout(fn, 0);
- };
-})();
-
-process.title = 'browser';
-process.browser = true;
-process.env = {};
-process.argv = [];
-
-function noop() {}
-
-process.on = noop;
-process.addListener = noop;
-process.once = noop;
-process.off = noop;
-process.removeListener = noop;
-process.removeAllListeners = noop;
-process.emit = noop;
-
-process.binding = function (name) {
- throw new Error('process.binding is not supported');
-};
-
-// TODO(shtylman)
-process.cwd = function () { return '/' };
-process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
-};
-
},{}]},{},[1]);
diff --git a/deps/npm/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/minimatch/minimatch.js
index 6958cdc481..2bfdf62b74 100644
--- a/deps/npm/node_modules/minimatch/minimatch.js
+++ b/deps/npm/node_modules/minimatch/minimatch.js
@@ -441,6 +441,29 @@ function parse (pattern, isSub) {
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
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md
index f23049dc3b..62bc7bae3f 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md
@@ -3,7 +3,7 @@
[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.png)](http://travis-ci.org/juliangruber/brace-expansion)
+[![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)
@@ -91,6 +91,11 @@ With [npm](https://npmjs.org) do:
npm install brace-expansion
```
+## Contributors
+
+- [Julian Gruber](https://github.com/juliangruber)
+- [Isaac Z. Schlueter](https://github.com/isaacs)
+
## License
(MIT)
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE b/deps/npm/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/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/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
index 57359ff5ae..408f70a1be 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
@@ -3,6 +3,8 @@ 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
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
index b58da7ac9f..b29a7812e5 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
@@ -2,8 +2,12 @@ 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);
+ 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/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
index ff38e384eb..b516138098 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
@@ -1,7 +1,7 @@
{
"name": "concat-map",
"description": "concatenative mapdashery",
- "version": "0.0.0",
+ "version": "0.0.1",
"repository": {
"type": "git",
"url": "git://github.com/substack/node-concat-map.git"
@@ -9,6 +9,7 @@
"main": "index.js",
"keywords": [
"concat",
+ "concatMap",
"map",
"functional",
"higher-order"
@@ -18,13 +19,10 @@
"test": "test"
},
"scripts": {
- "test": "tap test/*.js"
+ "test": "tape test/*.js"
},
"devDependencies": {
- "tap": "~0.2.5"
- },
- "engines": {
- "node": ">=0.4.0"
+ "tape": "~2.4.0"
},
"license": "MIT",
"author": {
@@ -32,33 +30,54 @@
"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"
},
- "_id": "concat-map@0.0.0",
- "dependencies": {},
- "optionalDependencies": {},
- "_engineSupported": true,
- "_npmVersion": "1.1.19",
- "_nodeVersion": "v0.6.11",
- "_defaultsLoaded": true,
- "dist": {
- "shasum": "604be9c2afb6dc9ba8182e3ff294fdd48e238e6d",
- "tarball": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz"
- },
"maintainers": [
{
"name": "substack",
"email": "mail@substack.net"
}
],
- "_shasum": "604be9c2afb6dc9ba8182e3ff294fdd48e238e6d",
- "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.0.tgz",
- "_from": "concat-map@0.0.0",
- "bugs": {
- "url": "https://github.com/substack/node-concat-map/issues"
- },
- "readme": "ERROR: No README data found!",
- "homepage": "https://github.com/substack/node-concat-map"
+ "_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/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
index 6ace3459cf..fdbd7022f6 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
@@ -1,5 +1,5 @@
var concatMap = require('../');
-var test = require('tap').test;
+var test = require('tape');
test('empty or not', function (t) {
var xs = [ 1, 2, 3, 4, 5, 6 ];
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json
index e9b15ce89b..5f1866c8b5 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json
@@ -1,7 +1,7 @@
{
"name": "brace-expansion",
"description": "Brace expansion as known from sh/bash",
- "version": "1.0.1",
+ "version": "1.1.0",
"repository": {
"type": "git",
"url": "git://github.com/juliangruber/brace-expansion.git"
@@ -14,10 +14,10 @@
},
"dependencies": {
"balanced-match": "^0.2.0",
- "concat-map": "0.0.0"
+ "concat-map": "0.0.1"
},
"devDependencies": {
- "tape": "~1.1.1"
+ "tape": "^3.0.3"
},
"keywords": [],
"author": {
@@ -42,18 +42,18 @@
"android-browser/4.2..latest"
]
},
- "gitHead": "ceba9627f19c590feb7df404e1d6c41f8c01b93a",
+ "gitHead": "b5fa3b1c74e5e2dba2d0efa19b28335641bc1164",
"bugs": {
"url": "https://github.com/juliangruber/brace-expansion/issues"
},
- "_id": "brace-expansion@1.0.1",
- "_shasum": "817708d72ab27a8c312d25efababaea963439ed5",
+ "_id": "brace-expansion@1.1.0",
+ "_shasum": "c9b7d03c03f37bc704be100e522b40db8f6cfcd9",
"_from": "brace-expansion@>=1.0.0 <2.0.0",
- "_npmVersion": "2.1.11",
- "_nodeVersion": "0.10.16",
+ "_npmVersion": "2.1.10",
+ "_nodeVersion": "0.10.32",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
},
"maintainers": [
{
@@ -66,10 +66,10 @@
}
],
"dist": {
- "shasum": "817708d72ab27a8c312d25efababaea963439ed5",
- "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz"
+ "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.0.1.tgz",
+ "_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/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json
index f0083b91c9..4d37a83ebf 100644
--- a/deps/npm/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/minimatch/package.json
@@ -6,7 +6,7 @@
},
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "2.0.1",
+ "version": "2.0.4",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
@@ -14,7 +14,7 @@
"main": "minimatch.js",
"scripts": {
"test": "tap test/*.js",
- "prepublish": "browserify -o browser.js -e minimatch.js"
+ "prepublish": "browserify -o browser.js -e minimatch.js --bare"
},
"engines": {
"node": "*"
@@ -23,23 +23,27 @@
"brace-expansion": "^1.0.0"
},
"devDependencies": {
- "browserify": "^6.3.3",
+ "browserify": "^9.0.3",
"tap": ""
},
"license": {
"type": "MIT",
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
},
- "gitHead": "eac219d8f665c8043fda9a1cd34eab9b006fae01",
+ "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.1",
- "_shasum": "6c3760b45f66ed1cd5803143ee8d372488f02c37",
- "_from": "minimatch@>=2.0.1 <2.1.0",
- "_npmVersion": "2.1.11",
- "_nodeVersion": "0.10.16",
+ "_id": "minimatch@2.0.4",
+ "_shasum": "83bea115803e7a097a78022427287edb762fafed",
+ "_from": "minimatch@>=2.0.4 <2.1.0",
+ "_npmVersion": "2.7.1",
+ "_nodeVersion": "1.4.2",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -51,10 +55,9 @@
}
],
"dist": {
- "shasum": "6c3760b45f66ed1cd5803143ee8d372488f02c37",
- "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz"
+ "shasum": "83bea115803e7a097a78022427287edb762fafed",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz"
},
- "directories": {},
- "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.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/minimatch/test/basic.js b/deps/npm/node_modules/minimatch/test/basic.js
deleted file mode 100644
index b72edf8893..0000000000
--- a/deps/npm/node_modules/minimatch/test/basic.js
+++ /dev/null
@@ -1,399 +0,0 @@
-// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test
-//
-// TODO: Some of these tests do very bad things with backslashes, and will
-// most likely fail badly on windows. They should probably be skipped.
-
-var tap = require("tap")
- , globalBefore = Object.keys(global)
- , mm = require("../")
- , files = [ "a", "b", "c", "d", "abc"
- , "abd", "abe", "bb", "bcd"
- , "ca", "cb", "dd", "de"
- , "bdir/", "bdir/cfile"]
- , next = files.concat([ "a-b", "aXb"
- , ".x", ".y" ])
-
-
-var patterns =
- [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test"
- , ["a*", ["a", "abc", "abd", "abe"]]
- , ["X*", ["X*"], {nonull: true}]
-
- // allow null glob expansion
- , ["X*", []]
-
- // isaacs: Slightly different than bash/sh/ksh
- // \\* is not un-escaped to literal "*" in a failed match,
- // but it does make it get treated as a literal star
- , ["\\*", ["\\*"], {nonull: true}]
- , ["\\**", ["\\**"], {nonull: true}]
- , ["\\*\\*", ["\\*\\*"], {nonull: true}]
-
- , ["b*/", ["bdir/"]]
- , ["c*", ["c", "ca", "cb"]]
- , ["**", files]
-
- , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
- , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
-
- , "legendary larry crashes bashes"
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
-
- , "character classes"
- , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
- , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
- "bdir/", "ca", "cb", "dd", "de"]]
- , ["a*[^c]", ["abd", "abe"]]
- , function () { files.push("a-b", "aXb") }
- , ["a[X-]b", ["a-b", "aXb"]]
- , function () { files.push(".x", ".y") }
- , ["[^a-c]*", ["d", "dd", "de"]]
- , function () { files.push("a*b/", "a*b/ooo") }
- , ["a\\*b/*", ["a*b/ooo"]]
- , ["a\\*?/*", ["a*b/ooo"]]
- , ["*\\\\!*", [], {null: true}, ["echo !7"]]
- , ["*\\!*", ["echo !7"], null, ["echo !7"]]
- , ["*.\\*", ["r.*"], null, ["r.*"]]
- , ["a[b]c", ["abc"]]
- , ["a[\\b]c", ["abc"]]
- , ["a?c", ["abc"]]
- , ["a\\*c", [], {null: true}, ["abc"]]
- , ["", [""], { null: true }, [""]]
-
- , "http://www.opensource.apple.com/source/bash/bash-23/" +
- "bash/tests/glob-test"
- , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
- , ["*/man*/bash.*", ["man/man1/bash.1"]]
- , ["man/man1/bash.1", ["man/man1/bash.1"]]
- , ["a***c", ["abc"], null, ["abc"]]
- , ["a*****?c", ["abc"], null, ["abc"]]
- , ["?*****??", ["abc"], null, ["abc"]]
- , ["*****??", ["abc"], null, ["abc"]]
- , ["?*****?c", ["abc"], null, ["abc"]]
- , ["?***?****c", ["abc"], null, ["abc"]]
- , ["?***?****?", ["abc"], null, ["abc"]]
- , ["?***?****", ["abc"], null, ["abc"]]
- , ["*******c", ["abc"], null, ["abc"]]
- , ["*******?", ["abc"], null, ["abc"]]
- , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["[-abc]", ["-"], null, ["-"]]
- , ["[abc-]", ["-"], null, ["-"]]
- , ["\\", ["\\"], null, ["\\"]]
- , ["[\\\\]", ["\\"], null, ["\\"]]
- , ["[[]", ["["], null, ["["]]
- , ["[", ["["], null, ["["]]
- , ["[*", ["[abc"], null, ["[abc"]]
- , "a right bracket shall lose its special meaning and\n" +
- "represent itself in a bracket expression if it occurs\n" +
- "first in the list. -- POSIX.2 2.8.3.2"
- , ["[]]", ["]"], null, ["]"]]
- , ["[]-]", ["]"], null, ["]"]]
- , ["[a-\z]", ["p"], null, ["p"]]
- , ["??**********?****?", [], { null: true }, ["abc"]]
- , ["??**********?****c", [], { null: true }, ["abc"]]
- , ["?************c****?****", [], { null: true }, ["abc"]]
- , ["*c*?**", [], { null: true }, ["abc"]]
- , ["a*****c*?**", [], { null: true }, ["abc"]]
- , ["a********???*******", [], { null: true }, ["abc"]]
- , ["[]", [], { null: true }, ["a"]]
- , ["[abc", [], { null: true }, ["["]]
-
- , "nocase tests"
- , ["XYZ", ["xYz"], { nocase: true, null: true }
- , ["xYz", "ABC", "IjK"]]
- , ["ab*", ["ABC"], { nocase: true, null: true }
- , ["xYz", "ABC", "IjK"]]
- , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
- , ["xYz", "ABC", "IjK"]]
-
- // [ pattern, [matches], MM opts, files, TAP opts]
- , "onestar/twostar"
- , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
- , ["{/?,*}", ["/a", "bb"], {null: true}
- , ["/a", "/b/b", "/a/b/c", "bb"]]
-
- , "dots should not match unless requested"
- , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
-
- // .. and . can only match patterns starting with .,
- // even when options.dot is set.
- , function () {
- files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
- }
- , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
- , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
- , ["a/*/b", ["a/c/b"], {dot:false}]
- , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
-
-
- // this also tests that changing the options needs
- // to change the cache key, even if the pattern is
- // the same!
- , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
- , [ ".a/.d", "a/.d", "a/b"]]
-
- , "paren sets cannot contain slashes"
- , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
-
- // brace sets trump all else.
- //
- // invalid glob pattern. fails on bash4 and bsdglob.
- // however, in this implementation, it's easier just
- // to do the intuitive thing, and let brace-expansion
- // actually come before parsing any extglob patterns,
- // like the documentation seems to say.
- //
- // XXX: if anyone complains about this, either fix it
- // or tell them to grow up and stop complaining.
- //
- // bash/bsdglob says this:
- // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
- // but we do this instead:
- , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
-
- // test partial parsing in the presence of comment/negation chars
- , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
- , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
-
- // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
- , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
- , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
- , {}
- , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
-
-
- // crazy nested {,,} and *(||) tests.
- , function () {
- files = [ "a", "b", "c", "d"
- , "ab", "ac", "ad"
- , "bc", "cb"
- , "bc,d", "c,db", "c,d"
- , "d)", "(b|c", "*(b|c"
- , "b|c", "b|cc", "cb|c"
- , "x(a|b|c)", "x(a|c)"
- , "(a|b|c)", "(a|c)"]
- }
- , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
- , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
- // a
- // *(b|c)
- // *(b|d)
- , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
- , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
-
-
- // test various flag settings.
- , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
- , { noext: true } ]
- , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
- , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
- , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
-
-
- // begin channelling Boole and deMorgan...
- , "negation tests"
- , function () {
- files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
- }
-
- // anything that is NOT a* matches.
- , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
-
- // anything that IS !a* matches.
- , ["!a*", ["!ab", "!abc"], {nonegate: true}]
-
- // anything that IS a* matches
- , ["!!a*", ["a!b"]]
-
- // anything that is NOT !a* matches
- , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
-
- // negation nestled within a pattern
- , function () {
- files = [ "foo.js"
- , "foo.bar"
- // can't match this one without negative lookbehind.
- , "foo.js.js"
- , "blar.js"
- , "foo."
- , "boo.js.boo" ]
- }
- , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
-
- // https://github.com/isaacs/minimatch/issues/5
- , function () {
- files = [ 'a/b/.x/c'
- , 'a/b/.x/c/d'
- , 'a/b/.x/c/d/e'
- , 'a/b/.x'
- , 'a/b/.x/'
- , 'a/.x/b'
- , '.x'
- , '.x/'
- , '.x/a'
- , '.x/a/b'
- , 'a/.x/b/.x/c'
- , '.x/.x' ]
- }
- , ["**/.x/**", [ '.x/'
- , '.x/a'
- , '.x/a/b'
- , 'a/.x/b'
- , 'a/b/.x/'
- , 'a/b/.x/c'
- , 'a/b/.x/c/d'
- , 'a/b/.x/c/d/e' ] ]
-
- ]
-
-var regexps =
- [ '/^(?:(?=.)a[^/]*?)$/',
- '/^(?:(?=.)X[^/]*?)$/',
- '/^(?:(?=.)X[^/]*?)$/',
- '/^(?:\\*)$/',
- '/^(?:(?=.)\\*[^/]*?)$/',
- '/^(?:\\*\\*)$/',
- '/^(?:(?=.)b[^/]*?\\/)$/',
- '/^(?:(?=.)c[^/]*?)$/',
- '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
- '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/',
- '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/',
- '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/',
- '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/',
- '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/',
- '/^(?:(?=.)a[^/]*?[^c])$/',
- '/^(?:(?=.)a[X-]b)$/',
- '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/',
- '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/',
- '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/',
- '/^(?:(?=.)a[b]c)$/',
- '/^(?:(?=.)a[b]c)$/',
- '/^(?:(?=.)a[^/]c)$/',
- '/^(?:a\\*c)$/',
- 'false',
- '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/',
- '/^(?:man\\/man1\\/bash\\.1)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
- '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
- '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/',
- '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/',
- '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
- '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
- '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
- '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[-abc])$/',
- '/^(?:(?!\\.)(?=.)[abc-])$/',
- '/^(?:\\\\)$/',
- '/^(?:(?!\\.)(?=.)[\\\\])$/',
- '/^(?:(?!\\.)(?=.)[\\[])$/',
- '/^(?:\\[)$/',
- '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[\\]])$/',
- '/^(?:(?!\\.)(?=.)[\\]-])$/',
- '/^(?:(?!\\.)(?=.)[a-z])$/',
- '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/',
- '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/',
- '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/',
- '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/',
- '/^(?:\\[\\])$/',
- '/^(?:\\[abc)$/',
- '/^(?:(?=.)XYZ)$/i',
- '/^(?:(?=.)ab[^/]*?)$/i',
- '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i',
- '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/',
- '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/',
- '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/',
- '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/',
- '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
- '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/',
- '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/',
- '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/',
- '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
- '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/',
- '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/',
- '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/',
- '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/',
- '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/',
- '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/',
- '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/',
- '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/',
- '/^(?:(?=.)a[^/]b)$/',
- '/^(?:(?=.)#[^/]*?)$/',
- '/^(?!^(?:(?=.)a[^/]*?)$).*$/',
- '/^(?:(?=.)\\!a[^/]*?)$/',
- '/^(?:(?=.)a[^/]*?)$/',
- '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/',
- '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/',
- '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ]
-var re = 0;
-
-tap.test("basic tests", function (t) {
- var start = Date.now()
-
- // [ pattern, [matches], MM opts, files, TAP opts]
- patterns.forEach(function (c) {
- if (typeof c === "function") return c()
- if (typeof c === "string") return t.comment(c)
-
- var pattern = c[0]
- , expect = c[1].sort(alpha)
- , options = c[2] || {}
- , f = c[3] || files
- , tapOpts = c[4] || {}
-
- // options.debug = true
- var m = new mm.Minimatch(pattern, options)
- var r = m.makeRe()
- var expectRe = regexps[re++]
- tapOpts.re = String(r) || JSON.stringify(r)
- tapOpts.files = JSON.stringify(f)
- tapOpts.pattern = pattern
- tapOpts.set = m.set
- tapOpts.negated = m.negate
-
- var actual = mm.match(f, pattern, options)
- actual.sort(alpha)
-
- t.equivalent( actual, expect
- , JSON.stringify(pattern) + " " + JSON.stringify(expect)
- , tapOpts )
-
- t.equal(tapOpts.re, expectRe, null, tapOpts)
- })
-
- t.comment("time=" + (Date.now() - start) + "ms")
- t.end()
-})
-
-tap.test("global leak test", function (t) {
- var globalAfter = Object.keys(global)
- t.equivalent(globalAfter, globalBefore, "no new globals, please")
- t.end()
-})
-
-function alpha (a, b) {
- return a > b ? 1 : -1
-}
diff --git a/deps/npm/node_modules/minimatch/test/brace-expand.js b/deps/npm/node_modules/minimatch/test/brace-expand.js
deleted file mode 100644
index 67bc913544..0000000000
--- a/deps/npm/node_modules/minimatch/test/brace-expand.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var tap = require("tap")
- , minimatch = require("../")
-
-tap.test("brace expansion", function (t) {
- // [ pattern, [expanded] ]
- ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}"
- , [ "abxy"
- , "abxz"
- , "acdxy"
- , "acdxz"
- , "acexy"
- , "acexz"
- , "afhxy"
- , "afhxz"
- , "aghxy"
- , "aghxz" ] ]
- , [ "a{1..5}b"
- , [ "a1b"
- , "a2b"
- , "a3b"
- , "a4b"
- , "a5b" ] ]
- , [ "a{b}c", ["a{b}c"] ]
- , [ "a{00..05}b"
- , [ "a00b"
- , "a01b"
- , "a02b"
- , "a03b"
- , "a04b"
- , "a05b" ] ]
- , [ "z{a,b},c}d", ["za,c}d", "zb,c}d"] ]
- , [ "z{a,b{,c}d", ["z{a,bd", "z{a,bcd"] ]
- , [ "a{b{c{d,e}f}g}h", ["a{b{cdf}g}h", "a{b{cef}g}h"] ]
- , [ "a{b{c{d,e}f{x,y}}g}h", ["a{b{cdfx}g}h", "a{b{cdfy}g}h", "a{b{cefx}g}h", "a{b{cefy}g}h"] ]
- , [ "a{b{c{d,e}f{x,y{}g}h", ["a{b{cdfxh", "a{b{cdfy{}gh", "a{b{cefxh", "a{b{cefy{}gh"] ]
- ].forEach(function (tc) {
- var p = tc[0]
- , expect = tc[1]
- t.equivalent(minimatch.braceExpand(p), expect, p)
- })
- console.error("ending")
- t.end()
-})
-
-
diff --git a/deps/npm/node_modules/minimatch/test/defaults.js b/deps/npm/node_modules/minimatch/test/defaults.js
deleted file mode 100644
index 75e05712d4..0000000000
--- a/deps/npm/node_modules/minimatch/test/defaults.js
+++ /dev/null
@@ -1,274 +0,0 @@
-// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test
-//
-// TODO: Some of these tests do very bad things with backslashes, and will
-// most likely fail badly on windows. They should probably be skipped.
-
-var tap = require("tap")
- , globalBefore = Object.keys(global)
- , mm = require("../")
- , files = [ "a", "b", "c", "d", "abc"
- , "abd", "abe", "bb", "bcd"
- , "ca", "cb", "dd", "de"
- , "bdir/", "bdir/cfile"]
- , next = files.concat([ "a-b", "aXb"
- , ".x", ".y" ])
-
-tap.test("basic tests", function (t) {
- var start = Date.now()
-
- // [ pattern, [matches], MM opts, files, TAP opts]
- ; [ "http://www.bashcookbook.com/bashinfo" +
- "/source/bash-1.14.7/tests/glob-test"
- , ["a*", ["a", "abc", "abd", "abe"]]
- , ["X*", ["X*"], {nonull: true}]
-
- // allow null glob expansion
- , ["X*", []]
-
- // isaacs: Slightly different than bash/sh/ksh
- // \\* is not un-escaped to literal "*" in a failed match,
- // but it does make it get treated as a literal star
- , ["\\*", ["\\*"], {nonull: true}]
- , ["\\**", ["\\**"], {nonull: true}]
- , ["\\*\\*", ["\\*\\*"], {nonull: true}]
-
- , ["b*/", ["bdir/"]]
- , ["c*", ["c", "ca", "cb"]]
- , ["**", files]
-
- , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}]
- , ["s/\\..*//", ["s/\\..*//"], {nonull: true}]
-
- , "legendary larry crashes bashes"
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}]
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"
- , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}]
-
- , "character classes"
- , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]]
- , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd",
- "bdir/", "ca", "cb", "dd", "de"]]
- , ["a*[^c]", ["abd", "abe"]]
- , function () { files.push("a-b", "aXb") }
- , ["a[X-]b", ["a-b", "aXb"]]
- , function () { files.push(".x", ".y") }
- , ["[^a-c]*", ["d", "dd", "de"]]
- , function () { files.push("a*b/", "a*b/ooo") }
- , ["a\\*b/*", ["a*b/ooo"]]
- , ["a\\*?/*", ["a*b/ooo"]]
- , ["*\\\\!*", [], {null: true}, ["echo !7"]]
- , ["*\\!*", ["echo !7"], null, ["echo !7"]]
- , ["*.\\*", ["r.*"], null, ["r.*"]]
- , ["a[b]c", ["abc"]]
- , ["a[\\b]c", ["abc"]]
- , ["a?c", ["abc"]]
- , ["a\\*c", [], {null: true}, ["abc"]]
- , ["", [""], { null: true }, [""]]
-
- , "http://www.opensource.apple.com/source/bash/bash-23/" +
- "bash/tests/glob-test"
- , function () { files.push("man/", "man/man1/", "man/man1/bash.1") }
- , ["*/man*/bash.*", ["man/man1/bash.1"]]
- , ["man/man1/bash.1", ["man/man1/bash.1"]]
- , ["a***c", ["abc"], null, ["abc"]]
- , ["a*****?c", ["abc"], null, ["abc"]]
- , ["?*****??", ["abc"], null, ["abc"]]
- , ["*****??", ["abc"], null, ["abc"]]
- , ["?*****?c", ["abc"], null, ["abc"]]
- , ["?***?****c", ["abc"], null, ["abc"]]
- , ["?***?****?", ["abc"], null, ["abc"]]
- , ["?***?****", ["abc"], null, ["abc"]]
- , ["*******c", ["abc"], null, ["abc"]]
- , ["*******?", ["abc"], null, ["abc"]]
- , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]]
- , ["[-abc]", ["-"], null, ["-"]]
- , ["[abc-]", ["-"], null, ["-"]]
- , ["\\", ["\\"], null, ["\\"]]
- , ["[\\\\]", ["\\"], null, ["\\"]]
- , ["[[]", ["["], null, ["["]]
- , ["[", ["["], null, ["["]]
- , ["[*", ["[abc"], null, ["[abc"]]
- , "a right bracket shall lose its special meaning and\n" +
- "represent itself in a bracket expression if it occurs\n" +
- "first in the list. -- POSIX.2 2.8.3.2"
- , ["[]]", ["]"], null, ["]"]]
- , ["[]-]", ["]"], null, ["]"]]
- , ["[a-\z]", ["p"], null, ["p"]]
- , ["??**********?****?", [], { null: true }, ["abc"]]
- , ["??**********?****c", [], { null: true }, ["abc"]]
- , ["?************c****?****", [], { null: true }, ["abc"]]
- , ["*c*?**", [], { null: true }, ["abc"]]
- , ["a*****c*?**", [], { null: true }, ["abc"]]
- , ["a********???*******", [], { null: true }, ["abc"]]
- , ["[]", [], { null: true }, ["a"]]
- , ["[abc", [], { null: true }, ["["]]
-
- , "nocase tests"
- , ["XYZ", ["xYz"], { nocase: true, null: true }
- , ["xYz", "ABC", "IjK"]]
- , ["ab*", ["ABC"], { nocase: true, null: true }
- , ["xYz", "ABC", "IjK"]]
- , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true }
- , ["xYz", "ABC", "IjK"]]
-
- // [ pattern, [matches], MM opts, files, TAP opts]
- , "onestar/twostar"
- , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]]
- , ["{/?,*}", ["/a", "bb"], {null: true}
- , ["/a", "/b/b", "/a/b/c", "bb"]]
-
- , "dots should not match unless requested"
- , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]]
-
- // .. and . can only match patterns starting with .,
- // even when options.dot is set.
- , function () {
- files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"]
- }
- , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}]
- , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}]
- , ["a/*/b", ["a/c/b"], {dot:false}]
- , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}]
-
-
- // this also tests that changing the options needs
- // to change the cache key, even if the pattern is
- // the same!
- , ["**", ["a/b","a/.d",".a/.d"], { dot: true }
- , [ ".a/.d", "a/.d", "a/b"]]
-
- , "paren sets cannot contain slashes"
- , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]]
-
- // brace sets trump all else.
- //
- // invalid glob pattern. fails on bash4 and bsdglob.
- // however, in this implementation, it's easier just
- // to do the intuitive thing, and let brace-expansion
- // actually come before parsing any extglob patterns,
- // like the documentation seems to say.
- //
- // XXX: if anyone complains about this, either fix it
- // or tell them to grow up and stop complaining.
- //
- // bash/bsdglob says this:
- // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]]
- // but we do this instead:
- , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]]
-
- // test partial parsing in the presence of comment/negation chars
- , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]]
- , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]]
-
- // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped.
- , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g"
- , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"]
- , {}
- , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]]
-
-
- // crazy nested {,,} and *(||) tests.
- , function () {
- files = [ "a", "b", "c", "d"
- , "ab", "ac", "ad"
- , "bc", "cb"
- , "bc,d", "c,db", "c,d"
- , "d)", "(b|c", "*(b|c"
- , "b|c", "b|cc", "cb|c"
- , "x(a|b|c)", "x(a|c)"
- , "(a|b|c)", "(a|c)"]
- }
- , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]]
- , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]]
- // a
- // *(b|c)
- // *(b|d)
- , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]]
- , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]]
-
-
- // test various flag settings.
- , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"]
- , { noext: true } ]
- , ["a?b", ["x/y/acb", "acb/"], {matchBase: true}
- , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ]
- , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]]
-
-
- // begin channelling Boole and deMorgan...
- , "negation tests"
- , function () {
- files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"]
- }
-
- // anything that is NOT a* matches.
- , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]]
-
- // anything that IS !a* matches.
- , ["!a*", ["!ab", "!abc"], {nonegate: true}]
-
- // anything that IS a* matches
- , ["!!a*", ["a!b"]]
-
- // anything that is NOT !a* matches
- , ["!\\!a*", ["a!b", "d", "e", "\\!a"]]
-
- // negation nestled within a pattern
- , function () {
- files = [ "foo.js"
- , "foo.bar"
- // can't match this one without negative lookbehind.
- , "foo.js.js"
- , "blar.js"
- , "foo."
- , "boo.js.boo" ]
- }
- , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ]
-
- ].forEach(function (c) {
- if (typeof c === "function") return c()
- if (typeof c === "string") return t.comment(c)
-
- var pattern = c[0]
- , expect = c[1].sort(alpha)
- , options = c[2]
- , f = c[3] || files
- , tapOpts = c[4] || {}
-
- // options.debug = true
- var Class = mm.defaults(options).Minimatch
- var m = new Class(pattern, {})
- var r = m.makeRe()
- tapOpts.re = String(r) || JSON.stringify(r)
- tapOpts.files = JSON.stringify(f)
- tapOpts.pattern = pattern
- tapOpts.set = m.set
- tapOpts.negated = m.negate
-
- var actual = mm.match(f, pattern, options)
- actual.sort(alpha)
-
- t.equivalent( actual, expect
- , JSON.stringify(pattern) + " " + JSON.stringify(expect)
- , tapOpts )
- })
-
- t.comment("time=" + (Date.now() - start) + "ms")
- t.end()
-})
-
-tap.test("global leak test", function (t) {
- var globalAfter = Object.keys(global)
- t.equivalent(globalAfter, globalBefore, "no new globals, please")
- t.end()
-})
-
-function alpha (a, b) {
- return a > b ? 1 : -1
-}
diff --git a/deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js b/deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js
deleted file mode 100644
index 6676e2629a..0000000000
--- a/deps/npm/node_modules/minimatch/test/extglob-ending-with-state-char.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var test = require('tap').test
-var minimatch = require('../')
-
-test('extglob ending with statechar', function(t) {
- t.notOk(minimatch('ax', 'a?(b*)'))
- t.ok(minimatch('ax', '?(a*|b)'))
- t.end()
-})
diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md
index 8d2d495127..53d5da247f 100644
--- a/deps/npm/node_modules/node-gyp/README.md
+++ b/deps/npm/node_modules/node-gyp/README.md
@@ -44,7 +44,7 @@ You will also need to install:
* If the install fails, try uninstalling any C++ 2010 x64&x86 Redistributable that you have installed first.
* If you get errors that the 64-bit compilers are not installed you may also need the [compiler update for the Windows SDK 7.1]
* Windows 7/8:
- * Microsoft Visual Studio C++ 2012 for Windows Desktop ([Express][msvc2012] version works well)
+ * Microsoft Visual Studio C++ 2012/13 for Windows Desktop ([Express][msvc2012] version works well)
If you have multiple Python versions installed, you can identify which Python
version `node-gyp` uses by setting the '--python' variable:
@@ -82,7 +82,7 @@ $ node-gyp configure
```
__Note__: The `configure` step looks for the `binding.gyp` file in the current
-directory to processs. See below for instructions on creating the `binding.gyp` file.
+directory to process. See below for instructions on creating the `binding.gyp` file.
Now you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file
(on Windows) in the `build/` directory. Next invoke the `build` command:
@@ -96,7 +96,7 @@ in `build/Debug/` or `build/Release/`, depending on the build mode. At this poin
you can require the `.node` file with Node and run your tests!
__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or
-`-d`) switch when running the either `configure` or `build` command.
+`-d`) switch when running either the `configure`, `build` or `rebuild` command.
The "binding.gyp" file
@@ -120,8 +120,9 @@ A barebones `gyp` file appropriate for building a node addon looks like:
}
```
-Some additional resources for writing `gyp` files:
+Some additional resources for addons and writing `gyp` files:
+ * ["Going Native" a nodeschool.io tutorial](http://nodeschool.io/#goingnative)
* ["Hello World" node addon example](https://github.com/joyent/node/tree/master/test/addons/hello-world)
* [gyp user documentation](http://code.google.com/p/gyp/wiki/GypUserDocumentation)
* [gyp input format reference](http://code.google.com/p/gyp/wiki/InputFormatReference)
@@ -136,9 +137,9 @@ Commands
| **Command** | **Description**
|:--------------|:---------------------------------------------------------------
| `build` | Invokes `make`/`msbuild.exe` and builds the native addon
-| `clean` | Removes any the `build` dir if it exists
+| `clean` | Removes the `build` directory if it exists
| `configure` | Generates project build files for the current platform
-| `rebuild` | Runs "clean", "configure" and "build" all in a row
+| `rebuild` | Runs `clean`, `configure` and `build` all in a row
| `install` | Installs node development header files for the given version
| `list` | Lists the currently installed node development file versions
| `remove` | Removes the node development header files for the given version
diff --git a/deps/npm/node_modules/node-gyp/lib/build.js b/deps/npm/node_modules/node-gyp/lib/build.js
index f3605902e9..df24aaf454 100644
--- a/deps/npm/node_modules/node-gyp/lib/build.js
+++ b/deps/npm/node_modules/node-gyp/lib/build.js
@@ -222,8 +222,9 @@ function build (gyp, argv, callback) {
var p = arch === 'x64' ? 'x64' : 'Win32'
argv.push('/p:Configuration=' + buildType + ';Platform=' + p)
if (jobs) {
- if (!isNaN(parseInt(jobs, 10))) {
- argv.push('/m:' + parseInt(jobs, 10))
+ var j = parseInt(jobs, 10)
+ if (!isNaN(j) && j > 0) {
+ argv.push('/m:' + j)
} else if (jobs.toUpperCase() === 'MAX') {
argv.push('/m:' + require('os').cpus().length)
}
@@ -234,9 +235,10 @@ function build (gyp, argv, callback) {
argv.push('-C')
argv.push('build')
if (jobs) {
- if (!isNaN(parseInt(jobs, 10))) {
+ var j = parseInt(jobs, 10)
+ if (!isNaN(j) && j > 0) {
argv.push('--jobs')
- argv.push(parseInt(jobs, 10))
+ argv.push(j)
} else if (jobs.toUpperCase() === 'MAX') {
argv.push('--jobs')
argv.push(require('os').cpus().length)
diff --git a/deps/npm/node_modules/node-gyp/lib/node-gyp.js b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
index df7ce85553..6223d4b194 100644
--- a/deps/npm/node_modules/node-gyp/lib/node-gyp.js
+++ b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
@@ -180,8 +180,8 @@ proto.parseArgv = function parseOpts (argv) {
proto.spawn = function spawn (command, args, opts) {
if (!opts) opts = {}
- if (!opts.silent && !opts.customFds) {
- opts.customFds = [ 0, 1, 2 ]
+ if (!opts.silent && !opts.stdio) {
+ opts.stdio = [ 0, 1, 2 ]
}
var cp = child_process.spawn(command, args, opts)
log.info('spawn', command)
diff --git a/deps/npm/node_modules/node-gyp/lib/rebuild.js b/deps/npm/node_modules/node-gyp/lib/rebuild.js
index 595d87a7d4..497ffbd967 100644
--- a/deps/npm/node_modules/node-gyp/lib/rebuild.js
+++ b/deps/npm/node_modules/node-gyp/lib/rebuild.js
@@ -9,7 +9,7 @@ function rebuild (gyp, argv, callback) {
gyp.todo.push(
{ name: 'clean', args: [] }
- , { name: 'configure', args: [] }
+ , { name: 'configure', args: argv }
, { name: 'build', args: [] }
)
process.nextTick(callback)
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<String>} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array<String>} 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<String>} 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 {<filename>: 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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+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 (?:<pattern>)<type>
+ 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 (?:<pattern>)<type>
+ 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/minimatch/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
index fca8ef0194..6e5919de39 100644
--- a/deps/npm/node_modules/minimatch/.travis.yml
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
@@ -1,4 +1,3 @@
language: node_js
node_js:
- - 0.10
- - 0.11
+ - "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 &lt;julian@juliangruber.com&gt;
+
+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/minimatch/node_modules/brace-expansion/index.bak b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
index 71b53671d7..f8d40f79ac 100644
--- a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.bak
+++ b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
@@ -87,28 +87,21 @@ function gte(i, y) {
return i >= y;
}
-
-var exprCommaBrace = /,.*}/;
-var exprDollarEnd = /\$$/;
-var exprNumericSeq = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/;
-var exprAlphaSeq = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/;
-var exprIsOptions = /,/;
-
function expand(str, isTop) {
var expansions = [];
var m = balanced('{', '}', str);
- if (!m || exprDollarEnd.test(m.pre)) return [str];
+ if (!m || /\$$/.test(m.pre)) return [str];
- var isNumericSequence = exprNumericSeq.test(m.body);
- var isAlphaSequence = exprAlphaSeq.test(m.body);
+ 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 = exprIsOptions.test(m.body);
+ var isOptions = /^(.*,)+(.+)?$/.test(m.body);
if (!isSequence && !isOptions) {
// {a},b}
- if (exprCommaBrace.test(m.post)) {
+ if (m.post.match(/,.*}/)) {
str = m.pre + '{' + m.body + escClose + m.post;
- return expand(str, false);
+ return expand(str);
}
return [str];
}
@@ -195,4 +188,3 @@ function expand(str, isTop) {
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 `<b>` and `</b>`.
+
+[![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 &lt;julian@juliangruber.com&gt;
+
+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('<b>', '</b>', 'pre<b>in<b>nest</b></b>post'), {
+ start: 3,
+ end: 19,
+ pre: 'pre',
+ body: 'in<b>nest</b>',
+ post: 'post'
+ });
+ t.deepEqual(balanced('<b>', '</b>', 'pre</b><b>in<b>nest</b></b>post'), {
+ start: 7,
+ end: 23,
+ pre: 'pre</b>',
+ body: 'in<b>nest</b>',
+ 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]><><><><PRE-{a,b}{{a,b},a,b}-POST
+[PRE-aa-POST]
+[PRE-ab-POST]
+[PRE-aa-POST]
+[PRE-ab-POST]
+[PRE-ba-POST]
+[PRE-bb-POST]
+[PRE-ba-POST]
+[PRE-bb-POST]><><><><\{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}]><><><><{,}
+><><><><a{,}
+[a]
+[a]><><><><{,}b
+[b]
+[b]><><><><a{,}b
+[ab]
+[ab]><><><><a{b}c
+[a{b}c]><><><><a{1..5}b
+[a1b]
+[a2b]
+[a3b]
+[a4b]
+[a5b]><><><><a{01..5}b
+[a01b]
+[a02b]
+[a03b]
+[a04b]
+[a05b]><><><><a{-01..5}b
+[a-01b]
+[a000b]
+[a001b]
+[a002b]
+[a003b]
+[a004b]
+[a005b]><><><><a{-01..5..3}b
+[a-01b]
+[a002b]
+[a005b]><><><><a{001..9}b
+[a001b]
+[a002b]
+[a003b]
+[a004b]
+[a005b]
+[a006b]
+[a007b]
+[a008b]
+[a009b]><><><><a{b,c{d,e},{f,g}h}x{y,z
+[abx{y,z]
+[acdx{y,z]
+[acex{y,z]
+[afhx{y,z]
+[aghx{y,z]><><><><a{b,c{d,e},{f,g}h}x{y,z\}
+[abx{y,z}]
+[acdx{y,z}]
+[acex{y,z}]
+[afhx{y,z}]
+[aghx{y,z}]><><><><a{b,c{d,e},{f,g}h}x{y,z}
+[abxy]
+[abxz]
+[acdxy]
+[acdxz]
+[acexy]
+[acexz]
+[afhxy]
+[afhxz]
+[aghxy]
+[aghxz]><><><><a{b{c{d,e}f{x,y{{g}h
+[a{b{cdf{x,y{{g}h]
+[a{b{cef{x,y{{g}h]><><><><a{b{c{d,e}f{x,y{}g}h
+[a{b{cdfxh]
+[a{b{cdfy{}gh]
+[a{b{cefxh]
+[a{b{cefy{}gh]><><><><a{b{c{d,e}f{x,y}}g}h
+[a{b{cdfx}g}h]
+[a{b{cdfy}g}h]
+[a{b{cefx}g}h]
+[a{b{cefy}g}h]><><><><a{b{c{d,e}f}g}h
+[a{b{cdf}g}h]
+[a{b{cef}g}h]><><><><a{{x,y},z}b
+[axb]
+[ayb]
+[azb]><><><><f{x,y{g,z}}h
+[fxh]
+[fygh]
+[fyzh]><><><><f{x,y{{g,z}}h
+[f{x,y{g}h]
+[f{x,y{z}h]><><><><f{x,y{{g,z}}h}
+[fx]
+[fy{g}h]
+[fy{z}h]><><><><f{x,y{{g}h
+[f{x,y{{g}h]><><><><f{x,y{{g}}h
+[f{x,y{{g}}h]><><><><f{x,y{}g}h
+[fxh]
+[fy{}gh]><><><><z{a,b{,c}d
+[z{a,bd]
+[z{a,bcd]><><><><z{a,b},c}d
+[za,c}d]
+[zb,c}d]><><><><{-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]
+[]><><><><d{a..Z..5}b
+[dab]
+[db]><><><><{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]><><><><X{{a,b},}X
+[XaX]
+[XbX]
+[XX]><><><><{{a,b},}c
+[ac]
+[bc]
+[c]><><><><{{a,b}.}
+[{a.}]
+[{b.}]><><><><{{a,b}}
+[{a}]
+[{b}]><><><><X{a..#}X
+[X{a..#}X]><><><><
+><><><><{-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}]><><><><a,\{b,c}
+[a,{b,c}]><><><><{-10.\.00}
+[{-10..00}]><><><><ff{c,b,a}
+[ffc]
+[ffb]
+[ffa]><><><><f{d,e,f}g
+[fdg]
+[feg]
+[ffg]><><><><{l,n,m}xyz
+[lxyz]
+[nxyz]
+[mxyz]><><><><{abc\,def}
+[{abc,def}]><><><><{abc}
+[{abc}]><><><><{x\,y,\{abc\},trie}
+[x,y]
+[{abc}]
+[trie]><><><><{}
+[{}]><><><><}
+[}]><><><><{
+[{]><><><><abcd{efgh
+[abcd{efgh]><><><><{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]><><><><x{{0..10},braces}y
+[x0y]
+[x1y]
+[x2y]
+[x3y]
+[x4y]
+[x5y]
+[x6y]
+[x7y]
+[x8y]
+[x9y]
+[x10y]
+[xbracesy]><><><><{3..3}
+[3]><><><><x{3..3}y
+[x3y]><><><><{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]><><><><x{10..1}y
+[x10y]
+[x9y]
+[x8y]
+[x7y]
+[x6y]
+[x5y]
+[x4y]
+[x3y]
+[x2y]
+[x1y]><><><><{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]><><><><a-{b{d,e}}-c
+[a-{bd}-c]
+[a-{be}-c]><><><><a-{bdef-{g,i}-c
+[a-{bdef-g-c]
+[a-{bdef-i-c]><><><><{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/package.json b/deps/npm/node_modules/node-gyp/package.json
index be8cb8818d..8b092ddca3 100644
--- a/deps/npm/node_modules/node-gyp/package.json
+++ b/deps/npm/node_modules/node-gyp/package.json
@@ -10,7 +10,7 @@
"bindings",
"gyp"
],
- "version": "1.0.2",
+ "version": "1.0.3",
"installVersion": 9,
"author": {
"name": "Nathan Rajlich",
@@ -33,7 +33,7 @@
"minimatch": "1",
"mkdirp": "^0.5.0",
"nopt": "2 || 3",
- "npmlog": "0",
+ "npmlog": "0 || 1",
"osenv": "0",
"request": "2",
"rimraf": "2",
@@ -44,19 +44,19 @@
"engines": {
"node": ">= 0.8.0"
},
- "gitHead": "1e399b471945b35f3bfbca4a10fba31a6739b5db",
+ "gitHead": "abad2b58c03de713eb1805f7a681b1084c08b316",
"bugs": {
"url": "https://github.com/TooTallNate/node-gyp/issues"
},
"homepage": "https://github.com/TooTallNate/node-gyp",
- "_id": "node-gyp@1.0.2",
+ "_id": "node-gyp@1.0.3",
"scripts": {},
- "_shasum": "b0bb6d2d762271408dd904853e7aa3000ed2eb57",
- "_from": "node-gyp@>=1.0.2 <1.1.0",
- "_npmVersion": "2.0.0-beta.3",
+ "_shasum": "a2f63f2df0b1f6cc69fa54bce3cc298aa769cbd8",
+ "_from": "node-gyp@>=1.0.3 <1.1.0",
+ "_npmVersion": "1.4.28",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "name": "tootallnate",
+ "email": "nathan@tootallnate.net"
},
"maintainers": [
{
@@ -73,10 +73,10 @@
}
],
"dist": {
- "shasum": "b0bb6d2d762271408dd904853e7aa3000ed2eb57",
- "tarball": "http://registry.npmjs.org/node-gyp/-/node-gyp-1.0.2.tgz"
+ "shasum": "a2f63f2df0b1f6cc69fa54bce3cc298aa769cbd8",
+ "tarball": "http://registry.npmjs.org/node-gyp/-/node-gyp-1.0.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-1.0.2.tgz",
+ "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-1.0.3.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/normalize-git-url/.eslintrc b/deps/npm/node_modules/normalize-git-url/.eslintrc
new file mode 100644
index 0000000000..b54e30fd2a
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/.eslintrc
@@ -0,0 +1,19 @@
+{
+ "env" : {
+ "node" : true
+ },
+ "rules" : {
+ "semi": [2, "never"],
+ "strict": 0,
+ "quotes": [1, "double", "avoid-escape"],
+ "no-use-before-define": 0,
+ "curly": 0,
+ "no-underscore-dangle": 0,
+ "no-lonely-if": 1,
+ "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
+ "no-mixed-requires": 0,
+ "space-infix-ops": 0,
+ "key-spacing": 0,
+ "no-multi-spaces": 0
+ }
+}
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
index 48bbdbcf9b..48bbdbcf9b 100644
--- 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
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
index 63fd26c10a..63fd26c10a 100644
--- 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
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
index 36ea016db7..36ea016db7 100644
--- 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
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 <https://github.com/tim-kos/node-retry>.
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 &lt;julian@juliangruber.com&gt;\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/<package name>/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/fixtures/@npm/npm-registry-client/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json
new file mode 100644
index 0000000000..4561db502b
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json
@@ -0,0 +1 @@
+{"_id":"@npm%2fnpm-registry-client","_rev":"213-0a1049cf56172b7d9a1184742c6477b9","name":"@npm/npm-registry-client","description":"Client for the npm registry","dist-tags":{"latest":"2.0.4","v2.0":"2.0.3"},"versions":{"0.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"693a08f6d2faea22bbd2bf412508a63d3e6229a7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.2","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"b48c0ec5563c6a6fdc253454fc56d2c60c5a26f4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.3","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"ccc0254c2d59e3ea9b9050e2b16edef78df1a1e8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.4","_engineSupported":true,"_npmVersion":"1.1.25","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"faabd25ef477521c74ac21e0f4cf3a2f66d18fb3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.4.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.5","dist":{"shasum":"85219810c9d89ae8d28ea766e7cf74efbd9f1e52","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.5.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.6","dist":{"shasum":"cc6533b3b41df65e6e9db2601fbbf1a509a7e94c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.6.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.7","dist":{"shasum":"0cee1d1c61f1c8e483774fe1f7bbb81c4f394a3a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.7.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.8","dist":{"shasum":"1b7411c3f7310ec2a96b055b00e7ca606e47bd07","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.8.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.9","dist":{"shasum":"6d5bfde431559ac9e2e52a7db85f5839b874f022","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.9.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.10","dist":{"shasum":"0c8b6a4615bce82aa6cc04a0d1f7dc89921f7a38","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.10.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.11","dist":{"shasum":"afab40be5bed1faa946d8e1827844698f2ec1db7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.11.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.0","dist":{"shasum":"1077d6bbb5e432450239dc6622a59474953ffbea","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.0.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.1","dist":{"shasum":"759765361d09b715270f59cf50f10908e4e9c5fc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.2","dist":{"shasum":"541ce93abb3d35f5c325545c718dd3bbeaaa9ff0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.3","dist":{"shasum":"e9a40d7031e8f809af5fd85aa9aac979e17efc97","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.4","dist":{"shasum":"b211485b046191a1085362376530316f0cab0420","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.4.tgz"},"_npmVersion":"1.1.48","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.0","dist":{"shasum":"6508a4b4d96f31057d5200ca5779531bafd2b840","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.0.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.1","dist":{"shasum":"1bc8c4576c368cd88253d8a52daf40c55b89bb1a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.1.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.5","dist":{"shasum":"2f55d675dfb977403b1ad0d96874c1d30e8058d7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.5.tgz"},"_npmVersion":"1.1.51","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.6","dist":{"shasum":"f05df6695360360ad220e6e13a6a7bace7165fbe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.6.tgz"},"_npmVersion":"1.1.56","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.7","dist":{"shasum":"867bad8854cae82ed89ee3b7f1d391af59491671","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.7.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.8","dist":{"shasum":"ef194cdb70f1ea03a576cff2c97392fa96e36563","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.8.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.9","dist":{"shasum":"3cec10431dfed1594adaf99c50f482ee56ecf9e4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.9.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.10","dist":{"shasum":"1e69726dae0944e78562fd77243f839c6a2ced1e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.10.tgz"},"_npmVersion":"1.1.64","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.11","dist":{"shasum":"d92f33c297eb1bbd57fd597c3d8f5f7e9340a0b5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.11.tgz"},"_npmVersion":"1.1.70","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.12","dist":{"shasum":"3bfb6fc0e4b131d665580cd1481c341fe521bfd3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.12.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.13":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.13","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.13","dist":{"shasum":"e03f2a4340065511b7184a3e2862cd5d459ef027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.13.tgz"},"_from":".","_npmVersion":"1.2.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.14":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.14","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.14","dist":{"shasum":"186874a7790417a340d582b1cd4a7c338087ee12","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.14.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.15":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.15","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.15","dist":{"shasum":"f71f32b7185855f1f8b7a5ef49e49d2357c2c552","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.15.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.16":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.16","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.16","dist":{"shasum":"3331323b5050fc5afdf77c3a35913c16f3e43964","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.16.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.17":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.17","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.17","dist":{"shasum":"1df2bbecac6751f5d9600fb43722aef96d956773","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.17.tgz"},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.18":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.18","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.18","dist":{"shasum":"198c8d15ed9b1ed546faf6e431eb63a6b18193ad","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.18.tgz"},"_from":".","_npmVersion":"1.2.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.19":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.19","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.19","dist":{"shasum":"106da826f0d2007f6e081f2b68fb6f26fa951b20","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.19.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.20":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.20","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.20","dist":{"shasum":"3fff194331e26660be2cf8ebf45ddf7d36add5f6","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.20.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.21":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.21","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.21","dist":{"shasum":"d85dd32525f193925c46ff9eb0e0f529dfd1b254","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.21.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.22":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.22","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.22","dist":{"shasum":"caa22ff40a1ccd632a660b8b80c333c8f92d5a17","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.22.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.23":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.23","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.23","dist":{"shasum":"a320ab2b1d048b4f7b88e40bd86974ca322b4c24","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.23.tgz"},"_from":".","_npmVersion":"1.2.19","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.24":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.24","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.24","dist":{"shasum":"e12f644338619319ee7f233363a1714a87f3c72d","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.24.tgz"},"_from":".","_npmVersion":"1.2.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.25":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.25","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.25","dist":{"shasum":"c2caeb1dcf937d6fcc4a187765d401f5e2f54027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.25.tgz"},"_from":".","_npmVersion":"1.2.32","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.26":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.26","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.26","dist":{"shasum":"4c5a2b3de946e383032f10fa497d0c15ee5f4c60","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.26.tgz"},"_from":".","_npmVersion":"1.3.1","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.27":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.27","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~2.0.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.27","dist":{"shasum":"8f338189d32769267886a07ad7b7fd2267446adf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.27.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.28":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.28","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"~2.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.28","dist":{"shasum":"959141fc0180d7b1ad089e87015a8a2142a8bffc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.28.tgz"},"_from":".","_npmVersion":"1.3.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.29":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.29","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.29","dist":{"shasum":"66ff2766f0c61d41e8a6139d3692d8833002c686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.29.tgz"},"_from":".","_npmVersion":"1.3.12","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.30":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.30","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.30","dist":{"shasum":"f01cae5c51aa0a1c5dc2516cbad3ebde068d3eaa","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.30.tgz"},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.31":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.31","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.31","dist":{"shasum":"24a23e24e43246677cb485f8391829e9536563d4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.31.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.0","dist":{"shasum":"66eab02a69be67f232ac14023eddfb8308c2eccd","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.0.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.1","dist":{"shasum":"16dba07cc304442edcece378218672d0a1258ef8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.1.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.2","dist":{"shasum":"ea3060bd0a87fb1d97b87433b50f38f7272b1686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.2.tgz"},"_from":".","_npmVersion":"1.3.20","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.3","dist":{"shasum":"da08bb681fb24aa5c988ca71f8c10f27f09daf4a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.3.tgz"},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.4","dist":{"shasum":"25d771771590b1ca39277aea4506af234c5f4342","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.4.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.5","dist":{"shasum":"98ba1ac851a3939a3fb9917c28fa8da522dc635f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.5.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.6","dist":{"shasum":"c48a2a03643769acc49672860f7920ec6bffac6e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.6.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.0","dist":{"shasum":"30d0c178b7f2e54183a6a3fc9fe4071eb10290bf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.0.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.1","dist":{"shasum":"9c49b3e44558e2072158fb085be8a083c5f83537","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.1.tgz"},"_from":".","_npmVersion":"1.4.0","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.2","dist":{"shasum":"d9568a9413bee14951201ce73f3b3992ec6658c0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.2.tgz"},"_from":".","_npmVersion":"1.4.1","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.3","dist":{"shasum":"aa188fc5067158e991a57f4697c54994108f5389","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.3.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.4","dist":{"shasum":"f9dbc383a49069d8c7f67755a3ff6e424aff584f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.4.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.5","dist":{"shasum":"7d6fdca46139470715f9477ddb5ad3e770d4de7b","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.5.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.6","_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"657f69a79543fc4cc264c3b2de958bd15f7140fe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.6.tgz"},"directories":{}},"0.4.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.7","dist":{"shasum":"f4369b59890da7882527eb7c427dd95d43707afb","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.7.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.8","_shasum":"a6685a161033101be6064b7af887ab440e8695d0","_from":".","_npmVersion":"1.4.8","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"a6685a161033101be6064b7af887ab440e8695d0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.8.tgz"},"directories":{}},"0.4.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.9","_shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.9.tgz"},"directories":{}},"0.4.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.10","_shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.10.tgz"},"directories":{}},"0.4.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.11","_shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.11.tgz"},"directories":{}},"0.4.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.12","_shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.12.tgz"},"directories":{}},"1.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.0","_shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.0.tgz"},"directories":{}},"1.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"98b1278c230cf6c159f189e2f8c69daffa727ab8","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.1","_shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.1.tgz"},"directories":{}},"2.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"47a98069b6a34e751cbd5b84ce92858cae5abe70","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.0","_shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.0.tgz"},"directories":{}},"2.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"123e40131f83f7265f66ecd2a558cce44a3aea86","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.1","_shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.1.tgz"},"directories":{}},"2.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6ecc311c9dd4890f2d9b6bae60447070a3321e12","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.2","_shasum":"a82b000354c7f830114fb18444764bc477d5740f","_from":".","_npmVersion":"1.4.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"a82b000354c7f830114fb18444764bc477d5740f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.2.tgz"},"directories":{}},"3.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6bb1aec1e85fa82ee075bd997d6fb9f2dbb7f643","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.0","_shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","_from":".","_npmVersion":"1.5.0-pre","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.0.tgz"},"directories":{}},"3.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"fe8382dde609ea1e3580fcdc5bc3d0bba119cfc6","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.1","_shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.1.tgz"},"directories":{}},"2.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"2578fb9a807d77417554ba235ba8fac39405e832","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.3","_shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.3.tgz"},"directories":{}},"3.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"15343019160ace0b9874cf0ec186b3425dbc7301","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.2","_shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","_from":".","_npmVersion":"1.5.0-alpha-2","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.2.tgz"},"directories":{}},"3.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"b18a780d1185f27c06c27812147b83aba0d4a2f5","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.3","_shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.3.tgz"},"directories":{}},"3.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.5.0","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"54900fe4b2eb5b99ee6dfe173f145732fdfae80e","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.4","_shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.4.tgz"},"directories":{}},"3.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"0.5","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"635db1654346bc86473df7b39626601425f46177","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.5","_shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.5.tgz"},"directories":{}},"3.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"eba30fadd724ed5cad1aec95ac3ee907a59b7317","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.6","_shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.6.tgz"},"directories":{}},"2.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"a10f621d9cdc813b9d3092a14b661f65bfa6d40d","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.4","_shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.4.tgz"},"directories":{}}},"readme":"# npm-registry-client\u000a\u000aThe code that npm uses to talk to the registry.\u000a\u000aIt handles all the caching and HTTP calls.\u000a\u000a## Usage\u000a\u000a```javascript\u000avar RegClient = require('npm-registry-client')\u000avar client = new RegClient(config)\u000avar uri = \"npm://registry.npmjs.org/npm\"\u000avar options = {timeout: 1000}\u000a\u000aclient.get(uri, options, function (error, data, raw, res) {\u000a // error is an error if there was a problem.\u000a // data is the parsed data object\u000a // raw is the json string\u000a // res is the response from couch\u000a})\u000a```\u000a\u000a# Registry URLs\u000a\u000aThe registry calls take either a full URL pointing to a resource in the\u000aregistry, or a base URL for the registry as a whole (for the base URL, any path\u000awill be ignored). In addition to `http` and `https`, `npm` URLs are allowed.\u000a`npm` URLs are `https` URLs with the additional restrictions that they will\u000aalways include authorization credentials, and the response is always registry\u000ametadata (and not tarballs or other attachments).\u000a\u000a# Configuration\u000a\u000aThis program is designed to work with\u000a[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\u000aa plain-jane object with the appropriate configs, and it'll shim it\u000afor you. Any configuration thingie that has get/set/del methods will\u000aalso be accepted.\u000a\u000a* `cache` **Required** {String} Path to the cache folder\u000a* `always-auth` {Boolean} Auth even for GET requests.\u000a* `auth` {String} A base64-encoded `username:password`\u000a* `email` {String} User's email address\u000a* `tag` {String} The default tag to use when publishing new packages.\u000a Default = `\"latest\"`\u000a* `ca` {String} Cerficate signing authority certificates to trust.\u000a* `cert` {String} Client certificate (PEM encoded). Enable access\u000a to servers that require client certificates\u000a* `key` {String} Private key (PEM encoded) for client certificate 'cert'\u000a* `strict-ssl` {Boolean} Whether or not to be strict with SSL\u000a certificates. Default = `true`\u000a* `user-agent` {String} User agent header to send. Default =\u000a `\"node/{process.version} {process.platform} {process.arch}\"`\u000a* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\u000a that works, otherwise logs are disabled.\u000a* `fetch-retries` {Number} Number of times to retry on GET failures.\u000a Default=2\u000a* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\u000a* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\u000a Default=10000 (10 seconds)\u000a* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\u000a Default=60000 (60 seconds)\u000a* `proxy` {URL} The url to proxy requests through.\u000a* `https-proxy` {URL} The url to proxy https requests through.\u000a Defaults to be the same as `proxy` if unset.\u000a* `_auth` {String} The base64-encoded authorization header.\u000a* `username` `_password` {String} Username/password to use to generate\u000a `_auth` if not supplied.\u000a* `_token` {Object} A token for use with\u000a [couch-login](https://npmjs.org/package/couch-login)\u000a\u000a# client.request(method, uri, options, cb)\u000a\u000a* `method` {String} HTTP method\u000a* `uri` {String} URI pointing to the resource to request\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `what` {Stream | Buffer | String | Object} The request body. Objects\u000a that are not Buffers or Streams are encoded as JSON.\u000a * `etag` {String} The cached ETag\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a* `cb` {Function}\u000a * `error` {Error | null}\u000a * `data` {Object} the parsed data object\u000a * `raw` {String} the json\u000a * `res` {Response Object} response from couch\u000a\u000aMake a request to the registry. All the other methods are wrappers around\u000a`request`.\u000a\u000a# client.adduser(base, username, password, email, cb)\u000a\u000a* `base` {String} Base registry URL\u000a* `username` {String}\u000a* `password` {String}\u000a* `email` {String}\u000a* `cb` {Function}\u000a\u000aAdd a user account to the registry, or verify the credentials.\u000a\u000a# client.deprecate(uri, version, message, cb)\u000a\u000a* `uri` {String} Full registry URI for the deprecated package\u000a* `version` {String} Semver version range\u000a* `message` {String} The message to use as a deprecation warning\u000a* `cb` {Function}\u000a\u000aDeprecate a version of a package in the registry.\u000a\u000a# client.bugs(uri, cb)\u000a\u000a* `uri` {String} Full registry URI for the package\u000a* `cb` {Function}\u000a\u000aGet the url for bugs of a package\u000a\u000a# client.get(uri, options, cb)\u000a\u000a* `uri` {String} The complete registry URI to fetch\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `timeout` {Number} Duration before the request times out.\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a * `staleOk` {Boolean} If there's cached data available, then return that\u000a to the callback quickly, and update the cache the background.\u000a\u000aFetches data from the registry via a GET request, saving it in the cache folder\u000awith the ETag.\u000a\u000a# client.publish(uri, data, tarball, cb)\u000a\u000a* `uri` {String} The registry URI to publish to\u000a* `data` {Object} Package data\u000a* `tarball` {String | Stream} Filename or stream of the package tarball\u000a* `cb` {Function}\u000a\u000aPublish a package to the registry.\u000a\u000aNote that this does not create the tarball from a folder. However, it can\u000aaccept a gzipped tar stream or a filename to a tarball.\u000a\u000a# client.star(uri, starred, cb)\u000a\u000a* `uri` {String} The complete registry URI to star\u000a* `starred` {Boolean} True to star the package, false to unstar it.\u000a* `cb` {Function}\u000a\u000aStar or unstar a package.\u000a\u000aNote that the user does not have to be the package owner to star or unstar a\u000apackage, though other writes do require that the user be the package owner.\u000a\u000a# client.stars(base, username, cb)\u000a\u000a* `base` {String} The base URL for the registry\u000a* `username` {String} Name of user to fetch starred packages for.\u000a* `cb` {Function}\u000a\u000aView your own or another user's starred packages.\u000a\u000a# client.tag(uri, version, tag, cb)\u000a\u000a* `uri` {String} The complete registry URI to tag\u000a* `version` {String} Version to tag\u000a* `tag` {String} Tag name to apply\u000a* `cb` {Function}\u000a\u000aMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\u000aspecified version.\u000a\u000a# client.unpublish(uri, [ver], cb)\u000a\u000a* `uri` {String} The complete registry URI to unpublish\u000a* `ver` {String} version to unpublish. Leave blank to unpublish all\u000a versions.\u000a* `cb` {Function}\u000a\u000aRemove a version of a package (or all versions) from the registry. When the\u000alast version us unpublished, the entire document is removed from the database.\u000a\u000a# client.upload(uri, file, [etag], [nofollow], cb)\u000a\u000a* `uri` {String} The complete registry URI to upload to\u000a* `file` {String | Stream} Either the filename or a readable stream\u000a* `etag` {String} Cache ETag\u000a* `nofollow` {Boolean} Do not follow 301/302 responses\u000a* `cb` {Function}\u000a\u000aUpload an attachment. Mostly used by `client.publish()`.\u000a","maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"time":{"modified":"2014-07-31T21:59:52.896Z","created":"2012-06-07T04:43:36.581Z","0.0.1":"2012-06-07T04:43:38.123Z","0.0.2":"2012-06-07T05:35:05.937Z","0.0.3":"2012-06-09T00:55:25.861Z","0.0.4":"2012-06-11T03:53:26.548Z","0.0.5":"2012-06-11T23:48:11.235Z","0.0.6":"2012-06-17T06:23:27.320Z","0.0.7":"2012-06-18T19:19:38.315Z","0.0.8":"2012-06-28T20:40:20.563Z","0.0.9":"2012-07-10T03:28:04.651Z","0.0.10":"2012-07-11T17:03:45.151Z","0.0.11":"2012-07-17T14:06:37.489Z","0.1.0":"2012-07-23T18:17:38.007Z","0.1.1":"2012-07-23T21:21:28.196Z","0.1.2":"2012-07-24T06:14:12.831Z","0.1.3":"2012-08-07T02:02:20.564Z","0.1.4":"2012-08-15T03:04:52.822Z","0.1.5":"2012-08-17T21:59:33.310Z","0.2.0":"2012-08-17T22:00:18.081Z","0.2.1":"2012-08-17T22:07:28.827Z","0.2.2":"2012-08-17T22:37:24.352Z","0.2.3":"2012-08-19T19:16:44.808Z","0.2.4":"2012-08-19T19:18:51.792Z","0.2.5":"2012-08-20T16:54:50.794Z","0.2.6":"2012-08-22T00:25:04.766Z","0.2.7":"2012-08-27T19:07:34.829Z","0.2.8":"2012-10-02T19:53:50.661Z","0.2.9":"2012-10-03T22:09:50.766Z","0.2.10":"2012-10-25T14:55:54.216Z","0.2.11":"2012-12-21T16:26:38.094Z","0.2.12":"2013-01-18T22:22:41.668Z","0.2.13":"2013-02-06T00:16:35.939Z","0.2.14":"2013-02-10T02:44:02.764Z","0.2.15":"2013-02-11T19:18:55.678Z","0.2.16":"2013-02-15T17:09:03.249Z","0.2.17":"2013-02-16T03:47:13.898Z","0.2.18":"2013-03-06T22:09:23.536Z","0.2.19":"2013-03-20T06:27:39.128Z","0.2.20":"2013-03-28T00:43:07.558Z","0.2.21":"2013-04-29T15:46:54.094Z","0.2.22":"2013-04-29T15:51:02.178Z","0.2.23":"2013-05-11T00:28:14.198Z","0.2.24":"2013-05-24T21:27:50.693Z","0.2.25":"2013-06-20T15:36:46.277Z","0.2.26":"2013-07-06T17:12:54.670Z","0.2.27":"2013-07-11T07:14:45.740Z","0.2.28":"2013-08-02T20:27:41.732Z","0.2.29":"2013-10-28T18:23:24.477Z","0.2.30":"2013-11-18T23:12:00.540Z","0.2.31":"2013-12-16T08:36:43.044Z","0.3.0":"2013-12-17T07:03:10.699Z","0.3.1":"2013-12-17T16:53:27.867Z","0.3.2":"2013-12-17T22:25:14.882Z","0.3.3":"2013-12-21T16:07:06.773Z","0.3.4":"2014-01-29T15:24:05.163Z","0.3.5":"2014-01-31T01:53:19.656Z","0.3.6":"2014-02-07T00:17:21.362Z","0.4.0":"2014-02-13T01:17:18.973Z","0.4.1":"2014-02-13T23:47:37.892Z","0.4.2":"2014-02-14T00:29:13.086Z","0.4.3":"2014-02-16T03:40:54.640Z","0.4.4":"2014-02-16T03:41:48.856Z","0.4.5":"2014-03-12T05:09:17.474Z","0.4.6":"2014-03-29T19:44:15.041Z","0.4.7":"2014-04-02T19:41:07.149Z","0.4.8":"2014-05-01T22:24:54.980Z","0.4.9":"2014-05-12T21:52:55.127Z","0.4.10":"2014-05-13T16:44:29.801Z","0.4.11":"2014-05-13T20:33:04.738Z","0.4.12":"2014-05-14T06:14:22.842Z","1.0.0":"2014-05-14T23:04:37.188Z","1.0.1":"2014-06-03T00:55:54.448Z","2.0.0":"2014-06-06T04:23:46.579Z","2.0.1":"2014-06-06T06:25:14.419Z","2.0.2":"2014-06-14T00:33:10.205Z","3.0.0":"2014-07-02T00:30:29.154Z","3.0.1":"2014-07-14T23:29:05.057Z","2.0.3":"2014-07-15T00:09:36.043Z","3.0.2":"2014-07-17T06:30:02.659Z","3.0.3":"2014-07-23T21:20:42.406Z","3.0.4":"2014-07-25T00:27:26.007Z","3.0.5":"2014-07-25T00:28:48.007Z","3.0.6":"2014-07-31T21:57:49.043Z","2.0.4":"2014-07-31T21:59:52.896Z"},"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"repository":{"url":"git://github.com/isaacs/npm-registry-client"},"users":{"fgribreau":true,"fengmk2":true},"readmeFilename":"README.md","homepage":"https://github.com/isaacs/npm-registry-client","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"license":"ISC","_attachments":{}}
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json
new file mode 100644
index 0000000000..01da300276
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json
@@ -0,0 +1 @@
+{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}} \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz
new file mode 100644
index 0000000000..19da9baa7f
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz
Binary files differ
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json
new file mode 100644
index 0000000000..d899f11922
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json
@@ -0,0 +1 @@
+{"_id":"underscore","_rev":"72-47f2986bfd8e8b55068b204588bbf484","name":"underscore","description":"JavaScript's functional programming helper library.","dist-tags":{"latest":"1.3.3","stable":"1.3.3"},"versions":{"1.0.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.3","_id":"underscore@1.0.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.0.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.4","_id":"underscore@1.0.4","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.4.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.0":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.0","_id":"underscore@1.1.0","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.0.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.1":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.1","_id":"underscore@1.1.1","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.1.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.2":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.2","_id":"underscore@1.1.2","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.2.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.3","_id":"underscore@1.1.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.8-1","_nodeVersion":"v0.2.5","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore.js","version":"1.1.4","_id":"underscore@1.1.4","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.9","_nodeVersion":"v0.5.0-pre","dist":{"shasum":"9e82274902865625b3a6d4c315a38ffd80047dae","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.4.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.1.5":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.5","_id":"underscore@1.1.5","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.16","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"23601d62c75619998b2f0db24938102793336a56","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.5.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.6":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.6","_id":"underscore@1.1.6","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"6868da1bdd72d75285be0b4e50f228e70d001a2c","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.6.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.7":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.7","devDependencies":{},"_id":"underscore@1.1.7","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.3","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"40bab84bad19d230096e8d6ef628bff055d83db0","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz"},"scripts":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.0","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.0","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"b32ce32c8c118caa8031c10b54c7f65ab3b557fd","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.0.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.1","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.1","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"fc5c6b0765673d92a2d4ac8b4dc0aa88702e2bd4","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.2","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"74dd40e9face84e724eb2edae945b8aedc233ba3","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.2.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.3","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"11b874da70f4683d7d48bba2b44be1e600d2f6cf","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.3.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.4":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.4","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.4","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"e8da6241aa06f64df2473bb2590b8c17c84c3c7e","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.0","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.0","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"253b2d79b7bb67943ced0fc744eb18267963ede8","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.0.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.1","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.1","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"6cb8aad0e77eb5dbbfb54b22bcd8697309cf9641","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.1.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.2","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"1b4e455089ab1d1d38ab6794ffe6cf08f764394a","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.2.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}}},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"time":{"1.0.3":"2011-12-07T15:12:18.045Z","1.0.4":"2011-12-07T15:12:18.045Z","1.1.0":"2011-12-07T15:12:18.045Z","1.1.1":"2011-12-07T15:12:18.045Z","1.1.2":"2011-12-07T15:12:18.045Z","1.1.3":"2011-12-07T15:12:18.045Z","1.1.4":"2011-12-07T15:12:18.045Z","1.1.5":"2011-12-07T15:12:18.045Z","1.1.6":"2011-12-07T15:12:18.045Z","1.1.7":"2011-12-07T15:12:18.045Z","1.2.0":"2011-12-07T15:12:18.045Z","1.2.1":"2011-12-07T15:12:18.045Z","1.2.2":"2011-11-14T20:28:47.115Z","1.2.3":"2011-12-07T15:12:18.045Z","1.2.4":"2012-01-09T17:23:14.818Z","1.3.0":"2012-01-11T16:41:38.459Z","1.3.1":"2012-01-23T22:57:36.474Z","1.3.2":"2012-04-09T18:38:14.345Z","1.3.3":"2012-04-10T14:43:48.089Z"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"users":{"vesln":true,"mvolkmann":true,"lancehunt":true,"mikl":true,"linus":true,"vasc":true,"bat":true,"dmalam":true,"mbrevoort":true,"danielr":true,"rsimoes":true,"thlorenz":true}} \ No newline at end of file
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 <me@re-becca.org>
+
+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 0000000000..2667cac459
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/example.png
Binary files differ
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/.npmignore b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/.npmignore
new file mode 100644
index 0000000000..7e17cf19b7
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/.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 temp files
+*~
+.#*
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/LICENSE b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/LICENSE
new file mode 100644
index 0000000000..e756052969
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/node_modules/has-unicode/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2014, Rebecca Turner <me@re-becca.org>
+
+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 <http://dojofoundation.org/>
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/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 <http://dojofoundation.org/>
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/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 <http://dojofoundation.org/>
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/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 <http://dojofoundation.org/>
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/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 <http://dojofoundation.org/>
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/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 <http://dojofoundation.org/>
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+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) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/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<count; ++ii) out += str
+ return out
+}
+
+ProgressBar.prototype.pulse = function(name) {
+ ++ this.spun
+ if (! this.showing) return
+ if (this.disabled) return
+
+ var baseName = this.lastName
+ name = name
+ ? ( baseName
+ ? baseName + " " + this.theme.subsection + " " + name
+ : null )
+ : baseName
+ this.show(name)
+ this.lastName = baseName
+}
+
+ProgressBar.prototype.show = function(name, completed) {
+ name = this.lastName = name || this.lastName
+ completed = this.lastCompleted = completed || this.lastCompleted
+
+ if (!isTTY()) return
+ if (this.disabled) return
+ if (! this.spun && ! completed) return
+ if (this.tryAgain) {
+ clearTimeout(this.tryAgain)
+ this.tryAgain = null
+ }
+ var self = this
+ if (this.showing && new Date() - this.last < this.updatefreq) {
+ this.tryAgain = setTimeout(function () {
+ if (self.disabled) return
+ if (! self.spun && ! completed) return
+ drawBar()
+ }, this.updatefreq - (new Date() - this.last))
+ return
+ }
+
+ return drawBar()
+
+ function drawBar() {
+ var values = {
+ name: name,
+ spinner: self.spun,
+ completed: completed
+ }
+
+ self.last = new Date()
+
+ var statusline = self.renderTemplate(self.theme, self.template, values)
+
+ if (self.showing) self.cursor.up(1)
+ self.cursor
+ .hide()
+ .horizontalAbsolute(0)
+ .write(statusline.substr(0, getWritableTTYColumns()) + "\n")
+ .show()
+
+ self.showing = true
+ }
+}
+
+ProgressBar.prototype.renderTemplate = function (theme, template, values) {
+ values.startgroup = theme.startgroup
+ values.endgroup = theme.endgroup
+ values.spinner = values.spinner
+ ? theme.spinner.substr(values.spinner % theme.spinner.length,1)
+ : ""
+
+ var output = {prebar: "", postbar: ""}
+ var status = "prebar"
+ var self = this
+ template.forEach(function(T) {
+ if (typeof T === "string") {
+ output[status] += T
+ return
+ }
+ if (T.type === "completionbar") {
+ status = "postbar"
+ return
+ }
+ if (!values.hasOwnProperty(T.type)) throw new Error("Unknown template value '"+T.type+"'")
+ var value = self.renderValue(T, values[T.type])
+ if (value === "") return
+ var sofar = output[status].length
+ var lastChar = sofar ? output[status][sofar-1] : null
+ if (T.separated && sofar && lastChar !== " ") {
+ output[status] += " "
+ }
+ output[status] += value
+ if (T.separated) output[status] += " "
+ })
+
+ var bar = ""
+ if (status === "postbar") {
+ var nonBarLen = output.prebar.length + output.postbar.length
+
+ var barLen = getWritableTTYColumns() - nonBarLen
+ var sofar = Math.round(barLen * Math.max(0,Math.min(1,values.completed||0)))
+ var rest = barLen - sofar
+ bar = repeat(theme.complete, sofar)
+ + repeat(theme.incomplete, rest)
+ }
+
+ return output.prebar + bar + output.postbar
+}
+ProgressBar.prototype.renderValue = function (template, value) {
+ if (value == null || value === "") return ""
+ var maxLength = template.maxLength || template.length
+ var minLength = template.minLength || template.length
+ var alignWith = align[template.align] || align.left
+// if (maxLength) value = value.substr(-1 * maxLength)
+ if (maxLength) value = value.substr(0, maxLength)
+ if (minLength) value = alignWith(value, minLength)
+ return value
+}
diff --git a/deps/npm/node_modules/npmlog/node_modules/gauge/test/progress-bar.js b/deps/npm/node_modules/npmlog/node_modules/gauge/test/progress-bar.js
new file mode 100644
index 0000000000..8e2a5ad643
--- /dev/null
+++ b/deps/npm/node_modules/npmlog/node_modules/gauge/test/progress-bar.js
@@ -0,0 +1,148 @@
+"use strict"
+var test = require("tap").test
+var ProgressBar = require("../progress-bar.js")
+
+var cursor = []
+var C
+var bar = new ProgressBar({theme: ProgressBar.ascii}, C = {
+ show: function () {
+ cursor.push(["show"])
+ return C
+ },
+ hide: function () {
+ cursor.push(["hide"])
+ return C
+ },
+ up: function (lines) {
+ cursor.push(["up",lines])
+ return C
+ },
+ horizontalAbsolute: function (col) {
+ cursor.push(["horizontalAbsolute", col])
+ return C
+ },
+ eraseLine: function () {
+ cursor.push(["eraseLine"])
+ return C
+ },
+ write: function (line) {
+ cursor.push(["write", line])
+ return C
+ }
+})
+
+
+function isOutput(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})
+ }
+ }
+ tests.forEach(function(test) {
+ t.is(cursor[test.cmd] ? cursor[test.cmd][test.arg] : null,
+ output[test.cmd][test.arg],
+ msg + ": " + output[test.cmd] + (test.arg ? " arg #"+test.arg : ""))
+ })
+}
+
+test("hide", function (t) {
+ t.plan(11)
+ process.stderr.isTTY = false
+ bar.hide()
+ t.is(cursor.length, 0, "We don't progress bar without a tty")
+ cursor = []
+ process.stderr.isTTY = true
+ bar.hide()
+ isOutput(t, "hide while not showing",[
+ ["show"], // cursor
+ ["horizontalAbsolute",0],
+ ["eraseLine"]])
+ cursor = []
+ bar.showing = true
+ bar.hide()
+ isOutput(t, "hide while showing",[
+ ["show"], // cursor
+ ["up", 1],
+ ["horizontalAbsolute",0],
+ ["eraseLine"]])
+})
+
+test("renderTemplate", function (t) {
+ t.plan(16)
+ process.stderr.columns = 11
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "name"}],{name: "NAME"})
+ t.is(result, "NAME", "name substitution")
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 0})
+ t.is(result, "----------", "0% bar")
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 0.5})
+ t.is(result, "#####-----", "50% bar")
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 1})
+ t.is(result, "##########", "100% bar")
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: -100})
+ t.is(result, "----------", "0% underflow bar")
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "completionbar"}],{completed: 100})
+ t.is(result, "##########", "100% overflow bar")
+ var result = bar.renderTemplate(ProgressBar.ascii,[{type: "name"},{type: "completionbar"}],{name: "NAME", completed: 0.5})
+ t.is(result, "NAME###---", "name + 50%")
+ var result = bar.renderTemplate(ProgressBar.ascii, ["static"], {})
+ t.is(result, "static", "static text")
+ var result = bar.renderTemplate(ProgressBar.ascii, ["static",{type: "name"}], {name: "NAME"})
+ t.is(result, "staticNAME", "static text + var")
+ var result = bar.renderTemplate(ProgressBar.ascii, ["static",{type: "name", separated: true}], {name: "NAME"})
+ t.is(result, "static NAME ", "pre-separated")
+ var result = bar.renderTemplate(ProgressBar.ascii, [{type: "name", separated: true}, "static"], {name: "NAME"})
+ t.is(result, "NAME static", "post-separated")
+ var result = bar.renderTemplate(ProgressBar.ascii, ["1",{type: "name", separated: true}, "2"], {name: ""})
+ t.is(result, "12", "separated no value")
+ var result = bar.renderTemplate(ProgressBar.ascii, ["1",{type: "name", separated: true}, "2"], {name: "NAME"})
+ t.is(result, "1 NAME 2", "separated value")
+ var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 0})
+ t.is(result, "", "No spinner")
+ var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 1})
+ t.is(result, "\\", "Spinner 1")
+ var result = bar.renderTemplate(ProgressBar.ascii, [{type: "spinner"}], {spinner: 10})
+ t.is(result, "|", "Spinner 10")
+})
+
+test("show & pulse", function (t) {
+ t.plan(23)
+
+ process.stderr.columns = 16
+ cursor = []
+ process.stderr.isTTY = false
+ bar.template[0].length = 6
+ bar.last = new Date(0)
+ bar.show("NAME", 0)
+ t.is(cursor.length, 0, "no tty, no progressbar")
+
+ cursor = []
+ process.stderr.isTTY = true
+ bar.last = new Date(0)
+ bar.show("NAME", 0.1)
+ isOutput(t, "tty, name, completion",
+ [ [ 'hide' ],
+ [ 'horizontalAbsolute', 0 ],
+ [ 'write', 'NAME |#-----|\n' ],
+ [ 'show' ] ])
+
+ bar.show("S")
+ cursor = []
+ bar.last = new Date(0)
+ bar.pulse()
+ isOutput(t, "pulsed spinner",
+ [ [ 'up', 1 ],
+ [ 'hide' ],
+ [ 'horizontalAbsolute', 0 ],
+ [ 'write', 'S \\ |----|\n' ],
+ [ 'show' ] ])
+ cursor = []
+ bar.last = new Date(0)
+ bar.pulse("P")
+ isOutput(t, "pulsed spinner with subsection",
+ [ [ 'up', 1 ],
+ [ 'hide' ],
+ [ 'horizontalAbsolute', 0 ],
+ [ 'write', 'S -> 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.<level>` Emitted for all messages with the `<level>` level.\n* `<prefix>` 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-installed/node_modules/readdir-scoped-modules/.eslintrc b/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/.eslintrc
new file mode 100644
index 0000000000..ba33150421
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "env" : {
+ "node" : true
+ },
+ "rules" : {
+ "semi": [2, "never"],
+ "strict": 0,
+ "quotes": [1, "double", "avoid-escape"],
+ "no-use-before-define": 0,
+ "curly": 0,
+ "no-underscore-dangle": 0,
+ "no-lonely-if": 1,
+ "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
+ "no-mixed-requires": 0,
+ "space-infix-ops": 0
+ }
+}
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<String>} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array<String>} 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<String>} 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 {<filename>: 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/node_modules/json-parse-helpfulerror/.editorconfig b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.editorconfig
new file mode 100644
index 0000000000..fb7f73a832
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.editorconfig
@@ -0,0 +1,14 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.js, **/*.js]
+indent_size = 4
+indent_style = space
+
+[{package.json,.travis.yml}]
+indent_size = 2
+indent_style = space
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.npmignore b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.npmignore
new file mode 100644
index 0000000000..59d842baa8
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/.npmignore
@@ -0,0 +1,28 @@
+# 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
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/LICENSE b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/LICENSE
new file mode 100644
index 0000000000..c3d2eb3550
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Sam Mikes
+
+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/read-package-json/node_modules/json-parse-helpfulerror/README.md b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/README.md
new file mode 100644
index 0000000000..ffad93584b
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/README.md
@@ -0,0 +1,29 @@
+# json-parse-helpfulerror
+
+A drop-in replacement for `JSON.parse` that uses
+<https://npmjs.org/jju> to provide more useful error messages in the
+event of a parse error.
+
+# Example
+
+## Installation
+
+```
+npm i -S json-parse-helpfulerror
+```
+
+## Use
+
+```js
+var jph = require('json-parse-helpfulerror');
+
+var notJSON = "{'foo': 3}"; // keys must be double-quoted in JSON
+
+JSON.parse(notJSON); // throws unhelpful error
+
+jph.parse("{'foo': 3}") // throws more helpful error: "Unexpected token '\''..."
+```
+
+# License
+
+MIT \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/index.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/index.js
new file mode 100644
index 0000000000..15648b017b
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var jju = require('jju');
+
+function parse(text, reviver) {
+ try {
+ return JSON.parse(text, reviver);
+ } catch (err) {
+ // we expect this to throw with a more informative message
+ jju.parse(text, {
+ mode: 'json',
+ reviver: reviver
+ });
+
+ // backup if jju is not as strict as JSON.parse; re-throw error
+ // data-dependent code path, I do not know how to cover it
+ throw err;
+ }
+}
+
+exports.parse = parse;
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.editorconfig b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.editorconfig
new file mode 100644
index 0000000000..8de2a35e3a
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.editorconfig
@@ -0,0 +1,19 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[{.,}*.{js,json,json5,yml,yaml}]
+indent_style = space
+indent_size = 2
+
+[*.md]
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = false
+
+[Makefile]
+indent_style = tab
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.npmignore b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.npmignore
new file mode 100644
index 0000000000..b561496c91
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/.npmignore
@@ -0,0 +1,6 @@
+package.json
+node_modules
+test/external
+examples
+/.eslint*
+/.travis.yml
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/README.md b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/README.md
new file mode 100644
index 0000000000..3d61083fb0
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/README.md
@@ -0,0 +1,242 @@
+`jju` - a set of utilities to work with JSON / JSON5 documents
+
+[![npm version badge](https://img.shields.io/npm/v/jju.svg)](https://www.npmjs.org/package/jju)
+[![travis badge](http://img.shields.io/travis/rlidwka/jju.svg)](https://travis-ci.org/rlidwka/jju)
+[![downloads badge](http://img.shields.io/npm/dm/jju.svg)](https://www.npmjs.org/package/jju)
+
+## Installation
+
+```
+npm install jju
+```
+
+## Usage
+
+This module provides following functions:
+
+1. [jju.parse()](#jjuparse-function) parses json/json5 text and returns a javascript value it corresponds to
+2. [jju.stringify()](#jjustringify-function) converts javascript value to an appropriate json/json5 text
+3. [jju.tokenize()](#jjutokenize-function) parses json/json5 text and returns an array of tokens it consists of ([see demo](http://rlidwka.github.io/jju/tokenizer.html))
+4. [jju.analyze()](#jjuanalyze-function) parses json/json5 text and tries to guess indentation, quoting style, etc.
+5. [jju.update()](#jjuupdate-function) changes json/json5 text, preserving original formatting as much as possible ([see demo](http://rlidwka.github.io/jju/editor.html))
+
+All functions are able to work with a standard JSON documents. `jju.parse()` and `jju.stringify()` are better in some cases, but slower than native `JSON.parse()` and `JSON.stringify()` versions. Detailed description see below.
+
+### jju.parse() function
+
+```javascript
+/*
+ * Main syntax:
+ *
+ * `text` - text to parse, type: String
+ * `options` - parser options, type: Object
+ */
+jju.parse(text[, options])
+
+// compatibility syntax
+jju.parse(text[, reviver])
+```
+
+Options:
+
+ - reserved\_keys - what to do with reserved keys (String, default="ignore")
+ - "ignore" - ignore reserved keys
+ - "throw" - throw SyntaxError in case of reserved keys
+ - "replace" - replace reserved keys, this is the default JSON.parse behaviour, unsafe
+
+ Reserved keys are keys that exist in an empty object (`hasOwnProperty`, `__proto__`, etc.).
+
+```javascript
+// 'ignore' will cause reserved keys to be ignored:
+parse('{hasOwnProperty: 1}', {reserved_keys: 'ignore'}) == {}
+parse('{hasOwnProperty: 1, x: 2}', {reserved_keys: 'ignore'}).hasOwnProperty('x') == true
+
+// 'throw' will cause SyntaxError in these cases:
+parse('{hasOwnProperty: 1}', {reserved_keys: 'throw'}) == SyntaxError
+
+// 'replace' will replace reserved keys with new ones:
+parse('{hasOwnProperty: 1}', {reserved_keys: 'throw'}) == {hasOwnProperty: 1}
+parse('{hasOwnProperty: 1, x: 2}', {reserved_keys: 'ignore'}).hasOwnProperty('x') == TypeError
+```
+
+
+ - null\_prototype - create object as Object.create(null) instead of '{}' (Boolean)
+
+ if `reserved_keys != 'replace'`, default is **false**
+
+ if `reserved_keys == 'replace'`, default is **true**
+
+ It is usually unsafe and not recommended to change this option to false in the last case.
+
+ - reviver - reviver function - Function
+
+ This function should follow JSON specification
+
+ - mode - operation mode, set it to 'json' if you want to throw on non-strict json files (String)
+
+### jju.stringify() function
+
+```javascript
+/*
+ * Main syntax:
+ *
+ * `value` - value to serialize, type: *
+ * `options` - serializer options, type: Object
+ */
+jju.stringify(value[, options])
+
+// compatibility syntax
+jju.stringify(value[, replacer [, indent])
+```
+
+Options:
+
+ - ascii - output ascii only (Boolean, default=false)
+ If this option is enabled, output will not have any characters except of 0x20-0x7f.
+
+ - indent - indentation (String, Number or Boolean, default='\t')
+ This option follows JSON specification.
+
+ - quote - enquoting char (String, "'" or '"', default="'")
+ - quote\_keys - whether keys quoting in objects is required or not (String, default=false)
+ If you want `{"q": 1}` instead of `{q: 1}`, set it to true.
+
+ - sort\_keys - sort all keys while stringifying (Boolean or Function, default=false)
+ By default sort order will depend on implementation, with v8 it's insertion order. If set to `true`, all keys (but not arrays) will be sorted alphabetically. You can provide your own sorting function as well.
+
+ - replacer - replacer function or array (Function or Array)
+ This option follows JSON specification.
+
+ - no\_trailing\_comma = don't output trailing comma (Boolean, default=false)
+ If this option is set, arrays like this `[1,2,3,]` will never be generated. Otherwise they may be generated for pretty printing.
+
+ - mode - operation mode, set it to 'json' if you want correct json in the output (String)
+
+ Currently it's either 'json' or something else. If it is 'json', following options are implied:
+
+ - options.quote = '"'
+ - options.no\_trailing\_comma = true
+ - options.quote\_keys = true
+ - '\x' literals are not used
+
+### jju.tokenize() function
+
+```javascript
+/*
+ * Main syntax:
+ *
+ * `text` - text to tokenize, type: String
+ * `options` - parser options, type: Object
+ */
+jju.tokenize(text[, options])
+```
+
+Options are the same as for the `jju.parse` function.
+
+Return value is an array of tokens, where each token is an object:
+
+ - raw (String) - raw text of this token, if you join all raw's, you will get the original document
+ - type (String) - type of the token, can be `whitespace`, `comment`, `key`, `literal`, `separator` or `newline`
+ - stack (Array) - path to the current token in the syntax tree
+ - value - value of the token if token is a `key` or `literal`
+
+You can check tokenizer for yourself using [this demo](http://rlidwka.github.io/jju/tokenizer.html).
+
+### jju.analyze() function
+
+```javascript
+/*
+ * Main syntax:
+ *
+ * `text` - text to analyze, type: String
+ * `options` - parser options, type: Object
+ */
+jju.analyze(text[, options])
+```
+
+Options are the same as for the `jju.parse` function.
+
+Return value is an object defining a programming style in which the document was written.
+
+ - indent (String) - preferred indentation
+ - newline (String) - preferred newline
+ - quote (String) - `"` or `'` depending on which quote is preferred
+ - quote\_keys (Boolean) - `true` if unquoted keys were used at least once
+ - has\_whitespace (Boolean) - `true` if input has a whitespace token
+ - has\_comments (Boolean) - `true` if input has a comment token
+ - has\_newlines (Boolean) - `true` if input has a newline token
+ - has\_trailing\_comma (Boolean) - `true` if input has at least one trailing comma
+
+### jju.update() function
+
+```javascript
+/*
+ * Main syntax:
+ *
+ * `text` - original text, type: String
+ * `new_value` - new value you want to set
+ * `options` - parser or stringifier options, type: Object
+ */
+jju.update(text, new_value[, options])
+```
+
+If you want to update a JSON document, here is the general approach:
+
+```javascript
+// here is your original JSON document:
+var input = '{"foo": "bar", "baz": 123}'
+
+// you need to parse it first:
+var json = jju.parse(input, {mode: 'json'})
+// json is { foo: 'bar', baz: 123 }
+
+// then you can change it as you like:
+json.foo = 'quux'
+json.hello = 'world'
+
+// then you run an update function to change the original json:
+var output = jju.update(input, json, {mode: 'json'})
+// output is '{"foo": "quux", "baz": 123, "hello": "world"}'
+```
+
+Look at [this demo](http://rlidwka.github.io/jju/editor.html) to test various types of json.
+
+## Advantages over existing JSON libraries
+
+In a few cases it makes sense to use this module instead of built-in JSON methods.
+
+Parser:
+ - better error reporting with source code and line numbers
+
+In case of syntax error, JSON.parse does not return any good information to the user. This module does:
+
+```
+$ node -e 'require("jju").parse("[1,1,1,1,invalid]")'
+
+SyntaxError: Unexpected token 'i' at 0:9
+[1,1,1,1,invalid]
+ ^
+```
+
+This module is about 5 times slower, so if user experience matters to you more than performance, use this module. If you're working with a lot of machine-generated data, use JSON.parse instead.
+
+Stringifier:
+ - util.inspect-like pretty printing
+
+This module behaves more smart when dealing with object and arrays, and does not always print newlines in them:
+
+```
+$ node -e 'console.log(require("./").stringify([[,,,],,,[,,,,]], {mode:"json"}))'
+[
+ [null, null, null],
+ null,
+ null,
+ [null, null, null, null]
+]
+```
+
+JSON.stringify will split this into 15 lines, and it's hard to read.
+
+Yet again, this feature comes with a performance hit, so if user experience matters to you more than performance, use this module. If your JSON will be consumed by machines, use JSON.stringify instead.
+
+As a rule of thumb, if you use "space" argument to indent your JSON, you'd better use this module instead.
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/benchmark.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/benchmark.js
new file mode 100755
index 0000000000..28a6aad75a
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/benchmark.js
@@ -0,0 +1,40 @@
+#!/usr/bin/env node
+
+var Benchmark = require('benchmark')
+var YAML = require('js-yaml')
+var JJU = require('../')
+var JSON5 = require('json5')
+var suite = new Benchmark.Suite
+
+var sample
+sample = require('fs').readFileSync(__dirname + '/../package.yaml')
+sample = YAML.safeLoad(sample)
+sample = JSON.stringify(sample)
+
+var functions = {
+ 'JSON': function(x) { JSON.parse(x) },
+ 'JSON5': function(x) { JSON5.parse(x) },
+ 'JJU': function(x) { JJU.parse(x) },
+ 'JS-YAML': function(x) { YAML.safeLoad(x) },
+}
+
+for (var name in functions) {
+ with ({ fn: functions[name] }) {
+ suite.add(name, {
+ onCycle: function onCycle(event) {
+ process.stdout.write('\r\033[2K - ' + event.target)
+ },
+ fn: function () {
+ fn(sample)
+ },
+ })
+ }
+}
+
+console.log()
+suite.on('cycle', function(event) {
+ console.log('\r\033[2K + ' + String(event.target))
+})
+.run()
+
+process.on('exit', function() { console.log() })
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/package.json b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/package.json
new file mode 100644
index 0000000000..7f0dcf08b7
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/benchmark/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "benchmarks",
+ "private": true,
+ "dependencies": {
+ "json5": "*",
+ "js-yaml": "*",
+ "benchmark": "*"
+ }
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/Grammar.md b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/Grammar.md
new file mode 100644
index 0000000000..61ae49b380
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/Grammar.md
@@ -0,0 +1,219 @@
+
+JSON5 grammar expressed in EBNF form.
+
+PS: I don't know what is appropriate syntax highlighter for this, so I'm using "modula2" because why not. I also inserted <ZWSP> after backslash to preserve syntax highlighting, this character has nothing to do with actual JSON5 syntax and should be ignored.
+
+```modula2
+json5_text = expression_with_whitespace
+
+expression_with_whitespace = [white_space] , expression , [white_space]
+
+expression = literal
+ | array_literal
+ | object_literal
+
+literal = null_literal
+ | boolean_literal
+ | signed_numeric_literal
+ | string_literal
+
+null_literal = 'null'
+
+boolean_literal = 'true'
+ | 'false'
+
+(* Source Characters *)
+
+source_character = .
+ (* any Unicode code unit *)
+
+line_terminator = <LF>
+ | <CR>
+ | <LS>
+ | <PS>
+
+line_terminator_sequence = <LF>
+ | <CR>
+ | <LS>
+ | <PS>
+ | <CR> , <LF>
+
+white_space = white_space_element
+ | white_space , white_space_element
+
+white_space_element = white_space_character
+ | comment
+
+white_space_character = <TAB>
+ | <VT>
+ | <FF>
+ | <SP>
+ | <NBSP>
+ | <BOM>
+ | <USP>
+
+comment = multi_line_comment
+ | single_line_comment
+
+multi_line_comment = '/*' , [multi_line_comment_chars] , '*/'
+
+multi_line_comment_chars = (source_character - '*') , [multi_line_comment_chars]
+ | '*' , [post_asterisk_comment_chars]
+
+post_asterisk_comment_chars = (source_character - ('*' | '/')) , [multi_line_comment_chars]
+ | '*' , [post_asterisk_comment_chars]
+
+single_line_comment = '//' , [single_line_comment_chars]
+
+single_line_comment_chars = single_line_comment_char , single_line_comment_chars
+
+single_line_comment_char = source_character - line_terminator
+
+(* Character classes *)
+
+decimal_digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
+
+non_zero_digit = decimal_digit - '0'
+
+hex_digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a'
+ | 'b' | 'c' | 'd' | 'e' | 'f' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
+
+ascii_letter = ascii_letter_lowercase
+ | ascii_letter_uppercase
+
+ascii_letter_lowercase = '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'
+
+ascii_letter_uppercase = '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'
+
+(* Numeric Literals *)
+
+signed_numeric_literal = '-' , numeric_literal
+ | '+' , numeric_literal
+ | numeric_literal
+
+numeric_literal = decimal_literal
+ | hex_integer_literal
+ | non_finite_literal
+
+non_finite_literal = 'Infinity'
+ | 'NaN'
+
+decimal_literal = decimal_integer_literal , '.' , [decimal_digits] , [exponent_part]
+ | '.' , decimal_digits , [exponent_part]
+ | decimal_integer_literal , [exponent_part]
+
+decimal_integer_literal = '0'
+ | non_zero_digit , [decimal_digits]
+
+decimal_digits = decimal_digit
+ | decimal_digits , decimal_digit
+
+exponent_part = exponent_indicator , signed_integer
+
+exponent_indicator = 'e' | 'E'
+
+signed_integer = decimal_digits
+ | '+' , decimal_digits
+ | '-' , decimal_digits
+
+hex_integer_literal = '0x' , hex_digit
+ | '0X' , hex_digit
+ | hex_integer_literal , hex_digit
+
+(* String Literals *)
+
+string_literal = '"' , [double_string_characters] , '"'
+ | "'" , [single_string_characters] , "'"
+
+double_string_characters = double_string_character , [double_string_characters]
+
+single_string_characters = single_string_character , [single_string_characters]
+
+double_string_character = source_character - ('"' | '\​' | line_terminator)
+ | '\​' , escape_sequence
+ | line_continuation
+
+single_string_character = source_character - ("'" | '\​' | line_terminator)
+ | '\​' , escape_sequence
+ | line_continuation
+
+line_continuation = '\​' , line_terminator_sequence
+
+escape_sequence = character_escape_sequence
+ | '0'
+ | hex_escape_sequence
+ | unicode_escape_sequence
+
+character_escape_sequence = single_escape_character
+ | non_escape_character
+
+single_escape_character = '"' | "'" | '\​' | 'b' | 'f' | 'n' | 'r' | 't' | 'v'
+
+non_escape_character = source_character - (escape_character | line_terminator)
+
+escape_character = single_escape_character
+ | decimal_digit
+ | 'x'
+ | 'u'
+
+hex_escape_sequence = 'x' , hex_digit , hex_digit
+
+unicode_escape_sequence = 'u' , hex_digit , hex_digit , hex_digit , hex_digit
+
+(* Array Literals *)
+
+array_literal = '[' , [white_space] , ']'
+ | '[' , [white_space] , element_list , ']'
+ | '[' , [white_space] , element_list , ',' , [white_space] , ']'
+
+element_list = expression , [white_space]
+ | element_list , ',' , [white_space] , expression , [white_space]
+
+(* Object Literals *)
+
+object_literal = '{' , [white_space] , '}'
+ | '{' , [white_space] , property_name_and_value_list , '}'
+ | '{' , [white_space] , property_name_and_value_list , ',' , '}'
+
+property_name_and_value_list = property_assignment , [white_space]
+ | property_name_and_value_list , [white_space] , ',' , [white_space] , property_assignment , [white_space]
+
+property_assignment = property_name , [white_space] , ':' , [white_space] , expression
+
+property_name = identifier_name
+ | string_literal
+ | numeric_literal
+
+identifier_name = identifier_start
+ | identifier_name , identifier_part
+
+identifier_start = unicode_letter
+ | '$'
+ | '_'
+ | '\​' , unicode_escape_sequence
+
+identifier_part = identifier_start
+ | unicode_combining_mark
+ | unicode_digit
+ | unicode_connector_punctuation
+ | <ZWNJ>
+ | <ZWJ>
+
+unicode_letter = ascii_letter
+ (* + any character in the Unicode categories "Uppercase letter (Lu)", "Lowercase letter (Ll)", "Titlecase letter (Lt)", "Modifier letter (Lm)", "Other letter (Lo)", or "Letter number (Nl)" *)
+
+unicode_combining_mark =
+ (* + any character in the Unicode categories "Non-spacing mark (Mn)" or "Combining spacing mark (Mc)" *)
+
+unicode_digit = decimal_digit
+ (* + any character in the Unicode category "Decimal number (Nd)" *)
+
+unicode_connector_punctuation =
+ (* + any character in the Unicode category "Connector punctuation (Pc)" *)
+
+
+```
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/JSON5.md b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/JSON5.md
new file mode 100644
index 0000000000..bbe18a3d8c
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/docs/JSON5.md
@@ -0,0 +1,50 @@
+## JSON5 syntax
+
+We support slighly modified version of JSON5, see https://groups.google.com/forum/#!topic/json5/3DjClVYI6Wg
+
+I started from ES5 specification and added a set of additional restrictions on top of ES5 spec. So I'd expect my implementation to be much closer to javascript. It's no longer an extension of json, but a reduction of ecmascript, which was my original intent.
+
+This JSON5 version is a subset of ES5 language, specification is here:
+
+http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+
+This is a language that defines data structures only, so following notes/restrictions are applied:
+
+- Literals (NullLiteral, BooleanLiteral, NumericLiteral, StringLiteral) are allowed.
+- Compatibility syntax is not supported, which means octal literals are forbidden.
+- ArrayLiterals and allowed, but instead of AssignmentExpressions you can only use other allowed Literals, ArrayLiterals and ObjectLiterals. Elisions are currently not supported.
+- ObjectLiterals and allowed, but instead of AssignmentExpressions you can only use other allowed Literals, ArrayLiterals and ObjectLiterals. Setters and getters are forbidden.
+- All other primary expressions ("this", Identifier, Expression) are forbidden.
+- Two unary expressions ('-' and '+') allowed before NumericLiterals.
+- Any data that has a number type can be represented, including +0, -0, +Infinity, -Infinity and NaN.
+- "undefined" is forbidden, use null instead if applicable.
+- Comments and whitespace are defined according to spec.
+
+Main authority here is ES5 spec, so strict backward JSON compatibility is not guaranteed.
+
+
+If you're unsure whether a behaviour of this library is a bug or not, you can run this test:
+
+```javascript
+JSON5.parse(String(something))
+```
+
+Should always be equal to:
+
+```javascript
+eval('(function(){return ('+String(something)+'\n)\n})()')
+```
+
+If `something` meets all rules above. Parens and newlines in the example above are carefully placed so comments and another newlines will work properly, so don't look so impressed about that.
+
+
+## Weirdness of JSON5
+
+These are the parts that I don't particulary like, but see no good way to fix:
+
+ - no elisions, `[,,,] -> [null,null,null]`
+ - `[Object], [Circular]` aren't parsed
+ - no way of nicely representing multiline strings
+ - unicode property names are way to hard to implement
+ - Date and other custom objects
+ - incompatible with YAML (at least comments)
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/index.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/index.js
new file mode 100644
index 0000000000..50f1624963
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/index.js
@@ -0,0 +1,32 @@
+
+module.exports.__defineGetter__('parse', function() {
+ return require('./lib/parse').parse
+})
+
+module.exports.__defineGetter__('stringify', function() {
+ return require('./lib/stringify').stringify
+})
+
+module.exports.__defineGetter__('tokenize', function() {
+ return require('./lib/parse').tokenize
+})
+
+module.exports.__defineGetter__('update', function() {
+ return require('./lib/document').update
+})
+
+module.exports.__defineGetter__('analyze', function() {
+ return require('./lib/analyze').analyze
+})
+
+module.exports.__defineGetter__('utils', function() {
+ return require('./lib/utils')
+})
+
+/**package
+{ "name": "jju",
+ "version": "0.0.0",
+ "dependencies": {"js-yaml": "*"},
+ "scripts": {"postinstall": "js-yaml package.yaml > package.json ; npm install"}
+}
+**/
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/analyze.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/analyze.js
new file mode 100644
index 0000000000..39303b0969
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/analyze.js
@@ -0,0 +1,91 @@
+/*
+ * Author: Alex Kocharin <alex@kocharin.ru>
+ * GIT: https://github.com/rlidwka/jju
+ * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/
+ */
+
+var tokenize = require('./parse').tokenize
+
+module.exports.analyze = function analyzeJSON(input, options) {
+ if (options == null) options = {}
+
+ if (!Array.isArray(input)) {
+ input = tokenize(input, options)
+ }
+
+ var result = {
+ has_whitespace: false,
+ has_comments: false,
+ has_newlines: false,
+ has_trailing_comma: false,
+ indent: '',
+ newline: '\n',
+ quote: '"',
+ quote_keys: true,
+ }
+
+ var stats = {
+ indent: {},
+ newline: {},
+ quote: {},
+ }
+
+ for (var i=0; i<input.length; i++) {
+ if (input[i].type === 'newline') {
+ if (input[i+1] && input[i+1].type === 'whitespace') {
+ if (input[i+1].raw[0] === '\t') {
+ // if first is tab, then indent is tab
+ stats.indent['\t'] = (stats.indent['\t'] || 0) + 1
+ }
+ if (input[i+1].raw.match(/^\x20+$/)) {
+ // if all are spaces, then indent is space
+ // this can fail with mixed indent (4, 2 would display 3)
+ var ws_len = input[i+1].raw.length
+ var indent_len = input[i+1].stack.length + 1
+ if (ws_len % indent_len === 0) {
+ var t = Array(ws_len / indent_len + 1).join(' ')
+ stats.indent[t] = (stats.indent[t] || 0) + 1
+ }
+ }
+ }
+
+ stats.newline[input[i].raw] = (stats.newline[input[i].raw] || 0) + 1
+ }
+
+ if (input[i].type === 'newline') {
+ result.has_newlines = true
+ }
+ if (input[i].type === 'whitespace') {
+ result.has_whitespace = true
+ }
+ if (input[i].type === 'comment') {
+ result.has_comments = true
+ }
+ if (input[i].type === 'key') {
+ if (input[i].raw[0] !== '"' && input[i].raw[0] !== "'") result.quote_keys = false
+ }
+
+ if (input[i].type === 'key' || input[i].type === 'literal') {
+ if (input[i].raw[0] === '"' || input[i].raw[0] === "'") {
+ stats.quote[input[i].raw[0]] = (stats.quote[input[i].raw[0]] || 0) + 1
+ }
+ }
+
+ if (input[i].type === 'separator' && input[i].raw === ',') {
+ for (var j=i+1; j<input.length; j++) {
+ if (input[j].type === 'literal' || input[j].type === 'key') break
+ if (input[j].type === 'separator') result.has_trailing_comma = true
+ }
+ }
+ }
+
+ for (var k in stats) {
+ if (Object.keys(stats[k]).length) {
+ result[k] = Object.keys(stats[k]).reduce(function(a, b) {
+ return stats[k][a] > stats[k][b] ? a : b
+ })
+ }
+ }
+
+ return result
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/document.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/document.js
new file mode 100644
index 0000000000..af1a01a03d
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/document.js
@@ -0,0 +1,484 @@
+/*
+ * Author: Alex Kocharin <alex@kocharin.ru>
+ * GIT: https://github.com/rlidwka/jju
+ * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/
+ */
+
+var assert = require('assert')
+var tokenize = require('./parse').tokenize
+var stringify = require('./stringify').stringify
+var analyze = require('./analyze').analyze
+
+function isObject(x) {
+ return typeof(x) === 'object' && x !== null
+}
+
+function value_to_tokenlist(value, stack, options, is_key, indent) {
+ options = Object.create(options)
+ options._stringify_key = !!is_key
+
+ if (indent) {
+ options._prefix = indent.prefix.map(function(x) {
+ return x.raw
+ }).join('')
+ }
+
+ if (options._splitMin == null) options._splitMin = 0
+ if (options._splitMax == null) options._splitMax = 0
+
+ var stringified = stringify(value, options)
+
+ if (is_key) {
+ return [ { raw: stringified, type: 'key', stack: stack, value: value } ]
+ }
+
+ options._addstack = stack
+ var result = tokenize(stringified, {
+ _addstack: stack,
+ })
+ result.data = null
+ return result
+}
+
+// '1.2.3' -> ['1','2','3']
+function arg_to_path(path) {
+ // array indexes
+ if (typeof(path) === 'number') path = String(path)
+
+ if (path === '') path = []
+ if (typeof(path) === 'string') path = path.split('.')
+
+ if (!Array.isArray(path)) throw Error('Invalid path type, string or array expected')
+ return path
+}
+
+// returns new [begin, end] or false if not found
+//
+// {x:3, xxx: 111, y: [111, {q: 1, e: 2} ,333] }
+// f('y',0) returns this B^^^^^^^^^^^^^^^^^^^^^^^^E
+// then f('1',1) would reduce it to B^^^^^^^^^^E
+function find_element_in_tokenlist(element, lvl, tokens, begin, end) {
+ while(tokens[begin].stack[lvl] != element) {
+ if (begin++ >= end) return false
+ }
+ while(tokens[end].stack[lvl] != element) {
+ if (end-- < begin) return false
+ }
+ return [begin, end]
+}
+
+function is_whitespace(token_type) {
+ return token_type === 'whitespace'
+ || token_type === 'newline'
+ || token_type === 'comment'
+}
+
+function find_first_non_ws_token(tokens, begin, end) {
+ while(is_whitespace(tokens[begin].type)) {
+ if (begin++ >= end) return false
+ }
+ return begin
+}
+
+function find_last_non_ws_token(tokens, begin, end) {
+ while(is_whitespace(tokens[end].type)) {
+ if (end-- < begin) return false
+ }
+ return end
+}
+
+/*
+ * when appending a new element of an object/array, we are trying to
+ * figure out the style used on the previous element
+ *
+ * return {prefix, sep1, sep2, suffix}
+ *
+ * ' "key" : "element" \r\n'
+ * prefix^^^^ sep1^ ^^sep2 ^^^^^^^^suffix
+ *
+ * begin - the beginning of the object/array
+ * end - last token of the last element (value or comma usually)
+ */
+function detect_indent_style(tokens, is_array, begin, end, level) {
+ var result = {
+ sep1: [],
+ sep2: [],
+ suffix: [],
+ prefix: [],
+ newline: [],
+ }
+
+ if (tokens[end].type === 'separator' && tokens[end].stack.length !== level+1 && tokens[end].raw !== ',') {
+ // either a beginning of the array (no last element) or other weird situation
+ //
+ // just return defaults
+ return result
+ }
+
+ // ' "key" : "value" ,'
+ // skipping last separator, we're now here ^^
+ if (tokens[end].type === 'separator')
+ end = find_last_non_ws_token(tokens, begin, end - 1)
+ if (end === false) return result
+
+ // ' "key" : "value" ,'
+ // skipping value ^^^^^^^
+ while(tokens[end].stack.length > level) end--
+
+ if (!is_array) {
+ while(is_whitespace(tokens[end].type)) {
+ if (end < begin) return result
+ if (tokens[end].type === 'whitespace') {
+ result.sep2.unshift(tokens[end])
+ } else {
+ // newline, comment or other unrecognized codestyle
+ return result
+ }
+ end--
+ }
+
+ // ' "key" : "value" ,'
+ // skipping separator ^
+ assert.equal(tokens[end].type, 'separator')
+ assert.equal(tokens[end].raw, ':')
+ while(is_whitespace(tokens[--end].type)) {
+ if (end < begin) return result
+ if (tokens[end].type === 'whitespace') {
+ result.sep1.unshift(tokens[end])
+ } else {
+ // newline, comment or other unrecognized codestyle
+ return result
+ }
+ }
+
+ assert.equal(tokens[end].type, 'key')
+ end--
+ }
+
+ // ' "key" : "value" ,'
+ // skipping key ^^^^^
+ while(is_whitespace(tokens[end].type)) {
+ if (end < begin) return result
+ if (tokens[end].type === 'whitespace') {
+ result.prefix.unshift(tokens[end])
+ } else if (tokens[end].type === 'newline') {
+ result.newline.unshift(tokens[end])
+ return result
+ } else {
+ // comment or other unrecognized codestyle
+ return result
+ }
+ end--
+ }
+
+ return result
+}
+
+function Document(text, options) {
+ var self = Object.create(Document.prototype)
+
+ if (options == null) options = {}
+ //options._structure = true
+ var tokens = self._tokens = tokenize(text, options)
+ self._data = tokens.data
+ tokens.data = null
+ self._options = options
+
+ var stats = analyze(text, options)
+ if (options.indent == null) {
+ options.indent = stats.indent
+ }
+ if (options.quote == null) {
+ options.quote = stats.quote
+ }
+ if (options.quote_keys == null) {
+ options.quote_keys = stats.quote_keys
+ }
+ if (options.no_trailing_comma == null) {
+ options.no_trailing_comma = !stats.has_trailing_comma
+ }
+ return self
+}
+
+// return true if it's a proper object
+// throw otherwise
+function check_if_can_be_placed(key, object, is_unset) {
+ //if (object == null) return false
+ function error(add) {
+ return Error("You can't " + (is_unset ? 'unset' : 'set') + " key '" + key + "'" + add)
+ }
+
+ if (!isObject(object)) {
+ throw error(' of an non-object')
+ }
+ if (Array.isArray(object)) {
+ // array, check boundary
+ if (String(key).match(/^\d+$/)) {
+ key = Number(String(key))
+ if (object.length < key || (is_unset && object.length === key)) {
+ throw error(', out of bounds')
+ } else if (is_unset && object.length !== key+1) {
+ throw error(' in the middle of an array')
+ } else {
+ return true
+ }
+ } else {
+ throw error(' of an array')
+ }
+ } else {
+ // object
+ return true
+ }
+}
+
+// usage: document.set('path.to.something', 'value')
+// or: document.set(['path','to','something'], 'value')
+Document.prototype.set = function(path, value) {
+ path = arg_to_path(path)
+
+ // updating this._data and check for errors
+ if (path.length === 0) {
+ if (value === undefined) throw Error("can't remove root document")
+ this._data = value
+ var new_key = false
+
+ } else {
+ var data = this._data
+
+ for (var i=0; i<path.length-1; i++) {
+ check_if_can_be_placed(path[i], data, false)
+ data = data[path[i]]
+ }
+ if (i === path.length-1) {
+ check_if_can_be_placed(path[i], data, value === undefined)
+ }
+
+ var new_key = !(path[i] in data)
+
+ if (value === undefined) {
+ if (Array.isArray(data)) {
+ data.pop()
+ } else {
+ delete data[path[i]]
+ }
+ } else {
+ data[path[i]] = value
+ }
+ }
+
+ // for inserting document
+ if (!this._tokens.length)
+ this._tokens = [ { raw: '', type: 'literal', stack: [], value: undefined } ]
+
+ var position = [
+ find_first_non_ws_token(this._tokens, 0, this._tokens.length - 1),
+ find_last_non_ws_token(this._tokens, 0, this._tokens.length - 1),
+ ]
+ for (var i=0; i<path.length-1; i++) {
+ position = find_element_in_tokenlist(path[i], i, this._tokens, position[0], position[1])
+ if (position == false) throw Error('internal error, please report this')
+ }
+ // assume that i == path.length-1 here
+
+ if (path.length === 0) {
+ var newtokens = value_to_tokenlist(value, path, this._options)
+ // all good
+
+ } else if (!new_key) {
+ // replace old value with a new one (or deleting something)
+ var pos_old = position
+ position = find_element_in_tokenlist(path[i], i, this._tokens, position[0], position[1])
+
+ if (value === undefined && position !== false) {
+ // deleting element (position !== false ensures there's something)
+ var newtokens = []
+
+ if (!Array.isArray(data)) {
+ // removing element from an object, `{x:1, key:CURRENT} -> {x:1}`
+ // removing sep, literal and optional sep
+ // ':'
+ var pos2 = find_last_non_ws_token(this._tokens, pos_old[0], position[0] - 1)
+ assert.equal(this._tokens[pos2].type, 'separator')
+ assert.equal(this._tokens[pos2].raw, ':')
+ position[0] = pos2
+
+ // key
+ var pos2 = find_last_non_ws_token(this._tokens, pos_old[0], position[0] - 1)
+ assert.equal(this._tokens[pos2].type, 'key')
+ assert.equal(this._tokens[pos2].value, path[path.length-1])
+ position[0] = pos2
+ }
+
+ // removing comma in arrays and objects
+ var pos2 = find_last_non_ws_token(this._tokens, pos_old[0], position[0] - 1)
+ assert.equal(this._tokens[pos2].type, 'separator')
+ if (this._tokens[pos2].raw === ',') {
+ position[0] = pos2
+ } else {
+ // beginning of the array/object, so we should remove trailing comma instead
+ pos2 = find_first_non_ws_token(this._tokens, position[1] + 1, pos_old[1])
+ assert.equal(this._tokens[pos2].type, 'separator')
+ if (this._tokens[pos2].raw === ',') {
+ position[1] = pos2
+ }
+ }
+
+ } else {
+ var indent = pos2 !== false
+ ? detect_indent_style(this._tokens, Array.isArray(data), pos_old[0], position[1] - 1, i)
+ : {}
+ var newtokens = value_to_tokenlist(value, path, this._options, false, indent)
+ }
+
+ } else {
+ // insert new key, that's tricky
+ var path_1 = path.slice(0, i)
+
+ // find a last separator after which we're inserting it
+ var pos2 = find_last_non_ws_token(this._tokens, position[0] + 1, position[1] - 1)
+ assert(pos2 !== false)
+
+ var indent = pos2 !== false
+ ? detect_indent_style(this._tokens, Array.isArray(data), position[0] + 1, pos2, i)
+ : {}
+
+ var newtokens = value_to_tokenlist(value, path, this._options, false, indent)
+
+ // adding leading whitespaces according to detected codestyle
+ var prefix = []
+ if (indent.newline && indent.newline.length)
+ prefix = prefix.concat(indent.newline)
+ if (indent.prefix && indent.prefix.length)
+ prefix = prefix.concat(indent.prefix)
+
+ // adding '"key":' (as in "key":"value") to object values
+ if (!Array.isArray(data)) {
+ prefix = prefix.concat(value_to_tokenlist(path[path.length-1], path_1, this._options, true))
+ if (indent.sep1 && indent.sep1.length)
+ prefix = prefix.concat(indent.sep1)
+ prefix.push({raw: ':', type: 'separator', stack: path_1})
+ if (indent.sep2 && indent.sep2.length)
+ prefix = prefix.concat(indent.sep2)
+ }
+
+ newtokens.unshift.apply(newtokens, prefix)
+
+ // check if prev token is a separator AND they're at the same level
+ if (this._tokens[pos2].type === 'separator' && this._tokens[pos2].stack.length === path.length-1) {
+ // previous token is either , or [ or {
+ if (this._tokens[pos2].raw === ',') {
+ // restore ending comma
+ newtokens.push({raw: ',', type: 'separator', stack: path_1})
+ }
+ } else {
+ // previous token isn't a separator, so need to insert one
+ newtokens.unshift({raw: ',', type: 'separator', stack: path_1})
+ }
+
+ if (indent.suffix && indent.suffix.length)
+ newtokens.push.apply(newtokens, indent.suffix)
+
+ assert.equal(this._tokens[position[1]].type, 'separator')
+ position[0] = pos2+1
+ position[1] = pos2
+ }
+
+ newtokens.unshift(position[1] - position[0] + 1)
+ newtokens.unshift(position[0])
+ this._tokens.splice.apply(this._tokens, newtokens)
+
+ return this
+}
+
+// convenience method
+Document.prototype.unset = function(path) {
+ return this.set(path, undefined)
+}
+
+Document.prototype.get = function(path) {
+ path = arg_to_path(path)
+
+ var data = this._data
+ for (var i=0; i<path.length; i++) {
+ if (!isObject(data)) return undefined
+ data = data[path[i]]
+ }
+ return data
+}
+
+Document.prototype.has = function(path) {
+ path = arg_to_path(path)
+
+ var data = this._data
+ for (var i=0; i<path.length; i++) {
+ if (!isObject(data)) return false
+ data = data[path[i]]
+ }
+ return data !== undefined
+}
+
+// compare old object and new one, and change differences only
+Document.prototype.update = function(value) {
+ var self = this
+ change([], self._data, value)
+ return self
+
+ function change(path, old_data, new_data) {
+ if (!isObject(new_data) || !isObject(old_data)) {
+ // if source or dest is primitive, just replace
+ if (new_data !== old_data)
+ self.set(path, new_data)
+
+ } else if (Array.isArray(new_data) != Array.isArray(old_data)) {
+ // old data is an array XOR new data is an array, replace as well
+ self.set(path, new_data)
+
+ } else if (Array.isArray(new_data)) {
+ // both values are arrays here
+
+ if (new_data.length > old_data.length) {
+ // adding new elements, so going forward
+ for (var i=0; i<new_data.length; i++) {
+ path.push(String(i))
+ change(path, old_data[i], new_data[i])
+ path.pop()
+ }
+
+ } else {
+ // removing something, so going backward
+ for (var i=old_data.length-1; i>=0; i--) {
+ path.push(String(i))
+ change(path, old_data[i], new_data[i])
+ path.pop()
+ }
+ }
+
+ } else {
+ // both values are objects here
+ for (var i in new_data) {
+ path.push(String(i))
+ change(path, old_data[i], new_data[i])
+ path.pop()
+ }
+
+ for (var i in old_data) {
+ if (i in new_data) continue
+ path.push(String(i))
+ change(path, old_data[i], new_data[i])
+ path.pop()
+ }
+ }
+ }
+}
+
+Document.prototype.toString = function() {
+ return this._tokens.map(function(x) {
+ return x.raw
+ }).join('')
+}
+
+module.exports.Document = Document
+
+module.exports.update = function updateJSON(source, new_value, options) {
+ return Document(source, options).update(new_value).toString()
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/parse.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/parse.js
new file mode 100644
index 0000000000..2b78949378
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/parse.js
@@ -0,0 +1,751 @@
+/*
+ * Author: Alex Kocharin <alex@kocharin.ru>
+ * GIT: https://github.com/rlidwka/jju
+ * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/
+ */
+
+// RTFM: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+
+var Uni = require('./unicode')
+
+function isHexDigit(x) {
+ return (x >= '0' && x <= '9')
+ || (x >= 'A' && x <= 'F')
+ || (x >= 'a' && x <= 'f')
+}
+
+function isOctDigit(x) {
+ return x >= '0' && x <= '7'
+}
+
+function isDecDigit(x) {
+ return x >= '0' && x <= '9'
+}
+
+var unescapeMap = {
+ '\'': '\'',
+ '"' : '"',
+ '\\': '\\',
+ 'b' : '\b',
+ 'f' : '\f',
+ 'n' : '\n',
+ 'r' : '\r',
+ 't' : '\t',
+ 'v' : '\v',
+ '/' : '/',
+}
+
+function formatError(input, msg, position, lineno, column, json5) {
+ var result = msg + ' at ' + (lineno + 1) + ':' + (column + 1)
+ , tmppos = position - column - 1
+ , srcline = ''
+ , underline = ''
+
+ var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON
+
+ // output no more than 70 characters before the wrong ones
+ if (tmppos < position - 70) {
+ tmppos = position - 70
+ }
+
+ while (1) {
+ var chr = input[++tmppos]
+
+ if (isLineTerminator(chr) || tmppos === input.length) {
+ if (position >= tmppos) {
+ // ending line error, so show it after the last char
+ underline += '^'
+ }
+ break
+ }
+ srcline += chr
+
+ if (position === tmppos) {
+ underline += '^'
+ } else if (position > tmppos) {
+ underline += input[tmppos] === '\t' ? '\t' : ' '
+ }
+
+ // output no more than 78 characters on the string
+ if (srcline.length > 78) break
+ }
+
+ return result + '\n' + srcline + '\n' + underline
+}
+
+function parse(input, options) {
+ // parse as a standard JSON mode
+ var json5 = !(options.mode === 'json' || options.legacy)
+ var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON
+ var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON
+
+ var length = input.length
+ , lineno = 0
+ , linestart = 0
+ , position = 0
+ , stack = []
+
+ var tokenStart = function() {}
+ var tokenEnd = function(v) {return v}
+
+ /* tokenize({
+ raw: '...',
+ type: 'whitespace'|'comment'|'key'|'literal'|'separator'|'newline',
+ value: 'number'|'string'|'whatever',
+ path: [...],
+ })
+ */
+ if (options._tokenize) {
+ ;(function() {
+ var start = null
+ tokenStart = function() {
+ if (start !== null) throw Error('internal error, token overlap')
+ start = position
+ }
+
+ tokenEnd = function(v, type) {
+ if (start != position) {
+ var hash = {
+ raw: input.substr(start, position-start),
+ type: type,
+ stack: stack.slice(0),
+ }
+ if (v !== undefined) hash.value = v
+ options._tokenize.call(null, hash)
+ }
+ start = null
+ return v
+ }
+ })()
+ }
+
+ function fail(msg) {
+ var column = position - linestart
+
+ if (!msg) {
+ if (position < length) {
+ var token = '\'' +
+ JSON
+ .stringify(input[position])
+ .replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ + '\''
+
+ if (!msg) msg = 'Unexpected token ' + token
+ } else {
+ if (!msg) msg = 'Unexpected end of input'
+ }
+ }
+
+ var error = SyntaxError(formatError(input, msg, position, lineno, column, json5))
+ error.row = lineno + 1
+ error.column = column + 1
+ throw error
+ }
+
+ function newline(chr) {
+ // account for <cr><lf>
+ if (chr === '\r' && input[position] === '\n') position++
+ linestart = position
+ lineno++
+ }
+
+ function parseGeneric() {
+ var result
+
+ while (position < length) {
+ tokenStart()
+ var chr = input[position++]
+
+ if (chr === '"' || (chr === '\'' && json5)) {
+ return tokenEnd(parseString(chr), 'literal')
+
+ } else if (chr === '{') {
+ tokenEnd(undefined, 'separator')
+ return parseObject()
+
+ } else if (chr === '[') {
+ tokenEnd(undefined, 'separator')
+ return parseArray()
+
+ } else if (chr === '-'
+ || chr === '.'
+ || isDecDigit(chr)
+ // + number Infinity NaN
+ || (json5 && (chr === '+' || chr === 'I' || chr === 'N'))
+ ) {
+ return tokenEnd(parseNumber(), 'literal')
+
+ } else if (chr === 'n') {
+ parseKeyword('null')
+ return tokenEnd(null, 'literal')
+
+ } else if (chr === 't') {
+ parseKeyword('true')
+ return tokenEnd(true, 'literal')
+
+ } else if (chr === 'f') {
+ parseKeyword('false')
+ return tokenEnd(false, 'literal')
+
+ } else {
+ position--
+ return tokenEnd(undefined)
+ }
+ }
+ }
+
+ function parseKey() {
+ var result
+
+ while (position < length) {
+ tokenStart()
+ var chr = input[position++]
+
+ if (chr === '"' || (chr === '\'' && json5)) {
+ return tokenEnd(parseString(chr), 'key')
+
+ } else if (chr === '{') {
+ tokenEnd(undefined, 'separator')
+ return parseObject()
+
+ } else if (chr === '[') {
+ tokenEnd(undefined, 'separator')
+ return parseArray()
+
+ } else if (chr === '.'
+ || isDecDigit(chr)
+ ) {
+ return tokenEnd(parseNumber(true), 'key')
+
+ } else if (json5
+ && Uni.isIdentifierStart(chr) || (chr === '\\' && input[position] === 'u')) {
+ // unicode char or a unicode sequence
+ var rollback = position - 1
+ var result = parseIdentifier()
+
+ if (result === undefined) {
+ position = rollback
+ return tokenEnd(undefined)
+ } else {
+ return tokenEnd(result, 'key')
+ }
+
+ } else {
+ position--
+ return tokenEnd(undefined)
+ }
+ }
+ }
+
+ function skipWhiteSpace() {
+ tokenStart()
+ while (position < length) {
+ var chr = input[position++]
+
+ if (isLineTerminator(chr)) {
+ position--
+ tokenEnd(undefined, 'whitespace')
+ tokenStart()
+ position++
+ newline(chr)
+ tokenEnd(undefined, 'newline')
+ tokenStart()
+
+ } else if (isWhiteSpace(chr)) {
+ // nothing
+
+ } else if (chr === '/'
+ && json5
+ && (input[position] === '/' || input[position] === '*')
+ ) {
+ position--
+ tokenEnd(undefined, 'whitespace')
+ tokenStart()
+ position++
+ skipComment(input[position++] === '*')
+ tokenEnd(undefined, 'comment')
+ tokenStart()
+
+ } else {
+ position--
+ break
+ }
+ }
+ return tokenEnd(undefined, 'whitespace')
+ }
+
+ function skipComment(multi) {
+ while (position < length) {
+ var chr = input[position++]
+
+ if (isLineTerminator(chr)) {
+ // LineTerminator is an end of singleline comment
+ if (!multi) {
+ // let parent function deal with newline
+ position--
+ return
+ }
+
+ newline(chr)
+
+ } else if (chr === '*' && multi) {
+ // end of multiline comment
+ if (input[position] === '/') {
+ position++
+ return
+ }
+
+ } else {
+ // nothing
+ }
+ }
+
+ if (multi) {
+ fail('Unclosed multiline comment')
+ }
+ }
+
+ function parseKeyword(keyword) {
+ // keyword[0] is not checked because it should've checked earlier
+ var _pos = position
+ var len = keyword.length
+ for (var i=1; i<len; i++) {
+ if (position >= length || keyword[i] != input[position]) {
+ position = _pos-1
+ fail()
+ }
+ position++
+ }
+ }
+
+ function parseObject() {
+ var result = options.null_prototype ? Object.create(null) : {}
+ , empty_object = {}
+ , is_non_empty = false
+
+ while (position < length) {
+ skipWhiteSpace()
+ var item1 = parseKey()
+ skipWhiteSpace()
+ tokenStart()
+ var chr = input[position++]
+ tokenEnd(undefined, 'separator')
+
+ if (chr === '}' && item1 === undefined) {
+ if (!json5 && is_non_empty) {
+ position--
+ fail('Trailing comma in object')
+ }
+ return result
+
+ } else if (chr === ':' && item1 !== undefined) {
+ skipWhiteSpace()
+ stack.push(item1)
+ var item2 = parseGeneric()
+ stack.pop()
+
+ if (item2 === undefined) fail('No value found for key ' + item1)
+ if (typeof(item1) !== 'string') {
+ if (!json5 || typeof(item1) !== 'number') {
+ fail('Wrong key type: ' + item1)
+ }
+ }
+
+ if ((item1 in empty_object || empty_object[item1] != null) && options.reserved_keys !== 'replace') {
+ if (options.reserved_keys === 'throw') {
+ fail('Reserved key: ' + item1)
+ } else {
+ // silently ignore it
+ }
+ } else {
+ if (typeof(options.reviver) === 'function') {
+ item2 = options.reviver.call(null, item1, item2)
+ }
+
+ if (item2 !== undefined) {
+ is_non_empty = true
+ Object.defineProperty(result, item1, {
+ value: item2,
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ })
+ }
+ }
+
+ skipWhiteSpace()
+
+ tokenStart()
+ var chr = input[position++]
+ tokenEnd(undefined, 'separator')
+
+ if (chr === ',') {
+ continue
+
+ } else if (chr === '}') {
+ return result
+
+ } else {
+ fail()
+ }
+
+ } else {
+ position--
+ fail()
+ }
+ }
+
+ fail()
+ }
+
+ function parseArray() {
+ var result = []
+
+ while (position < length) {
+ skipWhiteSpace()
+ stack.push(result.length)
+ var item = parseGeneric()
+ stack.pop()
+ skipWhiteSpace()
+ tokenStart()
+ var chr = input[position++]
+ tokenEnd(undefined, 'separator')
+
+ if (item !== undefined) {
+ if (typeof(options.reviver) === 'function') {
+ item = options.reviver.call(null, String(result.length), item)
+ }
+ if (item === undefined) {
+ result.length++
+ item = true // hack for check below, not included into result
+ } else {
+ result.push(item)
+ }
+ }
+
+ if (chr === ',') {
+ if (item === undefined) {
+ fail('Elisions are not supported')
+ }
+
+ } else if (chr === ']') {
+ if (!json5 && item === undefined && result.length) {
+ position--
+ fail('Trailing comma in array')
+ }
+ return result
+
+ } else {
+ position--
+ fail()
+ }
+ }
+ }
+
+ function parseNumber() {
+ // rewind because we don't know first char
+ position--
+
+ var start = position
+ , chr = input[position++]
+ , t
+
+ var to_num = function(is_octal) {
+ var str = input.substr(start, position - start)
+
+ if (is_octal) {
+ var result = parseInt(str.replace(/^0o?/, ''), 8)
+ } else {
+ var result = Number(str)
+ }
+
+ if (Number.isNaN(result)) {
+ position--
+ fail('Bad numeric literal - "' + input.substr(start, position - start + 1) + '"')
+ } else if (!json5 && !str.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) {
+ // additional restrictions imposed by json
+ position--
+ fail('Non-json numeric literal - "' + input.substr(start, position - start + 1) + '"')
+ } else {
+ return result
+ }
+ }
+
+ // ex: -5982475.249875e+29384
+ // ^ skipping this
+ if (chr === '-' || (chr === '+' && json5)) chr = input[position++]
+
+ if (chr === 'N' && json5) {
+ parseKeyword('NaN')
+ return NaN
+ }
+
+ if (chr === 'I' && json5) {
+ parseKeyword('Infinity')
+
+ // returning +inf or -inf
+ return to_num()
+ }
+
+ if (chr >= '1' && chr <= '9') {
+ // ex: -5982475.249875e+29384
+ // ^^^ skipping these
+ while (position < length && isDecDigit(input[position])) position++
+ chr = input[position++]
+ }
+
+ // special case for leading zero: 0.123456
+ if (chr === '0') {
+ chr = input[position++]
+
+ // new syntax, "0o777" old syntax, "0777"
+ var is_octal = chr === 'o' || chr === 'O' || isOctDigit(chr)
+ var is_hex = chr === 'x' || chr === 'X'
+
+ if (json5 && (is_octal || is_hex)) {
+ while (position < length
+ && (is_hex ? isHexDigit : isOctDigit)( input[position] )
+ ) position++
+
+ var sign = 1
+ if (input[start] === '-') {
+ sign = -1
+ start++
+ } else if (input[start] === '+') {
+ start++
+ }
+
+ return sign * to_num(is_octal)
+ }
+ }
+
+ if (chr === '.') {
+ // ex: -5982475.249875e+29384
+ // ^^^ skipping these
+ while (position < length && isDecDigit(input[position])) position++
+ chr = input[position++]
+ }
+
+ if (chr === 'e' || chr === 'E') {
+ chr = input[position++]
+ if (chr === '-' || chr === '+') position++
+ // ex: -5982475.249875e+29384
+ // ^^^ skipping these
+ while (position < length && isDecDigit(input[position])) position++
+ chr = input[position++]
+ }
+
+ // we have char in the buffer, so count for it
+ position--
+ return to_num()
+ }
+
+ function parseIdentifier() {
+ // rewind because we don't know first char
+ position--
+
+ var result = ''
+
+ while (position < length) {
+ var chr = input[position++]
+
+ if (chr === '\\'
+ && input[position] === 'u'
+ && isHexDigit(input[position+1])
+ && isHexDigit(input[position+2])
+ && isHexDigit(input[position+3])
+ && isHexDigit(input[position+4])
+ ) {
+ // UnicodeEscapeSequence
+ chr = String.fromCharCode(parseInt(input.substr(position+1, 4), 16))
+ position += 5
+ }
+
+ if (result.length) {
+ // identifier started
+ if (Uni.isIdentifierPart(chr)) {
+ result += chr
+ } else {
+ position--
+ return result
+ }
+
+ } else {
+ if (Uni.isIdentifierStart(chr)) {
+ result += chr
+ } else {
+ return undefined
+ }
+ }
+ }
+
+ fail()
+ }
+
+ function parseString(endChar) {
+ // 7.8.4 of ES262 spec
+ var result = ''
+
+ while (position < length) {
+ var chr = input[position++]
+
+ if (chr === endChar) {
+ return result
+
+ } else if (chr === '\\') {
+ if (position >= length) fail()
+ chr = input[position++]
+
+ if (unescapeMap[chr] && (json5 || (chr != 'v' && chr != "'"))) {
+ result += unescapeMap[chr]
+
+ } else if (json5 && isLineTerminator(chr)) {
+ // line continuation
+ newline(chr)
+
+ } else if (chr === 'u' || (chr === 'x' && json5)) {
+ // unicode/character escape sequence
+ var off = chr === 'u' ? 4 : 2
+
+ // validation for \uXXXX
+ for (var i=0; i<off; i++) {
+ if (position >= length) fail()
+ if (!isHexDigit(input[position])) fail('Bad escape sequence')
+ position++
+ }
+
+ result += String.fromCharCode(parseInt(input.substr(position-off, off), 16))
+ } else if (json5 && isOctDigit(chr)) {
+ if (chr < '4' && isOctDigit(input[position]) && isOctDigit(input[position+1])) {
+ // three-digit octal
+ var digits = 3
+ } else if (isOctDigit(input[position])) {
+ // two-digit octal
+ var digits = 2
+ } else {
+ var digits = 1
+ }
+ position += digits - 1
+ result += String.fromCharCode(parseInt(input.substr(position-digits, digits), 8))
+ /*if (!isOctDigit(input[position])) {
+ // \0 is allowed still
+ result += '\0'
+ } else {
+ fail('Octal literals are not supported')
+ }*/
+
+ } else if (json5) {
+ // \X -> x
+ result += chr
+
+ } else {
+ position--
+ fail()
+ }
+
+ } else if (isLineTerminator(chr)) {
+ fail()
+
+ } else {
+ if (!json5 && chr.charCodeAt(0) < 32) {
+ position--
+ fail('Unexpected control character')
+ }
+
+ // SourceCharacter but not one of " or \ or LineTerminator
+ result += chr
+ }
+ }
+
+ fail()
+ }
+
+ skipWhiteSpace()
+ var return_value = parseGeneric()
+ if (return_value !== undefined || position < length) {
+ skipWhiteSpace()
+
+ if (position >= length) {
+ if (typeof(options.reviver) === 'function') {
+ return_value = options.reviver.call(null, '', return_value)
+ }
+ return return_value
+ } else {
+ fail()
+ }
+
+ } else {
+ if (position) {
+ fail('No data, only a whitespace')
+ } else {
+ fail('No data, empty input')
+ }
+ }
+}
+
+/*
+ * parse(text, options)
+ * or
+ * parse(text, reviver)
+ *
+ * where:
+ * text - string
+ * options - object
+ * reviver - function
+ */
+module.exports.parse = function parseJSON(input, options) {
+ // support legacy functions
+ if (typeof(options) === 'function') {
+ options = {
+ reviver: options
+ }
+ }
+
+ if (input === undefined) {
+ // parse(stringify(x)) should be equal x
+ // with JSON functions it is not 'cause of undefined
+ // so we're fixing it
+ return undefined
+ }
+
+ // JSON.parse compat
+ if (typeof(input) !== 'string') input = String(input)
+ if (options == null) options = {}
+ if (options.reserved_keys == null) options.reserved_keys = 'ignore'
+
+ if (options.reserved_keys === 'throw' || options.reserved_keys === 'ignore') {
+ if (options.null_prototype == null) {
+ options.null_prototype = true
+ }
+ }
+
+ try {
+ return parse(input, options)
+ } catch(err) {
+ // jju is a recursive parser, so JSON.parse("{{{{{{{") could blow up the stack
+ //
+ // this catch is used to skip all those internal calls
+ if (err instanceof SyntaxError && err.row != null && err.column != null) {
+ var old_err = err
+ err = SyntaxError(old_err.message)
+ err.column = old_err.column
+ err.row = old_err.row
+ }
+ throw err
+ }
+}
+
+module.exports.tokenize = function tokenizeJSON(input, options) {
+ if (options == null) options = {}
+
+ options._tokenize = function(smth) {
+ if (options._addstack) smth.stack.unshift.apply(smth.stack, options._addstack)
+ tokens.push(smth)
+ }
+
+ var tokens = []
+ tokens.data = module.exports.parse(input, options)
+ return tokens
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/stringify.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/stringify.js
new file mode 100644
index 0000000000..754019eac5
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/stringify.js
@@ -0,0 +1,382 @@
+/*
+ * Author: Alex Kocharin <alex@kocharin.ru>
+ * GIT: https://github.com/rlidwka/jju
+ * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/
+ */
+
+var Uni = require('./unicode')
+
+// Fix Function#name on browsers that do not support it (IE)
+// http://stackoverflow.com/questions/6903762/function-name-not-supported-in-ie
+if (!(function f(){}).name) {
+ Object.defineProperty((function(){}).constructor.prototype, 'name', {
+ get: function() {
+ var name = this.toString().match(/^\s*function\s*(\S*)\s*\(/)[1]
+ // For better performance only parse once, and then cache the
+ // result through a new accessor for repeated access.
+ Object.defineProperty(this, 'name', { value: name })
+ return name
+ }
+ })
+}
+
+var special_chars = {
+ 0: '\\0', // this is not an octal literal
+ 8: '\\b',
+ 9: '\\t',
+ 10: '\\n',
+ 11: '\\v',
+ 12: '\\f',
+ 13: '\\r',
+ 92: '\\\\',
+}
+
+// for oddballs
+var hasOwnProperty = Object.prototype.hasOwnProperty
+
+// some people escape those, so I'd copy this to be safe
+var escapable = /[\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/
+
+function _stringify(object, options, recursiveLvl, currentKey) {
+ var opt_json = options.mode === 'json'
+ /*
+ * Opinionated decision warning:
+ *
+ * Objects are serialized in the following form:
+ * { type: 'Class', data: DATA }
+ *
+ * Class is supposed to be a function, and new Class(DATA) is
+ * supposed to be equivalent to the original value
+ */
+ /*function custom_type() {
+ return stringify({
+ type: object.constructor.name,
+ data: object.toString()
+ })
+ }*/
+
+ // if add, it's an internal indentation, so we add 1 level and a eol
+ // if !add, it's an ending indentation, so we just indent
+ function indent(str, add) {
+ var prefix = options._prefix ? options._prefix : ''
+ if (!options.indent) return prefix + str
+ var result = ''
+ var count = recursiveLvl + (add || 0)
+ for (var i=0; i<count; i++) result += options.indent
+ return prefix + result + str + (add ? '\n' : '')
+ }
+
+ function _stringify_key(key) {
+ if (options.quote_keys) return _stringify_str(key)
+ if (String(Number(key)) == key && key[0] != '-') return key
+ if (key == '') return _stringify_str(key)
+
+ var result = ''
+ for (var i=0; i<key.length; i++) {
+ if (i > 0) {
+ if (!Uni.isIdentifierPart(key[i]))
+ return _stringify_str(key)
+
+ } else {
+ if (!Uni.isIdentifierStart(key[i]))
+ return _stringify_str(key)
+ }
+
+ var chr = key.charCodeAt(i)
+
+ if (options.ascii) {
+ if (chr < 0x80) {
+ result += key[i]
+
+ } else {
+ result += '\\u' + ('0000' + chr.toString(16)).slice(-4)
+ }
+
+ } else {
+ if (escapable.exec(key[i])) {
+ result += '\\u' + ('0000' + chr.toString(16)).slice(-4)
+
+ } else {
+ result += key[i]
+ }
+ }
+ }
+
+ return result
+ }
+
+ function _stringify_str(key) {
+ var quote = options.quote
+ var quoteChr = quote.charCodeAt(0)
+
+ var result = ''
+ for (var i=0; i<key.length; i++) {
+ var chr = key.charCodeAt(i)
+
+ if (chr < 0x10) {
+ if (chr === 0 && !opt_json) {
+ result += '\\0'
+ } else if (chr >= 8 && chr <= 13 && (!opt_json || chr !== 11)) {
+ result += special_chars[chr]
+ } else if (!opt_json) {
+ result += '\\x0' + chr.toString(16)
+ } else {
+ result += '\\u000' + chr.toString(16)
+ }
+
+ } else if (chr < 0x20) {
+ if (!opt_json) {
+ result += '\\x' + chr.toString(16)
+ } else {
+ result += '\\u00' + chr.toString(16)
+ }
+
+ } else if (chr >= 0x20 && chr < 0x80) {
+ // ascii range
+ if (chr === 47 && i && key[i-1] === '<') {
+ // escaping slashes in </script>
+ result += '\\' + key[i]
+
+ } else if (chr === 92) {
+ result += '\\\\'
+
+ } else if (chr === quoteChr) {
+ result += '\\' + quote
+
+ } else {
+ result += key[i]
+ }
+
+ } else if (options.ascii || Uni.isLineTerminator(key[i]) || escapable.exec(key[i])) {
+ if (chr < 0x100) {
+ if (!opt_json) {
+ result += '\\x' + chr.toString(16)
+ } else {
+ result += '\\u00' + chr.toString(16)
+ }
+
+ } else if (chr < 0x1000) {
+ result += '\\u0' + chr.toString(16)
+
+ } else if (chr < 0x10000) {
+ result += '\\u' + chr.toString(16)
+
+ } else {
+ throw Error('weird codepoint')
+ }
+ } else {
+ result += key[i]
+ }
+ }
+ return quote + result + quote
+ }
+
+ function _stringify_object() {
+ if (object === null) return 'null'
+ var result = []
+ , len = 0
+ , braces
+
+ if (Array.isArray(object)) {
+ braces = '[]'
+ for (var i=0; i<object.length; i++) {
+ var s = _stringify(object[i], options, recursiveLvl+1, String(i))
+ if (s === undefined) s = 'null'
+ len += s.length + 2
+ result.push(s + ',')
+ }
+
+ } else {
+ braces = '{}'
+ var fn = function(key) {
+ var t = _stringify(object[key], options, recursiveLvl+1, key)
+ if (t !== undefined) {
+ t = _stringify_key(key) + ':' + (options.indent ? ' ' : '') + t + ','
+ len += t.length + 1
+ result.push(t)
+ }
+ }
+
+ if (Array.isArray(options.replacer)) {
+ for (var i=0; i<options.replacer.length; i++)
+ if (hasOwnProperty.call(object, options.replacer[i]))
+ fn(options.replacer[i])
+ } else {
+ var keys = Object.keys(object)
+ if (options.sort_keys)
+ keys = keys.sort(typeof(options.sort_keys) === 'function'
+ ? options.sort_keys : undefined)
+ keys.forEach(fn)
+ }
+ }
+
+ // objects shorter than 30 characters are always inlined
+ // objects longer than 60 characters are always splitted to multiple lines
+ // anything in the middle depends on indentation level
+ len -= 2
+ if (options.indent && (len > options._splitMax - recursiveLvl * options.indent.length || len > options._splitMin) ) {
+ // remove trailing comma in multiline if asked to
+ if (options.no_trailing_comma && result.length) {
+ result[result.length-1] = result[result.length-1].substring(0, result[result.length-1].length-1)
+ }
+
+ var innerStuff = result.map(function(x) {return indent(x, 1)}).join('')
+ return braces[0]
+ + (options.indent ? '\n' : '')
+ + innerStuff
+ + indent(braces[1])
+ } else {
+ // always remove trailing comma in one-lined arrays
+ if (result.length) {
+ result[result.length-1] = result[result.length-1].substring(0, result[result.length-1].length-1)
+ }
+
+ var innerStuff = result.join(options.indent ? ' ' : '')
+ return braces[0]
+ + innerStuff
+ + braces[1]
+ }
+ }
+
+ function _stringify_nonobject(object) {
+ if (typeof(options.replacer) === 'function') {
+ object = options.replacer.call(null, currentKey, object)
+ }
+
+ switch(typeof(object)) {
+ case 'string':
+ return _stringify_str(object)
+
+ case 'number':
+ if (object === 0 && 1/object < 0) {
+ // Opinionated decision warning:
+ //
+ // I want cross-platform negative zero in all js engines
+ // I know they're equal, but why lose that tiny bit of
+ // information needlessly?
+ return '-0'
+ }
+ if (options.mode === 'json' && !Number.isFinite(object)) {
+ // json don't support infinity (= sucks)
+ return 'null'
+ }
+ return object.toString()
+
+ case 'boolean':
+ return object.toString()
+
+ case 'undefined':
+ return undefined
+
+ case 'function':
+// return custom_type()
+
+ default:
+ // fallback for something weird
+ return JSON.stringify(object)
+ }
+ }
+
+ if (options._stringify_key) {
+ return _stringify_key(object)
+ }
+
+ if (typeof(object) === 'object') {
+ if (object === null) return 'null'
+
+ var str
+ if (typeof(str = object.toJSON5) === 'function' && options.mode !== 'json') {
+ object = str.call(object, currentKey)
+
+ } else if (typeof(str = object.toJSON) === 'function') {
+ object = str.call(object, currentKey)
+ }
+
+ if (object === null) return 'null'
+ if (typeof(object) !== 'object') return _stringify_nonobject(object)
+
+ if (object.constructor === Number || object.constructor === Boolean || object.constructor === String) {
+ object = object.valueOf()
+ return _stringify_nonobject(object)
+
+ } else if (object.constructor === Date) {
+ // only until we can't do better
+ return _stringify_nonobject(object.toISOString())
+
+ } else {
+ if (typeof(options.replacer) === 'function') {
+ object = options.replacer.call(null, currentKey, object)
+ if (typeof(object) !== 'object') return _stringify_nonobject(object)
+ }
+
+ return _stringify_object(object)
+ }
+ } else {
+ return _stringify_nonobject(object)
+ }
+}
+
+/*
+ * stringify(value, options)
+ * or
+ * stringify(value, replacer, space)
+ *
+ * where:
+ * value - anything
+ * options - object
+ * replacer - function or array
+ * space - boolean or number or string
+ */
+module.exports.stringify = function stringifyJSON(object, options, _space) {
+ // support legacy syntax
+ if (typeof(options) === 'function' || Array.isArray(options)) {
+ options = {
+ replacer: options
+ }
+ } else if (typeof(options) === 'object' && options !== null) {
+ // nothing to do
+ } else {
+ options = {}
+ }
+ if (_space != null) options.indent = _space
+
+ if (options.indent == null) options.indent = '\t'
+ if (options.quote == null) options.quote = "'"
+ if (options.ascii == null) options.ascii = false
+ if (options.mode == null) options.mode = 'simple'
+
+ if (options.mode === 'json') {
+ // json only supports double quotes (= sucks)
+ options.quote = '"'
+
+ // json don't support trailing commas (= sucks)
+ options.no_trailing_comma = true
+
+ // json don't support unquoted property names (= sucks)
+ options.quote_keys = true
+ }
+
+ // why would anyone use such objects?
+ if (typeof(options.indent) === 'object') {
+ if (options.indent.constructor === Number
+ || options.indent.constructor === Boolean
+ || options.indent.constructor === String)
+ options.indent = options.indent.valueOf()
+ }
+
+ // gap is capped at 10 characters
+ if (typeof(options.indent) === 'number') {
+ if (options.indent >= 0) {
+ options.indent = Array(Math.min(~~options.indent, 10) + 1).join(' ')
+ } else {
+ options.indent = false
+ }
+ } else if (typeof(options.indent) === 'string') {
+ options.indent = options.indent.substr(0, 10)
+ }
+
+ if (options._splitMin == null) options._splitMin = 50
+ if (options._splitMax == null) options._splitMax = 70
+
+ return _stringify(object, options, 0, '')
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js
new file mode 100644
index 0000000000..1a29143c2d
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/unicode.js
@@ -0,0 +1,71 @@
+
+// This is autogenerated with esprima tools, see:
+// https://github.com/ariya/esprima/blob/master/esprima.js
+//
+// PS: oh God, I hate Unicode
+
+// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart:
+
+var Uni = module.exports
+
+module.exports.isWhiteSpace = function isWhiteSpace(x) {
+ // section 7.2, table 2
+ return x === '\u0020'
+ || x === '\u00A0'
+ || x === '\uFEFF' // <-- this is not a Unicode WS, only a JS one
+ || (x >= '\u0009' && x <= '\u000D') // 9 A B C D
+
+ // + whitespace characters from unicode, category Zs
+ || x === '\u1680'
+ || x === '\u180E'
+ || (x >= '\u2000' && x <= '\u200A') // 0 1 2 3 4 5 6 7 8 9 A
+ || x === '\u2028'
+ || x === '\u2029'
+ || x === '\u202F'
+ || x === '\u205F'
+ || x === '\u3000'
+}
+
+module.exports.isWhiteSpaceJSON = function isWhiteSpaceJSON(x) {
+ return x === '\u0020'
+ || x === '\u0009'
+ || x === '\u000A'
+ || x === '\u000D'
+}
+
+module.exports.isLineTerminator = function isLineTerminator(x) {
+ // ok, here is the part when JSON is wrong
+ // section 7.3, table 3
+ return x === '\u000A'
+ || x === '\u000D'
+ || x === '\u2028'
+ || x === '\u2029'
+}
+
+module.exports.isLineTerminatorJSON = function isLineTerminatorJSON(x) {
+ return x === '\u000A'
+ || x === '\u000D'
+}
+
+module.exports.isIdentifierStart = function isIdentifierStart(x) {
+ return x === '$'
+ || x === '_'
+ || (x >= 'A' && x <= 'Z')
+ || (x >= 'a' && x <= 'z')
+ || (x >= '\u0080' && Uni.NonAsciiIdentifierStart.test(x))
+}
+
+module.exports.isIdentifierPart = function isIdentifierPart(x) {
+ return x === '$'
+ || x === '_'
+ || (x >= 'A' && x <= 'Z')
+ || (x >= 'a' && x <= 'z')
+ || (x >= '0' && x <= '9') // <-- addition to Start
+ || (x >= '\u0080' && Uni.NonAsciiIdentifierPart.test(x))
+}
+
+module.exports.NonAsciiIdentifierStart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/
+
+// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart:
+
+module.exports.NonAsciiIdentifierPart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js
new file mode 100644
index 0000000000..dd4752c73a
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/lib/utils.js
@@ -0,0 +1,45 @@
+var FS = require('fs')
+var jju = require('../')
+
+// this function registers json5 extension, so you
+// can do `require("./config.json5")` kind of thing
+module.exports.register = function() {
+ var r = require, e = 'extensions'
+ r[e]['.json5'] = function(m, f) {
+ /*eslint no-sync:0*/
+ m.exports = jju.parse(FS.readFileSync(f, 'utf8'))
+ }
+}
+
+// this function monkey-patches JSON.parse, so it
+// will return an exact position of error in case
+// of parse failure
+module.exports.patch_JSON_parse = function() {
+ var _parse = JSON.parse
+ JSON.parse = function(text, rev) {
+ try {
+ return _parse(text, rev)
+ } catch(err) {
+ // this call should always throw
+ require('jju').parse(text, {
+ mode: 'json',
+ legacy: true,
+ reviver: rev,
+ reserved_keys: 'replace',
+ null_prototype: false,
+ })
+
+ // if it didn't throw, but original parser did,
+ // this is an error in this library and should be reported
+ throw err
+ }
+ }
+}
+
+// this function is an express/connect middleware
+// that accepts uploads in application/json5 format
+module.exports.middleware = function() {
+ return function(req, res, next) {
+ throw Error('this function is removed, use express-json5 instead')
+ }
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.json b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.json
new file mode 100644
index 0000000000..bdcdae6b46
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "jju",
+ "version": "1.2.0",
+ "description": "a set of utilities to work with JSON / JSON5 documents",
+ "author": {
+ "name": "Alex Kocharin",
+ "email": "alex@kocharin.ru"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/rlidwka/jju"
+ },
+ "bugs": {
+ "url": "https://github.com/rlidwka/jju/issues"
+ },
+ "homepage": "http://rlidwka.github.io/jju/",
+ "devDependencies": {
+ "mocha": ">=1.21.0",
+ "js-yaml": ">=3.1.0",
+ "eslint": "~0.4.2"
+ },
+ "scripts": {
+ "test": "mocha test/*.js",
+ "lint": "eslint -c ./.eslint.yaml ./lib"
+ },
+ "keywords": [
+ "json",
+ "json5",
+ "parser",
+ "serializer",
+ "data"
+ ],
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/"
+ },
+ "license": {
+ "type": "WTFPL",
+ "url": "http://www.wtfpl.net/txt/copying/"
+ },
+ "gitHead": "6f1b2a8321cb0dfcffc50378b3632853cf529671",
+ "_id": "jju@1.2.0",
+ "_shasum": "add5b586fec853b44929d78bf94864ab577c02e9",
+ "_from": "jju@>=1.1.0 <2.0.0",
+ "_npmVersion": "2.0.1",
+ "_nodeVersion": "1.1.1",
+ "_npmUser": {
+ "name": "rlidwka",
+ "email": "alex@kocharin.ru"
+ },
+ "maintainers": [
+ {
+ "name": "rlidwka",
+ "email": "alex@kocharin.ru"
+ }
+ ],
+ "dist": {
+ "shasum": "add5b586fec853b44929d78bf94864ab577c02e9",
+ "tarball": "http://registry.npmjs.org/jju/-/jju-1.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/jju/-/jju-1.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml
new file mode 100644
index 0000000000..c971ba2826
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/package.yaml
@@ -0,0 +1,45 @@
+# use "yapm install ." if you're installing this from git repository
+
+# "jju" stands for "json/json5 utils"
+name: jju
+
+version: 1.2.0
+description: a set of utilities to work with JSON / JSON5 documents
+
+author:
+ name: Alex Kocharin
+ email: alex@kocharin.ru
+
+repository:
+ type: git
+ url: git://github.com/rlidwka/jju
+
+bugs:
+ url: https://github.com/rlidwka/jju/issues
+
+homepage: http://rlidwka.github.io/jju/
+
+devDependencies:
+ mocha: '>=1.21.0'
+ js-yaml: '>=3.1.0'
+
+ # linting tools
+ eslint: '~0.4.2'
+
+scripts:
+ test: 'mocha test/*.js'
+ lint: 'eslint -c ./.eslint.yaml ./lib'
+
+keywords:
+ - json
+ - json5
+ - parser
+ - serializer
+ - data
+
+publishConfig:
+ registry: https://registry.npmjs.org/
+
+license:
+ type: WTFPL
+ url: http://www.wtfpl.net/txt/copying/
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/portable-json5-tests.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/portable-json5-tests.yaml
new file mode 100644
index 0000000000..5bf6ac38fe
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/portable-json5-tests.yaml
@@ -0,0 +1,916 @@
+# vi:set ts=2 sts=2 sw=2 et:
+#
+# Copyright (c) JD 2456730 Alex Kocharin <alex@kocharin.ru>
+#
+# 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 original file is available here:
+# https://github.com/rlidwka/jju/tree/master/test/portable-json5-tests.yaml
+#
+# ----------------------------------------------------------------------------
+#
+# Portable JSON5 test suite.
+#
+# This file contains an actual YAML data and it may include fancy syntax.
+# If your platform does not support YAML, you might wish to pre-process it
+# using a generic YAML parser.
+#
+
+%YAML 1.2
+---
+#
+# "input" is an arbitrary JSON5 you have to parse
+# "output" is a normalized JSON you have to compare your result with,
+# or !error (null) if your input should result in parser error
+#
+# Types of tests:
+#
+# - basic - Tests that every JSON5 parser should pass.
+#
+# - advanced - Tests that bring close compatibility with javascript. Not
+# strictly required, but nice to have for completeness.
+#
+# - extra - Extra test cases you can follow at your discretion.
+#
+# Questionable features like elisions go to extra. All valid javascript, but
+# invalid json5 also goes to extra. Feel free to ignore this section if you
+# want to. Thus, eval(input) is a complete json5 parser, that should pass all
+# basic and advanced tests.
+#
+
+# Basic types in minimal form
+# ---------------------------
+
+type-no-data:
+ type: extra
+ output: !error
+ input: ''
+
+type-null:
+ type: basic
+ output: null
+ input: >
+ null
+
+# undefined is not supported,
+# null should be used instead
+type-no-undefined:
+ type: extra
+ output: !error
+ input: >
+ undefined
+
+type-no-raw:
+ type: extra
+ output: !error
+ input: >
+ foobar
+
+type-bool-true:
+ type: basic
+ output: true
+ input: >
+ true
+
+type-bool-false:
+ type: basic
+ output: false
+ input: >
+ false
+
+type-number:
+ type: basic
+ output: 0
+ input: >
+ 0
+
+type-string:
+ type: basic
+ output: ""
+ input: >
+ ""
+
+type-object:
+ type: basic
+ output: {}
+ input: >
+ {}
+
+type-array:
+ type: basic
+ output: []
+ input: >
+ []
+
+# Numbers: special
+# ----------------
+
+# note: it's hard to test this
+# just add `1/x < 0` check in your code somewhere
+num-negative-zero:
+ type: extra
+ output: -0.0
+ input: >
+ -0
+
+num-nan:
+ type: basic
+ output: .nan
+ input: >
+ NaN
+
+num-signed-nan:
+ type: basic
+ output: .nan
+ input: >
+ +NaN
+
+num-positive-inf:
+ type: basic
+ output: +.inf
+ input: >
+ Infinity
+
+num-negative-inf:
+ type: basic
+ output: -.inf
+ input: >
+ -Infinity
+
+num-inf-exact-case:
+ type: extra
+ output: !error
+ input: >
+ INFINITY
+
+# Numbers: hexadecimal
+# --------------------
+
+num-hex-zero:
+ type: basic
+ output: 0
+ input: >
+ 0x0
+
+num-cut-hex:
+ type: basic
+ output: !error
+ input: >
+ 0x
+
+num-all-hex:
+ type: basic
+ output: 12841684683518
+ input: >
+ 0xBADF00DCAFE
+
+num-mixed-case:
+ type: basic
+ output: 3735928559
+ input: >
+ 0xDeAdBEef
+
+num-signed-hex:
+ type: advanced
+ output: 31
+ input: >
+ +0x1F
+
+num-negative-hex:
+ type: advanced
+ output: -31
+ input: >
+ -0x1f
+
+num-bad-hex:
+ type: advanced
+ output: !error
+ input: >
+ 0xBADxF00D
+
+num-no-hex-float:
+ type: advanced
+ output: !error
+ input: >
+ 0x12.345
+
+# this is not actually an exponent :)
+num-hex-exponent:
+ type: advanced
+ output: 4836
+ input: >
+ 0x0012e4
+
+# Numbers: octal
+# --------------
+
+# Octals are primarily used in config files
+# to set up a file mask (like 0777)
+#
+# Note: they will have 0o12345 syntax instead
+# of 012345 in the ES6, so we'll need to switch
+# as well in the future
+
+num-octal:
+ type: extra
+ output: 342391
+ input: >
+ 01234567
+
+num-octal-zeroes:
+ type: extra
+ output: -24000
+ input: >
+ -000000056700
+
+num-bad-octal:
+ type: extra
+ output: !error
+ input: >
+ 012345678
+
+num-no-octal-float:
+ type: extra
+ output: !error
+ input: >
+ 012.345
+
+num-no-octal-exp:
+ type: extra
+ output: !error
+ input: >
+ 0123e4
+
+# Numbers: floating point
+# -----------------------
+
+num-float:
+ type: basic
+ output: 123.456
+ input: >
+ 123.456
+
+num-signed-foat:
+ type: basic
+ output: -0.00098765
+ input: >
+ -0.00098765
+
+num-omit-trailing-mantissa:
+ type: basic
+ output: 1234000
+ input: >
+ 1234.e3
+
+num-omit-leading-mantissa:
+ type: advanced
+ output: -123.4
+ input: >
+ -.1234e3
+
+num-bad-float:
+ type: advanced
+ output: !error
+ input: >
+ 0.12.345
+
+num-bad-sum:
+ type: extra
+ output: !error
+ input: >
+ 0.12+345
+
+num-uc-exp:
+ type: advanced
+ output: -1230000
+ input: >
+ -123E+4
+
+num-float-exp:
+ type: basic
+ output: 123000
+ input: >
+ 0.0123e7
+
+num-bad-exp:
+ type: extra
+ output: !error
+ input: >
+ 123e7.3
+
+num-bad-char:
+ type: extra
+ output: !error
+ input: >
+ 123a456
+
+num-no-exp:
+ type: advanced
+ output: !error
+ input: >
+ 123e
+
+num-zero-exp:
+ type: advanced
+ output: -0.0
+ input: >
+ -.00e-0
+
+num-dec-base-signed-exp:
+ type: advanced
+ output: 0.00000123
+ input: >
+ 1230000E-012
+
+# String: quotes
+# --------------
+
+string-double-quotes:
+ type: basic
+ output: foobar
+ input: >
+ "foobar"
+
+string-single-quotes:
+ type: basic
+ output: foobar
+ input: >
+ 'foobar'
+
+string-open:
+ type: basic
+ output: !error
+ input: >
+ "\\\\\\\\\\\\\"
+
+string-not-open:
+ type: basic
+ output: "\\\\\\\\\\\\\\"
+ input: >
+ "\\\\\\\\\\\\\\"
+
+string-continuation:
+ type: advanced
+ output: " foo bar "
+ input: >
+ " foo \
+ bar \
+ "
+
+string-win-continuation:
+ type: advanced
+ output: "foobar"
+ input: "'foo\\\r\nbar'"
+
+string-win-reverse-continuation:
+ type: advanced
+ output: !error
+ input: "'foo\\\n\rbar'"
+
+string-unicode-continuation:
+ type: advanced
+ output: "foobarbaz"
+ input: "'foo\\\u2028bar\\\u2029baz'"
+
+string-multi-bad-continuation:
+ type: advanced
+ output: !error
+ input: >
+ foo\
+
+ bar
+
+string-bad-ending:
+ type: basic
+ output: !error
+ input: "'foo\rbar'"
+
+string-bad-ending-2028:
+ type: advanced
+ output: !error
+ input: "'foo\u2028bar'"
+
+string-bad-ending-2029:
+ type: advanced
+ output: !error
+ input: "'foo\u2029bar'"
+
+string-literal-unicode:
+ type: advanced
+ output: "foo\uFEFF\u2030bar\u1234"
+ input: "'foo\uFEFF\u2030bar\u1234'"
+
+string-control-char:
+ type: advanced
+ output: "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0b\x0c\x0e\x0f"
+ input: "'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0b\x0c\x0e\x0f'"
+
+# String: escape sequences
+# ------------------------
+
+string-octal-escape:
+ type: extra
+ output: "\x1b[1;32mhi\x1b[m??"
+ input: >
+ '\033[1;32mhi\033[m\077\077'
+
+string-octal-two-digits:
+ type: extra
+ output: "\n\x1c\x2e\x07890\x01"
+ input: >
+ '\12\34\56\78\90\1'
+
+string-octal-three-digits:
+ type: extra
+ output: "\n34.78\xff 0"
+ input: >
+ '\01234\5678\377\400'
+
+string-hex-escape:
+ type: extra
+ output: "\x01\x23\xab\xcd\xef"
+ input: >
+ "\x01\x23\xab\xCd\xEF"
+
+# \0 is *not* an octal escape sequence,
+# and is allowed even in strict mode
+string-zero-point:
+ type: basic
+ output: "\0"
+ input: >
+ '\0'
+
+string-escape-double-quotes:
+ type: basic
+ output: "\"''"
+ input: >
+ "\"'\'"
+
+string-escape-single-quotes:
+ type: basic
+ output: " '\"\" "
+ input: >
+ ' \'"\" '
+
+string-escape-json-chars:
+ type: basic
+ output: "\\\/\b\f\n\r\t"
+ input: >
+ "\\\/\b\f\n\r\t"
+
+# this character was left out of
+# json spec for whatever reason
+string-escape-slash-v:
+ type: basic
+ output: "\v"
+ input: >
+ "\v"
+
+string-unicode-escape:
+ type: basic
+ output: "\u0000\uffffx\ufeff\u1234\u9f6a\u2028\uabcd"
+ input: >
+ "\u0000\uFFFFx\uFeFf\u1234\u9F6a\u2028\uabcd"
+
+string-arbitrary-escape:
+ type: advanced
+ output: "X12Uqwe\r\tyiopasd\fghjklzc\u000b\b\nm9 "
+ input: >
+ '\X12\U\q\w\e\r\t\y\i\o\p\a\s\d\f\g\h\j\k\l\z\c\v\b\n\m\9\ '
+
+string-bad-unicode:
+ type: advanced
+ output: !error
+ input: >
+ '\uEFGH'
+
+string-incomplete-unicode:
+ type: advanced
+ output: !error
+ input: >
+ '\u$'
+
+string-bad-hex:
+ type: advanced
+ output: !error
+ input: >
+ '\xFG'
+
+string-incomplete-hex:
+ type: advanced
+ output: !error
+ input: >
+ '\x$'
+
+# Object literals
+# ---------------
+
+object-nested:
+ type: basic
+ output: {q:{'w':{"e":[1]}}}
+ input: |
+ {q:{'w':{"e":[1]}}}
+
+object-trailing-comma:
+ type: basic
+ output: {foo: 'bar'}
+ input: |
+ {foo: 'bar',}
+
+object-leading-comma-style:
+ type: basic
+ output: {q: 1,w: 2,e: 3}
+ input: |
+ { q: 1
+ , w: 2
+ , e: 3
+ }
+
+object-incomplete:
+ type: basic
+ output: !error
+ input: |
+ {q:1,w:2,{}
+
+object-isnt-array:
+ type: basic
+ output: !error
+ input: |
+ {1,2}
+
+object-no-single-comma:
+ type: basic
+ output: !error
+ input: |
+ {,}
+
+object-no-elisions:
+ type: basic
+ output: !error
+ input: |
+ {q:1,,w:2}
+
+# Objects: keys
+# -------------
+
+object-singlequoted:
+ type: basic
+ output: {q: 1,w: 2,e: 3}
+ input: |
+ {'q':1,'w':2,'e':3}
+
+object-doublequoted:
+ type: basic
+ output: {q: 1,w: 2,e: 3}
+ input: |
+ {"q":1,"w":2,"e":3}
+
+object-unquoted:
+ type: basic
+ output: {$FOO_bar123: 'baz'}
+ input: >
+ {$FOO_bar123: 'baz'}
+
+object-no-first-digit:
+ type: advanced
+ output: !error
+ input: >
+ {123foo: bar}
+
+object-unquoted-unicode:
+ type: advanced
+ output: {"\u1f04\u03bb\u03c6\u03b1": baz}
+ input: "{\u1f04\u03bb\u03c6\u03b1:'baz'}"
+
+object-unicode-escape-key:
+ type: advanced
+ output: {foo: 'bar', "\u1f04\u03bb\u03c6\u03b1": baz, "qwe\u1f04rty": quux}
+ input: |
+ {foo:'bar', \u1f04\u03bb\u03c6\u03b1:'baz', qwe\u1f04rty: "quux"}
+
+object-no-raw-literal:
+ type: extra
+ output: !error
+ input: |
+ {foo: bar}
+
+object-bad-literal:
+ type: advanced
+ output: !error
+ input: |
+ {foo-bar: 123}
+
+object-no-space-in-key:
+ type: advanced
+ output: !error
+ input: |
+ {foo bar: 123}
+
+object-no-comment-in-key:
+ type: advanced
+ output: !error
+ input: |
+ {foo/*bar*/baz: 123}
+
+object-float-keys:
+ type: advanced
+ output: {'1': 'one', '3.1415': 'pi'}
+ input: |
+ {1:'one', 3.1415:'pi'}
+
+object-no-negative:
+ type: advanced
+ output: !error
+ input: |
+ {-5: 123}
+
+object-exponent-keys:
+ type: advanced
+ output: {'1': 'exp', '1000': 'pos', '0.001': 'neg'}
+ input: |
+ {1e0: 'exp', 1e+3: 'pos', 1e-3: 'neg'}
+
+object-octal-keys:
+ type: extra
+ output: {'668': 1}
+ input: |
+ {01234: 1}
+
+object-hex-keys:
+ type: advanced
+ output: {'51966': 1}
+ input: |
+ {0xCAFE: 1}
+
+object-null-keys:
+ type: basic
+ output: {'null': null}
+ input: |
+ {null: null}
+
+object-no-array-keys:
+ type: extra
+ output: !error
+ input: |
+ {[]: 123}
+
+object-no-empty-keys:
+ type: basic
+ output: !error
+ input: |
+ {: 123}
+
+object-empty-string-key:
+ type: basic
+ output: {s: {'': 1}, m: {'': 2}}
+ input: |
+ {s: {'': 1}, m: {"": 2}}
+
+object-bad-unicode-space:
+ type: advanced
+ output: !error
+ input: |
+ { \u0020foobar: 123 }
+
+object-bad-unicode-dash:
+ type: advanced
+ output: !error
+ input: |
+ { foo\u002dbar: 123}
+
+object-incomplete-unicode-sequence:
+ type: advanced
+ output: !error
+ input: |
+ { foo\u12f: 123 }
+
+object-double-escape:
+ type: advanced
+ output: !error
+ input: |
+ { foo\\u1234bar: 123 }
+
+object-we-arent-es3:
+ type: basic
+ output: {new: 1, delete: 2, throw: 3}
+ input: |
+ {new: 1, delete: 2, throw: 3}
+
+object-last-digits:
+ type: basic
+ output: {$123e2: 1, abc123: 2}
+ input: |
+ {$123e2: 1, abc123: 2}
+
+object-unicode-in-string:
+ type: advanced
+ output: {"\uff13qwe": 123}
+ input: |
+ {"\uff13qwe": 123}
+
+object-unicode-esc-in-string:
+ type: advanced
+ output: {"\\uff13qwe": 123}
+ input: |
+ {"\\uff13qwe": 123}
+
+object-unicode-digits-first-esc:
+ type: advanced
+ output: !error
+ input: |
+ {\uff13qwe: 123}
+
+object-unicode-digits-first-lit:
+ type: advanced
+ output: !error
+ input: "{\uff13qwe: 123}"
+
+object-unicode-weirdness-esc:
+ type: advanced
+ output: {"digit\uff13": 1, "comb\u094F": 2, "punct\u2040": 3, "zwnj\u200C": 4}
+ input: |
+ {digit\uff13: 1, comb\u094F: 2, punct\u2040: 3, zwnj\u200C: 4}
+
+object-unicode-weirdness-lit:
+ type: advanced
+ output: {"digit\uff13": 1, "comb\u094F": 2, "punct\u2040": 3, "zwnj\u200C": 4}
+ input: "{digit\uff13: 1, comb\u094F: 2, punct\u2040: 3, zwnj\u200C: 4}"
+
+# Array literals
+# --------------
+
+array-all-types:
+ type: basic
+ output: [1.2,"3,4",{},[],null,+.inf]
+ input: |
+ [1.2,"3,4",{},[],null,Infinity]
+
+array-trailing-comma:
+ type: basic
+ output: [1,2,3,4]
+ input: |
+ [1,2,3,4,]
+
+array-leading-comma-style:
+ type: basic
+ output: [quux,foo,bar,baz]
+ input: |
+ [ 'quux'
+ , 'foo'
+ , 'bar'
+ , 'baz'
+ ]
+
+array-incomplete:
+ type: basic
+ output: !error
+ input: |
+ [1,2,3,[]
+
+array-nested:
+ type: basic
+ output: [[[[[[]]]]],[[],[]]]
+ input: |
+ [[[[[[/*[]*/]]]]],[[],[]]]
+
+array-isnt-object:
+ type: extra
+ output: !error
+ input: |
+ [1:2]
+
+array-no-single-comma:
+ type: extra
+ output: !error
+ input: |
+ [,]
+
+array-no-elisions:
+ type: extra
+ output: !error
+ input: |
+ [1,,2,3]
+
+# Comments
+# --------
+
+comment-single:
+ type: basic
+ output: foobar
+ input: |
+ // blahblah
+ "foobar"
+ // another one
+
+comment-multi:
+ type: basic
+ output: foobar
+ input: |
+ /*
+ * 123
+ */
+ "foobar"
+ /**/
+
+comment-single-newlines:
+ type: advanced
+ output: [ 123, 456, 789 ]
+ input: "[// foo\r123,// bar\u2028456,// baz\u2029789]"
+
+comment-inside:
+ type: advanced
+ output: [123, '// foo', '/* bar']
+ input: >
+ [
+ /*
+ " // */ 123, // ",
+ "// foo",
+ '/* bar',
+ ]
+
+comment-in-token:
+ type: advanced
+ output: !error
+ input:
+ 123/*comment*/456
+
+comment-java-style:
+ type: basic
+ output: 123
+ input:
+ /*****************/
+ 123
+ /****************/
+
+comment-object:
+ type: basic
+ output: {q: 123}
+ input: /**/{/**/q/**/:/**/123/**/,/**/}//
+
+# Whitespace
+# ----------
+
+ws-no-whitespace:
+ type: basic
+ output: {"foo":bar,bar:["qwe",null,[],{}],"baz":123}
+ input: '{foo:"bar","bar":["qwe",null,[],{}],"baz":123}'
+
+ws-allow-prefix:
+ type: basic
+ output: 123
+ input: " \t123"
+
+ws-unicode-spaces:
+ type: advanced
+ output: { foo : 123 }
+ input: "
+ \u0020\u00A0\uFEFF
+ {
+ \x09\x0A\x0B\x0C\x0D\u1680\u180E
+ foo
+ \u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A
+ :
+ \u2028\u2029\u202F\u205F\u3000
+ 123
+ \uFEFF
+ }"
+
+ws-unicode-newlines:
+ type: advanced
+ output: [ 123, 456 ]
+ input: "
+ [
+ \u000D
+ 123,
+ \u2028
+ 456,
+ \u2029
+ ]
+ "
+
+# Multiple tokens
+# ---------------
+
+multi-string-nospace:
+ type: basic
+ output: !error
+ input: '"foo""bar"'
+
+multi-string:
+ type: basic
+ output: !error
+ input: '"foo" "bar"'
+
+# note: valid javascript
+multi-array:
+ type: extra
+ output: !error
+ input: '[0] [0]'
+
+multi-object:
+ type: basic
+ output: !error
+ input: '{} {}'
+...
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_analyze.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_analyze.js
new file mode 100644
index 0000000000..e353efcd1a
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_analyze.js
@@ -0,0 +1,52 @@
+var _assert = require('assert')
+var analyze = require('../').analyze
+
+function addTest(a, b) {
+ if (typeof(describe) === 'function') {
+ it('test_analyze: ' + a + ' == ' + b, function() {
+ _assert.equal(a, b)
+ })
+ } else {
+ _assert.equal(a, b)
+ }
+}
+
+var t = analyze(JSON.stringify(require('os').networkInterfaces()))
+addTest(t.has_whitespace, false)
+addTest(t.has_comments, false)
+addTest(t.has_newlines, false)
+addTest(t.newline, '\n')
+addTest(t.quote, '"')
+addTest(t.quote_keys, true)
+addTest(t.indent, '')
+
+var t = analyze(JSON.stringify(require('os').networkInterfaces(), null, 2))
+addTest(t.has_whitespace, true)
+addTest(t.has_comments, false)
+addTest(t.has_newlines, true)
+addTest(t.newline, '\n')
+addTest(t.quote, '"')
+addTest(t.quote_keys, true)
+addTest(t.indent, ' ')
+
+var t = analyze(JSON.stringify(require('os').networkInterfaces(), null, 3))
+addTest(t.indent, ' ')
+
+var t = analyze(JSON.stringify(require('os').networkInterfaces(), null, '\t'))
+addTest(t.indent, '\t')
+
+var t = analyze(JSON.stringify(require('os').networkInterfaces(), null, 3).replace(/\n/g, '\r\n'))
+addTest(t.indent, ' ')
+addTest(t.newline, '\r\n')
+
+var t = analyze(JSON.stringify(require('os').networkInterfaces()).replace(/"/g, "'"))
+addTest(t.quote, "'")
+addTest(t.quote_keys, true)
+
+var t = analyze("{foo:'bar', 'bar':\"baz\", 'baz':\"quux\"}")
+addTest(t.quote, "'")
+addTest(t.quote_keys, false)
+
+var t = analyze("{foo:'bar', \"bar\":'baz', \"baz\":\"quux\"}")
+addTest(t.quote, '"')
+addTest(t.quote_keys, false)
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_document.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_document.js
new file mode 100644
index 0000000000..5f1ef2aaf6
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_document.js
@@ -0,0 +1,214 @@
+var assert = require('assert')
+var create = require('../lib/document').Document
+var jju = require('..')
+
+var str = '{ x\r\n:\n1, y: {"..z.": 123, t: null, s:"123", a:[ 1,2,{x:3},] }}\n'
+var d = create(str)
+assert.equal(d + '', str)
+assert.deepEqual(d.get(''), {x:1,y:{'..z.':123,t:null,s:'123',a:[1,2,{x:3}]}})
+assert.deepEqual(d.get('x'), 1)
+assert.deepEqual(d.get('x.x'), undefined)
+assert.deepEqual(d.get('x.x.x.x'), undefined)
+assert.strictEqual(d.get('y.x'), undefined)
+assert.deepEqual(d.get('y.s'), '123')
+assert.strictEqual(d.get('y.t'), null)
+assert.strictEqual(d.get('y.t.x'), undefined)
+assert.equal(d.has(''), true)
+assert.equal(d.has('x'), true)
+assert.equal(d.has('x.x'), false)
+assert.equal(d.has('x.x.x.x'), false)
+assert.equal(d.has('y.x'), false)
+assert.equal(d.has('y'), true)
+assert.equal(d.has('y.s'), true)
+assert.equal(d.has('y.t'), true)
+assert.equal(d.has('a'), false)
+
+// arrays
+assert.deepEqual(d.get('y.a'), [1,2,{x:3}])
+assert.deepEqual(d.get('y.a.0'), 1)
+assert.deepEqual(d.get('y.a.2.x'), 3)
+assert.deepEqual(d.get('y.a.10'), undefined)
+assert.deepEqual(d.has('y.a.0'), true)
+assert.deepEqual(d.has('y.a.10'), false)
+assert.deepEqual(d.get('y.a.2'), {x:3})
+assert.deepEqual(d.get('y.a.-1'), undefined)
+
+// controversial
+assert.strictEqual(d.get('y.s.0'), undefined)
+assert.equal(d.has('y.s.0'), false)
+
+// paths
+assert.deepEqual(d.get([]), {x:1,y:{'..z.':123,t:null,s:'123',a:[1,2,{x:3}]}})
+assert.strictEqual(d.has([]), true)
+assert.strictEqual(d.get(['y','..z.']), 123)
+assert.strictEqual(d.has(['y','..z.']), true)
+assert.deepEqual(d.get(['y','a',2,'x']), 3)
+assert.deepEqual(create('[1]').set(0, 4).get(''), [4])
+assert.deepEqual(create('[1]').set(1, 4).get(''), [1,4])
+assert.deepEqual(create('[1]').has(0), true)
+assert.deepEqual(create('[1]').has(1), false)
+assert.deepEqual(create('[1]').get(0), 1)
+
+// invalid paths
+assert.throws(function() { create('[1]').set(null, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set({}, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(/./, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(function(){}, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(false, 4) }, /invalid path type/i)
+assert.throws(function() { create('[1]').set(undefined, 4) }, /invalid path type/i)
+
+// set root
+assert.strictEqual(create(str).set('', 4).get(''), 4)
+assert.strictEqual(create(str).set('', null).get(''), null)
+assert.strictEqual(create(str).set('', {x:4}).get('x'), 4)
+assert.deepEqual(create(str).set('', [1,2,3]).get(''), [1,2,3])
+assert.strictEqual(create('1').set('', 4).get(''), 4)
+assert.strictEqual(create('null').set('', 4).get(''), 4)
+assert.strictEqual(create('[]').set('', 4).get(''), 4)
+assert.strictEqual(create('{}').set('', 4).get(''), 4)
+
+// set 1st level
+assert.deepEqual(create('{}').set('x', 4).get('x'), 4)
+assert.deepEqual(create('{a:{b:[]}}').set('a.b.0', 4).get('a'), {b:[4]})
+//assert.deepEqual(create('1').set('x', 4).get('x'), 4)
+//assert.deepEqual(create('null').set('x', 4).get('x'), 4)
+
+// array: boundaries
+assert.strictEqual(create('[]').set('0', 4).get('0'), 4)
+assert.strictEqual(create('[1,2,3]').set('2', 4).get('2'), 4)
+assert.strictEqual(create('[1,2,3]').set('3', 4).get('3'), 4)
+
+// various error cases
+assert.throws(function() { create('1').set('x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('null').set('x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('[]').set('x', 4) }, /set key .* of an array/)
+assert.throws(function() { create('""').set('x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('{}').set('x.x.x', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('1').set('1', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('null').set('1', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('""').set('1', 4) }, /set key .* of an non-object/)
+assert.throws(function() { create('[]').set('-1', 4) }, /set key .* of an array/)
+assert.throws(function() { create('[]').set('1', 4) }, /set key .* out of bounds/)
+assert.throws(function() { create('[1,2,3]').set('4', 4) }, /set key .* out of bounds/)
+assert.throws(function() { create('{a:{b:[]}}').set('a.b.x', 4) }, /set key .* of an array/)
+
+// unsetting stuff
+assert.throws(function() { create('[]').unset('') }, /can't remove root document/)
+
+// arrays: handling spaces correctly
+assert.equal(create("[]").set(0,{})+"", '[{}]')
+assert.equal(create("[0]").set(1,{})+"", '[0,{}]')
+assert.equal(create("[0,]").set(1,{})+"", '[0,{},]')
+assert.equal(create("[ ]").set(0,{})+"", '[{} ]')
+assert.equal(create("[ 0 , ]").set(1,{})+"", '[ 0 , {}, ]')
+assert.equal(create("[ 0 ]").set(1,{})+"", '[ 0, {} ]')
+assert.equal(create("{}").set('y',{})+"", '{"y":{}}')
+assert.equal(create("{x:1}").set('y',{})+"", '{x:1,y:{}}')
+assert.equal(create("{x:1,}").set('y',{})+"", '{x:1,y:{},}')
+assert.equal(create("{ }").set('y',{})+"", '{"y":{} }')
+assert.equal(create("{ x:1 , }").set('y',{})+"", '{ x:1 , y:{}, }')
+assert.equal(create("{ x:1 }").set('y',{})+"", '{ x:1, y:{} }')
+
+// deleting elements
+assert.throws(function() { create('[]').unset('0') }, /unset key .* out of bounds/)
+assert.throws(function() { create('[1,2]').unset('2') }, /unset key .* out of bounds/)
+assert.throws(function() { create('[1,2,3]').unset('0') }, /in the middle of an array/)
+
+// CommonJS assert spec is "awesome"
+assert.deepEqual(create('[1,2]').unset('1').get(''), [1])
+assert.deepEqual(create('[1,2]').unset('1').get('').length, 1)
+assert.deepEqual(create('[1,2,3]').unset('2').unset('1').get(''), [1])
+assert.deepEqual(create('[1,2,3]').unset('2').unset('1').get('').length, 1)
+assert.deepEqual(create('[1]').unset('0').get(''), [])
+assert.deepEqual(create('[1]').unset('0').get('').length, 0)
+
+assert.deepEqual(create('{x:{y:"z"}, z:4}').unset('x').get(''), {z:4})
+assert.throws(function() { create('[1,2]').unset('') }, /root/)
+
+// getting crazy
+//assert.deepEqual(create(str).set('a.b.c.d.e', 1).get('a'), {b:{c:{d:{e:1}}}})
+
+// update: arrays
+assert.deepEqual(create("[1]").update([2,3])+"", '[2,3]')
+assert.deepEqual(create("[1]").update([2,3,4])+"", '[2,3,4]')
+assert.deepEqual(create("[]").update([2])+"", '[2]')
+assert.deepEqual(create("[2]").update([])+"", '[]')
+assert.deepEqual(create("[2,3,4]").update([2,3])+"", '[2,3]')
+assert.deepEqual(create("[2,3,4]").update([])+"", '[]')
+assert.deepEqual(create("[]").update([2,3,4])+"", '[2,3,4]')
+assert.deepEqual(create(" /*zz*/ [ 2 , 3 , 4 ] /*xx*/ ").update([])+"", ' /*zz*/ [ ] /*xx*/ ')
+assert.deepEqual(create(" /*zz*/ [ ] /*xx*/ ").update([2,3,4])+"", ' /*zz*/ [2,3,4 ] /*xx*/ ')
+
+// update: objects
+assert.deepEqual(create("{x:1}").update({x:1,y:2,z:3})+"", '{x:1,y:2,z:3}')
+assert.deepEqual(create("{x:1}").update({x:2,z:3,t:4})+"", '{x:2,z:3,t:4}')
+assert.deepEqual(create("{}").update({x:1,y:2})+"", '{"x":1,"y":2}')
+assert.deepEqual(create("{x:1}").update({})+"", '{}')
+assert.deepEqual(create("{x:1,y:2}").update({x:1})+"", '{x:1}')
+assert.deepEqual(create(" /*zz*/ { x /*a*/ : /*b*/ 2 , y:3 , z //\n: 4 } /*xx*/ ").update({})+"", ' /*zz*/ { } /*xx*/ ')
+assert.deepEqual(create(" /*zz*/ { } /*xx*/ ").update({x: 2, y: 3, z: 4})+"", ' /*zz*/ {"x":2,"y":3,"z":4 } /*xx*/ ')
+
+// remove trailing comma
+assert.deepEqual(create("{x:1,}").update({})+"", '{}')
+assert.deepEqual(create("[0,]").update([])+"", '[]')
+assert.deepEqual(create("[0 /*z*/ , /*z*/]").update([])+"", '[ /*z*/]')
+
+// mode
+assert.equal(create('{"test":123}', {mode:'json'}).update({q:1,w:2})+'', '{"q":1,"w":2}')
+
+assert.equal(create('{1:2}').update({ a: 1, b: [1,2], c: 3})+'', '{a:1,b:[1,2],c:3}')
+
+// undef
+//assert.throws(function(){ jju.update(undefined, undefined) }, /root doc/)
+assert.equal(jju.update(undefined, undefined), '')
+assert.equal(jju.update(undefined, 42), '42')
+assert.equal(jju.update(undefined, {x: 5}), '{"x":5}')
+
+/*
+ * real test
+ */
+var upd = { name: 'yapm',
+ version: '0.6.0',
+ description: 'npm wrapper allowing to use package.yaml instead of package.json',
+ author: { name: 'Alex Kocharin', email: 'alex@kocharin.ru' },
+ keywords:
+ [ 'package manager',
+ 'modules',
+ 'install',
+ 'package.yaml',
+ 'package.json5',
+ 'yaml',
+ 'json5',
+ 'npm' ],
+ preferGlobal: true,
+ homepage: 'https://npmjs.org/doc/',
+ repository: { type: 'git', url: 'https://github.com/rlidwka/yapm' },
+ bugs: { url: 'http://github.com/rlidwka/yapm/issues' },
+ main: './yapm.js',
+ bin: { yapm: './yapm.js' },
+ dependencies: { npm: '*', 'js-yaml': '*', through: '*', 'json5-utils': '*' },
+ devDependencies: { async: '*' },
+ optionalDependencies: { 'yaml-update': '*' },
+ test_nonascii: 'тест' }
+
+assert.deepEqual(create(create('{"garbage":"garbage"}').update(upd)).get(''), upd)
+assert.deepEqual(JSON.parse(create('{"garbage":"garbage"}', {mode:'json',legacy:true}).update(upd)), upd)
+
+//console.log(create('{"garbage":"garbage"}').update(upd)+'')
+
+//assert.deepEqual(create(" [ ] //").set(0,{})+"" [ ,{}] //
+
+
+//node -e 'console.log(require("./document").Document("{}").set("",[1,2,3])+"")'[1, 2, 3]
+
+//alex@elu:~/json5-utils/lib$ node -e 'console.log(require("./document").Document("[]").set("0",[1,2,3]).get(""))'
+//[ [ 1, 2, 3 ] ]
+
+
+/*assert.equal(create('"test"').get(''), 'test')
+assert.equal(create('"test"').get([]), 'test')
+assert.equal(create('"test"').get(false), 'test')
+assert.equal(create(undefined).get(''), undefined)
+
+//assert.equal(create('"test"').set('', 'foo').toString(), '"foo"')
+*/
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_errors.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_errors.js
new file mode 100644
index 0000000000..b88fcd3892
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_errors.js
@@ -0,0 +1,55 @@
+var assert = require('assert')
+var parse = require('../').parse
+
+function addTest(arg, row, col, errRegExp) {
+ var fn = function() {
+ try {
+ parse(arg)
+ } catch(err) {
+ if (row !== undefined) assert.equal(err.row, row, 'wrong row: ' + err.row)
+ if (col !== undefined) assert.equal(err.column, col, 'wrong column: ' + err.column)
+ if (errRegExp) assert(errRegExp.exec(err.message))
+ return
+ }
+ throw Error("no error")
+ }
+
+ if (typeof(describe) === 'function') {
+ it('test_errors: ' + JSON.stringify(arg), fn)
+ } else {
+ fn()
+ }
+}
+
+// semicolon will be unexpected, so it indicates an error position
+addTest(';', 1, 1)
+addTest('\n\n\n;', 4, 1)
+addTest('\r\n;', 2, 1)
+addTest('\n\r;', 3, 1)
+addTest('\n\u2028;', 3, 1)
+addTest('\n\u2029;', 3, 1)
+addTest('[\n1\n,\n;', 4, 1)
+addTest('{\n;', 2, 1)
+addTest('{\n1\n:\n;', 4, 1)
+addTest('.e3', 1, 3, /"\.e3"/)
+
+// line continuations
+addTest('["\\\n",\n;', 3, 1)
+addTest('["\\\r\n",\n;', 3, 1)
+addTest('["\\\u2028",\n;', 3, 1)
+addTest('["\\\u2029",\n;', 3, 1)
+
+// bareword rewind
+addTest('nulz', 1, 1)
+
+// no data
+addTest(' ', 1, 3, /No data.*whitespace/)
+addTest('blah', 1, 1, /Unexpected token 'b'/)
+addTest('', 1, 1, /No data.*empty input/)
+
+try {
+ parse('{{{{{{{{{')
+} catch(err) {
+ var x = err.stack.match(/parseObject/g)
+ assert(!x || x.length < 2, "shouldn't blow up the stack with internal calls")
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_parse.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_parse.js
new file mode 100644
index 0000000000..c539cc7858
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_parse.js
@@ -0,0 +1,170 @@
+var assert = require('assert')
+var parse = require('../').parse
+
+function addTest(arg, bulk) {
+ function fn_json5() {
+ //console.log('testing: ', arg)
+ try {
+ var x = parse(arg)
+ } catch(err) {
+ x = 'fail'
+ }
+ try {
+ var z = eval('(function(){"use strict"\nreturn ('+String(arg)+'\n)\n})()')
+ } catch(err) {
+ z = 'fail'
+ }
+ assert.deepEqual(x, z)
+ }
+
+ function fn_strict() {
+ //console.log('testing: ', arg)
+ try {
+ var x = parse(arg, {mode: 'json'})
+ } catch(err) {
+ x = 'fail'
+ }
+ try {
+ var z = JSON.parse(arg)
+ } catch(err) {
+ z = 'fail'
+ }
+ assert.deepEqual(x, z)
+ }
+
+ if (typeof(describe) === 'function' && !bulk) {
+ it('test_parse_json5: ' + JSON.stringify(arg), fn_json5)
+ it('test_parse_strict: ' + JSON.stringify(arg), fn_strict)
+ } else {
+ fn_json5()
+ fn_strict()
+ }
+}
+
+addTest('"\\uaaaa\\u0000\\uFFFF\\uFaAb"')
+addTest(' "\\xaa\\x00\xFF\xFa\0\0" ')
+addTest('"\\\'\\"\\b\\f\\t\\n\\r\\v"')
+addTest('"\\q\\w\\e\\r\\t\\y\\\\i\\o\\p\\[\\/\\\\"')
+addTest('"\\\n\\\r\n\\\n"')
+addTest('\'\\\n\\\r\n\\\n\'')
+addTest(' null')
+addTest('true ')
+addTest('false')
+addTest(' Infinity ')
+addTest('+Infinity')
+addTest('[]')
+addTest('[ 0xA2, 0X024324AaBf]')
+addTest('-0x12')
+addTest(' [1,2,3,4,5]')
+addTest('[1,2,3,4,5,] ')
+addTest('[1e-13]')
+addTest('[null, true, false]')
+addTest(' [1,2,"3,4,",5,]')
+addTest('[ 1,\n2,"3,4," \r\n,\n5,]')
+addTest('[ 1 , 2 , 3 , 4 , 5 , ]')
+addTest('{} ')
+addTest('{"2":1,"3":null,}')
+addTest('{ "2 " : 1 , "3":null , }')
+addTest('{ \"2\" : 25e245 , \"3\": 23 }')
+addTest('{"2":1,"3":nul,}')
+addTest('{:1,"3":nul,}')
+addTest('[1,2] // ssssssssss 3,4,5,] ')
+addTest('[1,2 , // ssssssssss \n//xxx\n3,4,5,] ')
+addTest('[1,2 /* ssssssssss 3,4,*/ /* */ , 5 ] ')
+addTest('[1,2 /* ssssssssss 3,4,*/ /* * , 5 ] ')
+addTest('{"3":1,"3":,}')
+addTest('{ чйуач:1, щцкшчлм : 4,}')
+addTest('{ qef-:1 }')
+addTest('{ $$$:1 , ___: 3}')
+addTest('{3:1,2:1}')
+addTest('{3.4e3:1}')
+addTest('{-3e3:1}')
+addTest('{+3e3:1}')
+addTest('{.3e3:1}')
+
+for (var i=0; i<200; i++) {
+ addTest('"' + String.fromCharCode(i) + '"', true)
+}
+
+// strict JSON test cases
+addTest('"\\xaa"')
+addTest('"\\0"')
+addTest('"\0"')
+addTest('"\\v"')
+addTest('{null: 123}')
+addTest("{'null': 123}")
+
+assert.throws(function() {
+ parse('0o')
+})
+
+assert.strictEqual(parse('01234567'), 342391)
+assert.strictEqual(parse('0o1234567'), 342391)
+
+// undef
+assert.strictEqual(parse(undefined), undefined)
+
+// whitespaces
+addTest('[1,\r\n2,\r3,\n]')
+'\u0020\u00A0\uFEFF\x09\x0A\x0B\x0C\x0D\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000'.split('').forEach(function(x) {
+ addTest(x+'[1,'+x+'2]'+x)
+ addTest('"'+x+'"'+x)
+})
+'\u000A\u000D\u2028\u2029'.split('').forEach(function(x) {
+ addTest(x+'[1,'+x+'2]'+x)
+ addTest('"\\'+x+'"'+x)
+})
+
+/* weird ES6 stuff, not working
+
+if (process.version > 'v0.11.7') {
+ assert(Array.isArray(parse('{__proto__:[]}').__proto__))
+ assert.equal(parse('{__proto__:{xxx:5}}').xxx, undefined)
+ assert.equal(parse('{__proto__:{xxx:5}}').__proto__.xxx, 5)
+
+ var o1 = parse('{"__proto__":[]}')
+ assert.deepEqual([], o1.__proto__)
+ assert.deepEqual(["__proto__"], Object.keys(o1))
+ assert.deepEqual([], Object.getOwnPropertyDescriptor(o1, "__proto__").value)
+ assert.deepEqual(["__proto__"], Object.getOwnPropertyNames(o1))
+ assert(o1.hasOwnProperty("__proto__"))
+ assert(Object.prototype.isPrototypeOf(o1))
+
+ // Parse a non-object value as __proto__.
+ var o2 = JSON.parse('{"__proto__":5}')
+ assert.deepEqual(5, o2.__proto__)
+ assert.deepEqual(["__proto__"], Object.keys(o2))
+ assert.deepEqual(5, Object.getOwnPropertyDescriptor(o2, "__proto__").value)
+ assert.deepEqual(["__proto__"], Object.getOwnPropertyNames(o2))
+ assert(o2.hasOwnProperty("__proto__"))
+ assert(Object.prototype.isPrototypeOf(o2))
+}*/
+
+assert.throws(parse.bind(null, "{-1:42}"))
+
+for (var i=0; i<100; i++) {
+ var str = '-01.e'.split('')
+
+ var rnd = [1,2,3,4,5].map(function(x) {
+ x = ~~(Math.random()*str.length)
+ return str[x]
+ }).join('')
+
+ try {
+ var x = parse(rnd)
+ } catch(err) {
+ x = 'fail'
+ }
+ try {
+ var y = JSON.parse(rnd)
+ } catch(err) {
+ y = 'fail'
+ }
+ try {
+ var z = eval(rnd)
+ } catch(err) {
+ z = 'fail'
+ }
+ //console.log(rnd, x, y, z)
+ if (x !== y && x !== z) throw 'ERROR'
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_portable.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_portable.js
new file mode 100644
index 0000000000..bf24aa68b3
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_portable.js
@@ -0,0 +1,59 @@
+var assert = require('assert')
+var FS = require('fs')
+var YAML = require('js-yaml')
+var jju = require('../')
+
+function addTest(name, fn) {
+ if (typeof(describe) === 'function') {
+ it(name, fn)
+ } else {
+ fn()
+ }
+}
+
+var schema = YAML.Schema.create([
+ new YAML.Type('!error', {
+ kind: 'scalar',
+ resolve: function (state) {
+ //state.result = null
+ return true
+ },
+ })
+])
+
+var tests = YAML.safeLoad(FS.readFileSync(__dirname + '/portable-json5-tests.yaml', 'utf8'), {
+ schema: schema
+})
+
+if (!Object.is) {
+ Object.defineProperty(Object, 'is', {
+ value: function(x, y) {
+ if (x === y) {
+ return x !== 0 || 1 / x === 1 / y;
+ }
+ return x !== x && y !== y;
+ },
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ })
+}
+
+for (var k in tests) {
+ ;(function(k) {
+ addTest(k, function() {
+ try {
+ var result = jju.parse(tests[k].input)
+ } catch(err) {
+ result = null
+ }
+
+ // need deepStrictEqual
+ if (typeof(result) === 'object') {
+ assert.deepEqual(result, tests[k].output)
+ } else {
+ assert(Object.is(result, tests[k].output), String(result) + ' == ' + tests[k].output)
+ }
+ })
+ })(k)
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_stringify.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_stringify.js
new file mode 100644
index 0000000000..c97e38e93c
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_stringify.js
@@ -0,0 +1,89 @@
+var assert = require('assert')
+var parse = require('../').parse
+var stringify = require('../').stringify
+
+function deepEqual(x, y) {
+ if (Number.isNaN(x)) {
+ return assert(Number.isNaN(y))
+ }
+ assert.deepEqual(x, y)
+}
+
+function addTest(arg, arg2, arg3) {
+ function fn() {
+ deepEqual(parse(stringify(arg)), arg2 === undefined ? arg : arg2)
+ if (arg !== undefined) deepEqual(JSON.parse(stringify(arg, {mode: 'json', indent: false})), (arg3 === undefined ? (arg2 === undefined ? arg : arg2) : arg3))
+ }
+
+ if (typeof(describe) === 'function') {
+ it('test_stringify: ' + JSON.stringify(arg), fn)
+ } else {
+ fn()
+ }
+}
+
+addTest(0)
+addTest(-0)
+addTest(NaN, undefined, null)
+addTest(Infinity, undefined, null)
+addTest(-Infinity, undefined, null)
+addTest(123)
+addTest(19508130958019385.135135)
+addTest(-2e123)
+addTest(null)
+addTest(undefined)
+addTest([])
+addTest([,,,,,,,], [null,null,null,null,null,null,null])
+addTest([undefined,null,1,2,3,], [null,null,1,2,3])
+addTest([[[[]]],[[]]])
+addTest({})
+addTest({1:2,3:4})
+addTest({1:{1:{1:{1:4}}}, 3:4})
+addTest({1:undefined, 3:undefined}, {})
+addTest(new Number(4), 4)
+addTest(new Boolean(true), true)
+addTest(new String('xqefxef'), 'xqefxef')
+addTest(new Boolean(), false)
+
+var r='';for (var i=0; i<5000; i++) {r+=String.fromCharCode(i)}
+addTest(r)
+
+assert.equal("[1, 2, 3]", stringify([1, 2, 3], {indent: 1}))
+assert.equal("[1, 2, 3]", stringify([1, 2, 3], {indent: 2}))
+
+var oddball = Object(42)
+oddball.__proto__ = { __proto__: null }
+assert.equal('{}', stringify(oddball))
+
+/* this WILL throw
+var falseNum = Object("37")
+falseNum.__proto__ = Number.prototype
+assert.equal("{0: '3', 1: '7'}", stringify(falseNum))*/
+
+assert.equal(stringify(Infinity), 'Infinity')
+assert.equal(stringify(Infinity, {mode: 'json'}), 'null')
+assert.equal(stringify(NaN), 'NaN')
+assert.equal(stringify(NaN, {mode: 'json'}), 'null')
+assert.equal(stringify(-0), '-0')
+
+assert.equal(stringify('test', null), "'test'")
+
+var array = [""]
+var expected = "''"
+for (var i = 0; i < 1000; i++) {
+ array.push("")
+ expected = "''," + expected
+}
+expected = '[' + expected + ']'
+assert.equal(expected, stringify(array, {indent: false}))
+
+assert.strictEqual(stringify([1,2,3], function(){}), undefined)
+
+// don't stringify prototype
+assert.equal('{a: 1}', stringify({a:1,__proto__:{b:2}}))
+
+// sort keys tests
+assert.equal('{a: 1, b: 2, z: 3}', stringify({b:2,a:1,z:3}, {sort_keys: 1}))
+assert.equal('{a: 1, b: {a: 2, b: 5, c: 1}, z: 3}', stringify({b:{c:1,a:2,b:5},a:1,z:3}, {sort_keys: 1}))
+assert.equal('{a: [3, 5, 1], b: 2, z: 3}', stringify({b:2,a:[3,5,1],z:3}, {sort_keys: 1}))
+assert.equal('{b: 2, a: 1, z: 3}', stringify({b:2,a:1,z:3}, {sort_keys: 0}))
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_tokenize.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_tokenize.js
new file mode 100644
index 0000000000..02726154ae
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_tokenize.js
@@ -0,0 +1,98 @@
+var assert = require('assert')
+var parse = require('../').parse
+
+function tokenize(arg) {
+ var result = []
+ parse(arg, {_tokenize: function(smth) {
+ result.push(smth)
+ }})
+ assert.deepEqual(result.map(function(x){return x.raw}).join(''), arg)
+ return result
+}
+
+function addTest(x, exp) {
+ function fn(){assert.deepEqual(tokenize(x), exp)}
+
+ if (typeof(describe) === 'function') {
+ it('test_tokenize: ' + JSON.stringify(x), fn)
+ } else {
+ fn()
+ }
+}
+
+addTest('123', [ { raw: '123', value: 123, type: 'literal', stack: [] }])
+
+addTest(' /* zz */\r\n true /* zz */\n',
+[ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: '/* zz */', type: 'comment', stack: [] },
+ { raw: '\r\n', type: 'newline', stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: 'true', type: 'literal', value: true, stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: '/* zz */', type: 'comment', stack: [] },
+ { raw: '\n', type: 'newline', stack: [] } ])
+
+addTest('{q:123, w : /*zz*/\n\r 345 } ',
+[ { raw: '{', type: 'separator', stack: [] },
+ { raw: 'q', type: 'key', value: 'q', stack: [] },
+ { raw: ':', type: 'separator', stack: [] },
+ { raw: '123', type: 'literal', value: 123, stack: ['q'] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: 'w', type: 'key', value: 'w', stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: ':', type: 'separator', stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: '/*zz*/', type: 'comment', stack: [] },
+ { raw: '\n', type: 'newline', stack: [] },
+ { raw: '\r', type: 'newline', stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: '345', type: 'literal', value: 345, stack: ['w'] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: '}', type: 'separator', stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] } ])
+
+addTest('null /* */// xxx\n//xxx',
+[ { raw: 'null', type: 'literal', value: null, stack: [] },
+ { raw: ' ', type: 'whitespace', stack: [] },
+ { raw: '/* */', type: 'comment', stack: [] },
+ { raw: '// xxx', type: 'comment', stack: [] },
+ { raw: '\n', type: 'newline', stack: [] },
+ { raw: '//xxx', type: 'comment', stack: [] } ])
+
+addTest('[1,2,[[],[1]],{},{1:2},{q:{q:{}}},]',
+[ { raw: '[', type: 'separator', stack: [] },
+ { raw: '1', type: 'literal', value: 1, stack: [0] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: '2', type: 'literal', value: 2, stack: [1] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: '[', type: 'separator', stack: [2] },
+ { raw: '[', type: 'separator', stack: [2,0] },
+ { raw: ']', type: 'separator', stack: [2,0] },
+ { raw: ',', type: 'separator', stack: [2] },
+ { raw: '[', type: 'separator', stack: [2,1] },
+ { raw: '1', type: 'literal', value: 1, stack: [2,1,0] },
+ { raw: ']', type: 'separator', stack: [2,1] },
+ { raw: ']', type: 'separator', stack: [2] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: '{', type: 'separator', stack: [3] },
+ { raw: '}', type: 'separator', stack: [3] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: '{', type: 'separator', stack: [4] },
+ { raw: '1', type: 'key', value: 1, stack: [4] },
+ { raw: ':', type: 'separator', stack: [4] },
+ { raw: '2', type: 'literal', value: 2, stack: [4,'1'] },
+ { raw: '}', type: 'separator', stack: [4] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: '{', type: 'separator', stack: [5] },
+ { raw: 'q', type: 'key', value: 'q', stack: [5] },
+ { raw: ':', type: 'separator', stack: [5] },
+ { raw: '{', type: 'separator', stack: [5,'q'] },
+ { raw: 'q', type: 'key', value: 'q', stack: [5,'q'] },
+ { raw: ':', type: 'separator', stack: [5,'q'] },
+ { raw: '{', type: 'separator', stack: [5,'q','q'] },
+ { raw: '}', type: 'separator', stack: [5,'q','q'] },
+ { raw: '}', type: 'separator', stack: [5,'q'] },
+ { raw: '}', type: 'separator', stack: [5] },
+ { raw: ',', type: 'separator', stack: [] },
+ { raw: ']', type: 'separator', stack: [] } ])
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_updates.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_updates.js
new file mode 100644
index 0000000000..560f33692a
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/test_updates.js
@@ -0,0 +1,21 @@
+var assert = require('assert')
+var FS = require('fs')
+var YAML = require('js-yaml')
+var jju = require('../')
+
+function addTest(name, fn) {
+ if (typeof(describe) === 'function') {
+ it(name, fn)
+ } else {
+ fn()
+ }
+}
+
+FS.readdirSync(__dirname + '/update').filter(function(file) {
+ return file.match(/^[^\.].*\.yaml$/)
+}).forEach(function(file) {
+ addTest('update: ' + file, function() {
+ var test = YAML.load(FS.readFileSync(__dirname + '/update/' + file, 'utf8'))
+ assert.strictEqual(test.test(jju, test.input), test.output)
+ })
+})
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/author.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/author.yaml
new file mode 100644
index 0000000000..b991dc9a0d
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/author.yaml
@@ -0,0 +1,30 @@
+input: |
+ { "name": "just-a-demo",
+ "version": "0.1.2",
+ "description": "blahblahblah",
+ "main": "test.js",
+ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" },
+ "author": "John Doe <whoever@google.com>",
+ "license": "BSD-2-Clause" }
+
+output: |
+ { "name": "just-a-demo",
+ "version": "0.1.2",
+ "description": "blahblahblah",
+ "main": "test.js",
+ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" },
+ "author": {
+ "name": "John Doe",
+ "email": "whoever@google.com"
+ },
+ "license": "BSD-2-Clause" }
+
+test: !!js/function |
+ function(jju, input) {
+ obj = jju.parse(input)
+ obj.author = {
+ name: 'John Doe',
+ email: 'whoever@google.com',
+ }
+ return jju.update(input, obj)
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/deep-object.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/deep-object.yaml
new file mode 100644
index 0000000000..1bc1681c88
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/deep-object.yaml
@@ -0,0 +1,35 @@
+input: |
+ {
+ "foo": {
+ "bar": {
+ "baz": {
+ "quux": "4"
+ }
+ }
+ }
+ }
+
+output: |
+ {
+ "foo": {
+ "bar": {
+ "baz": {
+ "quux": "4"
+ },
+ "qwe": {
+ "rty": {
+ "aaa": {
+ "bbb": 1
+ }
+ }
+ }
+ }
+ }
+ }
+
+test: !!js/function |
+ function(jju, input) {
+ obj = jju.parse(input)
+ obj.foo.bar.qwe = {rty: {aaa: {bbb: 1}}}
+ return jju.update(input, obj, {mode:'json'})
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/delete.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/delete.yaml
new file mode 100644
index 0000000000..c388332138
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/delete.yaml
@@ -0,0 +1,35 @@
+input: |
+ {
+ "name": "test",
+ "version": "0.0.0",
+ "dependencies": {
+ "foo": "1.2.x",
+ "bar": ">= 1"
+ },
+ "bundleDependencies": [
+ "foo",
+ "bar"
+ ],
+ "license": "BSD-2-Clause"
+ }
+
+output: |
+ {
+ "name": "test",
+ "version": "0.0.0",
+ "dependencies": {
+ "foo": "1.2.x"
+ },
+ "bundleDependencies": [
+ "foo"
+ ],
+ "license": "BSD-2-Clause"
+ }
+
+test: !!js/function |
+ function(jju, input) {
+ obj = jju.parse(input)
+ obj.bundleDependencies.pop()
+ delete obj.dependencies.bar
+ return jju.update(input, obj, {mode:'json'})
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-array.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-array.yaml
new file mode 100644
index 0000000000..1a67db77ae
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-array.yaml
@@ -0,0 +1,31 @@
+input: |
+ {
+ "name": "test",
+ "version": "0.0.0",
+ "bundleDependencies": [
+ "foo",
+ "bar"
+ ],
+ "license": "BSD-2-Clause"
+ }
+
+output: |
+ {
+ "name": "test",
+ "version": "0.0.0",
+ "bundleDependencies": [
+ "foo",
+ "bar",
+ "baz",
+ "quux"
+ ],
+ "license": "BSD-2-Clause"
+ }
+
+test: !!js/function |
+ function(jju, input) {
+ obj = jju.parse(input)
+ obj.bundleDependencies.push('baz')
+ obj.bundleDependencies.push('quux')
+ return jju.update(input, obj, {mode:'json'})
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-object.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-object.yaml
new file mode 100644
index 0000000000..1734f738e3
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/norm-object.yaml
@@ -0,0 +1,31 @@
+input: |
+ {
+ "name": "test",
+ "version": "0.0.0",
+ "dependencies": {
+ "foobar": "*",
+ "bazquux": ">= 1.1.1"
+ },
+ "license": "BSD-2-Clause"
+ }
+
+output: |
+ {
+ "name": "test",
+ "version": "0.0.0",
+ "dependencies": {
+ "foobar": "*",
+ "bazquux": ">= 1.1.1",
+ "whatever": "1.2.x",
+ "qwerty": "1"
+ },
+ "license": "BSD-2-Clause"
+ }
+
+test: !!js/function |
+ function(jju, input) {
+ obj = jju.parse(input)
+ obj.dependencies.whatever = '1.2.x'
+ obj.dependencies.qwerty = '1'
+ return jju.update(input, obj, {mode:'json'})
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/npm-array-bin.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/npm-array-bin.yaml
new file mode 100644
index 0000000000..9308007e48
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/npm-array-bin.yaml
@@ -0,0 +1,28 @@
+input: |
+ { "name":"npm-test-array-bin"
+ , "version":"1.2.5"
+ , "bin": [ "bin/array-bin" ]
+ , "scripts": { "test": "node test.js" } }
+
+# less than ideal, I know...
+output: |
+ { "name":"npm-test-array-bin"
+ , "version":"1.2.5"
+ , "bin": {"array-bin":"bin/array-bin"}
+ , "scripts": { "test": "node test.js" }, "readme": "just an npm test\n", "readmeFilename": "README", "description": "just an npm test", "_id": "npm-test-array-bin@1.2.5", "dist": {"shasum":"9c426a1bd55e98718ab4ddcc01fa57ea83c649f1"}, "_from": "npm-test-array-bin/" }
+
+test: !!js/function |
+ function(jju, input) {
+ obj =
+ { name: 'npm-test-array-bin',
+ version: '1.2.5',
+ bin: { 'array-bin': 'bin/array-bin' },
+ scripts: { test: 'node test.js' },
+ readme: 'just an npm test\n',
+ readmeFilename: 'README',
+ description: 'just an npm test',
+ _id: 'npm-test-array-bin@1.2.5',
+ dist: { shasum: '9c426a1bd55e98718ab4ddcc01fa57ea83c649f1' },
+ _from: 'npm-test-array-bin/' }
+ return jju.update(input, obj)
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/pkg-json5.yaml b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/pkg-json5.yaml
new file mode 100644
index 0000000000..5721f41ac7
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/node_modules/jju/test/update/pkg-json5.yaml
@@ -0,0 +1,35 @@
+input: |
+ // vim:syntax=javascript
+ {
+ name: 'yapm',
+ version: '1.1.0-1325', // upstream npm@1.3.25
+ description: 'A package manager for node (npm fork)',
+ }
+
+output: |
+ // vim:syntax=javascript
+ {
+ name: 'yapm',
+ version: '1.1.0-1325', // upstream npm@1.3.25
+ description: 'A package manager for node (npm fork)',
+ _id: 'yapm@1.1.0-1325',
+ dist: {
+ shasum: 'd5aa31c1ad00c1e7e57e07cea1b22c1806a47111',
+ },
+ _from: './zzz',
+ }
+
+test: !!js/function |
+ function(jju, input) {
+ var upd = {
+ "name": "yapm",
+ "version": "1.1.0-1325",
+ "description": "A package manager for node (npm fork)",
+ "_id": "yapm@1.1.0-1325",
+ "dist": {
+ "shasum": "d5aa31c1ad00c1e7e57e07cea1b22c1806a47111"
+ },
+ "_from": "./zzz"
+ }
+ return jju.update(input, upd)
+ }
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/package.json b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/package.json
new file mode 100644
index 0000000000..9ebc2ff8a6
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "json-parse-helpfulerror",
+ "version": "1.0.3",
+ "description": "A drop-in replacement for JSON.parse that uses `jju` to give helpful errors",
+ "main": "index.js",
+ "scripts": {
+ "test": "lab -c",
+ "lint": "jslint --edition=latest --terse *.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/smikes/json-parse-helpfulerror.git"
+ },
+ "keywords": [
+ "json",
+ "parse",
+ "line",
+ "doublequote",
+ "error"
+ ],
+ "author": {
+ "name": "Sam Mikes",
+ "email": "smikes@cubane.com"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/smikes/json-parse-helpfulerror/issues"
+ },
+ "homepage": "https://github.com/smikes/json-parse-helpfulerror",
+ "devDependencies": {
+ "code": "^1.2.1",
+ "jslint": "^0.7.1",
+ "lab": "^5.1.1"
+ },
+ "dependencies": {
+ "jju": "^1.1.0"
+ },
+ "gitHead": "eedb116ec96b5c479be3919b526d6de0a521be5e",
+ "_id": "json-parse-helpfulerror@1.0.3",
+ "_shasum": "13f14ce02eed4e981297b64eb9e3b932e2dd13dc",
+ "_from": "json-parse-helpfulerror@>=1.0.2 <2.0.0",
+ "_npmVersion": "2.1.16",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "smikes",
+ "email": "smikes@cubane.com"
+ },
+ "maintainers": [
+ {
+ "name": "smikes",
+ "email": "smikes@cubane.com"
+ }
+ ],
+ "dist": {
+ "shasum": "13f14ce02eed4e981297b64eb9e3b932e2dd13dc",
+ "tarball": "http://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/test/test.js b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/test/test.js
new file mode 100644
index 0000000000..fca458ac08
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/node_modules/json-parse-helpfulerror/test/test.js
@@ -0,0 +1,32 @@
+var Code = require('code'),
+ Lab = require('lab'),
+ lab = Lab.script(),
+ jph = require('..'); // 'json-parse-helpfulerror'
+
+exports.lab = lab;
+
+lab.test('can parse', function (done) {
+ var o = jph.parse('{"foo": "bar"}');
+
+ Code.expect(o.foo).to.equal('bar');
+ done();
+});
+
+lab.test('helpful error for bad JSON', function (done) {
+
+ var bad = "{'foo': 'bar'}";
+
+ Code.expect(function () { JSON.parse(bad) }).to.throw();
+
+ Code.expect(function () { jph.parse(bad) }).to.throw(SyntaxError, "Unexpected token '\\'' at 1:2\n" + bad + '\n ^');
+
+ done();
+});
+
+lab.test('fails if reviver throws', function (done) {
+ function badReviver() { throw new ReferenceError('silly'); }
+
+ Code.expect(function () { jph.parse('3', badReviver) }).to.throw(ReferenceError, 'silly');
+
+ done();
+}); \ No newline at end of file
diff --git a/deps/npm/node_modules/read-package-json/package.json b/deps/npm/node_modules/read-package-json/package.json
index 3c2ff0ff80..143d6d7396 100644
--- a/deps/npm/node_modules/read-package-json/package.json
+++ b/deps/npm/node_modules/read-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "read-package-json",
- "version": "1.3.1",
+ "version": "1.3.2",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
@@ -19,27 +19,28 @@
"github-url-from-git": "^1.3.0",
"github-url-from-username-repo": "~1.0.0",
"glob": "^4.0.2",
+ "json-parse-helpfulerror": "^1.0.2",
"lru-cache": "2",
"normalize-package-data": "^1.0.0",
"graceful-fs": "2 || 3"
},
"devDependencies": {
- "tap": "~0.2.5"
+ "tap": "^0.7.1"
},
"optionalDependencies": {
"graceful-fs": "2 || 3"
},
"license": "ISC",
- "gitHead": "59011e6b660cf0cc916646a08955c12a8f990174",
+ "gitHead": "d307d827f1a4f13a3a8bc4d747bb854779ad35c8",
"bugs": {
"url": "https://github.com/isaacs/read-package-json/issues"
},
"homepage": "https://github.com/isaacs/read-package-json",
- "_id": "read-package-json@1.3.1",
- "_shasum": "5a965f9fc34b25ffa5e0d93b1d0fc063af6d10b0",
- "_from": "read-package-json@1.3.1",
- "_npmVersion": "2.5.1",
- "_nodeVersion": "0.12.0",
+ "_id": "read-package-json@1.3.2",
+ "_shasum": "5228bc7ad1f33ded75184ece48710036101affa2",
+ "_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"
@@ -55,9 +56,10 @@
}
],
"dist": {
- "shasum": "5a965f9fc34b25ffa5e0d93b1d0fc063af6d10b0",
- "tarball": "http://registry.npmjs.org/read-package-json/-/read-package-json-1.3.1.tgz"
+ "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.1.tgz"
+ "_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/read-package-json/read-json.js b/deps/npm/node_modules/read-package-json/read-json.js
index 863f8e8e32..98ab9f16d2 100644
--- a/deps/npm/node_modules/read-package-json/read-json.js
+++ b/deps/npm/node_modules/read-package-json/read-json.js
@@ -14,6 +14,7 @@ readJson.cache = new LRU({max: 1000})
var path = require("path")
var glob = require("glob")
var normalizeData = require("normalize-package-data")
+var jsonparse = require("json-parse-helpfulerror")
// put more stuff on here to customize.
readJson.extraSet = [
@@ -79,7 +80,7 @@ function parseJson (file, er, d, log, strict, cb) {
}
if (er) return cb(er);
try {
- d = JSON.parse(stripBOM(d))
+ d = jsonparse.parse(stripBOM(d))
} catch (er) {
d = parseIndex(d)
if (!d) return cb(parseError(er, file));
@@ -395,7 +396,7 @@ function parseIndex (data) {
data = data[0]
data = data.replace(/^\s*\*/mg, "")
try {
- return JSON.parse(data)
+ return jsonparse.parse(data)
} catch (er) {
return null
}
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/emptybin.json b/deps/npm/node_modules/read-package-json/test/fixtures/emptybin.json
index ef926f04d3..5e12ed4e9a 100644
--- a/deps/npm/node_modules/read-package-json/test/fixtures/emptybin.json
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/emptybin.json
@@ -1,5 +1,5 @@
{
- "name": "badbin-test",
+ "name": "emptybin-test",
"description": "my desc",
"repository": {
"type": "git",
diff --git a/deps/npm/node_modules/read-package-json/test/fixtures/erroneous.json b/deps/npm/node_modules/read-package-json/test/fixtures/erroneous.json
new file mode 100644
index 0000000000..212e37ec86
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/fixtures/erroneous.json
@@ -0,0 +1,4 @@
+{
+ 'wrong': 'kind',
+ 'of': 'quotes'
+}
diff --git a/deps/npm/node_modules/read-package-json/test/helpful.js b/deps/npm/node_modules/read-package-json/test/helpful.js
new file mode 100644
index 0000000000..579b558d0c
--- /dev/null
+++ b/deps/npm/node_modules/read-package-json/test/helpful.js
@@ -0,0 +1,17 @@
+// vim: set softtabstop=16 shiftwidth=16:
+var tap = require("tap")
+var readJson = require("../")
+var path = require("path")
+var fs = require("fs")
+var p = path.resolve(__dirname, "fixtures/erroneous.json")
+
+var expect = {}
+
+console.error("readme test")
+tap.test("readme test", function (t) {
+ readJson(p, function (er, data) {
+ t.ok(er instanceof Error)
+ t.ok(er.message.match(/Unexpected token '\\''/))
+ t.end()
+ })
+})
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
new file mode 100644
index 0000000000..8538b419c1
--- /dev/null
+++ b/deps/npm/node_modules/request/.eslintrc
@@ -0,0 +1,39 @@
+{
+ "env": {
+ "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
+ "quotes": [2, "single"],
+ // Require curly braces for all control statements
+ "curly": 2,
+ // Disallow using variables and functions before they've been defined
+ "no-use-before-define": 2,
+ // Allow any case for variable naming
+ "camelcase": 0,
+ // Disallow unused variables, except as function arguments
+ "no-unused-vars": [2, {"args":"none"}],
+ // Allow leading underscores for method names
+ // REASON: we use underscores to denote private methods
+ "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/isstream/.jshintrc b/deps/npm/node_modules/request/node_modules/isstream/.jshintrc
new file mode 100644
index 0000000000..c8ef3ca409
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/isstream/.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/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/AUTHORS b/deps/npm/node_modules/rimraf/AUTHORS
deleted file mode 100644
index 247b754373..0000000000
--- a/deps/npm/node_modules/rimraf/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-# Authors sorted by whether or not they're me.
-Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)
-Wayne Larsen <wayne@larsen.st> (http://github.com/wvl)
-ritch <skawful@gmail.com>
-Marcel Laverdet
-Yosef Dinerstein <yosefd@microsoft.com>
diff --git a/deps/npm/node_modules/rimraf/README.md b/deps/npm/node_modules/rimraf/README.md
index cd123b6524..c178dedc34 100644
--- a/deps/npm/node_modules/rimraf/README.md
+++ b/deps/npm/node_modules/rimraf/README.md
@@ -1,4 +1,4 @@
-`rm -rf` for node.
+The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.
Install with `npm install rimraf`, or just drop rimraf.js somewhere.
@@ -10,9 +10,15 @@ The callback will be called with an error if there is one. Certain
errors are handled for you:
* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
- `opts.maxBusyTries` times before giving up.
+ `opts.maxBusyTries` times before giving up, adding 100ms of wait
+ between each attempt. The default `maxBusyTries` is 3.
* `ENOENT` - If the file doesn't exist, rimraf will return
successfully, since your desired outcome is already the case.
+* `EMFILE` - Since `readdir` requires opening a file descriptor, it's
+ possible to hit `EMFILE` if too many file descriptors are in use.
+ In the sync case, there's nothing to be done for this. But in the
+ async case, rimraf will gradually back off with timeouts up to
+ `opts.emfileWait` ms, which defaults to 1000.
## rimraf.sync
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<String>} filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` {String} Pattern to be matched
+* `options` {Object}
+* return: {Array<String>} 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<String>} 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 {<filename>: 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/node_modules/rimraf/package.json b/deps/npm/node_modules/rimraf/package.json
index 164fc495a4..9f836e9304 100644
--- a/deps/npm/node_modules/rimraf/package.json
+++ b/deps/npm/node_modules/rimraf/package.json
@@ -1,6 +1,6 @@
{
"name": "rimraf",
- "version": "2.2.8",
+ "version": "2.3.2",
"main": "rimraf.js",
"description": "A deep deletion module for node (like `rm -rf`)",
"author": {
@@ -22,37 +22,25 @@
"bin": {
"rimraf": "./bin.js"
},
- "contributors": [
- {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me"
- },
- {
- "name": "Wayne Larsen",
- "email": "wayne@larsen.st",
- "url": "http://github.com/wvl"
- },
- {
- "name": "ritch",
- "email": "skawful@gmail.com"
- },
- {
- "name": "Marcel Laverdet"
- },
- {
- "name": "Yosef Dinerstein",
- "email": "yosefd@microsoft.com"
- }
+ "dependencies": {
+ "glob": "^4.4.2"
+ },
+ "files": [
+ "bin.js",
+ "rimraf.js",
+ "LICENSE",
+ "README.md"
],
+ "gitHead": "9d5ab4a8b6986ec909af04f6d91315e98f5893e8",
"bugs": {
"url": "https://github.com/isaacs/rimraf/issues"
},
"homepage": "https://github.com/isaacs/rimraf",
- "_id": "rimraf@2.2.8",
- "_shasum": "e439be2aaee327321952730f99a8929e4fc50582",
- "_from": "rimraf@latest",
- "_npmVersion": "1.4.10",
+ "_id": "rimraf@2.3.2",
+ "_shasum": "7304bd9275c401b89103b106b3531c1ef0c02fe9",
+ "_from": "rimraf@>=2.3.2 <2.4.0",
+ "_npmVersion": "2.7.0",
+ "_nodeVersion": "1.4.2",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -64,10 +52,10 @@
}
],
"dist": {
- "shasum": "e439be2aaee327321952730f99a8929e4fc50582",
- "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
+ "shasum": "7304bd9275c401b89103b106b3531c1ef0c02fe9",
+ "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/rimraf/rimraf.js b/deps/npm/node_modules/rimraf/rimraf.js
index eb96c46afd..c189d5444d 100644
--- a/deps/npm/node_modules/rimraf/rimraf.js
+++ b/deps/npm/node_modules/rimraf/rimraf.js
@@ -4,11 +4,17 @@ rimraf.sync = rimrafSync
var assert = require("assert")
var path = require("path")
var fs = require("fs")
+var glob = require("glob")
+
+var globOpts = {
+ nosort: true,
+ nocomment: true,
+ nonegate: true,
+ silent: true
+}
// for EMFILE handling
var timeout = 0
-exports.EMFILE_MAX = 1000
-exports.BUSYTRIES_MAX = 3
var isWindows = (process.platform === "win32")
@@ -17,6 +23,7 @@ function defaults (options) {
'unlink',
'chmod',
'stat',
+ 'lstat',
'rmdir',
'readdir'
]
@@ -25,6 +32,9 @@ function defaults (options) {
m = m + 'Sync'
options[m] = options[m] || fs[m]
})
+
+ options.maxBusyTries = options.maxBusyTries || 3
+ options.emfileWait = options.emfileWait || 1000
}
function rimraf (p, options, cb) {
@@ -41,32 +51,62 @@ function rimraf (p, options, cb) {
if (!cb) throw new Error("No callback passed to rimraf()")
var busyTries = 0
- rimraf_(p, options, function CB (er) {
- if (er) {
- if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
- busyTries < exports.BUSYTRIES_MAX) {
- busyTries ++
- var time = busyTries * 100
- // try again, with the same exact callback as this one.
- return setTimeout(function () {
- rimraf_(p, options, CB)
- }, time)
- }
+ var errState = null
+ var n = 0
- // this one won't happen if graceful-fs is used.
- if (er.code === "EMFILE" && timeout < exports.EMFILE_MAX) {
- return setTimeout(function () {
- rimraf_(p, options, CB)
- }, timeout ++)
- }
+ if (!glob.hasMagic(p))
+ return afterGlob(null, [p])
- // already gone
- if (er.code === "ENOENT") er = null
- }
+ fs.lstat(p, function (er, stat) {
+ if (!er)
+ return afterGlob(null, [p])
- timeout = 0
- cb(er)
+ glob(p, globOpts, afterGlob)
})
+
+ function next (er) {
+ errState = errState || er
+ if (--n === 0)
+ cb(errState)
+ }
+
+ function afterGlob (er, results) {
+ if (er)
+ return cb(er)
+
+ n = results.length
+ if (n === 0)
+ return cb()
+
+ results.forEach(function (p) {
+ rimraf_(p, options, function CB (er) {
+ if (er) {
+ if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
+ busyTries < options.maxBusyTries) {
+ busyTries ++
+ var time = busyTries * 100
+ // try again, with the same exact callback as this one.
+ return setTimeout(function () {
+ rimraf_(p, options, CB)
+ }, time)
+ }
+
+ // this one won't happen if graceful-fs is used.
+ if (er.code === "EMFILE" && timeout < options.emfileWait) {
+ return setTimeout(function () {
+ rimraf_(p, options, CB)
+ }, timeout ++)
+ }
+
+ // already gone
+ if (er.code === "ENOENT") er = null
+ }
+
+ timeout = 0
+ next(er)
+ })
+ })
+ }
}
// Two possible strategies.
@@ -85,18 +125,28 @@ function rimraf_ (p, options, cb) {
assert(options)
assert(typeof cb === 'function')
- options.unlink(p, function (er) {
- if (er) {
- if (er.code === "ENOENT")
- return cb(null)
- if (er.code === "EPERM")
- return (isWindows)
- ? fixWinEPERM(p, options, er, cb)
- : rmdir(p, options, er, cb)
- if (er.code === "EISDIR")
- return rmdir(p, options, er, cb)
- }
- return cb(er)
+ // sunos lets the root user unlink directories, which is... weird.
+ // so we have to lstat here and make sure it's not a dir.
+ options.lstat(p, function (er, st) {
+ if (er && er.code === "ENOENT")
+ return cb(null)
+
+ if (st && st.isDirectory())
+ return rmdir(p, options, er, cb)
+
+ options.unlink(p, function (er) {
+ if (er) {
+ if (er.code === "ENOENT")
+ return cb(null)
+ if (er.code === "EPERM")
+ return (isWindows)
+ ? fixWinEPERM(p, options, er, cb)
+ : rmdir(p, options, er, cb)
+ if (er.code === "EISDIR")
+ return rmdir(p, options, er, cb)
+ }
+ return cb(er)
+ })
})
}
@@ -207,16 +257,47 @@ function rimrafSync (p, options) {
assert(p)
assert(options)
- try {
- options.unlinkSync(p)
- } catch (er) {
- if (er.code === "ENOENT")
- return
- if (er.code === "EPERM")
- return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
- if (er.code !== "EISDIR")
- throw er
- rmdirSync(p, options, er)
+ var results
+
+ if (!glob.hasMagic(p)) {
+ results = [p]
+ } else {
+ try {
+ fs.lstatSync(p)
+ results = [p]
+ } catch (er) {
+ results = glob.sync(p, globOpts)
+ }
+ }
+
+ if (!results.length)
+ return
+
+ for (var i = 0; i < results.length; i++) {
+ var p = results[i]
+
+ try {
+ var st = options.lstatSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ }
+
+ try {
+ // sunos lets the root user unlink directories, which is... weird.
+ if (st && st.isDirectory())
+ rmdirSync(p, options, null)
+ else
+ options.unlinkSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ if (er.code === "EPERM")
+ return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
+ if (er.code !== "EISDIR")
+ throw er
+ rmdirSync(p, options, er)
+ }
}
}
diff --git a/deps/npm/node_modules/rimraf/test/run.sh b/deps/npm/node_modules/rimraf/test/run.sh
deleted file mode 100644
index 653ff9b798..0000000000
--- a/deps/npm/node_modules/rimraf/test/run.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-set -e
-code=0
-for i in test-*.js; do
- echo -n $i ...
- bash setup.sh
- node $i
- if [ -d target ]; then
- echo "fail"
- code=1
- else
- echo "pass"
- fi
-done
-rm -rf target
-exit $code
diff --git a/deps/npm/node_modules/rimraf/test/setup.sh b/deps/npm/node_modules/rimraf/test/setup.sh
deleted file mode 100644
index 2602e63160..0000000000
--- a/deps/npm/node_modules/rimraf/test/setup.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-
-set -e
-
-files=10
-folders=2
-depth=4
-target="$PWD/target"
-
-rm -rf target
-
-fill () {
- local depth=$1
- local files=$2
- local folders=$3
- local target=$4
-
- if ! [ -d $target ]; then
- mkdir -p $target
- fi
-
- local f
-
- f=$files
- while [ $f -gt 0 ]; do
- touch "$target/f-$depth-$f"
- let f--
- done
-
- let depth--
-
- if [ $depth -le 0 ]; then
- return 0
- fi
-
- f=$folders
- while [ $f -gt 0 ]; do
- mkdir "$target/folder-$depth-$f"
- fill $depth $files $folders "$target/d-$depth-$f"
- let f--
- done
-}
-
-fill $depth $files $folders $target
-
-# sanity assert
-[ -d $target ]
diff --git a/deps/npm/node_modules/rimraf/test/test-async.js b/deps/npm/node_modules/rimraf/test/test-async.js
deleted file mode 100644
index 9c2e0b7be0..0000000000
--- a/deps/npm/node_modules/rimraf/test/test-async.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var rimraf = require("../rimraf")
- , path = require("path")
-rimraf(path.join(__dirname, "target"), function (er) {
- if (er) throw er
-})
diff --git a/deps/npm/node_modules/rimraf/test/test-sync.js b/deps/npm/node_modules/rimraf/test/test-sync.js
deleted file mode 100644
index eb71f10476..0000000000
--- a/deps/npm/node_modules/rimraf/test/test-sync.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var rimraf = require("../rimraf")
- , path = require("path")
-rimraf.sync(path.join(__dirname, "target"))
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 9a7a13b33d..0a75480c7a 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "2.7.0",
+ "version": "2.7.4",
"name": "npm",
"description": "a package manager for JavaScript",
"keywords": [
@@ -50,41 +50,42 @@
"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.1",
- "graceful-fs": "~3.0.5",
+ "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",
"init-package-json": "~1.3.0",
"lockfile": "~1.0.0",
"lru-cache": "~2.5.0",
- "minimatch": "~2.0.1",
+ "minimatch": "~2.0.4",
"mkdirp": "~0.5.0",
- "node-gyp": "~1.0.2",
+ "node-gyp": "~1.0.3",
"nopt": "~3.0.1",
"normalize-git-url": "~1.0.0",
"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",
"path-is-inside": "~1.0.0",
"read": "~1.0.4",
"read-installed": "~3.1.5",
- "read-package-json": "~1.3.1",
+ "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.2.8",
+ "rimraf": "~2.3.2",
"semver": "~4.3.1",
"sha": "~1.3.0",
"slide": "~1.1.6",
@@ -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": "~0.59.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",
@@ -179,7 +181,7 @@
"test": "tap --timeout 120 test/tap/*.js",
"tap": "tap --timeout 120 test/tap/*.js",
"test-all": "node ./test/run.js && tap test/tap/*.js",
- "prepublish": "node bin/npm-cli.js prune --prefix=. --no-global && rm -rf test/*/*/node_modules && make -j8 doc",
+ "prepublish": "node bin/npm-cli.js prune --prefix=. --no-global && rimraf test/*/*/node_modules && make -j8 doc",
"dumpconf": "env | grep npm | sort | uniq"
},
"license": "Artistic-2.0"
diff --git a/deps/npm/scripts/update-authors.sh b/deps/npm/scripts/update-authors.sh
index 8708e240ed..326d21cc8c 100755
--- a/deps/npm/scripts/update-authors.sh
+++ b/deps/npm/scripts/update-authors.sh
@@ -1,20 +1,18 @@
#!/bin/sh
-git log --reverse --format='%aN <%aE>' | awk '
+git log --reverse --format='%aN <%aE>' | perl -we '
+
BEGIN {
- print "# Authors sorted by whether or not they'\''re me";
+ %seen = (), @authors = ();
}
-{
- if (all[$NF] != 1) {
- all[$NF] = 1;
- ordered[length(all)] = $0;
- }
+while (<>) {
+ next if $seen{$_};
+ $seen{$_} = push @authors, $_;
}
END {
- for (i in ordered) {
- print ordered[i];
- }
+ print "# Authors sorted by whether or not they'\''re me\n";
+ print @authors;
}
-' > AUTHORS \ No newline at end of file
+' > AUTHORS
diff --git a/deps/npm/test/tap/add-remote-git-fake-windows.js b/deps/npm/test/tap/add-remote-git-fake-windows.js
index 3052477927..b665f752ac 100644
--- a/deps/npm/test/tap/add-remote-git-fake-windows.js
+++ b/deps/npm/test/tap/add-remote-git-fake-windows.js
@@ -58,7 +58,7 @@ var pjParent = JSON.stringify({
name : "parent",
version : "1.2.3",
dependencies : {
- "child" : "git://localhost:1234/child.git"
+ "child" : "git://localhost:1233/child.git"
}
}, null, 2) + "\n"
@@ -93,7 +93,7 @@ function setup (cb) {
"--listen=localhost",
"--export-all",
"--base-path=.",
- "--port=1234"
+ "--port=1233"
],
{
cwd : pkg,
diff --git a/deps/npm/test/tap/add-remote-git-shrinkwrap.js b/deps/npm/test/tap/add-remote-git-shrinkwrap.js
new file mode 100644
index 0000000000..555dca2131
--- /dev/null
+++ b/deps/npm/test/tap/add-remote-git-shrinkwrap.js
@@ -0,0 +1,171 @@
+var fs = require('fs')
+var resolve = require('path').resolve
+
+var chain = require('slide').chain
+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 pkg = resolve(__dirname, 'add-remote-git-shrinkwrap')
+var repo = resolve(__dirname, 'add-remote-git-shrinkwrap-repo')
+
+var daemon
+var daemonPID
+var git
+
+test('setup', function (t) {
+ bootstrap()
+ setup(function (er, r) {
+ t.ifError(er, 'git started up successfully')
+
+ if (!er) {
+ daemon = r[r.length - 2]
+ daemonPID = r[r.length - 1]
+ }
+
+ t.end()
+ })
+})
+
+test('install from repo', function (t) {
+ process.chdir(pkg)
+ npm.commands.install('.', [], function (er) {
+ t.ifError(er, 'npm installed via git')
+
+ t.end()
+ })
+})
+
+test('shrinkwrap gets correct _from and _resolved (#7121)', function (t) {
+ common.npm(
+ [
+ 'shrinkwrap',
+ '--loglevel', 'silent'
+ ],
+ { cwd: pkg },
+ function (er, code, stdout, stderr) {
+ t.ifError(er, 'npm shrinkwrapped without errors')
+ t.notOk(code, '`npm shrinkwrap` exited with 0')
+ t.equal(stdout.trim(), 'wrote npm-shrinkwrap.json')
+ t.notOk(stderr, 'no error output on successful shrinkwrap')
+
+ var shrinkwrap = require(resolve(pkg, 'npm-shrinkwrap.json'))
+ t.equal(
+ shrinkwrap.dependencies.child.from,
+ 'git://localhost:1235/child.git#master',
+ 'npm shrinkwrapped from correctly'
+ )
+
+ git.whichAndExec(
+ ['rev-list', '-n1', 'master'],
+ { cwd: repo, env: process.env },
+ function (er, stdout, stderr) {
+ t.ifErr(er, 'git rev-list ran without error')
+ t.notOk(stderr, 'no error output')
+ var treeish = stdout.trim()
+
+ t.equal(
+ shrinkwrap.dependencies.child.resolved,
+ 'git://localhost:1235/child.git#' + treeish,
+ 'npm shrinkwrapped resolved correctly'
+ )
+
+ t.end()
+ }
+ )
+ }
+ )
+})
+
+test('clean', function (t) {
+ daemon.on('close', function () {
+ cleanup()
+ t.end()
+ })
+ process.kill(daemonPID)
+})
+
+var pjParent = JSON.stringify({
+ name: 'parent',
+ version: '1.2.3',
+ dependencies: {
+ 'child': 'git://localhost:1235/child.git#master'
+ }
+}, null, 2) + '\n'
+
+var pjChild = JSON.stringify({
+ name: 'child',
+ version: '1.0.3'
+}, null, 2) + '\n'
+
+function bootstrap () {
+ mkdirp.sync(pkg)
+ fs.writeFileSync(resolve(pkg, 'package.json'), pjParent)
+}
+
+function setup (cb) {
+ mkdirp.sync(repo)
+ fs.writeFileSync(resolve(repo, 'package.json'), pjChild)
+ npm.load({ prefix: pkg, registry: common.registry, loglevel: 'silent' }, function () {
+ git = require('../../lib/utils/git.js')
+
+ function startDaemon (cb) {
+ // start git server
+ var d = git.spawn(
+ [
+ 'daemon',
+ '--verbose',
+ '--listen=localhost',
+ '--export-all',
+ '--base-path=.',
+ '--port=1235'
+ ],
+ {
+ cwd: pkg,
+ env: process.env,
+ stdio: ['pipe', 'pipe', 'pipe']
+ }
+ )
+ d.stderr.on('data', childFinder)
+
+ function childFinder (c) {
+ var cpid = c.toString().match(/^\[(\d+)\]/)
+ if (cpid[1]) {
+ this.removeListener('data', childFinder)
+ cb(null, [d, cpid[1]])
+ }
+ }
+ }
+
+ var opts = {
+ cwd: repo,
+ env: process.env
+ }
+
+ 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(['commit', '-m', 'stub package'], opts),
+ git.chainableExec(
+ ['clone', '--bare', repo, 'child.git'],
+ { cwd: pkg, env: process.env }
+ ),
+ startDaemon
+ ],
+ cb
+ )
+ })
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(repo)
+ rimraf.sync(pkg)
+}
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/config-semver-tag.js b/deps/npm/test/tap/config-semver-tag.js
deleted file mode 100644
index 4ce1cb219e..0000000000
--- a/deps/npm/test/tap/config-semver-tag.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var util = require("util")
-var test = require("tap").test
-var npmconf = require("../../lib/config/core.js")
-var common = require("./00-config-setup.js")
-
-var cli = { tag: "v2.x" }
-
-var log = require("npmlog")
-
-test("tag cannot be a SemVer", function (t) {
- var messages = []
- log.warn = function (m) {
- messages.push(m + " " + util.format.apply(util, [].slice.call(arguments, 1)))
- }
-
- var expect = [
- 'invalid config tag="v2.x"',
- "invalid config Tag must not be a SemVer range"
- ]
-
- npmconf.load(cli, common.builtin, function (er, conf) {
- if (er) throw er
- t.equal(conf.get("tag"), "latest")
- t.same(messages, expect)
- t.end()
- })
-})
diff --git a/deps/npm/test/tap/dedupe-scoped.js b/deps/npm/test/tap/dedupe-scoped.js
new file mode 100644
index 0000000000..dacf405fcf
--- /dev/null
+++ b/deps/npm/test/tap/dedupe-scoped.js
@@ -0,0 +1,146 @@
+var fs = require('fs')
+var join = require('path').join
+
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var test = require('tap').test
+
+var common = require('../common-tap.js')
+var pkg = join(__dirname, 'dedupe-scoped')
+var modules = join(pkg, 'node_modules')
+
+var EXEC_OPTS = { cwd: pkg }
+
+test('setup', function (t) {
+ setup()
+ t.end()
+})
+
+// we like the cars
+function ltrimm (l) { return l.trim() }
+
+test('dedupe finds the common scoped modules and moves it up one level', function (t) {
+ common.npm(
+ [
+ 'find-dupes' // I actually found a use for this command!
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, 'successful dry run against fake install')
+ t.notOk(code, 'npm ran without issue')
+ t.notOk(stderr, 'npm printed no errors')
+ t.same(
+ stdout.trim().split('\n').map(ltrimm),
+ [prolog].concat(body).map(ltrimm),
+ 'got expected output'
+ )
+
+ t.end()
+ }
+ )
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
+
+var prolog = 'dedupe@0.0.0 ' + pkg
+var body = function () {/*
+├─┬ first@1.0.0
+│ └── @scope/shared@2.1.6
+└─┬ second@2.0.0
+ └── @scope/shared@2.1.6
+*/}.toString().split('\n').slice(1, -1)
+
+var deduper = {
+ 'name': 'dedupe',
+ 'version': '0.0.0',
+ 'dependencies': {
+ 'first': '1.0.0',
+ 'second': '2.0.0'
+ }
+}
+
+var first = {
+ 'name': 'first',
+ 'version': '1.0.0',
+ 'dependencies': {
+ 'firstUnique': '0.6.0',
+ '@scope/shared': '2.1.6'
+ }
+}
+
+var second = {
+ 'name': 'second',
+ 'version': '2.0.0',
+ 'dependencies': {
+ 'secondUnique': '1.2.0',
+ '@scope/shared': '2.1.6'
+ }
+}
+
+var shared = {
+ 'name': '@scope/shared',
+ 'version': '2.1.6'
+}
+
+var firstUnique = {
+ 'name': 'firstUnique',
+ 'version': '0.6.0'
+}
+
+var secondUnique = {
+ 'name': 'secondUnique',
+ 'version': '1.2.0'
+}
+
+function setup (cb) {
+ cleanup()
+
+ mkdirp.sync(pkg)
+ fs.writeFileSync(
+ join(pkg, 'package.json'),
+ JSON.stringify(deduper, null, 2)
+ )
+
+ mkdirp.sync(join(modules, 'first'))
+ fs.writeFileSync(
+ join(modules, 'first', 'package.json'),
+ JSON.stringify(first, null, 2)
+ )
+
+ mkdirp.sync(join(modules, 'first', 'node_modules', 'firstUnique'))
+ fs.writeFileSync(
+ join(modules, 'first', 'node_modules', 'firstUnique', 'package.json'),
+ JSON.stringify(firstUnique, null, 2)
+ )
+
+ mkdirp.sync(join(modules, 'first', 'node_modules', '@scope', 'shared'))
+ fs.writeFileSync(
+ join(modules, 'first', 'node_modules', '@scope', 'shared', 'package.json'),
+ JSON.stringify(shared, null, 2)
+ )
+
+ mkdirp.sync(join(modules, 'second'))
+ fs.writeFileSync(
+ join(modules, 'second', 'package.json'),
+ JSON.stringify(second, null, 2)
+ )
+
+ mkdirp.sync(join(modules, 'second', 'node_modules', 'secondUnique'))
+ fs.writeFileSync(
+ join(modules, 'second', 'node_modules', 'secondUnique', 'package.json'),
+ JSON.stringify(secondUnique, null, 2)
+ )
+
+ mkdirp.sync(join(modules, 'second', 'node_modules', '@scope', 'shared'))
+ fs.writeFileSync(
+ join(modules, 'second', 'node_modules', '@scope', 'shared', 'package.json'),
+ JSON.stringify(shared, null, 2)
+ )
+}
+
+function cleanup () {
+ rimraf.sync(pkg)
+}
diff --git a/deps/npm/test/tap/git-dependency-install-link.js b/deps/npm/test/tap/git-dependency-install-link.js
new file mode 100644
index 0000000000..2d382dd560
--- /dev/null
+++ b/deps/npm/test/tap/git-dependency-install-link.js
@@ -0,0 +1,184 @@
+var fs = require('fs')
+var resolve = require('path').resolve
+
+var chain = require('slide').chain
+var osenv = require('osenv')
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var test = require('tap').test
+var readJson = require('read-package-json')
+var mr = require('npm-registry-mock')
+
+var npm = require('../../lib/npm.js')
+var common = require('../common-tap.js')
+
+var pkg = resolve(__dirname, 'git-dependency-install-link')
+var repo = resolve(__dirname, 'git-dependency-install-link-repo')
+var cache = resolve(pkg, 'cache')
+
+var daemon
+var daemonPID
+var git
+var mockRegistry
+
+var EXEC_OPTS = {
+ registry: common.registry,
+ cwd: pkg,
+ cache: cache
+}
+
+test('setup', function (t) {
+ bootstrap()
+ setup(function (er, r) {
+ t.ifError(er, 'git started up successfully')
+
+ if (!er) {
+ daemon = r[r.length - 2]
+ daemonPID = r[r.length - 1]
+ }
+
+ mr({
+ port: common.port
+ }, function (er, server) {
+ t.ifError(er, 'started mock registry')
+ mockRegistry = server
+
+ t.end()
+ })
+ })
+})
+
+test('install from git repo [no --link]', function (t) {
+ process.chdir(pkg)
+
+ common.npm(['install', '--loglevel', 'error'], EXEC_OPTS, function (err, code, stdout, stderr) {
+ t.ifError(err, 'npm install failed')
+
+ t.dissimilar(stderr, /Command failed:/, 'expect git to succeed')
+ t.dissimilar(stderr, /version not found/, 'should not go to repository')
+
+ readJson(resolve(pkg, 'node_modules', 'child', 'package.json'), function (err, data) {
+ t.ifError(err, 'error reading child package.json')
+
+ t.equal(data && data.version, '1.0.3')
+ t.end()
+ })
+ })
+})
+
+test('install from git repo [with --link]', function (t) {
+ process.chdir(pkg)
+ rimraf.sync(resolve(pkg, 'node_modules'))
+
+ common.npm(['install', '--link', '--loglevel', 'error'], EXEC_OPTS, function (err, code, stdout, stderr) {
+ t.ifError(err, 'npm install --link failed')
+
+ t.dissimilar(stderr, /Command failed:/, 'expect git to succeed')
+ t.dissimilar(stderr, /version not found/, 'should not go to repository')
+
+ readJson(resolve(pkg, 'node_modules', 'child', 'package.json'), function (err, data) {
+ t.ifError(err, 'error reading child package.json')
+
+ t.equal(data && data.version, '1.0.3')
+ t.end()
+ })
+ })
+})
+
+test('clean', function (t) {
+ mockRegistry.close()
+ daemon.on('close', function () {
+ cleanup()
+ t.end()
+ })
+ process.kill(daemonPID)
+})
+
+var pjParent = JSON.stringify({
+ name: 'parent',
+ version: '1.2.3',
+ dependencies: {
+ 'child': 'git://localhost:1234/child.git'
+ }
+}, null, 2) + '\n'
+
+var pjChild = JSON.stringify({
+ name: 'child',
+ version: '1.0.3'
+}, null, 2) + '\n'
+
+function bootstrap () {
+ rimraf.sync(repo)
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ mkdirp.sync(cache)
+
+ fs.writeFileSync(resolve(pkg, 'package.json'), pjParent)
+}
+
+function setup (cb) {
+ mkdirp.sync(repo)
+ fs.writeFileSync(resolve(repo, 'package.json'), pjChild)
+ npm.load({
+ link: true,
+ prefix: pkg,
+ loglevel: 'silent'
+ }, function () {
+ git = require('../../lib/utils/git.js')
+
+ function startDaemon (cb) {
+ // start git server
+ var d = git.spawn(
+ [
+ 'daemon',
+ '--verbose',
+ '--listen=localhost',
+ '--export-all',
+ '--base-path=.',
+ '--port=1234'
+ ],
+ {
+ cwd: pkg,
+ env: process.env,
+ stdio: ['pipe', 'pipe', 'pipe']
+ }
+ )
+ d.stderr.on('data', childFinder)
+
+ function childFinder (c) {
+ var cpid = c.toString().match(/^\[(\d+)\]/)
+ if (cpid[1]) {
+ this.removeListener('data', childFinder)
+ cb(null, [d, cpid[1]])
+ }
+ }
+ }
+
+ var opts = {
+ cwd: repo,
+ env: process.env
+ }
+
+ 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(['commit', '-m', 'stub package'], opts),
+ git.chainableExec(
+ ['clone', '--bare', repo, 'child.git'],
+ { cwd: pkg, env: process.env }
+ ),
+ startDaemon
+ ],
+ cb
+ )
+ })
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(repo)
+ rimraf.sync(pkg)
+}
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/publish-invalid-semver-tag.js b/deps/npm/test/tap/publish-invalid-semver-tag.js
new file mode 100644
index 0000000000..1a741d348d
--- /dev/null
+++ b/deps/npm/test/tap/publish-invalid-semver-tag.js
@@ -0,0 +1,79 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../lib/npm.js')
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var path = require('path')
+var fs = require('fs')
+var mr = require('npm-registry-mock')
+
+var osenv = require('osenv')
+
+var PKG_DIR = path.resolve(__dirname, 'publish-invalid-semver-tag')
+var CACHE_DIR = path.resolve(PKG_DIR, 'cache')
+
+var DEFAULT_PKG = {
+ 'name': 'examples',
+ 'version': '1.2.3'
+}
+
+var mockServer
+
+function resetPackage (options) {
+ rimraf.sync(CACHE_DIR)
+ mkdirp.sync(CACHE_DIR)
+
+ fs.writeFileSync(path.resolve(PKG_DIR, 'package.json'), DEFAULT_PKG)
+}
+
+test('setup', function (t) {
+ process.chdir(osenv.tmpdir())
+ mkdirp.sync(PKG_DIR)
+ process.chdir(PKG_DIR)
+
+ resetPackage({})
+
+ mr({ port: common.port }, function (er, server) {
+ npm.load({
+ cache: CACHE_DIR,
+ registry: common.registry,
+ cwd: PKG_DIR
+ }, function (err) {
+ t.ifError(err, 'started server')
+ mockServer = server
+
+ t.end()
+ })
+ })
+})
+
+test('attempt publish with semver-like version', function (t) {
+ resetPackage({})
+
+ npm.config.set('tag', 'v1.x')
+ npm.commands.publish([], function (err) {
+ t.notEqual(err, null)
+ t.same(err.message, 'Tag name must not be a valid SemVer range: v1.x')
+ t.end()
+ })
+})
+
+test('attempt publish with semver-like version', function (t) {
+ resetPackage({})
+
+ npm.config.set('tag', '1.2.3')
+ npm.commands.publish([], function (err) {
+ t.notEqual(err, null)
+ t.same(err.message, 'Tag name must not be a valid SemVer range: 1.2.3')
+ t.end()
+ })
+})
+
+test('cleanup', function (t) {
+ mockServer.close()
+
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(PKG_DIR)
+
+ t.end()
+})
diff --git a/deps/npm/test/tap/shrinkwrap-dev-dependency.js b/deps/npm/test/tap/shrinkwrap-dev-dependency.js
index 14eebf19f1..49421107c3 100644
--- a/deps/npm/test/tap/shrinkwrap-dev-dependency.js
+++ b/deps/npm/test/tap/shrinkwrap-dev-dependency.js
@@ -1,53 +1,78 @@
-var npm = npm = require("../../")
-var test = require("tap").test
-var path = require("path")
-var fs = require("fs")
-var osenv = require("osenv")
-var rimraf = require("rimraf")
-var mr = require("npm-registry-mock")
-var common = require("../common-tap.js")
-
-var pkg = path.resolve(__dirname, "shrinkwrap-dev-dependency")
-var desiredResultsPath = path.resolve(pkg, "desired-shrinkwrap-results.json")
+var fs = require('fs')
+var path = require('path')
+
+var mkdirp = require('mkdirp')
+var mr = require('npm-registry-mock')
+var osenv = require('osenv')
+var rimraf = require('rimraf')
+var test = require('tap').test
+
+var npm = npm = require('../../')
+
+var common = require('../common-tap.js')
+var pkg = path.resolve(__dirname, 'shrinkwrap-dev-dependency')
test("shrinkwrap doesn't strip out the dependency", function (t) {
t.plan(1)
- mr({port : common.port}, function (er, s) {
+ mr({port: common.port}, function (er, s) {
setup({}, function (err) {
if (err) return t.fail(err)
- npm.install(".", function (err) {
+ npm.install('.', function (err) {
if (err) return t.fail(err)
npm.commands.shrinkwrap([], true, function (err, results) {
if (err) return t.fail(err)
- fs.readFile(desiredResultsPath, function (err, desired) {
- if (err) return t.fail(err)
-
- t.deepEqual(results, JSON.parse(desired))
- s.close()
- t.end()
- })
+ t.deepEqual(results, desired)
+ s.close()
+ t.end()
})
})
})
})
})
-test("cleanup", function (t) {
+test('cleanup', function (t) {
cleanup()
t.end()
})
+var desired = {
+ name: 'npm-test-shrinkwrap-dev-dependency',
+ version: '0.0.0',
+ dependencies: {
+ request: {
+ version: '0.9.0'
+ },
+ underscore: {
+ version: '1.3.1'
+ }
+ }
+}
+
+var json = {
+ author: 'Domenic Denicola',
+ name: 'npm-test-shrinkwrap-dev-dependency',
+ version: '0.0.0',
+ dependencies: {
+ request: '0.9.0',
+ underscore: '1.3.1'
+ },
+ devDependencies: {
+ underscore: '1.5.1'
+ }
+}
function setup (opts, cb) {
cleanup()
+ mkdirp.sync(pkg)
+ fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2))
process.chdir(pkg)
var allOpts = {
- cache: path.resolve(pkg, "cache"),
+ cache: path.resolve(pkg, 'cache'),
registry: common.registry
}
@@ -60,7 +85,5 @@ function setup (opts, cb) {
function cleanup () {
process.chdir(osenv.tmpdir())
- rimraf.sync(path.resolve(pkg, "node_modules"))
- rimraf.sync(path.resolve(pkg, "cache"))
- rimraf.sync(path.resolve(pkg, "npm-shrinkwrap.json"))
+ rimraf.sync(pkg)
}
diff --git a/deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json b/deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json
deleted file mode 100644
index 7f87e833e4..0000000000
--- a/deps/npm/test/tap/shrinkwrap-dev-dependency/desired-shrinkwrap-results.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "npm-test-shrinkwrap-dev-dependency",
- "version": "0.0.0",
- "dependencies": {
- "request": {
- "version": "0.9.0"
- },
- "underscore": {
- "version": "1.3.1"
- }
- }
-}
diff --git a/deps/npm/test/tap/shrinkwrap-dev-dependency/package.json b/deps/npm/test/tap/shrinkwrap-dev-dependency/package.json
deleted file mode 100644
index e325a47313..0000000000
--- a/deps/npm/test/tap/shrinkwrap-dev-dependency/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "author": "Domenic Denicola",
- "name": "npm-test-shrinkwrap-dev-dependency",
- "version": "0.0.0",
- "dependencies": {
- "request": "0.9.0",
- "underscore": "1.3.1"
- },
- "devDependencies": {
- "underscore": "1.5.1"
- }
-}
diff --git a/deps/npm/test/tap/shrinkwrap-prod-dependency.js b/deps/npm/test/tap/shrinkwrap-prod-dependency.js
new file mode 100644
index 0000000000..1dc665091b
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-prod-dependency.js
@@ -0,0 +1,89 @@
+var fs = require('fs')
+var path = require('path')
+
+var mkdirp = require('mkdirp')
+var mr = require('npm-registry-mock')
+var osenv = require('osenv')
+var rimraf = require('rimraf')
+var test = require('tap').test
+
+var npm = npm = require('../../')
+
+var common = require('../common-tap.js')
+var pkg = path.resolve(__dirname, 'shrinkwrap-prod-dependency')
+
+test("shrinkwrap --dev doesn't strip out prod dependencies", function (t) {
+ t.plan(1)
+
+ mr({port: common.port}, function (er, s) {
+ setup({}, function (err) {
+ if (err) return t.fail(err)
+
+ npm.install('.', function (err) {
+ if (err) return t.fail(err)
+
+ npm.config.set('dev', true)
+ npm.commands.shrinkwrap([], true, function (err, results) {
+ if (err) return t.fail(err)
+
+ t.deepEqual(results, desired)
+ s.close()
+ t.end()
+ })
+ })
+ })
+ })
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
+
+var desired = {
+ name: 'npm-test-shrinkwrap-prod-dependency',
+ version: '0.0.0',
+ dependencies: {
+ request: {
+ version: '0.9.0'
+ },
+ underscore: {
+ version: '1.5.1'
+ }
+ }
+}
+
+var json = {
+ author: 'Domenic Denicola',
+ name: 'npm-test-shrinkwrap-prod-dependency',
+ version: '0.0.0',
+ dependencies: {
+ request: '0.9.0'
+ },
+ devDependencies: {
+ underscore: '1.5.1'
+ }
+}
+
+function setup (opts, cb) {
+ cleanup()
+ mkdirp.sync(pkg)
+ fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2))
+ process.chdir(pkg)
+
+ var allOpts = {
+ cache: path.resolve(pkg, 'cache'),
+ registry: common.registry
+ }
+
+ for (var key in opts) {
+ allOpts[key] = opts[key]
+ }
+
+ npm.load(allOpts, cb)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+}
diff --git a/deps/npm/test/tap/update-examples.js b/deps/npm/test/tap/update-examples.js
index 2349e25329..633713d9d7 100644
--- a/deps/npm/test/tap/update-examples.js
+++ b/deps/npm/test/tap/update-examples.js
@@ -158,6 +158,16 @@ test('update tilde dependency to latest', function (t) {
})
})
+test('hold tilde dependency at wanted (#6441)', function (t) {
+ resetPackage({ wanted: '~1.1.2', installed: '1.1.2' })
+
+ npm.commands.update([], function (err) {
+ t.ifError(err)
+ t.notOk(installAskedFor, 'should not want to install anything')
+ t.end()
+ })
+})
+
test('update old caret dependency with no newer', function (t) {
resetPackage({ wanted: '^0.2.0', installed: '^0.2.0' })
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 <semver> 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')
+}