summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorForrest L Norvell <forrest@npmjs.com>2015-01-23 17:51:45 -0800
committerJulien Gilli <julien.gilli@joyent.com>2015-01-27 17:41:30 -0800
commit491ac6a84365e143255cd1b75717b05dadeec219 (patch)
tree2bc373b96c183a5d403fb874a41a8045280139fc
parente67073256d847be085be7049cd1d6ebd8d86ac62 (diff)
downloadnode-491ac6a84365e143255cd1b75717b05dadeec219.tar.gz
deps: upgrade npm to 2.3.0
PR: #9086 PR-URL: https://github.com/joyent/node/pull/9086 Reviewed-By: Julien Gilli <julien.gilli@joyent.com> Reviewed-By: Timothy J Fontaine <tjfontaine@gmail.com>
-rw-r--r--deps/npm/.eslintrc4
-rw-r--r--deps/npm/.travis.yml2
-rw-r--r--deps/npm/CHANGELOG.md424
-rw-r--r--deps/npm/CONTRIBUTING.md3
-rw-r--r--deps/npm/README.md50
-rw-r--r--deps/npm/doc/api/npm-ls.md2
-rw-r--r--deps/npm/doc/api/npm-restart.md33
-rw-r--r--deps/npm/doc/api/npm-start.md4
-rw-r--r--deps/npm/doc/api/npm-tag.md2
-rw-r--r--deps/npm/doc/api/npm.md4
-rw-r--r--deps/npm/doc/cli/npm-adduser.md11
-rw-r--r--deps/npm/doc/cli/npm-link.md2
-rw-r--r--deps/npm/doc/cli/npm-restart.md29
-rw-r--r--deps/npm/doc/cli/npm-run-script.md9
-rw-r--r--deps/npm/doc/cli/npm-tag.md24
-rw-r--r--deps/npm/doc/cli/npm-update.md4
-rw-r--r--deps/npm/doc/cli/npm-version.md3
-rw-r--r--deps/npm/doc/cli/npm-view.md2
-rw-r--r--deps/npm/doc/cli/npm.md4
-rw-r--r--deps/npm/doc/files/npmrc.md6
-rw-r--r--deps/npm/doc/files/package.json.md21
-rw-r--r--deps/npm/doc/misc/npm-coding-style.md4
-rw-r--r--deps/npm/doc/misc/npm-config.md27
-rw-r--r--deps/npm/doc/misc/npm-developers.md8
-rw-r--r--deps/npm/doc/misc/npm-faq.md45
-rw-r--r--deps/npm/doc/misc/npm-index.md10
-rw-r--r--deps/npm/doc/misc/npm-registry.md2
-rw-r--r--deps/npm/doc/misc/npm-scripts.md4
-rw-r--r--deps/npm/doc/misc/semver.md35
-rw-r--r--deps/npm/html/doc/README.html45
-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.html4
-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.html30
-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.html6
-rw-r--r--deps/npm/html/doc/api/npm-stop.html2
-rw-r--r--deps/npm/html/doc/api/npm-submodule.html2
-rw-r--r--deps/npm/html/doc/api/npm-tag.html4
-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.html6
-rw-r--r--deps/npm/html/doc/cli/npm-access.html79
-rw-r--r--deps/npm/html/doc/cli/npm-adduser.html13
-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.html80
-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.html2
-rw-r--r--deps/npm/html/doc/cli/npm-link.html4
-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.html26
-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.html11
-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-submodule.html4
-rw-r--r--deps/npm/html/doc/cli/npm-tag.html19
-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.html6
-rw-r--r--deps/npm/html/doc/cli/npm-version.html4
-rw-r--r--deps/npm/html/doc/cli/npm-view.html4
-rw-r--r--deps/npm/html/doc/cli/npm-whoami.html2
-rw-r--r--deps/npm/html/doc/cli/npm.html12
-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.html23
-rw-r--r--deps/npm/html/doc/files/npmrc.html8
-rw-r--r--deps/npm/html/doc/files/package.json.html23
-rw-r--r--deps/npm/html/doc/index.html12
-rw-r--r--deps/npm/html/doc/misc/npm-coding-style.html6
-rw-r--r--deps/npm/html/doc/misc/npm-config.html30
-rw-r--r--deps/npm/html/doc/misc/npm-developers.html10
-rw-r--r--deps/npm/html/doc/misc/npm-disputes.html8
-rw-r--r--deps/npm/html/doc/misc/npm-faq.html47
-rw-r--r--deps/npm/html/doc/misc/npm-index.html12
-rw-r--r--deps/npm/html/doc/misc/npm-registry.html4
-rw-r--r--deps/npm/html/doc/misc/npm-scope.html2
-rw-r--r--deps/npm/html/doc/misc/npm-scripts.html6
-rw-r--r--deps/npm/html/doc/misc/removing-npm.html2
-rw-r--r--deps/npm/html/doc/misc/semver.html26
-rw-r--r--deps/npm/html/index.html2
-rw-r--r--deps/npm/html/partial/doc/README.html43
-rw-r--r--deps/npm/html/partial/doc/api/npm-ls.html2
-rw-r--r--deps/npm/html/partial/doc/api/npm-restart.html28
-rw-r--r--deps/npm/html/partial/doc/api/npm-start.html4
-rw-r--r--deps/npm/html/partial/doc/api/npm-tag.html2
-rw-r--r--deps/npm/html/partial/doc/api/npm.html4
-rw-r--r--deps/npm/html/partial/doc/cli/npm-access.html55
-rw-r--r--deps/npm/html/partial/doc/cli/npm-adduser.html11
-rw-r--r--deps/npm/html/partial/doc/cli/npm-dist-tag.html56
-rw-r--r--deps/npm/html/partial/doc/cli/npm-link.html2
-rw-r--r--deps/npm/html/partial/doc/cli/npm-ls.html2
-rw-r--r--deps/npm/html/partial/doc/cli/npm-restart.html24
-rw-r--r--deps/npm/html/partial/doc/cli/npm-run-script.html9
-rw-r--r--deps/npm/html/partial/doc/cli/npm-tag.html17
-rw-r--r--deps/npm/html/partial/doc/cli/npm-update.html4
-rw-r--r--deps/npm/html/partial/doc/cli/npm-version.html2
-rw-r--r--deps/npm/html/partial/doc/cli/npm-view.html2
-rw-r--r--deps/npm/html/partial/doc/cli/npm.html10
-rw-r--r--deps/npm/html/partial/doc/files/npm-json.html21
-rw-r--r--deps/npm/html/partial/doc/files/npmrc.html6
-rw-r--r--deps/npm/html/partial/doc/files/package.json.html21
-rw-r--r--deps/npm/html/partial/doc/index.html10
-rw-r--r--deps/npm/html/partial/doc/misc/npm-coding-style.html4
-rw-r--r--deps/npm/html/partial/doc/misc/npm-config.html28
-rw-r--r--deps/npm/html/partial/doc/misc/npm-developers.html8
-rw-r--r--deps/npm/html/partial/doc/misc/npm-disputes.html6
-rw-r--r--deps/npm/html/partial/doc/misc/npm-faq.html45
-rw-r--r--deps/npm/html/partial/doc/misc/npm-index.html10
-rw-r--r--deps/npm/html/partial/doc/misc/npm-registry.html2
-rw-r--r--deps/npm/html/partial/doc/misc/npm-scripts.html4
-rw-r--r--deps/npm/html/partial/doc/misc/semver.html24
-rw-r--r--deps/npm/lib/adduser.js21
-rw-r--r--deps/npm/lib/bugs.js42
-rw-r--r--deps/npm/lib/build.js20
-rw-r--r--deps/npm/lib/cache.js16
-rw-r--r--deps/npm/lib/cache/add-local.js15
-rw-r--r--deps/npm/lib/cache/add-named.js49
-rw-r--r--deps/npm/lib/cache/add-remote-git.js302
-rw-r--r--deps/npm/lib/cache/add-remote-tarball.js15
-rw-r--r--deps/npm/lib/cache/caching-client.js212
-rw-r--r--deps/npm/lib/cache/get-stat.js14
-rw-r--r--deps/npm/lib/cache/update-index.js100
-rw-r--r--deps/npm/lib/config.js14
-rw-r--r--deps/npm/lib/config/core.js12
-rw-r--r--deps/npm/lib/config/defaults.js33
-rw-r--r--deps/npm/lib/config/nerf-dart.js6
-rw-r--r--deps/npm/lib/dedupe.js4
-rw-r--r--deps/npm/lib/deprecate.js22
-rw-r--r--deps/npm/lib/docs.js27
-rw-r--r--deps/npm/lib/explore.js2
-rw-r--r--deps/npm/lib/help.js2
-rw-r--r--deps/npm/lib/init.js2
-rw-r--r--deps/npm/lib/install.js8
-rw-r--r--deps/npm/lib/ls.js14
-rw-r--r--deps/npm/lib/npm.js16
-rw-r--r--deps/npm/lib/outdated.js10
-rw-r--r--deps/npm/lib/owner.js71
-rw-r--r--deps/npm/lib/publish.js32
-rw-r--r--deps/npm/lib/repo.js47
-rw-r--r--deps/npm/lib/run-script.js20
-rw-r--r--deps/npm/lib/search.js29
-rw-r--r--deps/npm/lib/star.js17
-rw-r--r--deps/npm/lib/stars.js9
-rw-r--r--deps/npm/lib/tag.js10
-rw-r--r--deps/npm/lib/unbuild.js51
-rw-r--r--deps/npm/lib/unpublish.js17
-rw-r--r--deps/npm/lib/utils/completion/file-completion.js6
-rw-r--r--deps/npm/lib/utils/error-handler.js10
-rw-r--r--deps/npm/lib/utils/gently-rm.js84
-rw-r--r--deps/npm/lib/utils/git.js14
-rw-r--r--deps/npm/lib/utils/lifecycle.js20
-rw-r--r--deps/npm/lib/utils/map-to-registry.js48
-rw-r--r--deps/npm/lib/utils/spawn.js23
-rw-r--r--deps/npm/lib/utils/tar.js22
-rw-r--r--deps/npm/lib/utils/umask.js17
-rw-r--r--deps/npm/lib/version.js211
-rw-r--r--deps/npm/lib/view.js31
-rw-r--r--deps/npm/lib/whoami.js30
-rw-r--r--deps/npm/man/man1/npm-README.159
-rw-r--r--deps/npm/man/man1/npm-access.178
-rw-r--r--deps/npm/man/man1/npm-adduser.113
-rw-r--r--deps/npm/man/man1/npm-bin.12
-rw-r--r--deps/npm/man/man1/npm-bugs.12
-rw-r--r--deps/npm/man/man1/npm-build.12
-rw-r--r--deps/npm/man/man1/npm-bundle.12
-rw-r--r--deps/npm/man/man1/npm-cache.12
-rw-r--r--deps/npm/man/man1/npm-completion.12
-rw-r--r--deps/npm/man/man1/npm-config.12
-rw-r--r--deps/npm/man/man1/npm-dedupe.12
-rw-r--r--deps/npm/man/man1/npm-deprecate.12
-rw-r--r--deps/npm/man/man1/npm-dist-tag.195
-rw-r--r--deps/npm/man/man1/npm-docs.12
-rw-r--r--deps/npm/man/man1/npm-edit.12
-rw-r--r--deps/npm/man/man1/npm-explore.12
-rw-r--r--deps/npm/man/man1/npm-help-search.12
-rw-r--r--deps/npm/man/man1/npm-help.12
-rw-r--r--deps/npm/man/man1/npm-init.12
-rw-r--r--deps/npm/man/man1/npm-install.12
-rw-r--r--deps/npm/man/man1/npm-link.14
-rw-r--r--deps/npm/man/man1/npm-ls.14
-rw-r--r--deps/npm/man/man1/npm-outdated.12
-rw-r--r--deps/npm/man/man1/npm-owner.12
-rw-r--r--deps/npm/man/man1/npm-pack.12
-rw-r--r--deps/npm/man/man1/npm-prefix.12
-rw-r--r--deps/npm/man/man1/npm-prune.12
-rw-r--r--deps/npm/man/man1/npm-publish.12
-rw-r--r--deps/npm/man/man1/npm-rebuild.12
-rw-r--r--deps/npm/man/man1/npm-repo.12
-rw-r--r--deps/npm/man/man1/npm-restart.140
-rw-r--r--deps/npm/man/man1/npm-rm.12
-rw-r--r--deps/npm/man/man1/npm-root.12
-rw-r--r--deps/npm/man/man1/npm-run-script.111
-rw-r--r--deps/npm/man/man1/npm-search.12
-rw-r--r--deps/npm/man/man1/npm-shrinkwrap.12
-rw-r--r--deps/npm/man/man1/npm-star.12
-rw-r--r--deps/npm/man/man1/npm-stars.12
-rw-r--r--deps/npm/man/man1/npm-start.12
-rw-r--r--deps/npm/man/man1/npm-stop.12
-rw-r--r--deps/npm/man/man1/npm-submodule.141
-rw-r--r--deps/npm/man/man1/npm-tag.125
-rw-r--r--deps/npm/man/man1/npm-test.12
-rw-r--r--deps/npm/man/man1/npm-uninstall.12
-rw-r--r--deps/npm/man/man1/npm-unpublish.12
-rw-r--r--deps/npm/man/man1/npm-update.16
-rw-r--r--deps/npm/man/man1/npm-version.14
-rw-r--r--deps/npm/man/man1/npm-view.14
-rw-r--r--deps/npm/man/man1/npm-whoami.12
-rw-r--r--deps/npm/man/man1/npm.16
-rw-r--r--deps/npm/man/man3/npm-bin.32
-rw-r--r--deps/npm/man/man3/npm-bugs.32
-rw-r--r--deps/npm/man/man3/npm-cache.32
-rw-r--r--deps/npm/man/man3/npm-commands.32
-rw-r--r--deps/npm/man/man3/npm-config.32
-rw-r--r--deps/npm/man/man3/npm-deprecate.32
-rw-r--r--deps/npm/man/man3/npm-docs.32
-rw-r--r--deps/npm/man/man3/npm-edit.32
-rw-r--r--deps/npm/man/man3/npm-explore.32
-rw-r--r--deps/npm/man/man3/npm-help-search.32
-rw-r--r--deps/npm/man/man3/npm-init.32
-rw-r--r--deps/npm/man/man3/npm-install.32
-rw-r--r--deps/npm/man/man3/npm-link.32
-rw-r--r--deps/npm/man/man3/npm-load.32
-rw-r--r--deps/npm/man/man3/npm-ls.34
-rw-r--r--deps/npm/man/man3/npm-outdated.32
-rw-r--r--deps/npm/man/man3/npm-owner.32
-rw-r--r--deps/npm/man/man3/npm-pack.32
-rw-r--r--deps/npm/man/man3/npm-prefix.32
-rw-r--r--deps/npm/man/man3/npm-prune.32
-rw-r--r--deps/npm/man/man3/npm-publish.32
-rw-r--r--deps/npm/man/man3/npm-rebuild.32
-rw-r--r--deps/npm/man/man3/npm-repo.32
-rw-r--r--deps/npm/man/man3/npm-restart.343
-rw-r--r--deps/npm/man/man3/npm-root.32
-rw-r--r--deps/npm/man/man3/npm-run-script.32
-rw-r--r--deps/npm/man/man3/npm-search.32
-rw-r--r--deps/npm/man/man3/npm-shrinkwrap.32
-rw-r--r--deps/npm/man/man3/npm-start.36
-rw-r--r--deps/npm/man/man3/npm-stop.32
-rw-r--r--deps/npm/man/man3/npm-submodule.341
-rw-r--r--deps/npm/man/man3/npm-tag.34
-rw-r--r--deps/npm/man/man3/npm-test.32
-rw-r--r--deps/npm/man/man3/npm-uninstall.32
-rw-r--r--deps/npm/man/man3/npm-unpublish.32
-rw-r--r--deps/npm/man/man3/npm-update.34
-rw-r--r--deps/npm/man/man3/npm-version.32
-rw-r--r--deps/npm/man/man3/npm-view.32
-rw-r--r--deps/npm/man/man3/npm-whoami.32
-rw-r--r--deps/npm/man/man3/npm.36
-rw-r--r--deps/npm/man/man5/npm-folders.52
-rw-r--r--deps/npm/man/man5/npm-global.52
-rw-r--r--deps/npm/man/man5/npm-json.523
-rw-r--r--deps/npm/man/man5/npmrc.512
-rw-r--r--deps/npm/man/man5/package.json.523
-rw-r--r--deps/npm/man/man7/npm-coding-style.76
-rw-r--r--deps/npm/man/man7/npm-config.737
-rw-r--r--deps/npm/man/man7/npm-developers.716
-rw-r--r--deps/npm/man/man7/npm-disputes.72
-rw-r--r--deps/npm/man/man7/npm-faq.750
-rw-r--r--deps/npm/man/man7/npm-index.712
-rw-r--r--deps/npm/man/man7/npm-registry.74
-rw-r--r--deps/npm/man/man7/npm-scope.72
-rw-r--r--deps/npm/man/man7/npm-scripts.78
-rw-r--r--deps/npm/man/man7/removing-npm.72
-rw-r--r--deps/npm/man/man7/semver.743
-rw-r--r--deps/npm/node_modules/columnify/index.js37
-rwxr-xr-xdeps/npm/node_modules/columnify/node_modules/strip-ansi/cli.js44
-rw-r--r--deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/index.js2
-rw-r--r--deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/package.json22
-rw-r--r--deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json25
-rw-r--r--deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/README.md4
-rw-r--r--deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/clone.js19
-rw-r--r--deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/package.json22
-rw-r--r--deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/test.js18
-rw-r--r--deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/package.json8
-rw-r--r--deps/npm/node_modules/columnify/node_modules/wcwidth/package.json2
-rw-r--r--deps/npm/node_modules/columnify/package.json32
-rw-r--r--deps/npm/node_modules/fs-vacuum/package.json13
-rw-r--r--deps/npm/node_modules/fs-vacuum/vacuum.js26
-rw-r--r--deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json20
-rw-r--r--deps/npm/node_modules/fstream-npm/package.json2
-rw-r--r--deps/npm/node_modules/fstream/examples/filter-pipe.js4
-rw-r--r--deps/npm/node_modules/fstream/examples/pipe.js2
-rw-r--r--deps/npm/node_modules/fstream/examples/reader.js22
-rw-r--r--deps/npm/node_modules/fstream/lib/file-reader.js4
-rw-r--r--deps/npm/node_modules/fstream/package.json30
-rw-r--r--deps/npm/node_modules/glob/.npmignore3
-rw-r--r--deps/npm/node_modules/glob/README.md188
-rw-r--r--deps/npm/node_modules/glob/common.js177
-rw-r--r--deps/npm/node_modules/glob/examples/g.js9
-rw-r--r--deps/npm/node_modules/glob/examples/usr-local.js9
-rw-r--r--deps/npm/node_modules/glob/glob.js1021
-rw-r--r--deps/npm/node_modules/glob/oh-my-glob.gifbin510360 -> 0 bytes
-rw-r--r--deps/npm/node_modules/glob/package.json44
-rw-r--r--deps/npm/node_modules/glob/sync.js409
-rw-r--r--deps/npm/node_modules/glob/test/00-setup.js176
-rw-r--r--deps/npm/node_modules/glob/test/bash-comparison.js63
-rw-r--r--deps/npm/node_modules/glob/test/bash-results.json356
-rw-r--r--deps/npm/node_modules/glob/test/cwd-test.js55
-rw-r--r--deps/npm/node_modules/glob/test/empty-set.js20
-rw-r--r--deps/npm/node_modules/glob/test/error-callback.js21
-rw-r--r--deps/npm/node_modules/glob/test/globstar-match.js19
-rw-r--r--deps/npm/node_modules/glob/test/mark.js118
-rw-r--r--deps/npm/node_modules/glob/test/negation-test.js16
-rw-r--r--deps/npm/node_modules/glob/test/new-glob-optional-options.js10
-rw-r--r--deps/npm/node_modules/glob/test/nocase-nomagic.js125
-rw-r--r--deps/npm/node_modules/glob/test/pause-resume.js73
-rw-r--r--deps/npm/node_modules/glob/test/readme-issue.js36
-rw-r--r--deps/npm/node_modules/glob/test/root-nomount.js39
-rw-r--r--deps/npm/node_modules/glob/test/root.js46
-rw-r--r--deps/npm/node_modules/glob/test/stat.js32
-rw-r--r--deps/npm/node_modules/glob/test/zz-cleanup.js11
-rw-r--r--deps/npm/node_modules/graceful-fs/fs.js2
-rw-r--r--deps/npm/node_modules/graceful-fs/package.json19
-rw-r--r--deps/npm/node_modules/ini/LICENSE32
-rw-r--r--deps/npm/node_modules/ini/package.json21
-rw-r--r--deps/npm/node_modules/init-package-json/default-input.js22
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/package.json3
-rw-r--r--deps/npm/node_modules/init-package-json/package.json10
-rw-r--r--deps/npm/node_modules/init-package-json/test/npm-defaults.js60
-rw-r--r--deps/npm/node_modules/minimatch/.npmignore2
-rw-r--r--deps/npm/node_modules/minimatch/README.md2
-rw-r--r--deps/npm/node_modules/minimatch/benchmark.js15
-rw-r--r--deps/npm/node_modules/minimatch/browser.js1181
-rw-r--r--deps/npm/node_modules/minimatch/minimatch.js268
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/.npmignore2
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/.travis.yml3
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md116
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/example.js8
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.bak198
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.js191
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore2
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml4
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile6
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md80
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js5
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js38
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json73
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js56
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml4
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown60
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js6
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js9
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json64
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js39
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json75
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js32
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt1075
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt182
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js9
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js10
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh24
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js15
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/nested.js16
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/order.js10
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/pad.js13
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js7
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js50
-rw-r--r--deps/npm/node_modules/minimatch/package.json26
-rw-r--r--deps/npm/node_modules/minimatch/test/basic.js2
-rw-r--r--deps/npm/node_modules/minimatch/test/brace-expand.js17
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/.npmignore1
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/.travis.yml (renamed from deps/npm/node_modules/glob/.travis.yml)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/LICENSE23
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/README.md218
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/minimatch.js1073
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/LICENSE (renamed from deps/npm/node_modules/minimatch/node_modules/sigmund/LICENSE)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/README.md (renamed from deps/npm/node_modules/minimatch/node_modules/sigmund/README.md)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/bench.js (renamed from deps/npm/node_modules/minimatch/node_modules/sigmund/bench.js)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json (renamed from deps/npm/node_modules/minimatch/node_modules/sigmund/package.json)2
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/sigmund.js (renamed from deps/npm/node_modules/minimatch/node_modules/sigmund/sigmund.js)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/test/basic.js (renamed from deps/npm/node_modules/minimatch/node_modules/sigmund/test/basic.js)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json58
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/test/basic.js399
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js40
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/test/caching.js (renamed from deps/npm/node_modules/minimatch/test/caching.js)0
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/test/defaults.js274
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/minimatch/test/extglob-ending-with-state-char.js8
-rw-r--r--deps/npm/node_modules/node-gyp/package.json5
-rw-r--r--deps/npm/node_modules/normalize-git-url/.eslintrc19
-rw-r--r--deps/npm/node_modules/normalize-git-url/.npmignore1
-rw-r--r--deps/npm/node_modules/normalize-git-url/CHANGELOG.md5
-rw-r--r--deps/npm/node_modules/normalize-git-url/README.md40
-rw-r--r--deps/npm/node_modules/normalize-git-url/normalize-git-url.js27
-rw-r--r--deps/npm/node_modules/normalize-git-url/package.json42
-rw-r--r--deps/npm/node_modules/normalize-git-url/test/basic.js56
-rw-r--r--deps/npm/node_modules/npm-install-checks/package.json29
-rw-r--r--deps/npm/node_modules/npm-registry-client/README.md262
-rw-r--r--deps/npm/node_modules/npm-registry-client/index.js75
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/adduser.js172
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/attempt.js7
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/authify.js16
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/bugs.js9
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/deprecate.js36
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/fetch.js21
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/get.js207
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/initialize.js46
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/publish.js103
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/request.js196
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/star.js70
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/stars.js19
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/tag.js19
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/unpublish.js43
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/upload.js22
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/util/nerf-dart.js21
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/whoami.js16
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/.npmignore1
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/LICENSE24
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/index.js132
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/.npmignore5
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/LICENSE18
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/README.md15
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/duplex.js1
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/float.patch923
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_duplex.js89
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_passthrough.js46
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js951
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_transform.js209
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js477
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/README.md3
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/float.patch604
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/lib/util.js107
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json54
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/util.js106
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/README.md54
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/build/build.js209
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/component.json19
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/index.js3
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json54
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/.npmignore2
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/LICENSE20
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/README.md7
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/index.js221
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json54
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json70
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/passthrough.js1
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/readable.js7
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/transform.js1
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/writable.js1
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/.travis.yml4
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/LICENSE35
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/example/tarray.js4
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/index.js630
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json79
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/readme.markdown61
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/server/undef_globals.js19
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/tarray.js10
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json78
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/readme.md84
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/array.js12
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/buffer.js31
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/infer.js15
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/nothing.js25
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/objects.js29
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/server/ls.js16
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/string.js76
-rw-r--r--deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/typedarray.js33
-rw-r--r--deps/npm/node_modules/npm-registry-client/package.json20
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser-new.js47
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser-update.js23
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/adduser.js162
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/bugs.js28
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/config-defaults.js42
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/config-override.js57
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/deprecate.js118
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-404.js5
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-408.js5
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-503.js5
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-authed.js19
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-basic.js60
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js68
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js19
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/get-all.js16
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/get-basic.js55
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/get-error-403.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/lib/common.js68
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/lib/server.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js27
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-again.js26
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js41
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js19
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish-scoped.js25
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/publish.js167
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/redirects.js31
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/request-gzip-content.js41
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/request.js252
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/retries.js10
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/star.js151
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/stars.js68
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/tag.js95
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js28
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/unpublish.js68
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/upload.js36
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/whoami.js52
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/debuglog/package.json5
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/.eslintrc17
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/package.json29
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/readdir.js2
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/util-extend/package.json5
-rw-r--r--deps/npm/node_modules/read-installed/package.json33
-rw-r--r--deps/npm/node_modules/read-installed/read-installed.js2
-rw-r--r--deps/npm/node_modules/read-installed/test/empty.js16
-rw-r--r--deps/npm/node_modules/readable-stream/LICENSE41
-rw-r--r--deps/npm/node_modules/readable-stream/README.md4
-rw-r--r--deps/npm/node_modules/readable-stream/package.json19
-rw-r--r--deps/npm/node_modules/readable-stream/readable.js2
-rw-r--r--deps/npm/node_modules/realize-package-specifier/index.js1
-rw-r--r--deps/npm/node_modules/realize-package-specifier/package.json30
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/basic.js42
-rw-r--r--deps/npm/node_modules/request/.travis.yml2
-rw-r--r--deps/npm/node_modules/request/CHANGELOG.md1290
-rw-r--r--deps/npm/node_modules/request/CONTRIBUTING.md2
-rw-r--r--deps/npm/node_modules/request/README.md164
-rw-r--r--deps/npm/node_modules/request/examples/README.md115
-rwxr-xr-xdeps/npm/node_modules/request/index.js4
-rw-r--r--deps/npm/node_modules/request/lib/cookies.js19
-rw-r--r--deps/npm/node_modules/request/node_modules/caseless/README.md2
-rw-r--r--deps/npm/node_modules/request/node_modules/caseless/index.js8
-rw-r--r--deps/npm/node_modules/request/node_modules/caseless/package.json17
-rw-r--r--deps/npm/node_modules/request/node_modules/caseless/test.js9
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/License (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/License)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/Readme.md (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/lib/combined_stream.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js)14
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/.npmignore (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/License (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Makefile (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Readme.md (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/package.json (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/common.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js)0
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/run.js (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js)0
-rw-r--r--deps/npm/node_modules/request/node_modules/combined-stream/package.json (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json)25
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js2
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/HISTORY.md51
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/LICENSE (renamed from deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/LICENSE)5
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/README.md99
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/index.js63
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/LICENSE22
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/README.md72
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/db.json6385
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/index.js11
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/package.json78
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/package.json80
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/README.md66
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/mime.js114
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json59
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/test.js84
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/mime.types1588
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/node.types77
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/package.json22
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json30
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json19
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md23
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/README.md40
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/node-uuid/bin/uuid26
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/package.json37
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/uuid.js6
-rw-r--r--deps/npm/node_modules/request/node_modules/oauth-sign/index.js37
-rw-r--r--deps/npm/node_modules/request/node_modules/oauth-sign/package.json26
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/CHANGELOG.md68
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/Makefile8
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/Readme.md46
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/index.js2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/lib/parse.js54
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/lib/stringify.js46
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/lib/utils.js129
-rw-r--r--[-rwxr-xr-x]deps/npm/node_modules/request/node_modules/qs/package.json30
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/test/parse.js160
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/test/stringify.js64
-rw-r--r--[-rwxr-xr-x]deps/npm/node_modules/request/package.json48
-rwxr-xr-xdeps/npm/node_modules/request/release.sh44
-rw-r--r--deps/npm/node_modules/request/request.js180
-rw-r--r--deps/npm/node_modules/semver/README.md35
-rw-r--r--deps/npm/node_modules/semver/package.json20
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js27
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js.gzbin7595 -> 7739 bytes
-rw-r--r--deps/npm/node_modules/semver/semver.js27
-rw-r--r--deps/npm/node_modules/semver/semver.min.js2
-rw-r--r--deps/npm/node_modules/semver/semver.min.js.gzbin3472 -> 3564 bytes
-rw-r--r--deps/npm/node_modules/semver/test/index.js29
-rw-r--r--deps/npm/node_modules/tar/.travis.yml3
-rw-r--r--deps/npm/node_modules/tar/examples/extracter.js22
-rw-r--r--deps/npm/node_modules/tar/examples/packer.js20
-rw-r--r--deps/npm/node_modules/tar/lib/extract.js8
-rw-r--r--deps/npm/node_modules/tar/lib/parse.js2
-rw-r--r--deps/npm/node_modules/tar/package.json33
-rw-r--r--deps/npm/node_modules/tar/test/extract.js2
-rw-r--r--deps/npm/node_modules/uid-number/package.json24
-rw-r--r--deps/npm/node_modules/uid-number/uid-number.js9
-rw-r--r--deps/npm/node_modules/umask/.npmignore28
-rw-r--r--deps/npm/node_modules/umask/ChangeLog9
-rw-r--r--deps/npm/node_modules/umask/LICENSE22
-rw-r--r--deps/npm/node_modules/umask/README.md78
-rw-r--r--deps/npm/node_modules/umask/index.js77
-rw-r--r--deps/npm/node_modules/umask/package.json53
-rw-r--r--deps/npm/node_modules/umask/test/simple.js166
-rw-r--r--deps/npm/node_modules/which/LICENSE32
-rw-r--r--deps/npm/node_modules/which/package.json36
-rw-r--r--deps/npm/node_modules/which/which.js7
-rw-r--r--deps/npm/package.json50
-rwxr-xr-xdeps/npm/scripts/install.sh59
-rw-r--r--deps/npm/test/common-tap.js26
-rw-r--r--deps/npm/test/fixtures/scoped-underscore-1.3.1.tgzbin0 -> 55415 bytes
-rw-r--r--deps/npm/test/run.js2
-rw-r--r--deps/npm/test/tap/00-config-setup.js2
-rw-r--r--deps/npm/test/tap/add-remote-git-fake-windows.js138
-rw-r--r--deps/npm/test/tap/add-remote-git.js130
-rw-r--r--deps/npm/test/tap/adduser-always-auth.js (renamed from deps/npm/test/tap/login-always-auth.js)0
-rw-r--r--deps/npm/test/tap/adduser-legacy-auth.js89
-rw-r--r--deps/npm/test/tap/bugs.js151
-rw-r--r--deps/npm/test/tap/build-already-built.js81
-rw-r--r--deps/npm/test/tap/config-private.js81
-rw-r--r--deps/npm/test/tap/gently-rm-overeager.js62
-rw-r--r--deps/npm/test/tap/gently-rm-symlink.js113
-rw-r--r--deps/npm/test/tap/get.js125
-rw-r--r--deps/npm/test/tap/git-npmignore.js172
-rw-r--r--deps/npm/test/tap/ignore-scripts.js1
-rw-r--r--deps/npm/test/tap/ignore-scripts/package.json4
-rw-r--r--deps/npm/test/tap/init-interrupt.js58
-rw-r--r--deps/npm/test/tap/install-bad-man.js79
-rw-r--r--deps/npm/test/tap/lifecycle-path.js6
-rw-r--r--deps/npm/test/tap/ls-l-depth-0.js114
-rw-r--r--deps/npm/test/tap/map-to-registry.js89
-rw-r--r--deps/npm/test/tap/nerf-dart.js32
-rw-r--r--deps/npm/test/tap/outdated-private.js101
-rw-r--r--deps/npm/test/tap/owner.js161
-rw-r--r--deps/npm/test/tap/run-script.js29
-rw-r--r--deps/npm/test/tap/run-script/package.json16
-rw-r--r--deps/npm/test/tap/shrinkwrap-local-dependency.js121
-rw-r--r--deps/npm/test/tap/shrinkwrap-scoped-auth.js108
-rw-r--r--deps/npm/test/tap/spawn-enoent-help.js34
-rw-r--r--deps/npm/test/tap/spawn-enoent.js2
-rw-r--r--deps/npm/test/tap/umask-lifecycle.js52
-rw-r--r--deps/npm/test/tap/unpack-foreign-tarball.js8
-rw-r--r--deps/npm/test/tap/unpack-foreign-tarball/gitignore-and-npmignore-2.tarbin0 -> 4096 bytes
-rw-r--r--deps/npm/test/tap/update-index.js188
-rw-r--r--deps/npm/test/tap/version-git-not-clean.js81
-rw-r--r--deps/npm/test/tap/version-no-package.js45
-rw-r--r--deps/npm/test/tap/version-update-shrinkwrap.js249
-rw-r--r--deps/npm/test/tap/whoami.js2
-rw-r--r--deps/npm/test/tap/zz-cleanup.js13
705 files changed, 30689 insertions, 8490 deletions
diff --git a/deps/npm/.eslintrc b/deps/npm/.eslintrc
index ba3315042..b54e30fd2 100644
--- a/deps/npm/.eslintrc
+++ b/deps/npm/.eslintrc
@@ -12,6 +12,8 @@
"no-lonely-if": 1,
"no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
"no-mixed-requires": 0,
- "space-infix-ops": 0
+ "space-infix-ops": 0,
+ "key-spacing": 0,
+ "no-multi-spaces": 0
}
}
diff --git a/deps/npm/.travis.yml b/deps/npm/.travis.yml
index 273414864..c540f6559 100644
--- a/deps/npm/.travis.yml
+++ b/deps/npm/.travis.yml
@@ -8,4 +8,4 @@ before_install:
- "npm config set spin false"
- "npm install -g npm@^2"
- "sudo mkdir -p /var/run/couchdb"
-script: "npm run-script tap"
+script: "npm run-script test-all"
diff --git a/deps/npm/CHANGELOG.md b/deps/npm/CHANGELOG.md
index e67cd2909..b73d83ac7 100644
--- a/deps/npm/CHANGELOG.md
+++ b/deps/npm/CHANGELOG.md
@@ -1,3 +1,427 @@
+### v2.3.0 (2015-01-15):
+
+#### REGISTRY 2: OH MY STARS! WHO AM I?
+
+* [`e662a60`](https://github.com/npm/npm/commit/e662a60e2f9a542effd8e72279d4622fe514415e)
+ The new `whoami` endpoint might not return a value.
+ ([@othiym23](https://github.com/othiym23))
+* [`c2cccd4`](https://github.com/npm/npm/commit/c2cccd4bbc65885239ed646eb510155f7b8af13d)
+ `npm-registry-client@5.0.0`: Includes the following fine changes
+ ([@othiym23](https://github.com/othiym23)):
+ * [`ba6b73e`](https://github.com/npm/npm-registry-client/commit/ba6b73e351027246c228622014e4441412409bad)
+ [#92](https://github.com/npm/npm-registry-client/issues/92) BREAKING CHANGE:
+ Move `/whoami` endpoint out of the package namespace (to `/-/whoami`).
+ ([@othiym23](https://github.com/othiym23))
+ * [`3b174b7`](https://github.com/npm/npm-registry-client/commit/3b174b75c0c9ea77e298e6bb664fb499824ecc7c)
+ [#93](https://github.com/npm/npm-registry-client/issues/93) Registries based
+ on token-based auth can now offer starring.
+ ([@bcoe](https://github.com/bcoe))
+ * [`4701a29`](https://github.com/npm/npm-registry-client/commit/4701a29bcda41bc14aa91f361dd0d576e24677d7)
+ Fix HTTP[S] connection keep-alive on Node 0.11 / io.js 1.0.
+ ([@fengmk2](https://github.com/fengmk2))
+
+#### BETTER REGISTRY METADATA CACHING
+
+* [`98e1e10`](https://github.com/npm/npm/commit/98e1e1080df1f2cab16ed68035603950ea3d2d48)
+ [#6791](https://github.com/npm/npm/issues/6791) Add caching based on
+ Last-Modified / If-Modified-Since headers. Includes this
+ `npm-registry-client@5.0.0` change ([@lxe](https://github.com/lxe)):
+ * [`07bc335`](https://github.com/npm/npm-registry-client/commit/07bc33502b93554cd7539bfcce37d6e2d5404cd0)
+ [#86](https://github.com/npm/npm-registry-client/issues/86) Add Last-Modified
+ / If-Modified-Since cache header handling. ([@lxe](https://github.com/lxe))
+
+#### HOW MUCH IS THAT WINDOWS IN THE DOGGY?
+
+* [`706d49a`](https://github.com/npm/npm/commit/706d49ab45521360fce1a68779b8de899015d8c2)
+ [#7107](https://github.com/npm/npm/issues/7107) `getCacheStat` passes a stub
+ stat on Windows. ([@rmg](https://github.com/rmg))
+* [`5fce278`](https://github.com/npm/npm/commit/5fce278a688a1cb79183e012bde40b089c2e97a4)
+ [#5267](https://github.com/npm/npm/issues/5267) Use `%COMSPEC%` when set on
+ Windows. ([@edmorley](https://github.com/edmorley))
+* [`cc2e099`](https://github.com/npm/npm/commit/cc2e09912ce2f91567c485422e4e797c4deb9842)
+ [#7083](https://github.com/npm/npm/issues/7083) Ensure Git cache prefix
+ exists before repo clone on Windows.
+ ([@othiym23](https://github.com/othiym23))
+
+#### THRILLING BUG FIXES
+
+* [`c6fb430`](https://github.com/npm/npm/commit/c6fb430e55672b3caf87d25cbd2aeeebc449e2f2)
+ [#4197](https://github.com/npm/npm/issues/4197) Report `umask` as a 0-padded
+ octal literal. ([@smikes](https://github.com/smikes))
+* [`209713e`](https://github.com/npm/npm/commit/209713ebd4b77da11ce27d90c3346f78d760ba52)
+ [#4197](https://github.com/npm/npm/issues/4197) `umask@1.1.0`: Properly
+ handle `umask`s (i.e. not decimal numbers).
+ ([@smikes](https://github.com/smikes))
+* [`9eac0a1`](https://github.com/npm/npm/commit/9eac0a14488c5979ebde4c17881c8cd74f395069)
+ Make the example for bin links non-destructive.
+ ([@KevinSheedy](https://github.com/KevinSheedy))
+* [`6338bcf`](https://github.com/npm/npm/commit/6338bcfcd9cd1b0cc48b051dae764dc436ab5332)
+ `glob@4.3.5`: " -> ', for some reason. ([@isaacs](https://github.com/isaacs))
+
+### v2.2.0 (2015-01-08):
+
+* [`88c531d`](https://github.com/npm/npm/commit/88c531d1c0b3aced8f2a09632db01b5635e7226a)
+ [#7056](https://github.com/npm/npm/issues/7056) version doesn't need a
+ package.json. ([@othiym23](https://github.com/othiym23))
+* [`2656c19`](https://github.com/npm/npm/commit/2656c19f6b915c3173acc3b6f184cc321563da5f)
+ [#7095](https://github.com/npm/npm/issues/7095) Link to npm website instead
+ of registry. ([@konklone](https://github.com/konklone))
+* [`c76b801`](https://github.com/npm/npm/commit/c76b8013bf1758587565822626171b76cb465c9e)
+ [#7067](https://github.com/npm/npm/issues/7067) Obfuscate secrets, including
+ nerfed URLs. ([@smikes](https://github.com/smikes))
+* [`17f66ce`](https://github.com/npm/npm/commit/17f66ceb1bd421084e4ae82a6b66634a6e272929)
+ [#6849](https://github.com/npm/npm/issues/6849) Explain the tag workflow more
+ clearly. ([@smikes](https://github.com/smikes))
+* [`e309df6`](https://github.com/npm/npm/commit/e309df642de33d10d6dffadaa8a5d214a924d0dc)
+ [#7096](https://github.com/npm/npm/issues/7096) Really, `npm update -g` is
+ almost always a terrible idea. ([@smikes](https://github.com/smikes))
+* [`acf287d`](https://github.com/npm/npm/commit/acf287d2547c8a0a8871652c164019261b666d55)
+ [#6999](https://github.com/npm/npm/issues/6999) `npm run-script env`: add a
+ new default script that will print out environment values.
+ ([@gcb](https://github.com/gcb))
+* [`560c009`](https://github.com/npm/npm/commit/560c00945d4dec926cd29193e336f137c7f3f951)
+ [#6745](https://github.com/npm/npm/issues/6745) Document `npm update --dev`.
+ ([@smikes](https://github.com/smikes))
+* [`226a677`](https://github.com/npm/npm/commit/226a6776a1a9e28570485623b8adc2ec4b041335)
+ [#7046](https://github.com/npm/npm/issues/7046) We have never been the Node
+ package manager. ([@linclark](https://github.com/linclark))
+* [`38eef22`](https://github.com/npm/npm/commit/38eef2248f03bb8ab04cae1833e2a228fb887f3c)
+ `npm-install-checks@1.0.5`: Compatibility with npmlog@^1.
+ ([@iarna](https://github.com/iarna))
+
+### v2.1.18 (2015-01-01):
+
+* [`bf8640b`](https://github.com/npm/npm/commit/bf8640b0395b5dff71260a0cede7efc699a7bcf5)
+ [#7044](https://github.com/npm/npm/issues/7044) Document `.npmignore` syntax.
+ ([@zeke](https://github.com/zeke))
+
+### v2.1.17 (2014-12-25):
+
+merry npm xmas
+
+Working with [@phated](https://github.com/phated), I discovered that npm still
+had some lingering race conditions around how it handles Git dependencies. The
+following changes were intended to remedy to these issues. Thanks to
+[@phated](https://github.com/phated) for all his help getting to the bottom of
+these.
+
+* [`bdf1c84`](https://github.com/npm/npm/commit/bdf1c8483f5c4ad79b712db12d73276e15883923)
+ [#7006](https://github.com/npm/npm/issues/7006) Only `chown` template and
+ top-level Git cache directories. ([@othiym23](https://github.com/othiym23))
+* [`581a72d`](https://github.com/npm/npm/commit/581a72da18f35ec87edef6255adf4ef4714a478c)
+ [#7006](https://github.com/npm/npm/issues/7006) Map Git remote inflighting to
+ clone paths rather than Git URLs. ([@othiym23](https://github.com/othiym23))
+* [`1c48d08`](https://github.com/npm/npm/commit/1c48d08dea31a11ac11a285cac598a482481cade)
+ [#7009](https://github.com/npm/npm/issues/7009) `normalize-git-url@1.0.0`:
+ Normalize Git URLs while caching. ([@othiym23](https://github.com/othiym23))
+* [`5423cf0`](https://github.com/npm/npm/commit/5423cf0be8ff2b76bfff7c8e780e5f261235a86a)
+ [#7009](https://github.com/npm/npm/issues/7009) Pack tarballs to their final
+ locations atomically. ([@othiym23](https://github.com/othiym23))
+* [`7f6557f`](https://github.com/npm/npm/commit/7f6557ff317469ee4a87c542ff9a991e74ce9f38)
+ [#7009](https://github.com/npm/npm/issues/7009) Inflight local directory
+ packing, just to be safe. ([@othiym23](https://github.com/othiym23))
+
+Other changes:
+
+* [`1c491e6`](https://github.com/npm/npm/commit/1c491e65d70af013e8d5ac008d6d9762d6d91793)
+ [#6991](https://github.com/npm/npm/issues/6991) `npm version`: fix regression
+ in dirty-checking behavior ([@rlidwka](https://github.com/rlidwka))
+* [`55ceb2b`](https://github.com/npm/npm/commit/55ceb2b08ff8a0f56b94cc972ca15d7862e8733c)
+ [#1991](https://github.com/npm/npm/issues/1991) modify docs to reflect actual
+ `npm restart` behavior ([@smikes](https://github.com/smikes))
+* [`fb8e31b`](https://github.com/npm/npm/commit/fb8e31b95476a50bda35a665a99eec8a5d25a4db)
+ [#6982](https://github.com/npm/npm/issues/6982) when doing registry
+ operations, ensure registry URL always ends with `/`
+ ([@othiym23](https://github.com/othiym23))
+* [`5bcba65`](https://github.com/npm/npm/commit/5bcba65bed2678ffe80fb596f72abe9871d131c8)
+ pull whitelisted Git environment variables out into a named constant
+ ([@othiym23](https://github.com/othiym23))
+* [`be04bbd`](https://github.com/npm/npm/commit/be04bbdc52ebfc820cd939df2f7d79fe87067747)
+ [#7000](https://github.com/npm/npm/issues/7000) No longer install badly-named
+ manpage files, and log an error when trying to uninstall them.
+ ([@othiym23](https://github.com/othiym23))
+* [`6b7c5ec`](https://github.com/npm/npm/commit/6b7c5eca6b65e1247d0e51f6400cf2637ac880ce)
+ [#7011](https://github.com/npm/npm/issues/7011) Send auth for tarball fetches
+ for packages in `npm-shrinkwrap.json` from private registries.
+ ([@othiym23](https://github.com/othiym23))
+* [`9b9de06`](https://github.com/npm/npm/commit/9b9de06a99893b40aa23f0335726dec6df7979db)
+ `glob@4.3.2`: Better handling of trailing slashes.
+ ([@isaacs](https://github.com/isaacs))
+* [`030f3c7`](https://github.com/npm/npm/commit/030f3c7450b8ce124a19073bfbae0948a0a1a02c)
+ `semver@4.2.0`: Diffing between version strings.
+ ([@isaacs](https://github.com/isaacs))
+
+### v2.1.16 (2014-12-22):
+
+* [`a4e4e33`](https://github.com/npm/npm/commit/a4e4e33edb35c68813f04bf42bdf933a6f727bcd)
+ [#6987](https://github.com/npm/npm/issues/6987) `read-installed@3.1.5`: fixed
+ a regression where a new / empty package would cause read-installed to throw.
+ ([@othiym23](https://github.com/othiym23) /
+ [@pgilad](https://github.com/pgilad))
+
+### v2.1.15 (2014-12-18):
+
+* [`e5a2dee`](https://github.com/npm/npm/commit/e5a2dee47c74f26c56fee5998545b97497e830c8)
+ [#6951](https://github.com/npm/npm/issues/6951) `fs-vacuum@1.2.5`: Use
+ `path-is-inside` for better Windows normalization.
+ ([@othiym23](https://github.com/othiym23))
+* [`ac6167c`](https://github.com/npm/npm/commit/ac6167c2b9432939c57296f7ddd11ad5f8f918b2)
+ [#6955](https://github.com/npm/npm/issues/6955) Call `path.normalize` in
+ `lib/utils/gently-rm.js` for better Windows normalization.
+ ([@ben-page](https://github.com/ben-page))
+* [`c625d71`](https://github.com/npm/npm/commit/c625d714795e3b5badd847945e2401adfad5a196)
+ [#6964](https://github.com/npm/npm/issues/6964) Clarify CA configuration
+ docs. ([@jeffjo](https://github.com/jeffjo))
+* [`58b8cb5`](https://github.com/npm/npm/commit/58b8cb5cdf26a854358b7c2ab636572dba9bac16)
+ [#6950](https://github.com/npm/npm/issues/6950) Fix documentation typos.
+ ([@martinvd](https://github.com/martinvd))
+* [`7c1299d`](https://github.com/npm/npm/commit/7c1299d00538ea998684a1903a4091eafc63b7f1)
+ [#6909](https://github.com/npm/npm/issues/6909) Remove confusing mention of
+ rubygems `~>` semver operator. ([@mjtko](https://github.com/mjtko))
+* [`7dfdcc6`](https://github.com/npm/npm/commit/7dfdcc6debd8ef1fc52a2b508997d15887aad824)
+ [#6909](https://github.com/npm/npm/issues/6909) `semver@4.1.1`: Synchronize
+ documentation with PR [#6909](https://github.com/npm/npm/issues/6909)
+ ([@othiym23](https://github.com/othiym23))
+* [`adfddf3`](https://github.com/npm/npm/commit/adfddf3b682e0ae08e4b59d87c1b380dd651c572)
+ [#6925](https://github.com/npm/npm/issues/6925) Correct typo in
+ `doc/api/npm-ls.md` ([@oddurs](https://github.com/oddurs))
+* [`f5c534b`](https://github.com/npm/npm/commit/f5c534b711ab173129baf366c4f08d68f6117333)
+ [#6920](https://github.com/npm/npm/issues/6920) Remove recommendation to run
+ as root from `README.md`.
+ ([@robertkowalski](https://github.com/robertkowalski))
+* [`3ef4459`](https://github.com/npm/npm/commit/3ef445922cd39f25b992d91bd22c4d367882ea22)
+ [#6920](https://github.com/npm/npm/issues/6920) `npm-@googlegroups.com` has
+ gone the way of all things. That means it's gone.
+ ([@robertkowalski](https://github.com/robertkowalski))
+
+### v2.1.14 (2014-12-13):
+
+* [`cf7aeae`](https://github.com/npm/npm/commit/cf7aeae3c3a24e48d3de4006fa082f0c6040922a)
+ [#6923](https://github.com/npm/npm/issues/6923) Overaggressive link update
+ for new website broke node-gyp. ([@othiym23](https://github.com/othiym23))
+
+### v2.1.13 (2014-12-11):
+
+* [`cbb890e`](https://github.com/npm/npm/commit/cbb890eeacc0501ba1b8c6955f1c829c8af9f486)
+ [#6897](https://github.com/npm/npm/issues/6897) npm is a nice package manager
+ that runs server-side JavaScript. ([@othiym23](https://github.com/othiym23))
+* [`d9043c3`](https://github.com/npm/npm/commit/d9043c3b8d7450c3cb9ca795028c0e1c05377820)
+ [#6893](https://github.com/npm/npm/issues/6893) Remove erroneous docs about
+ preupdate / update / postupdate lifecycle scripts, which have never existed.
+ ([@devTristan](https://github.com/devTristan))
+* [`c5df4d0`](https://github.com/npm/npm/commit/c5df4d0d683cd3506808d1cd1acebff02a8b82db)
+ [#6884](https://github.com/npm/npm/issues/6884) Update npmjs.org to npmjs.com
+ in docs. ([@linclark](https://github.com/linclark))
+* [`cb6ff8d`](https://github.com/npm/npm/commit/cb6ff8dace1b439851701d4784d2d719c22ca7a7)
+ [#6879](https://github.com/npm/npm/issues/6879) npm version: Update
+ shrinkwrap post-check. ([@othiym23](https://github.com/othiym23))
+* [`2a340bd`](https://github.com/npm/npm/commit/2a340bdd548c6449468281e1444a032812bff677)
+ [#6868](https://github.com/npm/npm/issues/6868) Use magic numbers instead of
+ regexps to distinguish tarballs from other things.
+ ([@daxxog](https://github.com/daxxog))
+* [`f1c8bdb`](https://github.com/npm/npm/commit/f1c8bdb3f6b753d0600597e12346bdc3a34cb9c1)
+ [#6861](https://github.com/npm/npm/issues/6861) `npm-registry-client@4.0.5`:
+ Distinguish between error properties that are part of the response and error
+ strings that should be returned to the user.
+ ([@disrvptor](https://github.com/disrvptor))
+* [`d3a1b63`](https://github.com/npm/npm/commit/d3a1b6397fddef04b5198ca89d36d720aeb05eb6)
+ [#6762](https://github.com/npm/npm/issues/6762) Make `npm outdated` ignore
+ private packages. ([@KenanY](https://github.com/KenanY))
+* [`16d8542`](https://github.com/npm/npm/commit/16d854283ca5bcdb0cb2812fc5745d841652b952)
+ install.sh: Drop support for node < 0.8, remove engines bits.
+ ([@isaacs](https://github.com/isaacs))
+* [`b9c6046`](https://github.com/npm/npm/commit/b9c60466d5b713b1dc2947da14a5dfe42352e029)
+ `init-package-json@1.1.3`: ([@terinstock](https://github.com/terinstock))
+ noticed that `init.license` configuration doesn't stick. Make sure that
+ dashed defaults don't trump dotted parameters.
+ ([@othiym23](https://github.com/othiym23))
+* [`b6d6acf`](https://github.com/npm/npm/commit/b6d6acfc02c8887f78067931babab8f7c5180fed)
+ `which@1.0.8`: No longer use graceful-fs for some reason.
+ ([@isaacs](https://github.com/isaacs))
+* [`d39f673`](https://github.com/npm/npm/commit/d39f673caf08a90fb2bb001d79c98062d2cd05f4)
+ `request@2.51.0`: Incorporate bug fixes. ([@nylen](https://github.com/nylen))
+* [`c7ad727`](https://github.com/npm/npm/commit/c7ad7279cc879930ec58ccc62fa642e621ecb65c)
+ `columnify@1.3.2`: Incorporate bug fixes.
+ ([@timoxley](https://github.com/timoxley))
+
+### v2.1.12 (2014-12-04):
+
+* [`e5b1e44`](https://github.com/npm/npm/commit/e5b1e448bb4a9d6eae4ba0f67b1d3c2cea8ed383)
+ add alias verison=version ([@isaacs](https://github.com/isaacs))
+* [`5eed7bd`](https://github.com/npm/npm/commit/5eed7bddbd7bb92a44c4193c93e8529500c558e6)
+ `request@2.49.0` ([@nylen](https://github.com/nylen))
+* [`e72f81d`](https://github.com/npm/npm/commit/e72f81d8412540ae7d1e0edcc37c11bcb8169051)
+ `glob@4.3.1` / `minimatch@2.0.1` ([@isaacs](https://github.com/isaacs))
+* [`b8dcc36`](https://github.com/npm/npm/commit/b8dcc3637b5b71933b97162b7aff1b1a622c13e2)
+ `graceful-fs@3.0.5` ([@isaacs](https://github.com/isaacs))
+
+### v2.1.11 (2014-11-27):
+
+* [`4861d28`](https://github.com/npm/npm/commit/4861d28ad0ebd959fe6bc15b9c9a50fcabe57f55)
+ `which@1.0.7`: License update. ([@isaacs](https://github.com/isaacs))
+* [`30a2ea8`](https://github.com/npm/npm/commit/30a2ea80c891d384b31a1cf28665bba4271915bd)
+ `ini@1.3.2`: License update. ([@isaacs](https://github.com/isaacs))
+* [`6a4ea05`](https://github.com/npm/npm/commit/6a4ea054f6ddf52fc58842ba2046564b04c5c0e2)
+ `fstream@1.0.3`: Propagate error events to downstream streams.
+ ([@gfxmonk](https://github.com/gfxmonk))
+* [`a558695`](https://github.com/npm/npm/commit/a5586954f1c18df7c96137e0a79f41a69e7a884e)
+ `tar@1.0.3`: Don't extract broken files, propagate `drain` event.
+ ([@gfxmonk](https://github.com/gfxmonk))
+* [`989624e`](https://github.com/npm/npm/commit/989624e8321f87734c1b1272fc2f646e7af1f81c)
+ [#6767](https://github.com/npm/npm/issues/6767) Actually pass parameters when
+ adding git repo to cach under Windows.
+ ([@othiym23](https://github.com/othiym23))
+* [`657af73`](https://github.com/npm/npm/commit/657af7308f7d6cd2f81389fcf0d762252acaf1ce)
+ [#6774](https://github.com/npm/npm/issues/6774) When verifying paths on
+ unbuild, resolve both source and target as symlinks.
+ ([@hokaccha](https://github.com/hokaccha))
+* [`fd19c40`](https://github.com/npm/npm/commit/fd19c4046414494f9647a6991c00f8406a939929)
+ [#6713](https://github.com/npm/npm/issues/6713)
+ `realize-package-specifier@1.3.0`: Make it so that `npm install foo@1` work
+ when a file named `1` exists. ([@iarna](https://github.com/iarna))
+* [`c8ac37a`](https://github.com/npm/npm/commit/c8ac37a470491b2ed28514536e2e198494638c79)
+ `npm-registry-client@4.0.4`: Fix regression in failed fetch retries.
+ ([@othiym23](https://github.com/othiym23))
+
+### v2.1.10 (2014-11-20):
+
+* [`756f3d4`](https://github.com/npm/npm/commit/756f3d40fe18bc02bc93afe17016dfcc266c4b6b)
+ [#6735](https://github.com/npm/npm/issues/6735) Log "already built" messages
+ at info, not error. ([@smikes](https://github.com/smikes))
+* [`1b7330d`](https://github.com/npm/npm/commit/1b7330dafba3bbba171f74f1e58b261cb1b9301e)
+ [#6729](https://github.com/npm/npm/issues/6729) `npm-registry-client@4.0.3`:
+ GitHub won't redirect you through an HTML page to a compressed tarball if you
+ don't tell it you accept JSON responses.
+ ([@KenanY](https://github.com/KenanY))
+* [`d9c7857`](https://github.com/npm/npm/commit/d9c7857be02dacd274e55bf6d430d90d91509d53)
+ [#6506](https://github.com/npm/npm/issues/6506)
+ `readdir-scoped-modules@1.0.1`: Use `graceful-fs` so the whole dependency
+ tree gets read, even in case of `EMFILE`.
+ ([@sakana](https://github.com/sakana))
+* [`3a085be`](https://github.com/npm/npm/commit/3a085be158ace8f1e4395e69f8c102d3dea00c5f)
+ Grammar fix in docs. ([@icylace](https://github.com/icylace))
+* [`3f8e2ff`](https://github.com/npm/npm/commit/3f8e2ff8342d327d6f1375437ecf4bd945dc360f)
+ Did you know that npm has a Code of Conduct? Add a link to it to
+ CONTRIBUTING.md. ([@isaacs](https://github.com/isaacs))
+* [`319ccf6`](https://github.com/npm/npm/commit/319ccf633289e06e57a80d74c39706899348674c)
+ `glob@4.2.1`: Performance tuning. ([@isaacs](https://github.com/isaacs))
+* [`835f046`](https://github.com/npm/npm/commit/835f046e7568c33e81a0b48c84cff965024d8b8a)
+ `readable-stream@1.0.33`: Bug fixes. ([@rvagg](https://github.com/rvagg))
+* [`a34c38d`](https://github.com/npm/npm/commit/a34c38d0732fb246d11f2a776d2ad0d8db654338)
+ `request@2.48.0`: Bug fixes. ([@nylen](https://github.com/nylen))
+
+### v2.1.9 (2014-11-13):
+
+* [`eed9f61`](https://github.com/npm/npm/commit/eed9f6101963364acffc59d7194fc1655180e80c)
+ [#6542](https://github.com/npm/npm/issues/6542) `npm owner add / remove` now
+ works properly with scoped packages
+ ([@othiym23](https://github.com/othiym23))
+* [`cd25973`](https://github.com/npm/npm/commit/cd25973825aa5315b7ebf26227bd32bd6be5533f)
+ [#6548](https://github.com/npm/npm/issues/6548) using sudo won't leave the
+ cache's git directories with bad permissions
+ ([@othiym23](https://github.com/othiym23))
+* [`56930ab`](https://github.com/npm/npm/commit/56930abcae6a6ea41f1b75e23765c61259cef2dd)
+ fixed irregular `npm cache ls` output (yes, that's a thing)
+ ([@othiym23](https://github.com/othiym23))
+* [`740f483`](https://github.com/npm/npm/commit/740f483db6ec872b453065842da080a646c3600a)
+ legacy tests no longer poison user's own cache
+ ([@othiym23](https://github.com/othiym23))
+* [`ce37f14`](https://github.com/npm/npm/commit/ce37f142a487023747a9086335618638ebca4372)
+ [#6169](https://github.com/npm/npm/issues/6169) add terse output similar to
+ `npm publish / unpublish` for `npm owner add / remove`
+ ([@KenanY](https://github.com/KenanY))
+* [`bf2b8a6`](https://github.com/npm/npm/commit/bf2b8a66d7188900bf1e957c052b893948b67e0e)
+ [#6680](https://github.com/npm/npm/issues/6680) pass auth credentials to
+ registry when downloading search index
+ ([@terinjokes](https://github.com/terinjokes))
+* [`00ecb61`](https://github.com/npm/npm/commit/00ecb6101422984696929f602e14da186f9f669c)
+ [#6400](https://github.com/npm/npm/issues/6400) `.npmignore` is respected for
+ git repos on cache / pack / publish
+ ([@othiym23](https://github.com/othiym23))
+* [`d1b3a9e`](https://github.com/npm/npm/commit/d1b3a9ec5e2b6d52765ba5da5afb08dba41c49c1)
+ [#6311](https://github.com/npm/npm/issues/6311) `npm ls -l --depth=0` no
+ longer prints phantom duplicate children
+ ([@othiym23](https://github.com/othiym23))
+* [`07c5f34`](https://github.com/npm/npm/commit/07c5f34e45c9b18c348ed53b5763b1c5d4325740)
+ [#6690](https://github.com/npm/npm/issues/6690) `uid-number@0.0.6`: clarify
+ confusing names in error-handling code ([@isaacs](https://github.com/isaacs))
+* [`1ac9be9`](https://github.com/npm/npm/commit/1ac9be9f3bab816211d72d13cb05b5587878a586)
+ [#6684](https://github.com/npm/npm/issues/6684) `npm init`: don't report
+ write if canceled ([@smikes](https://github.com/smikes))
+* [`7bb207d`](https://github.com/npm/npm/commit/7bb207d1d6592a9cffc986871e4b671575363c2f)
+ [#5754](https://github.com/npm/npm/issues/5754) never remove app directories
+ on failed install ([@othiym23](https://github.com/othiym23))
+* [`705ce60`](https://github.com/npm/npm/commit/705ce601e7b9c5428353e02ebb30cb76c1991fdd)
+ [#5754](https://github.com/npm/npm/issues/5754) `fs-vacuum@1.2.2`: don't
+ throw when another fs task writes to a directory being vacuumed
+ ([@othiym23](https://github.com/othiym23))
+* [`1b650f4`](https://github.com/npm/npm/commit/1b650f4f217c413a2ffb96e1701beb5aa67a0de2)
+ [#6255](https://github.com/npm/npm/issues/6255) ensure that order credentials
+ are used from `.npmrc` doesn't regress
+ ([@othiym23](https://github.com/othiym23))
+* [`9bb2c34`](https://github.com/npm/npm/commit/9bb2c3435cedef40b45d3e9bd7a8edfb8cbe7209)
+ [#6644](https://github.com/npm/npm/issues/6644) `warn` rather than `info` on
+ fetch failure ([@othiym23](https://github.com/othiym23))
+* [`e34a7b6`](https://github.com/npm/npm/commit/e34a7b6b7371b1893a062f627ae8e168546d7264)
+ [#6524](https://github.com/npm/npm/issues/6524) `npm-registry-client@4.0.2`:
+ proxy via `request` more transparently
+ ([@othiym23](https://github.com/othiym23))
+* [`40afd6a`](https://github.com/npm/npm/commit/40afd6aaf34c11a10e80ec87b115fb2bb907e3bd)
+ [#6524](https://github.com/npm/npm/issues/6524) push proxy settings into
+ `request` ([@tauren](https://github.com/tauren))
+
+### v2.1.8 (2014-11-06):
+
+* [`063d843`](https://github.com/npm/npm/commit/063d843965f9f0bfa5732d7c2d6f5aa37a8260a2)
+ npm version now updates version in npm-shrinkwrap.json
+ ([@faiq](https://github.com/faiq))
+* [`3f53cd7`](https://github.com/npm/npm/commit/3f53cd795f8a600e904a97f215ba5b5a9989d9dd)
+ [#6559](https://github.com/npm/npm/issues/6559) save local dependencies in
+ npm-shrinkwrap.json ([@Torsph](https://github.com/Torsph))
+* [`e249262`](https://github.com/npm/npm/commit/e24926268b2d2220910bc81cce6d3b2e08d94eb1)
+ npm-faq.md: mention scoped pkgs in namespace Q
+ ([@smikes](https://github.com/smikes))
+* [`6b06ec4`](https://github.com/npm/npm/commit/6b06ec4ef5da490bdca1512fa7f12490245c192b)
+ [#6642](https://github.com/npm/npm/issues/6642) `init-package-json@1.1.2`:
+ Handle both `init-author-name` and `init.author.name`.
+ ([@othiym23](https://github.com/othiym23))
+* [`9cb334c`](https://github.com/npm/npm/commit/9cb334c8a895a55461aac18791babae779309a0e)
+ [#6409](https://github.com/npm/npm/issues/6409) document commit-ish with
+ GitHub URLs ([@smikes](https://github.com/smikes))
+* [`0aefae9`](https://github.com/npm/npm/commit/0aefae9bc2598a4b7a3ee7bb2306b42e3e12bb28)
+ [#2959](https://github.com/npm/npm/issues/2959) npm run no longer fails
+ silently ([@flipside](https://github.com/flipside))
+* [`e007a2c`](https://github.com/npm/npm/commit/e007a2c1e4fac1759fa61ac6e78c6b83b2417d11)
+ [#3908](https://github.com/npm/npm/issues/3908) include command in spawn
+ errors ([@smikes](https://github.com/smikes))
+
+### v2.1.7 (2014-10-30):
+
+* [`6750b05`](https://github.com/npm/npm/commit/6750b05dcba20d8990a672957ec56c48f97e241a)
+ [#6398](https://github.com/npm/npm/issues/6398) `npm-registry-client@4.0.0`:
+ consistent API, handle relative registry paths, use auth more consistently
+ ([@othiym23](https://github.com/othiym23))
+* [`7719cfd`](https://github.com/npm/npm/commit/7719cfdd8b204dfeccc41289707ea58b4d608905)
+ [#6560](https://github.com/npm/npm/issues/6560) use new npm-registry-client
+ API ([@othiym23](https://github.com/othiym23))
+* [`ed61971`](https://github.com/npm/npm/commit/ed619714c93718b6c1922b8c286f4b6cd2b97c80)
+ move caching of search metadata from `npm-registry-client` to npm itself
+ ([@othiym23](https://github.com/othiym23))
+* [`3457041`](https://github.com/npm/npm/commit/34570414cd528debeb22943873440594d7f47abf)
+ handle caching of metadata independently from `npm-registry-client`
+ ([@othiym23](https://github.com/othiym23))
+* [`20a331c`](https://github.com/npm/npm/commit/20a331ced6a52faac6ec242e3ffdf28bcd447c40)
+ [#6538](https://github.com/npm/npm/issues/6538) map registry URLs to
+ credentials more safely ([@indexzero](https://github.com/indexzero))
+* [`4072e97`](https://github.com/npm/npm/commit/4072e97856bf1e7affb38333d080c172767eea27)
+ [#6589](https://github.com/npm/npm/issues/6589) `npm-registry-client@4.0.1`:
+ allow publishing of packages with names identical to built-in Node modules
+ ([@feross](https://github.com/feross))
+* [`254f0e4`](https://github.com/npm/npm/commit/254f0e4adaf2c56e9df25c7343c43b0b0804a3b5)
+ `tar@1.0.2`: better error-handling ([@runk](https://github.com/runk))
+* [`73ee2aa`](https://github.com/npm/npm/commit/73ee2aa4f1a47e43fe7cf4317a5446875f7521fa)
+ `request@2.47.0` ([@mikeal](https://github.com/mikeal))
+
### v2.1.6 (2014-10-23):
* [`681b398`](https://github.com/npm/npm/commit/681b3987a18e7aba0aaf78c91a23c7cc0ab82ce8)
diff --git a/deps/npm/CONTRIBUTING.md b/deps/npm/CONTRIBUTING.md
index 0a5b53a12..73049a495 100644
--- a/deps/npm/CONTRIBUTING.md
+++ b/deps/npm/CONTRIBUTING.md
@@ -7,3 +7,6 @@
issues](https://github.com/npm/npm/search?q=Similar%20issues&type=Issues).
* Ensure your new issue conforms to the [Contributing
Guidelines](https://github.com/npm/npm/wiki/Contributing-Guidelines).
+
+Participation in this open source project is subject to the [npm Code
+of Conduct](http://www.npmjs.com/policies/conduct).
diff --git a/deps/npm/README.md b/deps/npm/README.md
index ecb3f29e2..0a4301e3b 100644
--- a/deps/npm/README.md
+++ b/deps/npm/README.md
@@ -1,4 +1,4 @@
-npm(1) -- node package manager
+npm(1) -- a JavaScript package manager
==============================
[![Build Status](https://img.shields.io/travis/npm/npm/master.svg)](https://travis-ci.org/npm/npm)
## SYNOPSIS
@@ -36,11 +36,11 @@ paths, etc.) then read on.
## Fancy Install (Unix)
There's a pretty robust install script at
-<https://www.npmjs.org/install.sh>. You can download that and run it.
+<https://www.npmjs.com/install.sh>. You can download that and run it.
Here's an example using curl:
- curl -L https://npmjs.org/install.sh | sh
+ curl -L https://npmjs.com/install.sh | sh
### Slightly Fancier
@@ -62,11 +62,16 @@ arbitrary config keys using the `./configure --key=val ...`, and then
run npm commands by doing `node cli.js <cmd> <args>`. (This is helpful
for testing, or running stuff without actually installing npm itself.)
-## Fancy Windows Install
+## Windows Install or Upgrade
-You can download a zip file from <https://npmjs.org/dist/>, and unpack it
+You can download a zip file from <https://github.com/npm/npm/releases>, and unpack it
in the same folder where node.exe lives.
+The latest version in a zip file is 1.4.12. To upgrade to npm 2, follow the
+Windows upgrade instructions in the npm Troubleshooting Guide:
+
+<https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows>
+
If that's not fancy enough for you, then you can fetch the code with
git, and mess with it directly.
@@ -74,31 +79,6 @@ git, and mess with it directly.
No.
-## Permissions when Using npm to Install Other Stuff
-
-**tl;dr**
-
-* Use `sudo` for greater safety. Or don't, if you prefer not to.
-* npm will downgrade permissions if it's root before running any build
- scripts that package authors specified.
-
-### More details...
-
-As of version 0.3, it is recommended to run npm as root.
-This allows npm to change the user identifier to the `nobody` user prior
-to running any package build or test commands.
-
-If you are not the root user, or if you are on a platform that does not
-support uid switching, then npm will not attempt to change the userid.
-
-If you would like to ensure that npm **always** runs scripts as the
-"nobody" user, and have it fail if it cannot downgrade permissions, then
-set the following configuration param:
-
- npm config set unsafe-perm false
-
-This will prevent running in unsafe mode, even as non-root users.
-
## Uninstalling
So sad to see you go.
@@ -173,13 +153,13 @@ help config` to learn about all the options you can set there.
## More Docs
-Check out the [docs](https://www.npmjs.org/doc/),
-especially the [faq](https://www.npmjs.org/doc/faq.html).
+Check out the [docs](https://docs.npmjs.com/),
+especially the [faq](https://docs.npmjs.com/misc/faq).
You can use the `npm help` command to read any of them.
If you're a developer, and you want to use npm to publish your program,
-you should [read this](https://www.npmjs.org/doc/developers.html)
+you should [read this](https://docs.npmjs.com/misc/developers)
## Legal Stuff
@@ -199,7 +179,7 @@ specific purpose, or lack of malice in any given npm package.
If you have a complaint about a package in the public npm registry,
and cannot [resolve it with the package
-owner](https://www.npmjs.org/doc/misc/npm-disputes.html), please email
+owner](https://docs.npmjs.com/misc/disputes), please email
<support@npmjs.com> and explain the situation.
Any data published to The npm Registry (including user account
@@ -228,8 +208,6 @@ When you find issues, please report them:
* web:
<https://github.com/npm/npm/issues>
-* email:
- <npm-@googlegroups.com>
Be sure to include *all* of the output from the npm command that didn't work
as expected. The `npm-debug.log` file is also helpful to provide.
diff --git a/deps/npm/doc/api/npm-ls.md b/deps/npm/doc/api/npm-ls.md
index ed890ff14..5de78f210 100644
--- a/deps/npm/doc/api/npm-ls.md
+++ b/deps/npm/doc/api/npm-ls.md
@@ -52,5 +52,5 @@ List packages in the global install prefix instead of in the current
project.
Note, if parseable is set or long isn't set, then duplicates will be trimmed.
-This means that if a submodule a same dependency as a parent module, then the
+This means that if a submodule has the same dependency as a parent module, then the
dependency will only be output once.
diff --git a/deps/npm/doc/api/npm-restart.md b/deps/npm/doc/api/npm-restart.md
index c40704438..606c41bf8 100644
--- a/deps/npm/doc/api/npm-restart.md
+++ b/deps/npm/doc/api/npm-restart.md
@@ -1,5 +1,5 @@
-npm-restart(3) -- Start a package
-=================================
+npm-restart(3) -- Restart a package
+===================================
## SYNOPSIS
@@ -7,14 +7,33 @@ npm-restart(3) -- Start a package
## DESCRIPTION
-This runs a package's "restart" script, if one was provided.
-Otherwise it runs package's "stop" script, if one was provided, and then
-the "start" script.
+This restarts a package (or multiple packages).
+
+This runs a package's "stop", "restart", and "start" scripts, and associated
+pre- and post- scripts, in the order given below:
+
+1. prerestart
+2. prestop
+3. stop
+4. poststop
+5. restart
+6. prestart
+7. start
+8. poststart
+9. postrestart
If no version is specified, then it restarts the "active" version.
-npm can run tests on multiple packages. Just specify multiple packages
-in the `packages` parameter.
+npm can restart multiple packages. Just specify multiple packages in
+the `packages` parameter.
+
+## NOTE
+
+Note that the "restart" script is run **in addition to** the "stop"
+and "start" scripts, not instead of them.
+
+This is the behavior as of `npm` major version 2. A change in this
+behavior will be accompanied by an increase in major version number
## SEE ALSO
diff --git a/deps/npm/doc/api/npm-start.md b/deps/npm/doc/api/npm-start.md
index 74491146a..deeea90d9 100644
--- a/deps/npm/doc/api/npm-start.md
+++ b/deps/npm/doc/api/npm-start.md
@@ -9,5 +9,5 @@ npm-start(3) -- Start a package
This runs a package's "start" script, if one was provided.
-npm can run tests on multiple packages. Just specify multiple packages
-in the `packages` parameter.
+npm can start multiple packages. Just specify multiple packages in the
+`packages` parameter.
diff --git a/deps/npm/doc/api/npm-tag.md b/deps/npm/doc/api/npm-tag.md
index b5a3d7faa..9cda0c407 100644
--- a/deps/npm/doc/api/npm-tag.md
+++ b/deps/npm/doc/api/npm-tag.md
@@ -18,6 +18,6 @@ is the package name and version is the version number (much like installing a
specific version).
The second element is the name of the tag to tag this version with. If this
-parameter is missing or falsey (empty), the default froom the config will be
+parameter is missing or falsey (empty), the default from the config will be
used. For more information about how to set this config, check
`man 3 npm-config` for programmatic usage or `man npm-config` for cli usage.
diff --git a/deps/npm/doc/api/npm.md b/deps/npm/doc/api/npm.md
index 4b4dfcadd..611292ec9 100644
--- a/deps/npm/doc/api/npm.md
+++ b/deps/npm/doc/api/npm.md
@@ -1,5 +1,5 @@
-npm(3) -- node package manager
-==============================
+npm(3) -- javascript package manager
+====================================
## SYNOPSIS
diff --git a/deps/npm/doc/cli/npm-adduser.md b/deps/npm/doc/cli/npm-adduser.md
index 54e785b07..80d0f9855 100644
--- a/deps/npm/doc/cli/npm-adduser.md
+++ b/deps/npm/doc/cli/npm-adduser.md
@@ -13,13 +13,14 @@ the default registry will be used (see `npm-config(7)`).
The username, password, and email are read in from prompts.
-You may use this command to change your email address, but not username
-or password.
+To reset your password, go to <https://www.npmjs.com/forgot>
-To reset your password, go to <https://www.npmjs.org/forgot>
+To change your email address, go to <https://www.npmjs.com/email-edit>
You may use this command multiple times with the same user account to
-authorize on a new machine.
+authorize on a new machine. When authenticating on a new machine,
+the username, password and email address must all match with
+your existing record.
`npm login` is an alias to `adduser` and behaves exactly the same way.
@@ -57,7 +58,7 @@ registries. Can be used with `--registry` and / or `--scope`, e.g.
This will ensure that all requests to that registry (including for tarballs)
include an authorization header. See `always-auth` in `npm-config(7)` for more
-details on always-auth. Registry-specific configuaration of `always-auth` takes
+details on always-auth. Registry-specific configuration of `always-auth` takes
precedence over any global configuration.
## SEE ALSO
diff --git a/deps/npm/doc/cli/npm-link.md b/deps/npm/doc/cli/npm-link.md
index a6c274790..786ad815d 100644
--- a/deps/npm/doc/cli/npm-link.md
+++ b/deps/npm/doc/cli/npm-link.md
@@ -22,7 +22,7 @@ Note that `package-name` is taken from `package.json`,
not from directory name.
The package name can be optionally prefixed with a scope. See `npm-scope(7)`.
-The scope must by preceded by an @-symbol and followed by a slash.
+The scope must be preceded by an @-symbol and followed by a slash.
When creating tarballs for `npm publish`, the linked packages are
"snapshotted" to their current state by resolving the symbolic links.
diff --git a/deps/npm/doc/cli/npm-restart.md b/deps/npm/doc/cli/npm-restart.md
index 6d594a26c..1aa0c57a6 100644
--- a/deps/npm/doc/cli/npm-restart.md
+++ b/deps/npm/doc/cli/npm-restart.md
@@ -1,5 +1,5 @@
-npm-restart(1) -- Start a package
-=================================
+npm-restart(1) -- Restart a package
+===================================
## SYNOPSIS
@@ -7,8 +7,28 @@ npm-restart(1) -- Start a package
## DESCRIPTION
-This runs a package's "restart" script, if one was provided. Otherwise it runs
-package's "stop" script, if one was provided, and then the "start" script.
+This restarts a package.
+
+This runs a package's "stop", "restart", and "start" scripts, and associated
+pre- and post- scripts, in the order given below:
+
+1. prerestart
+2. prestop
+3. stop
+4. poststop
+5. restart
+6. prestart
+7. start
+8. poststart
+9. postrestart
+
+## NOTE
+
+Note that the "restart" script is run **in addition to** the "stop"
+and "start" scripts, not instead of them.
+
+This is the behavior as of `npm` major version 2. A change in this
+behavior will be accompanied by an increase in major version number
## SEE ALSO
@@ -17,3 +37,4 @@ package's "stop" script, if one was provided, and then the "start" script.
* npm-test(1)
* npm-start(1)
* npm-stop(1)
+* npm-restart(3) \ No newline at end of file
diff --git a/deps/npm/doc/cli/npm-run-script.md b/deps/npm/doc/cli/npm-run-script.md
index 74f416e0b..c218c845f 100644
--- a/deps/npm/doc/cli/npm-run-script.md
+++ b/deps/npm/doc/cli/npm-run-script.md
@@ -11,10 +11,13 @@ npm-run-script(1) -- Run arbitrary package scripts
This runs an arbitrary command from a package's `"scripts"` object.
If no package name is provided, it will search for a `package.json`
in the current folder and use its `"scripts"` object. If no `"command"`
-is provided, it will list the available top level scripts.
+is provided, it will list the available top level scripts. The `env` command
+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 have
+precedence instead.
-It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.
+`run[-script]` is used by the test, start, restart, and stop commands, but can
+be called directly, as well.
As of [`npm@2.0.0`](http://blog.npmjs.org/post/98131109725/npm-2-0-0), you can
use custom arguments when executing scripts. The special option `--` is used by
diff --git a/deps/npm/doc/cli/npm-tag.md b/deps/npm/doc/cli/npm-tag.md
index 3e1d1051b..28a1c9334 100644
--- a/deps/npm/doc/cli/npm-tag.md
+++ b/deps/npm/doc/cli/npm-tag.md
@@ -23,6 +23,29 @@ This also applies to `npm dedupe`.
Publishing a package always sets the "latest" tag to the published version.
+## PURPOSE
+
+Tags can be used to provide an alias instead of version numbers. For
+example, `npm` currently uses the tag "next" to identify the upcoming
+version, and the tag "latest" to identify the current version.
+
+A project might choose to have multiple streams of development, e.g.,
+"stable", "canary".
+
+## CAVEATS
+
+Tags must share a namespace with version numbers, because they are
+specified in the same slot: `npm install <pkg>@<version>` vs `npm
+install <pkg>@<tag>`.
+
+Tags that can be interpreted as valid semver ranges will be
+rejected. For example, `v1.4` cannot be used as a tag, because it is
+interpreted by semver as `>=1.4.0 <1.5.0`. See
+<https://github.com/npm/npm/issues/6082>.
+
+The simplest way to avoid semver problems with tags is to use tags
+that do not begin with a number or the letter `v`.
+
## SEE ALSO
* npm-publish(1)
@@ -31,4 +54,5 @@ Publishing a package always sets the "latest" tag to the published version.
* npm-registry(7)
* npm-config(1)
* npm-config(7)
+* npm-tag(3)
* npmrc(5)
diff --git a/deps/npm/doc/cli/npm-update.md b/deps/npm/doc/cli/npm-update.md
index a53d29459..2aa0f366b 100644
--- a/deps/npm/doc/cli/npm-update.md
+++ b/deps/npm/doc/cli/npm-update.md
@@ -10,7 +10,9 @@ npm-update(1) -- Update a package
This command will update all the packages listed to the latest version
(specified by the `tag` config).
-It will also install missing packages.
+It will also install missing packages. As with all commands that install
+packages, the `--dev` flag will cause `devDependencies` to be processed
+as well.
If the `-g` flag is specified, this command will update globally installed
packages.
diff --git a/deps/npm/doc/cli/npm-version.md b/deps/npm/doc/cli/npm-version.md
index b30b6a3a2..69f3581bf 100644
--- a/deps/npm/doc/cli/npm-version.md
+++ b/deps/npm/doc/cli/npm-version.md
@@ -8,7 +8,7 @@ npm-version(1) -- Bump a package version
## DESCRIPTION
Run this in a package directory to bump the version and write the new
-data back to the package.json file.
+data back to `package.json` and, if present, `npm-shrinkwrap.json`.
The `newversion` argument should be a valid semver string, *or* a
valid second argument to semver.inc (one of "patch", "minor", "major",
@@ -38,6 +38,7 @@ in your git config for this to work properly. For example:
Enter passphrase:
+
## SEE ALSO
* npm-init(1)
diff --git a/deps/npm/doc/cli/npm-view.md b/deps/npm/doc/cli/npm-view.md
index 8f52a85a9..683ed09f4 100644
--- a/deps/npm/doc/cli/npm-view.md
+++ b/deps/npm/doc/cli/npm-view.md
@@ -24,7 +24,7 @@ For example, to show the dependencies of the `ronn` package at version
npm view ronn@0.3.5 dependencies
-You can view child field by separating them with a period.
+You can view child fields by separating them with a period.
To view the git repository URL for the latest version of npm, you could
do this:
diff --git a/deps/npm/doc/cli/npm.md b/deps/npm/doc/cli/npm.md
index ad16d419e..331a03577 100644
--- a/deps/npm/doc/cli/npm.md
+++ b/deps/npm/doc/cli/npm.md
@@ -1,5 +1,5 @@
-npm(1) -- node package manager
-==============================
+npm(1) -- javascript package manager
+====================================
## SYNOPSIS
diff --git a/deps/npm/doc/files/npmrc.md b/deps/npm/doc/files/npmrc.md
index ba57a6f2c..a3eb4389f 100644
--- a/deps/npm/doc/files/npmrc.md
+++ b/deps/npm/doc/files/npmrc.md
@@ -30,6 +30,12 @@ Each of these files is loaded, and config options are resolved in
priority order. For example, a setting in the userconfig file would
override the setting in the globalconfig file.
+Array values are specified by adding "[]" after the key name. For
+example:
+
+ key[] = "first value"
+ key[] = "second value"
+
### Per-project config file
When working locally in a project, a `.npmrc` file in the root of the
diff --git a/deps/npm/doc/files/package.json.md b/deps/npm/doc/files/package.json.md
index 1138bc274..1a54ec06b 100644
--- a/deps/npm/doc/files/package.json.md
+++ b/deps/npm/doc/files/package.json.md
@@ -28,7 +28,7 @@ The name is what your thing is called. Some tips:
* The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive.
* You may want to check the npm registry to see if there's something by that name
- already, before you get too attached to it. http://registry.npmjs.org/
+ already, before you get too attached to it. <https://www.npmjs.com/>
A name can be optionally prefixed by a scope, e.g. `@myorg/mypackage`. See
`npm-scope(7)` for more detail.
@@ -154,12 +154,12 @@ command name to local file name. On install, npm will symlink that file into
installs.
-For example, npm has this:
+For example, myapp could have this:
- { "bin" : { "npm" : "./cli.js" } }
+ { "bin" : { "myapp" : "./cli.js" } }
-So, when you install npm, it'll create a symlink from the `cli.js` script to
-`/usr/local/bin/npm`.
+So, when you install myapp, it'll create a symlink from the `cli.js` script to
+`/usr/local/bin/myapp`.
If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string. For example:
@@ -253,7 +253,7 @@ Put example scripts in here. Someday, it might be exposed in some clever way.
## repository
Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the `npm docs`
+want to contribute. If the git repo is on GitHub, then the `npm docs`
command will be able to find you.
Do it like this:
@@ -366,13 +366,16 @@ an argument to `git checkout`. The default is `master`.
## GitHub URLs
-As of version 1.1.65, you can refer to GitHub urls as just "foo": "user/foo-project". For example:
+As of version 1.1.65, you can refer to GitHub urls as just "foo":
+"user/foo-project". Just as with git URLs, a `commit-ish` suffix can be
+included. For example:
{
"name": "foo",
"version": "0.0.0",
"dependencies": {
- "express": "visionmedia/express"
+ "express": "visionmedia/express",
+ "mocha": "visionmedia/mocha#4727d357ea"
}
}
@@ -442,7 +445,7 @@ run this script as well, so that you can test it easily.
In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a `require` of this host.
-This is usually refered to as a *plugin*. Notably, your module may be exposing
+This is usually referred to as a *plugin*. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation.
For example:
diff --git a/deps/npm/doc/misc/npm-coding-style.md b/deps/npm/doc/misc/npm-coding-style.md
index 80609f4f2..7dd7ad556 100644
--- a/deps/npm/doc/misc/npm-coding-style.md
+++ b/deps/npm/doc/misc/npm-coding-style.md
@@ -10,7 +10,7 @@ designed to reduce visual clutter and make bugs more apparent.
If you want to contribute to npm (which is very encouraged), you should
make your code conform to npm's style.
-Note: this concerns npm's code not the specific packages at npmjs.org
+Note: this concerns npm's code not the specific packages that you can download from the npm registry.
## Line Length
@@ -21,7 +21,7 @@ statements onto multiple lines.
## Indentation
Two-spaces. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that's that.
+(and on GitHub), and node uses 2 spaces, so that's that.
Configure your editor appropriately.
diff --git a/deps/npm/doc/misc/npm-config.md b/deps/npm/doc/misc/npm-config.md
index 6e7d995dd..7aaaffb8d 100644
--- a/deps/npm/doc/misc/npm-config.md
+++ b/deps/npm/doc/misc/npm-config.md
@@ -137,14 +137,22 @@ The browser that is called by the `npm docs` command to open websites.
### ca
* Default: The npm CA certificate
-* Type: String or null
+* Type: String, Array or null
The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry.
+connections to the registry. Values should be in PEM format with newlines
+replaced by the string "\n". For example:
+
+ ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Set to `null` to only allow "known" registrars, or to a specific CA cert
to trust only that specific signing authority.
+Multiple CAs can be trusted by specifying an array of certificates:
+
+ ca[]="..."
+ ca[]="..."
+
See also the `strict-ssl` config.
### cafile
@@ -361,11 +369,12 @@ The string that starts all the debugging log output.
### https-proxy
-* Default: the `HTTPS_PROXY` or `https_proxy` or `HTTP_PROXY` or
- `http_proxy` environment variables.
+* Default: null
* Type: url
-A proxy to use for outgoing https requests.
+A proxy to use for outgoing https requests. If the `HTTPS_PROXY` or
+`https_proxy` or `HTTP_PROXY` or `http_proxy` environment variables are set,
+proxy settings will be honored by the underlying `request` library.
### ignore-scripts
@@ -577,10 +586,12 @@ this as true.
### proxy
-* Default: `HTTP_PROXY` or `http_proxy` environment variable, or null
+* Default: null
* Type: url
-A proxy to use for outgoing http requests.
+A proxy to use for outgoing http requests. If the `HTTP_PROXY` or
+`http_proxy` environment variables are set, proxy settings will be
+honored by the underlying `request` library.
### rebuild-bundle
@@ -818,7 +829,7 @@ The location of user-level configuration settings.
### umask
* Default: 022
-* Type: Octal numeric string
+* Type: Octal numeric string in range 0000..0777 (0..511)
The "umask" value to use when setting the file creation mode on files
and folders.
diff --git a/deps/npm/doc/misc/npm-developers.md b/deps/npm/doc/misc/npm-developers.md
index f6ea01176..2b025034f 100644
--- a/deps/npm/doc/misc/npm-developers.md
+++ b/deps/npm/doc/misc/npm-developers.md
@@ -102,6 +102,14 @@ ignore the stuff matched by the `.gitignore` file. If you *want* to
include something that is excluded by your `.gitignore` file, you can
create an empty `.npmignore` file to override it.
+`.npmignore` files follow the [same pattern rules](http://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files)
+as `.gitignore` files:
+
+* Blank lines or lines starting with `#` are ignored.
+* Standard glob patterns work.
+* You can end patterns with a forward slash `/` to specify a directory.
+* You can negate a pattern by starting it with an exclamation point `!`.
+
By default, the following paths and files are ignored, so there's no
need to add them to `.npmignore` explicitly:
diff --git a/deps/npm/doc/misc/npm-faq.md b/deps/npm/doc/misc/npm-faq.md
index 72891271f..176effc4e 100644
--- a/deps/npm/doc/misc/npm-faq.md
+++ b/deps/npm/doc/misc/npm-faq.md
@@ -3,7 +3,7 @@ npm-faq(7) -- Frequently Asked Questions
## Where can I find these docs in HTML?
-<https://www.npmjs.org/doc/>, or run:
+<https://docs.npmjs.com/>, or run:
npm config set viewer browser
@@ -80,7 +80,7 @@ Usually, no. Allow npm to resolve dependencies for your packages.
For packages you **deploy**, such as websites and apps,
you should use npm shrinkwrap to lock down your full dependency tree:
-https://www.npmjs.org/doc/cli/npm-shrinkwrap.html
+<https://docs.npmjs.com/cli/shrinkwrap>
If you are paranoid about depending on the npm ecosystem,
you should run a private npm mirror or a private cache.
@@ -147,7 +147,7 @@ command.)
In those cases, you can do this:
- curl https://www.npmjs.org/install.sh | sh
+ curl https://www.npmjs.com/install.sh | sh
## What is a `package`?
@@ -307,7 +307,7 @@ See `npm-registry(7)`.
## I forgot my password, and can't publish. How do I reset it?
-Go to <https://npmjs.org/forgot>.
+Go to <https://npmjs.com/forgot>.
## I get ECONNREFUSED a lot. What's up?
@@ -327,13 +327,38 @@ on Freenode IRC.
## Why no namespaces?
-Please see this discussion: <https://github.com/npm/npm/issues/798>
+npm has only one global namespace. If you want to namespace your own packages,
+you may: simply use the `-` character to separate the names. npm is a mostly
+anarchic system. There is not sufficient need to impose namespace rules on
+everyone.
-tl;dr - It doesn't actually make things better, and can make them worse.
+As of 2.0, npm supports scoped packages, which allow you to publish a group of
+related modules without worrying about name collisions.
-If you want to namespace your own packages, you may: simply use the
-`-` character to separate the names. npm is a mostly anarchic system.
-There is not sufficient need to impose namespace rules on everyone.
+Every npm user owns the scope associated with their username. For example, the
+user named `npm` owns the scope `@npm`. Scoped packages are published inside a
+scope by naming them as if they were files under the scope directory, e.g., by
+setting `name` in `package.json` to `@npm/npm`.
+
+Scoped packages can coexist with public npm packages in a private npm registry.
+At present (2014-11-04) scoped packages may NOT be published to the public npm
+registry.
+
+Unscoped packages can only depend on other unscoped packages. Scoped packages
+can depend on packages from their own scope, a different scope, or the public
+registry (unscoped).
+
+For the current documentation of scoped packages, see
+<https://docs.npmjs.com/misc/scope>
+
+References:
+
+1. For the reasoning behind the "one global namespace", please see this
+ discussion: <https://github.com/npm/npm/issues/798> (TL;DR: It doesn't
+ actually make things better, and can make them worse.)
+
+2. For the pre-implementation discussion of the scoped package feature, see
+ this discussion: <https://github.com/npm/npm/issues/5239>
## Who does npm?
@@ -341,7 +366,7 @@ npm was originally written by Isaac Z. Schlueter, and many others have
contributed to it, some of them quite substantially.
The npm open source project, The npm Registry, and [the community
-website](https://www.npmjs.org) are maintained and operated by the
+website](https://www.npmjs.com) are maintained and operated by the
good folks at [npm, Inc.](http://www.npmjs.com)
## I have a question or request not addressed here. Where should I put it?
diff --git a/deps/npm/doc/misc/npm-index.md b/deps/npm/doc/misc/npm-index.md
index 9c804bf80..96c62cced 100644
--- a/deps/npm/doc/misc/npm-index.md
+++ b/deps/npm/doc/misc/npm-index.md
@@ -3,7 +3,7 @@ npm-index(7) -- Index of all npm documentation
### README(1)
-node package manager
+a JavaScript package manager
## Command Line Documentation
@@ -11,7 +11,7 @@ Using npm on the command line
### npm(1)
-node package manager
+javascript package manager
### npm-adduser(1)
@@ -123,7 +123,7 @@ Open package repository page in the browser
### npm-restart(1)
-Start a package
+Restart a package
### npm-rm(1)
@@ -199,7 +199,7 @@ Using npm in your Node programs
### npm(3)
-node package manager
+javascript package manager
### npm-bin(3)
@@ -295,7 +295,7 @@ Open package repository page in the browser
### npm-restart(3)
-Start a package
+Restart a package
### npm-root(3)
diff --git a/deps/npm/doc/misc/npm-registry.md b/deps/npm/doc/misc/npm-registry.md
index 42cec5944..b0487f6df 100644
--- a/deps/npm/doc/misc/npm-registry.md
+++ b/deps/npm/doc/misc/npm-registry.md
@@ -57,7 +57,7 @@ effectively implement the entire CouchDB API anyway.
## Is there a website or something to see package docs and such?
-Yes, head over to <https://npmjs.org/>
+Yes, head over to <https://npmjs.com/>
## SEE ALSO
diff --git a/deps/npm/doc/misc/npm-scripts.md b/deps/npm/doc/misc/npm-scripts.md
index 054886b4d..3be4af377 100644
--- a/deps/npm/doc/misc/npm-scripts.md
+++ b/deps/npm/doc/misc/npm-scripts.md
@@ -19,10 +19,6 @@ following scripts:
Run BEFORE the package is uninstalled.
* postuninstall:
Run AFTER the package is uninstalled.
-* preupdate:
- Run BEFORE the package is updated with the update command.
-* update, postupdate:
- Run AFTER the package is updated with the update command.
* pretest, test, posttest:
Run by the `npm test` command.
* prestop, stop, poststop:
diff --git a/deps/npm/doc/misc/semver.md b/deps/npm/doc/misc/semver.md
index bd697d959..3f9555db1 100644
--- a/deps/npm/doc/misc/semver.md
+++ b/deps/npm/doc/misc/semver.md
@@ -16,12 +16,12 @@ As a command-line utility:
$ semver -h
- Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]
+ Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | --preid <identifier> | -l | -rv]
Test if version(s) satisfy the supplied range(s), and sort them.
Multiple versions or ranges may be supplied, unless increment
- or decrement options are specified. In that case, only a single
- version may be used, and it is incremented by the specified level
+ option is specified. In that case, only a single version may
+ be used, and it is incremented by the specified level
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.
@@ -101,6 +101,30 @@ the user is indicating that they are aware of the risk. However, it
is still not appropriate to assume that they have opted into taking a
similar risk on the *next* set of prerelease versions.
+#### Prerelease Identifiers
+
+The method `.inc` takes an additional `identifier` string argument that
+will append the value of the string as a prerelease identifier:
+
+````javascript
+> semver.inc('1.2.3', 'pre', 'beta')
+'1.2.4-beta.0'
+```
+
+command-line example:
+
+```shell
+$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+```
+
+Which then can be used to increment further:
+
+```shell
+$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+```
+
### Advanced Range Syntax
Advanced range syntax desugars to primitive comparators in
@@ -161,8 +185,6 @@ comparator. Allows minor-level changes if not.
`1.2.4-beta.2` would not, because it is a prerelease of a
different `[major, minor, patch]` tuple.
-Note: this is the same as the `~>` operator in rubygems.
-
#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
Allows changes that do not modify the left-most non-zero digit in the
@@ -245,6 +267,9 @@ strings that they parse.
`v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions
in descending order when passed to `Array.sort()`.
+* `diff(v1, v2)`: Returns difference between two versions by the release type
+ (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
+ or null if the versions are the same.
### Ranges
diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html
index 96bc06401..a9953056c 100644
--- a/deps/npm/html/doc/README.html
+++ b/deps/npm/html/doc/README.html
@@ -9,7 +9,7 @@
<body>
<div id="wrapper">
-<h1><a href="cli/npm.html">npm</a></h1> <p>node package manager</p>
+<h1><a href="cli/npm.html">npm</a></h1> <p>a JavaScript package manager</p>
<p><a href="https://travis-ci.org/npm/npm"><img src="https://img.shields.io/travis/npm/npm/master.svg" alt="Build Status"></a></p>
<h2 id="synopsis">SYNOPSIS</h2>
<p>This is just enough info to get you up and running.</p>
@@ -30,9 +30,9 @@ and prior, clone the git repo and dig through the old tags and branches.</p>
paths, etc.) then read on.</p>
<h2 id="fancy-install-unix-">Fancy Install (Unix)</h2>
<p>There&#39;s a pretty robust install script at
-<a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh</a>. You can download that and run it.</p>
+<a href="https://www.npmjs.com/install.sh">https://www.npmjs.com/install.sh</a>. You can download that and run it.</p>
<p>Here&#39;s an example using curl:</p>
-<pre><code>curl -L https://npmjs.org/install.sh | sh
+<pre><code>curl -L https://npmjs.com/install.sh | sh
</code></pre><h3 id="slightly-fancier">Slightly Fancier</h3>
<p>You can set any npm configuration params with that script:</p>
<pre><code>npm_config_prefix=/some/path sh install.sh
@@ -45,31 +45,16 @@ If you plan on hacking on npm, <code>make link</code> is your friend.</p>
arbitrary config keys using the <code>./configure --key=val ...</code>, and then
run npm commands by doing <code>node cli.js &lt;cmd&gt; &lt;args&gt;</code>. (This is helpful
for testing, or running stuff without actually installing npm itself.)</p>
-<h2 id="fancy-windows-install">Fancy Windows Install</h2>
-<p>You can download a zip file from <a href="https://npmjs.org/dist/">https://npmjs.org/dist/</a>, and unpack it
+<h2 id="windows-install-or-upgrade">Windows Install or Upgrade</h2>
+<p>You can download a zip file from <a href="https://github.com/npm/npm/releases">https://github.com/npm/npm/releases</a>, and unpack it
in the same folder where node.exe lives.</p>
+<p>The latest version in a zip file is 1.4.12. To upgrade to npm 2, follow the
+Windows upgrade instructions in the npm Troubleshooting Guide:</p>
+<p><a href="https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows">https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows</a></p>
<p>If that&#39;s not fancy enough for you, then you can fetch the code with
git, and mess with it directly.</p>
<h2 id="installing-on-cygwin">Installing on Cygwin</h2>
<p>No.</p>
-<h2 id="permissions-when-using-npm-to-install-other-stuff">Permissions when Using npm to Install Other Stuff</h2>
-<p><strong>tl;dr</strong></p>
-<ul>
-<li>Use <code>sudo</code> for greater safety. Or don&#39;t, if you prefer not to.</li>
-<li>npm will downgrade permissions if it&#39;s root before running any build
-scripts that package authors specified.</li>
-</ul>
-<h3 id="more-details-">More details...</h3>
-<p>As of version 0.3, it is recommended to run npm as root.
-This allows npm to change the user identifier to the <code>nobody</code> user prior
-to running any package build or test commands.</p>
-<p>If you are not the root user, or if you are on a platform that does not
-support uid switching, then npm will not attempt to change the userid.</p>
-<p>If you would like to ensure that npm <strong>always</strong> runs scripts as the
-&quot;nobody&quot; user, and have it fail if it cannot downgrade permissions, then
-set the following configuration param:</p>
-<pre><code>npm config set unsafe-perm false
-</code></pre><p>This will prevent running in unsafe mode, even as non-root users.</p>
<h2 id="uninstalling">Uninstalling</h2>
<p>So sad to see you go.</p>
<pre><code>sudo npm uninstall npm -g
@@ -122,11 +107,11 @@ change the value for <em>all</em> npm commands in that process.</p>
command line arguments using nopt. You may also want to check out <code>npm
help config</code> to learn about all the options you can set there.</p>
<h2 id="more-docs">More Docs</h2>
-<p>Check out the <a href="https://www.npmjs.org/doc/">docs</a>,
-especially the <a href="https://www.npmjs.org/doc/faq.html">faq</a>.</p>
+<p>Check out the <a href="https://docs.npmjs.com/">docs</a>,
+especially the <a href="https://docs.npmjs.com/misc/faq">faq</a>.</p>
<p>You can use the <code>npm help</code> command to read any of them.</p>
<p>If you&#39;re a developer, and you want to use npm to publish your program,
-you should <a href="https://www.npmjs.org/doc/developers.html">read this</a></p>
+you should <a href="https://docs.npmjs.com/misc/developers">read this</a></p>
<h2 id="legal-stuff">Legal Stuff</h2>
<p>&quot;npm&quot; and &quot;The npm Registry&quot; are owned by npm, Inc.
All rights reserved. See the included LICENSE file for more details.</p>
@@ -139,9 +124,9 @@ ensure accountability, there is absolutely no guarantee, warrantee, or
assertion expressed or implied as to the quality, fitness for a
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://www.npmjs.org/doc/misc/npm-disputes.html">resolve it with the package
+and cannot <a href="https://docs.npmjs.com/misc/disputes">resolve it with the package
owner</a>, please email
-<a href="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#x75;&#x70;&#112;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#109;">&#x73;&#x75;&#x70;&#112;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#109;</a> and explain the situation.</p>
+<a href="&#109;&#x61;&#105;&#x6c;&#x74;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#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>
@@ -160,8 +145,6 @@ ban your account in extreme cases. So don&#39;t do that.</p>
<ul>
<li>web:
<a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li>
-<li>email:
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#110;&#112;&#x6d;&#x2d;&#x40;&#103;&#111;&#111;&#103;&#108;&#101;&#103;&#114;&#x6f;&#117;&#x70;&#x73;&#46;&#x63;&#111;&#109;">&#110;&#112;&#x6d;&#x2d;&#x40;&#103;&#111;&#111;&#103;&#108;&#101;&#103;&#114;&#x6f;&#117;&#x70;&#x73;&#46;&#x63;&#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>
@@ -186,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.1.6</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html
index a25612475..d1b9fb5bc 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.1.6</p>
+<p id="footer">npm-bin &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html
index 9cf2cc413..a7f3c3e4a 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.1.6</p>
+<p id="footer">npm-bugs &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-cache.html b/deps/npm/html/doc/api/npm-cache.html
index 6dfc4a0e5..952856f86 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.1.6</p>
+<p id="footer">npm-cache &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html
index 3f3ae544e..16292985c 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.1.6</p>
+<p id="footer">npm-commands &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html
index 3767a46ac..758eef37a 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.1.6</p>
+<p id="footer">npm-config &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html
index a235c2baa..eb965608e 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.1.6</p>
+<p id="footer">npm-deprecate &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html
index 222b90e70..25fa5167f 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.1.6</p>
+<p id="footer">npm-docs &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html
index aa3d7bdb0..f7e777d86 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.1.6</p>
+<p id="footer">npm-edit &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html
index fbfd0cccc..fb8b36e1b 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.1.6</p>
+<p id="footer">npm-explore &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html
index 886d0c5ac..3612ae521 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.1.6</p>
+<p id="footer">npm-help-search &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html
index 80b14a41d..dc32dfdbe 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.1.6</p>
+<p id="footer">npm-init &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html
index 43cf4f166..ef095d462 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.1.6</p>
+<p id="footer">npm-install &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html
index c41a31c9b..7a80c5297 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.1.6</p>
+<p id="footer">npm-link &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html
index fbf22994f..3882694cf 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.1.6</p>
+<p id="footer">npm-load &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html
index e221bab4a..8b0bc0c6f 100644
--- a/deps/npm/html/doc/api/npm-ls.html
+++ b/deps/npm/html/doc/api/npm-ls.html
@@ -49,7 +49,7 @@ taken if it is serialized to JSON.</p>
<p>List packages in the global install prefix instead of in the current
project.</p>
<p>Note, if parseable is set or long isn&#39;t set, then duplicates will be trimmed.
-This means that if a submodule a same dependency as a parent module, then the
+This means that if a submodule has the same dependency as a parent module, then the
dependency will only be output once.</p>
</div>
@@ -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.1.6</p>
+<p id="footer">npm-ls &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html
index 91fafce32..eeff9318d 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.1.6</p>
+<p id="footer">npm-outdated &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html
index 878a9e59d..6fff13787 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.1.6</p>
+<p id="footer">npm-owner &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html
index 1e146e41f..13a1ed8f5 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.1.6</p>
+<p id="footer">npm-pack &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html
index bd406009c..22398c50d 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.1.6</p>
+<p id="footer">npm-prefix &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html
index 0e446c26f..6ee9e7d59 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.1.6</p>
+<p id="footer">npm-prune &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html
index 0e41c2ad0..dccedcab6 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.1.6</p>
+<p id="footer">npm-publish &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html
index f5d2e6a66..1203b177a 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.1.6</p>
+<p id="footer">npm-rebuild &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html
index 024e7279b..718f55aae 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.1.6</p>
+<p id="footer">npm-repo &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html
index 29d1a5667..e3c90034f 100644
--- a/deps/npm/html/doc/api/npm-restart.html
+++ b/deps/npm/html/doc/api/npm-restart.html
@@ -9,16 +9,32 @@
<body>
<div id="wrapper">
-<h1><a href="../api/npm-restart.html">npm-restart</a></h1> <p>Start a package</p>
+<h1><a href="../api/npm-restart.html">npm-restart</a></h1> <p>Restart a package</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm.commands.restart(packages, callback)
</code></pre><h2 id="description">DESCRIPTION</h2>
-<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided.
-Otherwise it runs package&#39;s &quot;stop&quot; script, if one was provided, and then
-the &quot;start&quot; script.</p>
+<p>This restarts a package (or multiple packages).</p>
+<p>This runs a package&#39;s &quot;stop&quot;, &quot;restart&quot;, and &quot;start&quot; scripts, and associated
+pre- and post- scripts, in the order given below:</p>
+<ol>
+<li>prerestart</li>
+<li>prestop</li>
+<li>stop</li>
+<li>poststop</li>
+<li>restart</li>
+<li>prestart</li>
+<li>start</li>
+<li>poststart</li>
+<li>postrestart</li>
+</ol>
<p>If no version is specified, then it restarts the &quot;active&quot; version.</p>
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
+<p>npm can restart multiple packages. Just specify multiple packages in
+the <code>packages</code> parameter.</p>
+<h2 id="note">NOTE</h2>
+<p>Note that the &quot;restart&quot; script is run <strong>in addition to</strong> the &quot;stop&quot;
+and &quot;start&quot; scripts, not instead of them.</p>
+<p>This is the behavior as of <code>npm</code> major version 2. A change in this
+behavior will be accompanied by an increase in major version number</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../api/npm-start.html"><a href="../api/npm-start.html">npm-start(3)</a></a></li>
@@ -36,5 +52,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-restart &mdash; npm@2.1.6</p>
+<p id="footer">npm-restart &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html
index b639a33e7..5231b853f 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.1.6</p>
+<p id="footer">npm-root &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html
index 267078080..c9877f401 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.1.6</p>
+<p id="footer">npm-run-script &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html
index 903aa521e..8d116367a 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.1.6</p>
+<p id="footer">npm-search &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html
index eed523cdc..08aec3538 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.1.6</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html
index 23678bc9e..74e8271a5 100644
--- a/deps/npm/html/doc/api/npm-start.html
+++ b/deps/npm/html/doc/api/npm-start.html
@@ -14,8 +14,8 @@
<pre><code>npm.commands.start(packages, callback)
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>This runs a package&#39;s &quot;start&quot; script, if one was provided.</p>
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
+<p>npm can start multiple packages. Just specify multiple packages in the
+<code>packages</code> parameter.</p>
</div>
@@ -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-start &mdash; npm@2.1.6</p>
+<p id="footer">npm-start &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html
index ed3b714f0..018b57ea3 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.1.6</p>
+<p id="footer">npm-stop &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-submodule.html b/deps/npm/html/doc/api/npm-submodule.html
index d70ee36d4..35364403c 100644
--- a/deps/npm/html/doc/api/npm-submodule.html
+++ b/deps/npm/html/doc/api/npm-submodule.html
@@ -42,5 +42,5 @@ dependencies into the submodule folder.</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-submodule &mdash; npm@2.1.2</p>
+<p id="footer">npm-submodule &mdash; npm@1.4.28</p>
diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html
index b4a326161..bc145f5f0 100644
--- a/deps/npm/html/doc/api/npm-tag.html
+++ b/deps/npm/html/doc/api/npm-tag.html
@@ -21,7 +21,7 @@ currently used.</p>
is the package name and version is the version number (much like installing a
specific version).</p>
<p>The second element is the name of the tag to tag this version with. If this
-parameter is missing or falsey (empty), the default froom the config will be
+parameter is missing or falsey (empty), the default from the config will be
used. For more information about how to set this config, check
<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
@@ -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.1.6</p>
+<p id="footer">npm-tag &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html
index 78168084c..b799e3a7f 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.1.6</p>
+<p id="footer">npm-test &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html
index 962ff879c..51720cc7d 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.1.6</p>
+<p id="footer">npm-uninstall &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html
index 2b9a5c58f..004ca7ed7 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.1.6</p>
+<p id="footer">npm-unpublish &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html
index f60e83de3..5feecc4b4 100644
--- a/deps/npm/html/doc/api/npm-update.html
+++ b/deps/npm/html/doc/api/npm-update.html
@@ -27,5 +27,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-update &mdash; npm@2.1.6</p>
+<p id="footer">npm-update &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html
index c4ce078a4..cdd410a14 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.1.6</p>
+<p id="footer">npm-version &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html
index 75c75fdbb..627f9e65f 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.1.6</p>
+<p id="footer">npm-view &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html
index 4ed6d79a4..c381923cd 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.1.6</p>
+<p id="footer">npm-whoami &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html
index 67ff3d32f..ef985922c 100644
--- a/deps/npm/html/doc/api/npm.html
+++ b/deps/npm/html/doc/api/npm.html
@@ -9,7 +9,7 @@
<body>
<div id="wrapper">
-<h1><a href="../api/npm.html">npm</a></h1> <p>node package manager</p>
+<h1><a href="../api/npm.html">npm</a></h1> <p>javascript package manager</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>var npm = require(&quot;npm&quot;)
npm.load([configObject, ]function (er, npm) {
@@ -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.1.6</p>
+<p>2.3.0</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.1.6</p>
+<p id="footer">npm &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-access.html b/deps/npm/html/doc/cli/npm-access.html
new file mode 100644
index 000000000..3d0a29050
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-access.html
@@ -0,0 +1,79 @@
+<!doctype html>
+<html>
+ <title>npm-access</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-access.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-access.html">npm-access</a></h1> <p>Set access level on published packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm access public [&lt;package&gt;]
+npm access restricted [&lt;package&gt;]
+
+npm access add &lt;read-only|read-write&gt; &lt;entity&gt; [&lt;package&gt;]
+npm access rm &lt;entity&gt; [&lt;package&gt;]
+
+npm access ls [&lt;package&gt;]
+npm access edit [&lt;package&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Used to set access controls on private packages.</p>
+<p>For all of the subcommands, <code>npm access</code> will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand.</p>
+<ul>
+<li><p>public / restricted:
+Set a package to be either publicly accessible or restricted.</p>
+</li>
+<li><p>add / rm:
+Add or remove the ability of users and teams to have read-only or read-write
+access to a package.</p>
+</li>
+<li><p>ls:
+Show all of the access privileges for a package. Will only show permissions
+for packages to which you have at least read access.</p>
+</li>
+<li><p>edit:
+Set the access privileges for a package at once using <code>$EDITOR</code>.</p>
+</li>
+</ul>
+<h2 id="details">DETAILS</h2>
+<p><code>npm access</code> always operates directly on the current registry, configurable
+from the command line using <code>--registry=&lt;registry url&gt;</code>.</p>
+<p>Unscoped packages are <em>always public</em>.</p>
+<p>Scoped packages <em>default to restricted</em>, but you can either publish them as
+public using <code>npm publish --access=public</code>, or set their access as public using
+<code>npm access public</code> after the initial publish.</p>
+<p>You must have privileges to set the access of a package:</p>
+<ul>
+<li>You are an owner of an unscoped or scoped package.</li>
+<li>You are a member of the team that owns a scope.</li>
+<li>You have been given read-write privileges for a package, either as a member
+of a team or directly as an owner.</li>
+</ul>
+<p>If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+<code>--access=public</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html"><a href="../cli/npm-publish.html">npm-publish(1)</a></a></li>
+<li><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></li>
+<li><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<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.4.0</p>
+
diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html
index 84f0ac389..541ad0c41 100644
--- a/deps/npm/html/doc/cli/npm-adduser.html
+++ b/deps/npm/html/doc/cli/npm-adduser.html
@@ -17,11 +17,12 @@
save the credentials to the <code>.npmrc</code> file. If no registry is specified,
the default registry will be used (see <code><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></code>).</p>
<p>The username, password, and email are read in from prompts.</p>
-<p>You may use this command to change your email address, but not username
-or password.</p>
-<p>To reset your password, go to <a href="https://www.npmjs.org/forgot">https://www.npmjs.org/forgot</a></p>
+<p>To reset your password, go to <a href="https://www.npmjs.com/forgot">https://www.npmjs.com/forgot</a></p>
+<p>To change your email address, go to <a href="https://www.npmjs.com/email-edit">https://www.npmjs.com/email-edit</a></p>
<p>You may use this command multiple times with the same user account to
-authorize on a new machine.</p>
+authorize on a new machine. When authenticating on a new machine,
+the username, password and email address must all match with
+your existing record.</p>
<p><code>npm login</code> is an alias to <code>adduser</code> and behaves exactly the same way.</p>
<h2 id="configuration">CONFIGURATION</h2>
<h3 id="registry">registry</h3>
@@ -44,7 +45,7 @@ registries. Can be used with <code>--registry</code> and / or <code>--scope</cod
<pre><code>npm adduser --registry=http://private-registry.example.com --always-auth
</code></pre><p>This will ensure that all requests to that registry (including for tarballs)
include an authorization header. See <code>always-auth</code> in <code><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></code> for more
-details on always-auth. Registry-specific configuaration of <code>always-auth</code> takes
+details on always-auth. Registry-specific configuration of <code>always-auth</code> takes
precedence over any global configuration.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
@@ -67,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.1.6</p>
+<p id="footer">npm-adduser &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html
index 7f6e3a5c0..0f61d5c0b 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.1.6</p>
+<p id="footer">npm-bin &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html
index 7758efa72..ccb59fe06 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.1.6</p>
+<p id="footer">npm-bugs &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html
index ca62cb246..a32234b9f 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.1.6</p>
+<p id="footer">npm-build &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html
index 9b833d0b6..2aec65af8 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.1.6</p>
+<p id="footer">npm-bundle &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html
index 53835b35d..d0d392a29 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.1.6</p>
+<p id="footer">npm-cache &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html
index 5a678ba35..69da1503e 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.1.6</p>
+<p id="footer">npm-completion &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html
index d97845e70..7521a212a 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.1.6</p>
+<p id="footer">npm-config &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html
index bf6c9974e..2ea5f3de9 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.1.6</p>
+<p id="footer">npm-dedupe &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html
index 8182c6ecf..886ddd169 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.1.6</p>
+<p id="footer">npm-deprecate &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-dist-tag.html b/deps/npm/html/doc/cli/npm-dist-tag.html
new file mode 100644
index 000000000..9fcab6ac1
--- /dev/null
+++ b/deps/npm/html/doc/cli/npm-dist-tag.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<html>
+ <title>npm-dist-tag</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-dist-tag.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-dist-tag.html">npm-dist-tag</a></h1> <p>Modify package distribution tags</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm dist-tag add &lt;pkg&gt;@&lt;version&gt; [&lt;tag&gt;]
+npm dist-tag rm &lt;pkg&gt; &lt;tag&gt;
+npm dist-tag ls [&lt;pkg&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Add, remove, and enumerate distribution tags on a package:</p>
+<ul>
+<li><p>add:
+Tags the specified version of the package with the specified tag, or the
+<code>--tag</code> config if not specified.</p>
+</li>
+<li><p>rm:
+Clear a tag that is no longer in use from the package.</p>
+</li>
+<li><p>ls:
+Show all of the dist-tags for a package, defaulting to the package in
+the curren prefix.</p>
+</li>
+</ul>
+<p>A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:</p>
+<pre><code>npm install &lt;name&gt;@&lt;tag&gt;
+</code></pre><p>When installing dependencies, a preferred tagged version may be specified:</p>
+<pre><code>npm install --tag &lt;tag&gt;
+</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
+<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="purpose">PURPOSE</h2>
+<p>Tags can be used to provide an alias instead of version numbers. For
+example, <code>npm</code> currently uses the tag &quot;next&quot; to identify the upcoming
+version, and the tag &quot;latest&quot; to identify the current version.</p>
+<p>A project might choose to have multiple streams of development, e.g.,
+&quot;stable&quot;, &quot;canary&quot;.</p>
+<h2 id="caveats">CAVEATS</h2>
+<p>This command used to be known as <code>npm tag</code>, which only created new tags, and so
+had a different syntax.</p>
+<p>Tags must share a namespace with version numbers, because they are specified in
+the same slot: <code>npm install &lt;pkg&gt;@&lt;version&gt;</code> vs <code>npm install &lt;pkg&gt;@&lt;tag&gt;</code>.</p>
+<p>Tags that can be interpreted as valid semver ranges will be rejected. For
+example, <code>v1.4</code> cannot be used as a tag, because it is interpreted by semver as
+<code>&gt;=1.4.0 &lt;1.5.0</code>. See <a href="https://github.com/npm/npm/issues/6082">https://github.com/npm/npm/issues/6082</a>.</p>
+<p>The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter <code>v</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-tag.html"><a href="../cli/npm-tag.html">npm-tag(1)</a></a></li>
+<li><a href="../cli/npm-publish.html"><a href="../cli/npm-publish.html">npm-publish(1)</a></a></li>
+<li><a href="../cli/npm-install.html"><a href="../cli/npm-install.html">npm-install(1)</a></a></li>
+<li><a href="../cli/npm-dedupe.html"><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></a></li>
+<li><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></li>
+<li><a href="../cli/npm-config.html"><a href="../cli/npm-config.html">npm-config(1)</a></a></li>
+<li><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></li>
+<li><a href="../api/npm-tag.html"><a href="../api/npm-tag.html">npm-tag(3)</a></a></li>
+<li><a href="../files/npmrc.html"><a href="../files/npmrc.html">npmrc(5)</a></a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<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.4.0</p>
+
diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html
index e9f2c9e73..0721663da 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.1.6</p>
+<p id="footer">npm-docs &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html
index 24a70fe7f..6a068adb1 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.1.6</p>
+<p id="footer">npm-edit &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html
index eeb490644..38e79ce0d 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.1.6</p>
+<p id="footer">npm-explore &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html
index 2cf7506f0..3584c29b8 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.1.6</p>
+<p id="footer">npm-help-search &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html
index 12c6c0e8f..eb463a8cd 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.1.6</p>
+<p id="footer">npm-help &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html
index e7640ea46..c0586d97b 100644
--- a/deps/npm/html/doc/cli/npm-init.html
+++ b/deps/npm/html/doc/cli/npm-init.html
@@ -40,5 +40,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.1.6</p>
+<p id="footer">npm-init &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html
index 3759f0115..6a7f9dd7d 100644
--- a/deps/npm/html/doc/cli/npm-install.html
+++ b/deps/npm/html/doc/cli/npm-install.html
@@ -239,5 +239,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.1.6</p>
+<p id="footer">npm-install &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html
index 8d085892d..b783736d3 100644
--- a/deps/npm/html/doc/cli/npm-link.html
+++ b/deps/npm/html/doc/cli/npm-link.html
@@ -24,7 +24,7 @@ symlink from the local <code>node_modules</code> folder to the global symlink.</
<p>Note that <code>package-name</code> is taken from <code>package.json</code>,
not from directory name.</p>
<p>The package name can be optionally prefixed with a scope. See <code><a href="../misc/npm-scope.html"><a href="../misc/npm-scope.html">npm-scope(7)</a></a></code>.
-The scope must by preceded by an @-symbol and followed by a slash.</p>
+The scope must be preceded by an @-symbol and followed by a slash.</p>
<p>When creating tarballs for <code>npm publish</code>, the linked packages are
&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>
<p>This is handy for installing your own stuff, so that you can work on it and
@@ -71,5 +71,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.1.6</p>
+<p id="footer">npm-link &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html
index 30419bdb0..d4d80cfda 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.1.6 /path/to/npm
+<pre><code>npm@2.3.0 /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>
@@ -85,5 +85,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.1.6</p>
+<p id="footer">npm-ls &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html
index 07a0a933d..81552873a 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.1.6</p>
+<p id="footer">npm-outdated &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html
index 3600e087f..ed9bcafcb 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.1.6</p>
+<p id="footer">npm-owner &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html
index 987ba3f79..c5ebe0798 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.1.6</p>
+<p id="footer">npm-pack &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html
index 7b6a3c58a..f3926644e 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.1.6</p>
+<p id="footer">npm-prefix &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html
index dea291b49..03b306dad 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.1.6</p>
+<p id="footer">npm-prune &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html
index e1b46d21d..6dc61da65 100644
--- a/deps/npm/html/doc/cli/npm-publish.html
+++ b/deps/npm/html/doc/cli/npm-publish.html
@@ -59,5 +59,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.1.6</p>
+<p id="footer">npm-publish &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html
index 4da97a705..27252fcbb 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.1.6</p>
+<p id="footer">npm-rebuild &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html
index 02335b4f4..2ac34d35d 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.1.6</p>
+<p id="footer">npm-repo &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html
index d7536f81f..e107a541c 100644
--- a/deps/npm/html/doc/cli/npm-restart.html
+++ b/deps/npm/html/doc/cli/npm-restart.html
@@ -9,12 +9,29 @@
<body>
<div id="wrapper">
-<h1><a href="../cli/npm-restart.html">npm-restart</a></h1> <p>Start a package</p>
+<h1><a href="../cli/npm-restart.html">npm-restart</a></h1> <p>Restart a package</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm restart [-- &lt;args&gt;]
</code></pre><h2 id="description">DESCRIPTION</h2>
-<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided. Otherwise it runs
-package&#39;s &quot;stop&quot; script, if one was provided, and then the &quot;start&quot; script.</p>
+<p>This restarts a package.</p>
+<p>This runs a package&#39;s &quot;stop&quot;, &quot;restart&quot;, and &quot;start&quot; scripts, and associated
+pre- and post- scripts, in the order given below:</p>
+<ol>
+<li>prerestart</li>
+<li>prestop</li>
+<li>stop</li>
+<li>poststop</li>
+<li>restart</li>
+<li>prestart</li>
+<li>start</li>
+<li>poststart</li>
+<li>postrestart</li>
+</ol>
+<h2 id="note">NOTE</h2>
+<p>Note that the &quot;restart&quot; script is run <strong>in addition to</strong> the &quot;stop&quot;
+and &quot;start&quot; scripts, not instead of them.</p>
+<p>This is the behavior as of <code>npm</code> major version 2. A change in this
+behavior will be accompanied by an increase in major version number</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-run-script.html"><a href="../cli/npm-run-script.html">npm-run-script(1)</a></a></li>
@@ -22,6 +39,7 @@ package&#39;s &quot;stop&quot; script, if one was provided, and then the &quot;s
<li><a href="../cli/npm-test.html"><a href="../cli/npm-test.html">npm-test(1)</a></a></li>
<li><a href="../cli/npm-start.html"><a href="../cli/npm-start.html">npm-start(1)</a></a></li>
<li><a href="../cli/npm-stop.html"><a href="../cli/npm-stop.html">npm-stop(1)</a></a></li>
+<li><a href="../api/npm-restart.html"><a href="../api/npm-restart.html">npm-restart(3)</a></a></li>
</ul>
</div>
@@ -35,5 +53,5 @@ package&#39;s &quot;stop&quot; script, if one was provided, and then the &quot;s
<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.1.6</p>
+<p id="footer">npm-restart &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html
index 3b28aaad4..617de0c68 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.1.6</p>
+<p id="footer">npm-rm &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html
index f6b8b22df..08adcec8e 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.1.6</p>
+<p id="footer">npm-root &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html
index 8ca2ea2a5..508e04025 100644
--- a/deps/npm/html/doc/cli/npm-run-script.html
+++ b/deps/npm/html/doc/cli/npm-run-script.html
@@ -17,9 +17,12 @@ npm run [command] [-- &lt;args&gt;]
<p>This runs an arbitrary command from a package&#39;s <code>&quot;scripts&quot;</code> object.
If no package name is provided, it will search for a <code>package.json</code>
in the current folder and use its <code>&quot;scripts&quot;</code> object. If no <code>&quot;command&quot;</code>
-is provided, it will list the available top level scripts.</p>
-<p>It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.</p>
+is provided, it will list the available top level scripts. The <code>env</code> command
+can be used to list environment variables that will be available to the script
+at runtime. If an &quot;env&quot; command is defined in your package it will have
+precedence instead.</p>
+<p><code>run[-script]</code> is used by the test, start, restart, and stop commands, but can
+be called directly, as well.</p>
<p>As of <a href="http://blog.npmjs.org/post/98131109725/npm-2-0-0"><code>npm@2.0.0</code></a>, you can
use custom arguments when executing scripts. The special option <code>--</code> is used by
<a href="http://goo.gl/KxMmtG">getopt</a> to delimit the end of the options. npm will pass
@@ -47,5 +50,5 @@ and not to any pre or post script.</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.1.6</p>
+<p id="footer">npm-run-script &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html
index f5fe720ba..7b613de6b 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.1.6</p>
+<p id="footer">npm-search &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html
index fbfaa6c3d..2495eeb3a 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.1.6</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html
index d3bbde5b9..ae434f6e4 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.1.6</p>
+<p id="footer">npm-star &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html
index 7873880f4..6ec03a509 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.1.6</p>
+<p id="footer">npm-stars &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html
index 0a3134bc8..eedbd240c 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.1.6</p>
+<p id="footer">npm-start &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html
index 01638ee4d..610da6069 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.1.6</p>
+<p id="footer">npm-stop &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-submodule.html b/deps/npm/html/doc/cli/npm-submodule.html
index 4ac55a885..6716c4a11 100644
--- a/deps/npm/html/doc/cli/npm-submodule.html
+++ b/deps/npm/html/doc/cli/npm-submodule.html
@@ -27,7 +27,7 @@ or you can do <code>npm explore &lt;pkgname&gt; -- npm install</code> to install
dependencies into the submodule folder.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
-<li><a href="../files/package.json.html"><a href="../files/package.json.html">package.json(5)</a></a></li>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
<li>git help submodule</li>
</ul>
@@ -42,5 +42,5 @@ dependencies into the submodule folder.</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-submodule &mdash; npm@2.1.2</p>
+<p id="footer">npm-submodule &mdash; npm@1.4.28</p>
diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html
index 946d5fa76..57757dfa7 100644
--- a/deps/npm/html/doc/cli/npm-tag.html
+++ b/deps/npm/html/doc/cli/npm-tag.html
@@ -22,6 +22,22 @@ of using a specific version number:</p>
<pre><code>npm install --tag &lt;tag&gt;
</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="purpose">PURPOSE</h2>
+<p>Tags can be used to provide an alias instead of version numbers. For
+example, <code>npm</code> currently uses the tag &quot;next&quot; to identify the upcoming
+version, and the tag &quot;latest&quot; to identify the current version.</p>
+<p>A project might choose to have multiple streams of development, e.g.,
+&quot;stable&quot;, &quot;canary&quot;.</p>
+<h2 id="caveats">CAVEATS</h2>
+<p>Tags must share a namespace with version numbers, because they are
+specified in the same slot: <code>npm install &lt;pkg&gt;@&lt;version&gt;</code> vs <code>npm
+install &lt;pkg&gt;@&lt;tag&gt;</code>.</p>
+<p>Tags that can be interpreted as valid semver ranges will be
+rejected. For example, <code>v1.4</code> cannot be used as a tag, because it is
+interpreted by semver as <code>&gt;=1.4.0 &lt;1.5.0</code>. See
+<a href="https://github.com/npm/npm/issues/6082">https://github.com/npm/npm/issues/6082</a>.</p>
+<p>The simplest way to avoid semver problems with tags is to use tags
+that do not begin with a number or the letter <code>v</code>.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-publish.html"><a href="../cli/npm-publish.html">npm-publish(1)</a></a></li>
@@ -30,6 +46,7 @@ of using a specific version number:</p>
<li><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></li>
<li><a href="../cli/npm-config.html"><a href="../cli/npm-config.html">npm-config(1)</a></a></li>
<li><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></li>
+<li><a href="../api/npm-tag.html"><a href="../api/npm-tag.html">npm-tag(3)</a></a></li>
<li><a href="../files/npmrc.html"><a href="../files/npmrc.html">npmrc(5)</a></a></li>
</ul>
@@ -44,5 +61,5 @@ of using a specific 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-tag &mdash; npm@2.1.6</p>
+<p id="footer">npm-tag &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html
index 6c5467de5..e7eacf889 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.1.6</p>
+<p id="footer">npm-test &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html
index 2a3c12c14..a0799b36b 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.1.6</p>
+<p id="footer">npm-uninstall &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html
index 59b278e23..a277055b1 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.1.6</p>
+<p id="footer">npm-unpublish &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html
index 5fa7846f5..d1e66aa81 100644
--- a/deps/npm/html/doc/cli/npm-update.html
+++ b/deps/npm/html/doc/cli/npm-update.html
@@ -15,7 +15,9 @@
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>This command will update all the packages listed to the latest version
(specified by the <code>tag</code> config).</p>
-<p>It will also install missing packages.</p>
+<p>It will also install missing packages. As with all commands that install
+packages, the <code>--dev</code> flag will cause <code>devDependencies</code> to be processed
+as well.</p>
<p>If the <code>-g</code> flag is specified, this command will update globally installed
packages.</p>
<p>If no package name is specified, all packages in the specified location (global
@@ -40,5 +42,5 @@ or local) will be updated.</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.1.6</p>
+<p id="footer">npm-update &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html
index 6477726f4..dfb537a74 100644
--- a/deps/npm/html/doc/cli/npm-version.html
+++ b/deps/npm/html/doc/cli/npm-version.html
@@ -14,7 +14,7 @@
<pre><code>npm version [&lt;newversion&gt; | major | minor | patch | premajor | preminor | prepatch | prerelease]
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>Run this in a package directory to bump the version and write the new
-data back to the package.json file.</p>
+data back to <code>package.json</code> and, if present, <code>npm-shrinkwrap.json</code>.</p>
<p>The <code>newversion</code> argument should be a valid semver string, <em>or</em> a
valid second argument to semver.inc (one of &quot;patch&quot;, &quot;minor&quot;, &quot;major&quot;,
&quot;prepatch&quot;, &quot;preminor&quot;, &quot;premajor&quot;, &quot;prerelease&quot;). In the second case,
@@ -55,5 +55,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.1.6</p>
+<p id="footer">npm-version &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html
index 3b87ba0be..8c54064ce 100644
--- a/deps/npm/html/doc/cli/npm-view.html
+++ b/deps/npm/html/doc/cli/npm-view.html
@@ -24,7 +24,7 @@ this:</p>
For example, to show the dependencies of the <code>ronn</code> package at version
0.3.5, you could do the following:</p>
<pre><code>npm view ronn@0.3.5 dependencies
-</code></pre><p>You can view child field by separating them with a period.
+</code></pre><p>You can view child fields by separating them with a period.
To view the git repository URL for the latest version of npm, you could
do this:</p>
<pre><code>npm view npm repository.url
@@ -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.1.6</p>
+<p id="footer">npm-view &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html
index a2705c40c..fbd5544e9 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.1.6</p>
+<p id="footer">npm-whoami &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html
index 3bd3849d2..f561c7eb8 100644
--- a/deps/npm/html/doc/cli/npm.html
+++ b/deps/npm/html/doc/cli/npm.html
@@ -9,11 +9,11 @@
<body>
<div id="wrapper">
-<h1><a href="../cli/npm.html">npm</a></h1> <p>node package manager</p>
+<h1><a href="../cli/npm.html">npm</a></h1> <p>javascript package manager</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm &lt;command&gt; [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>2.1.6</p>
+<p>2.3.0</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;&#x61;&#105;&#108;&#x74;&#111;&#58;&#110;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#114;&#111;&#117;&#x70;&#x73;&#46;&#99;&#x6f;&#x6d;">&#110;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#114;&#111;&#117;&#x70;&#x73;&#46;&#99;&#x6f;&#x6d;</a></li>
+<li><a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#x6d;">&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#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="&#109;&#x61;&#x69;&#108;&#116;&#111;&#58;&#x6e;&#112;&#109;&#x2d;&#x40;&#x67;&#x6f;&#111;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#x73;&#46;&#99;&#x6f;&#x6d;">&#x6e;&#112;&#109;&#x2d;&#x40;&#x67;&#x6f;&#111;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#x73;&#46;&#99;&#x6f;&#x6d;</a></li>
+<a href="&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#109;">&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#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;&#105;&#108;&#x74;&#111;&#58;&#105;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;">&#105;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;</a></p>
+<a href="&#109;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#101;">&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#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.1.6</p>
+<p id="footer">npm &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html
index ec3203999..67b03a2b0 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.1.6</p>
+<p id="footer">npm-folders &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html
index 90e5dcaf1..2155a83a4 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.1.6</p>
+<p id="footer">npm-global &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html
index ade4fd07e..aa279fe37 100644
--- a/deps/npm/html/doc/files/npm-json.html
+++ b/deps/npm/html/doc/files/npm-json.html
@@ -32,7 +32,7 @@ Also, it can&#39;t start with a dot or an underscore.</li>
<li>The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive.</li>
<li>You may want to check the npm registry to see if there&#39;s something by that name
-already, before you get too attached to it. <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></li>
+already, before you get too attached to it. <a href="https://www.npmjs.com/">https://www.npmjs.com/</a></li>
</ul>
<p>A name can be optionally prefixed by a scope, e.g. <code>@myorg/mypackage</code>. See
<code><a href="../misc/npm-scope.html"><a href="../misc/npm-scope.html">npm-scope(7)</a></a></code> for more detail.</p>
@@ -115,10 +115,10 @@ feature to install the &quot;npm&quot; executable.)</p>
command name to local file name. On install, npm will symlink that file into
<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
installs.</p>
-<p>For example, npm has this:</p>
-<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }
-</code></pre><p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
-<code>/usr/local/bin/npm</code>.</p>
+<p>For example, myapp could have this:</p>
+<pre><code>{ &quot;bin&quot; : { &quot;myapp&quot; : &quot;./cli.js&quot; } }
+</code></pre><p>So, when you install myapp, it&#39;ll create a symlink from the <code>cli.js</code> script to
+<code>/usr/local/bin/myapp</code>.</p>
<p>If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string. For example:</p>
<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
@@ -181,7 +181,7 @@ maybe, someday.</p>
<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
<h2 id="repository">repository</h2>
<p>Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the <code>npm docs</code>
+want to contribute. If the git repo is on GitHub, then the <code>npm docs</code>
command will be able to find you.</p>
<p>Do it like this:</p>
<pre><code>&quot;repository&quot; :
@@ -269,12 +269,15 @@ git+https://user@hostname/project/blah.git#commit-ish
</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
<h2 id="github-urls">GitHub URLs</h2>
-<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;: &quot;user/foo-project&quot;. For example:</p>
+<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;:
+&quot;user/foo-project&quot;. Just as with git URLs, a <code>commit-ish</code> suffix can be
+included. For example:</p>
<pre><code>{
&quot;name&quot;: &quot;foo&quot;,
&quot;version&quot;: &quot;0.0.0&quot;,
&quot;dependencies&quot;: {
- &quot;express&quot;: &quot;visionmedia/express&quot;
+ &quot;express&quot;: &quot;visionmedia/express&quot;,
+ &quot;mocha&quot;: &quot;visionmedia/mocha#4727d357ea&quot;
}
}
</code></pre><h2 id="local-paths">Local Paths</h2>
@@ -328,7 +331,7 @@ run this script as well, so that you can test it easily.</p>
<h2 id="peerdependencies">peerDependencies</h2>
<p>In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a <code>require</code> of this host.
-This is usually refered to as a <em>plugin</em>. Notably, your module may be exposing
+This is usually referred to as a <em>plugin</em>. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation.</p>
<p>For example:</p>
<pre><code>{
@@ -485,5 +488,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.1.6</p>
+<p id="footer">npm-json &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html
index 9f379006f..976a6404f 100644
--- a/deps/npm/html/doc/files/npmrc.html
+++ b/deps/npm/html/doc/files/npmrc.html
@@ -31,7 +31,11 @@ parameters. Environment variables can be replaced using
</code></pre><p>Each of these files is loaded, and config options are resolved in
priority order. For example, a setting in the userconfig file would
override the setting in the globalconfig file.</p>
-<h3 id="per-project-config-file">Per-project config file</h3>
+<p>Array values are specified by adding &quot;[]&quot; after the key name. For
+example:</p>
+<pre><code>key[] = &quot;first value&quot;
+key[] = &quot;second value&quot;
+</code></pre><h3 id="per-project-config-file">Per-project config file</h3>
<p>When working locally in a project, a <code>.npmrc</code> file in the root of the
project (ie, a sibling of <code>node_modules</code> and <code>package.json</code>) will set
config values specific to this project.</p>
@@ -73,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.1.6</p>
+<p id="footer">npmrc &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
index 183ad8ea5..c4c175dd0 100644
--- a/deps/npm/html/doc/files/package.json.html
+++ b/deps/npm/html/doc/files/package.json.html
@@ -32,7 +32,7 @@ Also, it can&#39;t start with a dot or an underscore.</li>
<li>The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive.</li>
<li>You may want to check the npm registry to see if there&#39;s something by that name
-already, before you get too attached to it. <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></li>
+already, before you get too attached to it. <a href="https://www.npmjs.com/">https://www.npmjs.com/</a></li>
</ul>
<p>A name can be optionally prefixed by a scope, e.g. <code>@myorg/mypackage</code>. See
<code><a href="../misc/npm-scope.html"><a href="../misc/npm-scope.html">npm-scope(7)</a></a></code> for more detail.</p>
@@ -115,10 +115,10 @@ feature to install the &quot;npm&quot; executable.)</p>
command name to local file name. On install, npm will symlink that file into
<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
installs.</p>
-<p>For example, npm has this:</p>
-<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }
-</code></pre><p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
-<code>/usr/local/bin/npm</code>.</p>
+<p>For example, myapp could have this:</p>
+<pre><code>{ &quot;bin&quot; : { &quot;myapp&quot; : &quot;./cli.js&quot; } }
+</code></pre><p>So, when you install myapp, it&#39;ll create a symlink from the <code>cli.js</code> script to
+<code>/usr/local/bin/myapp</code>.</p>
<p>If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string. For example:</p>
<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
@@ -181,7 +181,7 @@ maybe, someday.</p>
<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
<h2 id="repository">repository</h2>
<p>Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the <code>npm docs</code>
+want to contribute. If the git repo is on GitHub, then the <code>npm docs</code>
command will be able to find you.</p>
<p>Do it like this:</p>
<pre><code>&quot;repository&quot; :
@@ -269,12 +269,15 @@ git+https://user@hostname/project/blah.git#commit-ish
</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
<h2 id="github-urls">GitHub URLs</h2>
-<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;: &quot;user/foo-project&quot;. For example:</p>
+<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;:
+&quot;user/foo-project&quot;. Just as with git URLs, a <code>commit-ish</code> suffix can be
+included. For example:</p>
<pre><code>{
&quot;name&quot;: &quot;foo&quot;,
&quot;version&quot;: &quot;0.0.0&quot;,
&quot;dependencies&quot;: {
- &quot;express&quot;: &quot;visionmedia/express&quot;
+ &quot;express&quot;: &quot;visionmedia/express&quot;,
+ &quot;mocha&quot;: &quot;visionmedia/mocha#4727d357ea&quot;
}
}
</code></pre><h2 id="local-paths">Local Paths</h2>
@@ -328,7 +331,7 @@ run this script as well, so that you can test it easily.</p>
<h2 id="peerdependencies">peerDependencies</h2>
<p>In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a <code>require</code> of this host.
-This is usually refered to as a <em>plugin</em>. Notably, your module may be exposing
+This is usually referred to as a <em>plugin</em>. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation.</p>
<p>For example:</p>
<pre><code>{
@@ -485,5 +488,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.1.6</p>
+<p id="footer">package.json &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html
index 6c68895e0..e10541d7a 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -11,11 +11,11 @@
<h1><a href="misc/npm-index.html">npm-index</a></h1> <p>Index of all npm documentation</p>
<h3 id="readme-1-"><a href="doc/README.html"><a href="../doc/README.html">README</a></a></h3>
-<p>node package manager</p>
+<p>a JavaScript package manager</p>
<h2 id="command-line-documentation">Command Line Documentation</h2>
<p>Using npm on the command line</p>
<h3 id="npm-1-"><a href="cli/npm.html"><a href="cli/npm.html">npm(1)</a></a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-adduser-1-"><a href="cli/npm-adduser.html"><a href="cli/npm-adduser.html">npm-adduser(1)</a></a></h3>
<p>Add a registry user account</p>
<h3 id="npm-bin-1-"><a href="cli/npm-bin.html"><a href="cli/npm-bin.html">npm-bin(1)</a></a></h3>
@@ -71,7 +71,7 @@
<h3 id="npm-repo-1-"><a href="cli/npm-repo.html"><a href="cli/npm-repo.html">npm-repo(1)</a></a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-1-"><a href="cli/npm-restart.html"><a href="cli/npm-restart.html">npm-restart(1)</a></a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-rm-1-"><a href="cli/npm-rm.html"><a href="cli/npm-rm.html">npm-rm(1)</a></a></h3>
<p>Remove a package</p>
<h3 id="npm-root-1-"><a href="cli/npm-root.html"><a href="cli/npm-root.html">npm-root(1)</a></a></h3>
@@ -109,7 +109,7 @@
<h2 id="api-documentation">API Documentation</h2>
<p>Using npm in your Node programs</p>
<h3 id="npm-3-"><a href="api/npm.html"><a href="api/npm.html">npm(3)</a></a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-bin-3-"><a href="api/npm-bin.html"><a href="api/npm-bin.html">npm-bin(3)</a></a></h3>
<p>Display npm bin folder</p>
<h3 id="npm-bugs-3-"><a href="api/npm-bugs.html"><a href="api/npm-bugs.html">npm-bugs(3)</a></a></h3>
@@ -157,7 +157,7 @@
<h3 id="npm-repo-3-"><a href="api/npm-repo.html"><a href="api/npm-repo.html">npm-repo(3)</a></a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-3-"><a href="api/npm-restart.html"><a href="api/npm-restart.html">npm-restart(3)</a></a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-root-3-"><a href="api/npm-root.html"><a href="api/npm-root.html">npm-root(3)</a></a></h3>
<p>Display npm root</p>
<h3 id="npm-run-script-3-"><a href="api/npm-run-script.html"><a href="api/npm-run-script.html">npm-run-script(3)</a></a></h3>
@@ -230,5 +230,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.1.6</p>
+<p id="footer">index &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html
index 30d3e07cf..f79243619 100644
--- a/deps/npm/html/doc/misc/npm-coding-style.html
+++ b/deps/npm/html/doc/misc/npm-coding-style.html
@@ -16,14 +16,14 @@ difference&#39;s sake, but rather a carefully crafted style that is
designed to reduce visual clutter and make bugs more apparent.</p>
<p>If you want to contribute to npm (which is very encouraged), you should
make your code conform to npm&#39;s style.</p>
-<p>Note: this concerns npm&#39;s code not the specific packages at npmjs.org</p>
+<p>Note: this concerns npm&#39;s code not the specific packages that you can download from the npm registry.</p>
<h2 id="line-length">Line Length</h2>
<p>Keep lines shorter than 80 characters. It&#39;s better for lines to be
too short than to be too long. Break up long lists, objects, and other
statements onto multiple lines.</p>
<h2 id="indentation">Indentation</h2>
<p>Two-spaces. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that&#39;s that.</p>
+(and on GitHub), and node uses 2 spaces, so that&#39;s that.</p>
<p>Configure your editor appropriately.</p>
<h2 id="curly-braces">Curly braces</h2>
<p>Curly braces belong on the same line as the thing that necessitates them.</p>
@@ -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.1.6</p>
+<p id="footer">npm-coding-style &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html
index 249d5934c..337d98229 100644
--- a/deps/npm/html/doc/misc/npm-config.html
+++ b/deps/npm/html/doc/misc/npm-config.html
@@ -118,13 +118,18 @@ ostensibly Unix systems.</p>
<h3 id="ca">ca</h3>
<ul>
<li>Default: The npm CA certificate</li>
-<li>Type: String or null</li>
+<li>Type: String, Array or null</li>
</ul>
<p>The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry.</p>
-<p>Set to <code>null</code> to only allow &quot;known&quot; registrars, or to a specific CA cert
+connections to the registry. Values should be in PEM format with newlines
+replaced by the string &quot;\n&quot;. For example:</p>
+<pre><code>ca=&quot;-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----&quot;
+</code></pre><p>Set to <code>null</code> to only allow &quot;known&quot; registrars, or to a specific CA cert
to trust only that specific signing authority.</p>
-<p>See also the <code>strict-ssl</code> config.</p>
+<p>Multiple CAs can be trusted by specifying an array of certificates:</p>
+<pre><code>ca[]=&quot;...&quot;
+ca[]=&quot;...&quot;
+</code></pre><p>See also the <code>strict-ssl</code> config.</p>
<h3 id="cafile">cafile</h3>
<ul>
<li>Default: <code>null</code></li>
@@ -313,11 +318,12 @@ user.</p>
<p>The string that starts all the debugging log output.</p>
<h3 id="https-proxy">https-proxy</h3>
<ul>
-<li>Default: the <code>HTTPS_PROXY</code> or <code>https_proxy</code> or <code>HTTP_PROXY</code> or
-<code>http_proxy</code> environment variables.</li>
+<li>Default: null</li>
<li>Type: url</li>
</ul>
-<p>A proxy to use for outgoing https requests.</p>
+<p>A proxy to use for outgoing https requests. If the <code>HTTPS_PROXY</code> or
+<code>https_proxy</code> or <code>HTTP_PROXY</code> or <code>http_proxy</code> environment variables are set,
+proxy settings will be honored by the underlying <code>request</code> library.</p>
<h3 id="ignore-scripts">ignore-scripts</h3>
<ul>
<li>Default: false</li>
@@ -500,10 +506,12 @@ than npm -- particularly a very outdated tar implementation -- leave
this as true.</p>
<h3 id="proxy">proxy</h3>
<ul>
-<li>Default: <code>HTTP_PROXY</code> or <code>http_proxy</code> environment variable, or null</li>
+<li>Default: null</li>
<li>Type: url</li>
</ul>
-<p>A proxy to use for outgoing http requests.</p>
+<p>A proxy to use for outgoing http requests. If the <code>HTTP_PROXY</code> or
+<code>http_proxy</code> environment variables are set, proxy settings will be
+honored by the underlying <code>request</code> library.</p>
<h3 id="rebuild-bundle">rebuild-bundle</h3>
<ul>
<li>Default: true</li>
@@ -703,7 +711,7 @@ instead of complete help when doing <code><a href="../cli/npm-help.html"><a href
<h3 id="umask">umask</h3>
<ul>
<li>Default: 022</li>
-<li>Type: Octal numeric string</li>
+<li>Type: Octal numeric string in range 0000..0777 (0..511)</li>
</ul>
<p>The &quot;umask&quot; value to use when setting the file creation mode on files
and folders.</p>
@@ -759,5 +767,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.1.6</p>
+<p id="footer">npm-config &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html
index b4190a1a2..1ef6966b7 100644
--- a/deps/npm/html/doc/misc/npm-developers.html
+++ b/deps/npm/html/doc/misc/npm-developers.html
@@ -94,6 +94,14 @@ no <code>.npmignore</code> file, but there <em>is</em> a <code>.gitignore</code>
ignore the stuff matched by the <code>.gitignore</code> file. If you <em>want</em> to
include something that is excluded by your <code>.gitignore</code> file, you can
create an empty <code>.npmignore</code> file to override it.</p>
+<p><code>.npmignore</code> files follow the <a href="http://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files">same pattern rules</a>
+as <code>.gitignore</code> files:</p>
+<ul>
+<li>Blank lines or lines starting with <code>#</code> are ignored.</li>
+<li>Standard glob patterns work.</li>
+<li>You can end patterns with a forward slash <code>/</code> to specify a directory.</li>
+<li>You can negate a pattern by starting it with an exclamation point <code>!</code>.</li>
+</ul>
<p>By default, the following paths and files are ignored, so there&#39;s no
need to add them to <code>.npmignore</code> explicitly:</p>
<ul>
@@ -181,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.1.6</p>
+<p id="footer">npm-developers &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html
index f59921e2e..ea48218f5 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;&#x6c;&#116;&#111;&#58;&#x73;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;">&#x73;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#x6d;">&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#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="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;">&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;</a> to the CC list of
+adds the npm support staff <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#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="&#x6d;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#115;&#117;&#112;&#112;&#111;&#x72;&#116;&#64;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#99;&#x6f;&#x6d;">&#115;&#117;&#112;&#112;&#111;&#x72;&#116;&#64;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#99;&#x6f;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
+<a href="&#109;&#97;&#105;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;</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.1.6</p>
+<p id="footer">npm-disputes &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
index 08c8eafce..0372168e1 100644
--- a/deps/npm/html/doc/misc/npm-faq.html
+++ b/deps/npm/html/doc/misc/npm-faq.html
@@ -11,7 +11,7 @@
<h1><a href="../misc/npm-faq.html">npm-faq</a></h1> <p>Frequently Asked Questions</p>
<h2 id="where-can-i-find-these-docs-in-html-">Where can I find these docs in HTML?</h2>
-<p><a href="https://www.npmjs.org/doc/">https://www.npmjs.org/doc/</a>, or run:</p>
+<p><a href="https://docs.npmjs.com/">https://docs.npmjs.com/</a>, or run:</p>
<pre><code>npm config set viewer browser
</code></pre><p>to open these documents in your default web browser rather than <code>man</code>.</p>
<h2 id="it-didn-t-work-">It didn&#39;t work.</h2>
@@ -62,7 +62,7 @@ in a shell script if you really wanted to.</p>
<p>Usually, no. Allow npm to resolve dependencies for your packages.</p>
<p>For packages you <strong>deploy</strong>, such as websites and apps,
you should use npm shrinkwrap to lock down your full dependency tree:</p>
-<p><a href="https://www.npmjs.org/doc/cli/npm-shrinkwrap.html">https://www.npmjs.org/doc/cli/npm-shrinkwrap.html</a></p>
+<p><a href="https://docs.npmjs.com/cli/shrinkwrap">https://docs.npmjs.com/cli/shrinkwrap</a></p>
<p>If you are paranoid about depending on the npm ecosystem,
you should run a private npm mirror or a private cache.</p>
<p>If you want 100% confidence in being able to reproduce the specific bytes
@@ -108,7 +108,7 @@ version cannot be properly installed with the version that you have
installed already. (Consider, if there is ever a bug in the <code>update</code>
command.)</p>
<p>In those cases, you can do this:</p>
-<pre><code>curl https://www.npmjs.org/install.sh | sh
+<pre><code>curl https://www.npmjs.com/install.sh | sh
</code></pre><h2 id="what-is-a-package-">What is a <code>package</code>?</h2>
<p>A package is:</p>
<ul>
@@ -230,28 +230,51 @@ that has a package.json in its root, or a git url.
<h2 id="the-package-registry-website-what-is-that-exactly-">The package registry website. What is that exactly?</h2>
<p>See <code><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></code>.</p>
<h2 id="i-forgot-my-password-and-can-t-publish-how-do-i-reset-it-">I forgot my password, and can&#39;t publish. How do I reset it?</h2>
-<p>Go to <a href="https://npmjs.org/forgot">https://npmjs.org/forgot</a>.</p>
+<p>Go to <a href="https://npmjs.com/forgot">https://npmjs.com/forgot</a>.</p>
<h2 id="i-get-econnrefused-a-lot-what-s-up-">I get ECONNREFUSED a lot. What&#39;s up?</h2>
<p>Either the registry is down, or node&#39;s DNS isn&#39;t able to reach out.</p>
<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="&#x6d;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#x73;&#117;&#x70;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;">&#x73;&#117;&#x70;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;</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>
<p>You can also often get a faster response by visiting the #npm channel
on Freenode IRC.</p>
<h2 id="why-no-namespaces-">Why no namespaces?</h2>
-<p>Please see this discussion: <a href="https://github.com/npm/npm/issues/798">https://github.com/npm/npm/issues/798</a></p>
-<p>tl;dr - It doesn&#39;t actually make things better, and can make them worse.</p>
-<p>If you want to namespace your own packages, you may: simply use the
-<code>-</code> character to separate the names. npm is a mostly anarchic system.
-There is not sufficient need to impose namespace rules on everyone.</p>
+<p>npm has only one global namespace. If you want to namespace your own packages,
+you may: simply use the <code>-</code> character to separate the names. npm is a mostly
+anarchic system. There is not sufficient need to impose namespace rules on
+everyone.</p>
+<p>As of 2.0, npm supports scoped packages, which allow you to publish a group of
+related modules without worrying about name collisions.</p>
+<p>Every npm user owns the scope associated with their username. For example, the
+user named <code>npm</code> owns the scope <code>@npm</code>. Scoped packages are published inside a
+scope by naming them as if they were files under the scope directory, e.g., by
+setting <code>name</code> in <code>package.json</code> to <code>@npm/npm</code>.</p>
+<p>Scoped packages can coexist with public npm packages in a private npm registry.
+At present (2014-11-04) scoped packages may NOT be published to the public npm
+registry.</p>
+<p>Unscoped packages can only depend on other unscoped packages. Scoped packages
+can depend on packages from their own scope, a different scope, or the public
+registry (unscoped).</p>
+<p>For the current documentation of scoped packages, see
+<a href="https://docs.npmjs.com/misc/scope">https://docs.npmjs.com/misc/scope</a></p>
+<p>References:</p>
+<ol>
+<li><p>For the reasoning behind the &quot;one global namespace&quot;, please see this
+discussion: <a href="https://github.com/npm/npm/issues/798">https://github.com/npm/npm/issues/798</a> (TL;DR: It doesn&#39;t
+actually make things better, and can make them worse.)</p>
+</li>
+<li><p>For the pre-implementation discussion of the scoped package feature, see
+this discussion: <a href="https://github.com/npm/npm/issues/5239">https://github.com/npm/npm/issues/5239</a></p>
+</li>
+</ol>
<h2 id="who-does-npm-">Who does npm?</h2>
<p>npm was originally written by Isaac Z. Schlueter, and many others have
contributed to it, some of them quite substantially.</p>
-<p>The npm open source project, The npm Registry, and <a href="https://www.npmjs.org">the community
+<p>The npm open source project, The npm Registry, and <a href="https://www.npmjs.com">the community
website</a> are maintained and operated by the
good folks at <a href="http://www.npmjs.com">npm, Inc.</a></p>
<h2 id="i-have-a-question-or-request-not-addressed-here-where-should-i-put-it-">I have a question or request not addressed here. Where should I put it?</h2>
@@ -284,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.1.6</p>
+<p id="footer">npm-faq &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html
index 1ca7d7586..7faca1768 100644
--- a/deps/npm/html/doc/misc/npm-index.html
+++ b/deps/npm/html/doc/misc/npm-index.html
@@ -11,11 +11,11 @@
<h1><a href="../misc/npm-index.html">npm-index</a></h1> <p>Index of all npm documentation</p>
<h3 id="readme-1-"><a href="../../doc/README.html"><a href="../../doc/README.html">README</a></a></h3>
-<p>node package manager</p>
+<p>a JavaScript package manager</p>
<h2 id="command-line-documentation">Command Line Documentation</h2>
<p>Using npm on the command line</p>
<h3 id="npm-1-"><a href="../cli/npm.html"><a href="../cli/npm.html">npm(1)</a></a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-adduser-1-"><a href="../cli/npm-adduser.html"><a href="../cli/npm-adduser.html">npm-adduser(1)</a></a></h3>
<p>Add a registry user account</p>
<h3 id="npm-bin-1-"><a href="../cli/npm-bin.html"><a href="../cli/npm-bin.html">npm-bin(1)</a></a></h3>
@@ -71,7 +71,7 @@
<h3 id="npm-repo-1-"><a href="../cli/npm-repo.html"><a href="../cli/npm-repo.html">npm-repo(1)</a></a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-1-"><a href="../cli/npm-restart.html"><a href="../cli/npm-restart.html">npm-restart(1)</a></a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-rm-1-"><a href="../cli/npm-rm.html"><a href="../cli/npm-rm.html">npm-rm(1)</a></a></h3>
<p>Remove a package</p>
<h3 id="npm-root-1-"><a href="../cli/npm-root.html"><a href="../cli/npm-root.html">npm-root(1)</a></a></h3>
@@ -109,7 +109,7 @@
<h2 id="api-documentation">API Documentation</h2>
<p>Using npm in your Node programs</p>
<h3 id="npm-3-"><a href="../api/npm.html"><a href="../api/npm.html">npm(3)</a></a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-bin-3-"><a href="../api/npm-bin.html"><a href="../api/npm-bin.html">npm-bin(3)</a></a></h3>
<p>Display npm bin folder</p>
<h3 id="npm-bugs-3-"><a href="../api/npm-bugs.html"><a href="../api/npm-bugs.html">npm-bugs(3)</a></a></h3>
@@ -157,7 +157,7 @@
<h3 id="npm-repo-3-"><a href="../api/npm-repo.html"><a href="../api/npm-repo.html">npm-repo(3)</a></a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-3-"><a href="../api/npm-restart.html"><a href="../api/npm-restart.html">npm-restart(3)</a></a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-root-3-"><a href="../api/npm-root.html"><a href="../api/npm-root.html">npm-root(3)</a></a></h3>
<p>Display npm root</p>
<h3 id="npm-run-script-3-"><a href="../api/npm-run-script.html"><a href="../api/npm-run-script.html">npm-run-script(3)</a></a></h3>
@@ -230,5 +230,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.1.6</p>
+<p id="footer">npm-index &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html
index d746316f5..84972d767 100644
--- a/deps/npm/html/doc/misc/npm-registry.html
+++ b/deps/npm/html/doc/misc/npm-registry.html
@@ -49,7 +49,7 @@ otherwise.</p>
<p>No, but it&#39;s way easier. Basically, yes, you do, or you have to
effectively implement the entire CouchDB API anyway.</p>
<h2 id="is-there-a-website-or-something-to-see-package-docs-and-such-">Is there a website or something to see package docs and such?</h2>
-<p>Yes, head over to <a href="https://npmjs.org/">https://npmjs.org/</a></p>
+<p>Yes, head over to <a href="https://npmjs.com/">https://npmjs.com/</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-config.html"><a href="../cli/npm-config.html">npm-config(1)</a></a></li>
@@ -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.1.6</p>
+<p id="footer">npm-registry &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html
index 9fed0bbf1..7acbeabed 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.1.6</p>
+<p id="footer">npm-scope &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
index b2a3dbd38..b25a69d36 100644
--- a/deps/npm/html/doc/misc/npm-scripts.html
+++ b/deps/npm/html/doc/misc/npm-scripts.html
@@ -27,10 +27,6 @@ Run AFTER the package is installed.</li>
Run BEFORE the package is uninstalled.</li>
<li>postuninstall:
Run AFTER the package is uninstalled.</li>
-<li>preupdate:
-Run BEFORE the package is updated with the update command.</li>
-<li>update, postupdate:
-Run AFTER the package is updated with the update command.</li>
<li>pretest, test, posttest:
Run by the <code>npm test</code> command.</li>
<li>prestop, stop, poststop:
@@ -220,5 +216,5 @@ the user will sudo the npm command in question.</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.1.6</p>
+<p id="footer">npm-scripts &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html
index 3028625d1..034c4b639 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.1.6</p>
+<p id="footer">removing-npm &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html
index eeea8fbc4..a3832b091 100644
--- a/deps/npm/html/doc/misc/semver.html
+++ b/deps/npm/html/doc/misc/semver.html
@@ -22,12 +22,12 @@ semver.lt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // true
</code></pre><p>As a command-line utility:</p>
<pre><code>$ semver -h
-Usage: semver &lt;version&gt; [&lt;version&gt; [...]] [-r &lt;range&gt; | -i &lt;inc&gt; | -d &lt;dec&gt;]
+Usage: semver &lt;version&gt; [&lt;version&gt; [...]] [-r &lt;range&gt; | -i &lt;inc&gt; | --preid &lt;identifier&gt; | -l | -rv]
Test if version(s) satisfy the supplied range(s), and sort them.
Multiple versions or ranges may be supplied, unless increment
-or decrement options are specified. In that case, only a single
-version may be used, and it is incremented by the specified level
+option is specified. In that case, only a single version may
+be used, and it is incremented by the specified level
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.
@@ -91,6 +91,20 @@ alpha/beta/rc versions. By including a prerelease tag in the range,
the user is indicating that they are aware of the risk. However, it
is still not appropriate to assume that they have opted into taking a
similar risk on the <em>next</em> set of prerelease versions.</p>
+<h4 id="prerelease-identifiers">Prerelease Identifiers</h4>
+<p>The method <code>.inc</code> takes an additional <code>identifier</code> string argument that
+will append the value of the string as a prerelease identifier:</p>
+<pre><code class="lang-`javascript">&gt; semver.inc(&#39;1.2.3&#39;, &#39;pre&#39;, &#39;beta&#39;)
+&#39;1.2.4-beta.0&#39;
+</code></pre>
+<p>command-line example:</p>
+<pre><code class="lang-shell">$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+</code></pre>
+<p>Which then can be used to increment further:</p>
+<pre><code class="lang-shell">$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+</code></pre>
<h3 id="advanced-range-syntax">Advanced Range Syntax</h3>
<p>Advanced range syntax desugars to primitive comparators in
deterministic ways.</p>
@@ -145,7 +159,6 @@ equal to <code>beta.2</code>. So, <code>1.2.3-beta.4</code> would be allowed, b
<code>1.2.4-beta.2</code> would not, because it is a prerelease of a
different <code>[major, minor, patch]</code> tuple.</li>
</ul>
-<p>Note: this is the same as the <code>~&gt;</code> operator in rubygems.</p>
<h4 id="caret-ranges-1-2-3-0-2-5-0-0-4-">Caret Ranges <code>^1.2.3</code> <code>^0.2.5</code> <code>^0.0.4</code></h4>
<p>Allows changes that do not modify the left-most non-zero digit in the
<code>[major, minor, patch]</code> tuple. In other words, this allows patch and
@@ -225,6 +238,9 @@ invalid comparison string is provided.</li>
<code>v2</code> is greater. Sorts in ascending order if passed to <code>Array.sort()</code>.</li>
<li><code>rcompare(v1, v2)</code>: The reverse of compare. Sorts an array of versions
in descending order when passed to <code>Array.sort()</code>.</li>
+<li><code>diff(v1, v2)</code>: Returns difference between two versions by the release type
+(<code>major</code>, <code>premajor</code>, <code>minor</code>, <code>preminor</code>, <code>patch</code>, <code>prepatch</code>, or <code>prerelease</code>),
+or null if the versions are the same.</li>
</ul>
<h3 id="ranges">Ranges</h3>
<ul>
@@ -263,5 +279,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.1.6</p>
+<p id="footer">semver &mdash; npm@2.3.0</p>
diff --git a/deps/npm/html/index.html b/deps/npm/html/index.html
index bf0a3f0b6..06ca14ba4 100644
--- a/deps/npm/html/index.html
+++ b/deps/npm/html/index.html
@@ -52,7 +52,7 @@ code { background:#fff ; outline: 1px solid #ccc; padding:0 2px; }
}
</style>
- <title>npm - Node Package Manager</title>
+ <title>npm - JavaScript Package Manager</title>
</head>
<h1>npm</h1>
diff --git a/deps/npm/html/partial/doc/README.html b/deps/npm/html/partial/doc/README.html
index 13ff98d2c..3aaea64eb 100644
--- a/deps/npm/html/partial/doc/README.html
+++ b/deps/npm/html/partial/doc/README.html
@@ -1,4 +1,4 @@
-<h1><a href="cli/npm.html">npm</a></h1> <p>node package manager</p>
+<h1><a href="cli/npm.html">npm</a></h1> <p>a JavaScript package manager</p>
<p><a href="https://travis-ci.org/npm/npm"><img src="https://img.shields.io/travis/npm/npm/master.svg" alt="Build Status"></a></p>
<h2 id="synopsis">SYNOPSIS</h2>
<p>This is just enough info to get you up and running.</p>
@@ -19,9 +19,9 @@ and prior, clone the git repo and dig through the old tags and branches.</p>
paths, etc.) then read on.</p>
<h2 id="fancy-install-unix-">Fancy Install (Unix)</h2>
<p>There&#39;s a pretty robust install script at
-<a href="https://www.npmjs.org/install.sh">https://www.npmjs.org/install.sh</a>. You can download that and run it.</p>
+<a href="https://www.npmjs.com/install.sh">https://www.npmjs.com/install.sh</a>. You can download that and run it.</p>
<p>Here&#39;s an example using curl:</p>
-<pre><code>curl -L https://npmjs.org/install.sh | sh
+<pre><code>curl -L https://npmjs.com/install.sh | sh
</code></pre><h3 id="slightly-fancier">Slightly Fancier</h3>
<p>You can set any npm configuration params with that script:</p>
<pre><code>npm_config_prefix=/some/path sh install.sh
@@ -34,31 +34,16 @@ If you plan on hacking on npm, <code>make link</code> is your friend.</p>
arbitrary config keys using the <code>./configure --key=val ...</code>, and then
run npm commands by doing <code>node cli.js &lt;cmd&gt; &lt;args&gt;</code>. (This is helpful
for testing, or running stuff without actually installing npm itself.)</p>
-<h2 id="fancy-windows-install">Fancy Windows Install</h2>
-<p>You can download a zip file from <a href="https://npmjs.org/dist/">https://npmjs.org/dist/</a>, and unpack it
+<h2 id="windows-install-or-upgrade">Windows Install or Upgrade</h2>
+<p>You can download a zip file from <a href="https://github.com/npm/npm/releases">https://github.com/npm/npm/releases</a>, and unpack it
in the same folder where node.exe lives.</p>
+<p>The latest version in a zip file is 1.4.12. To upgrade to npm 2, follow the
+Windows upgrade instructions in the npm Troubleshooting Guide:</p>
+<p><a href="https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows">https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows</a></p>
<p>If that&#39;s not fancy enough for you, then you can fetch the code with
git, and mess with it directly.</p>
<h2 id="installing-on-cygwin">Installing on Cygwin</h2>
<p>No.</p>
-<h2 id="permissions-when-using-npm-to-install-other-stuff">Permissions when Using npm to Install Other Stuff</h2>
-<p><strong>tl;dr</strong></p>
-<ul>
-<li>Use <code>sudo</code> for greater safety. Or don&#39;t, if you prefer not to.</li>
-<li>npm will downgrade permissions if it&#39;s root before running any build
-scripts that package authors specified.</li>
-</ul>
-<h3 id="more-details-">More details...</h3>
-<p>As of version 0.3, it is recommended to run npm as root.
-This allows npm to change the user identifier to the <code>nobody</code> user prior
-to running any package build or test commands.</p>
-<p>If you are not the root user, or if you are on a platform that does not
-support uid switching, then npm will not attempt to change the userid.</p>
-<p>If you would like to ensure that npm <strong>always</strong> runs scripts as the
-&quot;nobody&quot; user, and have it fail if it cannot downgrade permissions, then
-set the following configuration param:</p>
-<pre><code>npm config set unsafe-perm false
-</code></pre><p>This will prevent running in unsafe mode, even as non-root users.</p>
<h2 id="uninstalling">Uninstalling</h2>
<p>So sad to see you go.</p>
<pre><code>sudo npm uninstall npm -g
@@ -111,11 +96,11 @@ change the value for <em>all</em> npm commands in that process.</p>
command line arguments using nopt. You may also want to check out <code>npm
help config</code> to learn about all the options you can set there.</p>
<h2 id="more-docs">More Docs</h2>
-<p>Check out the <a href="https://www.npmjs.org/doc/">docs</a>,
-especially the <a href="https://www.npmjs.org/doc/faq.html">faq</a>.</p>
+<p>Check out the <a href="https://docs.npmjs.com/">docs</a>,
+especially the <a href="https://docs.npmjs.com/misc/faq">faq</a>.</p>
<p>You can use the <code>npm help</code> command to read any of them.</p>
<p>If you&#39;re a developer, and you want to use npm to publish your program,
-you should <a href="https://www.npmjs.org/doc/developers.html">read this</a></p>
+you should <a href="https://docs.npmjs.com/misc/developers">read this</a></p>
<h2 id="legal-stuff">Legal Stuff</h2>
<p>&quot;npm&quot; and &quot;The npm Registry&quot; are owned by npm, Inc.
All rights reserved. See the included LICENSE file for more details.</p>
@@ -128,9 +113,9 @@ ensure accountability, there is absolutely no guarantee, warrantee, or
assertion expressed or implied as to the quality, fitness for a
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://www.npmjs.org/doc/misc/npm-disputes.html">resolve it with the package
+and cannot <a href="https://docs.npmjs.com/misc/disputes">resolve it with the package
owner</a>, please email
-<a href="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#x75;&#x70;&#112;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#109;">&#x73;&#x75;&#x70;&#112;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#109;</a> and explain the situation.</p>
+<a href="&#109;&#x61;&#105;&#x6c;&#x74;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#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>
@@ -149,8 +134,6 @@ ban your account in extreme cases. So don&#39;t do that.</p>
<ul>
<li>web:
<a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li>
-<li>email:
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#110;&#112;&#x6d;&#x2d;&#x40;&#103;&#111;&#111;&#103;&#108;&#101;&#103;&#114;&#x6f;&#117;&#x70;&#x73;&#46;&#x63;&#111;&#109;">&#110;&#112;&#x6d;&#x2d;&#x40;&#103;&#111;&#111;&#103;&#108;&#101;&#103;&#114;&#x6f;&#117;&#x70;&#x73;&#46;&#x63;&#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>
diff --git a/deps/npm/html/partial/doc/api/npm-ls.html b/deps/npm/html/partial/doc/api/npm-ls.html
index 508003ca1..850955b83 100644
--- a/deps/npm/html/partial/doc/api/npm-ls.html
+++ b/deps/npm/html/partial/doc/api/npm-ls.html
@@ -38,6 +38,6 @@ taken if it is serialized to JSON.</p>
<p>List packages in the global install prefix instead of in the current
project.</p>
<p>Note, if parseable is set or long isn&#39;t set, then duplicates will be trimmed.
-This means that if a submodule a same dependency as a parent module, then the
+This means that if a submodule has the same dependency as a parent module, then the
dependency will only be output once.</p>
diff --git a/deps/npm/html/partial/doc/api/npm-restart.html b/deps/npm/html/partial/doc/api/npm-restart.html
index 35db404d7..f0de7504a 100644
--- a/deps/npm/html/partial/doc/api/npm-restart.html
+++ b/deps/npm/html/partial/doc/api/npm-restart.html
@@ -1,13 +1,29 @@
-<h1><a href="../api/npm-restart.html">npm-restart</a></h1> <p>Start a package</p>
+<h1><a href="../api/npm-restart.html">npm-restart</a></h1> <p>Restart a package</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm.commands.restart(packages, callback)
</code></pre><h2 id="description">DESCRIPTION</h2>
-<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided.
-Otherwise it runs package&#39;s &quot;stop&quot; script, if one was provided, and then
-the &quot;start&quot; script.</p>
+<p>This restarts a package (or multiple packages).</p>
+<p>This runs a package&#39;s &quot;stop&quot;, &quot;restart&quot;, and &quot;start&quot; scripts, and associated
+pre- and post- scripts, in the order given below:</p>
+<ol>
+<li>prerestart</li>
+<li>prestop</li>
+<li>stop</li>
+<li>poststop</li>
+<li>restart</li>
+<li>prestart</li>
+<li>start</li>
+<li>poststart</li>
+<li>postrestart</li>
+</ol>
<p>If no version is specified, then it restarts the &quot;active&quot; version.</p>
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
+<p>npm can restart multiple packages. Just specify multiple packages in
+the <code>packages</code> parameter.</p>
+<h2 id="note">NOTE</h2>
+<p>Note that the &quot;restart&quot; script is run <strong>in addition to</strong> the &quot;stop&quot;
+and &quot;start&quot; scripts, not instead of them.</p>
+<p>This is the behavior as of <code>npm</code> major version 2. A change in this
+behavior will be accompanied by an increase in major version number</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../api/npm-start.html">npm-start(3)</a></li>
diff --git a/deps/npm/html/partial/doc/api/npm-start.html b/deps/npm/html/partial/doc/api/npm-start.html
index 2eae8ba0f..98bd41f6b 100644
--- a/deps/npm/html/partial/doc/api/npm-start.html
+++ b/deps/npm/html/partial/doc/api/npm-start.html
@@ -3,6 +3,6 @@
<pre><code>npm.commands.start(packages, callback)
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>This runs a package&#39;s &quot;start&quot; script, if one was provided.</p>
-<p>npm can run tests on multiple packages. Just specify multiple packages
-in the <code>packages</code> parameter.</p>
+<p>npm can start multiple packages. Just specify multiple packages in the
+<code>packages</code> parameter.</p>
diff --git a/deps/npm/html/partial/doc/api/npm-tag.html b/deps/npm/html/partial/doc/api/npm-tag.html
index f288fc15c..227c91b46 100644
--- a/deps/npm/html/partial/doc/api/npm-tag.html
+++ b/deps/npm/html/partial/doc/api/npm-tag.html
@@ -10,7 +10,7 @@ currently used.</p>
is the package name and version is the version number (much like installing a
specific version).</p>
<p>The second element is the name of the tag to tag this version with. If this
-parameter is missing or falsey (empty), the default froom the config will be
+parameter is missing or falsey (empty), the default from the config will be
used. For more information about how to set this config, check
<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
diff --git a/deps/npm/html/partial/doc/api/npm.html b/deps/npm/html/partial/doc/api/npm.html
index dbd481b38..1ca51d38d 100644
--- a/deps/npm/html/partial/doc/api/npm.html
+++ b/deps/npm/html/partial/doc/api/npm.html
@@ -1,4 +1,4 @@
-<h1><a href="../api/npm.html">npm</a></h1> <p>node package manager</p>
+<h1><a href="../api/npm.html">npm</a></h1> <p>javascript package manager</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>var npm = require(&quot;npm&quot;)
npm.load([configObject, ]function (er, npm) {
@@ -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.1.6</p>
+<p>2.3.0</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-access.html b/deps/npm/html/partial/doc/cli/npm-access.html
new file mode 100644
index 000000000..9d84e6db9
--- /dev/null
+++ b/deps/npm/html/partial/doc/cli/npm-access.html
@@ -0,0 +1,55 @@
+<h1><a href="../cli/npm-access.html">npm-access</a></h1> <p>Set access level on published packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm access public [&lt;package&gt;]
+npm access restricted [&lt;package&gt;]
+
+npm access add &lt;read-only|read-write&gt; &lt;entity&gt; [&lt;package&gt;]
+npm access rm &lt;entity&gt; [&lt;package&gt;]
+
+npm access ls [&lt;package&gt;]
+npm access edit [&lt;package&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Used to set access controls on private packages.</p>
+<p>For all of the subcommands, <code>npm access</code> will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand.</p>
+<ul>
+<li><p>public / restricted:
+Set a package to be either publicly accessible or restricted.</p>
+</li>
+<li><p>add / rm:
+Add or remove the ability of users and teams to have read-only or read-write
+access to a package.</p>
+</li>
+<li><p>ls:
+Show all of the access privileges for a package. Will only show permissions
+for packages to which you have at least read access.</p>
+</li>
+<li><p>edit:
+Set the access privileges for a package at once using <code>$EDITOR</code>.</p>
+</li>
+</ul>
+<h2 id="details">DETAILS</h2>
+<p><code>npm access</code> always operates directly on the current registry, configurable
+from the command line using <code>--registry=&lt;registry url&gt;</code>.</p>
+<p>Unscoped packages are <em>always public</em>.</p>
+<p>Scoped packages <em>default to restricted</em>, but you can either publish them as
+public using <code>npm publish --access=public</code>, or set their access as public using
+<code>npm access public</code> after the initial publish.</p>
+<p>You must have privileges to set the access of a package:</p>
+<ul>
+<li>You are an owner of an unscoped or scoped package.</li>
+<li>You are a member of the team that owns a scope.</li>
+<li>You have been given read-write privileges for a package, either as a member
+of a team or directly as an owner.</li>
+</ul>
+<p>If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+<code>--access=public</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+</ul>
+
diff --git a/deps/npm/html/partial/doc/cli/npm-adduser.html b/deps/npm/html/partial/doc/cli/npm-adduser.html
index ac9fa0086..ce2c5dcce 100644
--- a/deps/npm/html/partial/doc/cli/npm-adduser.html
+++ b/deps/npm/html/partial/doc/cli/npm-adduser.html
@@ -6,11 +6,12 @@
save the credentials to the <code>.npmrc</code> file. If no registry is specified,
the default registry will be used (see <code><a href="../misc/npm-config.html">npm-config(7)</a></code>).</p>
<p>The username, password, and email are read in from prompts.</p>
-<p>You may use this command to change your email address, but not username
-or password.</p>
-<p>To reset your password, go to <a href="https://www.npmjs.org/forgot">https://www.npmjs.org/forgot</a></p>
+<p>To reset your password, go to <a href="https://www.npmjs.com/forgot">https://www.npmjs.com/forgot</a></p>
+<p>To change your email address, go to <a href="https://www.npmjs.com/email-edit">https://www.npmjs.com/email-edit</a></p>
<p>You may use this command multiple times with the same user account to
-authorize on a new machine.</p>
+authorize on a new machine. When authenticating on a new machine,
+the username, password and email address must all match with
+your existing record.</p>
<p><code>npm login</code> is an alias to <code>adduser</code> and behaves exactly the same way.</p>
<h2 id="configuration">CONFIGURATION</h2>
<h3 id="registry">registry</h3>
@@ -33,7 +34,7 @@ registries. Can be used with <code>--registry</code> and / or <code>--scope</cod
<pre><code>npm adduser --registry=http://private-registry.example.com --always-auth
</code></pre><p>This will ensure that all requests to that registry (including for tarballs)
include an authorization header. See <code>always-auth</code> in <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for more
-details on always-auth. Registry-specific configuaration of <code>always-auth</code> takes
+details on always-auth. Registry-specific configuration of <code>always-auth</code> takes
precedence over any global configuration.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
diff --git a/deps/npm/html/partial/doc/cli/npm-dist-tag.html b/deps/npm/html/partial/doc/cli/npm-dist-tag.html
new file mode 100644
index 000000000..86a3d21a2
--- /dev/null
+++ b/deps/npm/html/partial/doc/cli/npm-dist-tag.html
@@ -0,0 +1,56 @@
+<h1><a href="../cli/npm-dist-tag.html">npm-dist-tag</a></h1> <p>Modify package distribution tags</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm dist-tag add &lt;pkg&gt;@&lt;version&gt; [&lt;tag&gt;]
+npm dist-tag rm &lt;pkg&gt; &lt;tag&gt;
+npm dist-tag ls [&lt;pkg&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Add, remove, and enumerate distribution tags on a package:</p>
+<ul>
+<li><p>add:
+Tags the specified version of the package with the specified tag, or the
+<code>--tag</code> config if not specified.</p>
+</li>
+<li><p>rm:
+Clear a tag that is no longer in use from the package.</p>
+</li>
+<li><p>ls:
+Show all of the dist-tags for a package, defaulting to the package in
+the curren prefix.</p>
+</li>
+</ul>
+<p>A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:</p>
+<pre><code>npm install &lt;name&gt;@&lt;tag&gt;
+</code></pre><p>When installing dependencies, a preferred tagged version may be specified:</p>
+<pre><code>npm install --tag &lt;tag&gt;
+</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
+<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="purpose">PURPOSE</h2>
+<p>Tags can be used to provide an alias instead of version numbers. For
+example, <code>npm</code> currently uses the tag &quot;next&quot; to identify the upcoming
+version, and the tag &quot;latest&quot; to identify the current version.</p>
+<p>A project might choose to have multiple streams of development, e.g.,
+&quot;stable&quot;, &quot;canary&quot;.</p>
+<h2 id="caveats">CAVEATS</h2>
+<p>This command used to be known as <code>npm tag</code>, which only created new tags, and so
+had a different syntax.</p>
+<p>Tags must share a namespace with version numbers, because they are specified in
+the same slot: <code>npm install &lt;pkg&gt;@&lt;version&gt;</code> vs <code>npm install &lt;pkg&gt;@&lt;tag&gt;</code>.</p>
+<p>Tags that can be interpreted as valid semver ranges will be rejected. For
+example, <code>v1.4</code> cannot be used as a tag, because it is interpreted by semver as
+<code>&gt;=1.4.0 &lt;1.5.0</code>. See <a href="https://github.com/npm/npm/issues/6082">https://github.com/npm/npm/issues/6082</a>.</p>
+<p>The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter <code>v</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-tag.html">npm-tag(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../api/npm-tag.html">npm-tag(3)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
+
diff --git a/deps/npm/html/partial/doc/cli/npm-link.html b/deps/npm/html/partial/doc/cli/npm-link.html
index 3c832399d..c4b01c2a6 100644
--- a/deps/npm/html/partial/doc/cli/npm-link.html
+++ b/deps/npm/html/partial/doc/cli/npm-link.html
@@ -13,7 +13,7 @@ symlink from the local <code>node_modules</code> folder to the global symlink.</
<p>Note that <code>package-name</code> is taken from <code>package.json</code>,
not from directory name.</p>
<p>The package name can be optionally prefixed with a scope. See <code><a href="../misc/npm-scope.html">npm-scope(7)</a></code>.
-The scope must by preceded by an @-symbol and followed by a slash.</p>
+The scope must be preceded by an @-symbol and followed by a slash.</p>
<p>When creating tarballs for <code>npm publish</code>, the linked packages are
&quot;snapshotted&quot; to their current state by resolving the symbolic links.</p>
<p>This is handy for installing your own stuff, so that you can work on it and
diff --git a/deps/npm/html/partial/doc/cli/npm-ls.html b/deps/npm/html/partial/doc/cli/npm-ls.html
index 199b6002b..788a0d2ad 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.1.6 /path/to/npm
+<pre><code>npm@2.3.0 /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-restart.html b/deps/npm/html/partial/doc/cli/npm-restart.html
index 267e570ec..218647337 100644
--- a/deps/npm/html/partial/doc/cli/npm-restart.html
+++ b/deps/npm/html/partial/doc/cli/npm-restart.html
@@ -1,9 +1,26 @@
-<h1><a href="../cli/npm-restart.html">npm-restart</a></h1> <p>Start a package</p>
+<h1><a href="../cli/npm-restart.html">npm-restart</a></h1> <p>Restart a package</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm restart [-- &lt;args&gt;]
</code></pre><h2 id="description">DESCRIPTION</h2>
-<p>This runs a package&#39;s &quot;restart&quot; script, if one was provided. Otherwise it runs
-package&#39;s &quot;stop&quot; script, if one was provided, and then the &quot;start&quot; script.</p>
+<p>This restarts a package.</p>
+<p>This runs a package&#39;s &quot;stop&quot;, &quot;restart&quot;, and &quot;start&quot; scripts, and associated
+pre- and post- scripts, in the order given below:</p>
+<ol>
+<li>prerestart</li>
+<li>prestop</li>
+<li>stop</li>
+<li>poststop</li>
+<li>restart</li>
+<li>prestart</li>
+<li>start</li>
+<li>poststart</li>
+<li>postrestart</li>
+</ol>
+<h2 id="note">NOTE</h2>
+<p>Note that the &quot;restart&quot; script is run <strong>in addition to</strong> the &quot;stop&quot;
+and &quot;start&quot; scripts, not instead of them.</p>
+<p>This is the behavior as of <code>npm</code> major version 2. A change in this
+behavior will be accompanied by an increase in major version number</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
@@ -11,5 +28,6 @@ package&#39;s &quot;stop&quot; script, if one was provided, and then the &quot;s
<li><a href="../cli/npm-test.html">npm-test(1)</a></li>
<li><a href="../cli/npm-start.html">npm-start(1)</a></li>
<li><a href="../cli/npm-stop.html">npm-stop(1)</a></li>
+<li><a href="../api/npm-restart.html">npm-restart(3)</a></li>
</ul>
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 b9a7cefce..13ff25963 100644
--- a/deps/npm/html/partial/doc/cli/npm-run-script.html
+++ b/deps/npm/html/partial/doc/cli/npm-run-script.html
@@ -6,9 +6,12 @@ npm run [command] [-- &lt;args&gt;]
<p>This runs an arbitrary command from a package&#39;s <code>&quot;scripts&quot;</code> object.
If no package name is provided, it will search for a <code>package.json</code>
in the current folder and use its <code>&quot;scripts&quot;</code> object. If no <code>&quot;command&quot;</code>
-is provided, it will list the available top level scripts.</p>
-<p>It is used by the test, start, restart, and stop commands, but can be
-called directly, as well.</p>
+is provided, it will list the available top level scripts. The <code>env</code> command
+can be used to list environment variables that will be available to the script
+at runtime. If an &quot;env&quot; command is defined in your package it will have
+precedence instead.</p>
+<p><code>run[-script]</code> is used by the test, start, restart, and stop commands, but can
+be called directly, as well.</p>
<p>As of <a href="http://blog.npmjs.org/post/98131109725/npm-2-0-0"><code>npm@2.0.0</code></a>, you can
use custom arguments when executing scripts. The special option <code>--</code> is used by
<a href="http://goo.gl/KxMmtG">getopt</a> to delimit the end of the options. npm will pass
diff --git a/deps/npm/html/partial/doc/cli/npm-tag.html b/deps/npm/html/partial/doc/cli/npm-tag.html
index 61b1c76e6..3d0ff7186 100644
--- a/deps/npm/html/partial/doc/cli/npm-tag.html
+++ b/deps/npm/html/partial/doc/cli/npm-tag.html
@@ -11,6 +11,22 @@ of using a specific version number:</p>
<pre><code>npm install --tag &lt;tag&gt;
</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="purpose">PURPOSE</h2>
+<p>Tags can be used to provide an alias instead of version numbers. For
+example, <code>npm</code> currently uses the tag &quot;next&quot; to identify the upcoming
+version, and the tag &quot;latest&quot; to identify the current version.</p>
+<p>A project might choose to have multiple streams of development, e.g.,
+&quot;stable&quot;, &quot;canary&quot;.</p>
+<h2 id="caveats">CAVEATS</h2>
+<p>Tags must share a namespace with version numbers, because they are
+specified in the same slot: <code>npm install &lt;pkg&gt;@&lt;version&gt;</code> vs <code>npm
+install &lt;pkg&gt;@&lt;tag&gt;</code>.</p>
+<p>Tags that can be interpreted as valid semver ranges will be
+rejected. For example, <code>v1.4</code> cannot be used as a tag, because it is
+interpreted by semver as <code>&gt;=1.4.0 &lt;1.5.0</code>. See
+<a href="https://github.com/npm/npm/issues/6082">https://github.com/npm/npm/issues/6082</a>.</p>
+<p>The simplest way to avoid semver problems with tags is to use tags
+that do not begin with a number or the letter <code>v</code>.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
@@ -19,6 +35,7 @@ of using a specific version number:</p>
<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../api/npm-tag.html">npm-tag(3)</a></li>
<li><a href="../files/npmrc.html">npmrc(5)</a></li>
</ul>
diff --git a/deps/npm/html/partial/doc/cli/npm-update.html b/deps/npm/html/partial/doc/cli/npm-update.html
index 3923be7fa..6e35abd45 100644
--- a/deps/npm/html/partial/doc/cli/npm-update.html
+++ b/deps/npm/html/partial/doc/cli/npm-update.html
@@ -4,7 +4,9 @@
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>This command will update all the packages listed to the latest version
(specified by the <code>tag</code> config).</p>
-<p>It will also install missing packages.</p>
+<p>It will also install missing packages. As with all commands that install
+packages, the <code>--dev</code> flag will cause <code>devDependencies</code> to be processed
+as well.</p>
<p>If the <code>-g</code> flag is specified, this command will update globally installed
packages.</p>
<p>If no package name is specified, all packages in the specified location (global
diff --git a/deps/npm/html/partial/doc/cli/npm-version.html b/deps/npm/html/partial/doc/cli/npm-version.html
index 5217f0196..0cc3a21ad 100644
--- a/deps/npm/html/partial/doc/cli/npm-version.html
+++ b/deps/npm/html/partial/doc/cli/npm-version.html
@@ -3,7 +3,7 @@
<pre><code>npm version [&lt;newversion&gt; | major | minor | patch | premajor | preminor | prepatch | prerelease]
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>Run this in a package directory to bump the version and write the new
-data back to the package.json file.</p>
+data back to <code>package.json</code> and, if present, <code>npm-shrinkwrap.json</code>.</p>
<p>The <code>newversion</code> argument should be a valid semver string, <em>or</em> a
valid second argument to semver.inc (one of &quot;patch&quot;, &quot;minor&quot;, &quot;major&quot;,
&quot;prepatch&quot;, &quot;preminor&quot;, &quot;premajor&quot;, &quot;prerelease&quot;). In the second case,
diff --git a/deps/npm/html/partial/doc/cli/npm-view.html b/deps/npm/html/partial/doc/cli/npm-view.html
index a5b38518f..dcd41693e 100644
--- a/deps/npm/html/partial/doc/cli/npm-view.html
+++ b/deps/npm/html/partial/doc/cli/npm-view.html
@@ -13,7 +13,7 @@ this:</p>
For example, to show the dependencies of the <code>ronn</code> package at version
0.3.5, you could do the following:</p>
<pre><code>npm view ronn@0.3.5 dependencies
-</code></pre><p>You can view child field by separating them with a period.
+</code></pre><p>You can view child fields by separating them with a period.
To view the git repository URL for the latest version of npm, you could
do this:</p>
<pre><code>npm view npm repository.url
diff --git a/deps/npm/html/partial/doc/cli/npm.html b/deps/npm/html/partial/doc/cli/npm.html
index 646fffcb3..9410dfdea 100644
--- a/deps/npm/html/partial/doc/cli/npm.html
+++ b/deps/npm/html/partial/doc/cli/npm.html
@@ -1,8 +1,8 @@
-<h1><a href="../cli/npm.html">npm</a></h1> <p>node package manager</p>
+<h1><a href="../cli/npm.html">npm</a></h1> <p>javascript package manager</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm &lt;command&gt; [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>2.1.6</p>
+<p>2.3.0</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;&#x61;&#105;&#108;&#x74;&#111;&#58;&#110;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#114;&#111;&#117;&#x70;&#x73;&#46;&#99;&#x6f;&#x6d;">&#110;&#x70;&#109;&#45;&#64;&#x67;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#114;&#111;&#117;&#x70;&#x73;&#46;&#99;&#x6f;&#x6d;</a></li>
+<li><a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#x6d;">&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#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="&#109;&#x61;&#x69;&#108;&#116;&#111;&#58;&#x6e;&#112;&#109;&#x2d;&#x40;&#x67;&#x6f;&#111;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#x73;&#46;&#99;&#x6f;&#x6d;">&#x6e;&#112;&#109;&#x2d;&#x40;&#x67;&#x6f;&#111;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#x73;&#46;&#99;&#x6f;&#x6d;</a></li>
+<a href="&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#109;">&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#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;&#105;&#108;&#x74;&#111;&#58;&#105;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;">&#105;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;</a></p>
+<a href="&#109;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#101;">&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#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/files/npm-json.html b/deps/npm/html/partial/doc/files/npm-json.html
index df3bea837..95f26c6ee 100644
--- a/deps/npm/html/partial/doc/files/npm-json.html
+++ b/deps/npm/html/partial/doc/files/npm-json.html
@@ -21,7 +21,7 @@ Also, it can&#39;t start with a dot or an underscore.</li>
<li>The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive.</li>
<li>You may want to check the npm registry to see if there&#39;s something by that name
-already, before you get too attached to it. <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></li>
+already, before you get too attached to it. <a href="https://www.npmjs.com/">https://www.npmjs.com/</a></li>
</ul>
<p>A name can be optionally prefixed by a scope, e.g. <code>@myorg/mypackage</code>. See
<code><a href="../misc/npm-scope.html">npm-scope(7)</a></code> for more detail.</p>
@@ -104,10 +104,10 @@ feature to install the &quot;npm&quot; executable.)</p>
command name to local file name. On install, npm will symlink that file into
<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
installs.</p>
-<p>For example, npm has this:</p>
-<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }
-</code></pre><p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
-<code>/usr/local/bin/npm</code>.</p>
+<p>For example, myapp could have this:</p>
+<pre><code>{ &quot;bin&quot; : { &quot;myapp&quot; : &quot;./cli.js&quot; } }
+</code></pre><p>So, when you install myapp, it&#39;ll create a symlink from the <code>cli.js</code> script to
+<code>/usr/local/bin/myapp</code>.</p>
<p>If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string. For example:</p>
<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
@@ -170,7 +170,7 @@ maybe, someday.</p>
<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
<h2 id="repository">repository</h2>
<p>Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the <code>npm docs</code>
+want to contribute. If the git repo is on GitHub, then the <code>npm docs</code>
command will be able to find you.</p>
<p>Do it like this:</p>
<pre><code>&quot;repository&quot; :
@@ -258,12 +258,15 @@ git+https://user@hostname/project/blah.git#commit-ish
</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
<h2 id="github-urls">GitHub URLs</h2>
-<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;: &quot;user/foo-project&quot;. For example:</p>
+<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;:
+&quot;user/foo-project&quot;. Just as with git URLs, a <code>commit-ish</code> suffix can be
+included. For example:</p>
<pre><code>{
&quot;name&quot;: &quot;foo&quot;,
&quot;version&quot;: &quot;0.0.0&quot;,
&quot;dependencies&quot;: {
- &quot;express&quot;: &quot;visionmedia/express&quot;
+ &quot;express&quot;: &quot;visionmedia/express&quot;,
+ &quot;mocha&quot;: &quot;visionmedia/mocha#4727d357ea&quot;
}
}
</code></pre><h2 id="local-paths">Local Paths</h2>
@@ -317,7 +320,7 @@ run this script as well, so that you can test it easily.</p>
<h2 id="peerdependencies">peerDependencies</h2>
<p>In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a <code>require</code> of this host.
-This is usually refered to as a <em>plugin</em>. Notably, your module may be exposing
+This is usually referred to as a <em>plugin</em>. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation.</p>
<p>For example:</p>
<pre><code>{
diff --git a/deps/npm/html/partial/doc/files/npmrc.html b/deps/npm/html/partial/doc/files/npmrc.html
index ac386ca85..988920a48 100644
--- a/deps/npm/html/partial/doc/files/npmrc.html
+++ b/deps/npm/html/partial/doc/files/npmrc.html
@@ -20,7 +20,11 @@ parameters. Environment variables can be replaced using
</code></pre><p>Each of these files is loaded, and config options are resolved in
priority order. For example, a setting in the userconfig file would
override the setting in the globalconfig file.</p>
-<h3 id="per-project-config-file">Per-project config file</h3>
+<p>Array values are specified by adding &quot;[]&quot; after the key name. For
+example:</p>
+<pre><code>key[] = &quot;first value&quot;
+key[] = &quot;second value&quot;
+</code></pre><h3 id="per-project-config-file">Per-project config file</h3>
<p>When working locally in a project, a <code>.npmrc</code> file in the root of the
project (ie, a sibling of <code>node_modules</code> and <code>package.json</code>) will set
config values specific to this project.</p>
diff --git a/deps/npm/html/partial/doc/files/package.json.html b/deps/npm/html/partial/doc/files/package.json.html
index df3bea837..95f26c6ee 100644
--- a/deps/npm/html/partial/doc/files/package.json.html
+++ b/deps/npm/html/partial/doc/files/package.json.html
@@ -21,7 +21,7 @@ Also, it can&#39;t start with a dot or an underscore.</li>
<li>The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive.</li>
<li>You may want to check the npm registry to see if there&#39;s something by that name
-already, before you get too attached to it. <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a></li>
+already, before you get too attached to it. <a href="https://www.npmjs.com/">https://www.npmjs.com/</a></li>
</ul>
<p>A name can be optionally prefixed by a scope, e.g. <code>@myorg/mypackage</code>. See
<code><a href="../misc/npm-scope.html">npm-scope(7)</a></code> for more detail.</p>
@@ -104,10 +104,10 @@ feature to install the &quot;npm&quot; executable.)</p>
command name to local file name. On install, npm will symlink that file into
<code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
installs.</p>
-<p>For example, npm has this:</p>
-<pre><code>{ &quot;bin&quot; : { &quot;npm&quot; : &quot;./cli.js&quot; } }
-</code></pre><p>So, when you install npm, it&#39;ll create a symlink from the <code>cli.js</code> script to
-<code>/usr/local/bin/npm</code>.</p>
+<p>For example, myapp could have this:</p>
+<pre><code>{ &quot;bin&quot; : { &quot;myapp&quot; : &quot;./cli.js&quot; } }
+</code></pre><p>So, when you install myapp, it&#39;ll create a symlink from the <code>cli.js</code> script to
+<code>/usr/local/bin/myapp</code>.</p>
<p>If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string. For example:</p>
<pre><code>{ &quot;name&quot;: &quot;my-program&quot;
@@ -170,7 +170,7 @@ maybe, someday.</p>
<p>Put example scripts in here. Someday, it might be exposed in some clever way.</p>
<h2 id="repository">repository</h2>
<p>Specify the place where your code lives. This is helpful for people who
-want to contribute. If the git repo is on github, then the <code>npm docs</code>
+want to contribute. If the git repo is on GitHub, then the <code>npm docs</code>
command will be able to find you.</p>
<p>Do it like this:</p>
<pre><code>&quot;repository&quot; :
@@ -258,12 +258,15 @@ git+https://user@hostname/project/blah.git#commit-ish
</code></pre><p>The <code>commit-ish</code> can be any tag, sha, or branch which can be supplied as
an argument to <code>git checkout</code>. The default is <code>master</code>.</p>
<h2 id="github-urls">GitHub URLs</h2>
-<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;: &quot;user/foo-project&quot;. For example:</p>
+<p>As of version 1.1.65, you can refer to GitHub urls as just &quot;foo&quot;:
+&quot;user/foo-project&quot;. Just as with git URLs, a <code>commit-ish</code> suffix can be
+included. For example:</p>
<pre><code>{
&quot;name&quot;: &quot;foo&quot;,
&quot;version&quot;: &quot;0.0.0&quot;,
&quot;dependencies&quot;: {
- &quot;express&quot;: &quot;visionmedia/express&quot;
+ &quot;express&quot;: &quot;visionmedia/express&quot;,
+ &quot;mocha&quot;: &quot;visionmedia/mocha#4727d357ea&quot;
}
}
</code></pre><h2 id="local-paths">Local Paths</h2>
@@ -317,7 +320,7 @@ run this script as well, so that you can test it easily.</p>
<h2 id="peerdependencies">peerDependencies</h2>
<p>In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a <code>require</code> of this host.
-This is usually refered to as a <em>plugin</em>. Notably, your module may be exposing
+This is usually referred to as a <em>plugin</em>. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation.</p>
<p>For example:</p>
<pre><code>{
diff --git a/deps/npm/html/partial/doc/index.html b/deps/npm/html/partial/doc/index.html
index f6678d937..4fb98e1bd 100644
--- a/deps/npm/html/partial/doc/index.html
+++ b/deps/npm/html/partial/doc/index.html
@@ -1,10 +1,10 @@
<h1><a href="misc/npm-index.html">npm-index</a></h1> <p>Index of all npm documentation</p>
<h3 id="readme-1-"><a href="../doc/README.html">README</a></h3>
-<p>node package manager</p>
+<p>a JavaScript package manager</p>
<h2 id="command-line-documentation">Command Line Documentation</h2>
<p>Using npm on the command line</p>
<h3 id="npm-1-"><a href="cli/npm.html">npm(1)</a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-adduser-1-"><a href="cli/npm-adduser.html">npm-adduser(1)</a></h3>
<p>Add a registry user account</p>
<h3 id="npm-bin-1-"><a href="cli/npm-bin.html">npm-bin(1)</a></h3>
@@ -60,7 +60,7 @@
<h3 id="npm-repo-1-"><a href="cli/npm-repo.html">npm-repo(1)</a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-1-"><a href="cli/npm-restart.html">npm-restart(1)</a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-rm-1-"><a href="cli/npm-rm.html">npm-rm(1)</a></h3>
<p>Remove a package</p>
<h3 id="npm-root-1-"><a href="cli/npm-root.html">npm-root(1)</a></h3>
@@ -98,7 +98,7 @@
<h2 id="api-documentation">API Documentation</h2>
<p>Using npm in your Node programs</p>
<h3 id="npm-3-"><a href="api/npm.html">npm(3)</a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-bin-3-"><a href="api/npm-bin.html">npm-bin(3)</a></h3>
<p>Display npm bin folder</p>
<h3 id="npm-bugs-3-"><a href="api/npm-bugs.html">npm-bugs(3)</a></h3>
@@ -146,7 +146,7 @@
<h3 id="npm-repo-3-"><a href="api/npm-repo.html">npm-repo(3)</a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-3-"><a href="api/npm-restart.html">npm-restart(3)</a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-root-3-"><a href="api/npm-root.html">npm-root(3)</a></h3>
<p>Display npm root</p>
<h3 id="npm-run-script-3-"><a href="api/npm-run-script.html">npm-run-script(3)</a></h3>
diff --git a/deps/npm/html/partial/doc/misc/npm-coding-style.html b/deps/npm/html/partial/doc/misc/npm-coding-style.html
index 732b326c9..b50b95f27 100644
--- a/deps/npm/html/partial/doc/misc/npm-coding-style.html
+++ b/deps/npm/html/partial/doc/misc/npm-coding-style.html
@@ -5,14 +5,14 @@ difference&#39;s sake, but rather a carefully crafted style that is
designed to reduce visual clutter and make bugs more apparent.</p>
<p>If you want to contribute to npm (which is very encouraged), you should
make your code conform to npm&#39;s style.</p>
-<p>Note: this concerns npm&#39;s code not the specific packages at npmjs.org</p>
+<p>Note: this concerns npm&#39;s code not the specific packages that you can download from the npm registry.</p>
<h2 id="line-length">Line Length</h2>
<p>Keep lines shorter than 80 characters. It&#39;s better for lines to be
too short than to be too long. Break up long lists, objects, and other
statements onto multiple lines.</p>
<h2 id="indentation">Indentation</h2>
<p>Two-spaces. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that&#39;s that.</p>
+(and on GitHub), and node uses 2 spaces, so that&#39;s that.</p>
<p>Configure your editor appropriately.</p>
<h2 id="curly-braces">Curly braces</h2>
<p>Curly braces belong on the same line as the thing that necessitates them.</p>
diff --git a/deps/npm/html/partial/doc/misc/npm-config.html b/deps/npm/html/partial/doc/misc/npm-config.html
index 87409720b..1dcbc237c 100644
--- a/deps/npm/html/partial/doc/misc/npm-config.html
+++ b/deps/npm/html/partial/doc/misc/npm-config.html
@@ -107,13 +107,18 @@ ostensibly Unix systems.</p>
<h3 id="ca">ca</h3>
<ul>
<li>Default: The npm CA certificate</li>
-<li>Type: String or null</li>
+<li>Type: String, Array or null</li>
</ul>
<p>The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry.</p>
-<p>Set to <code>null</code> to only allow &quot;known&quot; registrars, or to a specific CA cert
+connections to the registry. Values should be in PEM format with newlines
+replaced by the string &quot;\n&quot;. For example:</p>
+<pre><code>ca=&quot;-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----&quot;
+</code></pre><p>Set to <code>null</code> to only allow &quot;known&quot; registrars, or to a specific CA cert
to trust only that specific signing authority.</p>
-<p>See also the <code>strict-ssl</code> config.</p>
+<p>Multiple CAs can be trusted by specifying an array of certificates:</p>
+<pre><code>ca[]=&quot;...&quot;
+ca[]=&quot;...&quot;
+</code></pre><p>See also the <code>strict-ssl</code> config.</p>
<h3 id="cafile">cafile</h3>
<ul>
<li>Default: <code>null</code></li>
@@ -302,11 +307,12 @@ user.</p>
<p>The string that starts all the debugging log output.</p>
<h3 id="https-proxy">https-proxy</h3>
<ul>
-<li>Default: the <code>HTTPS_PROXY</code> or <code>https_proxy</code> or <code>HTTP_PROXY</code> or
-<code>http_proxy</code> environment variables.</li>
+<li>Default: null</li>
<li>Type: url</li>
</ul>
-<p>A proxy to use for outgoing https requests.</p>
+<p>A proxy to use for outgoing https requests. If the <code>HTTPS_PROXY</code> or
+<code>https_proxy</code> or <code>HTTP_PROXY</code> or <code>http_proxy</code> environment variables are set,
+proxy settings will be honored by the underlying <code>request</code> library.</p>
<h3 id="ignore-scripts">ignore-scripts</h3>
<ul>
<li>Default: false</li>
@@ -489,10 +495,12 @@ than npm -- particularly a very outdated tar implementation -- leave
this as true.</p>
<h3 id="proxy">proxy</h3>
<ul>
-<li>Default: <code>HTTP_PROXY</code> or <code>http_proxy</code> environment variable, or null</li>
+<li>Default: null</li>
<li>Type: url</li>
</ul>
-<p>A proxy to use for outgoing http requests.</p>
+<p>A proxy to use for outgoing http requests. If the <code>HTTP_PROXY</code> or
+<code>http_proxy</code> environment variables are set, proxy settings will be
+honored by the underlying <code>request</code> library.</p>
<h3 id="rebuild-bundle">rebuild-bundle</h3>
<ul>
<li>Default: true</li>
@@ -692,7 +700,7 @@ instead of complete help when doing <code><a href="../cli/npm-help.html">npm-hel
<h3 id="umask">umask</h3>
<ul>
<li>Default: 022</li>
-<li>Type: Octal numeric string</li>
+<li>Type: Octal numeric string in range 0000..0777 (0..511)</li>
</ul>
<p>The &quot;umask&quot; value to use when setting the file creation mode on files
and folders.</p>
diff --git a/deps/npm/html/partial/doc/misc/npm-developers.html b/deps/npm/html/partial/doc/misc/npm-developers.html
index 7ba880a44..10d0cd891 100644
--- a/deps/npm/html/partial/doc/misc/npm-developers.html
+++ b/deps/npm/html/partial/doc/misc/npm-developers.html
@@ -83,6 +83,14 @@ no <code>.npmignore</code> file, but there <em>is</em> a <code>.gitignore</code>
ignore the stuff matched by the <code>.gitignore</code> file. If you <em>want</em> to
include something that is excluded by your <code>.gitignore</code> file, you can
create an empty <code>.npmignore</code> file to override it.</p>
+<p><code>.npmignore</code> files follow the <a href="http://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files">same pattern rules</a>
+as <code>.gitignore</code> files:</p>
+<ul>
+<li>Blank lines or lines starting with <code>#</code> are ignored.</li>
+<li>Standard glob patterns work.</li>
+<li>You can end patterns with a forward slash <code>/</code> to specify a directory.</li>
+<li>You can negate a pattern by starting it with an exclamation point <code>!</code>.</li>
+</ul>
<p>By default, the following paths and files are ignored, so there&#39;s no
need to add them to <code>.npmignore</code> explicitly:</p>
<ul>
diff --git a/deps/npm/html/partial/doc/misc/npm-disputes.html b/deps/npm/html/partial/doc/misc/npm-disputes.html
index 6a7abca71..ab322741a 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;&#x6c;&#116;&#111;&#58;&#x73;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;">&#x73;&#x75;&#x70;&#112;&#111;&#114;&#116;&#x40;&#x6e;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#x6d;">&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#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="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;">&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#106;&#x73;&#x2e;&#x63;&#111;&#109;</a> to the CC list of
+adds the npm support staff <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#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="&#x6d;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#115;&#117;&#112;&#112;&#111;&#x72;&#116;&#64;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#99;&#x6f;&#x6d;">&#115;&#117;&#112;&#112;&#111;&#x72;&#116;&#64;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#99;&#x6f;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
+<a href="&#109;&#97;&#105;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;</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 7fc16344f..a015b7383 100644
--- a/deps/npm/html/partial/doc/misc/npm-faq.html
+++ b/deps/npm/html/partial/doc/misc/npm-faq.html
@@ -1,6 +1,6 @@
<h1><a href="../misc/npm-faq.html">npm-faq</a></h1> <p>Frequently Asked Questions</p>
<h2 id="where-can-i-find-these-docs-in-html-">Where can I find these docs in HTML?</h2>
-<p><a href="https://www.npmjs.org/doc/">https://www.npmjs.org/doc/</a>, or run:</p>
+<p><a href="https://docs.npmjs.com/">https://docs.npmjs.com/</a>, or run:</p>
<pre><code>npm config set viewer browser
</code></pre><p>to open these documents in your default web browser rather than <code>man</code>.</p>
<h2 id="it-didn-t-work-">It didn&#39;t work.</h2>
@@ -51,7 +51,7 @@ in a shell script if you really wanted to.</p>
<p>Usually, no. Allow npm to resolve dependencies for your packages.</p>
<p>For packages you <strong>deploy</strong>, such as websites and apps,
you should use npm shrinkwrap to lock down your full dependency tree:</p>
-<p><a href="https://www.npmjs.org/doc/cli/npm-shrinkwrap.html">https://www.npmjs.org/doc/cli/npm-shrinkwrap.html</a></p>
+<p><a href="https://docs.npmjs.com/cli/shrinkwrap">https://docs.npmjs.com/cli/shrinkwrap</a></p>
<p>If you are paranoid about depending on the npm ecosystem,
you should run a private npm mirror or a private cache.</p>
<p>If you want 100% confidence in being able to reproduce the specific bytes
@@ -97,7 +97,7 @@ version cannot be properly installed with the version that you have
installed already. (Consider, if there is ever a bug in the <code>update</code>
command.)</p>
<p>In those cases, you can do this:</p>
-<pre><code>curl https://www.npmjs.org/install.sh | sh
+<pre><code>curl https://www.npmjs.com/install.sh | sh
</code></pre><h2 id="what-is-a-package-">What is a <code>package</code>?</h2>
<p>A package is:</p>
<ul>
@@ -219,28 +219,51 @@ that has a package.json in its root, or a git url.
<h2 id="the-package-registry-website-what-is-that-exactly-">The package registry website. What is that exactly?</h2>
<p>See <code><a href="../misc/npm-registry.html">npm-registry(7)</a></code>.</p>
<h2 id="i-forgot-my-password-and-can-t-publish-how-do-i-reset-it-">I forgot my password, and can&#39;t publish. How do I reset it?</h2>
-<p>Go to <a href="https://npmjs.org/forgot">https://npmjs.org/forgot</a>.</p>
+<p>Go to <a href="https://npmjs.com/forgot">https://npmjs.com/forgot</a>.</p>
<h2 id="i-get-econnrefused-a-lot-what-s-up-">I get ECONNREFUSED a lot. What&#39;s up?</h2>
<p>Either the registry is down, or node&#39;s DNS isn&#39;t able to reach out.</p>
<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="&#x6d;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#x73;&#117;&#x70;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;">&#x73;&#117;&#x70;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;</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>
<p>You can also often get a faster response by visiting the #npm channel
on Freenode IRC.</p>
<h2 id="why-no-namespaces-">Why no namespaces?</h2>
-<p>Please see this discussion: <a href="https://github.com/npm/npm/issues/798">https://github.com/npm/npm/issues/798</a></p>
-<p>tl;dr - It doesn&#39;t actually make things better, and can make them worse.</p>
-<p>If you want to namespace your own packages, you may: simply use the
-<code>-</code> character to separate the names. npm is a mostly anarchic system.
-There is not sufficient need to impose namespace rules on everyone.</p>
+<p>npm has only one global namespace. If you want to namespace your own packages,
+you may: simply use the <code>-</code> character to separate the names. npm is a mostly
+anarchic system. There is not sufficient need to impose namespace rules on
+everyone.</p>
+<p>As of 2.0, npm supports scoped packages, which allow you to publish a group of
+related modules without worrying about name collisions.</p>
+<p>Every npm user owns the scope associated with their username. For example, the
+user named <code>npm</code> owns the scope <code>@npm</code>. Scoped packages are published inside a
+scope by naming them as if they were files under the scope directory, e.g., by
+setting <code>name</code> in <code>package.json</code> to <code>@npm/npm</code>.</p>
+<p>Scoped packages can coexist with public npm packages in a private npm registry.
+At present (2014-11-04) scoped packages may NOT be published to the public npm
+registry.</p>
+<p>Unscoped packages can only depend on other unscoped packages. Scoped packages
+can depend on packages from their own scope, a different scope, or the public
+registry (unscoped).</p>
+<p>For the current documentation of scoped packages, see
+<a href="https://docs.npmjs.com/misc/scope">https://docs.npmjs.com/misc/scope</a></p>
+<p>References:</p>
+<ol>
+<li><p>For the reasoning behind the &quot;one global namespace&quot;, please see this
+discussion: <a href="https://github.com/npm/npm/issues/798">https://github.com/npm/npm/issues/798</a> (TL;DR: It doesn&#39;t
+actually make things better, and can make them worse.)</p>
+</li>
+<li><p>For the pre-implementation discussion of the scoped package feature, see
+this discussion: <a href="https://github.com/npm/npm/issues/5239">https://github.com/npm/npm/issues/5239</a></p>
+</li>
+</ol>
<h2 id="who-does-npm-">Who does npm?</h2>
<p>npm was originally written by Isaac Z. Schlueter, and many others have
contributed to it, some of them quite substantially.</p>
-<p>The npm open source project, The npm Registry, and <a href="https://www.npmjs.org">the community
+<p>The npm open source project, The npm Registry, and <a href="https://www.npmjs.com">the community
website</a> are maintained and operated by the
good folks at <a href="http://www.npmjs.com">npm, Inc.</a></p>
<h2 id="i-have-a-question-or-request-not-addressed-here-where-should-i-put-it-">I have a question or request not addressed here. Where should I put it?</h2>
diff --git a/deps/npm/html/partial/doc/misc/npm-index.html b/deps/npm/html/partial/doc/misc/npm-index.html
index 6e4c0ca80..eab0753c9 100644
--- a/deps/npm/html/partial/doc/misc/npm-index.html
+++ b/deps/npm/html/partial/doc/misc/npm-index.html
@@ -1,10 +1,10 @@
<h1><a href="../misc/npm-index.html">npm-index</a></h1> <p>Index of all npm documentation</p>
<h3 id="readme-1-"><a href="../../doc/README.html">README</a></h3>
-<p>node package manager</p>
+<p>a JavaScript package manager</p>
<h2 id="command-line-documentation">Command Line Documentation</h2>
<p>Using npm on the command line</p>
<h3 id="npm-1-"><a href="../cli/npm.html">npm(1)</a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-adduser-1-"><a href="../cli/npm-adduser.html">npm-adduser(1)</a></h3>
<p>Add a registry user account</p>
<h3 id="npm-bin-1-"><a href="../cli/npm-bin.html">npm-bin(1)</a></h3>
@@ -60,7 +60,7 @@
<h3 id="npm-repo-1-"><a href="../cli/npm-repo.html">npm-repo(1)</a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-1-"><a href="../cli/npm-restart.html">npm-restart(1)</a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-rm-1-"><a href="../cli/npm-rm.html">npm-rm(1)</a></h3>
<p>Remove a package</p>
<h3 id="npm-root-1-"><a href="../cli/npm-root.html">npm-root(1)</a></h3>
@@ -98,7 +98,7 @@
<h2 id="api-documentation">API Documentation</h2>
<p>Using npm in your Node programs</p>
<h3 id="npm-3-"><a href="../api/npm.html">npm(3)</a></h3>
-<p>node package manager</p>
+<p>javascript package manager</p>
<h3 id="npm-bin-3-"><a href="../api/npm-bin.html">npm-bin(3)</a></h3>
<p>Display npm bin folder</p>
<h3 id="npm-bugs-3-"><a href="../api/npm-bugs.html">npm-bugs(3)</a></h3>
@@ -146,7 +146,7 @@
<h3 id="npm-repo-3-"><a href="../api/npm-repo.html">npm-repo(3)</a></h3>
<p>Open package repository page in the browser</p>
<h3 id="npm-restart-3-"><a href="../api/npm-restart.html">npm-restart(3)</a></h3>
-<p>Start a package</p>
+<p>Restart a package</p>
<h3 id="npm-root-3-"><a href="../api/npm-root.html">npm-root(3)</a></h3>
<p>Display npm root</p>
<h3 id="npm-run-script-3-"><a href="../api/npm-run-script.html">npm-run-script(3)</a></h3>
diff --git a/deps/npm/html/partial/doc/misc/npm-registry.html b/deps/npm/html/partial/doc/misc/npm-registry.html
index 0031f61b1..2a7c16014 100644
--- a/deps/npm/html/partial/doc/misc/npm-registry.html
+++ b/deps/npm/html/partial/doc/misc/npm-registry.html
@@ -38,7 +38,7 @@ otherwise.</p>
<p>No, but it&#39;s way easier. Basically, yes, you do, or you have to
effectively implement the entire CouchDB API anyway.</p>
<h2 id="is-there-a-website-or-something-to-see-package-docs-and-such-">Is there a website or something to see package docs and such?</h2>
-<p>Yes, head over to <a href="https://npmjs.org/">https://npmjs.org/</a></p>
+<p>Yes, head over to <a href="https://npmjs.com/">https://npmjs.com/</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
diff --git a/deps/npm/html/partial/doc/misc/npm-scripts.html b/deps/npm/html/partial/doc/misc/npm-scripts.html
index 08bcbd54a..1e68be479 100644
--- a/deps/npm/html/partial/doc/misc/npm-scripts.html
+++ b/deps/npm/html/partial/doc/misc/npm-scripts.html
@@ -16,10 +16,6 @@ Run AFTER the package is installed.</li>
Run BEFORE the package is uninstalled.</li>
<li>postuninstall:
Run AFTER the package is uninstalled.</li>
-<li>preupdate:
-Run BEFORE the package is updated with the update command.</li>
-<li>update, postupdate:
-Run AFTER the package is updated with the update command.</li>
<li>pretest, test, posttest:
Run by the <code>npm test</code> command.</li>
<li>prestop, stop, poststop:
diff --git a/deps/npm/html/partial/doc/misc/semver.html b/deps/npm/html/partial/doc/misc/semver.html
index 691a277dc..b078197e8 100644
--- a/deps/npm/html/partial/doc/misc/semver.html
+++ b/deps/npm/html/partial/doc/misc/semver.html
@@ -11,12 +11,12 @@ semver.lt(&#39;1.2.3&#39;, &#39;9.8.7&#39;) // true
</code></pre><p>As a command-line utility:</p>
<pre><code>$ semver -h
-Usage: semver &lt;version&gt; [&lt;version&gt; [...]] [-r &lt;range&gt; | -i &lt;inc&gt; | -d &lt;dec&gt;]
+Usage: semver &lt;version&gt; [&lt;version&gt; [...]] [-r &lt;range&gt; | -i &lt;inc&gt; | --preid &lt;identifier&gt; | -l | -rv]
Test if version(s) satisfy the supplied range(s), and sort them.
Multiple versions or ranges may be supplied, unless increment
-or decrement options are specified. In that case, only a single
-version may be used, and it is incremented by the specified level
+option is specified. In that case, only a single version may
+be used, and it is incremented by the specified level
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.
@@ -80,6 +80,20 @@ alpha/beta/rc versions. By including a prerelease tag in the range,
the user is indicating that they are aware of the risk. However, it
is still not appropriate to assume that they have opted into taking a
similar risk on the <em>next</em> set of prerelease versions.</p>
+<h4 id="prerelease-identifiers">Prerelease Identifiers</h4>
+<p>The method <code>.inc</code> takes an additional <code>identifier</code> string argument that
+will append the value of the string as a prerelease identifier:</p>
+<pre><code class="lang-`javascript">&gt; semver.inc(&#39;1.2.3&#39;, &#39;pre&#39;, &#39;beta&#39;)
+&#39;1.2.4-beta.0&#39;
+</code></pre>
+<p>command-line example:</p>
+<pre><code class="lang-shell">$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+</code></pre>
+<p>Which then can be used to increment further:</p>
+<pre><code class="lang-shell">$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+</code></pre>
<h3 id="advanced-range-syntax">Advanced Range Syntax</h3>
<p>Advanced range syntax desugars to primitive comparators in
deterministic ways.</p>
@@ -134,7 +148,6 @@ equal to <code>beta.2</code>. So, <code>1.2.3-beta.4</code> would be allowed, b
<code>1.2.4-beta.2</code> would not, because it is a prerelease of a
different <code>[major, minor, patch]</code> tuple.</li>
</ul>
-<p>Note: this is the same as the <code>~&gt;</code> operator in rubygems.</p>
<h4 id="caret-ranges-1-2-3-0-2-5-0-0-4-">Caret Ranges <code>^1.2.3</code> <code>^0.2.5</code> <code>^0.0.4</code></h4>
<p>Allows changes that do not modify the left-most non-zero digit in the
<code>[major, minor, patch]</code> tuple. In other words, this allows patch and
@@ -214,6 +227,9 @@ invalid comparison string is provided.</li>
<code>v2</code> is greater. Sorts in ascending order if passed to <code>Array.sort()</code>.</li>
<li><code>rcompare(v1, v2)</code>: The reverse of compare. Sorts an array of versions
in descending order when passed to <code>Array.sort()</code>.</li>
+<li><code>diff(v1, v2)</code>: Returns difference between two versions by the release type
+(<code>major</code>, <code>premajor</code>, <code>minor</code>, <code>preminor</code>, <code>patch</code>, <code>prepatch</code>, or <code>prerelease</code>),
+or null if the versions are the same.</li>
</ul>
<h3 id="ranges">Ranges</h3>
<ul>
diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js
index 9693aebd3..6c8a652be 100644
--- a/deps/npm/lib/adduser.js
+++ b/deps/npm/lib/adduser.js
@@ -3,7 +3,6 @@ module.exports = adduser
var log = require("npmlog")
, npm = require("./npm.js")
- , registry = npm.registry
, read = require("read")
, userValidate = require("npm-user-validate")
, crypto
@@ -125,13 +124,6 @@ function readEmail (c, u, cb) {
}
function save (c, u, cb) {
- if (c.changed) {
- delete registry.auth
- delete registry.username
- delete registry.password
- registry.username = u.u
- registry.password = u.p
- }
npm.spinner.start()
// save existing configs, but yank off for this PUT
@@ -146,14 +138,17 @@ function save (c, u, cb) {
if (scopedRegistry) uri = scopedRegistry
}
- registry.adduser(uri, u.u, u.p, u.e, function (er, doc) {
+ var params = {
+ auth : {
+ username : u.u,
+ password : u.p,
+ email : u.e
+ }
+ }
+ npm.registry.adduser(uri, params, function (er, doc) {
npm.spinner.stop()
if (er) return cb(er)
- registry.username = u.u
- registry.password = u.p
- registry.email = u.e
-
// don't want this polluting the configuration
npm.config.del("_token", "user")
diff --git a/deps/npm/lib/bugs.js b/deps/npm/lib/bugs.js
index 16744cd5c..fabbbaf10 100644
--- a/deps/npm/lib/bugs.js
+++ b/deps/npm/lib/bugs.js
@@ -4,7 +4,6 @@ module.exports = bugs
bugs.usage = "npm bugs <pkgname>"
var npm = require("./npm.js")
- , registry = npm.registry
, log = require("npmlog")
, opener = require("opener")
, path = require("path")
@@ -15,20 +14,22 @@ var npm = require("./npm.js")
bugs.completion = function (opts, cb) {
if (opts.conf.argv.remain.length > 2) return cb()
- mapToRegistry("-/short", npm.config, function (er, uri) {
+ mapToRegistry("-/short", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, { timeout : 60000 }, function (er, list) {
+ npm.registry.get(uri, { timeout : 60000, auth : auth }, function (er, list) {
return cb(null, list || [])
})
})
}
function bugs (args, cb) {
- var n = args.length && npa(args[0]).name || '.'
+ var n = args.length && npa(args[0]).name || "."
fs.stat(n, function (er, s) {
- if (er && er.code === "ENOENT") return callRegistry(n, cb)
- else if (er) return cb (er)
+ if (er) {
+ if (er.code === "ENOENT") return callRegistry(n, cb)
+ return cb(er)
+ }
if (!s.isDirectory()) return callRegistry(n, cb)
readJson(path.resolve(n, "package.json"), function(er, d) {
if (er) return cb(er)
@@ -38,35 +39,36 @@ function bugs (args, cb) {
}
function getUrlAndOpen (d, cb) {
- var bugs = d.bugs
- , repo = d.repository || d.repositories
+ var repo = d.repository || d.repositories
, url
- if (bugs) {
- url = (typeof url === "string") ? bugs : bugs.url
- } else if (repo) {
+ if (d.bugs) {
+ url = (typeof d.bugs === "string") ? d.bugs : d.bugs.url
+ }
+ else if (repo) {
if (Array.isArray(repo)) repo = repo.shift()
if (repo.hasOwnProperty("url")) repo = repo.url
- log.verbose("repository", repo)
- if (bugs && bugs.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) {
- url = bugs.replace(/^git(@|:\/\/)/, "https://")
+ log.verbose("bugs", "repository", repo)
+ if (repo && repo.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) {
+ url = repo.replace(/^git(@|:\/\/)/, "https://")
.replace(/^https?:\/\/github.com:/, "https://github.com/")
- .replace(/\.git$/, '')+"/issues"
+ .replace(/\.git$/, "")+"/issues"
}
}
if (!url) {
- url = "https://npmjs.org/package/" + d.name
+ url = "https://www.npmjs.org/package/" + d.name
}
+ log.silly("bugs", "url", url)
opener(url, { command: npm.config.get("browser") }, cb)
}
-function callRegistry (n, cb) {
- mapToRegistry(n, npm.config, function (er, uri) {
+function callRegistry (name, cb) {
+ mapToRegistry(name, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri + "/latest", { timeout : 3600 }, function (er, d) {
+ npm.registry.get(uri + "/latest", { auth : auth }, function (er, d) {
if (er) return cb(er)
- getUrlAndOpen (d, cb)
+ getUrlAndOpen(d, cb)
})
})
}
diff --git a/deps/npm/lib/build.js b/deps/npm/lib/build.js
index 2e01ef6ee..7477ba457 100644
--- a/deps/npm/lib/build.js
+++ b/deps/npm/lib/build.js
@@ -43,7 +43,7 @@ function build (args, global, didPre, didRB, cb) {
function build_ (global, didPre, didRB) { return function (folder, cb) {
folder = path.resolve(folder)
- if (build._didBuild[folder]) log.error("build", "already built", folder)
+ if (build._didBuild[folder]) log.info("build", "already built", folder)
build._didBuild[folder] = true
log.info("build", folder)
readJson(path.resolve(folder, "package.json"), function (er, pkg) {
@@ -212,6 +212,7 @@ function linkMans (pkg, folder, parent, gtop, cb) {
if (!pkg.man || !gtop || process.platform === "win32") return cb()
var manRoot = path.resolve(npm.config.get("prefix"), "share", "man")
+ log.verbose("linkMans", "man files are", pkg.man, "in", manRoot)
// make sure that the mans are unique.
// otherwise, if there are dupes, it'll fail with EEXIST
@@ -225,11 +226,20 @@ function linkMans (pkg, folder, parent, gtop, cb) {
asyncMap(pkg.man, function (man, cb) {
if (typeof man !== "string") return cb()
+ log.silly("linkMans", "preparing to link", man)
var parseMan = man.match(/(.*\.([0-9]+)(\.gz)?)$/)
- , stem = parseMan[1]
- , sxn = parseMan[2]
- , bn = path.basename(stem)
- , manDest = path.join(manRoot, "man" + sxn, bn)
+ if (!parseMan) {
+ return cb(new Error(
+ man+" is not a valid name for a man file. " +
+ "Man files must end with a number, " +
+ "and optionally a .gz suffix if they are compressed."
+ ))
+ }
+
+ var stem = parseMan[1]
+ var sxn = parseMan[2]
+ var bn = path.basename(stem)
+ var manDest = path.join(manRoot, "man" + sxn, bn)
linkIfExists(man, manDest, gtop && folder, cb)
}, cb)
diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js
index e1afb0d15..357063551 100644
--- a/deps/npm/lib/cache.js
+++ b/deps/npm/lib/cache.js
@@ -82,6 +82,7 @@ var npm = require("./npm.js")
, npa = require("npm-package-arg")
, getStat = require("./cache/get-stat.js")
, cachedPackageRoot = require("./cache/cached-package-root.js")
+ , mapToRegistry = require("./utils/map-to-registry.js")
cache.usage = "npm cache add <tarball file>"
+ "\nnpm cache add <folder>"
@@ -172,6 +173,7 @@ function normalize (args) {
if (normalized.substr(-1) === "/") {
normalized = normalized.substr(0, normalized.length - 1)
}
+ normalized = path.normalize(normalized)
log.silly("ls", "normalized", normalized)
return normalized
@@ -202,7 +204,7 @@ function clean (args, cb) {
if (!args) args = []
- var f = path.join(npm.cache, path.normalize(normalize(args)))
+ var f = path.join(npm.cache, normalize(args))
if (f === npm.cache) {
fs.readdir(npm.cache, function (er, files) {
if (er) return cb()
@@ -213,7 +215,10 @@ function clean (args, cb) {
})
, rm, cb )
})
- } else rm(path.join(npm.cache, path.normalize(normalize(args))), cb)
+ }
+ else {
+ rm(f, cb)
+ }
}
// npm cache add <tarball-url>
@@ -285,7 +290,12 @@ function add (args, where, cb) {
addLocal(p, null, cb)
break
case "remote":
- addRemoteTarball(p.spec, {name : p.name}, null, cb)
+ // get auth, if possible
+ mapToRegistry(spec, npm.config, function (err, uri, auth) {
+ if (err) return cb(err)
+
+ addRemoteTarball(p.spec, {name : p.name}, null, auth, cb)
+ })
break
case "git":
addRemoteGit(p.spec, false, cb)
diff --git a/deps/npm/lib/cache/add-local.js b/deps/npm/lib/cache/add-local.js
index b425d7f91..e7d286e4f 100644
--- a/deps/npm/lib/cache/add-local.js
+++ b/deps/npm/lib/cache/add-local.js
@@ -12,6 +12,7 @@ var assert = require("assert")
, cachedPackageRoot = require("./cached-package-root.js")
, addLocalTarball = require("./add-local-tarball.js")
, sha = require("sha")
+ , inflight = require("inflight")
module.exports = addLocal
@@ -28,6 +29,8 @@ function addLocal (p, pkgData, cb_) {
}
if (data && !data._fromGithub) {
data._from = path.relative(npm.prefix, p.spec) || "."
+ var resolved = path.relative(npm.prefix, p.spec)
+ if (resolved) data._resolved = "file:"+resolved
}
return cb_(er, data)
}
@@ -79,20 +82,24 @@ function addLocalDirectory (p, pkgData, shasum, cb) {
var root = cachedPackageRoot(data)
var tgz = path.resolve(root, "package.tgz")
var pj = path.resolve(root, "package/package.json")
+
+ var wrapped = inflight(tgz, next)
+ if (!wrapped) return log.verbose("addLocalDirectory", tgz, "already in flight; waiting")
+ log.verbose("addLocalDirectory", tgz, "not in flight; packing")
+
getCacheStat(function (er, cs) {
mkdir(path.dirname(pj), function (er, made) {
if (er) return cb(er)
var fancy = !pathIsInside(p, npm.tmp)
tar.pack(tgz, p, data, fancy, function (er) {
if (er) {
- log.error( "addLocalDirectory", "Could not pack %j to %j"
- , p, tgz )
+ log.error("addLocalDirectory", "Could not pack", p, "to", tgz)
return cb(er)
}
- if (!cs || isNaN(cs.uid) || isNaN(cs.gid)) next()
+ if (!cs || isNaN(cs.uid) || isNaN(cs.gid)) wrapped()
- chownr(made || tgz, cs.uid, cs.gid, next)
+ chownr(made || tgz, cs.uid, cs.gid, wrapped)
})
})
})
diff --git a/deps/npm/lib/cache/add-named.js b/deps/npm/lib/cache/add-named.js
index 1bd7af144..cb5a3fa8a 100644
--- a/deps/npm/lib/cache/add-named.js
+++ b/deps/npm/lib/cache/add-named.js
@@ -7,7 +7,6 @@ var path = require("path")
, readJson = require("read-package-json")
, url = require("url")
, npm = require("../npm.js")
- , registry = npm.registry
, deprCheck = require("../utils/depr-check.js")
, inflight = require("inflight")
, addRemoteTarball = require("./add-remote-tarball.js")
@@ -18,7 +17,7 @@ var path = require("path")
module.exports = addNamed
function getOnceFromRegistry (name, from, next, done) {
- mapToRegistry(name, npm.config, function (er, uri) {
+ mapToRegistry(name, npm.config, function (er, uri, auth) {
if (er) return done(er)
var key = "registry:" + uri
@@ -26,7 +25,7 @@ function getOnceFromRegistry (name, from, next, done) {
if (!next) return log.verbose(from, key, "already in flight; waiting")
else log.verbose(from, key, "not in flight; fetching")
- registry.get(uri, null, next)
+ npm.registry.get(uri, { auth : auth }, next)
})
}
@@ -169,28 +168,28 @@ function addNameVersion (name, v, data, cb) {
})
function fetchit () {
- if (!npm.config.get("registry")) {
- return cb(new Error("Cannot fetch: "+dist.tarball))
- }
-
- // Use the same protocol as the registry. https registry --> https
- // tarballs, but only if they're the same hostname, or else detached
- // tarballs may not work.
- var tb = url.parse(dist.tarball)
- var rp = url.parse(npm.config.get("registry"))
- if (tb.hostname === rp.hostname
- && tb.protocol !== rp.protocol) {
- tb.protocol = url.parse(npm.config.get("registry")).protocol
- delete tb.href
- }
- tb = url.format(tb)
-
- // Only add non-shasum'ed packages if --forced. Only ancient things
- // would lack this for good reasons nowadays.
- if (!dist.shasum && !npm.config.get("force")) {
- return cb(new Error("package lacks shasum: " + data._id))
- }
- return addRemoteTarball(tb, data, dist.shasum, cb)
+ mapToRegistry(name, npm.config, function (er, _, auth, ruri) {
+ if (er) return cb(er)
+
+ // Use the same protocol as the registry. https registry --> https
+ // tarballs, but only if they're the same hostname, or else detached
+ // tarballs may not work.
+ var tb = url.parse(dist.tarball)
+ var rp = url.parse(ruri)
+ if (tb.hostname === rp.hostname && tb.protocol !== rp.protocol) {
+ tb.protocol = rp.protocol
+ delete tb.href
+ }
+ tb = url.format(tb)
+
+ // Only add non-shasum'ed packages if --forced. Only ancient things
+ // would lack this for good reasons nowadays.
+ if (!dist.shasum && !npm.config.get("force")) {
+ return cb(new Error("package lacks shasum: " + data._id))
+ }
+
+ addRemoteTarball(tb, data, dist.shasum, auth, cb)
+ })
}
}
}
diff --git a/deps/npm/lib/cache/add-remote-git.js b/deps/npm/lib/cache/add-remote-git.js
index d8f3f1cd8..c829a4fe6 100644
--- a/deps/npm/lib/cache/add-remote-git.js
+++ b/deps/npm/lib/cache/add-remote-git.js
@@ -1,21 +1,30 @@
var mkdir = require("mkdirp")
, assert = require("assert")
, git = require("../utils/git.js")
- , once = require("once")
, fs = require("graceful-fs")
, log = require("npmlog")
, path = require("path")
, url = require("url")
, chownr = require("chownr")
- , zlib = require("zlib")
, crypto = require("crypto")
, npm = require("../npm.js")
, rm = require("../utils/gently-rm.js")
, inflight = require("inflight")
, getCacheStat = require("./get-stat.js")
- , addLocalTarball = require("./add-local-tarball.js")
- , writeStream = require("fs-write-stream-atomic")
+ , 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 VALID_VARIABLES = [
+ "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)
@@ -29,41 +38,21 @@ module.exports = function addRemoteGit (u, silent, cb) {
assert(typeof cb === "function", "must have callback")
log.verbose("addRemoteGit", "u=%j silent=%j", u, silent)
- var parsed = url.parse(u, true)
- log.silly("addRemoteGit", "parsed", parsed)
-
- // git is so tricky!
- // if the path is like ssh://foo:22/some/path then it works, but
- // it needs the ssh://
- // If the path is like ssh://foo:some/path then it works, but
- // only if you remove the ssh://
- var origUrl = u
- u = u.replace(/^git\+/, "")
- .replace(/#.*$/, "")
-
- // ssh paths that are scp-style urls don't need the ssh://
- if (parsed.pathname.match(/^\/?:/)) {
- u = u.replace(/^ssh:\/\//, "")
- }
-
- cb = inflight(u, cb)
- if (!cb) return log.verbose("addRemoteGit", u, "already in flight; waiting")
- log.verbose("addRemoteGit", u, "not in flight; cloning")
-
- // figure out what we should check out.
- var co = parsed.hash && parsed.hash.substr(1) || "master"
-
- var v = crypto.createHash("sha1").update(u).digest("hex").slice(0, 8)
- v = u.replace(/[^a-zA-Z0-9]+/g, "-")+"-"+v
+ var normalized = normalizeGitUrl(u)
+ log.silly("addRemoteGit", "normalized", normalized)
- log.verbose("addRemoteGit", [u, co])
+ 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(npm.config.get("cache"), "_git-remotes", 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")
- // we don't need global templates when cloning. use this empty dir to specify as template dir
- mkdir(path.join(npm.config.get("cache"), "_git-remotes", "_templates"), function (er) {
+ getGitDir(function (er) {
if (er) return cb(er)
- checkGitDir(p, u, co, origUrl, silent, function (er, data) {
+ checkGitDir(p, normalized.url, normalized.branch, u, silent, function (er, data) {
if (er) return cb(er, data)
addModeRecursive(p, npm.modes.file, function (er) {
@@ -73,31 +62,53 @@ module.exports = function addRemoteGit (u, silent, cb) {
})
}
+function getGitDir (cb) {
+ getCacheStat(function (er, st) {
+ 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, st.uid, st.gid, function (er) {
+ if (er) return cb(er)
+
+ fs.chown(remotes, st.uid, st.gid, function (er) {
+ cb(er, st)
+ })
+ })
+ })
+ })
+}
+
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){
+ if (!s.isDirectory()) return rm(p, function (er) {
if (er) return cb(er)
cloneGitRemote(p, u, co, origUrl, silent, cb)
})
- var args = [ "config", "--get", "remote.origin.url" ]
- var env = gitEnv()
-
- // check for git
- git.whichAndExec(args, {cwd: p, env: env}, 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)
- })
+ git.whichAndExec(
+ [ "config", "--get", "remote.origin.url" ],
+ { cwd : p, 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)
+ })
+ }
+ log.verbose("git remote.origin.url", stdoutTrimmed)
+ fetchRemote(p, u, co, origUrl, cb)
}
- log.verbose("git remote.origin.url", stdoutTrimmed)
- archiveGitRemote(p, u, co, origUrl, cb)
- })
+ )
})
}
@@ -105,66 +116,68 @@ function cloneGitRemote (p, u, co, origUrl, silent, cb) {
mkdir(p, function (er) {
if (er) return cb(er)
- var args = [ "clone", "--template=" + path.join(npm.config.get("cache"),
- "_git_remotes", "_templates"), "--mirror", u, p ]
- var env = gitEnv()
-
- // check for git
- git.whichAndExec(args, {cwd: p, env: env}, 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)
+ 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)
+ }
+ return cb(er)
}
- return cb(er)
+ log.verbose("git clone " + u, stdout)
+ fetchRemote(p, u, co, origUrl, cb)
}
- log.verbose("git clone " + u, stdout)
- archiveGitRemote(p, u, co, origUrl, cb)
- })
+ )
})
}
-function archiveGitRemote (p, u, co, origUrl, cb) {
- var archive = [ "fetch", "-a", "origin" ]
- var resolve = [ "rev-list", "-n1", co ]
- var env = gitEnv()
-
- var resolved = null
- var tmp
+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)
- git.whichAndExec(archive, {cwd: p, env: env}, 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)
- tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
-
- if (process.platform === "win32") {
- log.silly("verifyOwnership", "skipping for windows")
- resolveHead()
- } else {
- getCacheStat(function(er, cs) {
- if (er) {
- log.error("Could not get cache stat")
- return cb(er)
- }
- chownr(p, cs.uid, cs.gid, function(er) {
+ if (process.platform === "win32") {
+ log.silly("verifyOwnership", "skipping for windows")
+ resolveHead(p, u, co, origUrl, cb)
+ }
+ else {
+ getGitDir(function (er, cs) {
if (er) {
- log.error("Failed to change folder ownership under npm cache for %s", p)
+ log.error("Could not get cache stat")
return cb(er)
}
- resolveHead()
+
+ 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)
+ })
})
- })
+ }
}
- })
+ )
+}
- function resolveHead () {
- git.whichAndExec(resolve, {cwd: p, env: env}, function (er, stdout, stderr) {
+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)
@@ -173,48 +186,83 @@ function archiveGitRemote (p, u, co, origUrl, cb) {
log.verbose("git rev-list -n1 " + co, stdout)
var parsed = url.parse(origUrl)
parsed.hash = stdout
- resolved = url.format(parsed)
+ var resolved = url.format(parsed)
- if (parsed.protocol !== "git:") {
- resolved = "git+" + resolved
- }
+ if (parsed.protocol !== "git:") resolved = "git+" + resolved
// 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
+ // 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) === "/")
+ if (spo[1].charAt(0) === ":" && spr[1].charAt(0) === "/") {
spr[1] = spr[1].slice(1)
+ }
resolved = spr.join(parsed.host)
log.verbose("resolved git url", resolved)
- next()
- })
- }
+ cache(p, u, stdout, resolved, cb)
+ }
+ )
+}
+
+/**
+ * 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)
- function next () {
- mkdir(path.dirname(tmp), function (er) {
+ var tmp = path.join(
+ npm.tmp,
+ "git-cache-"+random.toString("hex"),
+ treeish
+ )
+
+ mkdir(tmp, function (er) {
if (er) return cb(er)
- var gzip = zlib.createGzip({ level: 9 })
- var args = ["archive", co, "--format=tar", "--prefix=package/"]
- var out = writeStream(tmp)
- var env = gitEnv()
- cb = once(cb)
- var cp = git.spawn(args, { env: env, cwd: p })
- cp.on("error", cb)
- cp.stderr.on("data", function(chunk) {
- log.silly(chunk.toString(), "git archive")
- })
- cp.stdout.pipe(gzip).pipe(out).on("close", function() {
- addLocalTarball(tmp, null, null, function(er, data) {
+ git.whichAndExec(["clone", p, tmp], { cwd : p, env : gitEnv() }, clone)
+ })
+
+ function clone (er, stdout, stderr) {
+ stdout = (stdout + "\n" + stderr).trim()
+ if (er) {
+ log.error("Failed to clone "+resolved+" from "+u, stderr)
+ return cb(er)
+ }
+ log.verbose("git clone", "from", p)
+ log.verbose("git clone", stdout)
+
+ git.whichAndExec(["checkout", treeish], { cwd : tmp, env : gitEnv() }, checkout)
+ }
+
+ function checkout (er, stdout, stderr) {
+ stdout = (stdout + "\n" + stderr).trim()
+ if (er) {
+ log.error("Failed to check out "+treeish, stderr)
+ return cb(er)
+ }
+ log.verbose("git checkout", stdout)
+
+ realizePackageSpecifier(tmp, function (er, spec) {
+ if (er) {
+ log.error("Failed to map", tmp, "to a package specifier")
+ return cb(er)
+ }
+
+ // 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)
})
})
- })
- }
+ }
+ })
}
var gitEnv_
@@ -224,7 +272,7 @@ function gitEnv () {
if (gitEnv_) return gitEnv_
gitEnv_ = {}
for (var k in process.env) {
- if (!~["GIT_PROXY_COMMAND","GIT_SSH","GIT_SSL_NO_VERIFY","GIT_SSL_CAINFO"].indexOf(k) && k.match(/^GIT/)) continue
+ if (!~VALID_VARIABLES.indexOf(k) && k.match(/^GIT/)) continue
gitEnv_[k] = process.env[k]
}
return gitEnv_
diff --git a/deps/npm/lib/cache/add-remote-tarball.js b/deps/npm/lib/cache/add-remote-tarball.js
index 9591ba89d..e87ac54bb 100644
--- a/deps/npm/lib/cache/add-remote-tarball.js
+++ b/deps/npm/lib/cache/add-remote-tarball.js
@@ -6,14 +6,13 @@ var mkdir = require("mkdirp")
, retry = require("retry")
, createWriteStream = require("fs-write-stream-atomic")
, npm = require("../npm.js")
- , registry = npm.registry
, inflight = require("inflight")
, addLocalTarball = require("./add-local-tarball.js")
, cacheFile = require("npm-cache-filename")
module.exports = addRemoteTarball
-function addRemoteTarball (u, pkgData, shasum, cb_) {
+function addRemoteTarball (u, pkgData, shasum, auth, cb_) {
assert(typeof u === "string", "must have module URL")
assert(typeof cb_ === "function", "must have callback")
@@ -42,11 +41,11 @@ function addRemoteTarball (u, pkgData, shasum, cb_) {
log.verbose("addRemoteTarball", [u, shasum])
mkdir(path.dirname(tmp), function (er) {
if (er) return cb(er)
- addRemoteTarball_(u, tmp, shasum, next)
+ addRemoteTarball_(u, tmp, shasum, auth, next)
})
}
-function addRemoteTarball_(u, tmp, shasum, cb) {
+function addRemoteTarball_ (u, tmp, shasum, auth, cb) {
// Tuned to spread 3 attempts over about a minute.
// See formula at <https://github.com/tim-kos/node-retry>.
var operation = retry.operation({
@@ -59,12 +58,12 @@ function addRemoteTarball_(u, tmp, shasum, cb) {
operation.attempt(function (currentAttempt) {
log.info("retry", "fetch attempt " + currentAttempt
+ " at " + (new Date()).toLocaleTimeString())
- fetchAndShaCheck(u, tmp, shasum, function (er, response, shasum) {
+ fetchAndShaCheck(u, tmp, shasum, auth, function (er, response, shasum) {
// Only retry on 408, 5xx or no `response`.
var sc = response && response.statusCode
var statusRetry = !sc || (sc === 408 || sc >= 500)
if (er && statusRetry && operation.retry(er)) {
- log.info("retry", "will retry, error on last attempt: " + er)
+ log.warn("retry", "will retry, error on last attempt: " + er)
return
}
cb(er, response, shasum)
@@ -72,8 +71,8 @@ function addRemoteTarball_(u, tmp, shasum, cb) {
})
}
-function fetchAndShaCheck (u, tmp, shasum, cb) {
- registry.fetch(u, null, function (er, response) {
+function fetchAndShaCheck (u, tmp, shasum, auth, cb) {
+ npm.registry.fetch(u, { auth : auth }, function (er, response) {
if (er) {
log.error("fetch failed", u)
return cb(er, response)
diff --git a/deps/npm/lib/cache/caching-client.js b/deps/npm/lib/cache/caching-client.js
new file mode 100644
index 000000000..459a236f5
--- /dev/null
+++ b/deps/npm/lib/cache/caching-client.js
@@ -0,0 +1,212 @@
+module.exports = CachingRegistryClient
+
+var path = require("path")
+ , fs = require("graceful-fs")
+ , url = require("url")
+ , assert = require("assert")
+ , inherits = require("util").inherits
+
+var RegistryClient = require("npm-registry-client")
+ , npm = require("../npm.js")
+ , log = require("npmlog")
+ , getCacheStat = require("./get-stat.js")
+ , cacheFile = require("npm-cache-filename")
+ , mkdirp = require("mkdirp")
+ , rimraf = require("rimraf")
+ , chownr = require("chownr")
+ , writeFile = require("write-file-atomic")
+
+function CachingRegistryClient (config) {
+ RegistryClient.call(this, adaptConfig(config))
+
+ this._mapToCache = cacheFile(config.get("cache"))
+
+ // swizzle in our custom cache invalidation logic
+ this._request = this.request
+ this.request = this._invalidatingRequest
+}
+inherits(CachingRegistryClient, RegistryClient)
+
+CachingRegistryClient.prototype._invalidatingRequest = function (uri, params, cb) {
+ var client = this
+ this._request.call(this, uri, params, function () {
+ var args = arguments
+
+ var method = params.method
+ if (method !== "HEAD" && method !== "GET") {
+ var invalidated = client._mapToCache(uri)
+ // invalidate cache
+ //
+ // This is irrelevant for commands that do etag / last-modified caching,
+ // but ls and view also have a timed cache, so this keeps the user from
+ // thinking that it didn't work when it did.
+ // Note that failure is an acceptable option here, since the only
+ // result will be a stale cache for some helper commands.
+ client.log.verbose("request", "invalidating", invalidated, "on", method)
+ return rimraf(invalidated, function () {
+ cb.apply(undefined, args)
+ })
+ }
+
+ cb.apply(undefined, args)
+ })
+}
+
+CachingRegistryClient.prototype.get = 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")
+
+ var parsed = url.parse(uri)
+ assert(
+ parsed.protocol === "http:" || parsed.protocol === "https:",
+ "must have a URL that starts with http: or https:"
+ )
+
+ var cacheBase = cacheFile(npm.config.get("cache"))(uri)
+ var cachePath = path.join(cacheBase, ".cache.json")
+
+ // If the GET is part of a write operation (PUT or DELETE), then
+ // skip past the cache entirely, but still save the results.
+ if (uri.match(/\?write=true$/)) return get_.call(this, uri, cachePath, params, cb)
+
+ var client = this
+ fs.stat(cachePath, function (er, stat) {
+ if (!er) {
+ fs.readFile(cachePath, function (er, data) {
+ try {
+ data = JSON.parse(data)
+ }
+ catch (ex) {
+ data = null
+ }
+
+ params.stat = stat
+ params.data = data
+
+ get_.call(client, uri, cachePath, params, cb)
+ })
+ }
+ else {
+ get_.call(client, uri, cachePath, params, cb)
+ }
+ })
+}
+
+function get_ (uri, cachePath, params, cb) {
+ var staleOk = params.staleOk === undefined ? false : params.staleOk
+ , timeout = params.timeout === undefined ? -1 : params.timeout
+ , data = params.data
+ , stat = params.stat
+ , etag
+ , lastModified
+
+ timeout = Math.min(timeout, npm.config.get("cache-max") || 0)
+ timeout = Math.max(timeout, npm.config.get("cache-min") || -Infinity)
+ if (process.env.COMP_CWORD !== undefined &&
+ process.env.COMP_LINE !== undefined &&
+ process.env.COMP_POINT !== undefined) {
+ timeout = Math.max(timeout, 60000)
+ }
+
+ if (data) {
+ if (data._etag) etag = data._etag
+ if (data._lastModified) lastModified = data._lastModified
+
+ if (stat && timeout && timeout > 0) {
+ if ((Date.now() - stat.mtime.getTime())/1000 < timeout) {
+ log.verbose("get", uri, "not expired, no request")
+ delete data._etag
+ delete data._lastModified
+ return cb(null, data, JSON.stringify(data), { statusCode : 304 })
+ }
+
+ if (staleOk) {
+ log.verbose("get", uri, "staleOk, background update")
+ delete data._etag
+ delete data._lastModified
+ process.nextTick(
+ cb.bind(null, null, data, JSON.stringify(data), { statusCode : 304 } )
+ )
+ cb = function () {}
+ }
+ }
+ }
+
+ var options = {
+ etag : etag,
+ lastModified : lastModified,
+ follow : params.follow,
+ auth : params.auth
+ }
+ this.request(uri, options, function (er, remoteData, raw, response) {
+ // if we get an error talking to the registry, but we have it
+ // from the cache, then just pretend we got it.
+ if (er && cachePath && data && !data.error) {
+ er = null
+ response = { statusCode: 304 }
+ }
+
+ if (response) {
+ log.silly("get", "cb", [response.statusCode, response.headers])
+ if (response.statusCode === 304 && (etag || lastModified)) {
+ remoteData = data
+ log.verbose(etag ? "etag" : "lastModified", uri+" from cache")
+ }
+ }
+
+ data = remoteData
+ if (!data) er = er || new Error("failed to fetch from registry: " + uri)
+
+ if (er) return cb(er, data, raw, response)
+
+ saveToCache(cachePath, data, saved)
+
+ // just give the write the old college try. if it fails, whatever.
+ function saved () {
+ delete data._etag
+ delete data._lastModified
+ cb(er, data, raw, response)
+ }
+
+ function saveToCache (cachePath, data, saved) {
+ getCacheStat(function (er, st) {
+ mkdirp(path.dirname(cachePath), function (er, made) {
+ if (er) return saved()
+
+ writeFile(cachePath, JSON.stringify(data), function (er) {
+ if (er) return saved()
+
+ chownr(made || cachePath, st.uid, st.gid, saved)
+ })
+ })
+ })
+ }
+ })
+}
+
+function adaptConfig (config) {
+ return {
+ proxy : {
+ http : config.get("proxy"),
+ https : config.get("https-proxy"),
+ localAddress : config.get("local-address")
+ },
+ ssl : {
+ certificate : config.get("cert"),
+ key : config.get("key"),
+ ca : config.get("ca"),
+ strict : config.get("strict-ssl")
+ },
+ retry : {
+ retries : config.get("fetch-retries"),
+ factor : config.get("fetch-retry-factor"),
+ minTimeout : config.get("fetch-retry-mintimeout"),
+ maxTimeout : config.get("fetch-retry-maxtimeout")
+ },
+ userAgent : config.get("user-agent"),
+ log : log,
+ defaultTag : config.get("tag"),
+ couchToken : config.get("_token")
+ }
+}
diff --git a/deps/npm/lib/cache/get-stat.js b/deps/npm/lib/cache/get-stat.js
index 45b60ce79..98f95ad6a 100644
--- a/deps/npm/lib/cache/get-stat.js
+++ b/deps/npm/lib/cache/get-stat.js
@@ -22,11 +22,18 @@ module.exports = function getCacheStat (cb) {
function makeCacheDir (cb) {
cb = inflight("makeCacheDir", cb)
- if (!cb) return log.verbose("getCacheStat", "cache creation already in flight; waiting")
+ if (!cb) {
+ return log.verbose(
+ "getCacheStat",
+ "cache creation already in flight; waiting"
+ )
+ }
log.verbose("getCacheStat", "cache creation not in flight; initializing")
if (!process.getuid) return mkdir(npm.cache, function (er) {
- return cb(er, {})
+ log.verbose("makeCacheDir", "UID & GID are irrelevant on", process.platform)
+ cacheStat = { uid : 0, gid : 0 }
+ return cb(er, cacheStat)
})
var uid = +process.getuid()
@@ -36,8 +43,9 @@ function makeCacheDir (cb) {
if (process.env.SUDO_UID) uid = +process.env.SUDO_UID
if (process.env.SUDO_GID) gid = +process.env.SUDO_GID
}
+
if (uid !== 0 || !process.env.HOME) {
- cacheStat = {uid: uid, gid: gid}
+ cacheStat = { uid : uid, gid : gid }
return mkdir(npm.cache, afterMkdir)
}
diff --git a/deps/npm/lib/cache/update-index.js b/deps/npm/lib/cache/update-index.js
new file mode 100644
index 000000000..2955f6a14
--- /dev/null
+++ b/deps/npm/lib/cache/update-index.js
@@ -0,0 +1,100 @@
+module.exports = updateIndex
+
+var fs = require("graceful-fs")
+ , assert = require("assert")
+ , path = require("path")
+ , mkdir = require("mkdirp")
+ , chownr = require("chownr")
+ , url = require("url")
+ , npm = require("../npm.js")
+ , log = require("npmlog")
+ , cacheFile = require("npm-cache-filename")
+ , getCacheStat = require("./get-stat.js")
+
+/* /-/all is special.
+ * It uses timestamp-based caching and partial updates,
+ * because it is a monster.
+ */
+function updateIndex (uri, params, cb) {
+ assert(typeof uri === "string", "must pass registry URI to updateIndex")
+ assert(params && typeof params === "object", "must pass params to updateIndex")
+ assert(typeof cb === "function", "must pass callback to updateIndex")
+
+ var parsed = url.parse(uri)
+ assert(
+ parsed.protocol === "http:" || parsed.protocol === "https:",
+ "must have a URL that starts with http: or https:"
+ )
+
+ var cacheBase = cacheFile(npm.config.get("cache"))(uri)
+ var cachePath = path.join(cacheBase, ".cache.json")
+ log.info("updateIndex", cachePath)
+
+ getCacheStat(function (er, st) {
+ if (er) return cb(er)
+
+ mkdir(cacheBase, function (er, made) {
+ if (er) return cb(er)
+
+ fs.readFile(cachePath, function (er, data) {
+ if (er) return updateIndex_(uri, params, 0, {}, cachePath, cb)
+
+ try {
+ data = JSON.parse(data)
+ }
+ catch (ex) {
+ fs.writeFile(cachePath, "{}", function (er) {
+ if (er) return cb(new Error("Broken cache."))
+
+ return updateIndex_(uri, params, 0, {}, cachePath, cb)
+ })
+ }
+ var t = +data._updated || 0
+ chownr(made || cachePath, st.uid, st.gid, function (er) {
+ if (er) return cb(er)
+
+ updateIndex_(uri, params, t, data, cachePath, cb)
+ })
+ })
+ })
+ })
+}
+
+function updateIndex_ (uri, params, t, data, cachePath, cb) {
+ // use the cache and update in the background if it's not too old
+ if (Date.now() - t < 60000) {
+ cb(null, data)
+ cb = function () {}
+ }
+
+ var full
+ if (t === 0) {
+ log.warn("", "Building the local index for the first time, please be patient")
+ full = url.resolve(uri, "/-/all")
+ }
+ else {
+ full = url.resolve(uri, "/-/all/since?stale=update_after&startkey=" + t)
+ }
+
+ npm.registry.request(full, params, function (er, updates, _, res) {
+ if (er) return cb(er, data)
+
+ var headers = res.headers
+ var updated = updates._updated || Date.parse(headers.date)
+
+ Object.keys(updates).forEach(function (p) { data[p] = updates[p] })
+
+ data._updated = updated
+ getCacheStat(function (er, st) {
+ if (er) return cb(er)
+
+ fs.writeFile(cachePath, JSON.stringify(data), function (er) {
+ delete data._updated
+ if (er) return cb(er)
+ chownr(cachePath, st.uid, st.gid, function (er) {
+ cb(er, data)
+ })
+ })
+ })
+ })
+}
diff --git a/deps/npm/lib/config.js b/deps/npm/lib/config.js
index f51156aad..c79cdc5b8 100644
--- a/deps/npm/lib/config.js
+++ b/deps/npm/lib/config.js
@@ -18,6 +18,7 @@ var log = require("npmlog")
, ini = require("ini")
, editor = require("editor")
, os = require("os")
+ , umask = require("./utils/umask")
config.completion = function (opts, cb) {
var argv = opts.conf.argv.remain
@@ -84,7 +85,7 @@ function edit (cb) {
]
)
.concat(Object.keys(npmconf.defaults).reduce(function (arr, key) {
- var obj = {};
+ var obj = {}
obj[key] = npmconf.defaults[key]
if (key === "logstream") return arr
return arr.concat(
@@ -132,16 +133,19 @@ function set (key, val, cb) {
val = val.trim()
log.info("config", "set %j %j", key, val)
var where = npm.config.get("global") ? "global" : "user"
+ if (key.match(/umask/)) val = umask.fromString(val)
npm.config.set(key, val, where)
npm.config.save(where, cb)
}
function get (key, cb) {
if (!key) return list(cb)
- if (key.charAt(0) === "_") {
+ if (!public(key)) {
return cb(new Error("---sekretz---"))
}
- console.log(npm.config.get(key))
+ var val = npm.config.get(key)
+ if (key.match(/umask/)) val = umask.toString(val)
+ console.log(val)
cb()
}
@@ -150,7 +154,9 @@ function sort (a, b) {
}
function public (k) {
- return !(k.charAt(0) === "_" || types[k] !== types[k])
+ return !(k.charAt(0) === "_" ||
+ k.indexOf(":_") !== -1 ||
+ types[k] !== types[k])
}
function getKeys (data) {
diff --git a/deps/npm/lib/config/core.js b/deps/npm/lib/config/core.js
index 6c6112532..59f7cf556 100644
--- a/deps/npm/lib/config/core.js
+++ b/deps/npm/lib/config/core.js
@@ -8,8 +8,9 @@ var fs = require("fs")
var path = require("path")
var nopt = require("nopt")
var ini = require("ini")
-var Octal = configDefs.Octal
+var Umask = configDefs.Umask
var mkdirp = require("mkdirp")
+var umask = require("../utils/umask")
exports.load = load
exports.Conf = Conf
@@ -362,8 +363,8 @@ function parseField (f, k) {
var isPath = -1 !== typeList.indexOf(path)
var isBool = -1 !== typeList.indexOf(Boolean)
var isString = -1 !== typeList.indexOf(String)
- var isOctal = -1 !== typeList.indexOf(Octal)
- var isNumber = isOctal || (-1 !== typeList.indexOf(Number))
+ var isUmask = -1 !== typeList.indexOf(Umask)
+ var isNumber = -1 !== typeList.indexOf(Number)
f = (""+f).trim()
@@ -396,8 +397,11 @@ function parseField (f, k) {
f = path.resolve(f)
}
+ if (isUmask)
+ f = umask.fromString(f)
+
if (isNumber && !isNaN(f))
- f = isOctal ? parseInt(f, 8) : +f
+ f = +f
return f
}
diff --git a/deps/npm/lib/config/defaults.js b/deps/npm/lib/config/defaults.js
index 7bd672114..3d99ab86f 100644
--- a/deps/npm/lib/config/defaults.js
+++ b/deps/npm/lib/config/defaults.js
@@ -9,6 +9,7 @@ var path = require("path")
, nopt = require("nopt")
, os = require("os")
, osenv = require("osenv")
+ , umask = require("../utils/umask")
var log
try {
@@ -20,19 +21,10 @@ try {
} }
}
-exports.Octal = Octal
-function Octal () {}
-function validateOctal (data, k, val) {
- // must be either an integer or an octal string.
- if (typeof val === "number") {
- data[k] = val
- return true
- }
-
- if (typeof val === "string") {
- if (val.charAt(0) !== "0" || isNaN(val)) return false
- data[k] = parseInt(val, 8).toString(8)
- }
+exports.Umask = Umask
+function Umask () {}
+function validateUmask (data, k, val) {
+ return umask.validate (data, k, val)
}
function validateSemver (data, k, val) {
@@ -52,8 +44,8 @@ function validateStream (data, k, val) {
}
nopt.typeDefs.semver = { type: semver, validate: validateSemver }
-nopt.typeDefs.Octal = { type: Octal, validate: validateOctal }
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 = {}
@@ -71,8 +63,8 @@ nopt.invalidHandler = function (k, val, type) {
case tag:
log.warn("invalid config", "Tag must not be a SemVer range")
break
- case Octal:
- log.warn("invalid config", "Must be octal number, starting with 0")
+ case Umask:
+ log.warn("invalid config", "Must be umask, octal number in range 0000..0777")
break
case url:
log.warn("invalid config", "Must be a full url with 'http://'")
@@ -189,9 +181,8 @@ Object.defineProperty(exports, "defaults", {get: function () {
, prefix : globalPrefix
, production: process.env.NODE_ENV === "production"
, "proprietary-attribs": true
- , proxy : process.env.HTTP_PROXY || process.env.http_proxy || null
- , "https-proxy" : process.env.HTTPS_PROXY || process.env.https_proxy ||
- process.env.HTTP_PROXY || process.env.http_proxy || null
+ , proxy : null
+ , "https-proxy" : null
, "user-agent" : "npm/{npm-version} "
+ "node/{node-version} "
+ "{platform} "
@@ -225,7 +216,7 @@ Object.defineProperty(exports, "defaults", {get: function () {
, usage : false
, user : process.platform === "win32" ? 0 : "nobody"
, userconfig : path.resolve(home, ".npmrc")
- , umask: process.umask ? process.umask() : parseInt("022", 8)
+ , umask: process.umask ? process.umask() : umask.fromString("022")
, version : false
, versions : false
, viewer: process.platform === "win32" ? "browser" : "man"
@@ -323,7 +314,7 @@ exports.types =
, usage : Boolean
, user : [Number, String]
, userconfig : path
- , umask: Octal
+ , umask: Umask
, version : Boolean
, versions : Boolean
, viewer: String
diff --git a/deps/npm/lib/config/nerf-dart.js b/deps/npm/lib/config/nerf-dart.js
index 3b26a56c6..07c817500 100644
--- a/deps/npm/lib/config/nerf-dart.js
+++ b/deps/npm/lib/config/nerf-dart.js
@@ -13,9 +13,11 @@ module.exports = toNerfDart
*/
function toNerfDart(uri) {
var parsed = url.parse(uri)
- parsed.pathname = "/"
delete parsed.protocol
delete parsed.auth
+ delete parsed.query
+ delete parsed.search
+ delete parsed.hash
- return url.format(parsed)
+ return url.resolve(url.format(parsed), ".")
}
diff --git a/deps/npm/lib/dedupe.js b/deps/npm/lib/dedupe.js
index 74397d0cb..6a4abd730 100644
--- a/deps/npm/lib/dedupe.js
+++ b/deps/npm/lib/dedupe.js
@@ -240,10 +240,10 @@ function findVersions (npm, summary, cb) {
var versions = data.versions
var ranges = data.ranges
- mapToRegistry(name, npm.config, function (er, uri) {
+ mapToRegistry(name, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- npm.registry.get(uri, null, next)
+ npm.registry.get(uri, { auth : auth }, next)
})
function next (er, data) {
diff --git a/deps/npm/lib/deprecate.js b/deps/npm/lib/deprecate.js
index 17dd4eab0..c90ad9027 100644
--- a/deps/npm/lib/deprecate.js
+++ b/deps/npm/lib/deprecate.js
@@ -12,13 +12,16 @@ deprecate.completion = function (opts, cb) {
if (opts.conf.argv.remain.length > 2) return cb()
// get the list of packages by user
var path = "/-/by-user/"
- mapToRegistry(path, npm.config, function (er, uri) {
+ mapToRegistry(path, npm.config, function (er, uri, c) {
if (er) return cb(er)
- var c = npm.config.getCredentialsByURI(uri)
if (!(c && c.username)) return cb()
- npm.registry.get(uri + c.username, { timeout : 60000 }, function (er, list) {
+ var params = {
+ timeout : 60000,
+ auth : c
+ }
+ npm.registry.get(uri + c.username, params, function (er, list) {
if (er) return cb()
console.error(list)
return cb(null, list[c.username])
@@ -34,11 +37,14 @@ function deprecate (args, cb) {
// fetch the data and make sure it exists.
var p = npa(pkg)
- mapToRegistry(p.name, npm.config, next)
-
- function next (er, uri) {
+ mapToRegistry(p.name, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- npm.registry.deprecate(uri, p.spec, msg, cb)
- }
+ var params = {
+ version : p.spec,
+ message : msg,
+ auth : auth
+ }
+ npm.registry.deprecate(uri, params, cb)
+ })
}
diff --git a/deps/npm/lib/docs.js b/deps/npm/lib/docs.js
index dead3f755..9abe740a3 100644
--- a/deps/npm/lib/docs.js
+++ b/deps/npm/lib/docs.js
@@ -4,23 +4,22 @@ docs.usage = "npm docs <pkgname>"
docs.usage += "\n"
docs.usage += "npm docs ."
+var npm = require("./npm.js")
+ , opener = require("opener")
+ , path = require("path")
+ , log = require("npmlog")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+
docs.completion = function (opts, cb) {
- mapToRegistry("/-/short", npm.config, function (er, uri) {
+ mapToRegistry("/-/short", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, { timeout : 60000 }, function (er, list) {
+ npm.registry.get(uri, { timeout : 60000, auth : auth }, function (er, list) {
return cb(null, list || [])
})
})
}
-var npm = require("./npm.js")
- , registry = npm.registry
- , opener = require("opener")
- , path = require("path")
- , log = require("npmlog")
- , mapToRegistry = require("./utils/map-to-registry.js")
-
function url (json) {
return json.homepage ? json.homepage : "https://npmjs.org/package/" + json.name
}
@@ -28,7 +27,7 @@ function url (json) {
function docs (args, cb) {
args = args || []
var pending = args.length
- if (!pending) return getDoc('.', cb)
+ if (!pending) return getDoc(".", cb)
args.forEach(function(proj) {
getDoc(proj, function(err) {
if (err) {
@@ -40,10 +39,10 @@ function docs (args, cb) {
}
function getDoc (project, cb) {
- project = project || '.'
+ project = project || "."
var package = path.resolve(npm.localPrefix, "package.json")
- if (project === '.' || project === './') {
+ if (project === "." || project === "./") {
var json
try {
json = require(package)
@@ -57,10 +56,10 @@ function getDoc (project, cb) {
return opener(url(json), { command: npm.config.get("browser") }, cb)
}
- mapToRegistry(project, npm.config, function (er, uri) {
+ mapToRegistry(project, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri + "/latest", { timeout : 3600 }, next)
+ npm.registry.get(uri + "/latest", { timeout : 3600, auth : auth }, next)
})
function next (er, json) {
diff --git a/deps/npm/lib/explore.js b/deps/npm/lib/explore.js
index e87e83935..96475a069 100644
--- a/deps/npm/lib/explore.js
+++ b/deps/npm/lib/explore.js
@@ -6,7 +6,7 @@ explore.usage = "npm explore <pkg> [ -- <cmd>]"
explore.completion = require("./utils/completion/installed-shallow.js")
var npm = require("./npm.js")
- , spawn = require("child_process").spawn
+ , spawn = require("./utils/spawn")
, path = require("path")
, fs = require("graceful-fs")
diff --git a/deps/npm/lib/help.js b/deps/npm/lib/help.js
index 747bd5020..07d921949 100644
--- a/deps/npm/lib/help.js
+++ b/deps/npm/lib/help.js
@@ -7,7 +7,7 @@ help.completion = function (opts, cb) {
}
var path = require("path")
- , spawn = require("child_process").spawn
+ , spawn = require("./utils/spawn")
, npm = require("./npm.js")
, log = require("npmlog")
, opener = require("opener")
diff --git a/deps/npm/lib/init.js b/deps/npm/lib/init.js
index 925654bee..401e700af 100644
--- a/deps/npm/lib/init.js
+++ b/deps/npm/lib/init.js
@@ -31,11 +31,11 @@ function init (args, cb) {
initJson(dir, initFile, npm.config, function (er, data) {
log.resume()
log.silly("package data", data)
- log.info("init", "written successfully")
if (er && er.message === "canceled") {
log.warn("init", "canceled")
return cb(null, data)
}
+ log.info("init", "written successfully")
cb(er, data)
})
}
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index e539307af..756d12ee3 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -33,11 +33,11 @@ install.completion = function (opts, cb) {
// if it has a slash, then it's gotta be a folder
// if it starts with https?://, then just give up, because it's a url
// for now, not yet implemented.
- var registry = npm.registry
- mapToRegistry("-/short", npm.config, function (er, uri) {
+ mapToRegistry("-/short", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, pkgs) {
+ var options = { auth : auth }
+ npm.registry.get(uri, options, function (er, pkgs) {
if (er) return cb()
if (!opts.partialWord) return cb(null, pkgs)
@@ -53,7 +53,7 @@ install.completion = function (opts, cb) {
mapToRegistry(pkgs[0], npm.config, function (er, uri) {
if (er) return cb(er)
- registry.get(uri, null, function (er, d) {
+ npm.registry.get(uri, options, function (er, d) {
if (er) return cb()
return cb(null, Object.keys(d["dist-tags"] || {})
.concat(Object.keys(d.versions || {}))
diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js
index ed329d19e..eee4f2772 100644
--- a/deps/npm/lib/ls.js
+++ b/deps/npm/lib/ls.js
@@ -250,8 +250,7 @@ function makeArchy_ (data, long, dir, depth, parent, d) {
if (data._found === true && data._id) {
if (npm.color) {
out.label = color.bgBlack(color.yellow(out.label.trim())) + " "
- }
- else {
+ } else {
out.label = out.label.trim() + " "
}
}
@@ -291,10 +290,13 @@ function makeArchy_ (data, long, dir, depth, parent, d) {
}
// now all the children.
- out.nodes = Object.keys(data.dependencies || {})
- .sort(alphasort).map(function (d) {
- return makeArchy_(data.dependencies[d], long, dir, depth + 1, data, d)
- })
+ out.nodes = []
+ if (depth <= npm.config.get("depth")) {
+ out.nodes = Object.keys(data.dependencies || {})
+ .sort(alphasort).map(function (d) {
+ return makeArchy_(data.dependencies[d], long, dir, depth + 1, data, d)
+ })
+ }
if (out.nodes.length === 0 && data.path === dir) {
out.nodes = ["(empty)"]
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index e933a1346..d03ec47b6 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -22,8 +22,7 @@ var EventEmitter = require("events").EventEmitter
, path = require("path")
, abbrev = require("abbrev")
, which = require("which")
- , semver = require("semver")
- , RegClient = require("npm-registry-client")
+ , CachingRegClient = require("./cache/caching-client.js")
, charSpin = require("char-spinner")
npm.config = {
@@ -41,7 +40,6 @@ npm.commands = {}
npm.rollbacks = []
try {
- var pv = process.version.replace(/^v/, '')
// startup, ok to do this synchronously
var j = JSON.parse(fs.readFileSync(
path.join(__dirname, "../package.json"))+"")
@@ -86,6 +84,7 @@ var commandCache = {}
, "find-dupes": "dedupe"
, "ddp": "dedupe"
, "v": "view"
+ , "verison": "version"
}
, aliasNames = Object.keys(aliases)
@@ -142,16 +141,21 @@ var commandCache = {}
]
, plumbing = [ "build"
, "unbuild"
- , "isntall"
, "xmas"
, "substack"
, "visnup"
]
- , fullList = npm.fullList = cmdList.concat(aliasNames).filter(function (c) {
+ , littleGuys = [ "isntall" ]
+ , fullList = cmdList.concat(aliasNames).filter(function (c) {
return plumbing.indexOf(c) === -1
})
, abbrevs = abbrev(fullList)
+// we have our reasons
+fullList = npm.fullList = fullList.filter(function (c) {
+ return littleGuys.indexOf(c) === -1
+})
+
npm.spinner =
{ int: null
, started: false
@@ -351,7 +355,7 @@ function load (npm, cli, cb) {
// at this point the configs are all set.
// go ahead and spin up the registry client.
- npm.registry = new RegClient(npm.config)
+ npm.registry = new CachingRegClient(npm.config)
var umask = npm.config.get("umask")
npm.modes = { exec: 0777 & (~umask)
diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js
index fdfd7624d..fe25a8e91 100644
--- a/deps/npm/lib/outdated.js
+++ b/deps/npm/lib/outdated.js
@@ -22,7 +22,6 @@ outdated.completion = require("./utils/completion/installed-deep.js")
var path = require("path")
- , fs = require("graceful-fs")
, readJson = require("read-package-json")
, cache = require("./cache.js")
, asyncMap = require("slide").asyncMap
@@ -35,6 +34,7 @@ var path = require("path")
, os = require("os")
, mapToRegistry = require("./utils/map-to-registry.js")
, npa = require("npm-package-arg")
+ , readInstalled = require("read-installed")
function outdated (args, silent, cb) {
if (typeof cb !== "function") cb = silent, silent = false
@@ -193,11 +193,12 @@ function outdated_ (args, dir, parentHas, depth, cb) {
})
var has = null
- fs.readdir(path.resolve(dir, "node_modules"), function (er, pkgs) {
+ readInstalled(path.resolve(dir), { dev : true }, function (er, data) {
if (er) {
has = Object.create(parentHas)
return next()
}
+ var pkgs = Object.keys(data.dependencies)
pkgs = pkgs.filter(function (p) {
return !p.match(/^[\._-]/)
})
@@ -205,6 +206,7 @@ function outdated_ (args, dir, parentHas, depth, cb) {
var jsonFile = path.resolve(dir, "node_modules", pkg, "package.json")
readJson(jsonFile, function (er, d) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
+ if (d && d.name && d.private) delete deps[d.name]
cb(null, er ? [] : [[d.name, d.version, d._from]])
})
}, function (er, pvs) {
@@ -269,10 +271,10 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb) {
return doIt("git", "git")
// search for the latest package
- mapToRegistry(dep, npm.config, function (er, uri) {
+ mapToRegistry(dep, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- npm.registry.get(uri, null, updateDeps)
+ npm.registry.get(uri, { auth : auth }, updateDeps)
})
function updateDeps (er, d) {
diff --git a/deps/npm/lib/owner.js b/deps/npm/lib/owner.js
index 2fdee7adb..7b3450833 100644
--- a/deps/npm/lib/owner.js
+++ b/deps/npm/lib/owner.js
@@ -1,4 +1,3 @@
-
module.exports = owner
owner.usage = "npm owner add <username> <pkg>"
@@ -6,7 +5,6 @@ owner.usage = "npm owner add <username> <pkg>"
+ "\nnpm owner ls <pkg>"
var npm = require("./npm.js")
- , registry = npm.registry
, log = require("npmlog")
, readJson = require("read-package-json")
, mapToRegistry = require("./utils/map-to-registry.js")
@@ -29,21 +27,21 @@ owner.completion = function (opts, cb) {
switch (argv[2]) {
case "ls":
if (argv.length > 3) return cb()
- return mapToRegistry("-/short", npm.config, function (er, uri) {
+ return mapToRegistry("-/short", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, cb)
+ npm.registry.get(uri, { auth : auth }, cb)
})
case "rm":
if (argv.length > 3) {
theUser = encodeURIComponent(argv[3])
byUser = "-/by-user/" + theUser + "|" + un
- return mapToRegistry(byUser, npm.config, function (er, uri) {
+ return mapToRegistry(byUser, npm.config, function (er, uri, auth) {
if (er) return cb(er)
console.error(uri)
- registry.get(uri, null, function (er, d) {
+ npm.registry.get(uri, { auth : auth }, function (er, d) {
if (er) return cb(er)
// return the intersection
return cb(null, d[theUser].filter(function (p) {
@@ -58,11 +56,11 @@ owner.completion = function (opts, cb) {
if (argv.length > 3) {
theUser = encodeURIComponent(argv[3])
byUser = "-/by-user/" + theUser + "|" + un
- return mapToRegistry(byUser, npm.config, function (er, uri) {
+ return mapToRegistry(byUser, npm.config, function (er, uri, auth) {
if (er) return cb(er)
console.error(uri)
- registry.get(uri, null, function (er, d) {
+ npm.registry.get(uri, { auth : auth }, function (er, d) {
console.error(uri, er || d)
// return mine that they're not already on.
if (er) return cb(er)
@@ -75,10 +73,10 @@ owner.completion = function (opts, cb) {
})
}
// just list all users who aren't me.
- return mapToRegistry("-/users", npm.config, function (er, uri) {
+ return mapToRegistry("-/users", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, list) {
+ npm.registry.get(uri, { auth : auth }, function (er, list) {
if (er) return cb()
return cb(null, Object.keys(list).filter(function (n) {
return n !== un
@@ -109,10 +107,10 @@ function ls (pkg, cb) {
ls(pkg, cb)
})
- mapToRegistry(pkg, npm.config, function (er, uri) {
+ mapToRegistry(pkg, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, data) {
+ npm.registry.get(uri, { auth : auth }, function (er, data) {
var msg = ""
if (er) {
log.error("owner ls", "Couldn't get owner data", pkg)
@@ -161,7 +159,7 @@ function rm (user, pkg, cb) {
})
log.verbose("owner rm", "%s from %s", user, pkg)
- mutate(pkg, null, function (u, owners) {
+ mutate(pkg, user, function (u, owners) {
var found = false
, m = owners.filter(function (o) {
var match = (o.name === user)
@@ -181,10 +179,10 @@ function rm (user, pkg, cb) {
function mutate (pkg, user, mutation, cb) {
if (user) {
var byUser = "-/user/org.couchdb.user:" + user
- mapToRegistry(byUser, npm.config, function (er, uri) {
+ mapToRegistry(byUser, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, mutate_)
+ npm.registry.get(uri, { auth : auth }, mutate_)
})
} else {
mutate_(null, null)
@@ -200,31 +198,52 @@ function mutate (pkg, user, mutation, cb) {
}
if (u) u = { "name" : u.name, "email" : u.email }
- mapToRegistry(pkg, npm.config, function (er, uri) {
+ mapToRegistry(pkg, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, data) {
+ npm.registry.get(uri, { auth : auth }, function (er, data) {
if (er) {
log.error("owner mutate", "Error getting package data for %s", pkg)
return cb(er)
}
+
+ // save the number of maintainers before mutation so that we can figure
+ // out if maintainers were added or removed
+ var beforeMutation = data.maintainers.length
+
var m = mutation(u, data.maintainers)
if (!m) return cb() // handled
if (m instanceof Error) return cb(m) // error
- data = { _id : data._id
- , _rev : data._rev
- , maintainers : m
- }
- var dataPath = pkg + "/-rev/" + data._rev
- mapToRegistry(dataPath, npm.config, function (er, uri) {
+
+ data = {
+ _id : data._id,
+ _rev : data._rev,
+ maintainers : m
+ }
+ var dataPath = pkg.replace("/", "%2f") + "/-rev/" + data._rev
+ mapToRegistry(dataPath, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.request("PUT", uri, { body : data }, function (er, data) {
- if (!er && data.error) er = new Error(
- "Failed to update package metadata: " + JSON.stringify(data))
+ var params = {
+ method : "PUT",
+ body : data,
+ auth : auth
+ }
+ npm.registry.request(uri, params, function (er, data) {
+ if (!er && data.error) {
+ er = new Error("Failed to update package metadata: "+JSON.stringify(data))
+ }
+
if (er) {
log.error("owner mutate", "Failed to update package metadata")
}
+ else if (m.length > beforeMutation) {
+ console.log("+ %s (%s)", user, pkg)
+ }
+ else if (m.length < beforeMutation) {
+ console.log("- %s (%s)", user, pkg)
+ }
+
cb(er, data)
})
})
diff --git a/deps/npm/lib/publish.js b/deps/npm/lib/publish.js
index 2a0fcff5a..f179bd422 100644
--- a/deps/npm/lib/publish.js
+++ b/deps/npm/lib/publish.js
@@ -1,17 +1,17 @@
module.exports = publish
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, log = require("npmlog")
, path = require("path")
, readJson = require("read-package-json")
, lifecycle = require("./utils/lifecycle.js")
, chain = require("slide").chain
, Conf = require("./config/core.js").Conf
- , RegClient = require("npm-registry-client")
+ , CachingRegClient = require("./cache/caching-client.js")
, mapToRegistry = require("./utils/map-to-registry.js")
, cachedPackageRoot = require("./cache/cached-package-root.js")
+ , createReadStream = require("graceful-fs").createReadStream
publish.usage = "npm publish <tarball>"
+ "\nnpm publish <folder>"
@@ -87,7 +87,7 @@ function publish_ (arg, data, isRetry, cachedir, cb) {
s[k] = data.publishConfig[k]
return s
}, {}))
- registry = new RegClient(config)
+ registry = new CachingRegClient(config)
}
data._npmVersion = npm.version
@@ -101,21 +101,29 @@ function publish_ (arg, data, isRetry, cachedir, cb) {
)
)
- mapToRegistry(data.name, config, function (er, registryURI) {
+ mapToRegistry(data.name, config, function (er, registryURI, auth, registryBase) {
if (er) return cb(er)
- var tarball = cachedir + ".tgz"
+ var tarballPath = cachedir + ".tgz"
// we just want the base registry URL in this case
- var registryBase = url.resolve(registryURI, ".")
log.verbose("publish", "registryBase", registryBase)
+ log.silly("publish", "uploading", tarballPath)
- var c = config.getCredentialsByURI(registryBase)
- data._npmUser = {name: c.username, email: c.email}
+ data._npmUser = {
+ name : auth.username,
+ email : auth.email
+ }
+
+ var params = {
+ metadata : data,
+ body : createReadStream(tarballPath),
+ auth : auth
+ }
- registry.publish(registryBase, data, tarball, function (er) {
- if (er && er.code === "EPUBLISHCONFLICT"
- && npm.config.get("force") && !isRetry) {
+ registry.publish(registryBase, params, function (er) {
+ if (er && er.code === "EPUBLISHCONFLICT" &&
+ npm.config.get("force") && !isRetry) {
log.warn("publish", "Forced publish over " + data._id)
return npm.commands.unpublish([data._id], function (er) {
// ignore errors. Use the force. Reach out with your feelings.
diff --git a/deps/npm/lib/repo.js b/deps/npm/lib/repo.js
index c6db8e37b..3db4a16bc 100644
--- a/deps/npm/lib/repo.js
+++ b/deps/npm/lib/repo.js
@@ -3,21 +3,9 @@ module.exports = repo
repo.usage = "npm repo <pkgname>"
-repo.completion = function (opts, cb) {
- if (opts.conf.argv.remain.length > 2) return cb()
- mapToRegistry("/-/short", npm.config, function (er, uri) {
- if (er) return cb(er)
-
- registry.get(uri, { timeout : 60000 }, function (er, list) {
- return cb(null, list || [])
- })
- })
-}
-
var npm = require("./npm.js")
- , registry = npm.registry
, opener = require("opener")
- , github = require('github-url-from-git')
+ , github = require("github-url-from-git")
, githubUserRepo = require("github-url-from-username-repo")
, path = require("path")
, readJson = require("read-package-json")
@@ -26,6 +14,17 @@ var npm = require("./npm.js")
, mapToRegistry = require("./utils/map-to-registry.js")
, npa = require("npm-package-arg")
+repo.completion = function (opts, cb) {
+ if (opts.conf.argv.remain.length > 2) return cb()
+ mapToRegistry("/-/short", npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ npm.registry.get(uri, { timeout : 60000 }, function (er, list) {
+ return cb(null, list || [])
+ })
+ })
+}
+
function repo (args, cb) {
var n = args.length && npa(args[0]).name || "."
fs.stat(n, function (er, s) {
@@ -41,18 +40,18 @@ function repo (args, cb) {
function getUrlAndOpen (d, cb) {
var r = d.repository
- if (!r) return cb(new Error('no repository'))
+ if (!r) return cb(new Error("no repository"))
// XXX remove this when npm@v1.3.10 from node 0.10 is deprecated
// from https://github.com/npm/npm-www/issues/418
if (githubUserRepo(r.url))
r.url = githubUserRepo(r.url)
- var url = (r.url && ~r.url.indexOf('github'))
+ var url = (r.url && ~r.url.indexOf("github"))
? github(r.url)
: nonGithubUrl(r.url)
if (!url)
- return cb(new Error('no repository: could not get url'))
+ return cb(new Error("no repository: could not get url"))
opener(url, { command: npm.config.get("browser") }, cb)
}
@@ -60,7 +59,7 @@ function callRegistry (n, cb) {
mapToRegistry(n, npm.config, function (er, uri) {
if (er) return cb(er)
- registry.get(uri + "/latest", { timeout : 3600 }, function (er, d) {
+ npm.registry.get(uri + "/latest", { timeout : 3600 }, function (er, d) {
if (er) return cb(er)
getUrlAndOpen(d, cb)
})
@@ -69,16 +68,16 @@ function callRegistry (n, cb) {
function nonGithubUrl (url) {
try {
- var idx = url.indexOf('@')
+ var idx = url.indexOf("@")
if (idx !== -1) {
- url = url.slice(idx+1).replace(/:([^\d]+)/, '/$1')
+ url = url.slice(idx+1).replace(/:([^\d]+)/, "/$1")
}
url = url_.parse(url)
- var protocol = url.protocol === 'https:'
- ? 'https:'
- : 'http:'
- return protocol + '//' + (url.host || '') +
- url.path.replace(/\.git$/, '')
+ var protocol = url.protocol === "https:"
+ ? "https:"
+ : "http:"
+ return protocol + "//" + (url.host || "") +
+ url.path.replace(/\.git$/, "")
}
catch(e) {}
}
diff --git a/deps/npm/lib/run-script.js b/deps/npm/lib/run-script.js
index 4495b93c4..ce8ea0f13 100644
--- a/deps/npm/lib/run-script.js
+++ b/deps/npm/lib/run-script.js
@@ -1,4 +1,3 @@
-
module.exports = runScript
var lifecycle = require("./utils/lifecycle.js")
@@ -124,6 +123,21 @@ function run (pkg, wd, cmd, args, cb) {
"prestart", "start", "poststart"
]
} else {
+ if (!pkg.scripts[cmd]) {
+ if (cmd === "test") {
+ pkg.scripts.test = "echo \"Error: no test specified\""
+ } else if (cmd === "env") {
+ if (process.platform === "win32") {
+ log.verbose("run-script using default platform env: SET (Windows)")
+ pkg.scripts[cmd] = "SET"
+ } else {
+ log.verbose("run-script using default platform env: env (Unix)")
+ pkg.scripts[cmd] = "env"
+ }
+ } else {
+ return cb(new Error("missing script: " + cmd))
+ }
+ }
cmds = [cmd]
}
@@ -134,7 +148,9 @@ function run (pkg, wd, cmd, args, cb) {
log.verbose("run-script", cmds)
chain(cmds.map(function (c) {
// pass cli arguments after -- to script.
- if (pkg.scripts[c] && c === cmd) pkg.scripts[c] = pkg.scripts[c] + joinArgs(args)
+ if (pkg.scripts[c] && c === cmd) {
+ pkg.scripts[c] = pkg.scripts[c] + joinArgs(args)
+ }
// when running scripts explicitly, assume that they're trusted.
return [lifecycle, pkg, c, wd, true]
diff --git a/deps/npm/lib/search.js b/deps/npm/lib/search.js
index 5dd060f82..ad3f312e5 100644
--- a/deps/npm/lib/search.js
+++ b/deps/npm/lib/search.js
@@ -2,9 +2,9 @@
module.exports = exports = search
var npm = require("./npm.js")
- , registry = npm.registry
- , columnify = require('columnify')
+ , columnify = require("columnify")
, mapToRegistry = require("./utils/map-to-registry.js")
+ , updateIndex = require("./cache/update-index.js")
search.usage = "npm search [some search terms ...]"
@@ -58,15 +58,16 @@ function search (args, silent, staleness, cb) {
}
function getFilteredData (staleness, args, notArgs, cb) {
- var opts = {
- timeout : staleness,
- follow : true,
- staleOk : true
- }
- mapToRegistry("-/all", npm.config, function (er, uri) {
+ mapToRegistry("-/all", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, opts, function (er, data) {
+ var params = {
+ timeout : staleness,
+ follow : true,
+ staleOk : true,
+ auth : auth
+ }
+ updateIndex(uri, params, function (er, data) {
if (er) return cb(er)
return cb(null, filter(data, args, notArgs))
})
@@ -164,7 +165,7 @@ function prettify (data, args) {
dat.keywords = dat.keywords.split(/[,\s]+/)
}
if (Array.isArray(dat.keywords)) {
- dat.keywords = dat.keywords.join(' ')
+ dat.keywords = dat.keywords.join(" ")
}
// split author on whitespace or ,
@@ -172,7 +173,7 @@ function prettify (data, args) {
dat.author = dat.author.split(/[,\s]+/)
}
if (Array.isArray(dat.author)) {
- dat.author = dat.author.join(' ')
+ dat.author = dat.author.join(" ")
}
return dat
})
@@ -194,7 +195,7 @@ function prettify (data, args) {
include: columns
, truncate: truncate
, config: {
- name: { maxWidth: 40, truncate: false, truncateMarker: '' }
+ name: { maxWidth: 40, truncate: false, truncateMarker: "" }
, description: { maxWidth: 60 }
, author: { maxWidth: 20 }
, date: { maxWidth: 11 }
@@ -260,9 +261,9 @@ function getMaxWidth() {
function trimToMaxWidth(str) {
var maxWidth = getMaxWidth()
- return str.split('\n').map(function(line) {
+ return str.split("\n").map(function(line) {
return line.slice(0, maxWidth)
- }).join('\n')
+ }).join("\n")
}
function highlightSearchTerms(str, terms) {
diff --git a/deps/npm/lib/star.js b/deps/npm/lib/star.js
index 123c4ebbb..d2e69deb9 100644
--- a/deps/npm/lib/star.js
+++ b/deps/npm/lib/star.js
@@ -2,7 +2,6 @@
module.exports = star
var npm = require("./npm.js")
- , registry = npm.registry
, log = require("npmlog")
, asyncMap = require("slide").asyncMap
, mapToRegistry = require("./utils/map-to-registry.js")
@@ -11,10 +10,14 @@ star.usage = "npm star <package> [pkg, pkg, ...]\n"
+ "npm unstar <package> [pkg, pkg, ...]"
star.completion = function (opts, cb) {
- mapToRegistry("-/short", npm.config, function (er, uri) {
+ mapToRegistry("-/short", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, { timeout : 60000 }, function (er, list) {
+ var params = {
+ timeout : 60000,
+ auth : auth
+ }
+ npm.registry.get(uri, params, function (er, list) {
return cb(null, list || [])
})
})
@@ -27,10 +30,14 @@ function star (args, cb) {
, using = !(npm.command.match(/^un/))
if (!using) s = u
asyncMap(args, function (pkg, cb) {
- mapToRegistry(pkg, npm.config, function (er, uri) {
+ mapToRegistry(pkg, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.star(uri, using, function (er, data, raw, req) {
+ var params = {
+ starred : using,
+ auth : auth
+ }
+ npm.registry.star(uri, params, function (er, data, raw, req) {
if (!er) {
console.log(s + " "+pkg)
log.verbose("star", data)
diff --git a/deps/npm/lib/stars.js b/deps/npm/lib/stars.js
index dee5c152a..087e8d9bf 100644
--- a/deps/npm/lib/stars.js
+++ b/deps/npm/lib/stars.js
@@ -3,17 +3,20 @@ module.exports = stars
stars.usage = "npm stars [username]"
var npm = require("./npm.js")
- , registry = npm.registry
, log = require("npmlog")
, mapToRegistry = require("./utils/map-to-registry.js")
function stars (args, cb) {
npm.commands.whoami([], true, function (er, username) {
var name = args.length === 1 ? args[0] : username
- mapToRegistry("", npm.config, function (er, uri) {
+ mapToRegistry("", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.stars(uri, name, showstars)
+ var params = {
+ username : name,
+ auth : auth
+ }
+ npm.registry.stars(uri, params, showstars)
})
})
diff --git a/deps/npm/lib/tag.js b/deps/npm/lib/tag.js
index 47e9a8c0a..bc7ec9187 100644
--- a/deps/npm/lib/tag.js
+++ b/deps/npm/lib/tag.js
@@ -6,7 +6,6 @@ tag.usage = "npm tag <project>@<version> [<tag>]"
tag.completion = require("./unpublish.js").completion
var npm = require("./npm.js")
- , registry = npm.registry
, mapToRegistry = require("./utils/map-to-registry.js")
, npa = require("npm-package-arg")
, semver = require("semver")
@@ -26,9 +25,14 @@ function tag (args, cb) {
return cb(er)
}
- mapToRegistry(project, npm.config, function (er, uri) {
+ mapToRegistry(project, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.tag(uri, version, t, cb)
+ var params = {
+ version : version,
+ tag : t,
+ auth : auth
+ }
+ npm.registry.tag(uri, params, cb)
})
}
diff --git a/deps/npm/lib/unbuild.js b/deps/npm/lib/unbuild.js
index 8bd6e8507..df57c5b34 100644
--- a/deps/npm/lib/unbuild.js
+++ b/deps/npm/lib/unbuild.js
@@ -27,7 +27,7 @@ function unbuild_ (silent) { return function (folder, cb_) {
log.verbose("unbuild", folder.substr(npm.prefix.length + 1))
readJson(path.resolve(folder, "package.json"), function (er, pkg) {
// if no json, then just trash it, but no scripts or whatever.
- if (er) return gentlyRm(folder, false, cb)
+ if (er) return gentlyRm(folder, false, npm.prefix, cb)
readJson.cache.del(folder)
chain
( [ [lifecycle, pkg, "preuninstall", folder, false, true]
@@ -38,7 +38,7 @@ function unbuild_ (silent) { return function (folder, cb_) {
}
, [rmStuff, pkg, folder]
, [lifecycle, pkg, "postuninstall", folder, false, true]
- , [gentlyRm, folder, undefined] ]
+ , [gentlyRm, folder, false, npm.prefix] ]
, cb )
})
}}
@@ -63,15 +63,12 @@ function rmStuff (pkg, folder, cb) {
function rmBins (pkg, folder, parent, top, cb) {
if (!pkg.bin) return cb()
var binRoot = top ? npm.bin : path.resolve(parent, ".bin")
- log.verbose([binRoot, pkg.bin], "binRoot")
asyncMap(Object.keys(pkg.bin), function (b, cb) {
if (process.platform === "win32") {
- chain([ [gentlyRm, path.resolve(binRoot, b) + ".cmd", undefined]
- , [gentlyRm, path.resolve(binRoot, b), undefined] ], cb)
+ chain([ [gentlyRm, path.resolve(binRoot, b) + ".cmd", true]
+ , [gentlyRm, path.resolve(binRoot, b), true] ], cb)
} else {
- gentlyRm( path.resolve(binRoot, b)
- , !npm.config.get("force") && folder
- , cb )
+ gentlyRm(path.resolve(binRoot, b), true, cb)
}
}, cb)
}
@@ -84,6 +81,7 @@ function rmMans (pkg, folder, parent, top, cb) {
return cb()
}
var manRoot = path.resolve(npm.config.get("prefix"), "share", "man")
+ log.verbose("rmMans", "man files are", pkg.man, "in", manRoot)
asyncMap(pkg.man, function (man, cb) {
if (Array.isArray(man)) {
man.forEach(rmMan)
@@ -91,21 +89,28 @@ function rmMans (pkg, folder, parent, top, cb) {
rmMan(man)
}
- function rmMan(man) {
- var parseMan = man.match(/(.*)\.([0-9]+)(\.gz)?$/)
- , stem = parseMan[1]
- , sxn = parseMan[2]
- , gz = parseMan[3] || ""
- , bn = path.basename(stem)
- , manDest = path.join( manRoot
- , "man"+sxn
- , (bn.indexOf(pkg.name) === 0 ? bn
- : pkg.name + "-" + bn)
- + "." + sxn + gz
- )
- gentlyRm( manDest
- , !npm.config.get("force") && folder
- , cb )
+ function rmMan (man) {
+ log.silly("rmMan", "preparing to remove", man)
+ var parseMan = man.match(/(.*\.([0-9]+)(\.gz)?)$/)
+ if (!parseMan) {
+ log.error(
+ "rmMan", man, "is not a valid name for a man file.",
+ "Man files must end with a number, " +
+ "and optionally a .gz suffix if they are compressed."
+ )
+ return cb()
+ }
+
+ var stem = parseMan[1]
+ var sxn = parseMan[2]
+ var gz = parseMan[3] || ""
+ var bn = path.basename(stem)
+ var manDest = path.join(
+ manRoot,
+ "man"+sxn,
+ (bn.indexOf(pkg.name) === 0 ? bn : pkg.name+"-"+bn)+"."+sxn+gz
+ )
+ gentlyRm(manDest, true, cb)
}
}, cb)
}
diff --git a/deps/npm/lib/unpublish.js b/deps/npm/lib/unpublish.js
index 2566cd5ae..da03b0dcc 100644
--- a/deps/npm/lib/unpublish.js
+++ b/deps/npm/lib/unpublish.js
@@ -3,7 +3,6 @@ module.exports = unpublish
var log = require("npmlog")
, npm = require("./npm.js")
- , registry = npm.registry
, readJson = require("read-package-json")
, path = require("path")
, mapToRegistry = require("./utils/map-to-registry.js")
@@ -19,10 +18,10 @@ unpublish.completion = function (opts, cb) {
var un = encodeURIComponent(username)
if (!un) return cb()
var byUser = "-/by-user/" + un
- mapToRegistry(byUser, npm.config, function (er, uri) {
+ mapToRegistry(byUser, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, pkgs) {
+ npm.registry.get(uri, { auth : auth }, function (er, pkgs) {
// do a bit of filtering at this point, so that we don't need
// to fetch versions for more than one thing, but also don't
// accidentally a whole project.
@@ -33,10 +32,10 @@ unpublish.completion = function (opts, cb) {
return p.indexOf(pp) === 0
})
if (pkgs.length > 1) return cb(null, pkgs)
- mapToRegistry(pkgs[0], npm.config, function (er, uri) {
+ mapToRegistry(pkgs[0], npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, d) {
+ npm.registry.get(uri, { auth : auth }, function (er, d) {
if (er) return cb(er)
var vers = Object.keys(d.versions)
if (!vers.length) return cb(null, pkgs)
@@ -92,10 +91,14 @@ function gotProject (project, version, cb_) {
return cb(er)
}
- mapToRegistry(project, npm.config, function (er, uri) {
+ mapToRegistry(project, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.unpublish(uri, version, cb)
+ var params = {
+ version : version,
+ auth : auth
+ }
+ npm.registry.unpublish(uri, params, cb)
})
})
}
diff --git a/deps/npm/lib/utils/completion/file-completion.js b/deps/npm/lib/utils/completion/file-completion.js
index 5201a15ff..6ce2f8346 100644
--- a/deps/npm/lib/utils/completion/file-completion.js
+++ b/deps/npm/lib/utils/completion/file-completion.js
@@ -15,10 +15,8 @@ function fileCompletion (root, req, depth, cb) {
glob(pattern, opts, function (er, files) {
if (er) return cb(er)
return cb(null, (files || []).map(function (f) {
- return path.join(req, f.substr(root.length + 1)
- .substr((f === req ? path.dirname(req)
- : req).length)
- .replace(/^\//, ""))
+ var tail = f.substr(root.length + 1).replace(/^\//, "")
+ return path.join(req, tail)
}))
})
})
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index 95b78a8cc..12c6dd407 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -181,7 +181,7 @@ function errorHandler (er) {
case "ELIFECYCLE":
log.error("", er.message)
- log.error("", ["","Failed at the "+er.pkgid+" "+er.stage+" script."
+ log.error("", ["","Failed at the "+er.pkgid+" "+er.stage+" script '"+er.script+"'."
,"This is most likely a problem with the "+er.pkgname+" package,"
,"not with npm itself."
,"Tell the author that this fails on your system:"
@@ -339,6 +339,14 @@ function errorHandler (er) {
].join("\n"))
break
+ case "ENOENT":
+ log.error("enoent", [er.message
+ ,"This is most likely not a problem with npm itself"
+ ,"and is related to npm not being able to find a file."
+ ,er.file?"\nCheck if the file '"+er.file+"' is present.":""
+ ].join("\n"))
+ break
+
default:
log.error("", er.message || er)
log.error("", ["", "If you need help, you may report this error at:"
diff --git a/deps/npm/lib/utils/gently-rm.js b/deps/npm/lib/utils/gently-rm.js
index d43d0725e..587ad0eb1 100644
--- a/deps/npm/lib/utils/gently-rm.js
+++ b/deps/npm/lib/utils/gently-rm.js
@@ -11,13 +11,19 @@ var npm = require("../npm.js")
, readlink = require("graceful-fs").readlink
, isInside = require("path-is-inside")
, vacuum = require("fs-vacuum")
- , rimraf = require("rimraf")
, some = require("async-some")
+ , asyncMap = require("slide").asyncMap
+ , normalize = require("path").normalize
+
+function gentlyRm (path, gently, base, cb) {
+ if (!cb) {
+ cb = base
+ base = undefined
+ }
-function gentlyRm (path, gently, cb) {
if (!cb) {
cb = gently
- gently = null
+ gently = false
}
// never rm the root, prefix, or bin dirs.
@@ -27,7 +33,7 @@ function gentlyRm (path, gently, cb) {
npm.globalDir, npm.globalRoot, npm.globalBin, npm.globalPrefix
]
- var resolved = resolve(path)
+ var resolved = normalize(resolve(path))
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))
@@ -35,13 +41,14 @@ function gentlyRm (path, gently, cb) {
var options = {log : log.silly.bind(log, "gentlyRm")}
if (npm.config.get("force") || !gently) options.purge = true
+ if (base) options.base = normalize(base)
if (!gently) {
log.verbose("gentlyRm", "vacuuming", resolved)
return vacuum(resolved, options, cb)
}
- var parent = resolve(gently)
+ var parent = options.base = normalize(base ? base : npm.prefix)
log.verbose("gentlyRm", "verifying that", parent, "is managed by npm")
some(prefixes, isManaged(parent), function (er, matched) {
if (er) return cb(er)
@@ -56,7 +63,6 @@ function gentlyRm (path, gently, cb) {
if (isInside(resolved, parent)) {
log.silly("gentlyRm", resolved, "is under", parent)
log.verbose("gentlyRm", "vacuuming", resolved, "up to", parent)
- options.base = parent
return vacuum(resolved, options, cb)
}
@@ -94,7 +100,7 @@ function gentlyRm (path, gently, cb) {
if (matched) {
log.silly("gentlyRm", source, "is under", matched)
log.verbose("gentlyRm", "removing", resolved)
- rimraf(resolved, cb)
+ vacuum(resolved, options, cb)
}
log.verbose("gentlyRm", source, "is not managed by npm")
@@ -107,55 +113,55 @@ function gentlyRm (path, gently, cb) {
var resolvedPaths = {}
function isManaged (target) {
- return predicate
-
- function predicate (path, cb) {
+ return function predicate (path, cb) {
if (!path) {
log.verbose("isManaged", "no path")
return cb(null, false)
}
- path = resolve(path)
-
- // if the path has already been memoized, return immediately
- var resolved = resolvedPaths[path]
- if (resolved) {
- var inside = isInside(target, resolved)
- log.silly("isManaged", target, inside ? "is" : "is not", "inside", resolved)
-
- return cb(null, inside && path)
- }
-
- // otherwise, check the path
- lstat(path, function (er, stat) {
+ asyncMap([path, target], resolveSymlink, function (er, results) {
if (er) {
if (er.code === "ENOENT") return cb(null, false)
return cb(er)
}
- // if it's not a link, cache & test the path itself
- if (!stat.isSymbolicLink()) return cacheAndTest(path, path, target, cb)
+ var path = results[0]
+ var target = results[1]
+ var inside = isInside(target, path)
+ log.silly("isManaged", target, inside ? "is" : "is not", "inside", path)
- // otherwise, cache & test the link's source
- readlink(path, function (er, source) {
- if (er) {
- if (er.code === "ENOENT") return cb(null, false)
+ return cb(null, inside && path)
+ })
+ }
- return cb(er)
- }
+ function resolveSymlink (toResolve, cb) {
+ var resolved = resolve(toResolve)
+
+ // if the path has already been memoized, return immediately
+ var cached = resolvedPaths[resolved]
+ if (cached) return cb(null, cached)
+
+ // otherwise, check the path
+ lstat(resolved, function (er, stat) {
+ if (er) return cb(er)
+
+ // if it's not a link, cache & return the path itself
+ if (!stat.isSymbolicLink()) {
+ resolvedPaths[resolved] = resolved
+ return cb(null, resolved)
+ }
- cacheAndTest(resolve(path, source), path, target, cb)
+ // otherwise, cache & return the link's source
+ readlink(resolved, function (er, source) {
+ if (er) return cb(er)
+
+ resolved = resolve(resolved, source)
+ resolvedPaths[resolved] = resolved
+ cb(null, resolved)
})
})
}
-
- function cacheAndTest (resolved, source, target, cb) {
- resolvedPaths[source] = resolved
- var inside = isInside(target, resolved)
- log.silly("cacheAndTest", target, inside ? "is" : "is not", "inside", resolved)
- cb(null, inside && source)
- }
}
function clobberFail (p, g, cb) {
diff --git a/deps/npm/lib/utils/git.js b/deps/npm/lib/utils/git.js
index db5cc7baf..78cb083ee 100644
--- a/deps/npm/lib/utils/git.js
+++ b/deps/npm/lib/utils/git.js
@@ -6,37 +6,37 @@ exports.chainableExec = chainableExec
exports.whichAndExec = whichAndExec
var exec = require("child_process").execFile
- , spawn = require("child_process").spawn
+ , spawn = require("./spawn")
, npm = require("../npm.js")
, which = require("which")
, git = npm.config.get("git")
, assert = require("assert")
, log = require("npmlog")
-function prefixGitArgs() {
+function prefixGitArgs () {
return process.platform === "win32" ? ["-c", "core.longpaths=true"] : []
}
-function execGit(args, options, cb) {
+function execGit (args, options, cb) {
log.info("git", args)
return exec(git, prefixGitArgs().concat(args || []), options, cb)
}
-function spawnGit(args, options, cb) {
+function spawnGit (args, options) {
log.info("git", args)
return spawn(git, prefixGitArgs().concat(args || []), options)
}
-function chainableExec() {
+function chainableExec () {
var args = Array.prototype.slice.call(arguments)
return [execGit].concat(args)
}
-function whichGit(cb) {
+function whichGit (cb) {
return which(git, cb)
}
-function whichAndExec(args, options, cb) {
+function whichAndExec (args, options, cb) {
assert.equal(typeof cb, "function", "no callback provided")
// check for git
whichGit(function (err) {
diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js
index c0eb83dfb..299fa5698 100644
--- a/deps/npm/lib/utils/lifecycle.js
+++ b/deps/npm/lib/utils/lifecycle.js
@@ -3,14 +3,15 @@ exports.cmd = cmd
exports.makeEnv = makeEnv
var log = require("npmlog")
- , spawn = require("child_process").spawn
- , npm = require("../npm.js")
- , path = require("path")
- , fs = require("graceful-fs")
- , chain = require("slide").chain
- , Stream = require("stream").Stream
- , PATH = "PATH"
- , uidNumber = require("uid-number")
+var spawn = require("./spawn")
+var npm = require("../npm.js")
+var path = require("path")
+var fs = require("graceful-fs")
+var chain = require("slide").chain
+var Stream = require("stream").Stream
+var PATH = "PATH"
+var uidNumber = require("uid-number")
+var umask = require("./umask")
// windows calls it's path "Path" usually, but this is not guaranteed.
if (process.platform === "win32") {
@@ -198,7 +199,7 @@ function runCmd_ (cmd, pkg, env, wd, stage, unsafe, uid, gid, cb_) {
var shFlag = "-c"
if (process.platform === "win32") {
- sh = "cmd"
+ sh = process.env.comspec || "cmd"
shFlag = "/c"
conf.windowsVerbatimArguments = true
}
@@ -316,6 +317,7 @@ function makeEnv (data, prefix, env) {
}
var value = npm.config.get(i)
if (value instanceof Stream || Array.isArray(value)) return
+ if (i.match(/umask/)) value = umask.toString(value)
if (!value) value = ""
else if (typeof value === "number") value = "" + value
else if (typeof value !== "string") value = JSON.stringify(value)
diff --git a/deps/npm/lib/utils/map-to-registry.js b/deps/npm/lib/utils/map-to-registry.js
index cf665e4f6..bd68a26d4 100644
--- a/deps/npm/lib/utils/map-to-registry.js
+++ b/deps/npm/lib/utils/map-to-registry.js
@@ -6,8 +6,8 @@ var log = require("npmlog")
module.exports = mapToRegistry
function mapToRegistry(name, config, cb) {
- var uri
- var scopedRegistry
+ log.silly("mapToRegistry", "name", name)
+ var registry
// the name itself takes precedence
var data = npa(name)
@@ -15,40 +15,42 @@ function mapToRegistry(name, config, cb) {
// the name is definitely scoped, so escape now
name = name.replace("/", "%2f")
- log.silly("mapToRegistry", "scope", data.scope)
+ log.silly("mapToRegistry", "scope (from package name)", data.scope)
- scopedRegistry = config.get(data.scope + ":registry")
- if (scopedRegistry) {
- log.silly("mapToRegistry", "scopedRegistry (scoped package)", scopedRegistry)
- uri = url.resolve(scopedRegistry, name)
- }
- else {
- log.verbose("mapToRegistry", "no registry URL found for scope", data.scope)
+ registry = config.get(data.scope + ":registry")
+ if (!registry) {
+ log.verbose("mapToRegistry", "no registry URL found in name for scope", data.scope)
}
}
// ...then --scope=@scope or --scope=scope
var scope = config.get("scope")
- if (!uri && scope) {
+ if (!registry && scope) {
// I'm an enabler, sorry
if (scope.charAt(0) !== "@") scope = "@" + scope
- scopedRegistry = config.get(scope + ":registry")
- if (scopedRegistry) {
- log.silly("mapToRegistry", "scopedRegistry (scope in config)", scopedRegistry)
- uri = url.resolve(scopedRegistry, name)
- }
- else {
- log.verbose("mapToRegistry", "no registry URL found for scope", scope)
+ log.silly("mapToRegistry", "scope (from config)", scope)
+
+ registry = config.get(scope + ":registry")
+ if (!registry) {
+ log.verbose("mapToRegistry", "no registry URL found in config for scope", scope)
}
}
// ...and finally use the default registry
- if (!uri) {
- uri = url.resolve(config.get("registry"), name)
+ if (!registry) {
+ log.silly("mapToRegistry", "using default registry")
+ registry = config.get("registry")
}
- log.verbose("mapToRegistry", "name", name)
- log.verbose("mapToRegistry", "uri", uri)
- cb(null, uri)
+ log.silly("mapToRegistry", "registry", registry)
+
+ var auth = config.getCredentialsByURI(registry)
+
+ // normalize registry URL so resolution doesn't drop a piece of registry URL
+ var normalized = registry.slice(-1) !== "/" ? registry+"/" : registry
+ var uri = url.resolve(normalized, name)
+ log.silly("mapToRegistry", "uri", uri)
+
+ cb(null, uri, auth, normalized)
}
diff --git a/deps/npm/lib/utils/spawn.js b/deps/npm/lib/utils/spawn.js
new file mode 100644
index 000000000..953671857
--- /dev/null
+++ b/deps/npm/lib/utils/spawn.js
@@ -0,0 +1,23 @@
+module.exports = spawn
+
+var _spawn = require("child_process").spawn
+var EventEmitter = require("events").EventEmitter
+
+function spawn (cmd, args, options) {
+ var raw = _spawn(cmd, args, options)
+ var cooked = new EventEmitter()
+
+ raw.on("error", function (er) {
+ er.file = cmd
+ cooked.emit("error", er)
+ }).on("close", function (code, signal) {
+ cooked.emit("close", code, signal)
+ })
+
+ cooked.stdin = raw.stdin
+ cooked.stdout = raw.stdout
+ cooked.stderr = raw.stderr
+ cooked.kill = function (sig) { return raw.kill(sig) }
+
+ return cooked
+}
diff --git a/deps/npm/lib/utils/tar.js b/deps/npm/lib/utils/tar.js
index ede49a121..7656b5d97 100644
--- a/deps/npm/lib/utils/tar.js
+++ b/deps/npm/lib/utils/tar.js
@@ -4,6 +4,7 @@
var npm = require("../npm.js")
, fs = require("graceful-fs")
, writeFileAtomic = require("write-file-atomic")
+ , writeStreamAtomic = require("fs-write-stream-atomic")
, path = require("path")
, log = require("npmlog")
, uidNumber = require("uid-number")
@@ -65,7 +66,7 @@ function pack_ (tarball, folder, pkg, cb) {
if (er) log.error("tar.pack", "gzip error "+tarball)
cb(er)
})
- .pipe(fstream.Writer({ type: "File", path: tarball }))
+ .pipe(writeStreamAtomic(tarball))
.on("error", function (er) {
if (er) log.error("tar.pack", "Could not write "+tarball)
cb(er)
@@ -228,8 +229,7 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) {
cb(er)
})
.on("close", cb)
- } else if (c.toString().match(/^package\//) ||
- c.toString().match(/^pax_global_header/)) {
+ } else if (hasTarHeader(c)) {
// naked tar
fst
.pipe(tar.Extract(extractOpts))
@@ -273,3 +273,19 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) {
fst.emit("data", c)
})
}
+
+function hasTarHeader (c) {
+ return c[257] === 0x75 && // tar archives have 7573746172 at position
+ c[258] === 0x73 && // 257 and 003030 or 202000 at position 262
+ c[259] === 0x74 &&
+ c[260] === 0x61 &&
+ c[261] === 0x72 &&
+
+ ((c[262] === 0x00 &&
+ c[263] === 0x30 &&
+ c[264] === 0x30) ||
+
+ (c[262] === 0x20 &&
+ c[263] === 0x20 &&
+ c[264] === 0x00))
+}
diff --git a/deps/npm/lib/utils/umask.js b/deps/npm/lib/utils/umask.js
new file mode 100644
index 000000000..6ccb4a119
--- /dev/null
+++ b/deps/npm/lib/utils/umask.js
@@ -0,0 +1,17 @@
+var umask = require("umask")
+var npmlog = require("npmlog")
+var _fromString = umask.fromString
+
+module.exports = umask
+
+// fromString with logging callback
+umask.fromString = function (val) {
+ _fromString(val, function (err, result) {
+ if (err) {
+ npmlog.warn("invalid umask", err.message)
+ }
+ val = result
+ })
+
+ return val
+}
diff --git a/deps/npm/lib/version.js b/deps/npm/lib/version.js
index a15e2c391..d4af41be5 100644
--- a/deps/npm/lib/version.js
+++ b/deps/npm/lib/version.js
@@ -2,16 +2,15 @@
module.exports = version
-var exec = require("child_process").execFile
- , semver = require("semver")
+var semver = require("semver")
, path = require("path")
, fs = require("graceful-fs")
, writeFileAtomic = require("write-file-atomic")
, chain = require("slide").chain
, log = require("npmlog")
- , which = require("which")
, npm = require("./npm.js")
, git = require("./utils/git.js")
+ , assert = require("assert")
version.usage = "npm version [<newversion> | major | minor | patch | prerelease | preminor | premajor ]\n"
+ "\n(run in package dir)\n"
@@ -24,104 +23,152 @@ version.usage = "npm version [<newversion> | major | minor | patch | prerelease
function version (args, silent, cb_) {
if (typeof cb_ !== "function") cb_ = silent, silent = false
if (args.length > 1) return cb_(version.usage)
- fs.readFile(path.join(npm.localPrefix, "package.json"), function (er, data) {
- if (!args.length) {
- var v = {}
- Object.keys(process.versions).forEach(function (k) {
- v[k] = process.versions[k]
- })
- v.npm = npm.version
- try {
- data = JSON.parse(data.toString())
- } catch (er) {
- data = null
- }
- if (data && data.name && data.version) {
- v[data.name] = data.version
- }
- if (npm.config.get("json")) {
- v = JSON.stringify(v, null, 2)
- }
- console.log(v)
- return cb_()
+
+ var packagePath = path.join(npm.localPrefix, "package.json")
+ fs.readFile(packagePath, function (er, data) {
+ function cb (er) {
+ if (!er && !silent) console.log("v" + data.version)
+ cb_(er)
+ }
+
+ if (data) data = data.toString()
+ try {
+ data = JSON.parse(data)
+ }
+ catch (er) {
+ data = null
}
+ if (!args.length) return dump(data, cb_)
+
if (er) {
log.error("version", "No package.json found")
return cb_(er)
}
+ var newVersion = semver.valid(args[0])
+ if (!newVersion) newVersion = semver.inc(data.version, args[0])
+ if (!newVersion) return cb_(version.usage)
+ if (data.version === newVersion) return cb_(new Error("Version not changed"))
+ data.version = newVersion
+
+ checkGit(function (er, hasGit) {
+ if (er) return cb_(er)
+
+ write(data, "package.json", function (er) {
+ if (er) return cb_(er)
+
+ updateShrinkwrap(newVersion, function (er, hasShrinkwrap) {
+ if (er || !hasGit) return cb(er)
+
+ commit(data.version, hasShrinkwrap, cb)
+ })
+ })
+ })
+ })
+}
+
+function updateShrinkwrap (newVersion, cb) {
+ fs.readFile(path.join(npm.localPrefix, "npm-shrinkwrap.json"), function (er, data) {
+ if (er && er.code === "ENOENT") return cb(null, false)
+
try {
+ data = data.toString()
data = JSON.parse(data)
- } catch (er) {
- log.error("version", "Bad package.json data")
- return cb_(er)
+ }
+ catch (er) {
+ log.error("version", "Bad npm-shrinkwrap.json data")
+ return cb(er)
}
- var newVer = semver.valid(args[0])
- if (!newVer) newVer = semver.inc(data.version, args[0])
- if (!newVer) return cb_(version.usage)
- if (data.version === newVer) return cb_(new Error("Version not changed"))
- data.version = newVer
-
- fs.stat(path.join(npm.localPrefix, ".git"), function (er, s) {
- function cb (er) {
- if (!er && !silent) console.log("v" + newVer)
- cb_(er)
+ data.version = newVersion
+ write(data, "npm-shrinkwrap.json", function (er) {
+ if (er) {
+ log.error("version", "Bad npm-shrinkwrap.json data")
+ return cb(er)
}
-
- var tags = npm.config.get('git-tag-version')
- var doGit = !er && s.isDirectory() && tags
- if (!doGit) return write(data, cb)
- else checkGit(data, cb)
+ cb(null, true)
})
})
}
-function checkGit (data, cb) {
- var args = [ "status", "--porcelain" ]
- var options = {env: process.env}
-
- // check for git
- git.whichAndExec(args, options, function (er, stdout) {
- if (er && er.code === "ENOGIT") {
- log.warn(
- "version",
- "This is a Git checkout, but the git command was not found.",
- "npm could not create a Git tag for this release!"
- )
- return write(data, cb)
+function dump (data, cb) {
+ var v = {}
+
+ if (data && data.name && data.version) v[data.name] = data.version
+ v.npm = npm.version
+ Object.keys(process.versions).sort().forEach(function (k) {
+ v[k] = process.versions[k]
+ })
+
+ if (npm.config.get("json")) v = JSON.stringify(v, null, 2)
+
+ console.log(v)
+ cb()
+}
+
+function checkGit (cb) {
+ fs.stat(path.join(npm.localPrefix, ".git"), function (er, s) {
+ var doGit = !er && s.isDirectory() && npm.config.get("git-tag-version")
+ if (!doGit) {
+ if (er) log.verbose("version", "error checking for .git", er)
+ log.verbose("version", "not tagging in git")
+ return cb(null, false)
}
- var lines = stdout.trim().split("\n").filter(function (line) {
- return line.trim() && !line.match(/^\?\? /)
- }).map(function (line) {
- return line.trim()
- })
- if (lines.length) return cb(new Error(
- "Git working directory not clean.\n"+lines.join("\n")))
- write(data, function (er) {
- if (er) return cb(er)
- var message = npm.config.get("message").replace(/%s/g, data.version)
- , sign = npm.config.get("sign-git-tag")
- , flag = sign ? "-sm" : "-am"
- chain
- ( [ git.chainableExec([ "add", "package.json" ], {env: process.env})
- , git.chainableExec([ "commit", "-m", message ], {env: process.env})
- , sign && function (cb) {
- npm.spinner.stop()
- cb()
- }
-
- , git.chainableExec([ "tag", "v" + data.version, flag, message ]
- , {env: process.env}) ]
- , cb )
- })
+ // check for git
+ git.whichAndExec(
+ [ "status", "--porcelain" ],
+ { env : process.env },
+ function (er, stdout) {
+ if (er && er.code === "ENOGIT") {
+ log.warn(
+ "version",
+ "This is a Git checkout, but the git command was not found.",
+ "npm could not create a Git tag for this release!"
+ )
+ return cb(null, false)
+ }
+
+ var lines = stdout.trim().split("\n").filter(function (line) {
+ return line.trim() && !line.match(/^\?\? /)
+ }).map(function (line) {
+ return line.trim()
+ })
+ if (lines.length) return cb(new Error(
+ "Git working directory not clean.\n"+lines.join("\n")
+ ))
+
+ cb(null, true)
+ }
+ )
})
}
-function write (data, cb) {
- writeFileAtomic( path.join(npm.localPrefix, "package.json")
- , new Buffer(JSON.stringify(data, null, 2) + "\n")
- , cb )
+function commit (version, hasShrinkwrap, cb) {
+ var options = { env : process.env }
+ var message = npm.config.get("message").replace(/%s/g, version)
+ var sign = npm.config.get("sign-git-tag")
+ var flag = sign ? "-sm" : "-am"
+ chain(
+ [
+ git.chainableExec([ "add", "package.json" ], options),
+ hasShrinkwrap && git.chainableExec([ "add", "npm-shrinkwrap.json" ] , options),
+ git.chainableExec([ "commit", "-m", message ], options),
+ git.chainableExec([ "tag", "v" + version, flag, message ], options)
+ ],
+ cb
+ )
+}
+
+function write (data, file, cb) {
+ assert(data && typeof data === "object", "must pass data to version write")
+ assert(typeof file === "string", "must pass filename to write to version write")
+
+ log.verbose("version.write", "data", data, "to", file)
+ writeFileAtomic(
+ path.join(npm.localPrefix, file),
+ new Buffer(JSON.stringify(data, null, 2) + "\n"),
+ cb
+ )
}
diff --git a/deps/npm/lib/view.js b/deps/npm/lib/view.js
index 6b45cca2e..bd20ab5a3 100644
--- a/deps/npm/lib/view.js
+++ b/deps/npm/lib/view.js
@@ -3,20 +3,29 @@
module.exports = view
view.usage = "npm view pkg[@version] [<field>[.subfield]...]"
+var npm = require("./npm.js")
+ , readJson = require("read-package-json")
+ , log = require("npmlog")
+ , util = require("util")
+ , semver = require("semver")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
+ , path = require("path")
+
view.completion = function (opts, cb) {
if (opts.conf.argv.remain.length <= 2) {
- return mapToRegistry("-/short", npm.config, function (er, uri) {
+ return mapToRegistry("-/short", npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, cb)
+ npm.registry.get(uri, { auth : auth }, cb)
})
}
// have the package, get the fields.
var tag = npm.config.get("tag")
- mapToRegistry(opts.conf.argv.remain[2], npm.config, function (er, uri) {
+ mapToRegistry(opts.conf.argv.remain[2], npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, d) {
+ npm.registry.get(uri, { auth : auth }, function (er, d) {
if (er) return cb(er)
var dv = d.versions[d["dist-tags"][tag]]
, fields = []
@@ -48,16 +57,6 @@ view.completion = function (opts, cb) {
}
}
-var npm = require("./npm.js")
- , readJson = require("read-package-json")
- , registry = npm.registry
- , log = require("npmlog")
- , util = require("util")
- , semver = require("semver")
- , mapToRegistry = require("./utils/map-to-registry.js")
- , npa = require("npm-package-arg")
- , path = require("path")
-
function view (args, silent, cb) {
if (typeof cb !== "function") cb = silent, silent = false
@@ -97,10 +96,10 @@ function fetchAndRead (nv, args, silent, cb) {
var name = nv.name
, version = nv.rawSpec || npm.config.get("tag")
- mapToRegistry(name, npm.config, function (er, uri) {
+ mapToRegistry(name, npm.config, function (er, uri, auth) {
if (er) return cb(er)
- registry.get(uri, null, function (er, data) {
+ npm.registry.get(uri, { auth : auth }, function (er, data) {
if (er) return cb(er)
if (data["dist-tags"] && data["dist-tags"].hasOwnProperty(version)) {
version = data["dist-tags"][version]
diff --git a/deps/npm/lib/whoami.js b/deps/npm/lib/whoami.js
index b33f93743..42cede1b8 100644
--- a/deps/npm/lib/whoami.js
+++ b/deps/npm/lib/whoami.js
@@ -14,15 +14,24 @@ function whoami (args, silent, cb) {
var registry = npm.config.get("registry")
if (!registry) return cb(new Error("no default registry set"))
- var credentials = npm.config.getCredentialsByURI(registry)
- if (credentials) {
- if (credentials.username) {
- if (!silent) console.log(credentials.username)
- return process.nextTick(cb.bind(this, null, credentials.username))
+ 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) {
+ if (!silent) console.log(auth.username)
+ return process.nextTick(cb.bind(this, null, auth.username))
}
- else if (credentials.token) {
- return npm.registry.whoami(registry, function (er, username) {
+ else if (auth.token) {
+ return npm.registry.whoami(registry, { auth : auth }, function (er, username) {
if (er) return cb(er)
+ if (!username) return noUser()
if (!silent) console.log(username)
cb(null, username)
@@ -30,10 +39,5 @@ function whoami (args, silent, cb) {
}
}
- // 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)
- process.nextTick(cb.bind(this, null, msg))
+ process.nextTick(noUser)
}
diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1
index a7cf1046f..4f274c5c9 100644
--- a/deps/npm/man/man1/npm-README.1
+++ b/deps/npm/man/man1/npm-README.1
@@ -1,6 +1,6 @@
-.TH "NPM" "1" "October 2014" "" ""
+.TH "NPM" "1" "January 2015" "" ""
.SH "NAME"
-\fBnpm\fR \- node package manager
+\fBnpm\fR \- a JavaScript package manager
.P
Build Status \fIhttps://img\.shields\.io/travis/npm/npm/master\.svg\fR \fIhttps://travis\-ci\.org/npm/npm\fR
.SH SYNOPSIS
@@ -32,13 +32,13 @@ paths, etc\.) then read on\.
.SH Fancy Install (Unix)
.P
There's a pretty robust install script at
-https://www\.npmjs\.org/install\.sh\|\. You can download that and run it\.
+https://www\.npmjs\.com/install\.sh\|\. You can download that and run it\.
.P
Here's an example using curl:
.P
.RS 2
.nf
-curl \-L https://npmjs\.org/install\.sh | sh
+curl \-L https://npmjs\.com/install\.sh | sh
.fi
.RE
.SS Slightly Fancier
@@ -67,47 +67,21 @@ If you've got the npm source code, you can also semi\-permanently set
arbitrary config keys using the \fB\|\./configure \-\-key=val \.\.\.\fR, and then
run npm commands by doing \fBnode cli\.js <cmd> <args>\fR\|\. (This is helpful
for testing, or running stuff without actually installing npm itself\.)
-.SH Fancy Windows Install
+.SH Windows Install or Upgrade
.P
-You can download a zip file from https://npmjs\.org/dist/, and unpack it
+You can download a zip file from https://github\.com/npm/npm/releases, and unpack it
in the same folder where node\.exe lives\.
.P
+The latest version in a zip file is 1\.4\.12\. To upgrade to npm 2, follow the
+Windows upgrade instructions in the npm Troubleshooting Guide:
+.P
+https://github\.com/npm/npm/wiki/Troubleshooting#upgrading\-on\-windows
+.P
If that's not fancy enough for you, then you can fetch the code with
git, and mess with it directly\.
.SH Installing on Cygwin
.P
No\.
-.SH Permissions when Using npm to Install Other Stuff
-.P
-\fBtl;dr\fR
-.RS 0
-.IP \(bu 2
-Use \fBsudo\fR for greater safety\. Or don't, if you prefer not to\.
-.IP \(bu 2
-npm will downgrade permissions if it's root before running any build
-scripts that package authors specified\.
-
-.RE
-.SS More details\.\.\.
-.P
-As of version 0\.3, it is recommended to run npm as root\.
-This allows npm to change the user identifier to the \fBnobody\fR user prior
-to running any package build or test commands\.
-.P
-If you are not the root user, or if you are on a platform that does not
-support uid switching, then npm will not attempt to change the userid\.
-.P
-If you would like to ensure that npm \fBalways\fR runs scripts as the
-"nobody" user, and have it fail if it cannot downgrade permissions, then
-set the following configuration param:
-.P
-.RS 2
-.nf
-npm config set unsafe\-perm false
-.fi
-.RE
-.P
-This will prevent running in unsafe mode, even as non\-root users\.
.SH Uninstalling
.P
So sad to see you go\.
@@ -199,13 +173,13 @@ command line arguments using nopt\. You may also want to check out \fBnpm
help config\fR to learn about all the options you can set there\.
.SH More Docs
.P
-Check out the docs \fIhttps://www\.npmjs\.org/doc/\fR,
-especially the faq \fIhttps://www\.npmjs\.org/doc/faq\.html\fR\|\.
+Check out the docs \fIhttps://docs\.npmjs\.com/\fR,
+especially the faq \fIhttps://docs\.npmjs\.com/misc/faq\fR\|\.
.P
You can use the \fBnpm help\fR command to read any of them\.
.P
If you're a developer, and you want to use npm to publish your program,
-you should read this \fIhttps://www\.npmjs\.org/doc/developers\.html\fR
+you should read this \fIhttps://docs\.npmjs\.com/misc/developers\fR
.SH Legal Stuff
.P
"npm" and "The npm Registry" are owned by npm, Inc\.
@@ -224,7 +198,7 @@ specific purpose, or lack of malice in any given npm package\.
.P
If you have a complaint about a package in the public npm registry,
and cannot resolve it with the package
-owner \fIhttps://www\.npmjs\.org/doc/misc/npm\-disputes\.html\fR, please email
+owner \fIhttps://docs\.npmjs\.com/misc/disputes\fR, please email
support@npmjs\.com and explain the situation\.
.P
Any data published to The npm Registry (including user account
@@ -252,9 +226,6 @@ When you find issues, please report them:
.IP \(bu 2
web:
https://github\.com/npm/npm/issues
-.IP \(bu 2
-email:
-npm\-@googlegroups\.com
.RE
.P
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
new file mode 100644
index 000000000..c7620f9a8
--- /dev/null
+++ b/deps/npm/man/man1/npm-access.1
@@ -0,0 +1,78 @@
+.TH "NPM\-ACCESS" "1" "January 2015" "" ""
+.SH "NAME"
+\fBnpm-access\fR \- Set access level on published packages
+.SH SYNOPSIS
+.P
+.RS 2
+.nf
+npm access public [<package>]
+npm access restricted [<package>]
+
+npm access add <read\-only|read\-write> <entity> [<package>]
+npm access rm <entity> [<package>]
+
+npm access ls [<package>]
+npm access edit [<package>]
+.fi
+.RE
+.SH DESCRIPTION
+.P
+Used to set access controls on private packages\.
+.P
+For all of the subcommands, \fBnpm access\fR will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand\.
+.RS 0
+.IP \(bu 2
+public / restricted:
+Set a package to be either publicly accessible or restricted\.
+.IP \(bu 2
+add / rm:
+Add or remove the ability of users and teams to have read\-only or read\-write
+access to a package\.
+.IP \(bu 2
+ls:
+Show all of the access privileges for a package\. Will only show permissions
+for packages to which you have at least read access\.
+.IP \(bu 2
+edit:
+Set the access privileges for a package at once using \fB$EDITOR\fR\|\.
+
+.RE
+.SH DETAILS
+.P
+\fBnpm access\fR always operates directly on the current registry, configurable
+from the command line using \fB\-\-registry=<registry url>\fR\|\.
+.P
+Unscoped packages are \fIalways public\fR\|\.
+.P
+Scoped packages \fIdefault to restricted\fR, but you can either publish them as
+public using \fBnpm publish \-\-access=public\fR, or set their access as public using
+\fBnpm access public\fR after the initial publish\.
+.P
+You must have privileges to set the access of a package:
+.RS 0
+.IP \(bu 2
+You are an owner of an unscoped or scoped package\.
+.IP \(bu 2
+You are a member of the team that owns a scope\.
+.IP \(bu 2
+You have been given read\-write privileges for a package, either as a member
+of a team or directly as an owner\.
+
+.RE
+.P
+If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+\fB\-\-access=public\fR\|\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
+npm help publish
+.IP \(bu 2
+npm help 7 config
+.IP \(bu 2
+npm help 7 registry
+
+.RE
+
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
index 6b85986e0..b3abf17b6 100644
--- a/deps/npm/man/man1/npm-adduser.1
+++ b/deps/npm/man/man1/npm-adduser.1
@@ -1,4 +1,4 @@
-.TH "NPM\-ADDUSER" "1" "October 2014" "" ""
+.TH "NPM\-ADDUSER" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-adduser\fR \- Add a registry user account
.SH SYNOPSIS
@@ -16,13 +16,14 @@ the default registry will be used (see npm help 7 \fBnpm\-config\fR)\.
.P
The username, password, and email are read in from prompts\.
.P
-You may use this command to change your email address, but not username
-or password\.
+To reset your password, go to https://www\.npmjs\.com/forgot
.P
-To reset your password, go to https://www\.npmjs\.org/forgot
+To change your email address, go to https://www\.npmjs\.com/email\-edit
.P
You may use this command multiple times with the same user account to
-authorize on a new machine\.
+authorize on a new machine\. When authenticating on a new machine,
+the username, password and email address must all match with
+your existing record\.
.P
\fBnpm login\fR is an alias to \fBadduser\fR and behaves exactly the same way\.
.SH CONFIGURATION
@@ -64,7 +65,7 @@ npm adduser \-\-registry=http://private\-registry\.example\.com \-\-always\-auth
.P
This will ensure that all requests to that registry (including for tarballs)
include an authorization header\. See \fBalways\-auth\fR in npm help 7 \fBnpm\-config\fR for more
-details on always\-auth\. Registry\-specific configuaration of \fBalways\-auth\fR takes
+details on always\-auth\. Registry\-specific configuration of \fBalways\-auth\fR takes
precedence over any global configuration\.
.SH SEE ALSO
.RS 0
diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1
index 6552d6cf4..8f0dc2ba5 100644
--- a/deps/npm/man/man1/npm-bin.1
+++ b/deps/npm/man/man1/npm-bin.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BIN" "1" "October 2014" "" ""
+.TH "NPM\-BIN" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-bin\fR \- Display npm bin folder
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index 09c7659c6..5acca82e2 100644
--- a/deps/npm/man/man1/npm-bugs.1
+++ b/deps/npm/man/man1/npm-bugs.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BUGS" "1" "October 2014" "" ""
+.TH "NPM\-BUGS" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-bugs\fR \- Bugs for a package in a web browser maybe
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-build.1 b/deps/npm/man/man1/npm-build.1
index 0f2184292..1179298c5 100644
--- a/deps/npm/man/man1/npm-build.1
+++ b/deps/npm/man/man1/npm-build.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BUILD" "1" "October 2014" "" ""
+.TH "NPM\-BUILD" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-build\fR \- Build a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-bundle.1 b/deps/npm/man/man1/npm-bundle.1
index 0748922da..703c795c9 100644
--- a/deps/npm/man/man1/npm-bundle.1
+++ b/deps/npm/man/man1/npm-bundle.1
@@ -1,4 +1,4 @@
-.TH "NPM\-BUNDLE" "1" "October 2014" "" ""
+.TH "NPM\-BUNDLE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-bundle\fR \- REMOVED
.SH DESCRIPTION
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
index c49015ae6..1cf1d7c71 100644
--- a/deps/npm/man/man1/npm-cache.1
+++ b/deps/npm/man/man1/npm-cache.1
@@ -1,4 +1,4 @@
-.TH "NPM\-CACHE" "1" "October 2014" "" ""
+.TH "NPM\-CACHE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-cache\fR \- Manipulates packages cache
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index a89cc6fd5..4cb064910 100644
--- a/deps/npm/man/man1/npm-completion.1
+++ b/deps/npm/man/man1/npm-completion.1
@@ -1,4 +1,4 @@
-.TH "NPM\-COMPLETION" "1" "October 2014" "" ""
+.TH "NPM\-COMPLETION" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-completion\fR \- Tab Completion for npm
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
index a93ebace7..716303c41 100644
--- a/deps/npm/man/man1/npm-config.1
+++ b/deps/npm/man/man1/npm-config.1
@@ -1,4 +1,4 @@
-.TH "NPM\-CONFIG" "1" "October 2014" "" ""
+.TH "NPM\-CONFIG" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-config\fR \- Manage the npm configuration files
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index 24548077e..743a5d027 100644
--- a/deps/npm/man/man1/npm-dedupe.1
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DEDUPE" "1" "October 2014" "" ""
+.TH "NPM\-DEDUPE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-dedupe\fR \- Reduce duplication
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
index 581a58948..95a8fd251 100644
--- a/deps/npm/man/man1/npm-deprecate.1
+++ b/deps/npm/man/man1/npm-deprecate.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DEPRECATE" "1" "October 2014" "" ""
+.TH "NPM\-DEPRECATE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-deprecate\fR \- Deprecate a version of a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-dist-tag.1 b/deps/npm/man/man1/npm-dist-tag.1
new file mode 100644
index 000000000..2ed9a5a77
--- /dev/null
+++ b/deps/npm/man/man1/npm-dist-tag.1
@@ -0,0 +1,95 @@
+.TH "NPM\-DIST\-TAG" "1" "January 2015" "" ""
+.SH "NAME"
+\fBnpm-dist-tag\fR \- Modify package distribution tags
+.SH SYNOPSIS
+.P
+.RS 2
+.nf
+npm dist\-tag add <pkg>@<version> [<tag>]
+npm dist\-tag rm <pkg> <tag>
+npm dist\-tag ls [<pkg>]
+.fi
+.RE
+.SH DESCRIPTION
+.P
+Add, remove, and enumerate distribution tags on a package:
+.RS 0
+.IP \(bu 2
+add:
+Tags the specified version of the package with the specified tag, or the
+\fB\-\-tag\fR config if not specified\.
+.IP \(bu 2
+rm:
+Clear a tag that is no longer in use from the package\.
+.IP \(bu 2
+ls:
+Show all of the dist\-tags for a package, defaulting to the package in
+the curren prefix\.
+
+.RE
+.P
+A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:
+.P
+.RS 2
+.nf
+npm install <name>@<tag>
+.fi
+.RE
+.P
+When installing dependencies, a preferred tagged version may be specified:
+.P
+.RS 2
+.nf
+npm install \-\-tag <tag>
+.fi
+.RE
+.P
+This also applies to \fBnpm dedupe\fR\|\.
+.P
+Publishing a package always sets the "latest" tag to the published version\.
+.SH PURPOSE
+.P
+Tags can be used to provide an alias instead of version numbers\. For
+example, \fBnpm\fR currently uses the tag "next" to identify the upcoming
+version, and the tag "latest" to identify the current version\.
+.P
+A project might choose to have multiple streams of development, e\.g\.,
+"stable", "canary"\.
+.SH CAVEATS
+.P
+This command used to be known as \fBnpm tag\fR, which only created new tags, and so
+had a different syntax\.
+.P
+Tags must share a namespace with version numbers, because they are specified in
+the same slot: \fBnpm install <pkg>@<version>\fR vs \fBnpm install <pkg>@<tag>\fR\|\.
+.P
+Tags that can be interpreted as valid semver ranges will be rejected\. For
+example, \fBv1\.4\fR cannot be used as a tag, because it is interpreted by semver as
+\fB>=1\.4\.0 <1\.5\.0\fR\|\. See https://github\.com/npm/npm/issues/6082\|\.
+.P
+The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter \fBv\fR\|\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
+npm help tag
+.IP \(bu 2
+npm help publish
+.IP \(bu 2
+npm help install
+.IP \(bu 2
+npm help dedupe
+.IP \(bu 2
+npm help 7 registry
+.IP \(bu 2
+npm help config
+.IP \(bu 2
+npm help 7 config
+.IP \(bu 2
+npm apihelp tag
+.IP \(bu 2
+npm help 5 npmrc
+
+.RE
+
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
index 1e9e5c199..1feecc263 100644
--- a/deps/npm/man/man1/npm-docs.1
+++ b/deps/npm/man/man1/npm-docs.1
@@ -1,4 +1,4 @@
-.TH "NPM\-DOCS" "1" "October 2014" "" ""
+.TH "NPM\-DOCS" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-docs\fR \- Docs for a package in a web browser maybe
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index 8a19d1257..1d905d06b 100644
--- a/deps/npm/man/man1/npm-edit.1
+++ b/deps/npm/man/man1/npm-edit.1
@@ -1,4 +1,4 @@
-.TH "NPM\-EDIT" "1" "October 2014" "" ""
+.TH "NPM\-EDIT" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-edit\fR \- Edit an installed package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
index 0211aef43..5f29171a9 100644
--- a/deps/npm/man/man1/npm-explore.1
+++ b/deps/npm/man/man1/npm-explore.1
@@ -1,4 +1,4 @@
-.TH "NPM\-EXPLORE" "1" "October 2014" "" ""
+.TH "NPM\-EXPLORE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-explore\fR \- Browse an installed package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
index a18a8e97a..524081c93 100644
--- a/deps/npm/man/man1/npm-help-search.1
+++ b/deps/npm/man/man1/npm-help-search.1
@@ -1,4 +1,4 @@
-.TH "NPM\-HELP\-SEARCH" "1" "October 2014" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-help-search\fR \- Search npm help documentation
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
index 556eeb52e..0d7f1af03 100644
--- a/deps/npm/man/man1/npm-help.1
+++ b/deps/npm/man/man1/npm-help.1
@@ -1,4 +1,4 @@
-.TH "NPM\-HELP" "1" "October 2014" "" ""
+.TH "NPM\-HELP" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-help\fR \- Get help on npm
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
index 3d4ed0957..d2b6a298d 100644
--- a/deps/npm/man/man1/npm-init.1
+++ b/deps/npm/man/man1/npm-init.1
@@ -1,4 +1,4 @@
-.TH "NPM\-INIT" "1" "October 2014" "" ""
+.TH "NPM\-INIT" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-init\fR \- Interactively create a package\.json file
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index 0df0197b0..ec355effe 100644
--- a/deps/npm/man/man1/npm-install.1
+++ b/deps/npm/man/man1/npm-install.1
@@ -1,4 +1,4 @@
-.TH "NPM\-INSTALL" "1" "October 2014" "" ""
+.TH "NPM\-INSTALL" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-install\fR \- Install a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 62d76503f..86132ed1d 100644
--- a/deps/npm/man/man1/npm-link.1
+++ b/deps/npm/man/man1/npm-link.1
@@ -1,4 +1,4 @@
-.TH "NPM\-LINK" "1" "October 2014" "" ""
+.TH "NPM\-LINK" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-link\fR \- Symlink a package folder
.SH SYNOPSIS
@@ -25,7 +25,7 @@ Note that \fBpackage\-name\fR is taken from \fBpackage\.json\fR,
not from directory name\.
.P
The package name can be optionally prefixed with a scope\. See npm help 7 \fBnpm\-scope\fR\|\.
-The scope must by preceded by an @\-symbol and followed by a slash\.
+The scope must be preceded by an @\-symbol and followed by a slash\.
.P
When creating tarballs for \fBnpm publish\fR, the linked packages are
"snapshotted" to their current state by resolving the symbolic links\.
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 9cf4823c9..bbdc91666 100644
--- a/deps/npm/man/man1/npm-ls.1
+++ b/deps/npm/man/man1/npm-ls.1
@@ -1,4 +1,4 @@
-.TH "NPM\-LS" "1" "October 2014" "" ""
+.TH "NPM\-LS" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-ls\fR \- List installed packages
.SH SYNOPSIS
@@ -23,7 +23,7 @@ For example, running \fBnpm ls promzard\fR in npm's source tree will show:
.P
.RS 2
.nf
-npm@2.1.6 /path/to/npm
+npm@2.3.0 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.fi
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
index 45433a814..a1086ad32 100644
--- a/deps/npm/man/man1/npm-outdated.1
+++ b/deps/npm/man/man1/npm-outdated.1
@@ -1,4 +1,4 @@
-.TH "NPM\-OUTDATED" "1" "October 2014" "" ""
+.TH "NPM\-OUTDATED" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-outdated\fR \- Check for outdated packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
index 3ed5549f7..1c503795c 100644
--- a/deps/npm/man/man1/npm-owner.1
+++ b/deps/npm/man/man1/npm-owner.1
@@ -1,4 +1,4 @@
-.TH "NPM\-OWNER" "1" "October 2014" "" ""
+.TH "NPM\-OWNER" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-owner\fR \- Manage package owners
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
index 8b9408abb..3b39d6847 100644
--- a/deps/npm/man/man1/npm-pack.1
+++ b/deps/npm/man/man1/npm-pack.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PACK" "1" "October 2014" "" ""
+.TH "NPM\-PACK" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-pack\fR \- Create a tarball from a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index b7bcac639..2ebdaa677 100644
--- a/deps/npm/man/man1/npm-prefix.1
+++ b/deps/npm/man/man1/npm-prefix.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PREFIX" "1" "October 2014" "" ""
+.TH "NPM\-PREFIX" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-prefix\fR \- Display prefix
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
index 1a8cc9521..7b22233d5 100644
--- a/deps/npm/man/man1/npm-prune.1
+++ b/deps/npm/man/man1/npm-prune.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PRUNE" "1" "October 2014" "" ""
+.TH "NPM\-PRUNE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-prune\fR \- Remove extraneous packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1
index 665721028..0df825154 100644
--- a/deps/npm/man/man1/npm-publish.1
+++ b/deps/npm/man/man1/npm-publish.1
@@ -1,4 +1,4 @@
-.TH "NPM\-PUBLISH" "1" "October 2014" "" ""
+.TH "NPM\-PUBLISH" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-publish\fR \- Publish a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index 0e04b9cfb..1bb1e9acb 100644
--- a/deps/npm/man/man1/npm-rebuild.1
+++ b/deps/npm/man/man1/npm-rebuild.1
@@ -1,4 +1,4 @@
-.TH "NPM\-REBUILD" "1" "October 2014" "" ""
+.TH "NPM\-REBUILD" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-rebuild\fR \- Rebuild a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
index dc8428d02..da8d6c9ad 100644
--- a/deps/npm/man/man1/npm-repo.1
+++ b/deps/npm/man/man1/npm-repo.1
@@ -1,4 +1,4 @@
-.TH "NPM\-REPO" "1" "October 2014" "" ""
+.TH "NPM\-REPO" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-repo\fR \- Open package repository page in the browser
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index 234d0aa76..010e81530 100644
--- a/deps/npm/man/man1/npm-restart.1
+++ b/deps/npm/man/man1/npm-restart.1
@@ -1,6 +1,6 @@
-.TH "NPM\-RESTART" "1" "October 2014" "" ""
+.TH "NPM\-RESTART" "1" "January 2015" "" ""
.SH "NAME"
-\fBnpm-restart\fR \- Start a package
+\fBnpm-restart\fR \- Restart a package
.SH SYNOPSIS
.P
.RS 2
@@ -10,8 +10,38 @@ npm restart [\-\- <args>]
.RE
.SH DESCRIPTION
.P
-This runs a package's "restart" script, if one was provided\. Otherwise it runs
-package's "stop" script, if one was provided, and then the "start" script\.
+This restarts a package\.
+.P
+This runs a package's "stop", "restart", and "start" scripts, and associated
+pre\- and post\- scripts, in the order given below:
+.RS 0
+.IP 1. 3
+prerestart
+.IP 2. 3
+prestop
+.IP 3. 3
+stop
+.IP 4. 3
+poststop
+.IP 5. 3
+restart
+.IP 6. 3
+prestart
+.IP 7. 3
+start
+.IP 8. 3
+poststart
+.IP 9. 3
+postrestart
+
+.RE
+.SH NOTE
+.P
+Note that the "restart" script is run \fBin addition to\fR the "stop"
+and "start" scripts, not instead of them\.
+.P
+This is the behavior as of \fBnpm\fR major version 2\. A change in this
+behavior will be accompanied by an increase in major version number
.SH SEE ALSO
.RS 0
.IP \(bu 2
@@ -24,6 +54,8 @@ npm help test
npm help start
.IP \(bu 2
npm help stop
+.IP \(bu 2
+npm apihelp restart
.RE
diff --git a/deps/npm/man/man1/npm-rm.1 b/deps/npm/man/man1/npm-rm.1
index c7f92fb52..94a0afa73 100644
--- a/deps/npm/man/man1/npm-rm.1
+++ b/deps/npm/man/man1/npm-rm.1
@@ -1,4 +1,4 @@
-.TH "NPM\-RM" "1" "October 2014" "" ""
+.TH "NPM\-RM" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-rm\fR \- Remove a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
index f85ebb970..2067f9e55 100644
--- a/deps/npm/man/man1/npm-root.1
+++ b/deps/npm/man/man1/npm-root.1
@@ -1,4 +1,4 @@
-.TH "NPM\-ROOT" "1" "October 2014" "" ""
+.TH "NPM\-ROOT" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-root\fR \- Display npm root
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index 905908a7a..24ff5d958 100644
--- a/deps/npm/man/man1/npm-run-script.1
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -1,4 +1,4 @@
-.TH "NPM\-RUN\-SCRIPT" "1" "October 2014" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-run-script\fR \- Run arbitrary package scripts
.SH SYNOPSIS
@@ -14,10 +14,13 @@ npm run [command] [\-\- <args>]
This runs an arbitrary command from a package's \fB"scripts"\fR object\.
If no package name is provided, it will search for a \fBpackage\.json\fR
in the current folder and use its \fB"scripts"\fR object\. If no \fB"command"\fR
-is provided, it will list the available top level scripts\.
+is provided, it will list the available top level scripts\. The \fBenv\fR command
+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 have
+precedence instead\.
.P
-It is used by the test, start, restart, and stop commands, but can be
-called directly, as well\.
+\fBrun[\-script]\fR is used by the test, start, restart, and stop commands, but can
+be called directly, as well\.
.P
As of \fBnpm@2\.0\.0\fR \fIhttp://blog\.npmjs\.org/post/98131109725/npm\-2\-0\-0\fR, you can
use custom arguments when executing scripts\. The special option \fB\-\-\fR is used by
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index 4ad5a67b8..3f7d19bd8 100644
--- a/deps/npm/man/man1/npm-search.1
+++ b/deps/npm/man/man1/npm-search.1
@@ -1,4 +1,4 @@
-.TH "NPM\-SEARCH" "1" "October 2014" "" ""
+.TH "NPM\-SEARCH" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-search\fR \- Search for packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index fa2b313ab..5fa9fb16e 100644
--- a/deps/npm/man/man1/npm-shrinkwrap.1
+++ b/deps/npm/man/man1/npm-shrinkwrap.1
@@ -1,4 +1,4 @@
-.TH "NPM\-SHRINKWRAP" "1" "October 2014" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-shrinkwrap\fR \- Lock down dependency versions
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
index 8dbc0292a..ced42ecae 100644
--- a/deps/npm/man/man1/npm-star.1
+++ b/deps/npm/man/man1/npm-star.1
@@ -1,4 +1,4 @@
-.TH "NPM\-STAR" "1" "October 2014" "" ""
+.TH "NPM\-STAR" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-star\fR \- Mark your favorite packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
index 1762a0f08..d2124355c 100644
--- a/deps/npm/man/man1/npm-stars.1
+++ b/deps/npm/man/man1/npm-stars.1
@@ -1,4 +1,4 @@
-.TH "NPM\-STARS" "1" "October 2014" "" ""
+.TH "NPM\-STARS" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-stars\fR \- View packages marked as favorites
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
index 0a342ee1f..36f0c26bc 100644
--- a/deps/npm/man/man1/npm-start.1
+++ b/deps/npm/man/man1/npm-start.1
@@ -1,4 +1,4 @@
-.TH "NPM\-START" "1" "October 2014" "" ""
+.TH "NPM\-START" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-start\fR \- Start a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
index 8622d18d9..0a20b4b6d 100644
--- a/deps/npm/man/man1/npm-stop.1
+++ b/deps/npm/man/man1/npm-stop.1
@@ -1,4 +1,4 @@
-.TH "NPM\-STOP" "1" "October 2014" "" ""
+.TH "NPM\-STOP" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-stop\fR \- Stop a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-submodule.1 b/deps/npm/man/man1/npm-submodule.1
index 4999ac64e..71853335c 100644
--- a/deps/npm/man/man1/npm-submodule.1
+++ b/deps/npm/man/man1/npm-submodule.1
@@ -1,35 +1,42 @@
-.TH "NPM\-SUBMODULE" "1" "October 2014" "" ""
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SUBMODULE" "1" "September 2014" "" ""
+.
.SH "NAME"
-\fBnpm-submodule\fR \- Add a package as a git submodule
-.SH SYNOPSIS
-.P
-.RS 2
+\fBnpm-submodule\fR \-\- Add a package as a git submodule
+.
+.SH "SYNOPSIS"
+.
.nf
npm submodule <pkg>
+.
.fi
-.RE
-.SH DESCRIPTION
-.P
+.
+.SH "DESCRIPTION"
If the specified package has a git repository url in its package\.json
-description, then this command will add it as a git submodule at
-\fBnode_modules/<pkg name>\fR\|\.
+description, then this command will add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
+.
.P
-This is a convenience only\. From then on, it's up to you to manage
+This is a convenience only\. From then on, it\'s up to you to manage
updates by using the appropriate git commands\. npm will stubbornly
refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
in it\.
+.
.P
This command also does not install missing dependencies, if the package
does not include them in its git repository\. If \fBnpm ls\fR reports that
things are missing, you can either install, link, or submodule them yourself,
or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
dependencies into the submodule folder\.
-.SH SEE ALSO
-.RS 0
-.IP \(bu 2
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
npm help 5 package\.json
-.IP \(bu 2
+.
+.IP "\(bu" 4
git help submodule
-
-.RE
+.
+.IP "" 0
diff --git a/deps/npm/man/man1/npm-tag.1 b/deps/npm/man/man1/npm-tag.1
index 5aace7508..995ad3990 100644
--- a/deps/npm/man/man1/npm-tag.1
+++ b/deps/npm/man/man1/npm-tag.1
@@ -1,4 +1,4 @@
-.TH "NPM\-TAG" "1" "October 2014" "" ""
+.TH "NPM\-TAG" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-tag\fR \- Tag a published version
.SH SYNOPSIS
@@ -33,6 +33,27 @@ npm install \-\-tag <tag>
This also applies to \fBnpm dedupe\fR\|\.
.P
Publishing a package always sets the "latest" tag to the published version\.
+.SH PURPOSE
+.P
+Tags can be used to provide an alias instead of version numbers\. For
+example, \fBnpm\fR currently uses the tag "next" to identify the upcoming
+version, and the tag "latest" to identify the current version\.
+.P
+A project might choose to have multiple streams of development, e\.g\.,
+"stable", "canary"\.
+.SH CAVEATS
+.P
+Tags must share a namespace with version numbers, because they are
+specified in the same slot: \fBnpm install <pkg>@<version>\fR vs \fBnpm
+install <pkg>@<tag>\fR\|\.
+.P
+Tags that can be interpreted as valid semver ranges will be
+rejected\. For example, \fBv1\.4\fR cannot be used as a tag, because it is
+interpreted by semver as \fB>=1\.4\.0 <1\.5\.0\fR\|\. See
+https://github\.com/npm/npm/issues/6082\|\.
+.P
+The simplest way to avoid semver problems with tags is to use tags
+that do not begin with a number or the letter \fBv\fR\|\.
.SH SEE ALSO
.RS 0
.IP \(bu 2
@@ -48,6 +69,8 @@ npm help config
.IP \(bu 2
npm help 7 config
.IP \(bu 2
+npm apihelp tag
+.IP \(bu 2
npm help 5 npmrc
.RE
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
index 0b4a9f4db..b398e81ea 100644
--- a/deps/npm/man/man1/npm-test.1
+++ b/deps/npm/man/man1/npm-test.1
@@ -1,4 +1,4 @@
-.TH "NPM\-TEST" "1" "October 2014" "" ""
+.TH "NPM\-TEST" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-test\fR \- Test a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
index a56f8bb91..5568b4837 100644
--- a/deps/npm/man/man1/npm-uninstall.1
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -1,4 +1,4 @@
-.TH "NPM\-RM" "1" "October 2014" "" ""
+.TH "NPM\-RM" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-rm\fR \- Remove a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
index 6cb1df726..7f96d4f36 100644
--- a/deps/npm/man/man1/npm-unpublish.1
+++ b/deps/npm/man/man1/npm-unpublish.1
@@ -1,4 +1,4 @@
-.TH "NPM\-UNPUBLISH" "1" "October 2014" "" ""
+.TH "NPM\-UNPUBLISH" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-unpublish\fR \- Remove a package from the registry
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
index 19adfc927..969909482 100644
--- a/deps/npm/man/man1/npm-update.1
+++ b/deps/npm/man/man1/npm-update.1
@@ -1,4 +1,4 @@
-.TH "NPM\-UPDATE" "1" "October 2014" "" ""
+.TH "NPM\-UPDATE" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-update\fR \- Update a package
.SH SYNOPSIS
@@ -13,7 +13,9 @@ npm update [\-g] [<name> [<name> \.\.\.]]
This command will update all the packages listed to the latest version
(specified by the \fBtag\fR config)\.
.P
-It will also install missing packages\.
+It will also install missing packages\. As with all commands that install
+packages, the \fB\-\-dev\fR flag will cause \fBdevDependencies\fR to be processed
+as well\.
.P
If the \fB\-g\fR flag is specified, this command will update globally installed
packages\.
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
index 21fde3452..2ae02d093 100644
--- a/deps/npm/man/man1/npm-version.1
+++ b/deps/npm/man/man1/npm-version.1
@@ -1,4 +1,4 @@
-.TH "NPM\-VERSION" "1" "October 2014" "" ""
+.TH "NPM\-VERSION" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-version\fR \- Bump a package version
.SH SYNOPSIS
@@ -11,7 +11,7 @@ npm version [<newversion> | major | minor | patch | premajor | preminor | prepat
.SH DESCRIPTION
.P
Run this in a package directory to bump the version and write the new
-data back to the package\.json file\.
+data back to \fBpackage\.json\fR and, if present, \fBnpm\-shrinkwrap\.json\fR\|\.
.P
The \fBnewversion\fR argument should be a valid semver string, \fIor\fR a
valid second argument to semver\.inc (one of "patch", "minor", "major",
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
index 35ef04532..0eb7f3118 100644
--- a/deps/npm/man/man1/npm-view.1
+++ b/deps/npm/man/man1/npm-view.1
@@ -1,4 +1,4 @@
-.TH "NPM\-VIEW" "1" "October 2014" "" ""
+.TH "NPM\-VIEW" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-view\fR \- View registry info
.SH SYNOPSIS
@@ -35,7 +35,7 @@ npm view ronn@0\.3\.5 dependencies
.fi
.RE
.P
-You can view child field by separating them with a period\.
+You can view child fields by separating them with a period\.
To view the git repository URL for the latest version of npm, you could
do this:
.P
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
index 34a3f04ac..b993e0c9b 100644
--- a/deps/npm/man/man1/npm-whoami.1
+++ b/deps/npm/man/man1/npm-whoami.1
@@ -1,4 +1,4 @@
-.TH "NPM\-WHOAMI" "1" "October 2014" "" ""
+.TH "NPM\-WHOAMI" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-whoami\fR \- Display npm username
.SH SYNOPSIS
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index a275e4728..7b4465aa2 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,6 +1,6 @@
-.TH "NPM" "1" "October 2014" "" ""
+.TH "NPM" "1" "January 2015" "" ""
.SH "NAME"
-\fBnpm\fR \- node package manager
+\fBnpm\fR \- javascript package manager
.SH SYNOPSIS
.P
.RS 2
@@ -10,7 +10,7 @@ npm <command> [args]
.RE
.SH VERSION
.P
-2.1.6
+2.3.0
.SH DESCRIPTION
.P
npm is the package manager for the Node JavaScript platform\. It puts
diff --git a/deps/npm/man/man3/npm-bin.3 b/deps/npm/man/man3/npm-bin.3
index 4c76b8a0c..27588a240 100644
--- a/deps/npm/man/man3/npm-bin.3
+++ b/deps/npm/man/man3/npm-bin.3
@@ -1,4 +1,4 @@
-.TH "NPM\-BIN" "3" "October 2014" "" ""
+.TH "NPM\-BIN" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-bin\fR \- Display npm bin folder
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-bugs.3 b/deps/npm/man/man3/npm-bugs.3
index cd8dda6ea..6b7503fef 100644
--- a/deps/npm/man/man3/npm-bugs.3
+++ b/deps/npm/man/man3/npm-bugs.3
@@ -1,4 +1,4 @@
-.TH "NPM\-BUGS" "3" "October 2014" "" ""
+.TH "NPM\-BUGS" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-bugs\fR \- Bugs for a package in a web browser maybe
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-cache.3 b/deps/npm/man/man3/npm-cache.3
index 1dccd8fd0..15a2839cc 100644
--- a/deps/npm/man/man3/npm-cache.3
+++ b/deps/npm/man/man3/npm-cache.3
@@ -1,4 +1,4 @@
-.TH "NPM\-CACHE" "3" "October 2014" "" ""
+.TH "NPM\-CACHE" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-cache\fR \- manage the npm cache programmatically
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-commands.3 b/deps/npm/man/man3/npm-commands.3
index 87ad3253b..ee757dfce 100644
--- a/deps/npm/man/man3/npm-commands.3
+++ b/deps/npm/man/man3/npm-commands.3
@@ -1,4 +1,4 @@
-.TH "NPM\-COMMANDS" "3" "October 2014" "" ""
+.TH "NPM\-COMMANDS" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-commands\fR \- npm commands
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-config.3 b/deps/npm/man/man3/npm-config.3
index 763e22525..be2522cb4 100644
--- a/deps/npm/man/man3/npm-config.3
+++ b/deps/npm/man/man3/npm-config.3
@@ -1,4 +1,4 @@
-.TH "NPM\-CONFIG" "3" "October 2014" "" ""
+.TH "NPM\-CONFIG" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-config\fR \- Manage the npm configuration files
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-deprecate.3 b/deps/npm/man/man3/npm-deprecate.3
index 9b543d36d..d04e25d43 100644
--- a/deps/npm/man/man3/npm-deprecate.3
+++ b/deps/npm/man/man3/npm-deprecate.3
@@ -1,4 +1,4 @@
-.TH "NPM\-DEPRECATE" "3" "October 2014" "" ""
+.TH "NPM\-DEPRECATE" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-deprecate\fR \- Deprecate a version of a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-docs.3 b/deps/npm/man/man3/npm-docs.3
index ad93e305b..4dd5a84f7 100644
--- a/deps/npm/man/man3/npm-docs.3
+++ b/deps/npm/man/man3/npm-docs.3
@@ -1,4 +1,4 @@
-.TH "NPM\-DOCS" "3" "October 2014" "" ""
+.TH "NPM\-DOCS" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-docs\fR \- Docs for a package in a web browser maybe
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-edit.3 b/deps/npm/man/man3/npm-edit.3
index 82767c8b7..d7c2ad4f1 100644
--- a/deps/npm/man/man3/npm-edit.3
+++ b/deps/npm/man/man3/npm-edit.3
@@ -1,4 +1,4 @@
-.TH "NPM\-EDIT" "3" "October 2014" "" ""
+.TH "NPM\-EDIT" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-edit\fR \- Edit an installed package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-explore.3 b/deps/npm/man/man3/npm-explore.3
index 54948eadc..8648eac98 100644
--- a/deps/npm/man/man3/npm-explore.3
+++ b/deps/npm/man/man3/npm-explore.3
@@ -1,4 +1,4 @@
-.TH "NPM\-EXPLORE" "3" "October 2014" "" ""
+.TH "NPM\-EXPLORE" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-explore\fR \- Browse an installed package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-help-search.3 b/deps/npm/man/man3/npm-help-search.3
index 8f4f346c2..a9baaf36d 100644
--- a/deps/npm/man/man3/npm-help-search.3
+++ b/deps/npm/man/man3/npm-help-search.3
@@ -1,4 +1,4 @@
-.TH "NPM\-HELP\-SEARCH" "3" "October 2014" "" ""
+.TH "NPM\-HELP\-SEARCH" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-help-search\fR \- Search the help pages
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-init.3 b/deps/npm/man/man3/npm-init.3
index d5da00dd8..9a2ce6bc8 100644
--- a/deps/npm/man/man3/npm-init.3
+++ b/deps/npm/man/man3/npm-init.3
@@ -1,4 +1,4 @@
-.TH "NPM" "" "October 2014" "" ""
+.TH "NPM" "" "January 2015" "" ""
.SH "NAME"
\fBnpm\fR
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-install.3 b/deps/npm/man/man3/npm-install.3
index ec98278ca..511791791 100644
--- a/deps/npm/man/man3/npm-install.3
+++ b/deps/npm/man/man3/npm-install.3
@@ -1,4 +1,4 @@
-.TH "NPM\-INSTALL" "3" "October 2014" "" ""
+.TH "NPM\-INSTALL" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-install\fR \- install a package programmatically
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-link.3 b/deps/npm/man/man3/npm-link.3
index 0c379a48c..2d5bf77c3 100644
--- a/deps/npm/man/man3/npm-link.3
+++ b/deps/npm/man/man3/npm-link.3
@@ -1,4 +1,4 @@
-.TH "NPM\-LINK" "3" "October 2014" "" ""
+.TH "NPM\-LINK" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-link\fR \- Symlink a package folder
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-load.3 b/deps/npm/man/man3/npm-load.3
index 61fac42eb..68787c89b 100644
--- a/deps/npm/man/man3/npm-load.3
+++ b/deps/npm/man/man3/npm-load.3
@@ -1,4 +1,4 @@
-.TH "NPM\-LOAD" "3" "October 2014" "" ""
+.TH "NPM\-LOAD" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-load\fR \- Load config settings
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-ls.3 b/deps/npm/man/man3/npm-ls.3
index 84558abeb..de3d127df 100644
--- a/deps/npm/man/man3/npm-ls.3
+++ b/deps/npm/man/man3/npm-ls.3
@@ -1,4 +1,4 @@
-.TH "NPM\-LS" "3" "October 2014" "" ""
+.TH "NPM\-LS" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-ls\fR \- List installed packages
.SH SYNOPSIS
@@ -63,6 +63,6 @@ List packages in the global install prefix instead of in the current
project\.
.P
Note, if parseable is set or long isn't set, then duplicates will be trimmed\.
-This means that if a submodule a same dependency as a parent module, then the
+This means that if a submodule has the same dependency as a parent module, then the
dependency will only be output once\.
diff --git a/deps/npm/man/man3/npm-outdated.3 b/deps/npm/man/man3/npm-outdated.3
index 2bba8469f..9e96d44ab 100644
--- a/deps/npm/man/man3/npm-outdated.3
+++ b/deps/npm/man/man3/npm-outdated.3
@@ -1,4 +1,4 @@
-.TH "NPM\-OUTDATED" "3" "October 2014" "" ""
+.TH "NPM\-OUTDATED" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-outdated\fR \- Check for outdated packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-owner.3 b/deps/npm/man/man3/npm-owner.3
index 101b752e9..35a993ba8 100644
--- a/deps/npm/man/man3/npm-owner.3
+++ b/deps/npm/man/man3/npm-owner.3
@@ -1,4 +1,4 @@
-.TH "NPM\-OWNER" "3" "October 2014" "" ""
+.TH "NPM\-OWNER" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-owner\fR \- Manage package owners
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-pack.3 b/deps/npm/man/man3/npm-pack.3
index d9da93e33..7d95e5751 100644
--- a/deps/npm/man/man3/npm-pack.3
+++ b/deps/npm/man/man3/npm-pack.3
@@ -1,4 +1,4 @@
-.TH "NPM\-PACK" "3" "October 2014" "" ""
+.TH "NPM\-PACK" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-pack\fR \- Create a tarball from a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-prefix.3 b/deps/npm/man/man3/npm-prefix.3
index e2da6d67e..4aaed71a7 100644
--- a/deps/npm/man/man3/npm-prefix.3
+++ b/deps/npm/man/man3/npm-prefix.3
@@ -1,4 +1,4 @@
-.TH "NPM\-PREFIX" "3" "October 2014" "" ""
+.TH "NPM\-PREFIX" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-prefix\fR \- Display prefix
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-prune.3 b/deps/npm/man/man3/npm-prune.3
index 48a06c97c..310dfe292 100644
--- a/deps/npm/man/man3/npm-prune.3
+++ b/deps/npm/man/man3/npm-prune.3
@@ -1,4 +1,4 @@
-.TH "NPM\-PRUNE" "3" "October 2014" "" ""
+.TH "NPM\-PRUNE" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-prune\fR \- Remove extraneous packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-publish.3 b/deps/npm/man/man3/npm-publish.3
index 13dbd95f3..28f77205c 100644
--- a/deps/npm/man/man3/npm-publish.3
+++ b/deps/npm/man/man3/npm-publish.3
@@ -1,4 +1,4 @@
-.TH "NPM\-PUBLISH" "3" "October 2014" "" ""
+.TH "NPM\-PUBLISH" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-publish\fR \- Publish a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-rebuild.3 b/deps/npm/man/man3/npm-rebuild.3
index 21a5aba1d..082589b5d 100644
--- a/deps/npm/man/man3/npm-rebuild.3
+++ b/deps/npm/man/man3/npm-rebuild.3
@@ -1,4 +1,4 @@
-.TH "NPM\-REBUILD" "3" "October 2014" "" ""
+.TH "NPM\-REBUILD" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-rebuild\fR \- Rebuild a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-repo.3 b/deps/npm/man/man3/npm-repo.3
index 5638d434a..64cc0bad6 100644
--- a/deps/npm/man/man3/npm-repo.3
+++ b/deps/npm/man/man3/npm-repo.3
@@ -1,4 +1,4 @@
-.TH "NPM\-REPO" "3" "October 2014" "" ""
+.TH "NPM\-REPO" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-repo\fR \- Open package repository page in the browser
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-restart.3 b/deps/npm/man/man3/npm-restart.3
index be948334a..2cacefc5b 100644
--- a/deps/npm/man/man3/npm-restart.3
+++ b/deps/npm/man/man3/npm-restart.3
@@ -1,6 +1,6 @@
-.TH "NPM\-RESTART" "3" "October 2014" "" ""
+.TH "NPM\-RESTART" "3" "January 2015" "" ""
.SH "NAME"
-\fBnpm-restart\fR \- Start a package
+\fBnpm-restart\fR \- Restart a package
.SH SYNOPSIS
.P
.RS 2
@@ -10,14 +10,43 @@ npm\.commands\.restart(packages, callback)
.RE
.SH DESCRIPTION
.P
-This runs a package's "restart" script, if one was provided\.
-Otherwise it runs package's "stop" script, if one was provided, and then
-the "start" script\.
+This restarts a package (or multiple packages)\.
+.P
+This runs a package's "stop", "restart", and "start" scripts, and associated
+pre\- and post\- scripts, in the order given below:
+.RS 0
+.IP 1. 3
+prerestart
+.IP 2. 3
+prestop
+.IP 3. 3
+stop
+.IP 4. 3
+poststop
+.IP 5. 3
+restart
+.IP 6. 3
+prestart
+.IP 7. 3
+start
+.IP 8. 3
+poststart
+.IP 9. 3
+postrestart
+
+.RE
.P
If no version is specified, then it restarts the "active" version\.
.P
-npm can run tests on multiple packages\. Just specify multiple packages
-in the \fBpackages\fR parameter\.
+npm can restart multiple packages\. Just specify multiple packages in
+the \fBpackages\fR parameter\.
+.SH NOTE
+.P
+Note that the "restart" script is run \fBin addition to\fR the "stop"
+and "start" scripts, not instead of them\.
+.P
+This is the behavior as of \fBnpm\fR major version 2\. A change in this
+behavior will be accompanied by an increase in major version number
.SH SEE ALSO
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man3/npm-root.3 b/deps/npm/man/man3/npm-root.3
index 68bac79fa..15d5230d1 100644
--- a/deps/npm/man/man3/npm-root.3
+++ b/deps/npm/man/man3/npm-root.3
@@ -1,4 +1,4 @@
-.TH "NPM\-ROOT" "3" "October 2014" "" ""
+.TH "NPM\-ROOT" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-root\fR \- Display npm root
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-run-script.3 b/deps/npm/man/man3/npm-run-script.3
index 866f1e01f..59bf90d96 100644
--- a/deps/npm/man/man3/npm-run-script.3
+++ b/deps/npm/man/man3/npm-run-script.3
@@ -1,4 +1,4 @@
-.TH "NPM\-RUN\-SCRIPT" "3" "October 2014" "" ""
+.TH "NPM\-RUN\-SCRIPT" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-run-script\fR \- Run arbitrary package scripts
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-search.3 b/deps/npm/man/man3/npm-search.3
index ba0cc5f4c..4fffa3bd9 100644
--- a/deps/npm/man/man3/npm-search.3
+++ b/deps/npm/man/man3/npm-search.3
@@ -1,4 +1,4 @@
-.TH "NPM\-SEARCH" "3" "October 2014" "" ""
+.TH "NPM\-SEARCH" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-search\fR \- Search for packages
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-shrinkwrap.3 b/deps/npm/man/man3/npm-shrinkwrap.3
index 0f87c5090..92ce7b1b2 100644
--- a/deps/npm/man/man3/npm-shrinkwrap.3
+++ b/deps/npm/man/man3/npm-shrinkwrap.3
@@ -1,4 +1,4 @@
-.TH "NPM\-SHRINKWRAP" "3" "October 2014" "" ""
+.TH "NPM\-SHRINKWRAP" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-shrinkwrap\fR \- programmatically generate package shrinkwrap file
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-start.3 b/deps/npm/man/man3/npm-start.3
index 4eabb36c4..f3330a588 100644
--- a/deps/npm/man/man3/npm-start.3
+++ b/deps/npm/man/man3/npm-start.3
@@ -1,4 +1,4 @@
-.TH "NPM\-START" "3" "October 2014" "" ""
+.TH "NPM\-START" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-start\fR \- Start a package
.SH SYNOPSIS
@@ -12,6 +12,6 @@ npm\.commands\.start(packages, callback)
.P
This runs a package's "start" script, if one was provided\.
.P
-npm can run tests on multiple packages\. Just specify multiple packages
-in the \fBpackages\fR parameter\.
+npm can start multiple packages\. Just specify multiple packages in the
+\fBpackages\fR parameter\.
diff --git a/deps/npm/man/man3/npm-stop.3 b/deps/npm/man/man3/npm-stop.3
index aa55b8473..551eedbc1 100644
--- a/deps/npm/man/man3/npm-stop.3
+++ b/deps/npm/man/man3/npm-stop.3
@@ -1,4 +1,4 @@
-.TH "NPM\-STOP" "3" "October 2014" "" ""
+.TH "NPM\-STOP" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-stop\fR \- Stop a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-submodule.3 b/deps/npm/man/man3/npm-submodule.3
index 378862a56..95739ce3b 100644
--- a/deps/npm/man/man3/npm-submodule.3
+++ b/deps/npm/man/man3/npm-submodule.3
@@ -1,35 +1,42 @@
-.TH "NPM\-SUBMODULE" "3" "October 2014" "" ""
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SUBMODULE" "3" "September 2014" "" ""
+.
.SH "NAME"
-\fBnpm-submodule\fR \- Add a package as a git submodule
-.SH SYNOPSIS
-.P
-.RS 2
+\fBnpm-submodule\fR \-\- Add a package as a git submodule
+.
+.SH "SYNOPSIS"
+.
.nf
npm\.commands\.submodule(packages, callback)
+.
.fi
-.RE
-.SH DESCRIPTION
-.P
+.
+.SH "DESCRIPTION"
For each package specified, npm will check if it has a git repository url
-in its package\.json description then add it as a git submodule at
-\fBnode_modules/<pkg name>\fR\|\.
+in its package\.json description then add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
+.
.P
-This is a convenience only\. From then on, it's up to you to manage
+This is a convenience only\. From then on, it\'s up to you to manage
updates by using the appropriate git commands\. npm will stubbornly
refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
in it\.
+.
.P
This command also does not install missing dependencies, if the package
does not include them in its git repository\. If \fBnpm ls\fR reports that
things are missing, you can either install, link, or submodule them yourself,
or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
dependencies into the submodule folder\.
-.SH SEE ALSO
-.RS 0
-.IP \(bu 2
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
npm help json
-.IP \(bu 2
+.
+.IP "\(bu" 4
git help submodule
-
-.RE
+.
+.IP "" 0
diff --git a/deps/npm/man/man3/npm-tag.3 b/deps/npm/man/man3/npm-tag.3
index 4da13767f..c0092c274 100644
--- a/deps/npm/man/man3/npm-tag.3
+++ b/deps/npm/man/man3/npm-tag.3
@@ -1,4 +1,4 @@
-.TH "NPM\-TAG" "3" "October 2014" "" ""
+.TH "NPM\-TAG" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-tag\fR \- Tag a published version
.SH SYNOPSIS
@@ -21,7 +21,7 @@ is the package name and version is the version number (much like installing a
specific version)\.
.P
The second element is the name of the tag to tag this version with\. If this
-parameter is missing or falsey (empty), the default froom the config will be
+parameter is missing or falsey (empty), the default from the config will be
used\. For more information about how to set this config, check
\fBman 3 npm\-config\fR for programmatic usage or \fBman npm\-config\fR for cli usage\.
diff --git a/deps/npm/man/man3/npm-test.3 b/deps/npm/man/man3/npm-test.3
index f6d0f6d3f..ff969ec02 100644
--- a/deps/npm/man/man3/npm-test.3
+++ b/deps/npm/man/man3/npm-test.3
@@ -1,4 +1,4 @@
-.TH "NPM\-TEST" "3" "October 2014" "" ""
+.TH "NPM\-TEST" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-test\fR \- Test a package
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-uninstall.3 b/deps/npm/man/man3/npm-uninstall.3
index 8505f3995..0cf637ca2 100644
--- a/deps/npm/man/man3/npm-uninstall.3
+++ b/deps/npm/man/man3/npm-uninstall.3
@@ -1,4 +1,4 @@
-.TH "NPM\-UNINSTALL" "3" "October 2014" "" ""
+.TH "NPM\-UNINSTALL" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-uninstall\fR \- uninstall a package programmatically
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-unpublish.3 b/deps/npm/man/man3/npm-unpublish.3
index 9b4ab467d..48f865db1 100644
--- a/deps/npm/man/man3/npm-unpublish.3
+++ b/deps/npm/man/man3/npm-unpublish.3
@@ -1,4 +1,4 @@
-.TH "NPM\-UNPUBLISH" "3" "October 2014" "" ""
+.TH "NPM\-UNPUBLISH" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-unpublish\fR \- Remove a package from the registry
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-update.3 b/deps/npm/man/man3/npm-update.3
index 3f40eb0db..eee573b2d 100644
--- a/deps/npm/man/man3/npm-update.3
+++ b/deps/npm/man/man3/npm-update.3
@@ -1,4 +1,4 @@
-.TH "NPM\-UPDATE" "3" "October 2014" "" ""
+.TH "NPM\-UPDATE" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-update\fR \- Update a package
.SH SYNOPSIS
@@ -8,7 +8,7 @@
npm\.commands\.update(packages, callback)
.fi
.RE
-.TH "DESCRIPTION" "" "October 2014" "" ""
+.TH "DESCRIPTION" "" "January 2015" "" ""
.SH "NAME"
\fBDESCRIPTION\fR
.P
diff --git a/deps/npm/man/man3/npm-version.3 b/deps/npm/man/man3/npm-version.3
index 16979247f..2cf7fe215 100644
--- a/deps/npm/man/man3/npm-version.3
+++ b/deps/npm/man/man3/npm-version.3
@@ -1,4 +1,4 @@
-.TH "NPM\-VERSION" "3" "October 2014" "" ""
+.TH "NPM\-VERSION" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-version\fR \- Bump a package version
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-view.3 b/deps/npm/man/man3/npm-view.3
index e49f28d7e..42bbf40c5 100644
--- a/deps/npm/man/man3/npm-view.3
+++ b/deps/npm/man/man3/npm-view.3
@@ -1,4 +1,4 @@
-.TH "NPM\-VIEW" "3" "October 2014" "" ""
+.TH "NPM\-VIEW" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-view\fR \- View registry info
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm-whoami.3 b/deps/npm/man/man3/npm-whoami.3
index 2d32507f5..cb320ec46 100644
--- a/deps/npm/man/man3/npm-whoami.3
+++ b/deps/npm/man/man3/npm-whoami.3
@@ -1,4 +1,4 @@
-.TH "NPM\-WHOAMI" "3" "October 2014" "" ""
+.TH "NPM\-WHOAMI" "3" "January 2015" "" ""
.SH "NAME"
\fBnpm-whoami\fR \- Display npm username
.SH SYNOPSIS
diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3
index 71bbc58ad..1bd3f3890 100644
--- a/deps/npm/man/man3/npm.3
+++ b/deps/npm/man/man3/npm.3
@@ -1,6 +1,6 @@
-.TH "NPM" "3" "October 2014" "" ""
+.TH "NPM" "3" "January 2015" "" ""
.SH "NAME"
-\fBnpm\fR \- node package manager
+\fBnpm\fR \- javascript package manager
.SH SYNOPSIS
.P
.RS 2
@@ -20,7 +20,7 @@ npm\.load([configObject, ]function (er, npm) {
.RE
.SH VERSION
.P
-2.1.6
+2.3.0
.SH DESCRIPTION
.P
This is the API documentation for npm\.
diff --git a/deps/npm/man/man5/npm-folders.5 b/deps/npm/man/man5/npm-folders.5
index 9cd3436f8..2ae88d142 100644
--- a/deps/npm/man/man5/npm-folders.5
+++ b/deps/npm/man/man5/npm-folders.5
@@ -1,4 +1,4 @@
-.TH "NPM\-FOLDERS" "5" "October 2014" "" ""
+.TH "NPM\-FOLDERS" "5" "January 2015" "" ""
.SH "NAME"
\fBnpm-folders\fR \- Folder Structures Used by npm
.SH DESCRIPTION
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
index 9cd3436f8..2ae88d142 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,4 +1,4 @@
-.TH "NPM\-FOLDERS" "5" "October 2014" "" ""
+.TH "NPM\-FOLDERS" "5" "January 2015" "" ""
.SH "NAME"
\fBnpm-folders\fR \- Folder Structures Used by npm
.SH DESCRIPTION
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index fa9ef95c4..d54eaddbe 100644
--- a/deps/npm/man/man5/npm-json.5
+++ b/deps/npm/man/man5/npm-json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE\.JSON" "5" "October 2014" "" ""
+.TH "PACKAGE\.JSON" "5" "January 2015" "" ""
.SH "NAME"
\fBpackage.json\fR \- Specifics of npm's package\.json handling
.SH DESCRIPTION
@@ -31,7 +31,7 @@ The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive\.
.IP \(bu 2
You may want to check the npm registry to see if there's something by that name
-already, before you get too attached to it\. http://registry\.npmjs\.org/
+already, before you get too attached to it\. https://www\.npmjs\.com/
.RE
.P
@@ -164,16 +164,16 @@ command name to local file name\. On install, npm will symlink that file into
\fBprefix/bin\fR for global installs, or \fB\|\./node_modules/\.bin/\fR for local
installs\.
.P
-For example, npm has this:
+For example, myapp could have this:
.P
.RS 2
.nf
-{ "bin" : { "npm" : "\./cli\.js" } }
+{ "bin" : { "myapp" : "\./cli\.js" } }
.fi
.RE
.P
-So, when you install npm, it'll create a symlink from the \fBcli\.js\fR script to
-\fB/usr/local/bin/npm\fR\|\.
+So, when you install myapp, it'll create a symlink from the \fBcli\.js\fR script to
+\fB/usr/local/bin/myapp\fR\|\.
.P
If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string\. For example:
@@ -279,7 +279,7 @@ Put example scripts in here\. Someday, it might be exposed in some clever way\.
.SH repository
.P
Specify the place where your code lives\. This is helpful for people who
-want to contribute\. If the git repo is on github, then the \fBnpm docs\fR
+want to contribute\. If the git repo is on GitHub, then the \fBnpm docs\fR
command will be able to find you\.
.P
Do it like this:
@@ -421,7 +421,9 @@ The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
.SH GitHub URLs
.P
-As of version 1\.1\.65, you can refer to GitHub urls as just "foo": "user/foo\-project"\. For example:
+As of version 1\.1\.65, you can refer to GitHub urls as just "foo":
+"user/foo\-project"\. Just as with git URLs, a \fBcommit\-ish\fR suffix can be
+included\. For example:
.P
.RS 2
.nf
@@ -429,7 +431,8 @@ As of version 1\.1\.65, you can refer to GitHub urls as just "foo": "user/foo\-p
"name": "foo",
"version": "0\.0\.0",
"dependencies": {
- "express": "visionmedia/express"
+ "express": "visionmedia/express",
+ "mocha": "visionmedia/mocha#4727d357ea"
}
}
.fi
@@ -510,7 +513,7 @@ run this script as well, so that you can test it easily\.
.P
In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a \fBrequire\fR of this host\.
-This is usually refered to as a \fIplugin\fR\|\. Notably, your module may be exposing
+This is usually referred to as a \fIplugin\fR\|\. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation\.
.P
For example:
diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5
index d2846869a..fc2986b90 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,4 +1,4 @@
-.TH "NPMRC" "5" "October 2014" "" ""
+.TH "NPMRC" "5" "January 2015" "" ""
.SH "NAME"
\fBnpmrc\fR \- The npm config files
.SH DESCRIPTION
@@ -38,6 +38,16 @@ prefix = ${HOME}/\.npm\-packages
Each of these files is loaded, and config options are resolved in
priority order\. For example, a setting in the userconfig file would
override the setting in the globalconfig file\.
+.P
+Array values are specified by adding "[]" after the key name\. For
+example:
+.P
+.RS 2
+.nf
+key[] = "first value"
+key[] = "second value"
+.fi
+.RE
.SS Per\-project config file
.P
When working locally in a project, a \fB\|\.npmrc\fR file in the root of the
diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5
index fa9ef95c4..d54eaddbe 100644
--- a/deps/npm/man/man5/package.json.5
+++ b/deps/npm/man/man5/package.json.5
@@ -1,4 +1,4 @@
-.TH "PACKAGE\.JSON" "5" "October 2014" "" ""
+.TH "PACKAGE\.JSON" "5" "January 2015" "" ""
.SH "NAME"
\fBpackage.json\fR \- Specifics of npm's package\.json handling
.SH DESCRIPTION
@@ -31,7 +31,7 @@ The name will probably be passed as an argument to require(), so it should
be something short, but also reasonably descriptive\.
.IP \(bu 2
You may want to check the npm registry to see if there's something by that name
-already, before you get too attached to it\. http://registry\.npmjs\.org/
+already, before you get too attached to it\. https://www\.npmjs\.com/
.RE
.P
@@ -164,16 +164,16 @@ command name to local file name\. On install, npm will symlink that file into
\fBprefix/bin\fR for global installs, or \fB\|\./node_modules/\.bin/\fR for local
installs\.
.P
-For example, npm has this:
+For example, myapp could have this:
.P
.RS 2
.nf
-{ "bin" : { "npm" : "\./cli\.js" } }
+{ "bin" : { "myapp" : "\./cli\.js" } }
.fi
.RE
.P
-So, when you install npm, it'll create a symlink from the \fBcli\.js\fR script to
-\fB/usr/local/bin/npm\fR\|\.
+So, when you install myapp, it'll create a symlink from the \fBcli\.js\fR script to
+\fB/usr/local/bin/myapp\fR\|\.
.P
If you have a single executable, and its name should be the name
of the package, then you can just supply it as a string\. For example:
@@ -279,7 +279,7 @@ Put example scripts in here\. Someday, it might be exposed in some clever way\.
.SH repository
.P
Specify the place where your code lives\. This is helpful for people who
-want to contribute\. If the git repo is on github, then the \fBnpm docs\fR
+want to contribute\. If the git repo is on GitHub, then the \fBnpm docs\fR
command will be able to find you\.
.P
Do it like this:
@@ -421,7 +421,9 @@ The \fBcommit\-ish\fR can be any tag, sha, or branch which can be supplied as
an argument to \fBgit checkout\fR\|\. The default is \fBmaster\fR\|\.
.SH GitHub URLs
.P
-As of version 1\.1\.65, you can refer to GitHub urls as just "foo": "user/foo\-project"\. For example:
+As of version 1\.1\.65, you can refer to GitHub urls as just "foo":
+"user/foo\-project"\. Just as with git URLs, a \fBcommit\-ish\fR suffix can be
+included\. For example:
.P
.RS 2
.nf
@@ -429,7 +431,8 @@ As of version 1\.1\.65, you can refer to GitHub urls as just "foo": "user/foo\-p
"name": "foo",
"version": "0\.0\.0",
"dependencies": {
- "express": "visionmedia/express"
+ "express": "visionmedia/express",
+ "mocha": "visionmedia/mocha#4727d357ea"
}
}
.fi
@@ -510,7 +513,7 @@ run this script as well, so that you can test it easily\.
.P
In some cases, you want to express the compatibility of your package with an
host tool or library, while not necessarily doing a \fBrequire\fR of this host\.
-This is usually refered to as a \fIplugin\fR\|\. Notably, your module may be exposing
+This is usually referred to as a \fIplugin\fR\|\. Notably, your module may be exposing
a specific interface, expected and specified by the host documentation\.
.P
For example:
diff --git a/deps/npm/man/man7/npm-coding-style.7 b/deps/npm/man/man7/npm-coding-style.7
index 0dc15318a..ebaf0386c 100644
--- a/deps/npm/man/man7/npm-coding-style.7
+++ b/deps/npm/man/man7/npm-coding-style.7
@@ -1,4 +1,4 @@
-.TH "NPM\-CODING\-STYLE" "7" "October 2014" "" ""
+.TH "NPM\-CODING\-STYLE" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-coding-style\fR \- npm's "funny" coding style
.SH DESCRIPTION
@@ -10,7 +10,7 @@ designed to reduce visual clutter and make bugs more apparent\.
If you want to contribute to npm (which is very encouraged), you should
make your code conform to npm's style\.
.P
-Note: this concerns npm's code not the specific packages at npmjs\.org
+Note: this concerns npm's code not the specific packages that you can download from the npm registry\.
.SH Line Length
.P
Keep lines shorter than 80 characters\. It's better for lines to be
@@ -19,7 +19,7 @@ statements onto multiple lines\.
.SH Indentation
.P
Two\-spaces\. Tabs are better, but they look like hell in web browsers
-(and on github), and node uses 2 spaces, so that's that\.
+(and on GitHub), and node uses 2 spaces, so that's that\.
.P
Configure your editor appropriately\.
.SH Curly braces
diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7
index e3b4c5c6f..b76ec439c 100644
--- a/deps/npm/man/man7/npm-config.7
+++ b/deps/npm/man/man7/npm-config.7
@@ -1,4 +1,4 @@
-.TH "NPM\-CONFIG" "7" "October 2014" "" ""
+.TH "NPM\-CONFIG" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-config\fR \- More than you probably want to know about npm configuration
.SH DESCRIPTION
@@ -192,16 +192,32 @@ The browser that is called by the \fBnpm docs\fR command to open websites\.
.IP \(bu 2
Default: The npm CA certificate
.IP \(bu 2
-Type: String or null
+Type: String, Array or null
.RE
.P
The Certificate Authority signing certificate that is trusted for SSL
-connections to the registry\.
+connections to the registry\. Values should be in PEM format with newlines
+replaced by the string "\\n"\. For example:
+.P
+.RS 2
+.nf
+ca="\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\-\\nXXXX\\nXXXX\\n\-\-\-\-\-END CERTIFICATE\-\-\-\-\-"
+.fi
+.RE
.P
Set to \fBnull\fR to only allow "known" registrars, or to a specific CA cert
to trust only that specific signing authority\.
.P
+Multiple CAs can be trusted by specifying an array of certificates:
+.P
+.RS 2
+.nf
+ca[]="\.\.\."
+ca[]="\.\.\."
+.fi
+.RE
+.P
See also the \fBstrict\-ssl\fR config\.
.SS cafile
.RS 0
@@ -504,14 +520,15 @@ The string that starts all the debugging log output\.
.SS https\-proxy
.RS 0
.IP \(bu 2
-Default: the \fBHTTPS_PROXY\fR or \fBhttps_proxy\fR or \fBHTTP_PROXY\fR or
-\fBhttp_proxy\fR environment variables\.
+Default: null
.IP \(bu 2
Type: url
.RE
.P
-A proxy to use for outgoing https requests\.
+A proxy to use for outgoing https requests\. If the \fBHTTPS_PROXY\fR or
+\fBhttps_proxy\fR or \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variables are set,
+proxy settings will be honored by the underlying \fBrequest\fR library\.
.SS ignore\-scripts
.RS 0
.IP \(bu 2
@@ -801,13 +818,15 @@ this as true\.
.SS proxy
.RS 0
.IP \(bu 2
-Default: \fBHTTP_PROXY\fR or \fBhttp_proxy\fR environment variable, or null
+Default: null
.IP \(bu 2
Type: url
.RE
.P
-A proxy to use for outgoing http requests\.
+A proxy to use for outgoing http requests\. If the \fBHTTP_PROXY\fR or
+\fBhttp_proxy\fR environment variables are set, proxy settings will be
+honored by the underlying \fBrequest\fR library\.
.SS rebuild\-bundle
.RS 0
.IP \(bu 2
@@ -1122,7 +1141,7 @@ The location of user\-level configuration settings\.
.IP \(bu 2
Default: 022
.IP \(bu 2
-Type: Octal numeric string
+Type: Octal numeric string in range 0000\.\.0777 (0\.\.511)
.RE
.P
diff --git a/deps/npm/man/man7/npm-developers.7 b/deps/npm/man/man7/npm-developers.7
index bf8edb29f..ba47e45fa 100644
--- a/deps/npm/man/man7/npm-developers.7
+++ b/deps/npm/man/man7/npm-developers.7
@@ -1,4 +1,4 @@
-.TH "NPM\-DEVELOPERS" "7" "October 2014" "" ""
+.TH "NPM\-DEVELOPERS" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-developers\fR \- Developer Guide
.SH DESCRIPTION
@@ -112,6 +112,20 @@ ignore the stuff matched by the \fB\|\.gitignore\fR file\. If you \fIwant\fR to
include something that is excluded by your \fB\|\.gitignore\fR file, you can
create an empty \fB\|\.npmignore\fR file to override it\.
.P
+\fB\|\.npmignore\fR files follow the same pattern rules \fIhttp://git\-scm\.com/book/en/v2/Git\-Basics\-Recording\-Changes\-to\-the\-Repository#Ignoring\-Files\fR
+as \fB\|\.gitignore\fR files:
+.RS 0
+.IP \(bu 2
+Blank lines or lines starting with \fB#\fR are ignored\.
+.IP \(bu 2
+Standard glob patterns work\.
+.IP \(bu 2
+You can end patterns with a forward slash \fB/\fR to specify a directory\.
+.IP \(bu 2
+You can negate a pattern by starting it with an exclamation point \fB!\fR\|\.
+
+.RE
+.P
By default, the following paths and files are ignored, so there's no
need to add them to \fB\|\.npmignore\fR explicitly:
.RS 0
diff --git a/deps/npm/man/man7/npm-disputes.7 b/deps/npm/man/man7/npm-disputes.7
index 9cf7009f6..3d6793398 100644
--- a/deps/npm/man/man7/npm-disputes.7
+++ b/deps/npm/man/man7/npm-disputes.7
@@ -1,4 +1,4 @@
-.TH "NPM\-DISPUTES" "7" "October 2014" "" ""
+.TH "NPM\-DISPUTES" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-disputes\fR \- Handling Module Name Disputes
.SH SYNOPSIS
diff --git a/deps/npm/man/man7/npm-faq.7 b/deps/npm/man/man7/npm-faq.7
index 563509a87..cf6a37cfd 100644
--- a/deps/npm/man/man7/npm-faq.7
+++ b/deps/npm/man/man7/npm-faq.7
@@ -1,9 +1,9 @@
-.TH "NPM\-FAQ" "7" "October 2014" "" ""
+.TH "NPM\-FAQ" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-faq\fR \- Frequently Asked Questions
.SH Where can I find these docs in HTML?
.P
-https://www\.npmjs\.org/doc/, or run:
+https://docs\.npmjs\.com/, or run:
.P
.RS 2
.nf
@@ -80,7 +80,7 @@ Usually, no\. Allow npm to resolve dependencies for your packages\.
For packages you \fBdeploy\fR, such as websites and apps,
you should use npm shrinkwrap to lock down your full dependency tree:
.P
-https://www\.npmjs\.org/doc/cli/npm\-shrinkwrap\.html
+https://docs\.npmjs\.com/cli/shrinkwrap
.P
If you are paranoid about depending on the npm ecosystem,
you should run a private npm mirror or a private cache\.
@@ -148,7 +148,7 @@ In those cases, you can do this:
.P
.RS 2
.nf
-curl https://www\.npmjs\.org/install\.sh | sh
+curl https://www\.npmjs\.com/install\.sh | sh
.fi
.RE
.SH What is a \fBpackage\fR?
@@ -332,7 +332,7 @@ See npm help \fBnpm\-link\fR
See npm help 7 \fBnpm\-registry\fR\|\.
.SH I forgot my password, and can't publish\. How do I reset it?
.P
-Go to https://npmjs\.org/forgot\|\.
+Go to https://npmjs\.com/forgot\|\.
.SH I get ECONNREFUSED a lot\. What's up?
.P
Either the registry is down, or node's DNS isn't able to reach out\.
@@ -350,20 +350,48 @@ You can also often get a faster response by visiting the #npm channel
on Freenode IRC\.
.SH Why no namespaces?
.P
-Please see this discussion: https://github\.com/npm/npm/issues/798
+npm has only one global namespace\. If you want to namespace your own packages,
+you may: simply use the \fB\-\fR character to separate the names\. npm is a mostly
+anarchic system\. There is not sufficient need to impose namespace rules on
+everyone\.
.P
-tl;dr \- It doesn't actually make things better, and can make them worse\.
+As of 2\.0, npm supports scoped packages, which allow you to publish a group of
+related modules without worrying about name collisions\.
.P
-If you want to namespace your own packages, you may: simply use the
-\fB\-\fR character to separate the names\. npm is a mostly anarchic system\.
-There is not sufficient need to impose namespace rules on everyone\.
+Every npm user owns the scope associated with their username\. For example, the
+user named \fBnpm\fR owns the scope \fB@npm\fR\|\. Scoped packages are published inside a
+scope by naming them as if they were files under the scope directory, e\.g\., by
+setting \fBname\fR in \fBpackage\.json\fR to \fB@npm/npm\fR\|\.
+.P
+Scoped packages can coexist with public npm packages in a private npm registry\.
+At present (2014\-11\-04) scoped packages may NOT be published to the public npm
+registry\.
+.P
+Unscoped packages can only depend on other unscoped packages\. Scoped packages
+can depend on packages from their own scope, a different scope, or the public
+registry (unscoped)\.
+.P
+For the current documentation of scoped packages, see
+https://docs\.npmjs\.com/misc/scope
+.P
+References:
+.RS 0
+.IP 1. 3
+For the reasoning behind the "one global namespace", please see this
+discussion: https://github\.com/npm/npm/issues/798 (TL;DR: It doesn't
+actually make things better, and can make them worse\.)
+.IP 2. 3
+For the pre\-implementation discussion of the scoped package feature, see
+this discussion: https://github\.com/npm/npm/issues/5239
+
+.RE
.SH Who does npm?
.P
npm was originally written by Isaac Z\. Schlueter, and many others have
contributed to it, some of them quite substantially\.
.P
The npm open source project, The npm Registry, and the community
-website \fIhttps://www\.npmjs\.org\fR are maintained and operated by the
+website \fIhttps://www\.npmjs\.com\fR are maintained and operated by the
good folks at npm, Inc\. \fIhttp://www\.npmjs\.com\fR
.SH I have a question or request not addressed here\. Where should I put it?
.P
diff --git a/deps/npm/man/man7/npm-index.7 b/deps/npm/man/man7/npm-index.7
index 442815a2e..b3608b577 100644
--- a/deps/npm/man/man7/npm-index.7
+++ b/deps/npm/man/man7/npm-index.7
@@ -1,15 +1,15 @@
-.TH "NPM\-INDEX" "7" "October 2014" "" ""
+.TH "NPM\-INDEX" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-index\fR \- Index of all npm documentation
.SS npm help README
.P
-node package manager
+a JavaScript package manager
.SH Command Line Documentation
.P
Using npm on the command line
.SS npm help npm
.P
-node package manager
+javascript package manager
.SS npm help adduser
.P
Add a registry user account
@@ -93,7 +93,7 @@ Rebuild a package
Open package repository page in the browser
.SS npm help restart
.P
-Start a package
+Restart a package
.SS npm help rm
.P
Remove a package
@@ -150,7 +150,7 @@ Display npm username
Using npm in your Node programs
.SS npm apihelp npm
.P
-node package manager
+javascript package manager
.SS npm apihelp bin
.P
Display npm bin folder
@@ -222,7 +222,7 @@ Rebuild a package
Open package repository page in the browser
.SS npm apihelp restart
.P
-Start a package
+Restart a package
.SS npm apihelp root
.P
Display npm root
diff --git a/deps/npm/man/man7/npm-registry.7 b/deps/npm/man/man7/npm-registry.7
index 9de209d46..f89b94507 100644
--- a/deps/npm/man/man7/npm-registry.7
+++ b/deps/npm/man/man7/npm-registry.7
@@ -1,4 +1,4 @@
-.TH "NPM\-REGISTRY" "7" "October 2014" "" ""
+.TH "NPM\-REGISTRY" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-registry\fR \- The JavaScript Package Registry
.SH DESCRIPTION
@@ -52,7 +52,7 @@ No, but it's way easier\. Basically, yes, you do, or you have to
effectively implement the entire CouchDB API anyway\.
.SH Is there a website or something to see package docs and such?
.P
-Yes, head over to https://npmjs\.org/
+Yes, head over to https://npmjs\.com/
.SH SEE ALSO
.RS 0
.IP \(bu 2
diff --git a/deps/npm/man/man7/npm-scope.7 b/deps/npm/man/man7/npm-scope.7
index f876e4eaa..2cae9e88c 100644
--- a/deps/npm/man/man7/npm-scope.7
+++ b/deps/npm/man/man7/npm-scope.7
@@ -1,4 +1,4 @@
-.TH "NPM\-SCOPE" "7" "October 2014" "" ""
+.TH "NPM\-SCOPE" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-scope\fR \- Scoped packages
.SH DESCRIPTION
diff --git a/deps/npm/man/man7/npm-scripts.7 b/deps/npm/man/man7/npm-scripts.7
index 9d11f4626..69d880d34 100644
--- a/deps/npm/man/man7/npm-scripts.7
+++ b/deps/npm/man/man7/npm-scripts.7
@@ -1,4 +1,4 @@
-.TH "NPM\-SCRIPTS" "7" "October 2014" "" ""
+.TH "NPM\-SCRIPTS" "7" "January 2015" "" ""
.SH "NAME"
\fBnpm-scripts\fR \- How npm handles the "scripts" field
.SH DESCRIPTION
@@ -26,12 +26,6 @@ Run BEFORE the package is uninstalled\.
postuninstall:
Run AFTER the package is uninstalled\.
.IP \(bu 2
-preupdate:
-Run BEFORE the package is updated with the update command\.
-.IP \(bu 2
-update, postupdate:
-Run AFTER the package is updated with the update command\.
-.IP \(bu 2
pretest, test, posttest:
Run by the \fBnpm test\fR command\.
.IP \(bu 2
diff --git a/deps/npm/man/man7/removing-npm.7 b/deps/npm/man/man7/removing-npm.7
index b0a4fca5d..73963fe3b 100644
--- a/deps/npm/man/man7/removing-npm.7
+++ b/deps/npm/man/man7/removing-npm.7
@@ -1,4 +1,4 @@
-.TH "NPM\-REMOVAL" "1" "October 2014" "" ""
+.TH "NPM\-REMOVAL" "1" "January 2015" "" ""
.SH "NAME"
\fBnpm-removal\fR \- Cleaning the Slate
.SH SYNOPSIS
diff --git a/deps/npm/man/man7/semver.7 b/deps/npm/man/man7/semver.7
index a6be932b4..bf239f7e6 100644
--- a/deps/npm/man/man7/semver.7
+++ b/deps/npm/man/man7/semver.7
@@ -1,4 +1,4 @@
-.TH "SEMVER" "7" "October 2014" "" ""
+.TH "SEMVER" "7" "January 2015" "" ""
.SH "NAME"
\fBsemver\fR \- The semantic versioner for npm
.SH Usage
@@ -22,12 +22,12 @@ As a command\-line utility:
.nf
$ semver \-h
-Usage: semver <version> [<version> [\.\.\.]] [\-r <range> | \-i <inc> | \-d <dec>]
+Usage: semver <version> [<version> [\.\.\.]] [\-r <range> | \-i <inc> | \-\-preid <identifier> | \-l | \-rv]
Test if version(s) satisfy the supplied range(s), and sort them\.
Multiple versions or ranges may be supplied, unless increment
-or decrement options are specified\. In that case, only a single
-version may be used, and it is incremented by the specified level
+option is specified\. In that case, only a single version may
+be used, and it is incremented by the specified level
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions\.
@@ -112,6 +112,35 @@ alpha/beta/rc versions\. By including a prerelease tag in the range,
the user is indicating that they are aware of the risk\. However, it
is still not appropriate to assume that they have opted into taking a
similar risk on the \fInext\fR set of prerelease versions\.
+.SS Prerelease Identifiers
+.P
+The method \fB\|\.inc\fR takes an additional \fBidentifier\fR string argument that
+will append the value of the string as a prerelease identifier:
+.P
+.RS 2
+.nf
+> semver\.inc('1\.2\.3', 'pre', 'beta')
+\|'1\.2\.4\-beta\.0'
+.fi
+.RE
+.P
+command\-line example:
+.P
+.RS 2
+.nf
+$ semver 1\.2\.3 \-i prerelease \-\-preid beta
+1\.2\.4\-beta\.0
+.fi
+.RE
+.P
+Which then can be used to increment further:
+.P
+.RS 2
+.nf
+$ semver 1\.2\.4\-beta\.0 \-i prerelease
+1\.2\.4\-beta\.1
+.fi
+.RE
.SS Advanced Range Syntax
.P
Advanced range syntax desugars to primitive comparators in
@@ -197,8 +226,6 @@ equal to \fBbeta\.2\fR\|\. So, \fB1\.2\.3\-beta\.4\fR would be allowed, but
different \fB[major, minor, patch]\fR tuple\.
.RE
-.P
-Note: this is the same as the \fB~>\fR operator in rubygems\.
.SS Caret Ranges \fB^1\.2\.3\fR \fB^0\.2\.5\fR \fB^0\.0\.4\fR
.P
Allows changes that do not modify the left\-most non\-zero digit in the
@@ -313,6 +340,10 @@ invalid comparison string is provided\.
.IP \(bu 2
\fBrcompare(v1, v2)\fR: The reverse of compare\. Sorts an array of versions
in descending order when passed to \fBArray\.sort()\fR\|\.
+.IP \(bu 2
+\fBdiff(v1, v2)\fR: Returns difference between two versions by the release type
+(\fBmajor\fR, \fBpremajor\fR, \fBminor\fR, \fBpreminor\fR, \fBpatch\fR, \fBprepatch\fR, or \fBprerelease\fR),
+or null if the versions are the same\.
.RE
.SS Ranges
diff --git a/deps/npm/node_modules/columnify/index.js b/deps/npm/node_modules/columnify/index.js
index c44b8ca8f..8c15c993e 100644
--- a/deps/npm/node_modules/columnify/index.js
+++ b/deps/npm/node_modules/columnify/index.js
@@ -9,6 +9,14 @@ var splitIntoLines = utils.splitIntoLines
var splitLongWords = utils.splitLongWords
var truncateString = utils.truncateString
+var DEFAULT_HEADING_TRANSFORM = function(key) {
+ return key.toUpperCase()
+}
+
+var DEFAULT_DATA_TRANSFORM = function(cell, column, index) {
+ return cell
+}
+
var DEFAULTS = {
maxWidth: Infinity,
minWidth: 0,
@@ -18,12 +26,8 @@ var DEFAULTS = {
preserveNewLines: false,
paddingChr: ' ',
showHeaders: true,
- headingTransform: function(key) {
- return key.toUpperCase()
- },
- dataTransform: function(cell, column, index) {
- return cell
- }
+ headingTransform: DEFAULT_HEADING_TRANSFORM,
+ dataTransform: DEFAULT_DATA_TRANSFORM
}
module.exports = function(items, options) {
@@ -68,9 +72,11 @@ module.exports = function(items, options) {
// sanitize column settings
columnNames.forEach(function(columnName) {
var column = columns[columnName]
+ column.name = columnName
column.maxWidth = Math.ceil(column.maxWidth)
column.minWidth = Math.ceil(column.minWidth)
column.truncate = !!column.truncate
+ column.align = column.align || 'left'
})
// sanitize data
@@ -96,7 +102,18 @@ module.exports = function(items, options) {
columnNames.forEach(function(columnName) {
var column = columns[columnName]
items = items.map(function(item, index) {
- item[columnName] = column.dataTransform(item[columnName], column, index)
+ var col = Object.create(column)
+ item[columnName] = column.dataTransform(item[columnName], col, index)
+
+ var changedKeys = Object.keys(col)
+ // disable default heading transform if we wrote to column.name
+ if (changedKeys.indexOf('name') !== -1) {
+ if (column.headingTransform !== DEFAULT_HEADING_TRANSFORM) return
+ column.headingTransform = function(heading) {return heading}
+ }
+ changedKeys.forEach(function(key) {
+ column[key] = col[key]
+ })
return item
})
})
@@ -106,7 +123,7 @@ module.exports = function(items, options) {
if(options.showHeaders) {
columnNames.forEach(function(columnName) {
var column = columns[columnName]
- headers[columnName] = column.headingTransform(columnName)
+ headers[columnName] = column.headingTransform(column.name)
})
items.unshift(headers)
}
@@ -194,8 +211,8 @@ function createRows(items, columns, columnNames, paddingChr) {
columnNames.forEach(function(columnName) {
var column = columns[columnName]
var val = item[columnName][i] || '' // || '' ensures empty columns get padded
- if (column.align == 'right') row[i].push(padLeft(val, column.width, paddingChr))
- else if (column.align == 'center') row[i].push(padCenter(val, column.width, paddingChr))
+ if (column.align === 'right') row[i].push(padLeft(val, column.width, paddingChr))
+ else if (column.align === 'center' || column.align === 'centre') row[i].push(padCenter(val, column.width, paddingChr))
else row[i].push(padRight(val, column.width, paddingChr))
})
}
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/cli.js b/deps/npm/node_modules/columnify/node_modules/strip-ansi/cli.js
index 602ae00e8..5b9546aab 100755
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/cli.js
+++ b/deps/npm/node_modules/columnify/node_modules/strip-ansi/cli.js
@@ -2,38 +2,46 @@
'use strict';
var fs = require('fs');
var pkg = require('./package.json');
-var strip = require('./');
-var input = process.argv[2];
+var stripAnsi = require('./');
+var argv = process.argv.slice(2);
+var input = argv[0];
function help() {
console.log([
- pkg.description,
'',
- 'Usage',
- ' $ strip-ansi <input-file> > <output-file>',
- ' $ cat <input-file> | strip-ansi > <output-file>',
+ ' ' + pkg.description,
'',
- 'Example',
- ' $ strip-ansi unicorn.txt > unicorn-stripped.txt'
+ ' Usage',
+ ' strip-ansi <input-file> > <output-file>',
+ ' cat <input-file> | strip-ansi > <output-file>',
+ '',
+ ' Example',
+ ' strip-ansi unicorn.txt > unicorn-stripped.txt'
].join('\n'));
}
-if (process.argv.indexOf('--help') !== -1) {
+function init(data) {
+ process.stdout.write(stripAnsi(data));
+}
+
+if (argv.indexOf('--help') !== -1) {
help();
return;
}
-if (process.argv.indexOf('--version') !== -1) {
+if (argv.indexOf('--version') !== -1) {
console.log(pkg.version);
return;
}
-if (input) {
- process.stdout.write(strip(fs.readFileSync(input, 'utf8')));
- return;
-}
+if (process.stdin.isTTY) {
+ if (!input) {
+ help();
+ return;
+ }
-process.stdin.setEncoding('utf8');
-process.stdin.on('data', function (data) {
- process.stdout.write(strip(data));
-});
+ init(fs.readFileSync(input, 'utf8'));
+} else {
+ process.stdin.setEncoding('utf8');
+ process.stdin.on('data', init);
+}
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/index.js b/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/index.js
index 783c5c7bb..2fcdd1e47 100644
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/index.js
+++ b/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/index.js
@@ -1,4 +1,4 @@
'use strict';
module.exports = function () {
- return /\u001b\[(?:[0-9]{1,3}(?:;[0-9]{1,3})*)?[m|K]/g;
+ return /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/g;
};
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/package.json b/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/package.json
index ca610250c..ab8ea0388 100644
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/package.json
+++ b/deps/npm/node_modules/columnify/node_modules/strip-ansi/node_modules/ansi-regex/package.json
@@ -1,6 +1,6 @@
{
"name": "ansi-regex",
- "version": "0.2.1",
+ "version": "1.1.0",
"description": "Regular expression for matching ANSI escape codes",
"license": "MIT",
"repository": {
@@ -16,7 +16,8 @@
"node": ">=0.10.0"
},
"scripts": {
- "test": "mocha"
+ "test": "mocha test/test.js",
+ "view-supported": "node test/viewCodes.js"
},
"files": [
"index.js"
@@ -55,9 +56,9 @@
"url": "https://github.com/sindresorhus/ansi-regex/issues"
},
"homepage": "https://github.com/sindresorhus/ansi-regex",
- "_id": "ansi-regex@0.2.1",
- "_shasum": "0d8e946967a3d8143f93e24e298525fc1b2235f9",
- "_from": "ansi-regex@0.2.1",
+ "_id": "ansi-regex@1.1.0",
+ "_shasum": "67792c5d6ad05c792d6cd6057ac8f5e69ebf4357",
+ "_from": "ansi-regex@>=1.0.0 <2.0.0",
"_npmVersion": "1.4.9",
"_npmUser": {
"name": "sindresorhus",
@@ -67,12 +68,17 @@
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
+ },
+ {
+ "name": "jbnicolai",
+ "email": "jappelman@xebia.com"
}
],
"dist": {
- "shasum": "0d8e946967a3d8143f93e24e298525fc1b2235f9",
- "tarball": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ "shasum": "67792c5d6ad05c792d6cd6057ac8f5e69ebf4357",
+ "tarball": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz"
+ "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json b/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json
index 64c4dee52..89d1041bd 100644
--- a/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json
+++ b/deps/npm/node_modules/columnify/node_modules/strip-ansi/package.json
@@ -1,11 +1,8 @@
{
"name": "strip-ansi",
- "version": "1.0.0",
+ "version": "2.0.0",
"description": "Strip ANSI escape codes",
"license": "MIT",
- "bin": {
- "strip-ansi": "cli.js"
- },
"repository": {
"type": "git",
"url": "git://github.com/sindresorhus/strip-ansi"
@@ -15,6 +12,9 @@
"email": "sindresorhus@gmail.com",
"url": "http://sindresorhus.com"
},
+ "bin": {
+ "strip-ansi": "cli.js"
+ },
"engines": {
"node": ">=0.10.0"
},
@@ -51,19 +51,19 @@
"text"
],
"dependencies": {
- "ansi-regex": "^0.2.1"
+ "ansi-regex": "^1.0.0"
},
"devDependencies": {
"mocha": "*"
},
- "gitHead": "6fea2ef935f1ba10d43e4c4d9814af328803935c",
+ "gitHead": "c5e780acc07532f5d651cfb6ea035198095c6c74",
"bugs": {
"url": "https://github.com/sindresorhus/strip-ansi/issues"
},
"homepage": "https://github.com/sindresorhus/strip-ansi",
- "_id": "strip-ansi@1.0.0",
- "_shasum": "6c021321d6ece161a3c608fbab268c7328901c73",
- "_from": "strip-ansi@>=1.0.0-0 <2.0.0-0",
+ "_id": "strip-ansi@2.0.0",
+ "_shasum": "fa8d69432e97674746f55f51d076ae78b18df13f",
+ "_from": "strip-ansi@>=2.0.0 <3.0.0",
"_npmVersion": "1.4.14",
"_npmUser": {
"name": "sindresorhus",
@@ -80,9 +80,10 @@
}
],
"dist": {
- "shasum": "6c021321d6ece161a3c608fbab268c7328901c73",
- "tarball": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-1.0.0.tgz"
+ "shasum": "fa8d69432e97674746f55f51d076ae78b18df13f",
+ "tarball": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-1.0.0.tgz"
+ "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/README.md b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/README.md
index 527743b60..d7231cfca 100644
--- a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/README.md
+++ b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/README.md
@@ -21,7 +21,7 @@ var clone = require('clone');
var a, b;
-a = { foo: { bar: 'baz' } }; // inital value of a
+a = { foo: { bar: 'baz' } }; // initial value of a
b = clone(a); // clone a -> b
a.foo.bar = 'foo'; // change a
@@ -52,7 +52,7 @@ can clone dates in arrays in objects, for example.
Call `clone` with `circular` set to `false` if you are certain that `obj`
contains no circular references. This will give better performance if needed.
There is no error if `undefined` or `null` is passed as `obj`.
- * `depth` -- depth to wich the object is to be cloned (optional,
+ * `depth` -- depth to which the object is to be cloned (optional,
defaults to infinity)
`clone.clonePrototype(obj)`
diff --git a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/clone.js b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/clone.js
index 5d402073b..f8fa3159a 100644
--- a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/clone.js
+++ b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/clone.js
@@ -72,6 +72,7 @@ function clone(parent, circular, depth, prototype) {
return parent;
var child;
+ var proto;
if (typeof parent != 'object') {
return parent;
}
@@ -88,8 +89,14 @@ function clone(parent, circular, depth, prototype) {
parent.copy(child);
return child;
} else {
- if (typeof prototype == 'undefined') child = Object.create(Object.getPrototypeOf(parent));
- else child = Object.create(prototype);
+ if (typeof prototype == 'undefined') {
+ proto = Object.getPrototypeOf(parent);
+ child = Object.create(proto);
+ }
+ else {
+ child = Object.create(prototype);
+ proto = prototype;
+ }
}
if (circular) {
@@ -103,6 +110,14 @@ function clone(parent, circular, depth, prototype) {
}
for (var i in parent) {
+ var attrs;
+ if (proto) {
+ attrs = Object.getOwnPropertyDescriptor(proto, i);
+ }
+
+ if (attrs && attrs.set == null) {
+ continue;
+ }
child[i] = _clone(parent[i], depth - 1);
}
diff --git a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/package.json b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/package.json
index 3c6b77647..dc56f3f19 100644
--- a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/package.json
+++ b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/package.json
@@ -8,7 +8,7 @@
"function",
"date"
],
- "version": "0.1.18",
+ "version": "0.1.19",
"repository": {
"type": "git",
"url": "git://github.com/pvorb/node-clone.git"
@@ -81,6 +81,11 @@
{
"name": "Nathan Zadoks",
"url": "https://github.com/nathan7"
+ },
+ {
+ "name": "Róbert Oroszi",
+ "email": "robert+gh@oroszi.net",
+ "url": "https://github.com/oroce"
}
],
"license": "MIT",
@@ -96,11 +101,11 @@
"scripts": {
"test": "nodeunit test.js"
},
- "gitHead": "17eea36140d61d97a9954c53417d0e04a00525d9",
+ "gitHead": "bb11a43363a0f69e8ac014cb5376ce215ea1f8fd",
"homepage": "https://github.com/pvorb/node-clone",
- "_id": "clone@0.1.18",
- "_shasum": "64a0d5d57eaa85a1a8af380cd1db8c7b3a895f66",
- "_from": "clone@>=0.1.5-0 <0.2.0-0",
+ "_id": "clone@0.1.19",
+ "_shasum": "613fb68639b26a494ac53253e15b1a6bd88ada85",
+ "_from": "clone@>=0.1.5 <0.2.0",
"_npmVersion": "1.4.14",
"_npmUser": {
"name": "pvorb",
@@ -113,9 +118,10 @@
}
],
"dist": {
- "shasum": "64a0d5d57eaa85a1a8af380cd1db8c7b3a895f66",
- "tarball": "http://registry.npmjs.org/clone/-/clone-0.1.18.tgz"
+ "shasum": "613fb68639b26a494ac53253e15b1a6bd88ada85",
+ "tarball": "http://registry.npmjs.org/clone/-/clone-0.1.19.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/clone/-/clone-0.1.18.tgz"
+ "_resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/test.js b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/test.js
index ee49ad893..cb3d16631 100644
--- a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/test.js
+++ b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone/test.js
@@ -269,3 +269,21 @@ exports['clone object with null children'] = function(test) {
test.deepEqual(b, a);
test.done();
}
+
+exports['clone instance with getter'] = function(test) {
+ test.expect(1);
+ function Ctor() {};
+ Object.defineProperty(Ctor.prototype, 'prop', {
+ configurable: true,
+ enumerable: true,
+ get: function() {
+ return 'value';
+ }
+ });
+
+ var a = new Ctor();
+ var b = clone(a);
+
+ test.strictEqual(b.prop, 'value');
+ test.done();
+}; \ No newline at end of file
diff --git a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/package.json b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/package.json
index f9243a120..e3ee62191 100644
--- a/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/package.json
+++ b/deps/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/package.json
@@ -45,6 +45,10 @@
],
"directories": {},
"_shasum": "3ae25f44416c6c01f9809a25fcdd285912d2a6b1",
- "_from": "defaults@>=1.0.0-0 <2.0.0-0",
- "_resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.0.tgz"
+ "_resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.0.tgz",
+ "_from": "defaults@>=1.0.0 <2.0.0",
+ "bugs": {
+ "url": "https://github.com/tmpvar/defaults/issues"
+ },
+ "homepage": "https://github.com/tmpvar/defaults"
}
diff --git a/deps/npm/node_modules/columnify/node_modules/wcwidth/package.json b/deps/npm/node_modules/columnify/node_modules/wcwidth/package.json
index f12d49b78..4744d9dc3 100644
--- a/deps/npm/node_modules/columnify/node_modules/wcwidth/package.json
+++ b/deps/npm/node_modules/columnify/node_modules/wcwidth/package.json
@@ -40,7 +40,7 @@
"gitHead": "5bc3aafd45c89f233c27b9479c18a23ca91ba660",
"_id": "wcwidth@1.0.0",
"_shasum": "02d059ff7a8fc741e0f6b5da1e69b2b40daeca6f",
- "_from": "wcwidth@>=1.0.0-0 <2.0.0-0",
+ "_from": "wcwidth@>=1.0.0 <2.0.0",
"_npmVersion": "1.4.23",
"_npmUser": {
"name": "timoxley",
diff --git a/deps/npm/node_modules/columnify/package.json b/deps/npm/node_modules/columnify/package.json
index ef307b509..c60e1d9de 100644
--- a/deps/npm/node_modules/columnify/package.json
+++ b/deps/npm/node_modules/columnify/package.json
@@ -1,20 +1,21 @@
{
"name": "columnify",
- "version": "1.2.1",
- "description": "Render data in text columns, supports in-column text-wrap.",
+ "version": "1.3.2",
+ "description": "Render data in text columns. supports in-column text-wrap.",
"main": "index.js",
"scripts": {
"pretest": "npm prune",
- "test": "faucet"
+ "test": "tape test/*.js | tap-spec",
+ "bench": "npm test && node bench"
},
"author": {
"name": "Tim Oxley"
},
"license": "MIT",
"devDependencies": {
- "chalk": "^0.4.0",
- "faucet": "0.0.1",
- "tape": "~2.12.3"
+ "chalk": "^0.5.1",
+ "tap-spec": "^2.1.1",
+ "tape": "^3.0.3"
},
"repository": {
"type": "git",
@@ -34,17 +35,18 @@
},
"homepage": "https://github.com/timoxley/columnify",
"dependencies": {
- "strip-ansi": "^1.0.0",
+ "strip-ansi": "^2.0.0",
"wcwidth": "^1.0.0"
},
"directories": {
"test": "test"
},
- "gitHead": "14e77bef3f57acaa3f390145915a9f2d2a4f882c",
- "_id": "columnify@1.2.1",
- "_shasum": "921ec51c178f4126d3c07e9acecd67a55c7953e4",
- "_from": "columnify@>=1.2.1-0 <2.0.0-0",
- "_npmVersion": "1.4.23",
+ "gitHead": "5c7d4363a8d6178f0d415e8bdaf692281fe71975",
+ "_id": "columnify@1.3.2",
+ "_shasum": "61bd578a9269ae6fd949ce36fff589f3702c7867",
+ "_from": "columnify@>=1.3.2 <1.4.0",
+ "_npmVersion": "2.1.10",
+ "_nodeVersion": "0.10.33",
"_npmUser": {
"name": "timoxley",
"email": "secoif@gmail.com"
@@ -56,8 +58,8 @@
}
],
"dist": {
- "shasum": "921ec51c178f4126d3c07e9acecd67a55c7953e4",
- "tarball": "http://registry.npmjs.org/columnify/-/columnify-1.2.1.tgz"
+ "shasum": "61bd578a9269ae6fd949ce36fff589f3702c7867",
+ "tarball": "http://registry.npmjs.org/columnify/-/columnify-1.3.2.tgz"
},
- "_resolved": "https://registry.npmjs.org/columnify/-/columnify-1.2.1.tgz"
+ "_resolved": "https://registry.npmjs.org/columnify/-/columnify-1.3.2.tgz"
}
diff --git a/deps/npm/node_modules/fs-vacuum/package.json b/deps/npm/node_modules/fs-vacuum/package.json
index 140536797..559b7bf2b 100644
--- a/deps/npm/node_modules/fs-vacuum/package.json
+++ b/deps/npm/node_modules/fs-vacuum/package.json
@@ -1,6 +1,6 @@
{
"name": "fs-vacuum",
- "version": "1.2.1",
+ "version": "1.2.5",
"description": "recursively remove empty directories -- to a point",
"main": "vacuum.js",
"scripts": {
@@ -27,16 +27,17 @@
"devDependencies": {
"mkdirp": "^0.5.0",
"tap": "^0.4.11",
- "tmp": "0.0.23"
+ "tmp": "0.0.24"
},
"dependencies": {
"graceful-fs": "^3.0.2",
+ "path-is-inside": "^1.0.1",
"rimraf": "^2.2.8"
},
"readme": "# fs-vacuum\n\nRemove the empty branches of a directory tree, optionally up to (but not\nincluding) a specified base directory. Optionally nukes the leaf directory.\n\n## Usage\n\n```javascript\nvar logger = require(\"npmlog\");\nvar vacuum = require(\"fs-vacuum\");\n\nvar options = {\n base : \"/path/to/my/tree/root\",\n purge : true,\n log : logger.silly.bind(logger, \"myCleanup\")\n};\n\n/* Assuming there are no other files or directories in \"out\", \"to\", or \"my\",\n * the final path will just be \"/path/to/my/tree/root\".\n */\nvacuum(\"/path/to/my/tree/root/out/to/my/files\", function (error) {\n if (error) console.error(\"Unable to cleanly vacuum:\", error.message);\n});\n```\n# vacuum(directory, options, callback)\n\n* `directory` {String} Leaf node to remove. **Must be a directory, symlink, or file.**\n* `options` {Object}\n * `base` {String} No directories at or above this level of the filesystem will be removed.\n * `purge` {Boolean} If set, nuke the whole leaf directory, including its contents.\n * `log` {Function} A logging function that takes `npmlog`-compatible argument lists.\n* `callback` {Function} Function to call once vacuuming is complete.\n * `error` {Error} What went wrong along the way, if anything.\n",
"readmeFilename": "README.md",
- "gitHead": "bad24b21c45d86b3da991f2c3d058ef03546d83e",
- "_id": "fs-vacuum@1.2.1",
- "_shasum": "1bc3c62da30d6272569b8b9089c9811abb0a600b",
- "_from": "fs-vacuum@>=1.2.1-0 <1.3.0-0"
+ "gitHead": "4911a38a65b6a6cb19fc980d18304e1cfca91fbf",
+ "_id": "fs-vacuum@1.2.5",
+ "_shasum": "a5cbaa844b4b3a7cff139f3cc90e7f7007e5fbb8",
+ "_from": "fs-vacuum@~1.2.5"
}
diff --git a/deps/npm/node_modules/fs-vacuum/vacuum.js b/deps/npm/node_modules/fs-vacuum/vacuum.js
index f706a4be6..e55abe970 100644
--- a/deps/npm/node_modules/fs-vacuum/vacuum.js
+++ b/deps/npm/node_modules/fs-vacuum/vacuum.js
@@ -1,6 +1,7 @@
-var assert = require("assert")
-var dirname = require("path").dirname
-var resolve = require("path").resolve
+var assert = require("assert")
+var dirname = require("path").dirname
+var resolve = require("path").resolve
+var isInside = require("path-is-inside")
var rimraf = require("rimraf")
var lstat = require("graceful-fs").lstat
@@ -19,9 +20,10 @@ function vacuum(leaf, options, cb) {
var log = options.log ? options.log : function () {}
- var base = options.base
- if (base && resolve(leaf).indexOf(resolve(base)) !== 0) {
- return cb(new Error(resolve(leaf) + " is not a child of " + resolve(base)))
+ leaf = leaf && resolve(leaf)
+ var base = options.base && resolve(options.base)
+ if (base && !isInside(leaf, base)) {
+ return cb(new Error(leaf + " is not a child of " + base))
}
lstat(leaf, function (error, stat) {
@@ -59,8 +61,9 @@ function vacuum(leaf, options, cb) {
})
function next(branch) {
+ branch = branch && resolve(branch)
// either we've reached the base or we've reached the root
- if ((base && resolve(branch) === resolve(base)) || branch === dirname(branch)) {
+ if ((base && branch === base) || branch === dirname(branch)) {
log("finished vacuuming up to", branch)
return cb(null)
}
@@ -90,7 +93,14 @@ function vacuum(leaf, options, cb) {
var remove = stat.isDirectory() ? rmdir : unlink
remove(branch, function (error) {
if (error) {
- if (error.code === "ENOENT") return cb(null)
+ if (error.code === "ENOENT") {
+ log("quitting because lost the race to remove", branch)
+ return cb(null)
+ }
+ if (error.code === "ENOTEMPTY") {
+ log("quitting because new (racy) entries in", branch)
+ return cb(null)
+ }
log("unable to remove", branch, "due to", error.message)
return cb(error)
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 29e508673..161b82564 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
@@ -6,7 +6,7 @@
},
"name": "fstream-ignore",
"description": "A thing for ignoring files based on globs",
- "version": "1.0.1",
+ "version": "1.0.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-ignore.git"
@@ -18,7 +18,7 @@
"dependencies": {
"fstream": "^1.0.0",
"inherits": "2",
- "minimatch": "^1.0.0"
+ "minimatch": "^2.0.1"
},
"devDependencies": {
"tap": "",
@@ -26,15 +26,16 @@
"mkdirp": ""
},
"license": "ISC",
- "gitHead": "290f2b621fa4f8fe3eec97307d22527fa2065375",
+ "gitHead": "20363d39660671c0de746bd07a0d07de7090d085",
"bugs": {
"url": "https://github.com/isaacs/fstream-ignore/issues"
},
"homepage": "https://github.com/isaacs/fstream-ignore",
- "_id": "fstream-ignore@1.0.1",
- "_shasum": "153df36c4fa2cb006fb915dc71ac9d75f6a17c82",
+ "_id": "fstream-ignore@1.0.2",
+ "_shasum": "18c891db01b782a74a7bff936a0f24997741c7ab",
"_from": "fstream-ignore@>=1.0.0 <2.0.0",
- "_npmVersion": "1.4.22",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.16",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -46,10 +47,9 @@
}
],
"dist": {
- "shasum": "153df36c4fa2cb006fb915dc71ac9d75f6a17c82",
- "tarball": "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.1.tgz"
+ "shasum": "18c891db01b782a74a7bff936a0f24997741c7ab",
+ "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.1.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz"
}
diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json
index e7de77086..6b2ccc99d 100644
--- a/deps/npm/node_modules/fstream-npm/package.json
+++ b/deps/npm/node_modules/fstream-npm/package.json
@@ -25,7 +25,7 @@
"_id": "fstream-npm@1.0.1",
"scripts": {},
"_shasum": "1e35c77f0fa24f5d6367e6d447ae7d6ddb482db2",
- "_from": "fstream-npm@>=1.0.1 <1.1.0",
+ "_from": "fstream-npm@1.0.1",
"_npmVersion": "2.1.3",
"_nodeVersion": "0.10.31",
"_npmUser": {
diff --git a/deps/npm/node_modules/fstream/examples/filter-pipe.js b/deps/npm/node_modules/fstream/examples/filter-pipe.js
index c6b55b3e0..983649bb9 100644
--- a/deps/npm/node_modules/fstream/examples/filter-pipe.js
+++ b/deps/npm/node_modules/fstream/examples/filter-pipe.js
@@ -4,8 +4,8 @@ var path = require("path")
var r = fstream.Reader({ path: path.dirname(__dirname)
, filter: function () {
return !this.basename.match(/^\./) &&
- !this.basename.match(/^node_modules$/)
- !this.basename.match(/^deep-copy$/)
+ !this.basename.match(/^node_modules$/) &&
+ !this.basename.match(/^deep-copy$/) &&
!this.basename.match(/^filter-copy$/)
}
})
diff --git a/deps/npm/node_modules/fstream/examples/pipe.js b/deps/npm/node_modules/fstream/examples/pipe.js
index 648ec8493..0bad122f9 100644
--- a/deps/npm/node_modules/fstream/examples/pipe.js
+++ b/deps/npm/node_modules/fstream/examples/pipe.js
@@ -4,7 +4,7 @@ var path = require("path")
var r = fstream.Reader({ path: path.dirname(__dirname)
, filter: function () {
return !this.basename.match(/^\./) &&
- !this.basename.match(/^node_modules$/)
+ !this.basename.match(/^node_modules$/) &&
!this.basename.match(/^deep-copy$/)
}
})
diff --git a/deps/npm/node_modules/fstream/examples/reader.js b/deps/npm/node_modules/fstream/examples/reader.js
index 9aa1a9538..3787ae376 100644
--- a/deps/npm/node_modules/fstream/examples/reader.js
+++ b/deps/npm/node_modules/fstream/examples/reader.js
@@ -2,13 +2,12 @@ var fstream = require("../fstream.js")
var tap = require("tap")
var fs = require("fs")
var path = require("path")
-var children = -1
var dir = path.dirname(__dirname)
-var gotReady = false
-var ended = false
-
tap.test("reader test", function (t) {
+ var children = -1
+ var gotReady = false
+ var ended = false
var r = fstream.Reader({ path: dir
, filter: function () {
@@ -52,3 +51,18 @@ tap.test("reader test", function (t) {
})
})
+
+tap.test("reader error test", function (t) {
+ // assumes non-root on a *nix system
+ var r = fstream.Reader({ path: '/etc/shadow' })
+
+ r.once("error", function (er) {
+ t.ok(true);
+ t.end()
+ })
+
+ r.on("end", function () {
+ t.fail("reader ended without error");
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/fstream/lib/file-reader.js b/deps/npm/node_modules/fstream/lib/file-reader.js
index b1f986183..4720cd86a 100644
--- a/deps/npm/node_modules/fstream/lib/file-reader.js
+++ b/deps/npm/node_modules/fstream/lib/file-reader.js
@@ -80,6 +80,10 @@ FileReader.prototype._getStream = function () {
}
})
+ stream.on("error", function (e) {
+ me.emit("error", e);
+ });
+
me._read()
}
diff --git a/deps/npm/node_modules/fstream/package.json b/deps/npm/node_modules/fstream/package.json
index d0ac58243..f920c1003 100644
--- a/deps/npm/node_modules/fstream/package.json
+++ b/deps/npm/node_modules/fstream/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream",
"description": "Advanced file system stream things",
- "version": "1.0.2",
+ "version": "1.0.3",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream.git"
@@ -28,30 +28,14 @@
"test": "tap examples/*.js"
},
"license": "BSD",
- "gitHead": "b3b74e92ef4a91ae206fab90b7998c7cd2e4290d",
+ "readme": "Like FS streams, but with stat on them, and supporting directories and\nsymbolic links, as well as normal files. Also, you can use this to set\nthe stats on a file, even if you don't change its contents, or to create\na symlink, etc.\n\nSo, for example, you can \"write\" a directory, and it'll call `mkdir`. You\ncan specify a uid and gid, and it'll call `chown`. You can specify a\n`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink\nand provide a `linkpath` and it'll call `symlink`.\n\nNote that it won't automatically resolve symbolic links. So, if you\ncall `fstream.Reader('/some/symlink')` then you'll get an object\nthat stats and then ends immediately (since it has no data). To follow\nsymbolic links, do this: `fstream.Reader({path:'/some/symlink', follow:\ntrue })`.\n\nThere are various checks to make sure that the bytes emitted are the\nsame as the intended size, if the size is set.\n\n## Examples\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n })\n .write(\"hello\\n\")\n .end()\n```\n\nThis will create the directories if they're missing, and then write\n`hello\\n` into the file, chmod it to 0755, and assert that 6 bytes have\nbeen written when it's done.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/file\"\n , mode: 0755\n , size: 6\n , flags: \"a\"\n })\n .write(\"hello\\n\")\n .end()\n```\n\nYou can pass flags in, if you want to append to a file.\n\n```javascript\nfstream\n .Writer({ path: \"path/to/symlink\"\n , linkpath: \"./file\"\n , SymbolicLink: true\n , mode: \"0755\" // octal strings supported\n })\n .end()\n```\n\nIf isSymbolicLink is a function, it'll be called, and if it returns\ntrue, then it'll treat it as a symlink. If it's not a function, then\nany truish value will make a symlink, or you can set `type:\n'SymbolicLink'`, which does the same thing.\n\nNote that the linkpath is relative to the symbolic link location, not\nthe parent dir or cwd.\n\n```javascript\nfstream\n .Reader(\"path/to/dir\")\n .pipe(fstream.Writer(\"path/to/other/dir\"))\n```\n\nThis will do like `cp -Rp path/to/dir path/to/other/dir`. If the other\ndir exists and isn't a directory, then it'll emit an error. It'll also\nset the uid, gid, mode, etc. to be identical. In this way, it's more\nlike `rsync -a` than simply a copy.\n",
+ "readmeFilename": "README.md",
+ "gitHead": "d205397b27d93eee5314e9d2d87693e82b560106",
"bugs": {
"url": "https://github.com/isaacs/fstream/issues"
},
"homepage": "https://github.com/isaacs/fstream",
- "_id": "fstream@1.0.2",
- "_shasum": "56930ff1b4d4d7b1a689c8656b3a11e744ab92c6",
- "_from": "fstream@1.0.2",
- "_npmVersion": "1.4.23",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "dist": {
- "shasum": "56930ff1b4d4d7b1a689c8656b3a11e744ab92c6",
- "tarball": "http://registry.npmjs.org/fstream/-/fstream-1.0.2.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.2.tgz",
- "readme": "ERROR: No README data found!"
+ "_id": "fstream@1.0.3",
+ "_shasum": "5ce69767710d7a39c8cd9232470d9426790195da",
+ "_from": "fstream@>=1.0.3 <1.1.0"
}
diff --git a/deps/npm/node_modules/glob/.npmignore b/deps/npm/node_modules/glob/.npmignore
deleted file mode 100644
index c34fdd597..000000000
--- a/deps/npm/node_modules/glob/.npmignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.*.swp
-test/a/
-node_modules/*
diff --git a/deps/npm/node_modules/glob/README.md b/deps/npm/node_modules/glob/README.md
index 82b7ef6d6..e479ae29e 100644
--- a/deps/npm/node_modules/glob/README.md
+++ b/deps/npm/node_modules/glob/README.md
@@ -1,3 +1,5 @@
+[![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.
@@ -21,25 +23,94 @@ glob("**/*.js", options, function (er, files) {
})
```
-## Features
+## 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
-Please see the [minimatch
-documentation](https://github.com/isaacs/minimatch) for more details.
+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:
-Supports these glob features:
+ $ echo a*s*d*f
+ a*s*d*f
-* Brace Expansion
-* Extended glob matching
-* "Globstar" `**` matching
+To get the bash-style behavior, set the `nonull:true` in the options.
-See:
+### See Also:
* `man sh`
-* `man bash`
+* `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
@@ -60,7 +131,7 @@ Perform a synchronous glob search.
## Class: glob.Glob
-Create a Glob object by instanting the `glob.Glob` class.
+Create a Glob object by instantiating the `glob.Glob` class.
```javascript
var Glob = require("glob").Glob
@@ -85,8 +156,6 @@ be immediately available on the `g.found` member.
* `minimatch` The minimatch object that the glob uses.
* `options` The options object passed in.
-* `error` The error encountered. When an error is encountered, the
- glob object is in an undefined state, and should be discarded.
* `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.
@@ -96,10 +165,14 @@ be immediately available on the `g.found` member.
values:
* `false` - Path does not exist
* `true` - Path exists
- * `1` - Path exists, and is not a directory
- * `2` - Path exists, and is a directory
+ * `'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.
### Events
@@ -114,7 +187,9 @@ be immediately available on the `g.found` member.
### Methods
-* `abort` Stop the search.
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
### Options
@@ -124,7 +199,14 @@ or have glob-specific ramifications.
All options are false by default, unless otherwise noted.
-All options are added to the glob object, as well.
+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.
* `cwd` The current working directory in which to search. Defaults
to `process.cwd()`.
@@ -142,36 +224,46 @@ All options are added to the glob object, as well.
* `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. It will cause
- ELOOP to be triggered one level sooner in the case of cyclical
- symbolic links.
-* `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.
+ 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
+ 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` Perform a synchronous glob search.
* `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.
+ 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).
-* `nocase` Perform a case-insensitive match. Note that case-insensitive
- filesystems will sometimes result in glob returning results that are
- case-insensitively matched anyway, since readdir and stat will not
- raise an error.
* `debug` Set to enable debug logging in minimatch and glob.
-* `globDebug` Set to enable debug logging in glob, but not minimatch.
+* `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.
## Comparisons to other fnmatch/glob implementations
@@ -192,10 +284,14 @@ 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
+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,
@@ -239,3 +335,23 @@ 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/glob/common.js b/deps/npm/node_modules/glob/common.js
new file mode 100644
index 000000000..610d1245b
--- /dev/null
+++ b/deps/npm/node_modules/glob/common.js
@@ -0,0 +1,177 @@
+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
+
+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 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.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)
+
+ 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) {
+ 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))
+ })
+ }
+ }
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var c = self.cache[p]
+ 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) {
+ self.statCache[m] = self.statCache[p]
+ self.cache[m] = self.cache[p]
+ }
+ }
+
+ 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)
+ }
+ return abs
+}
diff --git a/deps/npm/node_modules/glob/examples/g.js b/deps/npm/node_modules/glob/examples/g.js
deleted file mode 100644
index be122df00..000000000
--- a/deps/npm/node_modules/glob/examples/g.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var Glob = require("../").Glob
-
-var pattern = "test/a/**/[cg]/../[cg]"
-console.log(pattern)
-
-var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) {
- console.log("matches", matches)
-})
-console.log("after")
diff --git a/deps/npm/node_modules/glob/examples/usr-local.js b/deps/npm/node_modules/glob/examples/usr-local.js
deleted file mode 100644
index 327a425e4..000000000
--- a/deps/npm/node_modules/glob/examples/usr-local.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var Glob = require("../").Glob
-
-var pattern = "{./*/*,/*,/usr/local/*}"
-console.log(pattern)
-
-var mg = new Glob(pattern, {mark: true}, function (er, matches) {
- console.log("matches", matches)
-})
-console.log("after")
diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js
index 564f3b121..7401e0b7e 100644
--- a/deps/npm/node_modules/glob/glob.js
+++ b/deps/npm/node_modules/glob/glob.js
@@ -1,24 +1,30 @@
// Approach:
//
// 1. Get the minimatch set
-// 2. For each pattern in the set, PROCESS(pattern)
+// 2. For each pattern in the set, PROCESS(pattern, false)
// 3. Store matches per-set, then uniq them
//
-// PROCESS(pattern)
+// 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.
-// readdir(PREFIX) as ENTRIES
-// If fails, 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 .. $])
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
// // handle other cases.
// for ENTRY in ENTRIES (not dotfiles)
// // attach globstar + tail onto the entry
-// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $])
+// // 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)
@@ -32,146 +38,81 @@
// `true` for files, and [children,...] for directories, or `false` for
// things that don't exist.
-
-
module.exports = glob
-var fs = require("graceful-fs")
-, minimatch = require("minimatch")
-, Minimatch = minimatch.Minimatch
-, inherits = require("inherits")
-, EE = require("events").EventEmitter
-, path = require("path")
-, isDir = {}
-, assert = require("assert").ok
-, once = require("once")
+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 once = require('once')
function glob (pattern, options, cb) {
- if (typeof options === "function") cb = options, options = {}
+ if (typeof options === 'function') cb = options, options = {}
if (!options) options = {}
- if (typeof options === "number") {
- deprecated()
- return
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
}
- var g = new Glob(pattern, options, cb)
- return g.sync ? g.found : g
+ return new Glob(pattern, options, cb)
}
-glob.fnmatch = deprecated
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
-function deprecated () {
- throw new Error("glob's interface has changed. Please see the docs.")
-}
+// old api surface
+glob.glob = glob
-glob.sync = globSync
-function globSync (pattern, options) {
- if (typeof options === "number") {
- deprecated()
- return
+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
}
- options = options || {}
- options.sync = true
- return glob(pattern, options)
+ return false
}
-this._processingEmitQueue = false
-
glob.Glob = Glob
inherits(Glob, EE)
function Glob (pattern, options, cb) {
- if (!(this instanceof Glob)) {
- return new Glob(pattern, options, cb)
- }
-
- if (typeof options === "function") {
+ if (typeof options === 'function') {
cb = options
options = null
}
- if (typeof cb === "function") {
- cb = once(cb)
- this.on("error", cb)
- this.on("end", function (matches) {
- cb(null, matches)
- })
- }
-
- options = options || {}
-
- this._endEmitted = false
- this.EOF = {}
- this._emitQueue = []
-
- this.paused = false
- this._processingEmitQueue = false
-
- this.maxDepth = options.maxDepth || 1000
- this.maxLength = options.maxLength || Infinity
- this.cache = options.cache || {}
- this.statCache = options.statCache || {}
-
- this.changedCwd = false
- var cwd = process.cwd()
- if (!options.hasOwnProperty("cwd")) this.cwd = cwd
- else {
- this.cwd = options.cwd
- this.changedCwd = path.resolve(options.cwd) !== cwd
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
}
- this.root = options.root || path.resolve(this.cwd, "/")
- this.root = path.resolve(this.root)
- if (process.platform === "win32")
- this.root = this.root.replace(/\\/g, "/")
-
- this.nomount = !!options.nomount
-
- if (!pattern) {
- throw new Error("must provide pattern")
- }
-
- // 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
- }
-
- this.strict = options.strict !== false
- this.dot = !!options.dot
- this.mark = !!options.mark
- this.sync = !!options.sync
- this.nounique = !!options.nounique
- this.nonull = !!options.nonull
- this.nosort = !!options.nosort
- this.nocase = !!options.nocase
- this.stat = !!options.stat
-
- this.debug = !!options.debug || !!options.globDebug
-
- if (/\bglob\b/.test(process.env.NODE_DEBUG || ''))
- this.debug = true
-
- if (this.debug)
- this.log = console.error
-
- this.silent = !!options.silent
-
- var mm = this.minimatch = new Minimatch(pattern, options)
- this.options = mm.options
- pattern = this.pattern = mm.pattern
-
- this.error = null
- this.aborted = false
-
- // list of all the patterns that ** has resolved do, so
- // we can avoid visiting multiple times.
- this._globstars = {}
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
- EE.call(this)
+ setopts(this, pattern, options)
// process each pattern in the minimatch set
var n = this.minimatch.set.length
@@ -182,210 +123,112 @@ function Glob (pattern, options, cb) {
// Keep them as a list so we can fill in when nonull is set.
this.matches = new Array(n)
- if (this.minimatch.set.length === 0) {
- return process.nextTick(this._finish.bind(this))
- }
-
- this.minimatch.set.forEach(iterator.bind(this))
- function iterator (pattern, i, set) {
- this._process(pattern, 0, i, function (er) {
- if (er) this.emit("error", er)
- if (-- n <= 0) this._finish()
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
})
}
-}
-Glob.prototype.log = function () {}
+ var self = this
+ var n = this.minimatch.set.length
+ this._processing = 0
+ this.matches = new Array(n)
-Glob.prototype._finish = function () {
- assert(this instanceof Glob)
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
- var nou = this.nounique
- , all = nou ? [] : {}
-
- for (var i = 0, l = this.matches.length; i < l; i ++) {
- var matches = this.matches[i]
- this.log("matches[%d] =", i, matches)
- // do like the shell, and spit out the literal glob
- if (!matches) {
- if (this.nonull) {
- var literal = this.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 (this.noprocess)
+ return this
- if (!nou) all = Object.keys(all)
+ if (n === 0)
+ return done()
- if (!this.nosort) {
- all = all.sort(this.nocase ? alphasorti : alphasort)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
}
- if (this.mark) {
- // at *some* point we statted all of these
- all = all.map(this._mark, this)
+ function done () {
+ --self._processing
+ if (self._processing <= 0)
+ self._finish()
}
-
- this.log("emitting end", all)
-
- this.EOF = this.found = all
- this.emitMatch(this.EOF)
}
-function alphasorti (a, b) {
- a = a.toLowerCase()
- b = b.toLowerCase()
- return alphasort(a, b)
-}
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
-function alphasort (a, b) {
- return a > b ? 1 : a < b ? -1 : 0
+ //console.error('FINISH', this.matches)
+ common.finish(this)
+ this.emit('end', this.found)
}
Glob.prototype._mark = function (p) {
- var c = this.cache[p]
- var m = p
- if (c) {
- var isDir = c === 2 || Array.isArray(c)
- var slash = p.slice(-1) === '/'
-
- if (isDir && !slash)
- m += '/'
- else if (!isDir && slash)
- m = m.slice(0, -1)
-
- if (m !== p) {
- this.statCache[m] = this.statCache[p]
- this.cache[m] = this.cache[p]
- }
- }
+ return common.mark(this, p)
+}
- return m
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
}
Glob.prototype.abort = function () {
this.aborted = true
- this.emit("abort")
+ this.emit('abort')
}
Glob.prototype.pause = function () {
- if (this.paused) return
- if (this.sync)
- this.emit("error", new Error("Can't pause/resume sync glob"))
- this.paused = true
- this.emit("pause")
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
}
Glob.prototype.resume = function () {
- if (!this.paused) return
- if (this.sync)
- this.emit("error", new Error("Can't pause/resume sync glob"))
- this.paused = false
- this.emit("resume")
- this._processEmitQueue()
- //process.nextTick(this.emit.bind(this, "resume"))
-}
-
-Glob.prototype.emitMatch = function (m) {
- this.log('emitMatch', m)
- this._emitQueue.push(m)
- this._processEmitQueue()
-}
-
-Glob.prototype._processEmitQueue = function (m) {
- this.log("pEQ paused=%j processing=%j m=%j", this.paused,
- this._processingEmitQueue, m)
- var done = false
- while (!this._processingEmitQueue &&
- !this.paused) {
- this._processingEmitQueue = true
- var m = this._emitQueue.shift()
- this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
- if (!m) {
- this.log(">processEmitQueue, falsey m")
- this._processingEmitQueue = false
- break
- }
-
- if (m === this.EOF || !(this.mark && !this.stat)) {
- this.log("peq: unmarked, or eof")
- next.call(this, 0, false)
- } else if (this.statCache[m]) {
- var sc = this.statCache[m]
- var exists
- if (sc)
- exists = sc.isDirectory() ? 2 : 1
- this.log("peq: stat cached")
- next.call(this, exists, exists === 2)
- } else {
- this.log("peq: _stat, then next")
- this._stat(m, next)
+ 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])
+ }
}
- }
- done = true
-
- function next(exists, isDir) {
- this.log("next", m, exists, isDir)
- var ev = m === this.EOF ? "end" : "match"
-
- // "end" can only happen once.
- assert(!this._endEmitted)
- if (ev === "end")
- this._endEmitted = true
-
- if (exists) {
- // Doesn't mean it necessarily doesn't exist, it's possible
- // we just didn't check because we don't care that much, or
- // this is EOF anyway.
- if (isDir && !m.match(/\/$/)) {
- m = m + "/"
- } else if (!isDir && m.match(/\/$/)) {
- m = m.replace(/\/+$/, "")
+ 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])
}
}
- this.log("emit", ev, m)
- this.emit(ev, m)
- this._processingEmitQueue = false
- if (done && m !== this.EOF && !this.paused)
- this._processEmitQueue()
}
}
-Glob.prototype._process = function (pattern, depth, index, cb_) {
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
assert(this instanceof Glob)
+ assert(typeof cb === 'function')
- var cb = function cb (er, res) {
- assert(this instanceof Glob)
- if (this.paused) {
- if (!this._processQueue) {
- this._processQueue = []
- this.once("resume", function () {
- var q = this._processQueue
- this._processQueue = null
- q.forEach(function (cb) { cb() })
- })
- }
- this._processQueue.push(cb_.bind(this, er, res))
- } else {
- cb_.call(this, er, res)
- }
- }.bind(this)
+ if (this.aborted)
+ return
- if (this.aborted) return cb()
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
- if (depth > this.maxDepth) return cb()
+ //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") {
+ while (typeof pattern[n] === 'string') {
n ++
}
// now n is the index of the first one that is *not* a string.
@@ -395,28 +238,7 @@ Glob.prototype._process = function (pattern, depth, index, cb_) {
switch (n) {
// if not, then this is rather simple
case pattern.length:
- prefix = pattern.join("/")
- this._stat(prefix, function (exists, isDir) {
- // either it's there, or it isn't.
- // nothing more to do, either way.
- if (exists) {
- if (prefix && isAbsolute(prefix) && !this.nomount) {
- if (prefix.charAt(0) === "/") {
- prefix = path.join(this.root, prefix)
- } else {
- prefix = path.resolve(this.root, prefix)
- }
- }
-
- if (process.platform === "win32")
- prefix = prefix.replace(/\\/g, "/")
-
- this.matches[index] = this.matches[index] || {}
- this.matches[index][prefix] = true
- this.emitMatch(prefix)
- }
- return cb()
- })
+ this._processSimple(pattern.join('/'), index, cb)
return
case 0:
@@ -427,320 +249,401 @@ Glob.prototype._process = function (pattern, depth, index, cb_) {
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)
- prefix = prefix.join("/")
+ // 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
- }
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
read = prefix
- // if (process.platform === "win32")
- // read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/")
+ var abs = this._makeAbs(read)
- this.log('absolute: ', prefix, this.root, pattern, read)
- } else {
- read = prefix
+ 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)
+ }
}
- this.log('readdir(%j)', read, this.cwd, this.root)
+ //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
+ }
- return this._readdir(read, function (er, entries) {
- if (er) {
- // not a directory!
- // this means that, whatever else comes after this, it can never match
- return cb()
+ 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()
+ }
- // globstar is special
- if (pattern[n] === minimatch.GLOBSTAR) {
- // test without the globstar, and with every child both below
- // and replacing the globstar.
- var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ]
- entries.forEach(function (e) {
- if (e.charAt(0) === "." && !this.dot) return
- // instead of the globstar
- s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)))
- // below the globstar
- s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n)))
- }, this)
-
- s = s.filter(function (pattern) {
- var key = gsKey(pattern)
- var seen = !this._globstars[key]
- this._globstars[key] = true
- return seen
- }, this)
-
- if (!s.length)
- return cb()
-
- // now asyncForEach over this
- var l = s.length
- , errState = null
- s.forEach(function (gsPattern) {
- this._process(gsPattern, depth + 1, index, function (er) {
- if (errState) return
- if (er) return cb(errState = er)
- if (--l <= 0) return cb()
- })
- }, this)
+ // 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]) {
+ if (this.paused) {
+ this._emitQueue.push([index, e])
return
}
- // not a globstar
- // 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 = pattern[n]
- var negate = !!this.minimatch.negate;
- var rawGlob = pattern[n]._glob
- , dotOk = this.dot || rawGlob.charAt(0) === "."
-
- entries = entries.filter(function (e) {
- if (e.charAt(0) !== "." || dotOk) {
- if (negate && n === 0) {
- return !e.match(pattern[n]);
- } else {
- return e.match(pattern[n]);
- }
- }
+ 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.mark)
+ return this.emit('match', e)
- return null;
+ var self = this
+ this._stat(this._makeAbs(e), function (er, c, st) {
+ self.emit('stat', e, st)
+ self.emit('match', e)
})
+ }
+}
- // If n === pattern.length - 1, then there's no need for the extra stat
- // *unless* the user has specified "mark" or "stat" explicitly.
- // We know that they exist, since the readdir returned them.
- if (n === pattern.length - 1 &&
- !this.mark &&
- !this.stat) {
- entries.forEach(function (e) {
- if (prefix) {
- if (prefix !== "/") e = prefix + "/" + e
- else e = prefix + e
- }
- if (e.charAt(0) === "/" && !this.nomount) {
- e = path.join(this.root, e)
- }
-
- if (process.platform === "win32")
- e = e.replace(/\\/g, "/")
-
- this.matches[index] = this.matches[index] || {}
- this.matches[index][e] = true
- this.emitMatch(e)
- }, this)
- return cb.call(this)
- }
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
- // now test all the remaining entries as stand-ins for that part
- // of the pattern.
- var l = entries.length
- , errState = null
- if (l === 0) return cb() // no matches possible
- entries.forEach(function (e) {
- var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))
- this._process(p, depth + 1, index, function (er) {
- if (errState) return
- if (er) return cb(errState = er)
- if (--l === 0) return cb.call(this)
- })
- }, this)
- })
+ if (lstatcb)
+ fs.lstat(abs, lstatcb)
-}
+ function lstatcb_ (er, lstat) {
+ if (er)
+ return cb()
-function gsKey (pattern) {
- return '**' + pattern.map(function (p) {
- return (p === minimatch.GLOBSTAR) ? '**' : (''+p)
- }).join('/')
-}
+ var isSym = lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
-Glob.prototype._stat = function (f, cb) {
- assert(this instanceof Glob)
- var abs = f
- if (f.charAt(0) === "/") {
- abs = path.join(this.root, f)
- } else if (this.changedCwd) {
- abs = path.resolve(this.cwd, f)
+ // 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
- if (f.length > this.maxLength) {
- var er = new Error("Path name too long")
- er.code = "ENAMETOOLONG"
- er.path = f
- return this._afterStat(f, abs, cb, er)
+ 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)
}
- this.log('stat', [this.cwd, f, '=', abs])
+ var self = this
+ fs.readdir(abs, readdirCb(this, abs, cb))
+}
- if (!this.stat && this.cache.hasOwnProperty(f)) {
- var exists = this.cache[f]
- , isDir = exists && (Array.isArray(exists) || exists === 2)
- if (this.sync) return cb.call(this, !!exists, isDir)
- return process.nextTick(cb.bind(this, !!exists, isDir))
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
}
+}
- var stat = this.statCache[abs]
- if (this.sync || stat) {
- var er
- try {
- stat = fs.statSync(abs)
- } catch (e) {
- er = e
+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._afterStat(f, abs, cb, er, stat)
- } else {
- fs.stat(abs, this._afterStat.bind(this, f, abs, cb))
}
+
+ this.cache[abs] = entries
+ return cb(null, entries)
}
-Glob.prototype._afterStat = function (f, abs, cb, er, stat) {
- var exists
- assert(this instanceof Glob)
+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[f] = 'FILE'
+ break
- if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) {
- this.log("should be ENOTDIR, fake it")
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[f] = false
+ break
- er = new Error("ENOTDIR, not a directory '" + abs + "'")
- er.path = abs
- er.code = "ENOTDIR"
- stat = null
+ default: // some unusual error. Treat as failure.
+ this.cache[f] = false
+ if (this.strict) return this.emit('error', er)
+ if (!this.silent) console.error('glob error', er)
+ break
}
+ return cb()
+}
- var emit = !this.statCache[abs]
- this.statCache[abs] = stat
+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)
- if (er || !stat) {
- exists = false
- } else {
- exists = stat.isDirectory() ? 2 : 1
- if (emit)
- this.emit('stat', f, stat)
+ 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)
}
- this.cache[f] = this.cache[f] || exists
- cb.call(this, !!exists, exists === 2)
+
+ cb()
}
-Glob.prototype._readdir = function (f, cb) {
- assert(this instanceof Glob)
+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 = f
- if (f.charAt(0) === "/") {
+ if (f.charAt(0) === '/')
abs = path.join(this.root, f)
- } else if (isAbsolute(f)) {
- abs = f
- } else if (this.changedCwd) {
+ else if (this.changedCwd)
abs = path.resolve(this.cwd, f)
- }
- if (f.length > this.maxLength) {
- var er = new Error("Path name too long")
- er.code = "ENAMETOOLONG"
- er.path = f
- return this._afterReaddir(f, abs, cb, er)
- }
- this.log('readdir', [this.cwd, f, abs])
- if (this.cache.hasOwnProperty(f)) {
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, f)) {
var c = this.cache[f]
- if (Array.isArray(c)) {
- if (this.sync) return cb.call(this, null, c)
- return process.nextTick(cb.bind(this, null, c))
- }
- if (!c || c === 1) {
- // either ENOENT or ENOTDIR
- var code = c ? "ENOTDIR" : "ENOENT"
- , er = new Error((c ? "Not a directory" : "Not found") + ": " + f)
- er.path = f
- er.code = code
- this.log(f, er)
- if (this.sync) return cb.call(this, er)
- return process.nextTick(cb.bind(this, er))
- }
+ if (Array.isArray(c))
+ c = 'DIR'
- // at this point, c === 2, meaning it's a dir, but we haven't
- // had to read it yet, or c === true, meaning it's *something*
- // but we don't have any idea what. Need to read it, either way.
- }
+ // It exists, but not how we need it
+ if (abs.slice(-1) === '/' && c !== 'DIR')
+ return cb()
- if (this.sync) {
- var er, entries
- try {
- entries = fs.readdirSync(abs)
- } catch (e) {
- er = e
- }
- return this._afterReaddir(f, abs, cb, er, entries)
+ return cb(null, c)
}
- fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb))
-}
-
-Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) {
- assert(this instanceof Glob)
- if (entries && !er) {
- this.cache[f] = entries
- // if we haven't asked to stat everything for suresies, then just
- // assume that everything in there exists, so we can avoid
- // having to stat it a second time. This also gets us one step
- // further into ELOOP territory.
- if (!this.mark && !this.stat) {
- entries.forEach(function (e) {
- if (f === "/") e = f + e
- else e = f + "/" + e
- this.cache[e] = true
- }, this)
- }
-
- return cb.call(this, er, entries)
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else
+ return cb(null, stat.isDirectory() ? 'DIR' : 'FILE', stat)
}
- // now handle errors, and cache the information
- if (er) switch (er.code) {
- case "ENOTDIR": // totally normal. means it *does* exist.
- this.cache[f] = 1
- return cb.call(this, er)
- case "ENOENT": // not terribly unusual
- case "ELOOP":
- case "ENAMETOOLONG":
- case "UNKNOWN":
- this.cache[f] = false
- return cb.call(this, er)
- default: // some unusual error. Treat as failure.
- this.cache[f] = false
- if (this.strict) this.emit("error", er)
- if (!this.silent) console.error("glob error", er)
- return cb.call(this, er)
+ var self = this
+ var statcb = inflight('stat\0' + abs, statcb_)
+ if (statcb)
+ fs.stat(abs, statcb)
+
+ function statcb_ (er, stat) {
+ self._stat2(f, abs, er, stat, cb)
}
}
-var isAbsolute = process.platform === "win32" ? absWin : absUnix
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er) {
+ this.statCache[abs] = false
+ return cb()
+ }
-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]*?)$/
- , result = splitDeviceRe.exec(p)
- , device = result[1] || ''
- , isUnc = device && device.charAt(1) !== ':'
- , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+ this.statCache[abs] = stat
- return isAbsolute
-}
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return cb(null, false, stat)
-function absUnix (p) {
- return p.charAt(0) === "/" || p === ""
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[f] = this.cache[f] || c
+ return cb(null, c, stat)
}
diff --git a/deps/npm/node_modules/glob/oh-my-glob.gif b/deps/npm/node_modules/glob/oh-my-glob.gif
deleted file mode 100644
index a1568c13c..000000000
--- a/deps/npm/node_modules/glob/oh-my-glob.gif
+++ /dev/null
Binary files differ
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 6bf85e8df..5b782d625 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -6,41 +6,52 @@
},
"name": "glob",
"description": "a little globber",
- "version": "4.0.6",
+ "version": "4.3.5",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
},
"main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
"engines": {
"node": "*"
},
"dependencies": {
- "graceful-fs": "^3.0.2",
+ "inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^1.0.0",
+ "minimatch": "^2.0.1",
"once": "^1.3.0"
},
"devDependencies": {
- "tap": "~0.4.0",
"mkdirp": "0",
- "rimraf": "1"
+ "rimraf": "^2.2.8",
+ "tap": "^0.5.0",
+ "tick": "0.0.6"
},
"scripts": {
- "test": "tap test/*.js",
- "test-regen": "TEST_REGEN=1 node test/00-setup.js"
+ "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": "6825c425e738eaffa315d8cdb1a4c3255ededcb3",
+ "gitHead": "9de4cb6bfeb9c8458cf188fe91447b99bf8f3cfd",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
"homepage": "https://github.com/isaacs/node-glob",
- "_id": "glob@4.0.6",
- "_shasum": "695c50bdd4e2fb5c5d370b091f388d3707e291a7",
- "_from": "glob@>=4.0.6 <5.0.0",
- "_npmVersion": "2.0.0",
- "_nodeVersion": "0.10.31",
+ "_id": "glob@4.3.5",
+ "_shasum": "80fbb08ca540f238acce5d11d1e9bc41e75173d3",
+ "_from": "glob@>=4.3.5 <4.4.0",
+ "_npmVersion": "2.2.0",
+ "_nodeVersion": "0.10.35",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -52,10 +63,9 @@
}
],
"dist": {
- "shasum": "695c50bdd4e2fb5c5d370b091f388d3707e291a7",
- "tarball": "http://registry.npmjs.org/glob/-/glob-4.0.6.tgz"
+ "shasum": "80fbb08ca540f238acce5d11d1e9bc41e75173d3",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.3.5.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/glob/-/glob-4.0.6.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz"
}
diff --git a/deps/npm/node_modules/glob/sync.js b/deps/npm/node_modules/glob/sync.js
new file mode 100644
index 000000000..f981055af
--- /dev/null
+++ b/deps/npm/node_modules/glob/sync.js
@@ -0,0 +1,409 @@
+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
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob')
+
+ 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')
+
+ 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)
+ 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)
+
+ 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) {
+ if (!this.matches[index][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.mark)
+ this._stat(this._makeAbs(e))
+ }
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ 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[f] = 'FILE'
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[f] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[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 = f
+ if (f.charAt(0) === '/')
+ abs = path.join(this.root, f)
+ else if (this.changedCwd)
+ abs = path.resolve(this.cwd, f)
+
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, f)) {
+ var c = this.cache[f]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but not how we need it
+ if (abs.slice(-1) === '/' && c !== 'DIR')
+ return false
+
+ return c
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ try {
+ stat = fs.statSync(abs)
+ } catch (er) {
+ return false
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && !stat.isDirectory())
+ return false
+
+ var c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[f] = this.cache[f] || c
+ 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/glob/test/00-setup.js b/deps/npm/node_modules/glob/test/00-setup.js
deleted file mode 100644
index 245afafda..000000000
--- a/deps/npm/node_modules/glob/test/00-setup.js
+++ /dev/null
@@ -1,176 +0,0 @@
-// just a little pre-run script to set up the fixtures.
-// zz-finish cleans it up
-
-var mkdirp = require("mkdirp")
-var path = require("path")
-var i = 0
-var tap = require("tap")
-var fs = require("fs")
-var rimraf = require("rimraf")
-
-var files =
-[ "a/.abcdef/x/y/z/a"
-, "a/abcdef/g/h"
-, "a/abcfed/g/h"
-, "a/b/c/d"
-, "a/bc/e/f"
-, "a/c/d/c/b"
-, "a/cb/e/f"
-]
-
-var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c")
-var symlinkFrom = "../.."
-
-files = files.map(function (f) {
- return path.resolve(__dirname, f)
-})
-
-tap.test("remove fixtures", function (t) {
- rimraf(path.resolve(__dirname, "a"), function (er) {
- t.ifError(er, "remove fixtures")
- t.end()
- })
-})
-
-files.forEach(function (f) {
- tap.test(f, function (t) {
- var d = path.dirname(f)
- mkdirp(d, 0755, function (er) {
- if (er) {
- t.fail(er)
- return t.bailout()
- }
- fs.writeFile(f, "i like tests", function (er) {
- t.ifError(er, "make file")
- t.end()
- })
- })
- })
-})
-
-if (process.platform !== "win32") {
- tap.test("symlinky", function (t) {
- var d = path.dirname(symlinkTo)
- console.error("mkdirp", d)
- mkdirp(d, 0755, function (er) {
- t.ifError(er)
- fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) {
- t.ifError(er, "make symlink")
- t.end()
- })
- })
- })
-}
-
-;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) {
- w = "/tmp/glob-test/" + w
- tap.test("create " + w, function (t) {
- mkdirp(w, function (er) {
- if (er)
- throw er
- t.pass(w)
- t.end()
- })
- })
-})
-
-
-// generate the bash pattern test-fixtures if possible
-if (process.platform === "win32" || !process.env.TEST_REGEN) {
- console.error("Windows, or TEST_REGEN unset. Using cached fixtures.")
- return
-}
-
-var spawn = require("child_process").spawn;
-var globs =
- // put more patterns here.
- // anything that would be directly in / should be in /tmp/glob-test
- ["test/a/*/+(c|g)/./d"
- ,"test/a/**/[cg]/../[cg]"
- ,"test/a/{b,c,d,e,f}/**/g"
- ,"test/a/b/**"
- ,"test/**/g"
- ,"test/a/abc{fed,def}/g/h"
- ,"test/a/abc{fed/g,def}/**/"
- ,"test/a/abc{fed/g,def}/**///**/"
- ,"test/**/a/**/"
- ,"test/+(a|b|c)/a{/,bc*}/**"
- ,"test/*/*/*/f"
- ,"test/**/f"
- ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**"
- ,"{./*/*,/tmp/glob-test/*}"
- ,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me!
- ,"test/a/!(symlink)/**"
- ]
-var bashOutput = {}
-var fs = require("fs")
-
-globs.forEach(function (pattern) {
- tap.test("generate fixture " + pattern, function (t) {
- var cmd = "shopt -s globstar && " +
- "shopt -s extglob && " +
- "shopt -s nullglob && " +
- // "shopt >&2; " +
- "eval \'for i in " + pattern + "; do echo $i; done\'"
- var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) })
- var out = []
- cp.stdout.on("data", function (c) {
- out.push(c)
- })
- cp.stderr.pipe(process.stderr)
- cp.on("close", function (code) {
- out = flatten(out)
- if (!out)
- out = []
- else
- out = cleanResults(out.split(/\r*\n/))
-
- bashOutput[pattern] = out
- t.notOk(code, "bash test should finish nicely")
- t.end()
- })
- })
-})
-
-tap.test("save fixtures", function (t) {
- var fname = path.resolve(__dirname, "bash-results.json")
- var data = JSON.stringify(bashOutput, null, 2) + "\n"
- fs.writeFile(fname, data, function (er) {
- t.ifError(er)
- t.end()
- })
-})
-
-function cleanResults (m) {
- // normalize discrepancies in ordering, duplication,
- // and ending slashes.
- return m.map(function (m) {
- return m.replace(/\/+/g, "/").replace(/\/$/, "")
- }).sort(alphasort).reduce(function (set, f) {
- if (f !== set[set.length - 1]) set.push(f)
- return set
- }, []).sort(alphasort).map(function (f) {
- // de-windows
- return (process.platform !== 'win32') ? f
- : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
- })
-}
-
-function flatten (chunks) {
- var s = 0
- chunks.forEach(function (c) { s += c.length })
- var out = new Buffer(s)
- s = 0
- chunks.forEach(function (c) {
- c.copy(out, s)
- s += c.length
- })
-
- return out.toString().trim()
-}
-
-function alphasort (a, b) {
- a = a.toLowerCase()
- b = b.toLowerCase()
- return a > b ? 1 : a < b ? -1 : 0
-}
diff --git a/deps/npm/node_modules/glob/test/bash-comparison.js b/deps/npm/node_modules/glob/test/bash-comparison.js
deleted file mode 100644
index 239ed1a9c..000000000
--- a/deps/npm/node_modules/glob/test/bash-comparison.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// basic test
-// show that it does the same thing by default as the shell.
-var tap = require("tap")
-, child_process = require("child_process")
-, bashResults = require("./bash-results.json")
-, globs = Object.keys(bashResults)
-, glob = require("../")
-, path = require("path")
-
-// run from the root of the project
-// this is usually where you're at anyway, but be sure.
-process.chdir(path.resolve(__dirname, ".."))
-
-function alphasort (a, b) {
- a = a.toLowerCase()
- b = b.toLowerCase()
- return a > b ? 1 : a < b ? -1 : 0
-}
-
-globs.forEach(function (pattern) {
- var expect = bashResults[pattern]
- // anything regarding the symlink thing will fail on windows, so just skip it
- if (process.platform === "win32" &&
- expect.some(function (m) {
- return /\/symlink\//.test(m)
- }))
- return
-
- tap.test(pattern, function (t) {
- glob(pattern, function (er, matches) {
- if (er)
- throw er
-
- // sort and unmark, just to match the shell results
- matches = cleanResults(matches)
-
- t.deepEqual(matches, expect, pattern)
- t.end()
- })
- })
-
- tap.test(pattern + " sync", function (t) {
- var matches = cleanResults(glob.sync(pattern))
-
- t.deepEqual(matches, expect, "should match shell")
- t.end()
- })
-})
-
-function cleanResults (m) {
- // normalize discrepancies in ordering, duplication,
- // and ending slashes.
- return m.map(function (m) {
- return m.replace(/\/+/g, "/").replace(/\/$/, "")
- }).sort(alphasort).reduce(function (set, f) {
- if (f !== set[set.length - 1]) set.push(f)
- return set
- }, []).sort(alphasort).map(function (f) {
- // de-windows
- return (process.platform !== 'win32') ? f
- : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/')
- })
-}
diff --git a/deps/npm/node_modules/glob/test/bash-results.json b/deps/npm/node_modules/glob/test/bash-results.json
deleted file mode 100644
index 8223d0675..000000000
--- a/deps/npm/node_modules/glob/test/bash-results.json
+++ /dev/null
@@ -1,356 +0,0 @@
-{
- "test/a/*/+(c|g)/./d": [
- "test/a/b/c/./d"
- ],
- "test/a/**/[cg]/../[cg]": [
- "test/a/abcdef/g/../g",
- "test/a/abcfed/g/../g",
- "test/a/b/c/../c",
- "test/a/c/../c",
- "test/a/c/d/c/../c",
- "test/a/symlink/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c"
- ],
- "test/a/{b,c,d,e,f}/**/g": [],
- "test/a/b/**": [
- "test/a/b",
- "test/a/b/c",
- "test/a/b/c/d"
- ],
- "test/**/g": [
- "test/a/abcdef/g",
- "test/a/abcfed/g"
- ],
- "test/a/abc{fed,def}/g/h": [
- "test/a/abcdef/g/h",
- "test/a/abcfed/g/h"
- ],
- "test/a/abc{fed/g,def}/**/": [
- "test/a/abcdef",
- "test/a/abcdef/g",
- "test/a/abcfed/g"
- ],
- "test/a/abc{fed/g,def}/**///**/": [
- "test/a/abcdef",
- "test/a/abcdef/g",
- "test/a/abcfed/g"
- ],
- "test/**/a/**/": [
- "test/a",
- "test/a/abcdef",
- "test/a/abcdef/g",
- "test/a/abcfed",
- "test/a/abcfed/g",
- "test/a/b",
- "test/a/b/c",
- "test/a/bc",
- "test/a/bc/e",
- "test/a/c",
- "test/a/c/d",
- "test/a/c/d/c",
- "test/a/cb",
- "test/a/cb/e",
- "test/a/symlink",
- "test/a/symlink/a",
- "test/a/symlink/a/b",
- "test/a/symlink/a/b/c",
- "test/a/symlink/a/b/c/a",
- "test/a/symlink/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b"
- ],
- "test/+(a|b|c)/a{/,bc*}/**": [
- "test/a/abcdef",
- "test/a/abcdef/g",
- "test/a/abcdef/g/h",
- "test/a/abcfed",
- "test/a/abcfed/g",
- "test/a/abcfed/g/h"
- ],
- "test/*/*/*/f": [
- "test/a/bc/e/f",
- "test/a/cb/e/f"
- ],
- "test/**/f": [
- "test/a/bc/e/f",
- "test/a/cb/e/f"
- ],
- "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b",
- "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c"
- ],
- "{./*/*,/tmp/glob-test/*}": [
- "./examples/g.js",
- "./examples/usr-local.js",
- "./node_modules/graceful-fs",
- "./node_modules/inherits",
- "./node_modules/minimatch",
- "./node_modules/mkdirp",
- "./node_modules/once",
- "./node_modules/rimraf",
- "./node_modules/tap",
- "./test/00-setup.js",
- "./test/a",
- "./test/bash-comparison.js",
- "./test/bash-results.json",
- "./test/cwd-test.js",
- "./test/empty-set.js",
- "./test/error-callback.js",
- "./test/globstar-match.js",
- "./test/mark.js",
- "./test/negation-test.js",
- "./test/new-glob-optional-options.js",
- "./test/nocase-nomagic.js",
- "./test/pause-resume.js",
- "./test/readme-issue.js",
- "./test/root-nomount.js",
- "./test/root.js",
- "./test/stat.js",
- "./test/zz-cleanup.js",
- "/tmp/glob-test/asdf",
- "/tmp/glob-test/bar",
- "/tmp/glob-test/baz",
- "/tmp/glob-test/foo",
- "/tmp/glob-test/quux",
- "/tmp/glob-test/qwer",
- "/tmp/glob-test/rewq"
- ],
- "{/tmp/glob-test/*,*}": [
- "/tmp/glob-test/asdf",
- "/tmp/glob-test/bar",
- "/tmp/glob-test/baz",
- "/tmp/glob-test/foo",
- "/tmp/glob-test/quux",
- "/tmp/glob-test/qwer",
- "/tmp/glob-test/rewq",
- "examples",
- "glob.js",
- "LICENSE",
- "node_modules",
- "package.json",
- "README.md",
- "test"
- ],
- "test/a/!(symlink)/**": [
- "test/a/abcdef",
- "test/a/abcdef/g",
- "test/a/abcdef/g/h",
- "test/a/abcfed",
- "test/a/abcfed/g",
- "test/a/abcfed/g/h",
- "test/a/b",
- "test/a/b/c",
- "test/a/b/c/d",
- "test/a/bc",
- "test/a/bc/e",
- "test/a/bc/e/f",
- "test/a/c",
- "test/a/c/d",
- "test/a/c/d/c",
- "test/a/c/d/c/b",
- "test/a/cb",
- "test/a/cb/e",
- "test/a/cb/e/f"
- ]
-}
diff --git a/deps/npm/node_modules/glob/test/cwd-test.js b/deps/npm/node_modules/glob/test/cwd-test.js
deleted file mode 100644
index 352c27efa..000000000
--- a/deps/npm/node_modules/glob/test/cwd-test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-var tap = require("tap")
-
-var origCwd = process.cwd()
-process.chdir(__dirname)
-
-tap.test("changing cwd and searching for **/d", function (t) {
- var glob = require('../')
- var path = require('path')
- t.test('.', function (t) {
- glob('**/d', function (er, matches) {
- t.ifError(er)
- t.like(matches, [ 'a/b/c/d', 'a/c/d' ])
- t.end()
- })
- })
-
- t.test('a', function (t) {
- glob('**/d', {cwd:path.resolve('a')}, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ 'b/c/d', 'c/d' ])
- t.end()
- })
- })
-
- t.test('a/b', function (t) {
- glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ 'c/d' ])
- t.end()
- })
- })
-
- t.test('a/b/', function (t) {
- glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ 'c/d' ])
- t.end()
- })
- })
-
- t.test('.', function (t) {
- glob('**/d', {cwd: process.cwd()}, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ 'a/b/c/d', 'a/c/d' ])
- t.end()
- })
- })
-
- t.test('cd -', function (t) {
- process.chdir(origCwd)
- t.end()
- })
-
- t.end()
-})
diff --git a/deps/npm/node_modules/glob/test/empty-set.js b/deps/npm/node_modules/glob/test/empty-set.js
deleted file mode 100644
index 3b627b0ab..000000000
--- a/deps/npm/node_modules/glob/test/empty-set.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var test = require('tap').test
-var glob = require("../glob.js")
-
-// Patterns that cannot match anything
-var patterns = [
- '# comment',
- ' ',
- '\n',
- 'just doesnt happen to match anything so this is a control'
-]
-
-patterns.forEach(function (p) {
- test(JSON.stringify(p), function (t) {
- glob(p, function (e, f) {
- t.equal(e, null, 'no error')
- t.same(f, [], 'no returned values')
- t.end()
- })
- })
-})
diff --git a/deps/npm/node_modules/glob/test/error-callback.js b/deps/npm/node_modules/glob/test/error-callback.js
deleted file mode 100644
index 60d3ba1b5..000000000
--- a/deps/npm/node_modules/glob/test/error-callback.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var fs
-try { fs = require('graceful-fs') } catch (e) { fs = require('fs') }
-var test = require('tap').test
-var glob = require('../')
-
-test('mock fs', function(t) {
- fs.readdir = function(path, cb) {
- process.nextTick(function() {
- cb(new Error('mock fs.readdir error'))
- })
- }
- t.pass('mocked')
- t.end()
-})
-
-test('error callback', function(t) {
- glob('*', function(err, res) {
- t.ok(err, 'expecting mock error')
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/glob/test/globstar-match.js b/deps/npm/node_modules/glob/test/globstar-match.js
deleted file mode 100644
index 9b234fa2a..000000000
--- a/deps/npm/node_modules/glob/test/globstar-match.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var Glob = require("../glob.js").Glob
-var test = require('tap').test
-
-test('globstar should not have dupe matches', function(t) {
- var pattern = 'a/**/[gh]'
- var g = new Glob(pattern, { cwd: __dirname })
- var matches = []
- g.on('match', function(m) {
- console.error('match %j', m)
- matches.push(m)
- })
- g.on('end', function(set) {
- console.error('set', set)
- matches = matches.sort()
- set = set.sort()
- t.same(matches, set, 'should have same set of matches')
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/glob/test/mark.js b/deps/npm/node_modules/glob/test/mark.js
deleted file mode 100644
index bf411c0e5..000000000
--- a/deps/npm/node_modules/glob/test/mark.js
+++ /dev/null
@@ -1,118 +0,0 @@
-var test = require("tap").test
-var glob = require('../')
-process.chdir(__dirname)
-
-// expose timing issues
-var lag = 5
-glob.Glob.prototype._stat = function(o) { return function(f, cb) {
- var args = arguments
- setTimeout(function() {
- o.call(this, f, cb)
- }.bind(this), lag += 5)
-}}(glob.Glob.prototype._stat)
-
-
-test("mark, with **", function (t) {
- glob("a/*b*/**", {mark: true}, function (er, results) {
- if (er)
- throw er
- var expect =
- [ 'a/abcdef/',
- 'a/abcdef/g/',
- 'a/abcdef/g/h',
- 'a/abcfed/',
- 'a/abcfed/g/',
- 'a/abcfed/g/h',
- 'a/b/',
- 'a/b/c/',
- 'a/b/c/d',
- 'a/bc/',
- 'a/bc/e/',
- 'a/bc/e/f',
- 'a/cb/',
- 'a/cb/e/',
- 'a/cb/e/f' ]
-
- t.same(results, expect)
- t.end()
- })
-})
-
-test("mark, no / on pattern", function (t) {
- glob("a/*", {mark: true}, function (er, results) {
- if (er)
- throw er
- var expect = [ 'a/abcdef/',
- 'a/abcfed/',
- 'a/b/',
- 'a/bc/',
- 'a/c/',
- 'a/cb/' ]
-
- if (process.platform !== "win32")
- expect.push('a/symlink/')
-
- t.same(results, expect)
- t.end()
- }).on('match', function(m) {
- t.similar(m, /\/$/)
- })
-})
-
-test("mark=false, no / on pattern", function (t) {
- glob("a/*", function (er, results) {
- if (er)
- throw er
- var expect = [ 'a/abcdef',
- 'a/abcfed',
- 'a/b',
- 'a/bc',
- 'a/c',
- 'a/cb' ]
-
- if (process.platform !== "win32")
- expect.push('a/symlink')
- t.same(results, expect)
- t.end()
- }).on('match', function(m) {
- t.similar(m, /[^\/]$/)
- })
-})
-
-test("mark=true, / on pattern", function (t) {
- glob("a/*/", {mark: true}, function (er, results) {
- if (er)
- throw er
- var expect = [ 'a/abcdef/',
- 'a/abcfed/',
- 'a/b/',
- 'a/bc/',
- 'a/c/',
- 'a/cb/' ]
- if (process.platform !== "win32")
- expect.push('a/symlink/')
- t.same(results, expect)
- t.end()
- }).on('match', function(m) {
- t.similar(m, /\/$/)
- })
-})
-
-test("mark=false, / on pattern", function (t) {
- glob("a/*/", function (er, results) {
- if (er)
- throw er
- var expect = [ 'a/abcdef/',
- 'a/abcfed/',
- 'a/b/',
- 'a/bc/',
- 'a/c/',
- 'a/cb/' ]
- if (process.platform !== "win32")
- expect.push('a/symlink/')
- t.same(results, expect)
- t.end()
- }).on('match', function(m) {
- t.similar(m, /\/$/)
- })
-})
diff --git a/deps/npm/node_modules/glob/test/negation-test.js b/deps/npm/node_modules/glob/test/negation-test.js
deleted file mode 100644
index fc679e2cf..000000000
--- a/deps/npm/node_modules/glob/test/negation-test.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Negation test
-// Show that glob respect's minimatch's negate flag
-
-var glob = require('../glob.js')
-var test = require('tap').test
-
-test('glob respects minimatch negate flag when activated with leading !', function(t) {
- var expect = ["abcdef/g", "abcfed/g", "c/d", "cb/e", "symlink/a"]
- var results = glob("!b**/*", {cwd: 'a'}, function (er, results) {
- if (er)
- throw er
-
- t.same(results, expect)
- t.end()
- });
-});
diff --git a/deps/npm/node_modules/glob/test/new-glob-optional-options.js b/deps/npm/node_modules/glob/test/new-glob-optional-options.js
deleted file mode 100644
index 3e7dc5acb..000000000
--- a/deps/npm/node_modules/glob/test/new-glob-optional-options.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var Glob = require('../glob.js').Glob;
-var test = require('tap').test;
-
-test('new glob, with cb, and no options', function (t) {
- new Glob(__filename, function(er, results) {
- if (er) throw er;
- t.same(results, [__filename]);
- t.end();
- });
-});
diff --git a/deps/npm/node_modules/glob/test/nocase-nomagic.js b/deps/npm/node_modules/glob/test/nocase-nomagic.js
deleted file mode 100644
index 5a29b0859..000000000
--- a/deps/npm/node_modules/glob/test/nocase-nomagic.js
+++ /dev/null
@@ -1,125 +0,0 @@
-var fs
-try { fs = require('graceful-fs') } catch (e) { fs = require('fs') }
-var test = require('tap').test;
-var glob = require('../');
-
-test('mock fs', function(t) {
- var stat = fs.stat
- var statSync = fs.statSync
- var readdir = fs.readdir
- var readdirSync = fs.readdirSync
-
- function fakeStat(path) {
- var ret
- switch (path.toLowerCase()) {
- case '/tmp': case '/tmp/': case 'c:\\tmp': case 'c:\\tmp\\':
- ret = { isDirectory: function() { return true } }
- break
- case '/tmp/a': case 'c:\\tmp\\a':
- ret = { isDirectory: function() { return false } }
- break
- }
- return ret
- }
-
- fs.stat = function(path, cb) {
- var f = fakeStat(path);
- if (f) {
- process.nextTick(function() {
- cb(null, f)
- })
- } else {
- stat.call(fs, path, cb)
- }
- }
-
- fs.statSync = function(path) {
- return fakeStat(path) || statSync.call(fs, path)
- }
-
- function fakeReaddir(path) {
- var ret
- switch (path.toLowerCase()) {
- case '/tmp': case '/tmp/': case 'c:\\tmp': case 'c:\\tmp\\':
- ret = [ 'a', 'A' ]
- break
- case '/': case 'c:\\':
- ret = ['tmp', 'tMp', 'tMP', 'TMP']
- }
- return ret
- }
-
- fs.readdir = function(path, cb) {
- var f = fakeReaddir(path)
- if (f)
- process.nextTick(function() {
- cb(null, f)
- })
- else
- readdir.call(fs, path, cb)
- }
-
- fs.readdirSync = function(path) {
- return fakeReaddir(path) || readdirSync.call(fs, path)
- }
-
- t.pass('mocked')
- t.end()
-})
-
-test('nocase, nomagic', function(t) {
- var n = 2
- var want = [ '/TMP/A',
- '/TMP/a',
- '/tMP/A',
- '/tMP/a',
- '/tMp/A',
- '/tMp/a',
- '/tmp/A',
- '/tmp/a' ]
- if(process.platform.match(/^win/)) {
- want = want.map(function(p) {
- return 'C:' + p
- })
- }
- glob('/tmp/a', { nocase: true }, function(er, res) {
- if (er)
- throw er
- t.same(res.sort(), want)
- if (--n === 0) t.end()
- })
- glob('/tmp/A', { nocase: true }, function(er, res) {
- if (er)
- throw er
- t.same(res.sort(), want)
- if (--n === 0) t.end()
- })
-})
-
-test('nocase, with some magic', function(t) {
- t.plan(2)
- var want = [ '/TMP/A',
- '/TMP/a',
- '/tMP/A',
- '/tMP/a',
- '/tMp/A',
- '/tMp/a',
- '/tmp/A',
- '/tmp/a' ]
- if(process.platform.match(/^win/)) {
- want = want.map(function(p) {
- return 'C:' + p
- })
- }
-
- glob('/tmp/*', { nocase: true }, function(er, res) {
- if (er)
- throw er
- t.same(res.sort(), want)
- })
- glob('/tmp/*', { nocase: true }, function(er, res) {
- if (er)
- throw er
- t.same(res.sort(), want)
- })
-})
diff --git a/deps/npm/node_modules/glob/test/pause-resume.js b/deps/npm/node_modules/glob/test/pause-resume.js
deleted file mode 100644
index e1ffbab1c..000000000
--- a/deps/npm/node_modules/glob/test/pause-resume.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// show that no match events happen while paused.
-var tap = require("tap")
-, child_process = require("child_process")
-// just some gnarly pattern with lots of matches
-, pattern = "test/a/!(symlink)/**"
-, bashResults = require("./bash-results.json")
-, patterns = Object.keys(bashResults)
-, glob = require("../")
-, Glob = glob.Glob
-, path = require("path")
-
-// run from the root of the project
-// this is usually where you're at anyway, but be sure.
-process.chdir(path.resolve(__dirname, ".."))
-
-function alphasort (a, b) {
- a = a.toLowerCase()
- b = b.toLowerCase()
- return a > b ? 1 : a < b ? -1 : 0
-}
-
-function cleanResults (m) {
- // normalize discrepancies in ordering, duplication,
- // and ending slashes.
- return m.map(function (m) {
- return m.replace(/\/+/g, "/").replace(/\/$/, "")
- }).sort(alphasort).reduce(function (set, f) {
- if (f !== set[set.length - 1]) set.push(f)
- return set
- }, []).sort(alphasort).map(function (f) {
- // de-windows
- return (process.platform !== 'win32') ? f
- : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/')
- })
-}
-
-var globResults = []
-tap.test("use a Glob object, and pause/resume it", function (t) {
- var g = new Glob(pattern)
- , paused = false
- , res = []
- , expect = bashResults[pattern]
-
- g.on("pause", function () {
- console.error("pause")
- })
-
- g.on("resume", function () {
- console.error("resume")
- })
-
- g.on("match", function (m) {
- t.notOk(g.paused, "must not be paused")
- globResults.push(m)
- g.pause()
- t.ok(g.paused, "must be paused")
- setTimeout(g.resume.bind(g), 10)
- })
-
- g.on("end", function (matches) {
- t.pass("reached glob end")
- globResults = cleanResults(globResults)
- matches = cleanResults(matches)
- t.deepEqual(matches, globResults,
- "end event matches should be the same as match events")
-
- t.deepEqual(matches, expect,
- "glob matches should be the same as bash results")
-
- t.end()
- })
-})
-
diff --git a/deps/npm/node_modules/glob/test/readme-issue.js b/deps/npm/node_modules/glob/test/readme-issue.js
deleted file mode 100644
index 0b4e0be29..000000000
--- a/deps/npm/node_modules/glob/test/readme-issue.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var test = require("tap").test
-var glob = require("../")
-
-var mkdirp = require("mkdirp")
-var fs = require("fs")
-var rimraf = require("rimraf")
-var dir = __dirname + "/package"
-
-test("setup", function (t) {
- mkdirp.sync(dir)
- fs.writeFileSync(dir + "/package.json", "{}", "ascii")
- fs.writeFileSync(dir + "/README", "x", "ascii")
- t.pass("setup done")
- t.end()
-})
-
-test("glob", function (t) {
- var opt = {
- cwd: dir,
- nocase: true,
- mark: true
- }
-
- glob("README?(.*)", opt, function (er, files) {
- if (er)
- throw er
- t.same(files, ["README"])
- t.end()
- })
-})
-
-test("cleanup", function (t) {
- rimraf.sync(dir)
- t.pass("clean")
- t.end()
-})
diff --git a/deps/npm/node_modules/glob/test/root-nomount.js b/deps/npm/node_modules/glob/test/root-nomount.js
deleted file mode 100644
index 3ac5979b0..000000000
--- a/deps/npm/node_modules/glob/test/root-nomount.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var tap = require("tap")
-
-var origCwd = process.cwd()
-process.chdir(__dirname)
-
-tap.test("changing root and searching for /b*/**", function (t) {
- var glob = require('../')
- var path = require('path')
- t.test('.', function (t) {
- glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) {
- t.ifError(er)
- t.like(matches, [])
- t.end()
- })
- })
-
- t.test('a', function (t) {
- glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ])
- t.end()
- })
- })
-
- t.test('root=a, cwd=a/b', function (t) {
- glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ])
- t.end()
- })
- })
-
- t.test('cd -', function (t) {
- process.chdir(origCwd)
- t.end()
- })
-
- t.end()
-})
diff --git a/deps/npm/node_modules/glob/test/root.js b/deps/npm/node_modules/glob/test/root.js
deleted file mode 100644
index 95c23f99c..000000000
--- a/deps/npm/node_modules/glob/test/root.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var t = require("tap")
-
-var origCwd = process.cwd()
-process.chdir(__dirname)
-
-var glob = require('../')
-var path = require('path')
-
-t.test('.', function (t) {
- glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) {
- t.ifError(er)
- t.like(matches, [])
- t.end()
- })
-})
-
-
-t.test('a', function (t) {
- console.error("root=" + path.resolve('a'))
- glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) {
- t.ifError(er)
- var wanted = [
- '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f'
- ].map(function (m) {
- return path.join(path.resolve('a'), m).replace(/\\/g, '/')
- })
-
- t.like(matches, wanted)
- t.end()
- })
-})
-
-t.test('root=a, cwd=a/b', function (t) {
- glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) {
- t.ifError(er)
- t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) {
- return path.join(path.resolve('a'), m).replace(/\\/g, '/')
- }))
- t.end()
- })
-})
-
-t.test('cd -', function (t) {
- process.chdir(origCwd)
- t.end()
-})
diff --git a/deps/npm/node_modules/glob/test/stat.js b/deps/npm/node_modules/glob/test/stat.js
deleted file mode 100644
index f555b39b1..000000000
--- a/deps/npm/node_modules/glob/test/stat.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var glob = require('../')
-var test = require('tap').test
-var path = require('path')
-
-test('stat all the things', function(t) {
- var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname })
- var matches = []
- g.on('match', function(m) {
- matches.push(m)
- })
- var stats = []
- g.on('stat', function(m) {
- stats.push(m)
- })
- g.on('end', function(eof) {
- stats = stats.sort()
- matches = matches.sort()
- eof = eof.sort()
- t.same(stats, matches)
- t.same(eof, matches)
- var cache = Object.keys(this.statCache)
- t.same(cache.map(function (f) {
- return path.relative(__dirname, f).replace(/\\/g, '/')
- }).sort(), matches)
-
- cache.forEach(function(c) {
- t.equal(typeof this.statCache[c], 'object')
- }, this)
-
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/glob/test/zz-cleanup.js b/deps/npm/node_modules/glob/test/zz-cleanup.js
deleted file mode 100644
index e085f0fa7..000000000
--- a/deps/npm/node_modules/glob/test/zz-cleanup.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// remove the fixtures
-var tap = require("tap")
-, rimraf = require("rimraf")
-, path = require("path")
-
-tap.test("cleanup fixtures", function (t) {
- rimraf(path.resolve(__dirname, "a"), function (er) {
- t.ifError(er, "removed")
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/graceful-fs/fs.js b/deps/npm/node_modules/graceful-fs/fs.js
index ae9fd6f61..64ad98023 100644
--- a/deps/npm/node_modules/graceful-fs/fs.js
+++ b/deps/npm/node_modules/graceful-fs/fs.js
@@ -8,4 +8,4 @@ var post = '});'
var src = pre + process.binding('natives').fs + post
var vm = require('vm')
var fn = vm.runInThisContext(src)
-return fn(exports, require, module, __filename, __dirname)
+fn(exports, require, module, __filename, __dirname)
diff --git a/deps/npm/node_modules/graceful-fs/package.json b/deps/npm/node_modules/graceful-fs/package.json
index 57ce64885..c373eebb7 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.4",
+ "version": "3.0.5",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-graceful-fs.git"
@@ -43,15 +43,16 @@
"rimraf": "^2.2.8",
"tap": "^0.4.13"
},
- "gitHead": "d3fd03247ccc4fa8a3eee399307fd266c70efb06",
+ "gitHead": "a6cd37cff01ac3af8d0ab2fd180290538fabd326",
"bugs": {
"url": "https://github.com/isaacs/node-graceful-fs/issues"
},
"homepage": "https://github.com/isaacs/node-graceful-fs",
- "_id": "graceful-fs@3.0.4",
- "_shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3",
- "_from": "graceful-fs@>=3.0.4 <4.0.0",
- "_npmVersion": "1.4.28",
+ "_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",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -63,9 +64,9 @@
}
],
"dist": {
- "shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3",
- "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz"
+ "shasum": "4a880474bdeb716fe3278cf29792dec38dfac418",
+ "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
},
- "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz",
+ "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/ini/LICENSE b/deps/npm/node_modules/ini/LICENSE
index 05a401094..19129e315 100644
--- a/deps/npm/node_modules/ini/LICENSE
+++ b/deps/npm/node_modules/ini/LICENSE
@@ -1,23 +1,15 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC 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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+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", 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.
+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/ini/package.json b/deps/npm/node_modules/ini/package.json
index 3042c4062..a910b7886 100644
--- a/deps/npm/node_modules/ini/package.json
+++ b/deps/npm/node_modules/ini/package.json
@@ -6,7 +6,7 @@
},
"name": "ini",
"description": "An ini encoder/decoder for node",
- "version": "1.3.0",
+ "version": "1.3.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/ini.git"
@@ -22,15 +22,17 @@
"devDependencies": {
"tap": "~0.4.0"
},
- "gitHead": "6c314944d0201f3199e1189aeb5687d0aaf1c575",
+ "license": "ISC",
+ "gitHead": "bbe4a8bb09afa58f724c04ce43a49037cabeadfb",
"bugs": {
"url": "https://github.com/isaacs/ini/issues"
},
"homepage": "https://github.com/isaacs/ini",
- "_id": "ini@1.3.0",
- "_shasum": "625483e56c643a7721014c76604d3353f44bd429",
- "_from": "ini@>=1.3.0 <2.0.0",
- "_npmVersion": "2.0.0",
+ "_id": "ini@1.3.2",
+ "_shasum": "9ebf4a44daf9d89acd07aab9f89a083d887f6dec",
+ "_from": "ini@>=1.3.2 <1.4.0",
+ "_npmVersion": "2.1.9",
+ "_nodeVersion": "0.10.16",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -42,10 +44,9 @@
}
],
"dist": {
- "shasum": "625483e56c643a7721014c76604d3353f44bd429",
- "tarball": "http://registry.npmjs.org/ini/-/ini-1.3.0.tgz"
+ "shasum": "9ebf4a44daf9d89acd07aab9f89a083d887f6dec",
+ "tarball": "http://registry.npmjs.org/ini/-/ini-1.3.2.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.0.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.2.tgz"
}
diff --git a/deps/npm/node_modules/init-package-json/default-input.js b/deps/npm/node_modules/init-package-json/default-input.js
index c86894b26..068bb00a8 100644
--- a/deps/npm/node_modules/init-package-json/default-input.js
+++ b/deps/npm/node_modules/init-package-json/default-input.js
@@ -41,7 +41,10 @@ function readDeps (test) { return function (cb) {
var name = package.name || basename
exports.name = yes ? name : prompt('name', name)
-var version = package.version || config.get('init-version') || '1.0.0'
+var version = package.version ||
+ config.get('init.version') ||
+ config.get('init-version') ||
+ '1.0.0'
exports.version = yes ? version : prompt('version', version)
if (!package.description) {
@@ -177,14 +180,21 @@ if (!package.keywords) {
}
if (!package.author) {
- exports.author = config.get('init-author-name')
+ exports.author = config.get('init.author.name') ||
+ config.get('init-author-name')
? {
- "name" : config.get('init-author-name'),
- "email" : config.get('init-author-email'),
- "url" : config.get('init-author-url')
+ "name" : config.get('init.author.name') ||
+ config.get('init-author-name'),
+ "email" : config.get('init.author.email') ||
+ config.get('init-author-email'),
+ "url" : config.get('init.author.url') ||
+ config.get('init-author-url')
}
: prompt('author')
}
-var license = package.license || config.get('init-license') || 'ISC'
+var license = package.license ||
+ config.get('init.license') ||
+ config.get('init-license') ||
+ 'ISC'
exports.license = yes ? license : prompt('license', license)
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
index f66857539..c15c77224 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
@@ -44,6 +44,5 @@
"tarball": "http://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
}
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index 54aa7cbdf..de90de620 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "init-package-json",
- "version": "1.1.1",
+ "version": "1.1.3",
"main": "init-package-json.js",
"scripts": {
"test": "tap test/*.js"
@@ -40,12 +40,12 @@
],
"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": "a4df4e57f9b6a2bf906ad50612dbed7dcb2f2c2b",
+ "gitHead": "b766900b2d615ddc43c452e251b8c5543538e832",
"bugs": {
"url": "https://github.com/isaacs/init-package-json/issues"
},
"homepage": "https://github.com/isaacs/init-package-json",
- "_id": "init-package-json@1.1.1",
- "_shasum": "e09e9f1fb541e0fddc9175c5ce1736fd45ff4bf8",
- "_from": "init-package-json@>=1.1.1 <2.0.0"
+ "_id": "init-package-json@1.1.3",
+ "_shasum": "1d633c151a4909891afc8ee13cace8b336c0c9c2",
+ "_from": "init-package-json@>=1.1.3 <1.2.0"
}
diff --git a/deps/npm/node_modules/init-package-json/test/npm-defaults.js b/deps/npm/node_modules/init-package-json/test/npm-defaults.js
index 8229c84a0..f65f64631 100644
--- a/deps/npm/node_modules/init-package-json/test/npm-defaults.js
+++ b/deps/npm/node_modules/init-package-json/test/npm-defaults.js
@@ -32,6 +32,14 @@ test("npm configuration values pulled from environment", function (t) {
npm.load({}, function (err) {
t.ifError(err, "npm loaded successfully")
+ // clear out dotted names from test environment
+ npm.config.del("init.author.name")
+ npm.config.del("init.author.email")
+ npm.config.del("init.author.url")
+ // the following have npm defaults, and need to be explicitly overridden
+ npm.config.set("init.license", "")
+ npm.config.set("init.version", "")
+
process.chdir(resolve(__dirname))
init(__dirname, __dirname, npm.config, function (er, data) {
t.ifError(err, "init ran successfully")
@@ -42,6 +50,58 @@ test("npm configuration values pulled from environment", function (t) {
})
})
+test("npm configuration values pulled from dotted config", function (t) {
+ /*eslint camelcase:0 */
+ var config = {
+ yes : "yes",
+
+ "init.author.name" : "npmbot",
+ "init.author.email" : "n@p.m",
+ "init.author.url" : "http://npm.im",
+
+ "init.license" : EXPECTED.license,
+ "init.version" : EXPECTED.version
+ }
+
+ npm.load(config, function (err) {
+ t.ifError(err, "npm loaded successfully")
+
+ process.chdir(resolve(__dirname))
+ init(__dirname, __dirname, npm.config, function (er, data) {
+ t.ifError(err, "init ran successfully")
+
+ t.same(data, EXPECTED, "got the package data from the config")
+ t.end()
+ })
+ })
+})
+
+test("npm configuration values pulled from dashed config", function (t) {
+ /*eslint camelcase:0 */
+ var config = {
+ yes : "yes",
+
+ "init-author-name" : "npmbot",
+ "init-author-email" : "n@p.m",
+ "init-author-url" : "http://npm.im",
+
+ "init-license" : EXPECTED.license,
+ "init-version" : EXPECTED.version
+ }
+
+ npm.load(config, function (err) {
+ t.ifError(err, "npm loaded successfully")
+
+ process.chdir(resolve(__dirname))
+ init(__dirname, __dirname, npm.config, function (er, data) {
+ t.ifError(err, "init ran successfully")
+
+ t.same(data, EXPECTED, "got the package data from the config")
+ t.end()
+ })
+ })
+})
+
test("cleanup", function (t) {
rimraf.sync(resolve(__dirname, "package.json"))
t.pass("cleaned up")
diff --git a/deps/npm/node_modules/minimatch/.npmignore b/deps/npm/node_modules/minimatch/.npmignore
index 3c3629e64..b2a4ba591 100644
--- a/deps/npm/node_modules/minimatch/.npmignore
+++ b/deps/npm/node_modules/minimatch/.npmignore
@@ -1 +1 @@
-node_modules
+# nothing here
diff --git a/deps/npm/node_modules/minimatch/README.md b/deps/npm/node_modules/minimatch/README.md
index 5b3967ea9..d458bc2e0 100644
--- a/deps/npm/node_modules/minimatch/README.md
+++ b/deps/npm/node_modules/minimatch/README.md
@@ -7,8 +7,6 @@ A minimal matching utility.
This is the matching library used internally by npm.
-Eventually, it will replace the C binding in node-glob.
-
It works by converting glob expressions into JavaScript `RegExp`
objects.
diff --git a/deps/npm/node_modules/minimatch/benchmark.js b/deps/npm/node_modules/minimatch/benchmark.js
new file mode 100644
index 000000000..e7deca390
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/benchmark.js
@@ -0,0 +1,15 @@
+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
new file mode 100644
index 000000000..2b86fae24
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/browser.js
@@ -0,0 +1,1181 @@
+(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
+
+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
+ }
+
+ // 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, "\\$&")
+}
+
+}).call(this,require('_process'))
+},{"_process":5,"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;
+};
+
+},{}],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 47617868b..6958cdc48 100644
--- a/deps/npm/node_modules/minimatch/minimatch.js
+++ b/deps/npm/node_modules/minimatch/minimatch.js
@@ -1,43 +1,13 @@
-;(function (require, exports, module, platform) {
-
-if (module) module.exports = minimatch
-else exports.minimatch = minimatch
-
-if (!require) {
- require = function (id) {
- switch (id) {
- case "sigmund": return function sigmund (obj) {
- return JSON.stringify(obj)
- }
- case "path": return { basename: function (f) {
- f = f.split(/[\/\\]/)
- var e = f.pop()
- if (!e) e = f.pop()
- return e
- }}
- case "lru-cache": return function LRUCache () {
- // not quite an LRU, but still space-limited.
- var cache = {}
- var cnt = 0
- this.set = function (k, v) {
- cnt ++
- if (cnt >= 100) cache = {}
- cache[k] = v
- }
- this.get = function (k) { return cache[k] }
- }
- }
- }
-}
-
+module.exports = minimatch
minimatch.Minimatch = Minimatch
-var LRU = require("lru-cache")
- , cache = minimatch.cache = new LRU({max: 100})
- , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
- , sigmund = require("sigmund")
+var isWindows = false
+if (typeof process !== 'undefined' && process.platform === 'win32')
+ isWindows = true
+
+var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
+ , expand = require("brace-expansion")
-var path = require("path")
// any single thing other than /
// don't need to escape / when using new RegExp()
, qmark = "[^/]"
@@ -131,7 +101,7 @@ function minimatch (p, pattern, options) {
function Minimatch (pattern, options) {
if (!(this instanceof Minimatch)) {
- return new Minimatch(pattern, options, cache)
+ return new Minimatch(pattern, options)
}
if (typeof pattern !== "string") {
@@ -141,19 +111,9 @@ function Minimatch (pattern, options) {
if (!options) options = {}
pattern = pattern.trim()
- // windows: need to use /, not \
- // On other platforms, \ is a valid (albeit bad) filename char.
- if (platform === "win32") {
+ // windows support: need to use /, not \
+ if (isWindows)
pattern = pattern.split("\\").join("/")
- }
-
- // lru storage.
- // these things aren't particularly big, but walking down the string
- // and turning it into a regexp can get pretty costly.
- var cacheKey = pattern + "\n" + sigmund(options)
- var cached = minimatch.cache.get(cacheKey)
- if (cached) return cached
- minimatch.cache.set(cacheKey, this)
this.options = options
this.set = []
@@ -256,19 +216,19 @@ function parseNegate () {
// a{2..}b -> a{2..}b
// a{b}c -> a{b}c
minimatch.braceExpand = function (pattern, options) {
- return new Minimatch(pattern, options).braceExpand()
+ return braceExpand(pattern, options)
}
Minimatch.prototype.braceExpand = braceExpand
-function pad(n, width, z) {
- z = z || '0';
- n = n + '';
- return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
-}
-
function braceExpand (pattern, options) {
- options = options || this.options
+ if (!options) {
+ if (this instanceof Minimatch)
+ options = this.options
+ else
+ options = {}
+ }
+
pattern = typeof pattern === "undefined"
? this.pattern : pattern
@@ -282,187 +242,7 @@ function braceExpand (pattern, options) {
return [pattern]
}
- var escaping = false
-
- // examples and comments refer to this crazy pattern:
- // a{b,c{d,e},{f,g}h}x{y,z}
- // expected:
- // abxy
- // abxz
- // acdxy
- // acdxz
- // acexy
- // acexz
- // afhxy
- // afhxz
- // aghxy
- // aghxz
-
- // everything before the first \{ is just a prefix.
- // So, we pluck that off, and work with the rest,
- // and then prepend it to everything we find.
- if (pattern.charAt(0) !== "{") {
- this.debug(pattern)
- var prefix = null
- for (var i = 0, l = pattern.length; i < l; i ++) {
- var c = pattern.charAt(i)
- this.debug(i, c)
- if (c === "\\") {
- escaping = !escaping
- } else if (c === "{" && !escaping) {
- prefix = pattern.substr(0, i)
- break
- }
- }
-
- // actually no sets, all { were escaped.
- if (prefix === null) {
- this.debug("no sets")
- return [pattern]
- }
-
- var tail = braceExpand.call(this, pattern.substr(i), options)
- return tail.map(function (t) {
- return prefix + t
- })
- }
-
- // now we have something like:
- // {b,c{d,e},{f,g}h}x{y,z}
- // walk through the set, expanding each part, until
- // the set ends. then, we'll expand the suffix.
- // If the set only has a single member, then'll put the {} back
-
- // first, handle numeric sets, since they're easier
- var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/)
- if (numset) {
- this.debug("numset", numset[1], numset[2])
- var suf = braceExpand.call(this, pattern.substr(numset[0].length), options)
- , start = +numset[1]
- , needPadding = numset[1][0] === '0'
- , startWidth = numset[1].length
- , padded
- , end = +numset[2]
- , inc = start > end ? -1 : 1
- , set = []
-
- for (var i = start; i != (end + inc); i += inc) {
- padded = needPadding ? pad(i, startWidth) : i + ''
- // append all the suffixes
- for (var ii = 0, ll = suf.length; ii < ll; ii ++) {
- set.push(padded + suf[ii])
- }
- }
- return set
- }
-
- // ok, walk through the set
- // We hope, somewhat optimistically, that there
- // will be a } at the end.
- // If the closing brace isn't found, then the pattern is
- // interpreted as braceExpand("\\" + pattern) so that
- // the leading \{ will be interpreted literally.
- var i = 1 // skip the \{
- , depth = 1
- , set = []
- , member = ""
- , sawEnd = false
- , escaping = false
-
- function addMember () {
- set.push(member)
- member = ""
- }
-
- this.debug("Entering for")
- FOR: for (i = 1, l = pattern.length; i < l; i ++) {
- var c = pattern.charAt(i)
- this.debug("", i, c)
-
- if (escaping) {
- escaping = false
- member += "\\" + c
- } else {
- switch (c) {
- case "\\":
- escaping = true
- continue
-
- case "{":
- depth ++
- member += "{"
- continue
-
- case "}":
- depth --
- // if this closes the actual set, then we're done
- if (depth === 0) {
- addMember()
- // pluck off the close-brace
- i ++
- break FOR
- } else {
- member += c
- continue
- }
-
- case ",":
- if (depth === 1) {
- addMember()
- } else {
- member += c
- }
- continue
-
- default:
- member += c
- continue
- } // switch
- } // else
- } // for
-
- // now we've either finished the set, and the suffix is
- // pattern.substr(i), or we have *not* closed the set,
- // and need to escape the leading brace
- if (depth !== 0) {
- this.debug("didn't close", pattern)
- return braceExpand.call(this, "\\" + pattern, options)
- }
-
- // x{y,z} -> ["xy", "xz"]
- this.debug("set", set)
- this.debug("suffix", pattern.substr(i))
- var suf = braceExpand.call(this, pattern.substr(i), options)
- // ["b", "c{d,e}","{f,g}h"] ->
- // [["b"], ["cd", "ce"], ["fh", "gh"]]
- var addBraces = set.length === 1
- this.debug("set pre-expanded", set)
- set = set.map(function (p) {
- return braceExpand.call(this, p, options)
- }, this)
- this.debug("set expanded", set)
-
-
- // [["b"], ["cd", "ce"], ["fh", "gh"]] ->
- // ["b", "cd", "ce", "fh", "gh"]
- set = set.reduce(function (l, r) {
- return l.concat(r)
- })
-
- if (addBraces) {
- set = set.map(function (s) {
- return "{" + s + "}"
- })
- }
-
- // now attach the suffixes.
- var ret = []
- for (var i = 0, l = set.length; i < l; i ++) {
- for (var ii = 0, ll = suf.length; ii < ll; ii ++) {
- ret.push(set[i] + suf[ii])
- }
- }
- return ret
+ return expand(pattern)
}
// parse a component of the expanded set.
@@ -849,10 +629,8 @@ function match (f, partial) {
var options = this.options
// windows: need to use /, not \
- // On other platforms, \ is a valid (albeit bad) filename char.
- if (platform === "win32") {
+ if (isWindows)
f = f.split("\\").join("/")
- }
// treat the test path as a set of pathparts.
f = f.split(slashSplit)
@@ -1065,9 +843,3 @@ function globUnescape (s) {
function regExpEscape (s) {
return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
}
-
-})( typeof require === "function" ? require : null,
- this,
- typeof module === "object" ? module : null,
- typeof process === "object" ? process.platform : "win32"
- )
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/.npmignore b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/.npmignore
new file mode 100644
index 000000000..249bc20eb
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/.npmignore
@@ -0,0 +1,2 @@
+node_modules
+*.sw*
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/.travis.yml b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
new file mode 100644
index 000000000..6e5919de3
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "0.10"
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md
new file mode 100644
index 000000000..f23049dc3
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/README.md
@@ -0,0 +1,116 @@
+# 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.png)](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
+```
+
+## 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/minimatch/node_modules/brace-expansion/example.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/example.js
new file mode 100644
index 000000000..60ecfc74d
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/example.js
@@ -0,0 +1,8 @@
+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/minimatch/node_modules/brace-expansion/index.bak
new file mode 100644
index 000000000..71b53671d
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.bak
@@ -0,0 +1,198 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+
+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];
+
+ var isNumericSequence = exprNumericSeq.test(m.body);
+ var isAlphaSequence = exprAlphaSeq.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = exprIsOptions.test(m.body);
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (exprCommaBrace.test(m.post)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str, false);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.js
new file mode 100644
index 000000000..a23104e95
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/index.js
@@ -0,0 +1,191 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = /^(.*,)+(.+)?$/.test(m.body);
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore
new file mode 100644
index 000000000..fd4f2b066
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml
new file mode 100644
index 000000000..cc4dba29d
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
new file mode 100644
index 000000000..fa5da71a6
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile
@@ -0,0 +1,6 @@
+
+test:
+ @node_modules/.bin/tape test/*.js
+
+.PHONY: test
+
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md
new file mode 100644
index 000000000..2aff0ebff
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
new file mode 100644
index 000000000..c02ad348e
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js
@@ -0,0 +1,5 @@
+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/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
new file mode 100644
index 000000000..d165ae817
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json
new file mode 100644
index 000000000..ede6efefa
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js
new file mode 100644
index 000000000..36bfd3995
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml
new file mode 100644
index 000000000..f1d0f13c8
--- /dev/null
+++ b/deps/npm/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/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
new file mode 100644
index 000000000..57359ff5a
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown
@@ -0,0 +1,60 @@
+concat-map
+==========
+
+Concatenative mapdashery.
+
+[![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/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js
new file mode 100644
index 000000000..33656217b
--- /dev/null
+++ b/deps/npm/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/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
new file mode 100644
index 000000000..b58da7ac9
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js
@@ -0,0 +1,9 @@
+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;
+};
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
new file mode 100644
index 000000000..ff38e384e
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json
@@ -0,0 +1,64 @@
+{
+ "name": "concat-map",
+ "description": "concatenative mapdashery",
+ "version": "0.0.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/node-concat-map.git"
+ },
+ "main": "index.js",
+ "keywords": [
+ "concat",
+ "map",
+ "functional",
+ "higher-order"
+ ],
+ "directories": {
+ "example": "example",
+ "test": "test"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "devDependencies": {
+ "tap": "~0.2.5"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ },
+ "license": "MIT",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "_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"
+}
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
new file mode 100644
index 000000000..6ace3459c
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js
@@ -0,0 +1,39 @@
+var concatMap = require('../');
+var test = require('tap').test;
+
+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/minimatch/node_modules/brace-expansion/package.json b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/package.json
new file mode 100644
index 000000000..e9b15ce89
--- /dev/null
+++ b/deps/npm/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.0.1",
+ "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.0"
+ },
+ "devDependencies": {
+ "tape": "~1.1.1"
+ },
+ "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": "ceba9627f19c590feb7df404e1d6c41f8c01b93a",
+ "bugs": {
+ "url": "https://github.com/juliangruber/brace-expansion/issues"
+ },
+ "_id": "brace-expansion@1.0.1",
+ "_shasum": "817708d72ab27a8c312d25efababaea963439ed5",
+ "_from": "brace-expansion@>=1.0.0 <2.0.0",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.16",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ }
+ ],
+ "dist": {
+ "shasum": "817708d72ab27a8c312d25efababaea963439ed5",
+ "tarball": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js
new file mode 100644
index 000000000..5fe2b8ad4
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/bash-results.txt b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt
new file mode 100644
index 000000000..958148d26
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/cases.txt b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt
new file mode 100644
index 000000000..e5161c3da
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/dollar.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js
new file mode 100644
index 000000000..3fcc185a7
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/empty-option.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js
new file mode 100644
index 000000000..e429121ea
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js
@@ -0,0 +1,10 @@
+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/minimatch/node_modules/brace-expansion/test/generate.sh b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh
new file mode 100644
index 000000000..e040e664d
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/negative-increment.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js
new file mode 100644
index 000000000..8d434c23d
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/nested.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/nested.js
new file mode 100644
index 000000000..0862dc51f
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/nested.js
@@ -0,0 +1,16 @@
+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/minimatch/node_modules/brace-expansion/test/order.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/order.js
new file mode 100644
index 000000000..c00ad155f
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/order.js
@@ -0,0 +1,10 @@
+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/minimatch/node_modules/brace-expansion/test/pad.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/pad.js
new file mode 100644
index 000000000..e4158775f
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/pad.js
@@ -0,0 +1,13 @@
+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/minimatch/node_modules/brace-expansion/test/same-type.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js
new file mode 100644
index 000000000..3038fba74
--- /dev/null
+++ b/deps/npm/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/minimatch/node_modules/brace-expansion/test/sequence.js b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js
new file mode 100644
index 000000000..f73a9579a
--- /dev/null
+++ b/deps/npm/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js
@@ -0,0 +1,50 @@
+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/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json
index d96e1d36f..f0083b91c 100644
--- a/deps/npm/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/minimatch/package.json
@@ -6,38 +6,40 @@
},
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "1.0.0",
+ "version": "2.0.1",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
},
"main": "minimatch.js",
"scripts": {
- "test": "tap test/*.js"
+ "test": "tap test/*.js",
+ "prepublish": "browserify -o browser.js -e minimatch.js"
},
"engines": {
"node": "*"
},
"dependencies": {
- "lru-cache": "2",
- "sigmund": "~1.0.0"
+ "brace-expansion": "^1.0.0"
},
"devDependencies": {
+ "browserify": "^6.3.3",
"tap": ""
},
"license": {
"type": "MIT",
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
},
- "gitHead": "b374a643976eb55cdc19c60b6dd51ebe9bcc607a",
+ "gitHead": "eac219d8f665c8043fda9a1cd34eab9b006fae01",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
"homepage": "https://github.com/isaacs/minimatch",
- "_id": "minimatch@1.0.0",
- "_shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
- "_from": "minimatch@latest",
- "_npmVersion": "1.4.21",
+ "_id": "minimatch@2.0.1",
+ "_shasum": "6c3760b45f66ed1cd5803143ee8d372488f02c37",
+ "_from": "minimatch@>=2.0.1 <2.1.0",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.16",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -49,10 +51,10 @@
}
],
"dist": {
- "shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
- "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz"
+ "shasum": "6c3760b45f66ed1cd5803143ee8d372488f02c37",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.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
index ae7ac73c7..b72edf889 100644
--- a/deps/npm/node_modules/minimatch/test/basic.js
+++ b/deps/npm/node_modules/minimatch/test/basic.js
@@ -381,7 +381,7 @@ tap.test("basic tests", function (t) {
, JSON.stringify(pattern) + " " + JSON.stringify(expect)
, tapOpts )
- t.equal(tapOpts.re, expectRe, tapOpts)
+ t.equal(tapOpts.re, expectRe, null, tapOpts)
})
t.comment("time=" + (Date.now() - start) + "ms")
diff --git a/deps/npm/node_modules/minimatch/test/brace-expand.js b/deps/npm/node_modules/minimatch/test/brace-expand.js
index e63d3f60c..67bc91354 100644
--- a/deps/npm/node_modules/minimatch/test/brace-expand.js
+++ b/deps/npm/node_modules/minimatch/test/brace-expand.js
@@ -22,12 +22,17 @@ tap.test("brace expansion", function (t) {
, "a5b" ] ]
, [ "a{b}c", ["a{b}c"] ]
, [ "a{00..05}b"
- , ["a00b"
- ,"a01b"
- ,"a02b"
- ,"a03b"
- ,"a04b"
- ,"a05b" ] ]
+ , [ "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]
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/.npmignore b/deps/npm/node_modules/node-gyp/node_modules/minimatch/.npmignore
new file mode 100644
index 000000000..3c3629e64
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/deps/npm/node_modules/glob/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/minimatch/.travis.yml
index fca8ef019..fca8ef019 100644
--- a/deps/npm/node_modules/glob/.travis.yml
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/.travis.yml
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/minimatch/LICENSE
new file mode 100644
index 000000000..05a401094
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/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/minimatch/README.md b/deps/npm/node_modules/node-gyp/node_modules/minimatch/README.md
new file mode 100644
index 000000000..5b3967ea9
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/README.md
@@ -0,0 +1,218 @@
+# 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.
+
+Eventually, it will replace the C binding in node-glob.
+
+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/minimatch/minimatch.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/minimatch.js
new file mode 100644
index 000000000..47617868b
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/minimatch.js
@@ -0,0 +1,1073 @@
+;(function (require, exports, module, platform) {
+
+if (module) module.exports = minimatch
+else exports.minimatch = minimatch
+
+if (!require) {
+ require = function (id) {
+ switch (id) {
+ case "sigmund": return function sigmund (obj) {
+ return JSON.stringify(obj)
+ }
+ case "path": return { basename: function (f) {
+ f = f.split(/[\/\\]/)
+ var e = f.pop()
+ if (!e) e = f.pop()
+ return e
+ }}
+ case "lru-cache": return function LRUCache () {
+ // not quite an LRU, but still space-limited.
+ var cache = {}
+ var cnt = 0
+ this.set = function (k, v) {
+ cnt ++
+ if (cnt >= 100) cache = {}
+ cache[k] = v
+ }
+ this.get = function (k) { return cache[k] }
+ }
+ }
+ }
+}
+
+minimatch.Minimatch = Minimatch
+
+var LRU = require("lru-cache")
+ , cache = minimatch.cache = new LRU({max: 100})
+ , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
+ , sigmund = require("sigmund")
+
+var path = require("path")
+ // 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, cache)
+ }
+
+ if (typeof pattern !== "string") {
+ throw new TypeError("glob pattern string required")
+ }
+
+ if (!options) options = {}
+ pattern = pattern.trim()
+
+ // windows: need to use /, not \
+ // On other platforms, \ is a valid (albeit bad) filename char.
+ if (platform === "win32") {
+ pattern = pattern.split("\\").join("/")
+ }
+
+ // lru storage.
+ // these things aren't particularly big, but walking down the string
+ // and turning it into a regexp can get pretty costly.
+ var cacheKey = pattern + "\n" + sigmund(options)
+ var cached = minimatch.cache.get(cacheKey)
+ if (cached) return cached
+ minimatch.cache.set(cacheKey, this)
+
+ 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 new Minimatch(pattern, options).braceExpand()
+}
+
+Minimatch.prototype.braceExpand = braceExpand
+
+function pad(n, width, z) {
+ z = z || '0';
+ n = n + '';
+ return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
+}
+
+function braceExpand (pattern, options) {
+ options = options || this.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]
+ }
+
+ var escaping = false
+
+ // examples and comments refer to this crazy pattern:
+ // a{b,c{d,e},{f,g}h}x{y,z}
+ // expected:
+ // abxy
+ // abxz
+ // acdxy
+ // acdxz
+ // acexy
+ // acexz
+ // afhxy
+ // afhxz
+ // aghxy
+ // aghxz
+
+ // everything before the first \{ is just a prefix.
+ // So, we pluck that off, and work with the rest,
+ // and then prepend it to everything we find.
+ if (pattern.charAt(0) !== "{") {
+ this.debug(pattern)
+ var prefix = null
+ for (var i = 0, l = pattern.length; i < l; i ++) {
+ var c = pattern.charAt(i)
+ this.debug(i, c)
+ if (c === "\\") {
+ escaping = !escaping
+ } else if (c === "{" && !escaping) {
+ prefix = pattern.substr(0, i)
+ break
+ }
+ }
+
+ // actually no sets, all { were escaped.
+ if (prefix === null) {
+ this.debug("no sets")
+ return [pattern]
+ }
+
+ var tail = braceExpand.call(this, pattern.substr(i), options)
+ return tail.map(function (t) {
+ return prefix + t
+ })
+ }
+
+ // now we have something like:
+ // {b,c{d,e},{f,g}h}x{y,z}
+ // walk through the set, expanding each part, until
+ // the set ends. then, we'll expand the suffix.
+ // If the set only has a single member, then'll put the {} back
+
+ // first, handle numeric sets, since they're easier
+ var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/)
+ if (numset) {
+ this.debug("numset", numset[1], numset[2])
+ var suf = braceExpand.call(this, pattern.substr(numset[0].length), options)
+ , start = +numset[1]
+ , needPadding = numset[1][0] === '0'
+ , startWidth = numset[1].length
+ , padded
+ , end = +numset[2]
+ , inc = start > end ? -1 : 1
+ , set = []
+
+ for (var i = start; i != (end + inc); i += inc) {
+ padded = needPadding ? pad(i, startWidth) : i + ''
+ // append all the suffixes
+ for (var ii = 0, ll = suf.length; ii < ll; ii ++) {
+ set.push(padded + suf[ii])
+ }
+ }
+ return set
+ }
+
+ // ok, walk through the set
+ // We hope, somewhat optimistically, that there
+ // will be a } at the end.
+ // If the closing brace isn't found, then the pattern is
+ // interpreted as braceExpand("\\" + pattern) so that
+ // the leading \{ will be interpreted literally.
+ var i = 1 // skip the \{
+ , depth = 1
+ , set = []
+ , member = ""
+ , sawEnd = false
+ , escaping = false
+
+ function addMember () {
+ set.push(member)
+ member = ""
+ }
+
+ this.debug("Entering for")
+ FOR: for (i = 1, l = pattern.length; i < l; i ++) {
+ var c = pattern.charAt(i)
+ this.debug("", i, c)
+
+ if (escaping) {
+ escaping = false
+ member += "\\" + c
+ } else {
+ switch (c) {
+ case "\\":
+ escaping = true
+ continue
+
+ case "{":
+ depth ++
+ member += "{"
+ continue
+
+ case "}":
+ depth --
+ // if this closes the actual set, then we're done
+ if (depth === 0) {
+ addMember()
+ // pluck off the close-brace
+ i ++
+ break FOR
+ } else {
+ member += c
+ continue
+ }
+
+ case ",":
+ if (depth === 1) {
+ addMember()
+ } else {
+ member += c
+ }
+ continue
+
+ default:
+ member += c
+ continue
+ } // switch
+ } // else
+ } // for
+
+ // now we've either finished the set, and the suffix is
+ // pattern.substr(i), or we have *not* closed the set,
+ // and need to escape the leading brace
+ if (depth !== 0) {
+ this.debug("didn't close", pattern)
+ return braceExpand.call(this, "\\" + pattern, options)
+ }
+
+ // x{y,z} -> ["xy", "xz"]
+ this.debug("set", set)
+ this.debug("suffix", pattern.substr(i))
+ var suf = braceExpand.call(this, pattern.substr(i), options)
+ // ["b", "c{d,e}","{f,g}h"] ->
+ // [["b"], ["cd", "ce"], ["fh", "gh"]]
+ var addBraces = set.length === 1
+ this.debug("set pre-expanded", set)
+ set = set.map(function (p) {
+ return braceExpand.call(this, p, options)
+ }, this)
+ this.debug("set expanded", set)
+
+
+ // [["b"], ["cd", "ce"], ["fh", "gh"]] ->
+ // ["b", "cd", "ce", "fh", "gh"]
+ set = set.reduce(function (l, r) {
+ return l.concat(r)
+ })
+
+ if (addBraces) {
+ set = set.map(function (s) {
+ return "{" + s + "}"
+ })
+ }
+
+ // now attach the suffixes.
+ var ret = []
+ for (var i = 0, l = set.length; i < l; i ++) {
+ for (var ii = 0, ll = suf.length; ii < ll; ii ++) {
+ ret.push(set[i] + suf[ii])
+ }
+ }
+ return ret
+}
+
+// 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
+ }
+
+ // 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 \
+ // On other platforms, \ is a valid (albeit bad) filename char.
+ if (platform === "win32") {
+ 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, "\\$&")
+}
+
+})( typeof require === "function" ? require : null,
+ this,
+ typeof module === "object" ? module : null,
+ typeof process === "object" ? process.platform : "win32"
+ )
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/LICENSE
index 0c44ae716..0c44ae716 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/LICENSE
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/LICENSE
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/README.md b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/README.md
index 7e365129e..7e365129e 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/README.md
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/README.md
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/bench.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/bench.js
index 5acfd6d90..5acfd6d90 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/bench.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/bench.js
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
index a1f755a7c..bd516c297 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/package.json
@@ -49,8 +49,8 @@
}
],
"_shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
- "_from": "sigmund@~1.0.0",
"_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz",
+ "_from": "sigmund@>=1.0.0 <1.1.0",
"bugs": {
"url": "https://github.com/isaacs/sigmund/issues"
},
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/sigmund.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/sigmund.js
index 82c7ab8ce..82c7ab8ce 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/sigmund.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/sigmund.js
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/test/basic.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/test/basic.js
index 50c53a13e..50c53a13e 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/test/basic.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/node_modules/sigmund/test/basic.js
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json b/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
new file mode 100644
index 000000000..8bf46ccae
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/package.json
@@ -0,0 +1,58 @@
+{
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me"
+ },
+ "name": "minimatch",
+ "description": "a glob matcher in javascript",
+ "version": "1.0.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/minimatch.git"
+ },
+ "main": "minimatch.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ },
+ "devDependencies": {
+ "tap": ""
+ },
+ "license": {
+ "type": "MIT",
+ "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
+ },
+ "gitHead": "b374a643976eb55cdc19c60b6dd51ebe9bcc607a",
+ "bugs": {
+ "url": "https://github.com/isaacs/minimatch/issues"
+ },
+ "homepage": "https://github.com/isaacs/minimatch",
+ "_id": "minimatch@1.0.0",
+ "_shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
+ "_from": "minimatch@>=1.0.0 <2.0.0",
+ "_npmVersion": "1.4.21",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "e0dd2120b49e1b724ce8d714c520822a9438576d",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/basic.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/basic.js
new file mode 100644
index 000000000..ae7ac73c7
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/basic.js
@@ -0,0 +1,399 @@
+// 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, 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/node-gyp/node_modules/minimatch/test/brace-expand.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js
new file mode 100644
index 000000000..e63d3f60c
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/brace-expand.js
@@ -0,0 +1,40 @@
+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" ] ]
+ ].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/caching.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/caching.js
index 0fec4b0fa..0fec4b0fa 100644
--- a/deps/npm/node_modules/minimatch/test/caching.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/caching.js
diff --git a/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/defaults.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/defaults.js
new file mode 100644
index 000000000..75e05712d
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/defaults.js
@@ -0,0 +1,274 @@
+// 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/node-gyp/node_modules/minimatch/test/extglob-ending-with-state-char.js b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/extglob-ending-with-state-char.js
new file mode 100644
index 000000000..6676e2629
--- /dev/null
+++ b/deps/npm/node_modules/node-gyp/node_modules/minimatch/test/extglob-ending-with-state-char.js
@@ -0,0 +1,8 @@
+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/package.json b/deps/npm/node_modules/node-gyp/package.json
index 2e2e47c7a..be8cb8818 100644
--- a/deps/npm/node_modules/node-gyp/package.json
+++ b/deps/npm/node_modules/node-gyp/package.json
@@ -52,7 +52,7 @@
"_id": "node-gyp@1.0.2",
"scripts": {},
"_shasum": "b0bb6d2d762271408dd904853e7aa3000ed2eb57",
- "_from": "node-gyp@>=1.0.1-0 <1.1.0-0",
+ "_from": "node-gyp@>=1.0.2 <1.1.0",
"_npmVersion": "2.0.0-beta.3",
"_npmUser": {
"name": "isaacs",
@@ -77,5 +77,6 @@
"tarball": "http://registry.npmjs.org/node-gyp/-/node-gyp-1.0.2.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.2.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 000000000..b54e30fd2
--- /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/normalize-git-url/.npmignore b/deps/npm/node_modules/normalize-git-url/.npmignore
new file mode 100644
index 000000000..c2658d7d1
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/.npmignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/deps/npm/node_modules/normalize-git-url/CHANGELOG.md b/deps/npm/node_modules/normalize-git-url/CHANGELOG.md
new file mode 100644
index 000000000..f2d2b94be
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/CHANGELOG.md
@@ -0,0 +1,5 @@
+### 1.0.0 (2014-12-25):
+
+* [`8b3d874`](https://github.com/npm/normalize-git-url/commit/8b3d874afd14f4cdde65d418e0a35a615c746bba)
+ Initial version, with simple tests.
+ ([@othiym23](https://github.com/othiym23))
diff --git a/deps/npm/node_modules/normalize-git-url/README.md b/deps/npm/node_modules/normalize-git-url/README.md
new file mode 100644
index 000000000..da3d78ed2
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/README.md
@@ -0,0 +1,40 @@
+# normalize-git-url
+
+You have a bunch of Git URLs. You want to convert them to a canonical
+representation, probably for use inside npm so that it doesn't end up creating
+a bunch of superfluous cached origins. You use this package.
+
+## Usage
+
+```javascript
+var ngu = require('normalize-git-url');
+var normalized = ngu("git+ssh://git@github.com:organization/repo.git#hashbrowns")
+// get back:
+// {
+// url : "ssh://git@github.com/organization/repo.git",
+// branch : "hashbrowns" // did u know hashbrowns are delicious?
+// }
+```
+
+## API
+
+There's just the one function, and all it takes is a single parameter, a non-normalized Git URL.
+
+### normalizeGitUrl(url)
+
+* `url` {String} The Git URL (very loosely speaking) to be normalized.
+
+Returns an object with the following format:
+
+* `url` {String} The normalized URL.
+* `branch` {String} The treeish to be checked out once the repo at `url` is
+ cloned. It doesn't have to be a branch, but it's a lot easier to intuit what
+ the output is for with that name.
+
+## Limitations
+
+Right now this doesn't try to special-case GitHub too much -- it doesn't ensure
+that `.git` is added to the end of URLs, it doesn't prefer `https:` over
+`http:` or `ssh:`, it doesn't deal with redirects, and it doesn't try to
+resolve symbolic names to treeish hashcodes. For now, it just tries to account
+for minor differences in representation.
diff --git a/deps/npm/node_modules/normalize-git-url/normalize-git-url.js b/deps/npm/node_modules/normalize-git-url/normalize-git-url.js
new file mode 100644
index 000000000..766203794
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/normalize-git-url.js
@@ -0,0 +1,27 @@
+var url = require("url")
+
+module.exports = function normalize (u) {
+ var parsed = url.parse(u, true)
+
+ // git is so tricky!
+ // if the path is like ssh://foo:22/some/path then it works, but
+ // it needs the ssh://
+ // If the path is like ssh://foo:some/path then it works, but
+ // only if you remove the ssh://
+ if (parsed.protocol) {
+ parsed.protocol = parsed.protocol.replace(/^git\+/, "")
+
+ // ssh paths that are scp-style urls don't need the ssh://
+ parsed.pathname = parsed.pathname.replace(/^\/?:/, "/")
+ }
+
+ // figure out what we should check out.
+ var checkout = parsed.hash && parsed.hash.substr(1) || "master"
+ parsed.hash = ""
+
+ u = url.format(parsed)
+ return {
+ url : u,
+ branch : checkout
+ }
+}
diff --git a/deps/npm/node_modules/normalize-git-url/package.json b/deps/npm/node_modules/normalize-git-url/package.json
new file mode 100644
index 000000000..1402b0e43
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "normalize-git-url",
+ "version": "1.0.0",
+ "description": "Normalizes Git URLs. For npm, but you can use it too.",
+ "main": "normalize-git-url.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "^0.4.13"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/normalize-git-url.git"
+ },
+ "keywords": [
+ "git",
+ "github",
+ "url",
+ "normalize",
+ "npm"
+ ],
+ "author": {
+ "name": "Forrest L Norvell",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/normalize-git-url/issues"
+ },
+ "homepage": "https://github.com/npm/normalize-git-url",
+ "readme": "# normalize-git-url\n\nYou have a bunch of Git URLs. You want to convert them to a canonical\nrepresentation, probably for use inside npm so that it doesn't end up creating\na bunch of superfluous cached origins. You use this package.\n\n## Usage\n\n```javascript\nvar ngu = require('normalize-git-url');\nvar normalized = ngu(\"git+ssh://git@github.com:organization/repo.git#hashbrowns\")\n// get back:\n// {\n// url : \"ssh://git@github.com/organization/repo.git\",\n// branch : \"hashbrowns\" // did u know hashbrowns are delicious?\n// }\n```\n\n## API\n\nThere's just the one function, and all it takes is a single parameter, a non-normalized Git URL.\n\n### normalizeGitUrl(url)\n\n* `url` {String} The Git URL (very loosely speaking) to be normalized.\n\nReturns an object with the following format:\n\n* `url` {String} The normalized URL.\n* `branch` {String} The treeish to be checked out once the repo at `url` is\n cloned. It doesn't have to be a branch, but it's a lot easier to intuit what\n the output is for with that name.\n\n## Limitations\n\nRight now this doesn't try to special-case GitHub too much -- it doesn't ensure\nthat `.git` is added to the end of URLs, it doesn't prefer `https:` over\n`http:` or `ssh:`, it doesn't deal with redirects, and it doesn't try to\nresolve symbolic names to treeish hashcodes. For now, it just tries to account\nfor minor differences in representation.\n",
+ "readmeFilename": "README.md",
+ "gitHead": "e51f43718af66ffbced4ccfd9a6514470fc4c553",
+ "_id": "normalize-git-url@1.0.0",
+ "_shasum": "80e59471f0616b579893973e3f1b3684bedbad48",
+ "_from": "normalize-git-url@>=1.0.0 <1.1.0"
+}
diff --git a/deps/npm/node_modules/normalize-git-url/test/basic.js b/deps/npm/node_modules/normalize-git-url/test/basic.js
new file mode 100644
index 000000000..f8f199f65
--- /dev/null
+++ b/deps/npm/node_modules/normalize-git-url/test/basic.js
@@ -0,0 +1,56 @@
+var test = require("tap").test
+
+var normalize = require("../normalize-git-url.js")
+
+test("basic normalization tests", function (t) {
+ t.same(
+ normalize("git+ssh://user@hostname:project.git#commit-ish"),
+ { url : "ssh://user@hostname/project.git", branch : "commit-ish" }
+ )
+ t.same(
+ normalize("git+http://user@hostname/project/blah.git#commit-ish"),
+ { url : "http://user@hostname/project/blah.git", branch : "commit-ish" }
+ )
+ t.same(
+ normalize("git+https://user@hostname/project/blah.git#commit-ish"),
+ { url : "https://user@hostname/project/blah.git", branch : "commit-ish" }
+ )
+ t.same(
+ normalize("git+ssh://git@github.com:npm/npm.git#v1.0.27"),
+ { url : "ssh://git@github.com/npm/npm.git", branch : "v1.0.27" }
+ )
+ t.same(
+ normalize("git+ssh://git@github.com:org/repo#dev"),
+ { url : "ssh://git@github.com/org/repo", branch : "dev" }
+ )
+ t.same(
+ normalize("git+ssh://git@github.com/org/repo#dev"),
+ { url : "ssh://git@github.com/org/repo", branch : "dev" }
+ )
+ t.same(
+ normalize("git+ssh://foo:22/some/path"),
+ { url : "ssh://foo:22/some/path", branch : "master" }
+ )
+ t.same(
+ normalize("git@github.com:org/repo#dev"),
+ { url : "git@github.com:org/repo", branch : "dev" }
+ )
+ t.same(
+ normalize("git+https://github.com/KenanY/node-uuid"),
+ { url : "https://github.com/KenanY/node-uuid", branch : "master" }
+ )
+ t.same(
+ normalize("git+https://github.com/KenanY/node-uuid#7a018f2d075b03a73409e8356f9b29c9ad4ea2c5"),
+ { url : "https://github.com/KenanY/node-uuid", branch : "7a018f2d075b03a73409e8356f9b29c9ad4ea2c5" }
+ )
+ t.same(
+ normalize("git+ssh://git@git.example.com:b/b.git#v1.0.0"),
+ { url : "ssh://git@git.example.com/b/b.git", branch : "v1.0.0" }
+ )
+ t.same(
+ normalize("git+ssh://git@github.com:npm/npm-proto.git#othiym23/organized"),
+ { url : "ssh://git@github.com/npm/npm-proto.git", branch : "othiym23/organized" }
+ )
+
+ t.end()
+})
diff --git a/deps/npm/node_modules/npm-install-checks/package.json b/deps/npm/node_modules/npm-install-checks/package.json
index 06ca052e4..cc9f206d1 100644
--- a/deps/npm/node_modules/npm-install-checks/package.json
+++ b/deps/npm/node_modules/npm-install-checks/package.json
@@ -1,10 +1,10 @@
{
"name": "npm-install-checks",
- "version": "1.0.4",
+ "version": "1.0.5",
"description": "checks that npm runs during the installation of a module",
"main": "index.js",
"dependencies": {
- "npmlog": "0.1",
+ "npmlog": "0.1 || 1",
"semver": "^2.3.0 || 3.x || 4"
},
"devDependencies": {
@@ -32,14 +32,15 @@
"bugs": {
"url": "https://github.com/npm/npm-install-checks/issues"
},
- "gitHead": "05944f95860b0ac3769667551c4b7aa3d3fcdc32",
- "_id": "npm-install-checks@1.0.4",
- "_shasum": "9757c6f9d4d493c2489465da6d07a8ed416d44c8",
- "_from": "npm-install-checks@>=1.0.2-0 <1.1.0-0",
- "_npmVersion": "2.0.0-beta.3",
+ "gitHead": "c36e052a0a54ad82932689fa86fd59197277f80d",
+ "_id": "npm-install-checks@1.0.5",
+ "_shasum": "a1b5beabfd60e0535b14f763157c410cb6bdae56",
+ "_from": "npm-install-checks@>=1.0.5 <1.1.0",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.33",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "name": "iarna",
+ "email": "me@re-becca.org"
},
"maintainers": [
{
@@ -49,12 +50,16 @@
{
"name": "isaacs",
"email": "i@izs.me"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
}
],
"dist": {
- "shasum": "9757c6f9d4d493c2489465da6d07a8ed416d44c8",
- "tarball": "http://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.4.tgz"
+ "shasum": "a1b5beabfd60e0535b14f763157c410cb6bdae56",
+ "tarball": "http://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.5.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.4.tgz"
+ "_resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.5.tgz"
}
diff --git a/deps/npm/node_modules/npm-registry-client/README.md b/deps/npm/node_modules/npm-registry-client/README.md
index 6d15dadf7..a35c48311 100644
--- a/deps/npm/node_modules/npm-registry-client/README.md
+++ b/deps/npm/node_modules/npm-registry-client/README.md
@@ -10,9 +10,9 @@ It handles all the caching and HTTP calls.
var RegClient = require('npm-registry-client')
var client = new RegClient(config)
var uri = "npm://registry.npmjs.org/npm"
-var options = {timeout: 1000}
+var params = {timeout: 1000}
-client.get(uri, options, function (error, data, raw, res) {
+client.get(uri, params, function (error, data, raw, res) {
// error is an error if there was a problem.
// data is the parsed data object
// raw is the json string
@@ -23,124 +23,98 @@ client.get(uri, options, function (error, data, raw, res) {
# Registry URLs
The registry calls take either a full URL pointing to a resource in the
-registry, or a base URL for the registry as a whole (for the base URL, any path
-will be ignored). In addition to `http` and `https`, `npm` URLs are allowed.
-`npm` URLs are `https` URLs with the additional restrictions that they will
-always include authorization credentials, and the response is always registry
-metadata (and not tarballs or other attachments).
+registry, or a base URL for the registry as a whole (including the registry
+path – but be sure to terminate the path with `/`). `http` and `https` URLs are
+the only ones supported.
-# Configuration
+## Using the client
-This program is designed to work with
-[npmconf](https://npmjs.org/package/npmconf), but you can also pass in
-a plain-jane object with the appropriate configs, and it'll shim it
-for you. Any configuration thingie that has get/set/del methods will
-also be accepted.
-
-* `cache` **Required** {String} Path to the cache folder
-* `always-auth` {Boolean} Auth even for GET requests.
-* `auth` {String} A base64-encoded `username:password`
-* `email` {String} User's email address
-* `tag` {String} The default tag to use when publishing new packages.
- Default = `"latest"`
-* `ca` {String} Cerficate signing authority certificates to trust.
-* `cert` {String} Client certificate (PEM encoded). Enable access
- to servers that require client certificates
-* `key` {String} Private key (PEM encoded) for client certificate 'cert'
-* `strict-ssl` {Boolean} Whether or not to be strict with SSL
- certificates. Default = `true`
-* `user-agent` {String} User agent header to send. Default =
- `"node/{process.version} {process.platform} {process.arch}"`
-* `log` {Object} The logger to use. Defaults to `require("npmlog")` if
- that works, otherwise logs are disabled.
-* `fetch-retries` {Number} Number of times to retry on GET failures.
- Default=2
-* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10
-* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.
- Default=10000 (10 seconds)
-* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.
- Default=60000 (60 seconds)
-* `proxy` {URL} The url to proxy requests through.
-* `https-proxy` {URL} The url to proxy https requests through.
- Defaults to be the same as `proxy` if unset.
-* `_auth` {String} The base64-encoded authorization header.
-* `username` `_password` {String} Username/password to use to generate
- `_auth` if not supplied.
-* `_token` {Object} A token for use with
- [couch-login](https://npmjs.org/package/couch-login)
-
-# client.request(method, uri, options, cb)
-
-* `method` {String} HTTP method
-* `uri` {String} URI pointing to the resource to request
-* `options` {Object} Object containing optional per-request properties.
- * `what` {Stream | Buffer | String | Object} The request body. Objects
- that are not Buffers or Streams are encoded as JSON.
- * `etag` {String} The cached ETag
- * `follow` {Boolean} Follow 302/301 responses (defaults to true)
-* `cb` {Function}
- * `error` {Error | null}
- * `data` {Object} the parsed data object
- * `raw` {String} the json
- * `res` {Response Object} response from couch
+Every call to the client follows the same pattern:
-Make a request to the registry. All the other methods are wrappers around
-`request`.
+* `uri` {String} The *fully-qualified* URI of the registry API method being
+ invoked.
+* `params` {Object} Per-request parameters.
+* `callback` {Function} Callback to be invoked when the call is complete.
-# client.adduser(base, username, password, email, cb)
+### Credentials
+
+Many requests to the registry can by authenticated, and require credentials
+for authorization. These credentials always look the same:
-* `base` {String} Base registry URL
* `username` {String}
* `password` {String}
* `email` {String}
-* `cb` {Function}
+* `alwaysAuth` {Boolean} Whether calls to the target registry are always
+ authed.
-Add a user account to the registry, or verify the credentials.
+**or**
+
+* `token` {String}
+* `alwaysAuth` {Boolean} Whether calls to the target registry are always
+ authed.
+
+## API
-# client.deprecate(uri, version, message, cb)
+### client.adduser(uri, params, cb)
-* `uri` {String} Full registry URI for the deprecated package
-* `version` {String} Semver version range
-* `message` {String} The message to use as a deprecation warning
+* `uri` {String} Base registry URL.
+* `params` {Object} Object containing per-request properties.
+ * `auth` {Credentials}
* `cb` {Function}
+ * `error` {Error | null}
+ * `data` {Object} the parsed data object
+ * `raw` {String} the json
+ * `res` {Response Object} response from couch
-Deprecate a version of a package in the registry.
+Add a user account to the registry, or verify the credentials.
-# client.bugs(uri, cb)
+### client.deprecate(uri, params, cb)
-* `uri` {String} Full registry URI for the package
+* `uri` {String} Full registry URI for the deprecated package.
+* `params` {Object} Object containing per-request properties.
+ * `version` {String} Semver version range.
+ * `message` {String} The message to use as a deprecation warning.
+ * `auth` {Credentials}
* `cb` {Function}
-Get the url for bugs of a package
+Deprecate a version of a package in the registry.
-# client.get(uri, options, cb)
+### client.get(uri, params, cb)
* `uri` {String} The complete registry URI to fetch
-* `options` {Object} Object containing optional per-request properties.
- * `timeout` {Number} Duration before the request times out.
- * `follow` {Boolean} Follow 302/301 responses (defaults to true)
- * `staleOk` {Boolean} If there's cached data available, then return that
- to the callback quickly, and update the cache the background.
+* `params` {Object} Object containing per-request properties.
+ * `timeout` {Number} Duration before the request times out. Optional
+ (default: never).
+ * `follow` {Boolean} Follow 302/301 responses. Optional (default: true).
+ * `staleOk` {Boolean} If there's cached data available, then return that to
+ the callback quickly, and update the cache the background. Optional
+ (default: false).
+ * `auth` {Credentials} Optional.
+* `cb` {Function}
Fetches data from the registry via a GET request, saving it in the cache folder
-with the ETag.
+with the ETag or the "Last Modified" timestamp.
-# client.publish(uri, data, tarball, cb)
+### client.publish(uri, params, cb)
-* `uri` {String} The registry URI to publish to
-* `data` {Object} Package data
-* `tarball` {String | Stream} Filename or stream of the package tarball
+* `uri` {String} The registry URI for the package to publish.
+* `params` {Object} Object containing per-request properties.
+ * `metadata` {Object} Package metadata.
+ * `body` {Stream} Stream of the package body / tarball.
+ * `auth` {Credentials}
* `cb` {Function}
Publish a package to the registry.
-Note that this does not create the tarball from a folder. However, it can
-accept a gzipped tar stream or a filename to a tarball.
+Note that this does not create the tarball from a folder.
-# client.star(uri, starred, cb)
+### client.star(uri, params, cb)
-* `uri` {String} The complete registry URI to star
-* `starred` {Boolean} True to star the package, false to unstar it.
+* `uri` {String} The complete registry URI for the package to star.
+* `params` {Object} Object containing per-request properties.
+ * `starred` {Boolean} True to star the package, false to unstar it. Optional
+ (default: false).
+ * `auth` {Credentials}
* `cb` {Function}
Star or unstar a package.
@@ -148,40 +122,118 @@ Star or unstar a package.
Note that the user does not have to be the package owner to star or unstar a
package, though other writes do require that the user be the package owner.
-# client.stars(base, username, cb)
+### client.stars(uri, params, cb)
-* `base` {String} The base URL for the registry
-* `username` {String} Name of user to fetch starred packages for.
+* `uri` {String} The base URL for the registry.
+* `params` {Object} Object containing per-request properties.
+ * `username` {String} Name of user to fetch starred packages for. Optional
+ (default: user in `auth`).
+ * `auth` {Credentials} Optional (required if `username` is omitted).
* `cb` {Function}
View your own or another user's starred packages.
-# client.tag(uri, version, tag, cb)
+### client.tag(uri, params, cb)
* `uri` {String} The complete registry URI to tag
-* `version` {String} Version to tag
-* `tag` {String} Tag name to apply
+* `params` {Object} Object containing per-request properties.
+ * `version` {String} Version to tag.
+ * `tag` {String} Tag name to apply.
+ * `auth` {Credentials}
* `cb` {Function}
Mark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the
specified version.
-# client.unpublish(uri, [ver], cb)
+### client.unpublish(uri, params, cb)
-* `uri` {String} The complete registry URI to unpublish
-* `ver` {String} version to unpublish. Leave blank to unpublish all
- versions.
+* `uri` {String} The complete registry URI of the package to unpublish.
+* `params` {Object} Object containing per-request properties.
+ * `version` {String} version to unpublish. Optional – omit to unpublish all
+ versions.
+ * `auth` {Credentials}
* `cb` {Function}
Remove a version of a package (or all versions) from the registry. When the
last version us unpublished, the entire document is removed from the database.
-# client.upload(uri, file, [etag], [nofollow], cb)
+### client.whoami(uri, params, cb)
+
+* `uri` {String} The base registry for the URI.
+* `params` {Object} Object containing per-request properties.
+ * `auth` {Credentials}
+* `cb` {Function}
+
+Simple call to see who the registry thinks you are. Especially useful with
+token-based auth.
+
+
+## PLUMBING
+
+The below are primarily intended for use by the rest of the API, or by the npm
+caching logic directly.
+
+### client.request(uri, params, cb)
+
+* `uri` {String} URI pointing to the resource to request.
+* `params` {Object} Object containing per-request properties.
+ * `method` {String} HTTP method. Optional (default: "GET").
+ * `body` {Stream | Buffer | String | Object} The request body. Objects
+ that are not Buffers or Streams are encoded as JSON. Optional – body
+ only used for write operations.
+ * `etag` {String} The cached ETag. Optional.
+ * `lastModified` {String} The cached Last-Modified timestamp. Optional.
+ * `follow` {Boolean} Follow 302/301 responses. Optional (default: true).
+ * `auth` {Credentials} Optional.
+* `cb` {Function}
+ * `error` {Error | null}
+ * `data` {Object} the parsed data object
+ * `raw` {String} the json
+ * `res` {Response Object} response from couch
+
+Make a generic request to the registry. All the other methods are wrappers
+around `client.request`.
+
+### client.fetch(uri, params, cb)
* `uri` {String} The complete registry URI to upload to
-* `file` {String | Stream} Either the filename or a readable stream
-* `etag` {String} Cache ETag
-* `nofollow` {Boolean} Do not follow 301/302 responses
+* `params` {Object} Object containing per-request properties.
+ * `headers` {Stream} HTTP headers to be included with the request. Optional.
+ * `auth` {Credentials} Optional.
* `cb` {Function}
-Upload an attachment. Mostly used by `client.publish()`.
+Fetch a package from a URL, with auth set appropriately if included. Used to
+cache remote tarballs as well as request package tarballs from the registry.
+
+# Configuration
+
+The client uses its own configuration, which is just passed in as a simple
+nested object. The following are the supported values (with their defaults, if
+any):
+
+* `proxy.http` {URL} The URL to proxy HTTP requests through.
+* `proxy.https` {URL} The URL to proxy HTTPS requests through. Defaults to be
+ the same as `proxy.http` if unset.
+* `proxy.localAddress` {IP} The local address to use on multi-homed systems.
+* `ssl.ca` {String} Cerficate signing authority certificates to trust.
+* `ssl.certificate` {String} Client certificate (PEM encoded). Enable access
+ to servers that require client certificates.
+* `ssl.key` {String} Private key (PEM encoded) for client certificate.
+* `ssl.strict` {Boolean} Whether or not to be strict with SSL certificates.
+ Default = `true`
+* `retry.count` {Number} Number of times to retry on GET failures. Default = 2.
+* `retry.factor` {Number} `factor` setting for `node-retry`. Default = 10.
+* `retry.minTimeout` {Number} `minTimeout` setting for `node-retry`.
+ Default = 10000 (10 seconds)
+* `retry.maxTimeout` {Number} `maxTimeout` setting for `node-retry`.
+ Default = 60000 (60 seconds)
+* `userAgent` {String} User agent header to send. Default =
+ `"node/{process.version}"`
+* `log` {Object} The logger to use. Defaults to `require("npmlog")` if
+ that works, otherwise logs are disabled.
+* `defaultTag` {String} The default tag to use when publishing new packages.
+ Default = `"latest"`
+* `couchToken` {Object} A token for use with
+ [couch-login](https://npmjs.org/package/couch-login).
+* `sessionToken` {string} A random identifier for this set of client requests.
+ Default = 8 random hexadecimal bytes.
diff --git a/deps/npm/node_modules/npm-registry-client/index.js b/deps/npm/node_modules/npm-registry-client/index.js
index a75e8bbdb..801d00f8e 100644
--- a/deps/npm/node_modules/npm-registry-client/index.js
+++ b/deps/npm/node_modules/npm-registry-client/index.js
@@ -2,56 +2,55 @@
module.exports = RegClient
-var url = require('url')
-, npmlog
-, cacheFile = require('npm-cache-filename')
+var join = require("path").join
+ , fs = require("graceful-fs")
+var npmlog
try {
npmlog = require("npmlog")
-} catch (er) {
- npmlog = { error: noop, warn: noop, info: noop,
- verbose: noop, silly: noop, http: noop,
- pause: noop, resume: noop }
+}
+catch (er) {
+ npmlog = {
+ error : noop,
+ warn : noop,
+ info : noop,
+ verbose : noop,
+ silly : noop,
+ http : noop,
+ pause : noop,
+ resume : noop
+ }
}
function noop () {}
-function RegClient (conf) {
- // accept either a plain-jane object, or a npmconf object
- // with a "get" method.
- if (typeof conf.get !== 'function') {
- var data = conf
- conf = { get: function (k) { return data[k] }
- , set: function (k, v) { data[k] = v }
- , del: function (k) { delete data[k] } }
- }
+function RegClient (config) {
+ this.config = Object.create(config || {})
- this.conf = conf
-
- // if provided, then the registry needs to be a url.
- // if it's not provided, then we're just using the cache only.
- var registry = conf.get('registry')
- if (registry) {
- registry = url.parse(registry)
- if (!registry.protocol) throw new Error(
- 'Invalid registry: ' + registry.url)
- registry = registry.href
- if (registry.slice(-1) !== '/') {
- registry += '/'
- }
- this.conf.set('registry', registry)
- } else {
- registry = null
+ this.config.proxy = this.config.proxy || {}
+ if (!this.config.proxy.https && this.config.proxy.http) {
+ this.config.proxy.https = this.config.proxy.http
}
- this.registry = registry
+ this.config.ssl = this.config.ssl || {}
+ 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
+
+ this.config.userAgent = this.config.userAgent || "node/" + process.version
+ this.config.defaultTag = this.config.defaultTag || "latest"
- if (!conf.get('cache')) throw new Error("Cache dir is required")
- this.cacheFile = cacheFile(this.conf.get('cache'))
- this.log = conf.log || conf.get('log') || npmlog
+ this.log = this.config.log || npmlog
+ delete this.config.log
}
-require('fs').readdirSync(__dirname + "/lib").forEach(function (f) {
+fs.readdirSync(join(__dirname, "lib")).forEach(function (f) {
if (!f.match(/\.js$/)) return
- RegClient.prototype[f.replace(/\.js$/, '')] = require('./lib/' + f)
+ var name = f.replace(/\.js$/, "")
+ .replace(/-([a-z])/, function (_, l) { return l.toUpperCase() })
+ RegClient.prototype[name] = require(join(__dirname, "lib", f))
})
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 e449c2580..5f4abc8ef 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/adduser.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
@@ -1,49 +1,54 @@
module.exports = adduser
var url = require("url")
-
-function adduser (base, username, password, email, cb) {
- if (!base) return cb(new Error("Required base URI not supplied"))
-
- username = ("" + (username || "")).trim()
+var assert = require("assert")
+
+function adduser (uri, params, cb) {
+ assert(typeof uri === "string", "must pass registry URI to adduser")
+ assert(
+ params && typeof params === "object",
+ "must pass params to adduser"
+ )
+ assert(typeof cb === "function", "must pass callback 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")
+
+ // normalize registry URL
+ 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."))
-
- password = ("" + (password || "")).trim()
if (!password) return cb(new Error("No password supplied."))
-
- email = ("" + (email || "")).trim()
if (!email) return cb(new Error("No email address supplied."))
if (!email.match(/^[^@]+@[^\.]+\.[^\.]+/)) {
return cb(new Error("Please use a real email address."))
}
- var userobj =
- { name : username
- , password : password
- , email : email
- , _id : 'org.couchdb.user:'+username
- , type : "user"
- , roles : []
- , date: new Date().toISOString()
- }
-
- // pluck off any other username/password/token. it needs to be the
- // same as the user we're becoming now. replace them on error.
- var c = this.conf.getCredentialsByURI(base)
- var pre = { username: c.username
- , password: c.password
- , email: c.email
- , token: this.conf.get('_token') }
-
- this.conf.del('_token')
- if (this.couchLogin) {
- this.couchLogin.token = null
+ var userobj = {
+ _id : "org.couchdb.user:"+username,
+ name : username,
+ password : password,
+ email : email,
+ type : "user",
+ roles : [],
+ date : new Date().toISOString()
}
- cb = done.call(this, cb, pre)
+ var token = this.config.couchToken
+ if (this.couchLogin) this.couchLogin.token = null
+
+ 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]
@@ -52,70 +57,57 @@ function adduser (base, username, password, email, cb) {
this.log.verbose("adduser", "before first PUT", logObj)
- var uri = url.resolve(base, '/-/user/org.couchdb.user:' + encodeURIComponent(username))
- this.request('PUT'
- , uri
- , { body : userobj }
- , function (error, data, json, response) {
- // if it worked, then we just created a new user, and all is well.
- // but if we're updating a current record, then it'll 409 first
- var c = this.conf.getCredentialsByURI(base)
- if (error && !c.auth) {
- // must be trying to re-auth on a new machine.
- // use this info as auth
- this.conf.setCredentialsByURI(base, {
- username : username,
- password : password,
- email : email
- })
- }
+ var client = this
- if (!error || !response || response.statusCode !== 409) {
- return cb(error, data, json, response)
+ uri = url.resolve(uri, "-/user/org.couchdb.user:" + encodeURIComponent(username))
+ var options = {
+ method : "PUT",
+ body : userobj,
+ auth : auth
+ }
+ this.request(
+ uri,
+ options,
+ function (error, data, json, response) {
+ if (!error || !response || response.statusCode !== 409) {
+ return cb(error, data, json, response)
+ }
+
+ client.log.verbose("adduser", "update existing user")
+ return client.request(
+ 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") {
+ userobj[k] = data[k]
+ }
+ })
+ client.log.verbose("adduser", "userobj", logObj)
+ client.request(uri+"/-rev/"+userobj._rev, options, cb)
}
+ )
+ }
+ )
- this.log.verbose("adduser", "update existing user")
- return this.request('GET'
- , uri + '?write=true'
- , null
- , 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') {
- userobj[k] = data[k]
- }
- })
- this.log.verbose("adduser", "userobj", logObj)
- this.request('PUT'
- , uri + "/-rev/" + userobj._rev
- , { body : userobj }
- , cb)
- }.bind(this))
- }.bind(this))
-
- function done (cb, pre) {
+ function done (token, cb) {
return function (error, data, json, response) {
if (!error && (!response || response.statusCode === 201)) {
return cb(error, data, json, response)
}
- // there was some kind of error, re-instate previous auth/token/etc.
- this.conf.set('_token', pre.token)
- if (this.couchLogin) {
- this.couchLogin.token = pre.token
- if (this.couchLogin.tokenSet) {
- this.couchLogin.tokenSet(pre.token)
+ // there was some kind of error, reinstate previous auth/token/etc.
+ if (client.couchLogin) {
+ client.couchLogin.token = token
+ if (client.couchLogin.tokenSet) {
+ client.couchLogin.tokenSet(token)
}
}
- this.conf.setCredentialsByURI(base, {
- username : pre.username,
- password : pre.password,
- email : pre.email
- })
- this.log.verbose("adduser", "back", [error, data, json])
+ client.log.verbose("adduser", "back", [error, data, json])
if (!error) {
error = new Error(
(response && response.statusCode || "") + " " +
@@ -124,13 +116,13 @@ function adduser (base, username, password, email, cb) {
}
if (response && (response.statusCode === 401 || response.statusCode === 403)) {
- this.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)
- }.bind(this)
+ }
}
}
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 0794fdc3b..7f289efeb 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/attempt.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/attempt.js
@@ -5,12 +5,7 @@ module.exports = attempt
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({
- retries : this.conf.get("fetch-retries") || 2,
- factor : this.conf.get("fetch-retry-factor"),
- minTimeout : this.conf.get("fetch-retry-mintimeout") || 10000,
- maxTimeout : this.conf.get("fetch-retry-maxtimeout") || 60000
- })
+ var operation = retry.operation(this.config.retry)
var client = this
operation.attempt(function (currentAttempt) {
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 2b0c7a2a3..4d1a4dd4a 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/authify.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/authify.js
@@ -1,21 +1,17 @@
-var url = require("url")
-
module.exports = authify
-function authify (authed, parsed, headers) {
- var c = this.conf.getCredentialsByURI(url.format(parsed))
-
- if (c && c.token) {
+function authify (authed, parsed, headers, credentials) {
+ if (credentials && credentials.token) {
this.log.verbose("request", "using bearer token for auth")
- headers.authorization = "Bearer " + c.token
+ headers.authorization = "Bearer " + credentials.token
return null
}
if (authed) {
- if (c && c.username && c.password) {
- var username = encodeURIComponent(c.username)
- var password = encodeURIComponent(c.password)
+ if (credentials && credentials.username && credentials.password) {
+ var username = encodeURIComponent(credentials.username)
+ var password = encodeURIComponent(credentials.password)
parsed.auth = username + ":" + password
}
else {
diff --git a/deps/npm/node_modules/npm-registry-client/lib/bugs.js b/deps/npm/node_modules/npm-registry-client/lib/bugs.js
deleted file mode 100644
index fd0365eed..000000000
--- a/deps/npm/node_modules/npm-registry-client/lib/bugs.js
+++ /dev/null
@@ -1,9 +0,0 @@
-
-module.exports = bugs
-
-function bugs (uri, cb) {
- this.get(uri + "/latest", 3600, function (er, d) {
- if (er) return cb(er)
- cb(null, d.bugs)
- })
-}
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 f5fd59704..c018570d9 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
@@ -1,27 +1,43 @@
module.exports = deprecate
+var assert = require("assert")
var url = require("url")
var semver = require("semver")
-function deprecate (uri, ver, message, cb) {
- var c = this.conf.getCredentialsByURI(uri)
- if (!(c.token || c.auth)) {
- return cb(new Error("Must be logged in to deprecate a package"))
- }
+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 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"
+ )
+
+ var version = params.version
+ var message = params.message
+ var auth = params.auth
- if (semver.validRange(ver) === null) {
- return cb(new Error("invalid version range: "+ver))
+ if (semver.validRange(version) === null) {
+ return cb(new Error("invalid version range: "+version))
}
- this.get(uri + '?write=true', null, 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) {
- return semver.satisfies(v, ver)
+ return semver.satisfies(v, version)
}).forEach(function (v) {
data.versions[v].deprecated = message
})
// now update the doc on the registry
- this.request('PUT', url.resolve(uri, data._id), { body : data }, cb)
+ var options = {
+ 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/fetch.js b/deps/npm/node_modules/npm-registry-client/lib/fetch.js
index 75c52de3a..b0764b610 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/fetch.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/fetch.js
@@ -6,17 +6,16 @@ var request = require("request")
module.exports = fetch
-function fetch (uri, headers, cb) {
- assert(uri, "must pass resource to fetch")
- assert(cb, "must pass callback")
-
- if (!headers) headers = {}
+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")
cb = once(cb)
var client = this
this.attempt(function (operation) {
- makeRequest.call(client, uri, headers, function (er, req) {
+ makeRequest.call(client, uri, params, function (er, req) {
if (er) return cb(er)
req.on("error", function (er) {
@@ -65,21 +64,23 @@ function unstick(response) {
}}(response.resume)
}
-function makeRequest (remote, headers, cb) {
+function makeRequest (remote, params, cb) {
var parsed = url.parse(remote)
this.log.http("fetch", "GET", parsed.href)
+ var headers = params.headers || {}
var er = this.authify(
- this.conf.getCredentialsByURI(remote).alwaysAuth,
+ params.auth && params.auth.alwaysAuth,
parsed,
- headers
+ headers,
+ params.auth
)
if (er) return cb(er)
var opts = this.initialize(
parsed,
"GET",
- "application/x-tar",
+ "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 d7b58092b..17e134977 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/get.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/get.js
@@ -1,203 +1,22 @@
-
module.exports = get
-var fs = require("graceful-fs")
- , assert = require("assert")
- , path = require("path")
- , mkdir = require("mkdirp")
- , chownr = require("chownr")
+var assert = require("assert")
, url = require("url")
-/**
- * options:
- *
- * timeout: request timeouts
- * follow: follow redirects
- * staleOk: stale results are OK
- * stat: results of checking for cached metadata
- * data: the cached metadata
+/*
+ * This is meant to be overridden in specific implementations if you
+ * want specialized behavior for metadata (i.e. caching).
*/
-function get (uri, options, cb) {
- assert(uri, "must have URL to fetch")
- assert(cb, "must have callback")
- if (!options) options = {}
+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")
var parsed = url.parse(uri)
- assert(parsed.protocol, "must have a URL that starts with npm:, http:, or https:")
-
- var cache = this.cacheFile(uri) + "/.cache.json"
-
- // /-/all is special.
- // It uses timestamp-based caching and partial updates,
- // because it is a monster.
- if (parsed.pathname === "/-/all") {
- return requestAll.call(this, uri, cache, cb)
- }
-
- // If the GET is part of a write operation (PUT or DELETE), then
- // skip past the cache entirely, but still save the results.
- if (uri.match(/\?write=true$/)) {
- return get_.call(this, uri, cache, options, cb)
- }
-
- fs.stat(cache, function (er, stat) {
- if (!er) fs.readFile(cache, function (er, data) {
- try { data = JSON.parse(data) }
- catch (ex) { data = null }
- options.stat = stat
- options.data = data
- get_.call(this, uri, cache, options, cb)
- }.bind(this))
- else {
- get_.call(this, uri, cache, options, cb)
- }
- }.bind(this))
-}
-
-function requestAll (uri, cache, cb) {
- this.log.info("get", cache)
- mkdir(path.dirname(cache), function (er) {
- if (er) return cb(er)
- fs.readFile(cache, function (er, data) {
- if (er) return requestAll_.call(this, uri, 0, {}, cache, cb)
- try {
- data = JSON.parse(data)
- } catch (ex) {
- fs.writeFile(cache, "{}", function (er) {
- if (er) return cb(new Error("Broken cache."))
- return requestAll_.call(this, uri, 0, {}, cache, cb)
- }.bind(this))
- }
- var t = +data._updated || 0
- requestAll_.call(this, uri, t, data, cache, cb)
- }.bind(this))
- }.bind(this))
-}
-
-function requestAll_ (uri, c, data, cache, cb) {
- // use the cache and update in the background if it's not too old
- if (Date.now() - c < 60000) {
- cb(null, data)
- cb = function () {}
- }
-
- if (c === 0) {
- this.log.warn("", "Building the local index for the first time, please be patient")
- uri = url.resolve(uri, "/-/all")
- }
- else {
- uri = url.resolve(uri, "/-/all/since?stale=update_after&startkey=" + c)
- }
-
- this.request('GET', uri, null, function (er, updates, _, res) {
- if (er) return cb(er, data)
- var headers = res.headers
- , updated = updates._updated || Date.parse(headers.date)
- Object.keys(updates).forEach(function (p) {
- data[p] = updates[p]
- })
- data._updated = updated
- fs.writeFile( cache, JSON.stringify(data)
- , function (er) {
- delete data._updated
- return cb(er, data)
- })
- })
-}
-
-function get_ (uri, cache, options, cb) {
- var staleOk = options.staleOk === undefined ? false : options.staleOk
- , follow = options.follow
- , data = options.data
- , stat = options.stat
- , etag
-
- var timeout = options.timeout === undefined ? -1 : options.timeout
- timeout = Math.min(timeout, this.conf.get('cache-max') || 0)
- timeout = Math.max(timeout, this.conf.get('cache-min') || -Infinity)
- if (process.env.COMP_CWORD !== undefined &&
- process.env.COMP_LINE !== undefined &&
- process.env.COMP_POINT !== undefined) {
- timeout = Math.max(timeout, 60000)
- }
-
- if (data && data._etag) etag = data._etag
-
- if (timeout && timeout > 0 && options.stat && options.data) {
- if ((Date.now() - stat.mtime.getTime())/1000 < timeout) {
- this.log.verbose("registry.get", uri, "not expired, no request")
- delete data._etag
- return cb(null, data, JSON.stringify(data), {statusCode:304})
- }
- if (staleOk) {
- this.log.verbose("registry.get", uri, "staleOk, background update")
- delete data._etag
- process.nextTick(cb.bind( null, null, data, JSON.stringify(data)
- , {statusCode: 304} ))
- cb = function () {}
- }
- }
-
- this.request('GET', uri, { etag : etag, follow : follow }, function (er, remoteData, raw, response) {
- // if we get an error talking to the registry, but we have it
- // from the cache, then just pretend we got it.
- if (er && cache && data && !data.error) {
- er = null
- response = {statusCode: 304}
- }
-
- if (response) {
- this.log.silly("registry.get", "cb", [response.statusCode, response.headers])
- if (response.statusCode === 304 && etag) {
- remoteData = data
- this.log.verbose("etag", uri+" from cache")
- }
- }
-
- data = remoteData
- if (!data) {
- er = er || new Error("failed to fetch from registry: " + uri)
- }
-
- if (er) return cb(er, data, raw, response)
-
- // just give the write the old college try. if it fails, whatever.
- function saved () {
- delete data._etag
- cb(er, data, raw, response)
- }
-
- saveToCache.call(this, cache, data, saved)
- }.bind(this))
-}
-
-function saveToCache (cache, data, saved) {
- if (this._cacheStat) {
- var cs = this._cacheStat
- return saveToCache_.call(this, cache, data, cs.uid, cs.gid, saved)
- }
- fs.stat(this.conf.get('cache'), function (er, st) {
- if (er) {
- return fs.stat(process.env.HOME || "", function (er, st) {
- // if this fails, oh well.
- if (er) return saved()
- this._cacheStat = st
- return saveToCache.call(this, cache, data, saved)
- }.bind(this))
- }
- this._cacheStat = st || { uid: null, gid: null }
- return saveToCache.call(this, cache, data, saved)
- }.bind(this))
-}
+ assert(
+ parsed.protocol === "http:" || parsed.protocol === "https:",
+ "must have a URL that starts with http: or https:"
+ )
-function saveToCache_ (cache, data, uid, gid, saved) {
- mkdir(path.dirname(cache), function (er, made) {
- if (er) return saved()
- fs.writeFile(cache, JSON.stringify(data), function (er) {
- if (er || uid === null || gid === null) {
- return saved()
- }
- chownr(made || cache, uid, gid, saved)
- })
- })
+ 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 b6e89ffe9..bd5a4caae 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/initialize.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/initialize.js
@@ -1,41 +1,51 @@
var crypto = require("crypto")
+var HttpAgent = require("http").Agent
+var HttpsAgent = require("https").Agent
var pkg = require("../package.json")
+var httpAgent = new HttpAgent({ keepAlive : true })
+var httpsAgent = new HttpsAgent({ keepAlive : true })
+
module.exports = initialize
function initialize (uri, method, accept, headers) {
- if (!this.sessionToken) {
- this.sessionToken = crypto.randomBytes(8).toString("hex")
- this.log.verbose("request id", this.sessionToken)
+ if (!this.config.sessionToken) {
+ this.config.sessionToken = crypto.randomBytes(8).toString("hex")
+ this.log.verbose("request id", this.config.sessionToken)
}
- var strict = this.conf.get("strict-ssl")
- if (strict === undefined) strict = true
-
- var p = this.conf.get("proxy")
- var sp = this.conf.get("https-proxy") || p
-
var opts = {
url : uri,
method : method,
headers : headers,
- proxy : uri.protocol === "https:" ? sp : p,
- localAddress : this.conf.get("local-address"),
- strictSSL : strict,
- cert : this.conf.get("cert"),
- key : this.conf.get("key"),
- ca : this.conf.get("ca")
+ 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
+ }
+
+ // 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:") {
+ proxy = this.config.proxy.https
+ opts.agent = httpsAgent
+ }
+ else {
+ proxy = this.config.proxy.http
+ opts.agent = httpAgent
}
+ if (typeof proxy === "string") opts.proxy = proxy
headers.version = this.version || pkg.version
headers.accept = accept
if (this.refer) headers.referer = this.refer
- headers["npm-session"] = this.sessionToken
- headers["user-agent"] = this.conf.get("user-agent") ||
- "node/" + process.version
+ headers["npm-session"] = this.config.sessionToken
+ headers["user-agent"] = this.config.userAgent
return opts
}
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 c3b2f3e1f..ea9dcaef7 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/publish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/publish.js
@@ -1,47 +1,58 @@
-
module.exports = publish
var url = require("url")
, semver = require("semver")
, crypto = require("crypto")
- , fs = require("fs")
- , fixNameField = require("normalize-package-data/lib/fixer.js").fixNameField
+ , Stream = require("stream").Stream
+ , assert = require("assert")
+ , fixer = require("normalize-package-data/lib/fixer.js")
+ , concat = require("concat-stream")
-function escaped(name) {
+function escaped (name) {
return name.replace("/", "%2f")
}
-function publish (uri, data, tarball, cb) {
- var c = this.conf.getCredentialsByURI(uri)
- if (!(c.token || (c.auth && c.username && c.email))) {
- var er = new Error("auth and email required for publishing")
- er.code = 'ENEEDAUTH'
+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")
+
+ var auth = params.auth
+ 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"
return cb(er)
}
+ var metadata = params.metadata
+ assert(
+ metadata && typeof metadata === "object",
+ "must pass package metadata to publish"
+ )
try {
- fixNameField(data, true)
+ fixer.fixNameField(metadata, true)
}
catch (er) {
return cb(er)
}
-
- var ver = semver.clean(data.version)
- if (!ver)
- return cb(new Error('invalid semver: ' + data.version))
- data.version = ver
-
- var self = this
- fs.stat(tarball, function(er, s) {
- if (er) return cb(er)
- fs.readFile(tarball, function(er, tarbuffer) {
- if (er) return cb(er)
- putFirst.call(self, uri, data, tarbuffer, s, c, cb)
- })
+ var version = semver.clean(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")
+ var client = this
+ var sink = concat(function (tarbuffer) {
+ putFirst.call(client, uri, metadata, tarbuffer, auth, cb)
})
+ sink.on("error", cb)
+ body.pipe(sink)
}
-function putFirst (registry, data, tarbuffer, stat, creds, cb) {
+function putFirst (registry, data, tarbuffer, auth, cb) {
// optimistically try to PUT all in one single atomic thing.
// If 409, then GET and merge, try again.
// If other error, then fail.
@@ -55,13 +66,13 @@ function putFirst (registry, data, tarbuffer, stat, creds, cb) {
, readme: data.readme || ""
}
- if (!creds.token) {
- root.maintainers = [{name : creds.username, email : creds.email}]
+ if (!auth.token) {
+ 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.conf.get('tag') || "latest"
+ var tag = data.tag || this.config.defaultTag
root["dist-tags"][tag] = data.version
var tbName = data.name + "-" + data.version + ".tgz"
@@ -77,11 +88,17 @@ function putFirst (registry, data, tarbuffer, stat, creds, cb) {
root._attachments[ tbName ] = {
"content_type": "application/octet-stream",
"data": tarbuffer.toString("base64"),
- "length": stat.size
+ "length": tarbuffer.length
}
var fixed = url.resolve(registry, escaped(data.name))
- this.request("PUT", fixed, { body : root }, function (er, parsed, json, res) {
+ var client = this
+ var options = {
+ 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 conflict = res && res.statusCode === 409
@@ -90,8 +107,7 @@ function putFirst (registry, data, tarbuffer, stat, creds, cb) {
// a 409 is typical here. GET the data and merge in.
if (er && !conflict) {
- this.log.error("publish", "Failed PUT "
- +(res && res.statusCode))
+ client.log.error("publish", "Failed PUT "+(res && res.statusCode))
return cb(er)
}
@@ -99,15 +115,15 @@ function putFirst (registry, data, tarbuffer, stat, creds, cb) {
return cb(er, parsed, json, res)
// let's see what versions are already published.
- this.request("GET", fixed + "?write=true", null, function (er, current) {
+ client.request(fixed+"?write=true", { auth : auth }, function (er, current) {
if (er) return cb(er)
- putNext.call(this, registry, data.version, root, current, cb)
- }.bind(this))
- }.bind(this))
+ putNext.call(client, registry, data.version, root, current, auth, cb)
+ })
+ })
}
-function putNext(registry, newVersion, root, current, cb) {
+function putNext (registry, newVersion, root, current, auth, cb) {
// already have the tardata on the root object
// just merge in existing stuff
var curVers = Object.keys(current.versions || {}).map(function (v) {
@@ -128,15 +144,15 @@ function putNext(registry, newVersion, root, current, 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
@@ -148,7 +164,12 @@ function putNext(registry, newVersion, root, current, cb) {
root.versions[newVersion].maintainers = maint
var uri = url.resolve(registry, escaped(root.name))
- this.request("PUT", uri, { body : current }, cb)
+ var options = {
+ method : "PUT",
+ body : current,
+ auth : auth
+ }
+ this.request(uri, options, cb)
}
function conflictError (pkgid, version) {
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 910fe0131..fa969ac22 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/request.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/request.js
@@ -1,105 +1,72 @@
-var assert = require("assert")
- , url = require("url")
- , zlib = require("zlib")
- , Stream = require("stream").Stream
-
-var rm = require("rimraf")
- , request = require("request")
- , once = require("once")
-
module.exports = regRequest
// npm: means
// 1. https
// 2. send authorization
// 3. content-type is 'application/json' -- metadata
-function regRequest (method, uri, options, cb_) {
- assert(uri, "must pass resource to load")
- assert(cb_, "must pass callback")
+//
+var assert = require("assert")
+ , url = require("url")
+ , zlib = require("zlib")
+ , Stream = require("stream").Stream
- options = options || {}
+var request = require("request")
+ , once = require("once")
- var parsed = url.parse(uri)
- var where = parsed.pathname
- var what = options.body
- var follow = (typeof options.follow === "boolean" ? options.follow : true)
- this.log.verbose("request", "on initialization, where is", where)
-
- if (parsed.search) {
- where = where + parsed.search
- parsed.search = ""
- }
- parsed.pathname = "/"
- this.log.verbose("request", "after pass 1, where is", where)
+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")
+
+ 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.
var cb = once(cb_)
- if (where.match(/^\/?favicon.ico/)) {
+ if (uri.match(/^\/?favicon.ico/)) {
return cb(new Error("favicon.ico isn't a package, it's a picture."))
}
- var adduserChange = /^\/?-\/user\/org\.couchdb\.user:([^\/]+)\/-rev/
- , isUserChange = where.match(adduserChange)
- , adduserNew = /^\/?-\/user\/org\.couchdb\.user:([^\/]+)$/
- , isNewUser = where.match(adduserNew)
- , registry = url.format(parsed)
- , alwaysAuth = this.conf.getCredentialsByURI(registry).alwaysAuth
- , isDelete = method === "DELETE"
- , isWrite = what || isDelete
+ 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
if (isUserChange && !isWrite) {
return cb(new Error("trying to change user document without writing(?!)"))
}
- // resolve to a full url on the registry
- if (!where.match(/^https?:\/\//)) {
- this.log.verbose("request", "url raw", where)
-
- var q = where.split("?")
- where = q.shift()
- q = q.join("?")
-
- if (where.charAt(0) !== "/") where = "/" + where
- where = "." + where.split("/").map(function (p) {
- p = p.trim()
- if (p.match(/^org.couchdb.user/)) {
- return p.replace(/\//g, encodeURIComponent("/"))
- }
- return p
- }).join("/")
- if (q) where += "?" + q
-
- this.log.verbose("request", "resolving registry", [registry, where])
- where = url.resolve(registry, where)
- this.log.verbose("request", "after pass 2, where is", where)
- }
-
- var authed
// new users can *not* use auth, because they don't *have* auth yet
- if (isNewUser) {
+ if (isUserChange) {
+ 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")
- authed = false
+ params.authed = false
}
else if (alwaysAuth) {
this.log.verbose("request", "always-auth set; sending authorization")
- authed = true
+ params.authed = true
}
else if (isWrite) {
this.log.verbose("request", "sending authorization for write operation")
- authed = true
+ params.authed = true
}
else {
// most of the time we don't want to auth
this.log.verbose("request", "no auth needed")
- authed = false
+ params.authed = false
}
var self = this
this.attempt(function (operation) {
- makeRequest.call(self, method, where, what, options.etag, follow, authed
- , function (er, parsed, raw, response) {
+ makeRequest.call(self, uri, params, function (er, parsed, raw, response) {
if (!er || (er.message && er.message.match(/^SSL Error/))) {
if (er)
er.code = "ESSL"
@@ -127,51 +94,64 @@ function regRequest (method, uri, options, cb_) {
})
}
-function makeRequest (method, where, what, etag, follow, authed, cb_) {
+function makeRequest (uri, params, cb_) {
var cb = once(cb_)
- var parsed = url.parse(where)
+ var parsed = url.parse(uri)
var headers = {}
// metadata should be compressed
headers["accept-encoding"] = "gzip"
- var er = this.authify(authed, parsed, headers)
+ var er = this.authify(params.authed, parsed, headers, params.auth)
if (er) return cb_(er)
var opts = this.initialize(
parsed,
- method,
+ params.method,
"application/json",
headers
)
- opts.followRedirect = follow
+ opts.followRedirect = (typeof params.follow === "boolean" ? params.follow : true)
opts.encoding = null // tell request let body be Buffer instance
- if (etag) {
- this.log.verbose("etag", etag)
- headers[method === "GET" ? "if-none-match" : "if-match"] = etag
+ if (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;
}
- // figure out wth "what" is
- if (what) {
- if (Buffer.isBuffer(what) || typeof what === "string") {
- opts.body = what
+ // 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"] = Buffer.byteLength(what)
- } else if (what instanceof Stream) {
+ 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 (what.size) headers["content-length"] = what.size
- } else {
- delete what._etag
- opts.json = what
+ 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", method, parsed.href || "/")
+ this.log.http("request", params.method, parsed.href || "/")
- var done = requestDone.call(this, method, where, cb)
+ var done = requestDone.call(this, params.method, uri, cb)
var req = request(opts, decodeResponseBody(done))
req.on("error", cb)
@@ -179,8 +159,8 @@ function makeRequest (method, where, what, etag, follow, authed, cb_) {
s.on("error", cb)
})
- if (what && (what instanceof Stream)) {
- what.pipe(req)
+ if (params.body && (params.body instanceof Stream)) {
+ params.body.pipe(req)
}
}
@@ -194,7 +174,9 @@ function decodeResponseBody(cb) {
response.socket.destroy()
}
- if (response.headers["content-encoding"] !== "gzip") return cb(er, response, data)
+ if (response.headers["content-encoding"] !== "gzip") {
+ return cb(er, response, data)
+ }
zlib.gunzip(data, function (er, buf) {
if (er) return cb(er, response, data)
@@ -210,16 +192,14 @@ 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))
- var parsed
-
if (Buffer.isBuffer(data)) {
data = data.toString()
}
+ var parsed
if (data && typeof data === "string" && response.statusCode !== 304) {
try {
parsed = JSON.parse(data)
@@ -246,7 +226,13 @@ function requestDone (method, where, cb) {
parsed._etag = response.headers.etag
}
- if (parsed && parsed.error && response.statusCode >= 400) {
+ 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" ||
+ response.statusCode >= 400) {
var w = url.parse(where).pathname.substr(1)
var name
if (!w.match(/^-/)) {
@@ -254,24 +240,24 @@ function requestDone (method, where, cb) {
name = w[w.indexOf("_rewrite") + 1]
}
- if (name && parsed.error === "not_found") {
+ if (!parsed.error) {
+ er = new Error(
+ "Registry returned " + response.statusCode +
+ " for " + method +
+ " on " + where
+ )
+ }
+ else if (name && parsed.error === "not_found") {
er = new Error("404 Not Found: " + name)
- } else {
+ }
+ 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
-
- } else if (method !== "HEAD" && method !== "GET") {
- // invalidate cache
- // This is irrelevant for commands that do etag caching, but
- // ls and view also have a timed cache, so this keeps the user
- // from thinking that it didn't work when it did.
- // Note that failure is an acceptable option here, since the
- // only result will be a stale cache for some helper commands.
- rm(this.cacheFile(where), function() {})
}
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 97745851e..87c5b67c4 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/star.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/star.js
@@ -1,32 +1,52 @@
-
module.exports = star
-function star (uri, starred, cb) {
- var c = this.conf.getCredentialsByURI(uri)
- if (c.token) {
- return cb(new Error("This operation is unsupported for token-based auth"))
- }
- else if (!c.auth) {
- return cb(new Error("Must be logged in to star/unstar packages"))
+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")
+
+ var starred = params.starred ? true : false
+
+ var auth = params.auth
+ 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"
+ return cb(er)
}
- this.request("GET", uri + "?write=true", null, function (er, fullData) {
+ var client = this
+ this.request(uri+"?write=true", { auth : auth }, function (er, fullData) {
if (er) return cb(er)
- fullData = { _id: fullData._id
- , _rev: fullData._rev
- , users: fullData.users || {} }
-
- if (starred) {
- this.log.info("starring", fullData._id)
- fullData.users[c.username] = true
- this.log.verbose("starring", fullData)
- } else {
- delete fullData.users[c.username]
- this.log.info("unstarring", fullData._id)
- this.log.verbose("unstarring", fullData)
- }
-
- return this.request("PUT", uri, { body : fullData }, cb)
- }.bind(this))
+ client.whoami(uri, params, function (er, username) {
+ if (er) return cb(er)
+
+ var data = {
+ _id : fullData._id,
+ _rev : fullData._rev,
+ users : fullData.users || {}
+ }
+
+ if (starred) {
+ client.log.info("starring", data._id)
+ data.users[username] = true
+ client.log.verbose("starring", data)
+ }
+ else {
+ delete data.users[username]
+ client.log.info("unstarring", data._id)
+ client.log.verbose("unstarring", data)
+ }
+
+ var options = {
+ 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 86a252efb..f55551242 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/stars.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/stars.js
@@ -1,9 +1,18 @@
+module.exports = stars
+
+var assert = require("assert")
var url = require("url")
-module.exports = stars
+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")
+
+ 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"))
+ var encoded = encodeURIComponent(name)
+ var path = "-/_view/starredByUser?key=\""+encoded+"\""
-function stars (base, name, cb) {
- name = encodeURIComponent(name)
- var path = "/-/_view/starredByUser?key=\""+name+"\""
- this.request("GET", url.resolve(base, path), null, 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 65430fe93..8b4219907 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/tag.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/tag.js
@@ -1,5 +1,20 @@
module.exports = tag
-function tag (uri, version, tagName, cb) {
- this.request("PUT", uri+"/"+tagName, { body : JSON.stringify(version) }, cb)
+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 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")
+
+ var options = {
+ method : "PUT",
+ body : JSON.stringify(params.version),
+ auth : params.auth
+ }
+ 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 346d537fe..e6e954935 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
@@ -1,3 +1,4 @@
+module.exports = unpublish
// fetch the data
// modify to remove the version in question
@@ -5,16 +6,26 @@
// else, PUT the modified data
// delete the tarball
-module.exports = unpublish
-
var semver = require("semver")
, url = require("url")
, chain = require("slide").chain
+ , assert = require("assert")
-function unpublish (uri, ver, cb) {
- if (typeof cb !== "function") cb = ver, ver = null
+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")
- this.get(uri + "?write=true", { timeout : -1, follow : false }, function (er, data) {
+ var ver = params.version
+ var auth = params.auth
+ assert(auth && typeof auth === "object", "must pass auth to unpublish")
+
+ var options = {
+ timeout : -1,
+ follow : false,
+ auth : auth
+ }
+ this.get(uri + "?write=true", options, function (er, data) {
if (er) {
this.log.info("unpublish", uri+" not published")
return cb()
@@ -22,7 +33,7 @@ function unpublish (uri, ver, cb) {
// remove all if no version specified
if (!ver) {
this.log.info("unpublish", "No version specified, removing all")
- return this.request("DELETE", uri+"/-rev/"+data._rev, null, cb)
+ return this.request(uri+"/-rev/"+data._rev, { method : "DELETE", auth : auth }, cb)
}
var versions = data.versions || {}
@@ -40,7 +51,7 @@ function unpublish (uri, ver, cb) {
// 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("DELETE", uri + "/-rev/" + data._rev, null, cb)
+ return this.request(uri+"/-rev/"+data._rev, { method : "DELETE", auth : auth }, cb)
}
if (!versionPublic) return cb()
@@ -58,9 +69,9 @@ function unpublish (uri, ver, cb) {
var rev = data._rev
delete data._revisions
delete data._attachments
- var cb_ = detacher.call(this, uri, data, dist, cb)
+ var cb_ = detacher.call(this, uri, data, dist, auth, cb)
- this.request("PUT", uri + "/-rev/" + rev, { body : data }, 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")
}
@@ -69,20 +80,20 @@ function unpublish (uri, ver, cb) {
}.bind(this))
}
-function detacher (uri, data, dist, cb) {
+function detacher (uri, data, dist, credentials, cb) {
return function (er) {
if (er) return cb(er)
- this.get(escape(uri, data.name), null, 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)
- detach.call(this, uri, data, tb.pathname, data._rev, function (er) {
+ detach.call(this, uri, data, tb.pathname, data._rev, credentials, function (er) {
if (er || !dist.bin) return cb(er)
chain(Object.keys(dist.bin).map(function (bt) {
return function (cb) {
var d = dist.bin[bt]
- detach.call(this, uri, data, url.parse(d.tarball).pathname, null, cb)
+ detach.call(this, uri, data, url.parse(d.tarball).pathname, null, credentials, cb)
}.bind(this)
}, this), cb)
}.bind(this))
@@ -90,13 +101,13 @@ function detacher (uri, data, dist, cb) {
}.bind(this)
}
-function detach (uri, data, path, rev, cb) {
+function detach (uri, data, path, rev, credentials, cb) {
if (rev) {
path += "/-rev/" + rev
this.log.info("detach", path)
- return this.request("DELETE", url.resolve(uri, path), null, cb)
+ return this.request(url.resolve(uri, path), { method : "DELETE", auth : credentials }, cb)
}
- this.get(escape(uri, data.name), null, 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))
diff --git a/deps/npm/node_modules/npm-registry-client/lib/upload.js b/deps/npm/node_modules/npm-registry-client/lib/upload.js
deleted file mode 100644
index f624a266c..000000000
--- a/deps/npm/node_modules/npm-registry-client/lib/upload.js
+++ /dev/null
@@ -1,22 +0,0 @@
-module.exports = upload
-
-var fs = require('fs')
-, Stream = require("stream").Stream
-
-function upload (uri, file, etag, nofollow, cb) {
- if (typeof nofollow === "function") cb = nofollow, nofollow = false
- if (typeof etag === "function") cb = etag, etag = null
-
- if (file instanceof Stream) {
- return this.request("PUT", uri, { body : file, etag : etag, follow : !nofollow }, cb)
- }
-
- fs.stat(file, function (er, stat) {
- if (er) return cb(er)
- var s = fs.createReadStream(file)
- s.size = stat.size
- s.on("error", cb)
-
- this.request("PUT", uri, { body : s, etag : etag, follow : !nofollow }, cb)
- }.bind(this))
-}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/util/nerf-dart.js b/deps/npm/node_modules/npm-registry-client/lib/util/nerf-dart.js
deleted file mode 100644
index 3b26a56c6..000000000
--- a/deps/npm/node_modules/npm-registry-client/lib/util/nerf-dart.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var url = require("url")
-
-module.exports = toNerfDart
-
-/**
- * Maps a URL to an identifier.
- *
- * Name courtesy schiffertronix media LLC, a New Jersey corporation
- *
- * @param {String} uri The URL to be nerfed.
- *
- * @returns {String} A nerfed URL.
- */
-function toNerfDart(uri) {
- var parsed = url.parse(uri)
- parsed.pathname = "/"
- delete parsed.protocol
- delete parsed.auth
-
- return url.format(parsed)
-}
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 ffa7bd704..4c099ebec 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/whoami.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/whoami.js
@@ -1,13 +1,19 @@
module.exports = whoami
var url = require("url")
+ , assert = require("assert")
-function whoami (uri, cb) {
- if (!this.conf.getCredentialsByURI(uri)) {
- return cb(new Error("Must be logged in to see who you are"))
- }
+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")
- this.request("GET", url.resolve(uri, "whoami"), null, function (er, userdata) {
+ var auth = params.auth
+ 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) {
if (er) return cb(er)
cb(null, userdata.username)
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/.npmignore b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/.npmignore
new file mode 100644
index 000000000..b512c09d4
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/.npmignore
@@ -0,0 +1 @@
+node_modules \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/LICENSE b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/LICENSE
new file mode 100644
index 000000000..99c130e1d
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/LICENSE
@@ -0,0 +1,24 @@
+The MIT License
+
+Copyright (c) 2013 Max Ogden
+
+Permission is hereby granted, free of charge,
+to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to
+deal in the Software without restriction, including
+without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom
+the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/index.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/index.js
new file mode 100644
index 000000000..7511eed8a
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/index.js
@@ -0,0 +1,132 @@
+var Writable = require('readable-stream').Writable
+var inherits = require('inherits')
+var TA = require('typedarray')
+var U8 = typeof Uint8Array !== 'undefined' ? Uint8Array : TA.Uint8Array
+
+function ConcatStream(opts, cb) {
+ if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)
+
+ if (typeof opts === 'function') {
+ cb = opts
+ opts = {}
+ }
+ if (!opts) opts = {}
+
+ var encoding = opts.encoding
+ var shouldInferEncoding = false
+
+ if (!encoding) {
+ shouldInferEncoding = true
+ } else {
+ encoding = String(encoding).toLowerCase()
+ if (encoding === 'u8' || encoding === 'uint8') {
+ encoding = 'uint8array'
+ }
+ }
+
+ Writable.call(this, { objectMode: true })
+
+ this.encoding = encoding
+ this.shouldInferEncoding = shouldInferEncoding
+
+ if (cb) this.on('finish', function () { cb(this.getBody()) })
+ this.body = []
+}
+
+module.exports = ConcatStream
+inherits(ConcatStream, Writable)
+
+ConcatStream.prototype._write = function(chunk, enc, next) {
+ this.body.push(chunk)
+ next()
+}
+
+ConcatStream.prototype.inferEncoding = function (buff) {
+ var firstBuffer = buff === undefined ? this.body[0] : buff;
+ if (Buffer.isBuffer(firstBuffer)) return 'buffer'
+ if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'
+ if (Array.isArray(firstBuffer)) return 'array'
+ if (typeof firstBuffer === 'string') return 'string'
+ if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'
+ return 'buffer'
+}
+
+ConcatStream.prototype.getBody = function () {
+ if (!this.encoding && this.body.length === 0) return []
+ if (this.shouldInferEncoding) this.encoding = this.inferEncoding()
+ if (this.encoding === 'array') return arrayConcat(this.body)
+ if (this.encoding === 'string') return stringConcat(this.body)
+ if (this.encoding === 'buffer') return bufferConcat(this.body)
+ if (this.encoding === 'uint8array') return u8Concat(this.body)
+ return this.body
+}
+
+var isArray = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]'
+}
+
+function isArrayish (arr) {
+ return /Array\]$/.test(Object.prototype.toString.call(arr))
+}
+
+function stringConcat (parts) {
+ var strings = []
+ var needsToString = false
+ for (var i = 0; i < parts.length; i++) {
+ var p = parts[i]
+ if (typeof p === 'string') {
+ strings.push(p)
+ } else if (Buffer.isBuffer(p)) {
+ strings.push(p)
+ } else {
+ strings.push(Buffer(p))
+ }
+ }
+ if (Buffer.isBuffer(parts[0])) {
+ strings = Buffer.concat(strings)
+ strings = strings.toString('utf8')
+ } else {
+ strings = strings.join('')
+ }
+ return strings
+}
+
+function bufferConcat (parts) {
+ var bufs = []
+ for (var i = 0; i < parts.length; i++) {
+ var p = parts[i]
+ if (Buffer.isBuffer(p)) {
+ bufs.push(p)
+ } else if (typeof p === 'string' || isArrayish(p)
+ || (p && typeof p.subarray === 'function')) {
+ bufs.push(Buffer(p))
+ } else bufs.push(Buffer(String(p)))
+ }
+ return Buffer.concat(bufs)
+}
+
+function arrayConcat (parts) {
+ var res = []
+ for (var i = 0; i < parts.length; i++) {
+ res.push.apply(res, parts[i])
+ }
+ return res
+}
+
+function u8Concat (parts) {
+ var len = 0
+ for (var i = 0; i < parts.length; i++) {
+ if (typeof parts[i] === 'string') {
+ parts[i] = Buffer(parts[i])
+ }
+ len += parts[i].length
+ }
+ var u8 = new U8(len)
+ for (var i = 0, offset = 0; i < parts.length; i++) {
+ var part = parts[i]
+ for (var j = 0; j < part.length; j++) {
+ u8[offset++] = part[j]
+ }
+ }
+ return u8
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/.npmignore b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/.npmignore
new file mode 100644
index 000000000..38344f87a
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/.npmignore
@@ -0,0 +1,5 @@
+build/
+test/
+examples/
+fs.js
+zlib.js \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/LICENSE b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/LICENSE
new file mode 100644
index 000000000..e3d4e695a
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/LICENSE
@@ -0,0 +1,18 @@
+Copyright Joyent, Inc. and other Node contributors. 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/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/README.md
new file mode 100644
index 000000000..e46b82390
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/README.md
@@ -0,0 +1,15 @@
+# readable-stream
+
+***Node-core streams for userland***
+
+[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/)
+[![NPM](https://nodei.co/npm-dl/readable-stream.png&months=6&height=3)](https://nodei.co/npm/readable-stream/)
+
+This package is a mirror of the Streams2 and Streams3 implementations in Node-core.
+
+If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core.
+
+**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12.
+
+**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"`
+
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/duplex.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/duplex.js
new file mode 100644
index 000000000..ca807af87
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/duplex.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_duplex.js")
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/float.patch b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/float.patch
new file mode 100644
index 000000000..b984607a4
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/float.patch
@@ -0,0 +1,923 @@
+diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js
+index c5a741c..a2e0d8e 100644
+--- a/lib/_stream_duplex.js
++++ b/lib/_stream_duplex.js
+@@ -26,8 +26,8 @@
+
+ module.exports = Duplex;
+ var util = require('util');
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('./_stream_readable');
++var Writable = require('./_stream_writable');
+
+ util.inherits(Duplex, Readable);
+
+diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js
+index a5e9864..330c247 100644
+--- a/lib/_stream_passthrough.js
++++ b/lib/_stream_passthrough.js
+@@ -25,7 +25,7 @@
+
+ module.exports = PassThrough;
+
+-var Transform = require('_stream_transform');
++var Transform = require('./_stream_transform');
+ var util = require('util');
+ util.inherits(PassThrough, Transform);
+
+diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
+index 0c3fe3e..90a8298 100644
+--- a/lib/_stream_readable.js
++++ b/lib/_stream_readable.js
+@@ -23,10 +23,34 @@ module.exports = Readable;
+ Readable.ReadableState = ReadableState;
+
+ var EE = require('events').EventEmitter;
++if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
++ return emitter.listeners(type).length;
++};
++
++if (!global.setImmediate) global.setImmediate = function setImmediate(fn) {
++ return setTimeout(fn, 0);
++};
++if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) {
++ return clearTimeout(i);
++};
++
+ var Stream = require('stream');
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ var StringDecoder;
+-var debug = util.debuglog('stream');
++var debug;
++if (util.debuglog)
++ debug = util.debuglog('stream');
++else try {
++ debug = require('debuglog')('stream');
++} catch (er) {
++ debug = function() {};
++}
+
+ util.inherits(Readable, Stream);
+
+@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) {
+
+
+ function onEofChunk(stream, state) {
+- if (state.decoder && !state.ended) {
++ if (state.decoder && !state.ended && state.decoder.end) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js
+index b1f9fcc..b0caf57 100644
+--- a/lib/_stream_transform.js
++++ b/lib/_stream_transform.js
+@@ -64,8 +64,14 @@
+
+ module.exports = Transform;
+
+-var Duplex = require('_stream_duplex');
++var Duplex = require('./_stream_duplex');
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ util.inherits(Transform, Duplex);
+
+
+diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
+index ba2e920..f49288b 100644
+--- a/lib/_stream_writable.js
++++ b/lib/_stream_writable.js
+@@ -27,6 +27,12 @@ module.exports = Writable;
+ Writable.WritableState = WritableState;
+
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ var Stream = require('stream');
+
+ util.inherits(Writable, Stream);
+@@ -119,7 +125,7 @@ function WritableState(options, stream) {
+ function Writable(options) {
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex))
++ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex')))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js
+index e3787e4..8cd2127 100644
+--- a/test/simple/test-stream-big-push.js
++++ b/test/simple/test-stream-big-push.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+ var str = 'asdfasdfasdfasdfasdf';
+
+ var r = new stream.Readable({
+diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js
+index bb73777..d40efc7 100644
+--- a/test/simple/test-stream-end-paused.js
++++ b/test/simple/test-stream-end-paused.js
+@@ -25,7 +25,7 @@ var gotEnd = false;
+
+ // Make sure we don't miss the end event for paused 0-length streams
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var stream = new Readable();
+ var calledRead = false;
+ stream._read = function() {
+diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js
+index b46ee90..0be8366 100644
+--- a/test/simple/test-stream-pipe-after-end.js
++++ b/test/simple/test-stream-pipe-after-end.js
+@@ -22,8 +22,8 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var util = require('util');
+
+ util.inherits(TestReadable, Readable);
+diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js
+deleted file mode 100644
+index f689358..0000000
+--- a/test/simple/test-stream-pipe-cleanup.js
++++ /dev/null
+@@ -1,122 +0,0 @@
+-// Copyright Joyent, Inc. and other Node contributors.
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a
+-// copy of this software and associated documentation files (the
+-// "Software"), to deal in the Software without restriction, including
+-// without limitation the rights to use, copy, modify, merge, publish,
+-// distribute, sublicense, and/or sell copies of the Software, and to permit
+-// persons to whom the Software is furnished to do so, subject to the
+-// following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included
+-// in all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+-
+-// This test asserts that Stream.prototype.pipe does not leave listeners
+-// hanging on the source or dest.
+-
+-var common = require('../common');
+-var stream = require('stream');
+-var assert = require('assert');
+-var util = require('util');
+-
+-function Writable() {
+- this.writable = true;
+- this.endCalls = 0;
+- stream.Stream.call(this);
+-}
+-util.inherits(Writable, stream.Stream);
+-Writable.prototype.end = function() {
+- this.endCalls++;
+-};
+-
+-Writable.prototype.destroy = function() {
+- this.endCalls++;
+-};
+-
+-function Readable() {
+- this.readable = true;
+- stream.Stream.call(this);
+-}
+-util.inherits(Readable, stream.Stream);
+-
+-function Duplex() {
+- this.readable = true;
+- Writable.call(this);
+-}
+-util.inherits(Duplex, Writable);
+-
+-var i = 0;
+-var limit = 100;
+-
+-var w = new Writable();
+-
+-var r;
+-
+-for (i = 0; i < limit; i++) {
+- r = new Readable();
+- r.pipe(w);
+- r.emit('end');
+-}
+-assert.equal(0, r.listeners('end').length);
+-assert.equal(limit, w.endCalls);
+-
+-w.endCalls = 0;
+-
+-for (i = 0; i < limit; i++) {
+- r = new Readable();
+- r.pipe(w);
+- r.emit('close');
+-}
+-assert.equal(0, r.listeners('close').length);
+-assert.equal(limit, w.endCalls);
+-
+-w.endCalls = 0;
+-
+-r = new Readable();
+-
+-for (i = 0; i < limit; i++) {
+- w = new Writable();
+- r.pipe(w);
+- w.emit('close');
+-}
+-assert.equal(0, w.listeners('close').length);
+-
+-r = new Readable();
+-w = new Writable();
+-var d = new Duplex();
+-r.pipe(d); // pipeline A
+-d.pipe(w); // pipeline B
+-assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup
+-assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup
+-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
+-assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 1); // B.cleanup
+-
+-r.emit('end');
+-assert.equal(d.endCalls, 1);
+-assert.equal(w.endCalls, 0);
+-assert.equal(r.listeners('end').length, 0);
+-assert.equal(r.listeners('close').length, 0);
+-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
+-assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 1); // B.cleanup
+-
+-d.emit('end');
+-assert.equal(d.endCalls, 1);
+-assert.equal(w.endCalls, 1);
+-assert.equal(r.listeners('end').length, 0);
+-assert.equal(r.listeners('close').length, 0);
+-assert.equal(d.listeners('end').length, 0);
+-assert.equal(d.listeners('close').length, 0);
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 0);
+diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js
+index c5d724b..c7d6b7d 100644
+--- a/test/simple/test-stream-pipe-error-handling.js
++++ b/test/simple/test-stream-pipe-error-handling.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var Stream = require('stream').Stream;
++var Stream = require('../../').Stream;
+
+ (function testErrorListenerCatches() {
+ var source = new Stream();
+diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js
+index cb9d5fe..56f8d61 100644
+--- a/test/simple/test-stream-pipe-event.js
++++ b/test/simple/test-stream-pipe-event.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common');
+-var stream = require('stream');
++var stream = require('../../');
+ var assert = require('assert');
+ var util = require('util');
+
+diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js
+index f2e6ec2..a5c9bf9 100644
+--- a/test/simple/test-stream-push-order.js
++++ b/test/simple/test-stream-push-order.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var assert = require('assert');
+
+ var s = new Readable({
+diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js
+index 06f43dc..1701a9a 100644
+--- a/test/simple/test-stream-push-strings.js
++++ b/test/simple/test-stream-push-strings.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var util = require('util');
+
+ util.inherits(MyStream, Readable);
+diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js
+index ba6a577..a8e6f7b 100644
+--- a/test/simple/test-stream-readable-event.js
++++ b/test/simple/test-stream-readable-event.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ (function first() {
+ // First test, not reading when the readable is added.
+diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js
+index 2891ad6..11689ba 100644
+--- a/test/simple/test-stream-readable-flow-recursion.js
++++ b/test/simple/test-stream-readable-flow-recursion.js
+@@ -27,7 +27,7 @@ var assert = require('assert');
+ // more data continuously, but without triggering a nextTick
+ // warning or RangeError.
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ // throw an error if we trigger a nextTick warning.
+ process.throwDeprecation = true;
+diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js
+index 0c96476..7827538 100644
+--- a/test/simple/test-stream-unshift-empty-chunk.js
++++ b/test/simple/test-stream-unshift-empty-chunk.js
+@@ -24,7 +24,7 @@ var assert = require('assert');
+
+ // This test verifies that stream.unshift(Buffer(0)) or
+ // stream.unshift('') does not set state.reading=false.
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ var r = new Readable();
+ var nChunks = 10;
+diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js
+index 83fd9fa..17c18aa 100644
+--- a/test/simple/test-stream-unshift-read-race.js
++++ b/test/simple/test-stream-unshift-read-race.js
+@@ -29,7 +29,7 @@ var assert = require('assert');
+ // 3. push() after the EOF signaling null is an error.
+ // 4. _read() is not called after pushing the EOF null chunk.
+
+-var stream = require('stream');
++var stream = require('../../');
+ var hwm = 10;
+ var r = stream.Readable({ highWaterMark: hwm });
+ var chunks = 10;
+@@ -51,7 +51,14 @@ r._read = function(n) {
+
+ function push(fast) {
+ assert(!pushedNull, 'push() after null push');
+- var c = pos >= data.length ? null : data.slice(pos, pos + n);
++ var c;
++ if (pos >= data.length)
++ c = null;
++ else {
++ if (n + pos > data.length)
++ n = data.length - pos;
++ c = data.slice(pos, pos + n);
++ }
+ pushedNull = c === null;
+ if (fast) {
+ pos += n;
+diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js
+index 5b49e6e..b5321f3 100644
+--- a/test/simple/test-stream-writev.js
++++ b/test/simple/test-stream-writev.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var stream = require('stream');
++var stream = require('../../');
+
+ var queue = [];
+ for (var decode = 0; decode < 2; decode++) {
+diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js
+index 3814bf0..248c1be 100644
+--- a/test/simple/test-stream2-basic.js
++++ b/test/simple/test-stream2-basic.js
+@@ -21,7 +21,7 @@
+
+
+ var common = require('../common.js');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js
+index 6cdd4e9..f0fa84b 100644
+--- a/test/simple/test-stream2-compatibility.js
++++ b/test/simple/test-stream2-compatibility.js
+@@ -21,7 +21,7 @@
+
+
+ var common = require('../common.js');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js
+index 39b274f..006a19b 100644
+--- a/test/simple/test-stream2-finish-pipe.js
++++ b/test/simple/test-stream2-finish-pipe.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var stream = require('stream');
++var stream = require('../../');
+ var Buffer = require('buffer').Buffer;
+
+ var r = new stream.Readable();
+diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js
+deleted file mode 100644
+index e162406..0000000
+--- a/test/simple/test-stream2-fs.js
++++ /dev/null
+@@ -1,72 +0,0 @@
+-// Copyright Joyent, Inc. and other Node contributors.
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a
+-// copy of this software and associated documentation files (the
+-// "Software"), to deal in the Software without restriction, including
+-// without limitation the rights to use, copy, modify, merge, publish,
+-// distribute, sublicense, and/or sell copies of the Software, and to permit
+-// persons to whom the Software is furnished to do so, subject to the
+-// following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included
+-// in all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+-
+-
+-var common = require('../common.js');
+-var R = require('_stream_readable');
+-var assert = require('assert');
+-
+-var fs = require('fs');
+-var FSReadable = fs.ReadStream;
+-
+-var path = require('path');
+-var file = path.resolve(common.fixturesDir, 'x1024.txt');
+-
+-var size = fs.statSync(file).size;
+-
+-var expectLengths = [1024];
+-
+-var util = require('util');
+-var Stream = require('stream');
+-
+-util.inherits(TestWriter, Stream);
+-
+-function TestWriter() {
+- Stream.apply(this);
+- this.buffer = [];
+- this.length = 0;
+-}
+-
+-TestWriter.prototype.write = function(c) {
+- this.buffer.push(c.toString());
+- this.length += c.length;
+- return true;
+-};
+-
+-TestWriter.prototype.end = function(c) {
+- if (c) this.buffer.push(c.toString());
+- this.emit('results', this.buffer);
+-}
+-
+-var r = new FSReadable(file);
+-var w = new TestWriter();
+-
+-w.on('results', function(res) {
+- console.error(res, w.length);
+- assert.equal(w.length, size);
+- var l = 0;
+- assert.deepEqual(res.map(function (c) {
+- return c.length;
+- }), expectLengths);
+- console.log('ok');
+-});
+-
+-r.pipe(w);
+diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js
+deleted file mode 100644
+index 15cffc2..0000000
+--- a/test/simple/test-stream2-httpclient-response-end.js
++++ /dev/null
+@@ -1,52 +0,0 @@
+-// Copyright Joyent, Inc. and other Node contributors.
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a
+-// copy of this software and associated documentation files (the
+-// "Software"), to deal in the Software without restriction, including
+-// without limitation the rights to use, copy, modify, merge, publish,
+-// distribute, sublicense, and/or sell copies of the Software, and to permit
+-// persons to whom the Software is furnished to do so, subject to the
+-// following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included
+-// in all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+-
+-var common = require('../common.js');
+-var assert = require('assert');
+-var http = require('http');
+-var msg = 'Hello';
+-var readable_event = false;
+-var end_event = false;
+-var server = http.createServer(function(req, res) {
+- res.writeHead(200, {'Content-Type': 'text/plain'});
+- res.end(msg);
+-}).listen(common.PORT, function() {
+- http.get({port: common.PORT}, function(res) {
+- var data = '';
+- res.on('readable', function() {
+- console.log('readable event');
+- readable_event = true;
+- data += res.read();
+- });
+- res.on('end', function() {
+- console.log('end event');
+- end_event = true;
+- assert.strictEqual(msg, data);
+- server.close();
+- });
+- });
+-});
+-
+-process.on('exit', function() {
+- assert(readable_event);
+- assert(end_event);
+-});
+-
+diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js
+index 2fbfbca..667985b 100644
+--- a/test/simple/test-stream2-large-read-stall.js
++++ b/test/simple/test-stream2-large-read-stall.js
+@@ -30,7 +30,7 @@ var PUSHSIZE = 20;
+ var PUSHCOUNT = 1000;
+ var HWM = 50;
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var r = new Readable({
+ highWaterMark: HWM
+ });
+@@ -39,23 +39,23 @@ var rs = r._readableState;
+ r._read = push;
+
+ r.on('readable', function() {
+- console.error('>> readable');
++ //console.error('>> readable');
+ do {
+- console.error(' > read(%d)', READSIZE);
++ //console.error(' > read(%d)', READSIZE);
+ var ret = r.read(READSIZE);
+- console.error(' < %j (%d remain)', ret && ret.length, rs.length);
++ //console.error(' < %j (%d remain)', ret && ret.length, rs.length);
+ } while (ret && ret.length === READSIZE);
+
+- console.error('<< after read()',
+- ret && ret.length,
+- rs.needReadable,
+- rs.length);
++ //console.error('<< after read()',
++ // ret && ret.length,
++ // rs.needReadable,
++ // rs.length);
+ });
+
+ var endEmitted = false;
+ r.on('end', function() {
+ endEmitted = true;
+- console.error('end');
++ //console.error('end');
+ });
+
+ var pushes = 0;
+@@ -64,11 +64,11 @@ function push() {
+ return;
+
+ if (pushes++ === PUSHCOUNT) {
+- console.error(' push(EOF)');
++ //console.error(' push(EOF)');
+ return r.push(null);
+ }
+
+- console.error(' push #%d', pushes);
++ //console.error(' push #%d', pushes);
+ if (r.push(new Buffer(PUSHSIZE)))
+ setTimeout(push);
+ }
+diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js
+index 3e6931d..ff47d89 100644
+--- a/test/simple/test-stream2-objects.js
++++ b/test/simple/test-stream2-objects.js
+@@ -21,8 +21,8 @@
+
+
+ var common = require('../common.js');
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var assert = require('assert');
+
+ // tiny node-tap lookalike.
+diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js
+index cf7531c..e3f3e4e 100644
+--- a/test/simple/test-stream2-pipe-error-handling.js
++++ b/test/simple/test-stream2-pipe-error-handling.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+
+ (function testErrorListenerCatches() {
+ var count = 1000;
+diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js
+index 5e8e3cb..53b2616 100755
+--- a/test/simple/test-stream2-pipe-error-once-listener.js
++++ b/test/simple/test-stream2-pipe-error-once-listener.js
+@@ -24,7 +24,7 @@ var common = require('../common.js');
+ var assert = require('assert');
+
+ var util = require('util');
+-var stream = require('stream');
++var stream = require('../../');
+
+
+ var Read = function() {
+diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js
+index b63edc3..eb2b0e9 100644
+--- a/test/simple/test-stream2-push.js
++++ b/test/simple/test-stream2-push.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var stream = require('stream');
++var stream = require('../../');
+ var Readable = stream.Readable;
+ var Writable = stream.Writable;
+ var assert = require('assert');
+diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js
+index e8a7305..9740a47 100644
+--- a/test/simple/test-stream2-read-sync-stack.js
++++ b/test/simple/test-stream2-read-sync-stack.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var r = new Readable();
+ var N = 256 * 1024;
+
+diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
+index cd30178..4b1659d 100644
+--- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js
++++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
+@@ -22,10 +22,9 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ test1();
+-test2();
+
+ function test1() {
+ var r = new Readable();
+@@ -88,31 +87,3 @@ function test1() {
+ console.log('ok');
+ });
+ }
+-
+-function test2() {
+- var r = new Readable({ encoding: 'base64' });
+- var reads = 5;
+- r._read = function(n) {
+- if (!reads--)
+- return r.push(null); // EOF
+- else
+- return r.push(new Buffer('x'));
+- };
+-
+- var results = [];
+- function flow() {
+- var chunk;
+- while (null !== (chunk = r.read()))
+- results.push(chunk + '');
+- }
+- r.on('readable', flow);
+- r.on('end', function() {
+- results.push('EOF');
+- });
+- flow();
+-
+- process.on('exit', function() {
+- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]);
+- console.log('ok');
+- });
+-}
+diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js
+index 7c96ffe..04a96f5 100644
+--- a/test/simple/test-stream2-readable-from-list.js
++++ b/test/simple/test-stream2-readable-from-list.js
+@@ -21,7 +21,7 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var fromList = require('_stream_readable')._fromList;
++var fromList = require('../../lib/_stream_readable')._fromList;
+
+ // tiny node-tap lookalike.
+ var tests = [];
+diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js
+index 675da8e..51fd3d5 100644
+--- a/test/simple/test-stream2-readable-legacy-drain.js
++++ b/test/simple/test-stream2-readable-legacy-drain.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Stream = require('stream');
++var Stream = require('../../');
+ var Readable = Stream.Readable;
+
+ var r = new Readable();
+diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js
+index 7314ae7..c971898 100644
+--- a/test/simple/test-stream2-readable-non-empty-end.js
++++ b/test/simple/test-stream2-readable-non-empty-end.js
+@@ -21,7 +21,7 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var Readable = require('_stream_readable');
++var Readable = require('../../lib/_stream_readable');
+
+ var len = 0;
+ var chunks = new Array(10);
+diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js
+index 2e5cf25..fd8a3dc 100644
+--- a/test/simple/test-stream2-readable-wrap-empty.js
++++ b/test/simple/test-stream2-readable-wrap-empty.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
++var Readable = require('../../lib/_stream_readable');
+ var EE = require('events').EventEmitter;
+
+ var oldStream = new EE();
+diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js
+index 90eea01..6b177f7 100644
+--- a/test/simple/test-stream2-readable-wrap.js
++++ b/test/simple/test-stream2-readable-wrap.js
+@@ -22,8 +22,8 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var EE = require('events').EventEmitter;
+
+ var testRuns = 0, completedRuns = 0;
+diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js
+index 5d2c32a..685531b 100644
+--- a/test/simple/test-stream2-set-encoding.js
++++ b/test/simple/test-stream2-set-encoding.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var util = require('util');
+
+ // tiny node-tap lookalike.
+diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js
+index 9c9ddd8..a0cacc6 100644
+--- a/test/simple/test-stream2-transform.js
++++ b/test/simple/test-stream2-transform.js
+@@ -21,8 +21,8 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var PassThrough = require('_stream_passthrough');
+-var Transform = require('_stream_transform');
++var PassThrough = require('../../').PassThrough;
++var Transform = require('../../').Transform;
+
+ // tiny node-tap lookalike.
+ var tests = [];
+diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js
+index d66dc3c..365b327 100644
+--- a/test/simple/test-stream2-unpipe-drain.js
++++ b/test/simple/test-stream2-unpipe-drain.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+ var crypto = require('crypto');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js
+index 99f8746..17c92ae 100644
+--- a/test/simple/test-stream2-unpipe-leak.js
++++ b/test/simple/test-stream2-unpipe-leak.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+
+ var chunk = new Buffer('hallo');
+
+diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js
+index 704100c..209c3a6 100644
+--- a/test/simple/test-stream2-writable.js
++++ b/test/simple/test-stream2-writable.js
+@@ -20,8 +20,8 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var W = require('_stream_writable');
+-var D = require('_stream_duplex');
++var W = require('../../').Writable;
++var D = require('../../').Duplex;
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js
+index b91bde3..2f72c15 100644
+--- a/test/simple/test-stream3-pause-then-read.js
++++ b/test/simple/test-stream3-pause-then-read.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var stream = require('stream');
++var stream = require('../../');
+ var Readable = stream.Readable;
+ var Writable = stream.Writable;
+
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_duplex.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_duplex.js
new file mode 100644
index 000000000..b513d61a9
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_duplex.js
@@ -0,0 +1,89 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a duplex stream is just a stream that is both readable and writable.
+// Since JS doesn't have multiple prototypal inheritance, this class
+// prototypally inherits from Readable, and then parasitically from
+// Writable.
+
+module.exports = Duplex;
+
+/*<replacement>*/
+var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+}
+/*</replacement>*/
+
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+var Readable = require('./_stream_readable');
+var Writable = require('./_stream_writable');
+
+util.inherits(Duplex, Readable);
+
+forEach(objectKeys(Writable.prototype), function(method) {
+ if (!Duplex.prototype[method])
+ Duplex.prototype[method] = Writable.prototype[method];
+});
+
+function Duplex(options) {
+ if (!(this instanceof Duplex))
+ return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false)
+ this.readable = false;
+
+ if (options && options.writable === false)
+ this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false)
+ this.allowHalfOpen = false;
+
+ this.once('end', onend);
+}
+
+// the no-half-open enforcer
+function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended)
+ return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ process.nextTick(this.end.bind(this));
+}
+
+function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_passthrough.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_passthrough.js
new file mode 100644
index 000000000..895ca50a1
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_passthrough.js
@@ -0,0 +1,46 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+module.exports = PassThrough;
+
+var Transform = require('./_stream_transform');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(PassThrough, Transform);
+
+function PassThrough(options) {
+ if (!(this instanceof PassThrough))
+ return new PassThrough(options);
+
+ Transform.call(this, options);
+}
+
+PassThrough.prototype._transform = function(chunk, encoding, cb) {
+ cb(null, chunk);
+};
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js
new file mode 100644
index 000000000..19ab35889
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js
@@ -0,0 +1,951 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+module.exports = Readable;
+
+/*<replacement>*/
+var isArray = require('isarray');
+/*</replacement>*/
+
+
+/*<replacement>*/
+var Buffer = require('buffer').Buffer;
+/*</replacement>*/
+
+Readable.ReadableState = ReadableState;
+
+var EE = require('events').EventEmitter;
+
+/*<replacement>*/
+if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
+ return emitter.listeners(type).length;
+};
+/*</replacement>*/
+
+var Stream = require('stream');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+var StringDecoder;
+
+
+/*<replacement>*/
+var debug = require('util');
+if (debug && debug.debuglog) {
+ debug = debug.debuglog('stream');
+} else {
+ debug = function () {};
+}
+/*</replacement>*/
+
+
+util.inherits(Readable, Stream);
+
+function ReadableState(options, stream) {
+ var Duplex = require('./_stream_duplex');
+
+ options = options || {};
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.buffer = [];
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // when piping, we only care about 'readable' events that happen
+ // after read()ing all the bytes and not getting any pushback.
+ this.ranOut = false;
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder)
+ StringDecoder = require('string_decoder/').StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+}
+
+function Readable(options) {
+ var Duplex = require('./_stream_duplex');
+
+ if (!(this instanceof Readable))
+ return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ Stream.call(this);
+}
+
+// Manually shove something into the read() buffer.
+// This returns true if the highWaterMark has not been hit yet,
+// similar to how Writable.write() returns true if you should
+// write() some more.
+Readable.prototype.push = function(chunk, encoding) {
+ var state = this._readableState;
+
+ if (util.isString(chunk) && !state.objectMode) {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = new Buffer(chunk, encoding);
+ encoding = '';
+ }
+ }
+
+ return readableAddChunk(this, state, chunk, encoding, false);
+};
+
+// Unshift should *always* be something directly out of read()
+Readable.prototype.unshift = function(chunk) {
+ var state = this._readableState;
+ return readableAddChunk(this, state, chunk, '', true);
+};
+
+function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+ var er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (util.isNullOrUndefined(chunk)) {
+ state.reading = false;
+ if (!state.ended)
+ onEofChunk(stream, state);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (state.ended && !addToFront) {
+ var e = new Error('stream.push() after EOF');
+ stream.emit('error', e);
+ } else if (state.endEmitted && addToFront) {
+ var e = new Error('stream.unshift() after end event');
+ stream.emit('error', e);
+ } else {
+ if (state.decoder && !addToFront && !encoding)
+ chunk = state.decoder.write(chunk);
+
+ if (!addToFront)
+ state.reading = false;
+
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront)
+ state.buffer.unshift(chunk);
+ else
+ state.buffer.push(chunk);
+
+ if (state.needReadable)
+ emitReadable(stream);
+ }
+
+ maybeReadMore(stream, state);
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+
+ return needMoreData(state);
+}
+
+
+
+// if it's past the high water mark, we can push in some more.
+// Also, if we have no data yet, we can stand some
+// more bytes. This is to work around cases where hwm=0,
+// such as the repl. Also, if the push() triggered a
+// readable event, and the user called read(largeNumber) such that
+// needReadable was set, then we ought to push more, so that another
+// 'readable' event will be triggered.
+function needMoreData(state) {
+ return !state.ended &&
+ (state.needReadable ||
+ state.length < state.highWaterMark ||
+ state.length === 0);
+}
+
+// backwards compatibility.
+Readable.prototype.setEncoding = function(enc) {
+ if (!StringDecoder)
+ StringDecoder = require('string_decoder/').StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+};
+
+// Don't raise the hwm > 128MB
+var MAX_HWM = 0x800000;
+function roundUpToNextPowerOf2(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2
+ n--;
+ for (var p = 1; p < 32; p <<= 1) n |= n >> p;
+ n++;
+ }
+ return n;
+}
+
+function howMuchToRead(n, state) {
+ if (state.length === 0 && state.ended)
+ return 0;
+
+ if (state.objectMode)
+ return n === 0 ? 0 : 1;
+
+ if (isNaN(n) || util.isNull(n)) {
+ // only flow one buffer at a time
+ if (state.flowing && state.buffer.length)
+ return state.buffer[0].length;
+ else
+ return state.length;
+ }
+
+ if (n <= 0)
+ return 0;
+
+ // If we're asking for more than the target buffer level,
+ // then raise the water mark. Bump up to the next highest
+ // power of 2, to prevent increasing it excessively in tiny
+ // amounts.
+ if (n > state.highWaterMark)
+ state.highWaterMark = roundUpToNextPowerOf2(n);
+
+ // don't have that much. return null, unless we've ended.
+ if (n > state.length) {
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ } else
+ return state.length;
+ }
+
+ return n;
+}
+
+// you can override either this method, or the async _read(n) below.
+Readable.prototype.read = function(n) {
+ debug('read', n);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (!util.isNumber(n) || n > 0)
+ state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 &&
+ state.needReadable &&
+ (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended)
+ endReadable(this);
+ else
+ emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0)
+ endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ }
+
+ if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0)
+ state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ }
+
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (doRead && !state.reading)
+ n = howMuchToRead(nOrig, state);
+
+ var ret;
+ if (n > 0)
+ ret = fromList(n, state);
+ else
+ ret = null;
+
+ if (util.isNull(ret)) {
+ state.needReadable = true;
+ n = 0;
+ }
+
+ state.length -= n;
+
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended && state.length === 0)
+ endReadable(this);
+
+ if (!util.isNull(ret))
+ this.emit('data', ret);
+
+ return ret;
+};
+
+function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+}
+
+
+function onEofChunk(stream, state) {
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+}
+
+// Don't emit readable right away in sync mode, because this can trigger
+// another read() call => stack overflow. This way, it might trigger
+// a nextTick recursion warning, but that's not so bad.
+function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
+ emitReadable_(stream);
+ }
+}
+
+function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+}
+
+
+// at this point, the user has presumably seen the 'readable' event,
+// and called read() to consume some data. that may have triggered
+// in turn another _read(n) call, in which case reading = true if
+// it's in progress.
+// However, if we're not ended, or reading, and the length < hwm,
+// then go ahead and try to read some more preemptively.
+function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ process.nextTick(function() {
+ maybeReadMore_(stream, state);
+ });
+ }
+}
+
+function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended &&
+ state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;
+ else
+ len = state.length;
+ }
+ state.readingMore = false;
+}
+
+// abstract method. to be overridden in specific implementation classes.
+// call cb(er, data) where data is <= n in length.
+// for virtual (non-string, non-buffer) streams, "length" is somewhat
+// arbitrary, and perhaps not very meaningful.
+Readable.prototype._read = function(n) {
+ this.emit('error', new Error('not implemented'));
+};
+
+Readable.prototype.pipe = function(dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
+ dest !== process.stdout &&
+ dest !== process.stderr;
+
+ var endFn = doEnd ? onend : cleanup;
+ if (state.endEmitted)
+ process.nextTick(endFn);
+ else
+ src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable) {
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', cleanup);
+ src.removeListener('data', ondata);
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain &&
+ (!dest._writableState || dest._writableState.needDrain))
+ ondrain();
+ }
+
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ if (false === ret) {
+ debug('false write response, pause',
+ src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EE.listenerCount(dest, 'error') === 0)
+ dest.emit('error', er);
+ }
+ // This is a brutally ugly hack to make sure that our error handler
+ // is attached before any userland ones. NEVER DO THIS.
+ if (!dest._events || !dest._events.error)
+ dest.on('error', onerror);
+ else if (isArray(dest._events.error))
+ dest._events.error.unshift(onerror);
+ else
+ dest._events.error = [onerror, dest._events.error];
+
+
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+};
+
+function pipeOnDrain(src) {
+ return function() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain)
+ state.awaitDrain--;
+ if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+}
+
+
+Readable.prototype.unpipe = function(dest) {
+ var state = this._readableState;
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0)
+ return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes)
+ return this;
+
+ if (!dest)
+ dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest)
+ dest.emit('unpipe', this);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++)
+ dests[i].emit('unpipe', this);
+ return this;
+ }
+
+ // try to find the right one.
+ var i = indexOf(state.pipes, dest);
+ if (i === -1)
+ return this;
+
+ state.pipes.splice(i, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1)
+ state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this);
+
+ return this;
+};
+
+// set up data events if they are asked for
+// Ensure readable listeners eventually get something
+Readable.prototype.on = function(ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+
+ // If listening to data, and it has not explicitly been paused,
+ // then call resume to start the flow of data on the next tick.
+ if (ev === 'data' && false !== this._readableState.flowing) {
+ this.resume();
+ }
+
+ if (ev === 'readable' && this.readable) {
+ var state = this._readableState;
+ if (!state.readableListening) {
+ state.readableListening = true;
+ state.emittedReadable = false;
+ state.needReadable = true;
+ if (!state.reading) {
+ var self = this;
+ process.nextTick(function() {
+ debug('readable nexttick read 0');
+ self.read(0);
+ });
+ } else if (state.length) {
+ emitReadable(this, state);
+ }
+ }
+ }
+
+ return res;
+};
+Readable.prototype.addListener = Readable.prototype.on;
+
+// pause() and resume() are remnants of the legacy readable stream API
+// If the user uses them, then switch into old mode.
+Readable.prototype.resume = function() {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ if (!state.reading) {
+ debug('resume read 0');
+ this.read(0);
+ }
+ resume(this, state);
+ }
+ return this;
+};
+
+function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(function() {
+ resume_(stream, state);
+ });
+ }
+}
+
+function resume_(stream, state) {
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading)
+ stream.read(0);
+}
+
+Readable.prototype.pause = function() {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+};
+
+function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ if (state.flowing) {
+ do {
+ var chunk = stream.read();
+ } while (null !== chunk && state.flowing);
+ }
+}
+
+// wrap an old-style stream as the async data source.
+// This is *not* part of the readable stream interface.
+// It is an ugly unfortunate mess of history.
+Readable.prototype.wrap = function(stream) {
+ var state = this._readableState;
+ var paused = false;
+
+ var self = this;
+ stream.on('end', function() {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length)
+ self.push(chunk);
+ }
+
+ self.push(null);
+ });
+
+ stream.on('data', function(chunk) {
+ debug('wrapped data');
+ if (state.decoder)
+ chunk = state.decoder.write(chunk);
+ if (!chunk || !state.objectMode && !chunk.length)
+ return;
+
+ var ret = self.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
+ this[i] = function(method) { return function() {
+ return stream[method].apply(stream, arguments);
+ }}(i);
+ }
+ }
+
+ // proxy certain important events.
+ var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+ forEach(events, function(ev) {
+ stream.on(ev, self.emit.bind(self, ev));
+ });
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ self._read = function(n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return self;
+};
+
+
+
+// exposed for testing purposes only.
+Readable._fromList = fromList;
+
+// Pluck off n bytes from an array of buffers.
+// Length is the combined lengths of all the buffers in the list.
+function fromList(n, state) {
+ var list = state.buffer;
+ var length = state.length;
+ var stringMode = !!state.decoder;
+ var objectMode = !!state.objectMode;
+ var ret;
+
+ // nothing in the list, definitely empty.
+ if (list.length === 0)
+ return null;
+
+ if (length === 0)
+ ret = null;
+ else if (objectMode)
+ ret = list.shift();
+ else if (!n || n >= length) {
+ // read it all, truncate the array.
+ if (stringMode)
+ ret = list.join('');
+ else
+ ret = Buffer.concat(list, length);
+ list.length = 0;
+ } else {
+ // read just some of it.
+ if (n < list[0].length) {
+ // just take a part of the first list item.
+ // slice is the same for buffers and strings.
+ var buf = list[0];
+ ret = buf.slice(0, n);
+ list[0] = buf.slice(n);
+ } else if (n === list[0].length) {
+ // first list is a perfect match
+ ret = list.shift();
+ } else {
+ // complex case.
+ // we have enough to cover it, but it spans past the first buffer.
+ if (stringMode)
+ ret = '';
+ else
+ ret = new Buffer(n);
+
+ var c = 0;
+ for (var i = 0, l = list.length; i < l && c < n; i++) {
+ var buf = list[0];
+ var cpy = Math.min(n - c, buf.length);
+
+ if (stringMode)
+ ret += buf.slice(0, cpy);
+ else
+ buf.copy(ret, c, 0, cpy);
+
+ if (cpy < buf.length)
+ list[0] = buf.slice(cpy);
+ else
+ list.shift();
+
+ c += cpy;
+ }
+ }
+ }
+
+ return ret;
+}
+
+function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0)
+ throw new Error('endReadable called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ process.nextTick(function() {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+ });
+ }
+}
+
+function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+}
+
+function indexOf (xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_transform.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_transform.js
new file mode 100644
index 000000000..905c5e450
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_transform.js
@@ -0,0 +1,209 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+// a transform stream is a readable/writable stream where you do
+// something with the data. Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored. (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation. For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes. When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up. When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer. When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks. If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk. However,
+// a pathological inflate type of transform can cause excessive buffering
+// here. For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output. In this case, you could write a very small
+// amount of input, and end up with a very large amount of output. In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform. A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+module.exports = Transform;
+
+var Duplex = require('./_stream_duplex');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(Transform, Duplex);
+
+
+function TransformState(options, stream) {
+ this.afterTransform = function(er, data) {
+ return afterTransform(stream, er, data);
+ };
+
+ this.needTransform = false;
+ this.transforming = false;
+ this.writecb = null;
+ this.writechunk = null;
+}
+
+function afterTransform(stream, er, data) {
+ var ts = stream._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb)
+ return stream.emit('error', new Error('no writecb in Transform class'));
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (!util.isNullOrUndefined(data))
+ stream.push(data);
+
+ if (cb)
+ cb(er);
+
+ var rs = stream._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ stream._read(rs.highWaterMark);
+ }
+}
+
+
+function Transform(options) {
+ if (!(this instanceof Transform))
+ return new Transform(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = new TransformState(options, this);
+
+ // when the writable side finishes, then flush out anything remaining.
+ var stream = this;
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ this.once('prefinish', function() {
+ if (util.isFunction(this._flush))
+ this._flush(function(er) {
+ done(stream, er);
+ });
+ else
+ done(stream);
+ });
+}
+
+Transform.prototype.push = function(chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side. You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk. If you pass
+// an error, then that'll put the hurt on the whole operation. If you
+// never call cb(), then you'll never get another chunk.
+Transform.prototype._transform = function(chunk, encoding, cb) {
+ throw new Error('not implemented');
+};
+
+Transform.prototype._write = function(chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform ||
+ rs.needReadable ||
+ rs.length < rs.highWaterMark)
+ this._read(rs.highWaterMark);
+ }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform.prototype._read = function(n) {
+ var ts = this._transformState;
+
+ if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+};
+
+
+function done(stream, er) {
+ if (er)
+ return stream.emit('error', er);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ var ws = stream._writableState;
+ var ts = stream._transformState;
+
+ if (ws.length)
+ throw new Error('calling transform done when ws.length != 0');
+
+ if (ts.transforming)
+ throw new Error('calling transform done when still transforming');
+
+ return stream.push(null);
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js
new file mode 100644
index 000000000..db8539cd5
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js
@@ -0,0 +1,477 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// A bit simpler than readable streams.
+// Implement an async ._write(chunk, cb), and it'll handle all
+// the drain event emission and buffering.
+
+module.exports = Writable;
+
+/*<replacement>*/
+var Buffer = require('buffer').Buffer;
+/*</replacement>*/
+
+Writable.WritableState = WritableState;
+
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+var Stream = require('stream');
+
+util.inherits(Writable, Stream);
+
+function WriteReq(chunk, encoding, cb) {
+ this.chunk = chunk;
+ this.encoding = encoding;
+ this.callback = cb;
+}
+
+function WritableState(options, stream) {
+ var Duplex = require('./_stream_duplex');
+
+ options = options || {};
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function(er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.buffer = [];
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+}
+
+function Writable(options) {
+ var Duplex = require('./_stream_duplex');
+
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+ if (!(this instanceof Writable) && !(this instanceof Duplex))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ Stream.call(this);
+}
+
+// Otherwise people can pipe Writable streams, which is just wrong.
+Writable.prototype.pipe = function() {
+ this.emit('error', new Error('Cannot pipe. Not readable.'));
+};
+
+
+function writeAfterEnd(stream, state, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+}
+
+// If we get something that is not a buffer, string, null, or undefined,
+// and we're not in objectMode, then that's an error.
+// Otherwise stream chunks are all considered to be of length=1, and the
+// watermarks determine how many objects to keep in the buffer, rather than
+// how many bytes or characters.
+function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ var er = new TypeError('Invalid non-string/buffer chunk');
+ stream.emit('error', er);
+ process.nextTick(function() {
+ cb(er);
+ });
+ valid = false;
+ }
+ return valid;
+}
+
+Writable.prototype.write = function(chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+
+ if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ else if (!encoding)
+ encoding = state.defaultEncoding;
+
+ if (!util.isFunction(cb))
+ cb = function() {};
+
+ if (state.ended)
+ writeAfterEnd(this, state, cb);
+ else if (validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, chunk, encoding, cb);
+ }
+
+ return ret;
+};
+
+Writable.prototype.cork = function() {
+ var state = this._writableState;
+
+ state.corked++;
+};
+
+Writable.prototype.uncork = function() {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing &&
+ !state.corked &&
+ !state.finished &&
+ !state.bufferProcessing &&
+ state.buffer.length)
+ clearBuffer(this, state);
+ }
+};
+
+function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode &&
+ state.decodeStrings !== false &&
+ util.isString(chunk)) {
+ chunk = new Buffer(chunk, encoding);
+ }
+ return chunk;
+}
+
+// if we're already writing something, then just put this
+// in the queue, and wait our turn. Otherwise, call _write
+// If we return false, then we need a drain event, so set that flag.
+function writeOrBuffer(stream, state, chunk, encoding, cb) {
+ chunk = decodeChunk(state, chunk, encoding);
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret)
+ state.needDrain = true;
+
+ if (state.writing || state.corked)
+ state.buffer.push(new WriteReq(chunk, encoding, cb));
+ else
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ return ret;
+}
+
+function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev)
+ stream._writev(chunk, state.onwrite);
+ else
+ stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+}
+
+function onwriteError(stream, state, sync, er, cb) {
+ if (sync)
+ process.nextTick(function() {
+ state.pendingcb--;
+ cb(er);
+ });
+ else {
+ state.pendingcb--;
+ cb(er);
+ }
+
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+}
+
+function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+}
+
+function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er)
+ onwriteError(stream, state, sync, er, cb);
+ else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(stream, state);
+
+ if (!finished &&
+ !state.corked &&
+ !state.bufferProcessing &&
+ state.buffer.length) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ process.nextTick(function() {
+ afterWrite(stream, state, finished, cb);
+ });
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+}
+
+function afterWrite(stream, state, finished, cb) {
+ if (!finished)
+ onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+}
+
+// Must force callback to be called on nextTick, so that we don't
+// emit 'drain' before the write() consumer gets the 'false' return
+// value, and has a chance to attach a 'drain' listener.
+function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+}
+
+
+// if there's something in the buffer waiting, then process it
+function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+
+ if (stream._writev && state.buffer.length > 1) {
+ // Fast case, write everything using _writev()
+ var cbs = [];
+ for (var c = 0; c < state.buffer.length; c++)
+ cbs.push(state.buffer[c].callback);
+
+ // count the one we are adding, as well.
+ // TODO(isaacs) clean this up
+ state.pendingcb++;
+ doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+ for (var i = 0; i < cbs.length; i++) {
+ state.pendingcb--;
+ cbs[i](err);
+ }
+ });
+
+ // Clear buffer
+ state.buffer = [];
+ } else {
+ // Slow case, write chunks one-by-one
+ for (var c = 0; c < state.buffer.length; c++) {
+ var entry = state.buffer[c];
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ c++;
+ break;
+ }
+ }
+
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
+ }
+
+ state.bufferProcessing = false;
+}
+
+Writable.prototype._write = function(chunk, encoding, cb) {
+ cb(new Error('not implemented'));
+
+};
+
+Writable.prototype._writev = null;
+
+Writable.prototype.end = function(chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (util.isFunction(chunk)) {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (!util.isNullOrUndefined(chunk))
+ this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished)
+ endWritable(this, state, cb);
+};
+
+
+function needFinish(stream, state) {
+ return (state.ending &&
+ state.length === 0 &&
+ !state.finished &&
+ !state.writing);
+}
+
+function prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+}
+
+function finishMaybe(stream, state) {
+ var need = needFinish(stream, state);
+ if (need) {
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else
+ prefinish(stream, state);
+ }
+ return need;
+}
+
+function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished)
+ process.nextTick(cb);
+ else
+ stream.once('finish', cb);
+ }
+ state.ended = true;
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/README.md
new file mode 100644
index 000000000..5a76b4149
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/README.md
@@ -0,0 +1,3 @@
+# core-util-is
+
+The `util.is*` functions introduced in Node v0.12.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/float.patch b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/float.patch
new file mode 100644
index 000000000..a06d5c05f
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/float.patch
@@ -0,0 +1,604 @@
+diff --git a/lib/util.js b/lib/util.js
+index a03e874..9074e8e 100644
+--- a/lib/util.js
++++ b/lib/util.js
+@@ -19,430 +19,6 @@
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-var formatRegExp = /%[sdj%]/g;
+-exports.format = function(f) {
+- if (!isString(f)) {
+- var objects = [];
+- for (var i = 0; i < arguments.length; i++) {
+- objects.push(inspect(arguments[i]));
+- }
+- return objects.join(' ');
+- }
+-
+- var i = 1;
+- var args = arguments;
+- var len = args.length;
+- var str = String(f).replace(formatRegExp, function(x) {
+- if (x === '%%') return '%';
+- if (i >= len) return x;
+- switch (x) {
+- case '%s': return String(args[i++]);
+- case '%d': return Number(args[i++]);
+- case '%j':
+- try {
+- return JSON.stringify(args[i++]);
+- } catch (_) {
+- return '[Circular]';
+- }
+- default:
+- return x;
+- }
+- });
+- for (var x = args[i]; i < len; x = args[++i]) {
+- if (isNull(x) || !isObject(x)) {
+- str += ' ' + x;
+- } else {
+- str += ' ' + inspect(x);
+- }
+- }
+- return str;
+-};
+-
+-
+-// Mark that a method should not be used.
+-// Returns a modified function which warns once by default.
+-// If --no-deprecation is set, then it is a no-op.
+-exports.deprecate = function(fn, msg) {
+- // Allow for deprecating things in the process of starting up.
+- if (isUndefined(global.process)) {
+- return function() {
+- return exports.deprecate(fn, msg).apply(this, arguments);
+- };
+- }
+-
+- if (process.noDeprecation === true) {
+- return fn;
+- }
+-
+- var warned = false;
+- function deprecated() {
+- if (!warned) {
+- if (process.throwDeprecation) {
+- throw new Error(msg);
+- } else if (process.traceDeprecation) {
+- console.trace(msg);
+- } else {
+- console.error(msg);
+- }
+- warned = true;
+- }
+- return fn.apply(this, arguments);
+- }
+-
+- return deprecated;
+-};
+-
+-
+-var debugs = {};
+-var debugEnviron;
+-exports.debuglog = function(set) {
+- if (isUndefined(debugEnviron))
+- debugEnviron = process.env.NODE_DEBUG || '';
+- set = set.toUpperCase();
+- if (!debugs[set]) {
+- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
+- var pid = process.pid;
+- debugs[set] = function() {
+- var msg = exports.format.apply(exports, arguments);
+- console.error('%s %d: %s', set, pid, msg);
+- };
+- } else {
+- debugs[set] = function() {};
+- }
+- }
+- return debugs[set];
+-};
+-
+-
+-/**
+- * Echos the value of a value. Trys to print the value out
+- * in the best way possible given the different types.
+- *
+- * @param {Object} obj The object to print out.
+- * @param {Object} opts Optional options object that alters the output.
+- */
+-/* legacy: obj, showHidden, depth, colors*/
+-function inspect(obj, opts) {
+- // default options
+- var ctx = {
+- seen: [],
+- stylize: stylizeNoColor
+- };
+- // legacy...
+- if (arguments.length >= 3) ctx.depth = arguments[2];
+- if (arguments.length >= 4) ctx.colors = arguments[3];
+- if (isBoolean(opts)) {
+- // legacy...
+- ctx.showHidden = opts;
+- } else if (opts) {
+- // got an "options" object
+- exports._extend(ctx, opts);
+- }
+- // set default options
+- if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
+- if (isUndefined(ctx.depth)) ctx.depth = 2;
+- if (isUndefined(ctx.colors)) ctx.colors = false;
+- if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
+- if (ctx.colors) ctx.stylize = stylizeWithColor;
+- return formatValue(ctx, obj, ctx.depth);
+-}
+-exports.inspect = inspect;
+-
+-
+-// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+-inspect.colors = {
+- 'bold' : [1, 22],
+- 'italic' : [3, 23],
+- 'underline' : [4, 24],
+- 'inverse' : [7, 27],
+- 'white' : [37, 39],
+- 'grey' : [90, 39],
+- 'black' : [30, 39],
+- 'blue' : [34, 39],
+- 'cyan' : [36, 39],
+- 'green' : [32, 39],
+- 'magenta' : [35, 39],
+- 'red' : [31, 39],
+- 'yellow' : [33, 39]
+-};
+-
+-// Don't use 'blue' not visible on cmd.exe
+-inspect.styles = {
+- 'special': 'cyan',
+- 'number': 'yellow',
+- 'boolean': 'yellow',
+- 'undefined': 'grey',
+- 'null': 'bold',
+- 'string': 'green',
+- 'date': 'magenta',
+- // "name": intentionally not styling
+- 'regexp': 'red'
+-};
+-
+-
+-function stylizeWithColor(str, styleType) {
+- var style = inspect.styles[styleType];
+-
+- if (style) {
+- return '\u001b[' + inspect.colors[style][0] + 'm' + str +
+- '\u001b[' + inspect.colors[style][1] + 'm';
+- } else {
+- return str;
+- }
+-}
+-
+-
+-function stylizeNoColor(str, styleType) {
+- return str;
+-}
+-
+-
+-function arrayToHash(array) {
+- var hash = {};
+-
+- array.forEach(function(val, idx) {
+- hash[val] = true;
+- });
+-
+- return hash;
+-}
+-
+-
+-function formatValue(ctx, value, recurseTimes) {
+- // Provide a hook for user-specified inspect functions.
+- // Check that value is an object with an inspect function on it
+- if (ctx.customInspect &&
+- value &&
+- isFunction(value.inspect) &&
+- // Filter out the util module, it's inspect function is special
+- value.inspect !== exports.inspect &&
+- // Also filter out any prototype objects using the circular check.
+- !(value.constructor && value.constructor.prototype === value)) {
+- var ret = value.inspect(recurseTimes, ctx);
+- if (!isString(ret)) {
+- ret = formatValue(ctx, ret, recurseTimes);
+- }
+- return ret;
+- }
+-
+- // Primitive types cannot have properties
+- var primitive = formatPrimitive(ctx, value);
+- if (primitive) {
+- return primitive;
+- }
+-
+- // Look up the keys of the object.
+- var keys = Object.keys(value);
+- var visibleKeys = arrayToHash(keys);
+-
+- if (ctx.showHidden) {
+- keys = Object.getOwnPropertyNames(value);
+- }
+-
+- // Some type of object without properties can be shortcutted.
+- if (keys.length === 0) {
+- if (isFunction(value)) {
+- var name = value.name ? ': ' + value.name : '';
+- return ctx.stylize('[Function' + name + ']', 'special');
+- }
+- if (isRegExp(value)) {
+- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+- }
+- if (isDate(value)) {
+- return ctx.stylize(Date.prototype.toString.call(value), 'date');
+- }
+- if (isError(value)) {
+- return formatError(value);
+- }
+- }
+-
+- var base = '', array = false, braces = ['{', '}'];
+-
+- // Make Array say that they are Array
+- if (isArray(value)) {
+- array = true;
+- braces = ['[', ']'];
+- }
+-
+- // Make functions say that they are functions
+- if (isFunction(value)) {
+- var n = value.name ? ': ' + value.name : '';
+- base = ' [Function' + n + ']';
+- }
+-
+- // Make RegExps say that they are RegExps
+- if (isRegExp(value)) {
+- base = ' ' + RegExp.prototype.toString.call(value);
+- }
+-
+- // Make dates with properties first say the date
+- if (isDate(value)) {
+- base = ' ' + Date.prototype.toUTCString.call(value);
+- }
+-
+- // Make error with message first say the error
+- if (isError(value)) {
+- base = ' ' + formatError(value);
+- }
+-
+- if (keys.length === 0 && (!array || value.length == 0)) {
+- return braces[0] + base + braces[1];
+- }
+-
+- if (recurseTimes < 0) {
+- if (isRegExp(value)) {
+- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+- } else {
+- return ctx.stylize('[Object]', 'special');
+- }
+- }
+-
+- ctx.seen.push(value);
+-
+- var output;
+- if (array) {
+- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+- } else {
+- output = keys.map(function(key) {
+- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+- });
+- }
+-
+- ctx.seen.pop();
+-
+- return reduceToSingleString(output, base, braces);
+-}
+-
+-
+-function formatPrimitive(ctx, value) {
+- if (isUndefined(value))
+- return ctx.stylize('undefined', 'undefined');
+- if (isString(value)) {
+- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+- .replace(/'/g, "\\'")
+- .replace(/\\"/g, '"') + '\'';
+- return ctx.stylize(simple, 'string');
+- }
+- if (isNumber(value)) {
+- // Format -0 as '-0'. Strict equality won't distinguish 0 from -0,
+- // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 .
+- if (value === 0 && 1 / value < 0)
+- return ctx.stylize('-0', 'number');
+- return ctx.stylize('' + value, 'number');
+- }
+- if (isBoolean(value))
+- return ctx.stylize('' + value, 'boolean');
+- // For some reason typeof null is "object", so special case here.
+- if (isNull(value))
+- return ctx.stylize('null', 'null');
+-}
+-
+-
+-function formatError(value) {
+- return '[' + Error.prototype.toString.call(value) + ']';
+-}
+-
+-
+-function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+- var output = [];
+- for (var i = 0, l = value.length; i < l; ++i) {
+- if (hasOwnProperty(value, String(i))) {
+- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+- String(i), true));
+- } else {
+- output.push('');
+- }
+- }
+- keys.forEach(function(key) {
+- if (!key.match(/^\d+$/)) {
+- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+- key, true));
+- }
+- });
+- return output;
+-}
+-
+-
+-function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+- var name, str, desc;
+- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
+- if (desc.get) {
+- if (desc.set) {
+- str = ctx.stylize('[Getter/Setter]', 'special');
+- } else {
+- str = ctx.stylize('[Getter]', 'special');
+- }
+- } else {
+- if (desc.set) {
+- str = ctx.stylize('[Setter]', 'special');
+- }
+- }
+- if (!hasOwnProperty(visibleKeys, key)) {
+- name = '[' + key + ']';
+- }
+- if (!str) {
+- if (ctx.seen.indexOf(desc.value) < 0) {
+- if (isNull(recurseTimes)) {
+- str = formatValue(ctx, desc.value, null);
+- } else {
+- str = formatValue(ctx, desc.value, recurseTimes - 1);
+- }
+- if (str.indexOf('\n') > -1) {
+- if (array) {
+- str = str.split('\n').map(function(line) {
+- return ' ' + line;
+- }).join('\n').substr(2);
+- } else {
+- str = '\n' + str.split('\n').map(function(line) {
+- return ' ' + line;
+- }).join('\n');
+- }
+- }
+- } else {
+- str = ctx.stylize('[Circular]', 'special');
+- }
+- }
+- if (isUndefined(name)) {
+- if (array && key.match(/^\d+$/)) {
+- return str;
+- }
+- name = JSON.stringify('' + key);
+- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+- name = name.substr(1, name.length - 2);
+- name = ctx.stylize(name, 'name');
+- } else {
+- name = name.replace(/'/g, "\\'")
+- .replace(/\\"/g, '"')
+- .replace(/(^"|"$)/g, "'");
+- name = ctx.stylize(name, 'string');
+- }
+- }
+-
+- return name + ': ' + str;
+-}
+-
+-
+-function reduceToSingleString(output, base, braces) {
+- var numLinesEst = 0;
+- var length = output.reduce(function(prev, cur) {
+- numLinesEst++;
+- if (cur.indexOf('\n') >= 0) numLinesEst++;
+- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
+- }, 0);
+-
+- if (length > 60) {
+- return braces[0] +
+- (base === '' ? '' : base + '\n ') +
+- ' ' +
+- output.join(',\n ') +
+- ' ' +
+- braces[1];
+- }
+-
+- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+-}
+-
+-
+ // NOTE: These type checking functions intentionally don't use `instanceof`
+ // because it is fragile and can be easily faked with `Object.create()`.
+ function isArray(ar) {
+@@ -522,166 +98,10 @@ function isPrimitive(arg) {
+ exports.isPrimitive = isPrimitive;
+
+ function isBuffer(arg) {
+- return arg instanceof Buffer;
++ return Buffer.isBuffer(arg);
+ }
+ exports.isBuffer = isBuffer;
+
+ function objectToString(o) {
+ return Object.prototype.toString.call(o);
+-}
+-
+-
+-function pad(n) {
+- return n < 10 ? '0' + n.toString(10) : n.toString(10);
+-}
+-
+-
+-var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+- 'Oct', 'Nov', 'Dec'];
+-
+-// 26 Feb 16:19:34
+-function timestamp() {
+- var d = new Date();
+- var time = [pad(d.getHours()),
+- pad(d.getMinutes()),
+- pad(d.getSeconds())].join(':');
+- return [d.getDate(), months[d.getMonth()], time].join(' ');
+-}
+-
+-
+-// log is just a thin wrapper to console.log that prepends a timestamp
+-exports.log = function() {
+- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
+-};
+-
+-
+-/**
+- * Inherit the prototype methods from one constructor into another.
+- *
+- * The Function.prototype.inherits from lang.js rewritten as a standalone
+- * function (not on Function.prototype). NOTE: If this file is to be loaded
+- * during bootstrapping this function needs to be rewritten using some native
+- * functions as prototype setup using normal JavaScript does not work as
+- * expected during bootstrapping (see mirror.js in r114903).
+- *
+- * @param {function} ctor Constructor function which needs to inherit the
+- * prototype.
+- * @param {function} superCtor Constructor function to inherit prototype from.
+- */
+-exports.inherits = function(ctor, superCtor) {
+- ctor.super_ = superCtor;
+- ctor.prototype = Object.create(superCtor.prototype, {
+- constructor: {
+- value: ctor,
+- enumerable: false,
+- writable: true,
+- configurable: true
+- }
+- });
+-};
+-
+-exports._extend = function(origin, add) {
+- // Don't do anything if add isn't an object
+- if (!add || !isObject(add)) return origin;
+-
+- var keys = Object.keys(add);
+- var i = keys.length;
+- while (i--) {
+- origin[keys[i]] = add[keys[i]];
+- }
+- return origin;
+-};
+-
+-function hasOwnProperty(obj, prop) {
+- return Object.prototype.hasOwnProperty.call(obj, prop);
+-}
+-
+-
+-// Deprecated old stuff.
+-
+-exports.p = exports.deprecate(function() {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- console.error(exports.inspect(arguments[i]));
+- }
+-}, 'util.p: Use console.error() instead');
+-
+-
+-exports.exec = exports.deprecate(function() {
+- return require('child_process').exec.apply(this, arguments);
+-}, 'util.exec is now called `child_process.exec`.');
+-
+-
+-exports.print = exports.deprecate(function() {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- process.stdout.write(String(arguments[i]));
+- }
+-}, 'util.print: Use console.log instead');
+-
+-
+-exports.puts = exports.deprecate(function() {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- process.stdout.write(arguments[i] + '\n');
+- }
+-}, 'util.puts: Use console.log instead');
+-
+-
+-exports.debug = exports.deprecate(function(x) {
+- process.stderr.write('DEBUG: ' + x + '\n');
+-}, 'util.debug: Use console.error instead');
+-
+-
+-exports.error = exports.deprecate(function(x) {
+- for (var i = 0, len = arguments.length; i < len; ++i) {
+- process.stderr.write(arguments[i] + '\n');
+- }
+-}, 'util.error: Use console.error instead');
+-
+-
+-exports.pump = exports.deprecate(function(readStream, writeStream, callback) {
+- var callbackCalled = false;
+-
+- function call(a, b, c) {
+- if (callback && !callbackCalled) {
+- callback(a, b, c);
+- callbackCalled = true;
+- }
+- }
+-
+- readStream.addListener('data', function(chunk) {
+- if (writeStream.write(chunk) === false) readStream.pause();
+- });
+-
+- writeStream.addListener('drain', function() {
+- readStream.resume();
+- });
+-
+- readStream.addListener('end', function() {
+- writeStream.end();
+- });
+-
+- readStream.addListener('close', function() {
+- call();
+- });
+-
+- readStream.addListener('error', function(err) {
+- writeStream.end();
+- call(err);
+- });
+-
+- writeStream.addListener('error', function(err) {
+- readStream.destroy();
+- call(err);
+- });
+-}, 'util.pump(): Use readableStream.pipe() instead');
+-
+-
+-var uv;
+-exports._errnoException = function(err, syscall) {
+- if (isUndefined(uv)) uv = process.binding('uv');
+- var errname = uv.errname(err);
+- var e = new Error(syscall + ' ' + errname);
+- e.code = errname;
+- e.errno = errname;
+- e.syscall = syscall;
+- return e;
+-};
++} \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/lib/util.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/lib/util.js
new file mode 100644
index 000000000..9074e8ebc
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/lib/util.js
@@ -0,0 +1,107 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+function isArray(ar) {
+ return Array.isArray(ar);
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return isObject(re) && objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return isObject(d) && objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return isObject(e) &&
+ (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+function isBuffer(arg) {
+ return Buffer.isBuffer(arg);
+}
+exports.isBuffer = isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json
new file mode 100644
index 000000000..4eb9ce4f3
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "core-util-is",
+ "version": "1.0.1",
+ "description": "The `util.is*` functions introduced in Node v0.12.",
+ "main": "lib/util.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/core-util-is"
+ },
+ "keywords": [
+ "util",
+ "isBuffer",
+ "isArray",
+ "isNumber",
+ "isString",
+ "isRegExp",
+ "isThis",
+ "isThat",
+ "polyfill"
+ ],
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/isaacs/core-util-is/issues"
+ },
+ "readme": "# core-util-is\n\nThe `util.is*` functions introduced in Node v0.12.\n",
+ "readmeFilename": "README.md",
+ "homepage": "https://github.com/isaacs/core-util-is",
+ "_id": "core-util-is@1.0.1",
+ "dist": {
+ "shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
+ "tarball": "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ },
+ "_from": "core-util-is@>=1.0.0 <1.1.0",
+ "_npmVersion": "1.3.23",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
+ "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz",
+ "scripts": {}
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/util.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/util.js
new file mode 100644
index 000000000..007fa1057
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/util.js
@@ -0,0 +1,106 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+function isArray(ar) {
+ return Array.isArray(ar);
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return isObject(re) && objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return isObject(d) && objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return isObject(e) && objectToString(e) === '[object Error]';
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+function isBuffer(arg) {
+ return arg instanceof Buffer;
+}
+exports.isBuffer = isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/README.md
new file mode 100644
index 000000000..052a62b8d
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/README.md
@@ -0,0 +1,54 @@
+
+# isarray
+
+`Array#isArray` for older browsers.
+
+## Usage
+
+```js
+var isArray = require('isarray');
+
+console.log(isArray([])); // => true
+console.log(isArray({})); // => false
+```
+
+## Installation
+
+With [npm](http://npmjs.org) do
+
+```bash
+$ npm install isarray
+```
+
+Then bundle for the browser with
+[browserify](https://github.com/substack/browserify).
+
+With [component](http://component.io) do
+
+```bash
+$ component install juliangruber/isarray
+```
+
+## 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/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/build/build.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/build/build.js
new file mode 100644
index 000000000..ec58596ae
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/build/build.js
@@ -0,0 +1,209 @@
+
+/**
+ * Require the given path.
+ *
+ * @param {String} path
+ * @return {Object} exports
+ * @api public
+ */
+
+function require(path, parent, orig) {
+ var resolved = require.resolve(path);
+
+ // lookup failed
+ if (null == resolved) {
+ orig = orig || path;
+ parent = parent || 'root';
+ var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
+ err.path = orig;
+ err.parent = parent;
+ err.require = true;
+ throw err;
+ }
+
+ var module = require.modules[resolved];
+
+ // perform real require()
+ // by invoking the module's
+ // registered function
+ if (!module.exports) {
+ module.exports = {};
+ module.client = module.component = true;
+ module.call(this, module.exports, require.relative(resolved), module);
+ }
+
+ return module.exports;
+}
+
+/**
+ * Registered modules.
+ */
+
+require.modules = {};
+
+/**
+ * Registered aliases.
+ */
+
+require.aliases = {};
+
+/**
+ * Resolve `path`.
+ *
+ * Lookup:
+ *
+ * - PATH/index.js
+ * - PATH.js
+ * - PATH
+ *
+ * @param {String} path
+ * @return {String} path or null
+ * @api private
+ */
+
+require.resolve = function(path) {
+ if (path.charAt(0) === '/') path = path.slice(1);
+ var index = path + '/index.js';
+
+ var paths = [
+ path,
+ path + '.js',
+ path + '.json',
+ path + '/index.js',
+ path + '/index.json'
+ ];
+
+ for (var i = 0; i < paths.length; i++) {
+ var path = paths[i];
+ if (require.modules.hasOwnProperty(path)) return path;
+ }
+
+ if (require.aliases.hasOwnProperty(index)) {
+ return require.aliases[index];
+ }
+};
+
+/**
+ * Normalize `path` relative to the current path.
+ *
+ * @param {String} curr
+ * @param {String} path
+ * @return {String}
+ * @api private
+ */
+
+require.normalize = function(curr, path) {
+ var segs = [];
+
+ if ('.' != path.charAt(0)) return path;
+
+ curr = curr.split('/');
+ path = path.split('/');
+
+ for (var i = 0; i < path.length; ++i) {
+ if ('..' == path[i]) {
+ curr.pop();
+ } else if ('.' != path[i] && '' != path[i]) {
+ segs.push(path[i]);
+ }
+ }
+
+ return curr.concat(segs).join('/');
+};
+
+/**
+ * Register module at `path` with callback `definition`.
+ *
+ * @param {String} path
+ * @param {Function} definition
+ * @api private
+ */
+
+require.register = function(path, definition) {
+ require.modules[path] = definition;
+};
+
+/**
+ * Alias a module definition.
+ *
+ * @param {String} from
+ * @param {String} to
+ * @api private
+ */
+
+require.alias = function(from, to) {
+ if (!require.modules.hasOwnProperty(from)) {
+ throw new Error('Failed to alias "' + from + '", it does not exist');
+ }
+ require.aliases[to] = from;
+};
+
+/**
+ * Return a require function relative to the `parent` path.
+ *
+ * @param {String} parent
+ * @return {Function}
+ * @api private
+ */
+
+require.relative = function(parent) {
+ var p = require.normalize(parent, '..');
+
+ /**
+ * lastIndexOf helper.
+ */
+
+ function lastIndexOf(arr, obj) {
+ var i = arr.length;
+ while (i--) {
+ if (arr[i] === obj) return i;
+ }
+ return -1;
+ }
+
+ /**
+ * The relative require() itself.
+ */
+
+ function localRequire(path) {
+ var resolved = localRequire.resolve(path);
+ return require(resolved, parent, path);
+ }
+
+ /**
+ * Resolve relative to the parent.
+ */
+
+ localRequire.resolve = function(path) {
+ var c = path.charAt(0);
+ if ('/' == c) return path.slice(1);
+ if ('.' == c) return require.normalize(p, path);
+
+ // resolve deps by returning
+ // the dep in the nearest "deps"
+ // directory
+ var segs = parent.split('/');
+ var i = lastIndexOf(segs, 'deps') + 1;
+ if (!i) i = 0;
+ path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
+ return path;
+ };
+
+ /**
+ * Check if module is defined at `path`.
+ */
+
+ localRequire.exists = function(path) {
+ return require.modules.hasOwnProperty(localRequire.resolve(path));
+ };
+
+ return localRequire;
+};
+require.register("isarray/index.js", function(exports, require, module){
+module.exports = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
+
+});
+require.alias("isarray/index.js", "isarray/index.js");
+
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/component.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/component.json
new file mode 100644
index 000000000..9e31b6838
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/component.json
@@ -0,0 +1,19 @@
+{
+ "name" : "isarray",
+ "description" : "Array#isArray for older browsers",
+ "version" : "0.0.1",
+ "repository" : "juliangruber/isarray",
+ "homepage": "https://github.com/juliangruber/isarray",
+ "main" : "index.js",
+ "scripts" : [
+ "index.js"
+ ],
+ "dependencies" : {},
+ "keywords": ["browser","isarray","array"],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/index.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/index.js
new file mode 100644
index 000000000..5f5ad45d4
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/index.js
@@ -0,0 +1,3 @@
+module.exports = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
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
new file mode 100644
index 000000000..fc7904b67
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/isarray/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "isarray",
+ "description": "Array#isArray for older browsers",
+ "version": "0.0.1",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/isarray.git"
+ },
+ "homepage": "https://github.com/juliangruber/isarray",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "*"
+ },
+ "keywords": [
+ "browser",
+ "isarray",
+ "array"
+ ],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "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",
+ "tarball": "http://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "_from": "isarray@0.0.1",
+ "_npmVersion": "1.2.18",
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "directories": {},
+ "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
+ "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "bugs": {
+ "url": "https://github.com/juliangruber/isarray/issues"
+ }
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/.npmignore
new file mode 100644
index 000000000..206320cc1
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/.npmignore
@@ -0,0 +1,2 @@
+build
+test
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/LICENSE
new file mode 100644
index 000000000..6de584a48
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/LICENSE
@@ -0,0 +1,20 @@
+Copyright Joyent, Inc. and other Node contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/README.md
new file mode 100644
index 000000000..4d2aa0015
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/README.md
@@ -0,0 +1,7 @@
+**string_decoder.js** (`require('string_decoder')`) from Node.js core
+
+Copyright Joyent, Inc. and other Node contributors. See LICENCE file for details.
+
+Version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.**
+
+The *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version. \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/index.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/index.js
new file mode 100644
index 000000000..b00e54fb7
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/index.js
@@ -0,0 +1,221 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var Buffer = require('buffer').Buffer;
+
+var isBufferEncoding = Buffer.isEncoding
+ || function(encoding) {
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
+ default: return false;
+ }
+ }
+
+
+function assertEncoding(encoding) {
+ if (encoding && !isBufferEncoding(encoding)) {
+ throw new Error('Unknown encoding: ' + encoding);
+ }
+}
+
+// StringDecoder provides an interface for efficiently splitting a series of
+// buffers into a series of JS strings without breaking apart multi-byte
+// characters. CESU-8 is handled as part of the UTF-8 encoding.
+//
+// @TODO Handling all encodings inside a single object makes it very difficult
+// to reason about this code, so it should be split up in the future.
+// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
+// points as used by CESU-8.
+var StringDecoder = exports.StringDecoder = function(encoding) {
+ this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
+ assertEncoding(encoding);
+ switch (this.encoding) {
+ case 'utf8':
+ // CESU-8 represents each of Surrogate Pair by 3-bytes
+ this.surrogateSize = 3;
+ break;
+ case 'ucs2':
+ case 'utf16le':
+ // UTF-16 represents each of Surrogate Pair by 2-bytes
+ this.surrogateSize = 2;
+ this.detectIncompleteChar = utf16DetectIncompleteChar;
+ break;
+ case 'base64':
+ // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
+ this.surrogateSize = 3;
+ this.detectIncompleteChar = base64DetectIncompleteChar;
+ break;
+ default:
+ this.write = passThroughWrite;
+ return;
+ }
+
+ // Enough space to store all bytes of a single character. UTF-8 needs 4
+ // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
+ this.charBuffer = new Buffer(6);
+ // Number of bytes received for the current incomplete multi-byte character.
+ this.charReceived = 0;
+ // Number of bytes expected for the current incomplete multi-byte character.
+ this.charLength = 0;
+};
+
+
+// write decodes the given buffer and returns it as JS string that is
+// guaranteed to not contain any partial multi-byte characters. Any partial
+// character found at the end of the buffer is buffered up, and will be
+// returned when calling write again with the remaining bytes.
+//
+// Note: Converting a Buffer containing an orphan surrogate to a String
+// currently works, but converting a String to a Buffer (via `new Buffer`, or
+// Buffer#write) will replace incomplete surrogates with the unicode
+// replacement character. See https://codereview.chromium.org/121173009/ .
+StringDecoder.prototype.write = function(buffer) {
+ var charStr = '';
+ // if our last write ended with an incomplete multibyte character
+ while (this.charLength) {
+ // determine how many remaining bytes this buffer has to offer for this char
+ var available = (buffer.length >= this.charLength - this.charReceived) ?
+ this.charLength - this.charReceived :
+ buffer.length;
+
+ // add the new bytes to the char buffer
+ buffer.copy(this.charBuffer, this.charReceived, 0, available);
+ this.charReceived += available;
+
+ if (this.charReceived < this.charLength) {
+ // still not enough chars in this buffer? wait for more ...
+ return '';
+ }
+
+ // remove bytes belonging to the current character from the buffer
+ buffer = buffer.slice(available, buffer.length);
+
+ // get the character that was split
+ charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
+
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ var charCode = charStr.charCodeAt(charStr.length - 1);
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ this.charLength += this.surrogateSize;
+ charStr = '';
+ continue;
+ }
+ this.charReceived = this.charLength = 0;
+
+ // if there are no more bytes in this buffer, just emit our char
+ if (buffer.length === 0) {
+ return charStr;
+ }
+ break;
+ }
+
+ // determine and set charLength / charReceived
+ this.detectIncompleteChar(buffer);
+
+ var end = buffer.length;
+ if (this.charLength) {
+ // buffer the incomplete character bytes we got
+ buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
+ end -= this.charReceived;
+ }
+
+ charStr += buffer.toString(this.encoding, 0, end);
+
+ var end = charStr.length - 1;
+ var charCode = charStr.charCodeAt(end);
+ // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+ if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+ var size = this.surrogateSize;
+ this.charLength += size;
+ this.charReceived += size;
+ this.charBuffer.copy(this.charBuffer, size, 0, size);
+ buffer.copy(this.charBuffer, 0, 0, size);
+ return charStr.substring(0, end);
+ }
+
+ // or just emit the charStr
+ return charStr;
+};
+
+// detectIncompleteChar determines if there is an incomplete UTF-8 character at
+// the end of the given buffer. If so, it sets this.charLength to the byte
+// length that character, and sets this.charReceived to the number of bytes
+// that are available for this character.
+StringDecoder.prototype.detectIncompleteChar = function(buffer) {
+ // determine how many bytes we have to check at the end of this buffer
+ var i = (buffer.length >= 3) ? 3 : buffer.length;
+
+ // Figure out if one of the last i bytes of our buffer announces an
+ // incomplete char.
+ for (; i > 0; i--) {
+ var c = buffer[buffer.length - i];
+
+ // See http://en.wikipedia.org/wiki/UTF-8#Description
+
+ // 110XXXXX
+ if (i == 1 && c >> 5 == 0x06) {
+ this.charLength = 2;
+ break;
+ }
+
+ // 1110XXXX
+ if (i <= 2 && c >> 4 == 0x0E) {
+ this.charLength = 3;
+ break;
+ }
+
+ // 11110XXX
+ if (i <= 3 && c >> 3 == 0x1E) {
+ this.charLength = 4;
+ break;
+ }
+ }
+ this.charReceived = i;
+};
+
+StringDecoder.prototype.end = function(buffer) {
+ var res = '';
+ if (buffer && buffer.length)
+ res = this.write(buffer);
+
+ if (this.charReceived) {
+ var cr = this.charReceived;
+ var buf = this.charBuffer;
+ var enc = this.encoding;
+ res += buf.slice(0, cr).toString(enc);
+ }
+
+ return res;
+};
+
+function passThroughWrite(buffer) {
+ return buffer.toString(this.encoding);
+}
+
+function utf16DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 2;
+ this.charLength = this.charReceived ? 2 : 0;
+}
+
+function base64DetectIncompleteChar(buffer) {
+ this.charReceived = buffer.length % 3;
+ this.charLength = this.charReceived ? 3 : 0;
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json
new file mode 100644
index 000000000..0364d54ba
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "string_decoder",
+ "version": "0.10.31",
+ "description": "The string_decoder module from Node core",
+ "main": "index.js",
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "~0.4.8"
+ },
+ "scripts": {
+ "test": "tap test/simple/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/rvagg/string_decoder.git"
+ },
+ "homepage": "https://github.com/rvagg/string_decoder",
+ "keywords": [
+ "string",
+ "decoder",
+ "browser",
+ "browserify"
+ ],
+ "license": "MIT",
+ "gitHead": "d46d4fd87cf1d06e031c23f1ba170ca7d4ade9a0",
+ "bugs": {
+ "url": "https://github.com/rvagg/string_decoder/issues"
+ },
+ "_id": "string_decoder@0.10.31",
+ "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
+ "_from": "string_decoder@>=0.10.0 <0.11.0",
+ "_npmVersion": "1.4.23",
+ "_npmUser": {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ }
+ ],
+ "dist": {
+ "shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
+ "tarball": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json
new file mode 100644
index 000000000..295adce71
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json
@@ -0,0 +1,70 @@
+{
+ "name": "readable-stream",
+ "version": "1.1.13",
+ "description": "Streams3, a user-land copy of the stream library from Node.js v0.11.x",
+ "main": "readable.js",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x",
+ "inherits": "~2.0.1"
+ },
+ "devDependencies": {
+ "tap": "~0.2.6"
+ },
+ "scripts": {
+ "test": "tap test/simple/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/readable-stream"
+ },
+ "keywords": [
+ "readable",
+ "stream",
+ "pipe"
+ ],
+ "browser": {
+ "util": false
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "MIT",
+ "gitHead": "3b672fd7ae92acf5b4ffdbabf74b372a0a56b051",
+ "bugs": {
+ "url": "https://github.com/isaacs/readable-stream/issues"
+ },
+ "homepage": "https://github.com/isaacs/readable-stream",
+ "_id": "readable-stream@1.1.13",
+ "_shasum": "f6eef764f514c89e2b9e23146a75ba106756d23e",
+ "_from": "readable-stream@>=1.1.9 <1.2.0",
+ "_npmVersion": "1.4.23",
+ "_npmUser": {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "tootallnate",
+ "email": "nathan@tootallnate.net"
+ },
+ {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ }
+ ],
+ "dist": {
+ "shasum": "f6eef764f514c89e2b9e23146a75ba106756d23e",
+ "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/passthrough.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/passthrough.js
new file mode 100644
index 000000000..27e8d8a55
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/passthrough.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_passthrough.js")
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/readable.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/readable.js
new file mode 100644
index 000000000..09b8bf509
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/readable.js
@@ -0,0 +1,7 @@
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = require('stream');
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/transform.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/transform.js
new file mode 100644
index 000000000..5d482f078
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/transform.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_transform.js")
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/writable.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/writable.js
new file mode 100644
index 000000000..e1e9efdf3
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/writable.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_writable.js")
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/.travis.yml b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/.travis.yml
new file mode 100644
index 000000000..cc4dba29d
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/LICENSE b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/LICENSE
new file mode 100644
index 000000000..11adfaec9
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/LICENSE
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2010, Linden Research, Inc.
+ Copyright (c) 2012, Joshua Bell
+
+ 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.
+ $/LicenseInfo$
+ */
+
+// Original can be found at:
+// https://bitbucket.org/lindenlab/llsd
+// Modifications by Joshua Bell inexorabletash@gmail.com
+// https://github.com/inexorabletash/polyfill
+
+// ES3/ES5 implementation of the Krhonos Typed Array Specification
+// Ref: http://www.khronos.org/registry/typedarray/specs/latest/
+// Date: 2011-02-01
+//
+// Variations:
+// * Allows typed_array.get/set() as alias for subscripts (typed_array[])
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/example/tarray.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/example/tarray.js
new file mode 100644
index 000000000..8423d7c9b
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/example/tarray.js
@@ -0,0 +1,4 @@
+var Uint8Array = require('../').Uint8Array;
+var ua = new Uint8Array(5);
+ua[1] = 256 + 55;
+console.log(ua[1]);
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/index.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/index.js
new file mode 100644
index 000000000..5e540841f
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/index.js
@@ -0,0 +1,630 @@
+var undefined = (void 0); // Paranoia
+
+// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to
+// create, and consume so much memory, that the browser appears frozen.
+var MAX_ARRAY_LENGTH = 1e5;
+
+// Approximations of internal ECMAScript conversion functions
+var ECMAScript = (function() {
+ // Stash a copy in case other scripts modify these
+ var opts = Object.prototype.toString,
+ ophop = Object.prototype.hasOwnProperty;
+
+ return {
+ // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:
+ Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); },
+ HasProperty: function(o, p) { return p in o; },
+ HasOwnProperty: function(o, p) { return ophop.call(o, p); },
+ IsCallable: function(o) { return typeof o === 'function'; },
+ ToInt32: function(v) { return v >> 0; },
+ ToUint32: function(v) { return v >>> 0; }
+ };
+}());
+
+// Snapshot intrinsics
+var LN2 = Math.LN2,
+ abs = Math.abs,
+ floor = Math.floor,
+ log = Math.log,
+ min = Math.min,
+ pow = Math.pow,
+ round = Math.round;
+
+// ES5: lock down object properties
+function configureProperties(obj) {
+ if (getOwnPropNames && defineProp) {
+ var props = getOwnPropNames(obj), i;
+ for (i = 0; i < props.length; i += 1) {
+ defineProp(obj, props[i], {
+ value: obj[props[i]],
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ }
+ }
+}
+
+// emulate ES5 getter/setter API using legacy APIs
+// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx
+// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but
+// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)
+var defineProp
+if (Object.defineProperty && (function() {
+ try {
+ Object.defineProperty({}, 'x', {});
+ return true;
+ } catch (e) {
+ return false;
+ }
+ })()) {
+ defineProp = Object.defineProperty;
+} else {
+ defineProp = function(o, p, desc) {
+ if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object");
+ if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); }
+ if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); }
+ if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; }
+ return o;
+ };
+}
+
+var getOwnPropNames = Object.getOwnPropertyNames || function (o) {
+ if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object");
+ var props = [], p;
+ for (p in o) {
+ if (ECMAScript.HasOwnProperty(o, p)) {
+ props.push(p);
+ }
+ }
+ return props;
+};
+
+// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)
+// for index in 0 ... obj.length
+function makeArrayAccessors(obj) {
+ if (!defineProp) { return; }
+
+ if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill");
+
+ function makeArrayAccessor(index) {
+ defineProp(obj, index, {
+ 'get': function() { return obj._getter(index); },
+ 'set': function(v) { obj._setter(index, v); },
+ enumerable: true,
+ configurable: false
+ });
+ }
+
+ var i;
+ for (i = 0; i < obj.length; i += 1) {
+ makeArrayAccessor(i);
+ }
+}
+
+// Internal conversion functions:
+// pack<Type>() - take a number (interpreted as Type), output a byte array
+// unpack<Type>() - take a byte array, output a Type-like number
+
+function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }
+function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }
+
+function packI8(n) { return [n & 0xff]; }
+function unpackI8(bytes) { return as_signed(bytes[0], 8); }
+
+function packU8(n) { return [n & 0xff]; }
+function unpackU8(bytes) { return as_unsigned(bytes[0], 8); }
+
+function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }
+
+function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; }
+function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); }
+
+function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; }
+function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); }
+
+function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }
+function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }
+
+function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }
+function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }
+
+function packIEEE754(v, ebits, fbits) {
+
+ var bias = (1 << (ebits - 1)) - 1,
+ s, e, f, ln,
+ i, bits, str, bytes;
+
+ function roundToEven(n) {
+ var w = floor(n), f = n - w;
+ if (f < 0.5)
+ return w;
+ if (f > 0.5)
+ return w + 1;
+ return w % 2 ? w + 1 : w;
+ }
+
+ // Compute sign, exponent, fraction
+ if (v !== v) {
+ // NaN
+ // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping
+ e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;
+ } else if (v === Infinity || v === -Infinity) {
+ e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;
+ } else if (v === 0) {
+ e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;
+ } else {
+ s = v < 0;
+ v = abs(v);
+
+ if (v >= pow(2, 1 - bias)) {
+ e = min(floor(log(v) / LN2), 1023);
+ f = roundToEven(v / pow(2, e) * pow(2, fbits));
+ if (f / pow(2, fbits) >= 2) {
+ e = e + 1;
+ f = 1;
+ }
+ if (e > bias) {
+ // Overflow
+ e = (1 << ebits) - 1;
+ f = 0;
+ } else {
+ // Normalized
+ e = e + bias;
+ f = f - pow(2, fbits);
+ }
+ } else {
+ // Denormalized
+ e = 0;
+ f = roundToEven(v / pow(2, 1 - bias - fbits));
+ }
+ }
+
+ // Pack sign, exponent, fraction
+ bits = [];
+ for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }
+ for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }
+ bits.push(s ? 1 : 0);
+ bits.reverse();
+ str = bits.join('');
+
+ // Bits to bytes
+ bytes = [];
+ while (str.length) {
+ bytes.push(parseInt(str.substring(0, 8), 2));
+ str = str.substring(8);
+ }
+ return bytes;
+}
+
+function unpackIEEE754(bytes, ebits, fbits) {
+
+ // Bytes to bits
+ var bits = [], i, j, b, str,
+ bias, s, e, f;
+
+ for (i = bytes.length; i; i -= 1) {
+ b = bytes[i - 1];
+ for (j = 8; j; j -= 1) {
+ bits.push(b % 2 ? 1 : 0); b = b >> 1;
+ }
+ }
+ bits.reverse();
+ str = bits.join('');
+
+ // Unpack sign, exponent, fraction
+ bias = (1 << (ebits - 1)) - 1;
+ s = parseInt(str.substring(0, 1), 2) ? -1 : 1;
+ e = parseInt(str.substring(1, 1 + ebits), 2);
+ f = parseInt(str.substring(1 + ebits), 2);
+
+ // Produce number
+ if (e === (1 << ebits) - 1) {
+ return f !== 0 ? NaN : s * Infinity;
+ } else if (e > 0) {
+ // Normalized
+ return s * pow(2, e - bias) * (1 + f / pow(2, fbits));
+ } else if (f !== 0) {
+ // Denormalized
+ return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));
+ } else {
+ return s < 0 ? -0 : 0;
+ }
+}
+
+function unpackF64(b) { return unpackIEEE754(b, 11, 52); }
+function packF64(v) { return packIEEE754(v, 11, 52); }
+function unpackF32(b) { return unpackIEEE754(b, 8, 23); }
+function packF32(v) { return packIEEE754(v, 8, 23); }
+
+
+//
+// 3 The ArrayBuffer Type
+//
+
+(function() {
+
+ /** @constructor */
+ var ArrayBuffer = function ArrayBuffer(length) {
+ length = ECMAScript.ToInt32(length);
+ if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer');
+
+ this.byteLength = length;
+ this._bytes = [];
+ this._bytes.length = length;
+
+ var i;
+ for (i = 0; i < this.byteLength; i += 1) {
+ this._bytes[i] = 0;
+ }
+
+ configureProperties(this);
+ };
+
+ exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;
+
+ //
+ // 4 The ArrayBufferView Type
+ //
+
+ // NOTE: this constructor is not exported
+ /** @constructor */
+ var ArrayBufferView = function ArrayBufferView() {
+ //this.buffer = null;
+ //this.byteOffset = 0;
+ //this.byteLength = 0;
+ };
+
+ //
+ // 5 The Typed Array View Types
+ //
+
+ function makeConstructor(bytesPerElement, pack, unpack) {
+ // Each TypedArray type requires a distinct constructor instance with
+ // identical logic, which this produces.
+
+ var ctor;
+ ctor = function(buffer, byteOffset, length) {
+ var array, sequence, i, s;
+
+ if (!arguments.length || typeof arguments[0] === 'number') {
+ // Constructor(unsigned long length)
+ this.length = ECMAScript.ToInt32(arguments[0]);
+ if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer');
+
+ this.byteLength = this.length * this.BYTES_PER_ELEMENT;
+ this.buffer = new ArrayBuffer(this.byteLength);
+ this.byteOffset = 0;
+ } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) {
+ // Constructor(TypedArray array)
+ array = arguments[0];
+
+ this.length = array.length;
+ this.byteLength = this.length * this.BYTES_PER_ELEMENT;
+ this.buffer = new ArrayBuffer(this.byteLength);
+ this.byteOffset = 0;
+
+ for (i = 0; i < this.length; i += 1) {
+ this._setter(i, array._getter(i));
+ }
+ } else if (typeof arguments[0] === 'object' &&
+ !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {
+ // Constructor(sequence<type> array)
+ sequence = arguments[0];
+
+ this.length = ECMAScript.ToUint32(sequence.length);
+ this.byteLength = this.length * this.BYTES_PER_ELEMENT;
+ this.buffer = new ArrayBuffer(this.byteLength);
+ this.byteOffset = 0;
+
+ for (i = 0; i < this.length; i += 1) {
+ s = sequence[i];
+ this._setter(i, Number(s));
+ }
+ } else if (typeof arguments[0] === 'object' &&
+ (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {
+ // Constructor(ArrayBuffer buffer,
+ // optional unsigned long byteOffset, optional unsigned long length)
+ this.buffer = buffer;
+
+ this.byteOffset = ECMAScript.ToUint32(byteOffset);
+ if (this.byteOffset > this.buffer.byteLength) {
+ throw new RangeError("byteOffset out of range");
+ }
+
+ if (this.byteOffset % this.BYTES_PER_ELEMENT) {
+ // The given byteOffset must be a multiple of the element
+ // size of the specific type, otherwise an exception is raised.
+ throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size.");
+ }
+
+ if (arguments.length < 3) {
+ this.byteLength = this.buffer.byteLength - this.byteOffset;
+
+ if (this.byteLength % this.BYTES_PER_ELEMENT) {
+ throw new RangeError("length of buffer minus byteOffset not a multiple of the element size");
+ }
+ this.length = this.byteLength / this.BYTES_PER_ELEMENT;
+ } else {
+ this.length = ECMAScript.ToUint32(length);
+ this.byteLength = this.length * this.BYTES_PER_ELEMENT;
+ }
+
+ if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {
+ throw new RangeError("byteOffset and length reference an area beyond the end of the buffer");
+ }
+ } else {
+ throw new TypeError("Unexpected argument type(s)");
+ }
+
+ this.constructor = ctor;
+
+ configureProperties(this);
+ makeArrayAccessors(this);
+ };
+
+ ctor.prototype = new ArrayBufferView();
+ ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;
+ ctor.prototype._pack = pack;
+ ctor.prototype._unpack = unpack;
+ ctor.BYTES_PER_ELEMENT = bytesPerElement;
+
+ // getter type (unsigned long index);
+ ctor.prototype._getter = function(index) {
+ if (arguments.length < 1) throw new SyntaxError("Not enough arguments");
+
+ index = ECMAScript.ToUint32(index);
+ if (index >= this.length) {
+ return undefined;
+ }
+
+ var bytes = [], i, o;
+ for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;
+ i < this.BYTES_PER_ELEMENT;
+ i += 1, o += 1) {
+ bytes.push(this.buffer._bytes[o]);
+ }
+ return this._unpack(bytes);
+ };
+
+ // NONSTANDARD: convenience alias for getter: type get(unsigned long index);
+ ctor.prototype.get = ctor.prototype._getter;
+
+ // setter void (unsigned long index, type value);
+ ctor.prototype._setter = function(index, value) {
+ if (arguments.length < 2) throw new SyntaxError("Not enough arguments");
+
+ index = ECMAScript.ToUint32(index);
+ if (index >= this.length) {
+ return undefined;
+ }
+
+ var bytes = this._pack(value), i, o;
+ for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;
+ i < this.BYTES_PER_ELEMENT;
+ i += 1, o += 1) {
+ this.buffer._bytes[o] = bytes[i];
+ }
+ };
+
+ // void set(TypedArray array, optional unsigned long offset);
+ // void set(sequence<type> array, optional unsigned long offset);
+ ctor.prototype.set = function(index, value) {
+ if (arguments.length < 1) throw new SyntaxError("Not enough arguments");
+ var array, sequence, offset, len,
+ i, s, d,
+ byteOffset, byteLength, tmp;
+
+ if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {
+ // void set(TypedArray array, optional unsigned long offset);
+ array = arguments[0];
+ offset = ECMAScript.ToUint32(arguments[1]);
+
+ if (offset + array.length > this.length) {
+ throw new RangeError("Offset plus length of array is out of range");
+ }
+
+ byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;
+ byteLength = array.length * this.BYTES_PER_ELEMENT;
+
+ if (array.buffer === this.buffer) {
+ tmp = [];
+ for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {
+ tmp[i] = array.buffer._bytes[s];
+ }
+ for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {
+ this.buffer._bytes[d] = tmp[i];
+ }
+ } else {
+ for (i = 0, s = array.byteOffset, d = byteOffset;
+ i < byteLength; i += 1, s += 1, d += 1) {
+ this.buffer._bytes[d] = array.buffer._bytes[s];
+ }
+ }
+ } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {
+ // void set(sequence<type> array, optional unsigned long offset);
+ sequence = arguments[0];
+ len = ECMAScript.ToUint32(sequence.length);
+ offset = ECMAScript.ToUint32(arguments[1]);
+
+ if (offset + len > this.length) {
+ throw new RangeError("Offset plus length of array is out of range");
+ }
+
+ for (i = 0; i < len; i += 1) {
+ s = sequence[i];
+ this._setter(offset + i, Number(s));
+ }
+ } else {
+ throw new TypeError("Unexpected argument type(s)");
+ }
+ };
+
+ // TypedArray subarray(long begin, optional long end);
+ ctor.prototype.subarray = function(start, end) {
+ function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }
+
+ start = ECMAScript.ToInt32(start);
+ end = ECMAScript.ToInt32(end);
+
+ if (arguments.length < 1) { start = 0; }
+ if (arguments.length < 2) { end = this.length; }
+
+ if (start < 0) { start = this.length + start; }
+ if (end < 0) { end = this.length + end; }
+
+ start = clamp(start, 0, this.length);
+ end = clamp(end, 0, this.length);
+
+ var len = end - start;
+ if (len < 0) {
+ len = 0;
+ }
+
+ return new this.constructor(
+ this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);
+ };
+
+ return ctor;
+ }
+
+ var Int8Array = makeConstructor(1, packI8, unpackI8);
+ var Uint8Array = makeConstructor(1, packU8, unpackU8);
+ var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8);
+ var Int16Array = makeConstructor(2, packI16, unpackI16);
+ var Uint16Array = makeConstructor(2, packU16, unpackU16);
+ var Int32Array = makeConstructor(4, packI32, unpackI32);
+ var Uint32Array = makeConstructor(4, packU32, unpackU32);
+ var Float32Array = makeConstructor(4, packF32, unpackF32);
+ var Float64Array = makeConstructor(8, packF64, unpackF64);
+
+ exports.Int8Array = exports.Int8Array || Int8Array;
+ exports.Uint8Array = exports.Uint8Array || Uint8Array;
+ exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray;
+ exports.Int16Array = exports.Int16Array || Int16Array;
+ exports.Uint16Array = exports.Uint16Array || Uint16Array;
+ exports.Int32Array = exports.Int32Array || Int32Array;
+ exports.Uint32Array = exports.Uint32Array || Uint32Array;
+ exports.Float32Array = exports.Float32Array || Float32Array;
+ exports.Float64Array = exports.Float64Array || Float64Array;
+}());
+
+//
+// 6 The DataView View Type
+//
+
+(function() {
+ function r(array, index) {
+ return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];
+ }
+
+ var IS_BIG_ENDIAN = (function() {
+ var u16array = new(exports.Uint16Array)([0x1234]),
+ u8array = new(exports.Uint8Array)(u16array.buffer);
+ return r(u8array, 0) === 0x12;
+ }());
+
+ // Constructor(ArrayBuffer buffer,
+ // optional unsigned long byteOffset,
+ // optional unsigned long byteLength)
+ /** @constructor */
+ var DataView = function DataView(buffer, byteOffset, byteLength) {
+ if (arguments.length === 0) {
+ buffer = new exports.ArrayBuffer(0);
+ } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {
+ throw new TypeError("TypeError");
+ }
+
+ this.buffer = buffer || new exports.ArrayBuffer(0);
+
+ this.byteOffset = ECMAScript.ToUint32(byteOffset);
+ if (this.byteOffset > this.buffer.byteLength) {
+ throw new RangeError("byteOffset out of range");
+ }
+
+ if (arguments.length < 3) {
+ this.byteLength = this.buffer.byteLength - this.byteOffset;
+ } else {
+ this.byteLength = ECMAScript.ToUint32(byteLength);
+ }
+
+ if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {
+ throw new RangeError("byteOffset and length reference an area beyond the end of the buffer");
+ }
+
+ configureProperties(this);
+ };
+
+ function makeGetter(arrayType) {
+ return function(byteOffset, littleEndian) {
+
+ byteOffset = ECMAScript.ToUint32(byteOffset);
+
+ if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {
+ throw new RangeError("Array index out of range");
+ }
+ byteOffset += this.byteOffset;
+
+ var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),
+ bytes = [], i;
+ for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {
+ bytes.push(r(uint8Array, i));
+ }
+
+ if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {
+ bytes.reverse();
+ }
+
+ return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);
+ };
+ }
+
+ DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);
+ DataView.prototype.getInt8 = makeGetter(exports.Int8Array);
+ DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);
+ DataView.prototype.getInt16 = makeGetter(exports.Int16Array);
+ DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);
+ DataView.prototype.getInt32 = makeGetter(exports.Int32Array);
+ DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);
+ DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);
+
+ function makeSetter(arrayType) {
+ return function(byteOffset, value, littleEndian) {
+
+ byteOffset = ECMAScript.ToUint32(byteOffset);
+ if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {
+ throw new RangeError("Array index out of range");
+ }
+
+ // Get bytes
+ var typeArray = new arrayType([value]),
+ byteArray = new exports.Uint8Array(typeArray.buffer),
+ bytes = [], i, byteView;
+
+ for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {
+ bytes.push(r(byteArray, i));
+ }
+
+ // Flip if necessary
+ if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {
+ bytes.reverse();
+ }
+
+ // Write them
+ byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);
+ byteView.set(bytes);
+ };
+ }
+
+ DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);
+ DataView.prototype.setInt8 = makeSetter(exports.Int8Array);
+ DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);
+ DataView.prototype.setInt16 = makeSetter(exports.Int16Array);
+ DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);
+ DataView.prototype.setInt32 = makeSetter(exports.Int32Array);
+ DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);
+ DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);
+
+ exports.DataView = exports.DataView || DataView;
+
+}());
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json
new file mode 100644
index 000000000..b8b59f5c3
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json
@@ -0,0 +1,79 @@
+{
+ "name": "typedarray",
+ "version": "0.0.6",
+ "description": "TypedArray polyfill for old browsers",
+ "main": "index.js",
+ "devDependencies": {
+ "tape": "~2.3.2"
+ },
+ "scripts": {
+ "test": "tape test/*.js test/server/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/typedarray.git"
+ },
+ "homepage": "https://github.com/substack/typedarray",
+ "keywords": [
+ "ArrayBuffer",
+ "DataView",
+ "Float32Array",
+ "Float64Array",
+ "Int8Array",
+ "Int16Array",
+ "Int32Array",
+ "Uint8Array",
+ "Uint8ClampedArray",
+ "Uint16Array",
+ "Uint32Array",
+ "typed",
+ "array",
+ "polyfill"
+ ],
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "license": "MIT",
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/6..latest",
+ "firefox/16..latest",
+ "firefox/nightly",
+ "chrome/22..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"
+ ]
+ },
+ "bugs": {
+ "url": "https://github.com/substack/typedarray/issues"
+ },
+ "_id": "typedarray@0.0.6",
+ "dist": {
+ "shasum": "867ac74e3864187b1d3d47d996a78ec5c8830777",
+ "tarball": "http://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ },
+ "_from": "typedarray@>=0.0.5 <0.1.0",
+ "_npmVersion": "1.4.3",
+ "_npmUser": {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "directories": {},
+ "_shasum": "867ac74e3864187b1d3d47d996a78ec5c8830777",
+ "_resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/readme.markdown b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/readme.markdown
new file mode 100644
index 000000000..d18f6f719
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/readme.markdown
@@ -0,0 +1,61 @@
+# typedarray
+
+TypedArray polyfill ripped from [this
+module](https://raw.github.com/inexorabletash/polyfill).
+
+[![build status](https://secure.travis-ci.org/substack/typedarray.png)](http://travis-ci.org/substack/typedarray)
+
+[![testling badge](https://ci.testling.com/substack/typedarray.png)](https://ci.testling.com/substack/typedarray)
+
+# example
+
+``` js
+var Uint8Array = require('typedarray').Uint8Array;
+var ua = new Uint8Array(5);
+ua[1] = 256 + 55;
+console.log(ua[1]);
+```
+
+output:
+
+```
+55
+```
+
+# methods
+
+``` js
+var TA = require('typedarray')
+```
+
+The `TA` object has the following constructors:
+
+* TA.ArrayBuffer
+* TA.DataView
+* TA.Float32Array
+* TA.Float64Array
+* TA.Int8Array
+* TA.Int16Array
+* TA.Int32Array
+* TA.Uint8Array
+* TA.Uint8ClampedArray
+* TA.Uint16Array
+* TA.Uint32Array
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install typedarray
+```
+
+To use this module in the browser, compile with
+[browserify](http://browserify.org)
+or download a UMD build from browserify CDN:
+
+http://wzrd.in/standalone/typedarray@latest
+
+# license
+
+MIT
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/server/undef_globals.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/server/undef_globals.js
new file mode 100644
index 000000000..425950f9f
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/server/undef_globals.js
@@ -0,0 +1,19 @@
+var test = require('tape');
+var vm = require('vm');
+var fs = require('fs');
+var src = fs.readFileSync(__dirname + '/../../index.js', 'utf8');
+
+test('u8a without globals', function (t) {
+ var c = {
+ module: { exports: {} },
+ };
+ c.exports = c.module.exports;
+ vm.runInNewContext(src, c);
+ var TA = c.module.exports;
+ var ua = new(TA.Uint8Array)(5);
+
+ t.equal(ua.length, 5);
+ ua[1] = 256 + 55;
+ t.equal(ua[1], 55);
+ t.end();
+});
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/tarray.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/tarray.js
new file mode 100644
index 000000000..df596a34f
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/test/tarray.js
@@ -0,0 +1,10 @@
+var TA = require('../');
+var test = require('tape');
+
+test('tiny u8a test', function (t) {
+ var ua = new(TA.Uint8Array)(5);
+ t.equal(ua.length, 5);
+ ua[1] = 256 + 55;
+ t.equal(ua[1], 55);
+ t.end();
+});
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json
new file mode 100644
index 000000000..0cdb8416d
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json
@@ -0,0 +1,78 @@
+{
+ "name": "concat-stream",
+ "version": "1.4.7",
+ "description": "writable stream that concatenates strings or binary data and calls a callback with the result",
+ "tags": [
+ "stream",
+ "simple",
+ "util",
+ "utility"
+ ],
+ "author": {
+ "name": "Max Ogden",
+ "email": "max@maxogden.com"
+ },
+ "repository": {
+ "type": "git",
+ "url": "http://github.com/maxogden/concat-stream.git"
+ },
+ "bugs": {
+ "url": "http://github.com/maxogden/concat-stream/issues"
+ },
+ "engines": [
+ "node >= 0.8"
+ ],
+ "main": "index.js",
+ "scripts": {
+ "test": "tape test/*.js test/server/*.js"
+ },
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "typedarray": "~0.0.5",
+ "readable-stream": "~1.1.9"
+ },
+ "devDependencies": {
+ "tape": "~2.3.2"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/17..latest",
+ "firefox/nightly",
+ "chrome/22..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": "41edc57536490dce9f015131c29a6470c9412b27",
+ "homepage": "https://github.com/maxogden/concat-stream",
+ "_id": "concat-stream@1.4.7",
+ "_shasum": "0ceaa47b87a581d2a7a782b92b81d5020c3f9925",
+ "_from": "concat-stream@>=1.4.6 <2.0.0",
+ "_npmVersion": "2.1.8",
+ "_nodeVersion": "0.10.28",
+ "_npmUser": {
+ "name": "maxogden",
+ "email": "max@maxogden.com"
+ },
+ "maintainers": [
+ {
+ "name": "maxogden",
+ "email": "max@maxogden.com"
+ }
+ ],
+ "dist": {
+ "shasum": "0ceaa47b87a581d2a7a782b92b81d5020c3f9925",
+ "tarball": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.7.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/readme.md b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/readme.md
new file mode 100644
index 000000000..e6dda4e34
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/readme.md
@@ -0,0 +1,84 @@
+# concat-stream
+
+Writable stream that concatenates strings or binary data and calls a callback with the result. Not a transform stream -- more of a stream sink.
+
+[![NPM](https://nodei.co/npm/concat-stream.png)](https://nodei.co/npm/concat-stream/)
+
+### examples
+
+#### Buffers
+
+```js
+var fs = require('fs')
+var concat = require('concat-stream')
+
+var readStream = fs.createReadStream('cat.png')
+var concatStream = concat(gotPicture)
+
+readStream.on('error', handleError)
+readStream.pipe(concatStream)
+
+function gotPicture(imageBuffer) {
+ // imageBuffer is all of `cat.png` as a node.js Buffer
+}
+
+function handleError(err) {
+ // handle your error appropriately here, e.g.:
+ console.error(err) // print the error to STDERR
+ process.exit(1) // exit program with non-zero exit code
+}
+
+```
+
+#### Arrays
+
+```js
+var write = concat(function(data) {})
+write.write([1,2,3])
+write.write([4,5,6])
+write.end()
+// data will be [1,2,3,4,5,6] in the above callback
+```
+
+#### Uint8Arrays
+
+```js
+var write = concat(function(data) {})
+var a = new Uint8Array(3)
+a[0] = 97; a[1] = 98; a[2] = 99
+write.write(a)
+write.write('!')
+write.end(Buffer('!!1'))
+```
+
+See `test/` for more examples
+
+# methods
+
+```js
+var concat = require('concat-stream')
+```
+
+## var writable = concat(opts={}, cb)
+
+Return a `writable` stream that will fire `cb(data)` with all of the data that
+was written to the stream. Data can be written to `writable` as strings,
+Buffers, arrays of byte integers, and Uint8Arrays.
+
+By default `concat-stream` will give you back the same data type as the type of the first buffer written to the stream. Use `opts.encoding` to set what format `data` should be returned as, e.g. if you if you don't want to rely on the built-in type checking or for some other reason.
+
+* `string` - get a string
+* `buffer` - get back a Buffer
+* `array` - get an array of byte integers
+* `uint8array`, `u8`, `uint8` - get back a Uint8Array
+* `object`, get back an array of Objects
+
+If you don't specify an encoding, and the types can't be inferred (e.g. you write things that aren't int he list above), it will try to convert concat them into a `Buffer`.
+
+# error handling
+
+`concat-stream` does not handle errors for you, so you must handle errors on whatever streams you pipe into `concat-stream`. This is a general rule when programming with node.js streams: always handle errors on each and every stream. Since `concat-stream` is not itself a stream it does not emit errors.
+
+# license
+
+MIT LICENSE
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/array.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/array.js
new file mode 100644
index 000000000..86e7dd43b
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/array.js
@@ -0,0 +1,12 @@
+var concat = require('../')
+var test = require('tape')
+
+test('array stream', function (t) {
+ t.plan(1)
+ var arrays = concat({ encoding: 'array' }, function(out) {
+ t.deepEqual(out, [1,2,3,4,5,6])
+ })
+ arrays.write([1,2,3])
+ arrays.write([4,5,6])
+ arrays.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/buffer.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/buffer.js
new file mode 100644
index 000000000..d28f5f9c1
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/buffer.js
@@ -0,0 +1,31 @@
+var concat = require('../')
+var test = require('tape')
+var TA = require('typedarray')
+var U8 = typeof Uint8Array !== 'undefined' ? Uint8Array : TA.Uint8Array
+
+test('buffer stream', function (t) {
+ t.plan(2)
+ var buffers = concat(function(out) {
+ t.ok(Buffer.isBuffer(out))
+ t.equal(out.toString('utf8'), 'pizza Array is not a stringy cat')
+ })
+ buffers.write(new Buffer('pizza Array is not a ', 'utf8'))
+ buffers.write(new Buffer('stringy cat'))
+ buffers.end()
+})
+
+test('buffer mixed writes', function (t) {
+ t.plan(2)
+ var buffers = concat(function(out) {
+ t.ok(Buffer.isBuffer(out))
+ t.equal(out.toString('utf8'), 'pizza Array is not a stringy cat555')
+ })
+ buffers.write(new Buffer('pizza'))
+ buffers.write(' Array is not a ')
+ buffers.write([ 115, 116, 114, 105, 110, 103, 121 ])
+ var u8 = new U8(4)
+ u8[0] = 32; u8[1] = 99; u8[2] = 97; u8[3] = 116
+ buffers.write(u8)
+ buffers.write(555)
+ buffers.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/infer.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/infer.js
new file mode 100644
index 000000000..91ab933f4
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/infer.js
@@ -0,0 +1,15 @@
+var concat = require('../')
+var test = require('tape')
+
+test('type inference works as expected', function(t) {
+ var stream = concat()
+ t.equal(stream.inferEncoding(['hello']), 'array', 'array')
+ t.equal(stream.inferEncoding(new Buffer('hello')), 'buffer', 'buffer')
+ t.equal(stream.inferEncoding(undefined), 'buffer', 'buffer')
+ t.equal(stream.inferEncoding(new Uint8Array(1)), 'uint8array', 'uint8array')
+ t.equal(stream.inferEncoding('hello'), 'string', 'string')
+ t.equal(stream.inferEncoding(''), 'string', 'string')
+ t.equal(stream.inferEncoding({hello: "world"}), 'object', 'object')
+ t.equal(stream.inferEncoding(1), 'buffer', 'buffer')
+ t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/nothing.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/nothing.js
new file mode 100644
index 000000000..6ac604965
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/nothing.js
@@ -0,0 +1,25 @@
+var concat = require('../')
+var test = require('tape')
+
+test('no callback stream', function (t) {
+ var stream = concat()
+ stream.write('space')
+ stream.end(' cats')
+ t.end()
+})
+
+test('no encoding set, no data', function (t) {
+ var stream = concat(function(data) {
+ t.deepEqual(data, [])
+ t.end()
+ })
+ stream.end()
+})
+
+test('encoding set to string, no data', function (t) {
+ var stream = concat({ encoding: 'string' }, function(data) {
+ t.deepEqual(data, '')
+ t.end()
+ })
+ stream.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/objects.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/objects.js
new file mode 100644
index 000000000..ad921ed25
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/objects.js
@@ -0,0 +1,29 @@
+var concat = require('../')
+var test = require('tape')
+
+test('writing objects', function (t) {
+ var stream = concat({encoding: "objects"}, concatted)
+ function concatted(objs) {
+ t.equal(objs.length, 2)
+ t.deepEqual(objs[0], {"foo": "bar"})
+ t.deepEqual(objs[1], {"baz": "taco"})
+ }
+ stream.write({"foo": "bar"})
+ stream.write({"baz": "taco"})
+ stream.end()
+ t.end()
+})
+
+
+test('switch to objects encoding if no encoding specified and objects are written', function (t) {
+ var stream = concat(concatted)
+ function concatted(objs) {
+ t.equal(objs.length, 2)
+ t.deepEqual(objs[0], {"foo": "bar"})
+ t.deepEqual(objs[1], {"baz": "taco"})
+ }
+ stream.write({"foo": "bar"})
+ stream.write({"baz": "taco"})
+ stream.end()
+ t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/server/ls.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/server/ls.js
new file mode 100644
index 000000000..3258d8ddc
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/server/ls.js
@@ -0,0 +1,16 @@
+var concat = require('../../')
+var spawn = require('child_process').spawn
+var exec = require('child_process').exec
+var test = require('tape')
+
+test('ls command', function (t) {
+ t.plan(1)
+ var cmd = spawn('ls', [ __dirname ])
+ cmd.stdout.pipe(
+ concat(function(out) {
+ exec('ls ' + __dirname, function (err, body) {
+ t.equal(out.toString('utf8'), body.toString('utf8'))
+ })
+ })
+ )
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/string.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/string.js
new file mode 100644
index 000000000..218c52206
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/string.js
@@ -0,0 +1,76 @@
+var concat = require('../')
+var test = require('tape')
+var TA = require('typedarray')
+var U8 = typeof Uint8Array !== 'undefined' ? Uint8Array : TA.Uint8Array
+
+test('string -> buffer stream', function (t) {
+ t.plan(2)
+ var strings = concat({ encoding: 'buffer'}, function(out) {
+ t.ok(Buffer.isBuffer(out))
+ t.equal(out.toString('utf8'), 'nacho dogs')
+ })
+ strings.write("nacho ")
+ strings.write("dogs")
+ strings.end()
+})
+
+test('string stream', function (t) {
+ t.plan(2)
+ var strings = concat({ encoding: 'string' }, function(out) {
+ t.equal(typeof out, 'string')
+ t.equal(out, 'nacho dogs')
+ })
+ strings.write("nacho ")
+ strings.write("dogs")
+ strings.end()
+})
+
+test('end chunk', function (t) {
+ t.plan(1)
+ var endchunk = concat({ encoding: 'string' }, function(out) {
+ t.equal(out, 'this is the end')
+ })
+ endchunk.write("this ")
+ endchunk.write("is the ")
+ endchunk.end("end")
+})
+
+test('string from mixed write encodings', function (t) {
+ t.plan(2)
+ var strings = concat({ encoding: 'string' }, function(out) {
+ t.equal(typeof out, 'string')
+ t.equal(out, 'nacho dogs')
+ })
+ strings.write('na')
+ strings.write(Buffer('cho'))
+ strings.write([ 32, 100 ])
+ var u8 = new U8(3)
+ u8[0] = 111; u8[1] = 103; u8[2] = 115;
+ strings.end(u8)
+})
+
+test('string from buffers with multibyte characters', function (t) {
+ t.plan(2)
+ var strings = concat({ encoding: 'string' }, function(out) {
+ t.equal(typeof out, 'string')
+ t.equal(out, '☃☃☃☃☃☃☃☃')
+ })
+ var snowman = new Buffer('☃')
+ for (var i = 0; i < 8; i++) {
+ strings.write(snowman.slice(0, 1))
+ strings.write(snowman.slice(1))
+ }
+ strings.end()
+})
+
+test('string infer encoding with empty string chunk', function (t) {
+ t.plan(2)
+ var strings = concat(function(out) {
+ t.equal(typeof out, 'string')
+ t.equal(out, 'nacho dogs')
+ })
+ strings.write("")
+ strings.write("nacho ")
+ strings.write("dogs")
+ strings.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/typedarray.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/typedarray.js
new file mode 100644
index 000000000..ee0711082
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/test/typedarray.js
@@ -0,0 +1,33 @@
+var concat = require('../')
+var test = require('tape')
+var TA = require('typedarray')
+var U8 = typeof Uint8Array !== 'undefined' ? Uint8Array : TA.Uint8Array
+
+test('typed array stream', function (t) {
+ t.plan(2)
+ var a = new U8(5)
+ a[0] = 97; a[1] = 98; a[2] = 99; a[3] = 100; a[4] = 101;
+ var b = new U8(3)
+ b[0] = 32; b[1] = 102; b[2] = 103;
+ var c = new U8(4)
+ c[0] = 32; c[1] = 120; c[2] = 121; c[3] = 122;
+
+ var arrays = concat({ encoding: 'Uint8Array' }, function(out) {
+ t.equal(typeof out.subarray, 'function')
+ t.deepEqual(Buffer(out).toString('utf8'), 'abcde fg xyz')
+ })
+ arrays.write(a)
+ arrays.write(b)
+ arrays.end(c)
+})
+
+test('typed array from strings, buffers, and arrays', function (t) {
+ t.plan(2)
+ var arrays = concat({ encoding: 'Uint8Array' }, function(out) {
+ t.equal(typeof out.subarray, 'function')
+ t.deepEqual(Buffer(out).toString('utf8'), 'abcde fg xyz')
+ })
+ arrays.write('abcde')
+ arrays.write(Buffer(' fg '))
+ arrays.end([ 120, 121, 122 ])
+})
diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json
index f9c447ee2..9d4178c57 100644
--- a/deps/npm/node_modules/npm-registry-client/package.json
+++ b/deps/npm/node_modules/npm-registry-client/package.json
@@ -6,7 +6,7 @@
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "3.2.4",
+ "version": "5.0.0",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client"
},
@@ -16,12 +16,12 @@
},
"dependencies": {
"chownr": "0",
+ "concat-stream": "^1.4.6",
"graceful-fs": "^3.0.0",
"mkdirp": "^0.5.0",
"normalize-package-data": "~1.0.1",
- "npm-cache-filename": "^1.0.0",
"once": "^1.3.0",
- "request": "2 >=2.25.0",
+ "request": "^2.47.0",
"retry": "^0.6.1",
"rimraf": "2",
"semver": "2 >=2.2.1 || 3.x || 4",
@@ -29,22 +29,22 @@
"npmlog": ""
},
"devDependencies": {
- "concat-stream": "^1.4.6",
- "npmconf": "^2.1.0",
+ "negotiator": "^0.4.9",
+ "nock": "^0.56.0",
"tap": ""
},
"optionalDependencies": {
"npmlog": ""
},
"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 options = {timeout: 1000}\n\nclient.get(uri, options, 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 (for the base URL, any path\nwill be ignored). In addition to `http` and `https`, `npm` URLs are allowed.\n`npm` URLs are `https` URLs with the additional restrictions that they will\nalways include authorization credentials, and the response is always registry\nmetadata (and not tarballs or other attachments).\n\n# Configuration\n\nThis program is designed to work with\n[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\na plain-jane object with the appropriate configs, and it'll shim it\nfor you. Any configuration thingie that has get/set/del methods will\nalso be accepted.\n\n* `cache` **Required** {String} Path to the cache folder\n* `always-auth` {Boolean} Auth even for GET requests.\n* `auth` {String} A base64-encoded `username:password`\n* `email` {String} User's email address\n* `tag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `ca` {String} Cerficate signing authority certificates to trust.\n* `cert` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates\n* `key` {String} Private key (PEM encoded) for client certificate 'cert'\n* `strict-ssl` {Boolean} Whether or not to be strict with SSL\n certificates. Default = `true`\n* `user-agent` {String} User agent header to send. Default =\n `\"node/{process.version} {process.platform} {process.arch}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `fetch-retries` {Number} Number of times to retry on GET failures.\n Default=2\n* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\n* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\n Default=10000 (10 seconds)\n* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default=60000 (60 seconds)\n* `proxy` {URL} The url to proxy requests through.\n* `https-proxy` {URL} The url to proxy https requests through.\n Defaults to be the same as `proxy` if unset.\n* `_auth` {String} The base64-encoded authorization header.\n* `username` `_password` {String} Username/password to use to generate\n `_auth` if not supplied.\n* `_token` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login)\n\n# client.request(method, uri, options, cb)\n\n* `method` {String} HTTP method\n* `uri` {String} URI pointing to the resource to request\n* `options` {Object} Object containing optional per-request properties.\n * `what` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON.\n * `etag` {String} The cached ETag\n * `follow` {Boolean} Follow 302/301 responses (defaults to true)\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 request to the registry. All the other methods are wrappers around\n`request`.\n\n# client.adduser(base, username, password, email, cb)\n\n* `base` {String} Base registry URL\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `cb` {Function}\n\nAdd a user account to the registry, or verify the credentials.\n\n# client.deprecate(uri, version, message, cb)\n\n* `uri` {String} Full registry URI for the deprecated package\n* `version` {String} Semver version range\n* `message` {String} The message to use as a deprecation warning\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n# client.bugs(uri, cb)\n\n* `uri` {String} Full registry URI for the package\n* `cb` {Function}\n\nGet the url for bugs of a package\n\n# client.get(uri, options, cb)\n\n* `uri` {String} The complete registry URI to fetch\n* `options` {Object} Object containing optional per-request properties.\n * `timeout` {Number} Duration before the request times out.\n * `follow` {Boolean} Follow 302/301 responses (defaults to true)\n * `staleOk` {Boolean} If there's cached data available, then return that\n to the callback quickly, and update the cache the background.\n\nFetches data from the registry via a GET request, saving it in the cache folder\nwith the ETag.\n\n# client.publish(uri, data, tarball, cb)\n\n* `uri` {String} The registry URI to publish to\n* `data` {Object} Package data\n* `tarball` {String | Stream} Filename or stream of the package tarball\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder. However, it can\naccept a gzipped tar stream or a filename to a tarball.\n\n# client.star(uri, starred, cb)\n\n* `uri` {String} The complete registry URI to star\n* `starred` {Boolean} True to star the package, false to unstar it.\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(base, username, cb)\n\n* `base` {String} The base URL for the registry\n* `username` {String} Name of user to fetch starred packages for.\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n# client.tag(uri, version, tag, cb)\n\n* `uri` {String} The complete registry URI to tag\n* `version` {String} Version to tag\n* `tag` {String} Tag name to apply\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, [ver], cb)\n\n* `uri` {String} The complete registry URI to unpublish\n* `ver` {String} version to unpublish. Leave blank to unpublish all\n versions.\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.upload(uri, file, [etag], [nofollow], cb)\n\n* `uri` {String} The complete registry URI to upload to\n* `file` {String | Stream} Either the filename or a readable stream\n* `etag` {String} Cache ETag\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `cb` {Function}\n\nUpload an attachment. Mostly used by `client.publish()`.\n",
+ "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.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.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 * `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} Cerficate 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": "ddafd4913bdca30a1f9111660767f71653604b57",
+ "gitHead": "b22f38992087e57f263c269dcd52ff290565d401",
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
"homepage": "https://github.com/isaacs/npm-registry-client",
- "_id": "npm-registry-client@3.2.4",
- "_shasum": "8659b3449e1c9a9f8181dad142cadb048bfe521f",
- "_from": "npm-registry-client@>=3.2.4 <3.3.0"
+ "_id": "npm-registry-client@5.0.0",
+ "_shasum": "0425db2fc3dcd322e74fe95029d2c49a41e4b6cf",
+ "_from": "npm-registry-client@>=5.0.0 <5.1.0"
}
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 57dca0b52..3789fc954 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
@@ -5,20 +5,27 @@ 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()
+ , 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) {
- server.expect("/-/user/org.couchdb.user:username", function (req, res) {
+ var auth = {
+ username : username,
+ password : password,
+ email : email
+ }
+ 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) {
@@ -32,13 +39,17 @@ tap.test("create new user account", function (t) {
t.deepEqual(o, userdata)
res.statusCode = 201
- res.json({created:true})
+ res.json(auth)
})
})
- client.adduser("http://localhost:1337/", username, password, email, function (er, data) {
- if (er) throw er
- t.deepEqual(data, { created: true })
- t.end()
- })
+ client.adduser(
+ "http://localhost:1337/registry/_design/app/_rewrite",
+ params,
+ function (er, data) {
+ if (er) throw er
+ 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 2c5ccde6e..6732f7ba0 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
@@ -19,6 +19,13 @@ var password = "%1234@asdf%"
tap.test("update a user acct", function (t) {
+ var auth = {
+ username : username,
+ password : password,
+ email : email
+ }
+ var params = { auth : auth }
+
server.expect("PUT", "/-/user/org.couchdb.user:username", function (req, res) {
t.equal(req.method, "PUT")
res.statusCode = 409
@@ -45,13 +52,17 @@ tap.test("update a user acct", function (t) {
t.deepEqual(o, userdata)
res.statusCode = 201
- res.json({created:true})
+ res.json(auth)
})
})
- client.adduser("http://localhost:1337/", username, password, email, function (er, data) {
- if (er) throw er
- t.deepEqual(data, { created: true })
- t.end()
- })
+ client.adduser(
+ "http://localhost:1337/",
+ params,
+ function (er, data) {
+ if (er) throw er
+ 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
new file mode 100644
index 000000000..fccb037af
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/adduser.js
@@ -0,0 +1,162 @@
+var test = require("tap").test
+
+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
+ }
+}
+
+test("adduser call contract", function (t) {
+ t.throws(function () {
+ client.adduser(undefined, AUTH, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ client.adduser([], AUTH, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.adduser(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.adduser(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.adduser(URI, AUTH, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ client.adduser(URI, AUTH, "callback")
+ }, "callback must be function")
+
+ t.throws(
+ function () {
+ var params = {
+ auth : {
+ password : PASSWORD,
+ email : EMAIL
+ }
+ }
+ client.adduser(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must include username in auth" },
+ "auth must include username"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ auth : {
+ username : USERNAME,
+ email : EMAIL
+ }
+ }
+ client.adduser(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must include password in auth" },
+ "auth must include password"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ auth : {
+ username : USERNAME,
+ password : PASSWORD
+ }
+ }
+ client.adduser(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must include email in auth" },
+ "auth must include email"
+ )
+
+ t.test("username missing", function (t) {
+ var params = {
+ 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.end()
+ })
+ })
+
+ t.test("password missing", function (t) {
+ var params = {
+ 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"
+ )
+ t.end()
+ })
+ })
+
+ t.test("email missing", function (t) {
+ var params = {
+ 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"
+ )
+ t.end()
+ })
+ })
+
+ t.test("email malformed", function (t) {
+ var params = {
+ 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"
+ )
+ t.end()
+ })
+ })
+
+ t.end()
+})
+
+test("cleanup", function (t) {
+ server.close()
+ t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/bugs.js b/deps/npm/node_modules/npm-registry-client/test/bugs.js
deleted file mode 100644
index 799445295..000000000
--- a/deps/npm/node_modules/npm-registry-client/test/bugs.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var tap = require("tap")
-
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
-var client = common.freshClient()
-
-tap.test("get the URL for the bugs page on a package", function (t) {
- server.expect("GET", "/sample/latest", function (req, res) {
- t.equal(req.method, "GET")
-
- res.json({
- bugs : {
- url : "http://github.com/example/sample/issues",
- email : "sample@example.com"
- }
- })
- })
-
- client.bugs("http://localhost:1337/sample", function (error, info) {
- t.ifError(error)
-
- t.ok(info.url, "got the URL")
- t.ok(info.email, "got the email address")
-
- 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
new file mode 100644
index 000000000..46756297a
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/config-defaults.js
@@ -0,0 +1,42 @@
+var test = require("tap").test
+
+require("./lib/server.js").close()
+var common = require("./lib/common.js")
+
+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")
+
+ 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")
+
+ 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(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.end()
+})
+
+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.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
new file mode 100644
index 000000000..4e1240692
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/config-override.js
@@ -0,0 +1,57 @@
+var test = require("tap").test
+
+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"
+ },
+ 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
+ },
+ userAgent : "npm-awesome/4 (Mozilla 5.0)",
+ log : { fake : function () {} },
+ defaultTag : "next",
+ couchToken : { object : true },
+ sessionToken : "hamchunx"
+}
+
+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")
+
+ 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.strict, false)
+
+ var retry = client.config.retry
+ t.equal(retry.count, 1)
+ t.equal(retry.factor, 9001)
+ t.equal(retry.minTimeout, -1)
+ t.equal(retry.maxTimeout, Infinity)
+
+ t.equal(client.config.userAgent, "npm-awesome/4 (Mozilla 5.0)")
+ t.ok(client.log.fake)
+ t.equal(client.config.defaultTag, "next")
+ t.ok(client.config.couchToken.object)
+ 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 76a5ba128..84b82b919 100644
--- a/deps/npm/node_modules/npm-registry-client/test/deprecate.js
+++ b/deps/npm/node_modules/npm-registry-client/test/deprecate.js
@@ -1,21 +1,107 @@
-var tap = require("tap")
+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 nerfed = "//localhost:" + server.port + "/:"
-
-var configuration = {}
-configuration[nerfed + "_authToken"] = "not-bad-meaning-bad-but-bad-meaning-wombat"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
-var cache = require("./fixtures/underscore/cache.json")
+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 PARAMS = {
+ version : VERSION,
+ message : MESSAGE,
+ auth : AUTH
+}
+
+test("deprecate call contract", function (t) {
+ t.throws(function () {
+ client.deprecate(undefined, PARAMS, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ client.deprecate([], PARAMS, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.deprecate(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.deprecate(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.deprecate(URI, PARAMS, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ client.deprecate(URI, PARAMS, "callback")
+ }, "callback must be function")
+
+ t.throws(
+ function () {
+ var params = {
+ message : MESSAGE,
+ auth : AUTH
+ }
+ client.deprecate(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass version to deprecate" },
+ "params must include version to deprecate"
+ )
-tap.test("deprecate a package", function (t) {
+ t.throws(
+ function () {
+ var params = {
+ version : VERSION,
+ auth : AUTH
+ }
+ client.deprecate(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass message to deprecate" },
+ "params must include deprecation message"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ version : VERSION,
+ message : MESSAGE
+ }
+ client.deprecate(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass auth to deprecate" },
+ "params must include auth"
+ )
+
+ t.test("malformed semver in deprecation", function (t) {
+ var params = {
+ 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"
+ )
+ t.end()
+ })
+ })
+
+ t.end()
+})
+
+test("deprecate a package", function (t) {
server.expect("GET", "/underscore?write=true", function (req, res) {
t.equal(req.method, "GET")
@@ -57,10 +143,14 @@ tap.test("deprecate a package", function (t) {
})
})
- client.deprecate(common.registry + "/underscore", VERSION, MESSAGE, function (er, data) {
- t.ifError(er)
- t.ok(data.deprecated, "was deprecated")
+ client.deprecate(
+ common.registry + "/underscore",
+ PARAMS,
+ function (er, data) {
+ t.ifError(er)
+ t.ok(data.deprecated, "was deprecated")
- t.end()
- })
+ 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 2ce3b212b..25def1bec 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
@@ -10,7 +10,7 @@ var common = require("./lib/common.js")
var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
-tap.test("basic fetch", function (t) {
+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")
@@ -23,9 +23,10 @@ tap.test("basic fetch", function (t) {
})
var client = common.freshClient()
+ var defaulted = {}
client.fetch(
"http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
- null,
+ defaulted,
function (er, res) {
t.ifError(er, "loaded successfully")
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 bdd8bf070..1e48bd42e 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
@@ -30,10 +30,11 @@ tap.test("fetch with retry on timeout", function (t) {
})
var client = common.freshClient()
- client.conf.set("fetch-retry-mintimeout", 100)
+ var defaulted = {}
+ client.config.retry.minTimeout = 100
client.fetch(
"http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
- {},
+ defaulted,
function (er, res) {
t.ifError(er, "loaded successfully")
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 91cd6754d..239e2e774 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
@@ -30,10 +30,11 @@ tap.test("fetch with retry on server error", function (t) {
})
var client = common.freshClient()
- client.conf.set("fetch-retry-mintimeout", 100)
+ var defaulted = {}
+ client.config.retry.minTimeout = 100
client.fetch(
"http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
- {},
+ defaulted,
function (er, res) {
t.ifError(er, "loaded successfully")
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 da359296c..e3171a559 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
@@ -27,17 +27,18 @@ tap.test("basic fetch with scoped always-auth enabled", function (t) {
createReadStream(tgz).pipe(res)
})
- var nerfed = "//localhost:" + server.port + "/:"
- var configuration = {}
- configuration[nerfed + "username"] = "username"
- configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
- configuration[nerfed + "email"] = "i@izs.me"
- configuration[nerfed + "always-auth"] = true
-
- var client = common.freshClient(configuration)
+ var auth = {
+ username : "username",
+ password : "%1234@asdf%",
+ email : "i@izs.me",
+ alwaysAuth : true
+ }
+
+ var client = common.freshClient()
+ var authed = { auth : auth }
client.fetch(
"http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
- null,
+ authed,
function (er, res) {
t.ifError(er, "loaded successfully")
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 2ce3b212b..68e67f023 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
@@ -2,15 +2,63 @@ 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 test = require("tap").test
+var concat = require("concat-stream")
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")
-tap.test("basic fetch", function (t) {
+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 AUTH = {
+ username : USERNAME,
+ password : PASSWORD,
+ email : EMAIL
+}
+var PARAMS = {
+ headers : HEADERS,
+ auth : AUTH
+}
+
+test("fetch call contract", function (t) {
+ t.throws(function () {
+ client.get(undefined, PARAMS, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ client.get([], PARAMS, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.get(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.get(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.get(URI, PARAMS, undefined)
+ }, "requires callback")
+
+ t.throws(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")
@@ -22,14 +70,14 @@ tap.test("basic fetch", function (t) {
createReadStream(tgz).pipe(res)
})
- var client = common.freshClient()
+ var defaulted = {}
client.fetch(
"http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
- null,
+ defaulted,
function (er, res) {
t.ifError(er, "loaded successfully")
- var sink = cat(function (data) {
+ var sink = concat(function (data) {
t.deepEqual(data, readFileSync(tgz))
t.end()
})
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
new file mode 100644
index 000000000..643ac9927
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-github-api-json.js
@@ -0,0 +1,68 @@
+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 server = require("./lib/server.js")
+var common = require("./lib/common.js")
+
+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")
+
+ 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) {
+ res.writeHead(415, {
+ "Content-Type" : "application/json"
+ })
+ }
+ else {
+ res.writeHead(302, {
+ "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")
+
+ res.writeHead(200, {
+ "Content-Type" : "application/x-tar",
+ "Content-Encoding" : "gzip"
+ })
+
+ createReadStream(tgz).pipe(res)
+ })
+
+ var client = common.freshClient()
+ var defaulted = {}
+ client.fetch(
+ "http://localhost:1337/underscore/-/underscore-1.3.3",
+ defaulted,
+ function (er, res) {
+ 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.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 0275dc2b9..413377044 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
@@ -23,17 +23,18 @@ tap.test("basic fetch with scoped always-auth disabled", function (t) {
createReadStream(tgz).pipe(res)
})
- var nerfed = "//localhost:" + server.port + "/:"
- var configuration = {}
- configuration[nerfed + "username"] = "username"
- configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
- configuration[nerfed + "email"] = "i@izs.me"
- configuration[nerfed + "always-auth"] = false
-
- var client = common.freshClient(configuration)
+ var auth = {
+ username : "username",
+ password : "%1234@asdf%",
+ email : "i@izs.me",
+ alwaysAuth : false
+ }
+
+ var client = common.freshClient()
+ var authed = { auth : auth }
client.fetch(
"http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
- null,
+ authed,
function (er, res) {
t.ifError(er, "loaded successfully")
diff --git a/deps/npm/node_modules/npm-registry-client/test/get-all.js b/deps/npm/node_modules/npm-registry-client/test/get-all.js
deleted file mode 100644
index 75570fcbb..000000000
--- a/deps/npm/node_modules/npm-registry-client/test/get-all.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var tap = require("tap")
-
-var server = require("./lib/server.js")
-var common = require("./lib/common.js")
-var client = common.freshClient()
-
-tap.test("basic request", function (t) {
- server.expect("/-/all", function (req, res) {
- res.json([])
- })
-
- client.get("http://localhost:1337/-/all", null, function (er) {
- t.ifError(er, "no error")
- t.end()
- })
-})
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 240dc8762..1f28bdfbf 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,4 +1,4 @@
-var tap = require("tap")
+var test = require("tap").test
var server = require("./lib/server.js")
var common = require("./lib/common.js")
@@ -7,7 +7,52 @@ var client = common.freshClient()
var us = require("./fixtures/underscore/1.3.3/cache.json")
var usroot = require("./fixtures/underscore/cache.json")
-tap.test("basic request", function (t) {
+function nop () {}
+
+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 PARAMS = {
+ timeout : TIMEOUT,
+ follow : FOLLOW,
+ staleOk : STALE_OK,
+ auth : AUTH
+}
+
+test("get call contract", function (t) {
+ t.throws(function () {
+ client.get(undefined, PARAMS, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ client.get([], PARAMS, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.get(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.get(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.get(URI, PARAMS, undefined)
+ }, "requires callback")
+
+ t.throws(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) {
res.json(us)
})
@@ -21,15 +66,15 @@ tap.test("basic request", function (t) {
})
t.plan(3)
- client.get("http://localhost:1337/underscore/1.3.3", null, 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", null, function (er, data) {
+ client.get("http://localhost:1337/underscore", PARAMS, function (er, data) {
t.deepEqual(data, usroot)
})
- client.get("http://localhost:1337/@bigco%2funderscore", null, 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 27406b168..dc20a8caf 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
@@ -12,7 +12,7 @@ tap.test("get fails with 403", function (t) {
})
var client = common.freshClient()
- client.conf.set("fetch-retry-mintimeout", 100)
+ client.config.retry.minTimeout = 100
client.get(
"http://localhost:1337/habanero",
{},
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 712f6632f..178a75bb5 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,78 +1,12 @@
-var resolve = require("path").resolve
-
var server = require("./server.js")
var RC = require("../../")
-var toNerfDart = require("../../lib/util/nerf-dart.js")
-
var REGISTRY = "http://localhost:" + server.port
module.exports = {
port : server.port,
registry : REGISTRY,
freshClient : function freshClient(config) {
- config = config || {}
- config.cache = resolve(__dirname, "../fixtures/cache")
- config.registry = REGISTRY
- var container = {
- get: function (k) { return config[k] },
- set: function (k, v) { config[k] = v },
- del: function (k) { delete config[k] },
- getCredentialsByURI: function(uri) {
- var nerfed = toNerfDart(uri)
- var c = {scope : nerfed}
-
- if (this.get(nerfed + ":_authToken")) {
- c.token = this.get(nerfed + ":_authToken")
- // the bearer token is enough, don't confuse things
- return c
- }
-
- if (this.get(nerfed + ":_password")) {
- c.password = new Buffer(this.get(nerfed + ":_password"), "base64").toString("utf8")
- }
-
- if (this.get(nerfed + ":username")) {
- c.username = this.get(nerfed + ":username")
- }
-
- if (this.get(nerfed + ":email")) {
- c.email = this.get(nerfed + ":email")
- }
-
- if (this.get(nerfed + ":always-auth") !== undefined) {
- c.alwaysAuth = this.get(nerfed + ":always-auth")
- }
-
- if (c.username && c.password) {
- c.auth = new Buffer(c.username + ":" + c.password).toString("base64")
- }
-
- return c
- },
- setCredentialsByURI: function (uri, c) {
- var nerfed = toNerfDart(uri)
-
- if (c.token) {
- this.set(nerfed + ":_authToken", c.token, "user")
- this.del(nerfed + ":_password", "user")
- this.del(nerfed + ":username", "user")
- this.del(nerfed + ":email", "user")
- }
- else if (c.username || c.password || c.email) {
- this.del(nerfed + ":_authToken", "user")
-
- var encoded = new Buffer(c.password, "utf8").toString("base64")
- this.set(nerfed + ":_password", encoded, "user")
- this.set(nerfed + ":username", c.username, "user")
- this.set(nerfed + ":email", c.email, "user")
- }
- else {
- throw new Error("No credentials to set.")
- }
- }
- }
-
- var client = new RC(container)
+ var client = new RC(config)
server.log = client.log
client.log.level = "silent"
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 37cfae041..775f7548c 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
@@ -27,7 +27,7 @@ function handler (req, res) {
if (!k) throw Error('unexpected request: ' + req.method + ' ' + req.url)
var fn = server._expect[k].shift()
- if (!fn) throw Error('unexpected request' + req.method + ' ' + req.url)
+ if (!fn) throw Error('unexpected request: ' + req.method + ' ' + req.url)
var remain = (Object.keys(server._expect).reduce(function (s, k) {
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 97838ca44..10b127505 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
@@ -4,19 +4,20 @@ var fs = require("fs")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
-var nerfed = "//localhost:" + server.port + "/:"
+var auth = {
+ username : "username",
+ password : "%1234@asdf%",
+ email : "i@izs.me",
+ alwaysAuth : true
+}
-var configuration = {}
-configuration[nerfed + "username"] = "username"
-configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
-configuration[nerfed + "email"] = "i@izs.me"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
tap.test("publish again", function (t) {
// not really a tarball, but doesn't matter
- var tarball = require.resolve("../package.json")
- var pd = fs.readFileSync(tarball, "base64")
+ var bodyPath = require.resolve("../package.json")
+ var tarball = fs.createReadStream(bodyPath, "base64")
+ var pd = fs.readFileSync(bodyPath, "base64")
var pkg = require("../package.json")
var lastTime = null
@@ -74,7 +75,13 @@ tap.test("publish again", function (t) {
})
pkg.name = "@npm/npm-registry-client"
- client.publish("http://localhost:1337/", pkg, tarball, function (er, data) {
+
+ var params = {
+ metadata : pkg,
+ body : tarball,
+ auth : auth
+ }
+ 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 39c368fd3..9c547ca01 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
@@ -4,19 +4,20 @@ var fs = require("fs")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
-var nerfed = "//localhost:" + server.port + "/:"
+var auth = {
+ username : "username",
+ password : "%1234@asdf%",
+ email : "i@izs.me",
+ alwaysAuth : true
+}
-var configuration = {}
-configuration[nerfed + "username"] = "username"
-configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
-configuration[nerfed + "email"] = "i@izs.me"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
tap.test("publish again", function (t) {
// not really a tarball, but doesn't matter
- var tarball = require.resolve("../package.json")
- var pd = fs.readFileSync(tarball, "base64")
+ var bodyPath = require.resolve("../package.json")
+ var tarball = fs.createReadStream(bodyPath, "base64")
+ var pd = fs.readFileSync(bodyPath, "base64")
var pkg = require("../package.json")
var lastTime = null
@@ -73,7 +74,12 @@ tap.test("publish again", function (t) {
})
})
- client.publish("http://localhost:1337/", pkg, tarball, function (er, data) {
+ var params = {
+ metadata : pkg,
+ body : tarball,
+ auth : auth
+ }
+ 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
new file mode 100644
index 000000000..cce6fcbc7
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js
@@ -0,0 +1,41 @@
+var createReadStream = require("fs").createReadStream
+
+var test = require("tap").test
+
+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")
+// 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 PARAMS = {
+ metadata : METADATA,
+ body : BODY,
+ auth : AUTH
+}
+
+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 })
+ })
+
+ client.publish(URI, PARAMS, function (er, data) {
+ 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 e1bb7dd1e..70ff1e93f 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
@@ -5,17 +5,15 @@ var fs = require("fs")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
-var nerfed = "//localhost:" + server.port + "/:"
+var auth = { token : "of-glad-tidings" }
-var configuration = {}
-configuration[nerfed + "_authToken"] = "of-glad-tidings"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
tap.test("publish", function (t) {
// not really a tarball, but doesn't matter
- var tarball = require.resolve("../package.json")
- var pd = fs.readFileSync(tarball, "base64")
+ 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"
@@ -44,7 +42,12 @@ tap.test("publish", function (t) {
})
})
- client.publish(common.registry, pkg, tarball, function (er, data) {
+ var params = {
+ metadata : pkg,
+ body : tarball,
+ auth : auth
+ }
+ client.publish(common.registry, 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-scoped.js b/deps/npm/node_modules/npm-registry-client/test/publish-scoped.js
index b5dea3649..b21e33f41 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
@@ -5,21 +5,21 @@ var fs = require("fs")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
-var nerfed = "//localhost:" + server.port + "/:"
+var auth = {
+ username : "username",
+ password : "%1234@asdf%",
+ email : "ogd@aoaioxxysz.net"
+}
-var configuration = {}
-configuration[nerfed + "username"] = "username"
-configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
-configuration[nerfed + "email"] = "ogd@aoaioxxysz.net"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
var _auth = new Buffer("username:%1234@asdf%").toString("base64")
tap.test("publish", function (t) {
// not really a tarball, but doesn't matter
- var tarball = require.resolve("../package.json")
- var pd = fs.readFileSync(tarball, "base64")
+ 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"
@@ -49,7 +49,12 @@ tap.test("publish", function (t) {
})
})
- client.publish(common.registry, pkg, tarball, function (er, data) {
+ var params = {
+ metadata : pkg,
+ body : tarball,
+ auth : auth
+ }
+ client.publish(common.registry, 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.js b/deps/npm/node_modules/npm-registry-client/test/publish.js
index 2d76dfae2..9292a94c7 100644
--- a/deps/npm/node_modules/npm-registry-client/test/publish.js
+++ b/deps/npm/node_modules/npm-registry-client/test/publish.js
@@ -1,24 +1,145 @@
-var tap = require("tap")
+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 client = common.freshClient()
-var nerfed = "//localhost:" + server.port + "/:"
+function nop () {}
-var configuration = {}
-configuration[nerfed + "username"] = "username"
-configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
-configuration[nerfed + "email"] = "i@izs.me"
+var URI = "http://localhost:1337/"
+var USERNAME = "username"
+var PASSWORD = "%1234@asdf%"
+var EMAIL = "i@izs.me"
+var METADATA = require("../package.json")
+// 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 PARAMS = {
+ metadata : METADATA,
+ body : BODY,
+ auth : AUTH
+}
-var client = common.freshClient(configuration)
+test("publish call contract", function (t) {
+ t.throws(function () {
+ client.publish(undefined, PARAMS, nop)
+ }, "requires a URI")
-tap.test("publish", function (t) {
- // not really a tarball, but doesn't matter
- var tarball = require.resolve("../package.json")
- var pd = fs.readFileSync(tarball, "base64")
- var pkg = require("../package.json")
+ t.throws(function () {
+ client.publish([], PARAMS, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.publish(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.publish(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.publish(URI, PARAMS, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ client.publish(URI, PARAMS, "callback")
+ }, "callback must be function")
+
+ t.throws(
+ function () {
+ var params = {
+ body : BODY,
+ auth : AUTH
+ }
+ client.publish(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass package metadata to publish" },
+ "params must include metadata for package"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ metadata : METADATA,
+ auth : AUTH
+ }
+ client.publish(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass package body to publish" },
+ "params must include body of package to publish"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ metadata : METADATA,
+ body : BODY
+ }
+ client.publish(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass auth to publish" },
+ "params must include auth"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ metadata : -1,
+ body : BODY,
+ auth : AUTH
+ }
+ client.publish(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass package metadata to publish" },
+ "metadata must be object"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ metadata : METADATA,
+ body : -1,
+ auth : AUTH
+ }
+ client.publish(URI, params, nop)
+ },
+ {
+ name : "AssertionError",
+ message : "package body passed to publish must be a stream"
+ },
+ "body must be a Stream"
+ )
+
+ t.test("malformed semver in publish", function (t) {
+ var metadata = JSON.parse(JSON.stringify(METADATA))
+ metadata.version = "%!@#$"
+ var params = {
+ metadata : metadata,
+ message : BODY,
+ auth : AUTH
+ }
+ client.publish(URI, params, function (err) {
+ t.equal(
+ err && err.message,
+ "invalid semver: %!@#$",
+ "got expected semver validation failure"
+ )
+ t.end()
+ })
+ })
+
+ t.end()
+})
+
+test("publish", function (t) {
+ var pd = fs.readFileSync(BODY_PATH, "base64")
server.expect("/npm-registry-client", function (req, res) {
t.equal(req.method, "PUT")
@@ -31,22 +152,26 @@ tap.test("publish", function (t) {
req.on("end", function () {
var o = JSON.parse(b)
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" } ])
- t.same(o.maintainers, o.versions[pkg.version].maintainers)
- var att = o._attachments[ pkg.name + "-" + pkg.version + ".tgz" ]
+ t.equal(o["dist-tags"].latest, METADATA.version)
+ t.has(o.versions[METADATA.version], METADATA)
+ 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"]
t.same(att.data, pd)
+
var hash = crypto.createHash("sha1").update(pd, "base64").digest("hex")
- t.equal(o.versions[pkg.version].dist.shasum, hash)
+ t.equal(o.versions[METADATA.version].dist.shasum, hash)
+
res.statusCode = 201
- res.json({created:true})
+ res.json({ created : true })
})
})
- client.publish("http://localhost:1337/", pkg, tarball, function (er, data) {
+ 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 b7ead8795..ba3814349 100644
--- a/deps/npm/node_modules/npm-registry-client/test/redirects.js
+++ b/deps/npm/node_modules/npm-registry-client/test/redirects.js
@@ -31,18 +31,21 @@ tap.test("basic request", function (t) {
res.json(pkg)
})
- t.plan(2);
-
- client.get("http://localhost:1337/-/some-package/1.2.3", {
- follow: false
- }, function(er, data) {
- t.assert(er, "Error must be set");
- })
-
- client.get("http://localhost:1337/-/some-package/1.2.3", {
- follow: true
- }, function(er, data) {
- t.deepEqual(data, pkg)
- })
+ t.plan(2)
+
+ client.get(
+ "http://localhost:1337/-/some-package/1.2.3",
+ { follow : false },
+ function (er) {
+ t.ok(er, "Error must be set")
+ }
+ )
+
+ client.get(
+ "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 1085bfaca..497a6b8c0 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
@@ -4,17 +4,19 @@ var tap = require("tap")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
var client = common.freshClient({
- "fetch-retries" : 1,
- "fetch-retry-mintimeout" : 10,
- "fetch-retry-maxtimeout" : 100
+ retry : {
+ count : 1,
+ minTimeout : 10,
+ maxTimeout : 100
+ }
})
-var TEST_URL = "http://localhost:1337/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) {
@@ -28,23 +30,26 @@ zlib.gzip(JSON.stringify(pkg), function (err, pkgGzip) {
res.end(pkgGzip)
})
- client.get(TEST_URL, null, function (er, data) {
+ client.get(TEST_URL, {}, function (er, data) {
if (er) throw er
- t.deepEqual(data, pkg)
+ t.deepEqual(data, pkg, "some-package-gzip version 1.2.3")
t.end()
})
})
tap.test("request wrong gzip package content", function (t) {
- server.expect("GET", "/some-package-gzip-error/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"))
- })
-
- client.get(TEST_URL, null, function (er) {
- t.ok(er)
+ // will retry 3 times
+ for (var i = 0; i < 3; i++) {
+ server.expect("GET", "/some-package-gzip-error/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"))
+ })
+ }
+
+ client.get(TEST_URL, {}, function (er) {
+ 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
new file mode 100644
index 000000000..cdc4b75f5
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/request.js
@@ -0,0 +1,252 @@
+var Readable = require("stream").Readable
+var inherits = require("util").inherits
+
+var test = require("tap").test
+var concat = require("concat-stream")
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function OneA() {
+ Readable.call(this)
+ 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 PARAMS = { auth : AUTH }
+
+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"
+ )
+
+ t.throws(
+ function () {
+ client.request([], PARAMS, nop)
+ },
+ { 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"
+ )
+
+ t.throws(
+ function () {
+ client.request(URI, "", nop)
+ },
+ { 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"
+ )
+
+ t.throws(
+ function () {
+ client.request(URI, PARAMS, "callback")
+ },
+ { name : "AssertionError", message : "must pass callback to request" },
+ "callback must be function"
+ )
+
+ t.end()
+})
+
+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")
+
+ req.pipe(concat(function (d) {
+ t.notOk(d.toString("utf7"), "no data included in request")
+
+ res.statusCode = 200
+ 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")
+
+ res.statusCode = 200
+ res.json({ fetched : "last-modified" })
+ })
+
+ 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" })
+ })
+
+ 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" })
+ })
+
+ server.expect("PUT", "/body-stream", function (req, res) {
+ req.pipe(concat(function (d) {
+ t.equal(d.toString("utf8"), "A", "streamed expected data")
+
+ res.statusCode = 200
+ res.json({ put : "stream" })
+ }))
+ })
+
+ server.expect("PUT", "/body-buffer", function (req, res) {
+ req.pipe(concat(function (d) {
+ t.equal(d.toString("utf8"), "hi", "streamed expected data")
+
+ res.statusCode = 200
+ res.json({ put : "buffer" })
+ }))
+ })
+
+ server.expect("PUT", "/body-string", function (req, res) {
+ req.pipe(concat(function (d) {
+ t.equal(d.toString("utf8"), "erp", "streamed expected data")
+
+ res.statusCode = 200
+ res.json({ put : "string" })
+ }))
+ })
+
+ server.expect("PUT", "/body-object", function (req, res) {
+ req.pipe(concat(function (d) {
+ t.equal(d.toString("utf8"), '["tricky"]', "streamed expected data")
+
+ res.statusCode = 200
+ res.json({ put : "object" })
+ }))
+ })
+
+ 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" })
+ }))
+ })
+
+ server.expect("GET", "/body-error-object", function (req, res) {
+ req.pipe(concat(function () {
+ res.statusCode = 200
+ res.json({ "error" : {} })
+ }))
+ })
+
+ var defaults = {}
+ client.request(
+ 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")
+ }
+ )
+
+ 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 postEtagged = {
+ 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")
+ })
+
+ var putStream = {
+ 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")
+ })
+
+ var putBuffer = {
+ 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")
+ })
+
+ var putString = {
+ 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")
+ })
+
+ var putObject = {
+ 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-error-string", defaults, function (er) {
+ t.equal(
+ er && er.message,
+ "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")
+ })
+})
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 f30f68080..0f0fa3667 100644
--- a/deps/npm/node_modules/npm-registry-client/test/retries.js
+++ b/deps/npm/node_modules/npm-registry-client/test/retries.js
@@ -3,9 +3,11 @@ var tap = require("tap")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
var client = common.freshClient({
- "fetch-retries": 6,
- "fetch-retry-mintimeout": 10,
- "fetch-retry-maxtimeout": 100
+ retry : {
+ retries : 6,
+ minTimeout : 10,
+ maxTimeout : 100
+ }
})
var pkg = {
@@ -41,7 +43,7 @@ tap.test("create new user account", function (t) {
res.json(pkg)
})
- client.get("http://localhost:1337/some-package/1.2.3", null, 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 43c8888ef..0d899ee50 100644
--- a/deps/npm/node_modules/npm-registry-client/test/star.js
+++ b/deps/npm/node_modules/npm-registry-client/test/star.js
@@ -1,22 +1,67 @@
-var tap = require("tap")
-
+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 DEP_USER = "username"
+function nop () {}
-var nerfed = "//localhost:" + server.port + "/:"
+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 configuration = {}
-configuration[nerfed + "username"] = DEP_USER
-configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
-configuration[nerfed + "email"] = "i@izs.me"
+test("star call contract", function (t) {
+ t.throws(function () {
+ client.star(undefined, PARAMS, nop)
+ }, "requires a URI")
-var client = common.freshClient(configuration)
+ t.throws(function () {
+ client.star([], PARAMS, nop)
+ }, "requires URI to be a string")
-var cache = require("./fixtures/underscore/cache.json")
+ t.throws(function () {
+ client.star(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.star(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.star(URI, PARAMS, undefined)
+ }, "requires callback")
-tap.test("star a package", function (t) {
+ t.throws(function () {
+ client.star(URI, PARAMS, "callback")
+ }, "callback must be function")
+
+ t.throws(
+ function () {
+ var params = {
+ starred : STARRED
+ }
+ client.star(URI, params, nop)
+ },
+ { 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")
@@ -35,7 +80,7 @@ tap.test("star a package", function (t) {
req.on("end", function () {
var updated = JSON.parse(b)
- var already = [
+ var already = [
"vesln", "mvolkmann", "lancehunt", "mikl", "linus", "vasc", "bat",
"dmalam", "mbrevoort", "danielr", "rsimoes", "thlorenz"
]
@@ -46,17 +91,91 @@ tap.test("star a package", function (t) {
current + " still likes this package"
)
}
- t.ok(updated.users[DEP_USER], "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 })
})
})
- client.star("http://localhost:1337/underscore", true, function (error, data) {
- t.ifError(error, "no errors")
+ 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")
t.end()
})
})
+
+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")
+ }
+ })
+ .put("/underscore")
+ .reply(200)
+
+ var params = {
+ starred : STARRED,
+ auth : AUTH
+ }
+
+ 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"
+ }
+ })
+ .get("/underscore?write=true")
+ .reply(200, {})
+
+ var getUser = nock("http://localhost:1010", {
+ reqheaders : {
+ authorization : "Bearer foo"
+ }
+ })
+ .get("/-/whoami")
+ .reply(200, {
+ username : "bcoe"
+ })
+
+ var starPut = nock("http://localhost:1010", {
+ reqheaders : {
+ authorization : "Bearer foo"
+ }
+ })
+ .put("/underscore")
+ .reply(200)
+
+ var params = {
+ starred : STARRED,
+ auth : {
+ token : "foo"
+ }
+ }
+ client.star("http://localhost:1010/underscore", params, function (er) {
+ t.ifError(er, "starred without error")
+ starGet.done()
+ starPut.done()
+ getUser.done()
+ t.end()
+ })
+})
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 28f8a98d7..cd1c28686 100644
--- a/deps/npm/node_modules/npm-registry-client/test/stars.js
+++ b/deps/npm/node_modules/npm-registry-client/test/stars.js
@@ -1,25 +1,79 @@
-var tap = require("tap")
+var test = require("tap").test
var server = require("./lib/server.js")
var common = require("./lib/common.js")
var client = common.freshClient()
-var users = [
+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 PARAMS = {
+ username : USERNAME,
+ auth : AUTH
+}
+var USERS = [
"benjamincoe",
"seldo",
"ceejbot"
]
-tap.test("get the URL for the bugs page on a package", function (t) {
+test("stars call contract", function (t) {
+ t.throws(function () {
+ client.stars(undefined, PARAMS, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ client.stars([], PARAMS, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.stars(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.stars(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.stars(URI, PARAMS, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ client.stars(URI, PARAMS, "callback")
+ }, "callback must be function")
+
+ 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")
+ t.end()
+ })
+ })
+
+ 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")
- res.json(users)
+ res.json(USERS)
})
- client.stars("http://localhost:1337/", "sample", function (error, info) {
- t.ifError(error, "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 755156930..687df5d7d 100644
--- a/deps/npm/node_modules/npm-registry-client/test/tag.js
+++ b/deps/npm/node_modules/npm-registry-client/test/tag.js
@@ -1,18 +1,93 @@
-var tap = require("tap")
+var test = require("tap").test
var server = require("./lib/server.js")
var common = require("./lib/common.js")
+var client = common.freshClient()
-var nerfed = "//localhost:" + server.port + "/:"
+function nop () {}
-var configuration = {}
-configuration[nerfed + "username"] = "username"
-configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
-configuration[nerfed + "email"] = "i@izs.me"
+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
+}
-var client = common.freshClient(configuration)
+test("tag call contract", function (t) {
+ t.throws(function () {
+ client.tag(undefined, AUTH, nop)
+ }, "requires a URI")
-tap.test("tag a package", function (t) {
+ t.throws(function () {
+ client.tag([], AUTH, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.tag(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.tag(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.tag(URI, AUTH, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ client.tag(URI, AUTH, "callback")
+ }, "callback must be function")
+
+ t.throws(
+ function () {
+ var params = {
+ tag : TAG,
+ auth : AUTH
+ }
+ client.tag(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass version to tag" },
+ "auth must include username"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ version : VERSION,
+ auth : AUTH
+ }
+ client.tag(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass tag name to tag" },
+ "auth must include username"
+ )
+
+ t.throws(
+ function () {
+ var params = {
+ version : VERSION,
+ tag : TAG
+ }
+ client.tag(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass auth to tag" },
+ "auth must include username"
+ )
+
+ t.end()
+})
+
+test("tag a package", function (t) {
server.expect("PUT", "/underscore/not-lodash", function (req, res) {
t.equal(req.method, "PUT")
@@ -25,14 +100,14 @@ tap.test("tag a package", function (t) {
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})
})
})
- client.tag("http://localhost:1337/underscore", {"1.3.2":{}}, "not-lodash", function (error, data) {
+ client.tag(URI, PARAMS, function (error, data) {
t.ifError(error, "no errors")
t.ok(data.tagged, "was tagged")
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 0e5cb8606..88ee13f37 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
@@ -2,18 +2,22 @@ var tap = require("tap")
var server = require("./lib/server.js")
var common = require("./lib/common.js")
-
-var nerfed = "//localhost:" + server.port + "/:"
-
-var configuration = {}
-configuration[nerfed + "_authToken"] = "of-glad-tidings"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
var cache = require("./fixtures/@npm/npm-registry-client/cache.json")
-var REV = "/-rev/213-0a1049cf56172b7d9a1184742c6477b9"
+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
+}
tap.test("unpublish a package", function (t) {
server.expect("GET", "/@npm%2fnpm-registry-client?write=true", function (req, res) {
@@ -39,20 +43,20 @@ tap.test("unpublish a package", function (t) {
res.json(cache)
})
- server.expect("GET", "/@npm%2fnpm-registry-client", function (req, res) {
+ server.expect("GET", PACKAGE, function (req, res) {
t.equal(req.method, "GET")
res.json(cache)
})
- server.expect("DELETE", "/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-" + VERSION + ".tgz" + REV, function (req, res) {
+ server.expect("DELETE", PACKAGE+"/-"+PACKAGE+"-"+VERSION+".tgz"+REV, function (req, res) {
t.equal(req.method, "DELETE")
res.json({unpublished:true})
})
- client.unpublish("http://localhost:1337/@npm%2fnpm-registry-client", VERSION, function (error) {
- t.ifError(error, "no errors")
+ client.unpublish(URI, PARAMS, function (er) {
+ 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 7a60431fa..edc42699e 100644
--- a/deps/npm/node_modules/npm-registry-client/test/unpublish.js
+++ b/deps/npm/node_modules/npm-registry-client/test/unpublish.js
@@ -1,21 +1,65 @@
-var tap = require("tap")
+var test = require("tap").test
var server = require("./lib/server.js")
var common = require("./lib/common.js")
-
-var nerfed = "//localhost:" + server.port + "/:"
-
-var configuration = {}
-configuration[nerfed + "_authToken"] = "of-glad-tidings"
-
-var client = common.freshClient(configuration)
+var client = common.freshClient()
var cache = require("./fixtures/underscore/cache.json")
-var REV = "/-rev/72-47f2986bfd8e8b55068b204588bbf484"
-var VERSION = "1.3.2"
+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 PARAMS = {
+ version : VERSION,
+ auth : AUTH
+}
+
+test("unpublish call contract", function (t) {
+ t.throws(function () {
+ client.unpublish(undefined, AUTH, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ client.unpublish([], AUTH, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.unpublish(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.unpublish(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.unpublish(URI, AUTH, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ client.unpublish(URI, AUTH, "callback")
+ }, "callback must be function")
+
+ t.throws(
+ function () {
+ var params = {
+ version : VERSION
+ }
+ client.unpublish(URI, params, nop)
+ },
+ { name : "AssertionError", message : "must pass auth to unpublish" },
+ "must pass auth to unpublish"
+ )
+
+ t.end()
+})
-tap.test("unpublish a package", function (t) {
+test("unpublish a package", function (t) {
server.expect("GET", "/underscore?write=true", function (req, res) {
t.equal(req.method, "GET")
@@ -51,7 +95,7 @@ tap.test("unpublish a package", function (t) {
res.json({unpublished:true})
})
- client.unpublish("http://localhost:1337/underscore", VERSION, function (error) {
+ client.unpublish(URI, PARAMS, function (error) {
t.ifError(error, "no errors")
t.end()
diff --git a/deps/npm/node_modules/npm-registry-client/test/upload.js b/deps/npm/node_modules/npm-registry-client/test/upload.js
deleted file mode 100644
index fa197e368..000000000
--- a/deps/npm/node_modules/npm-registry-client/test/upload.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var tap = require("tap")
-var Readable = require("stream").Readable
-var inherits = require("util").inherits
-
-var common = require("./lib/common.js")
-var server = require("./lib/server.js")
-
-var cache = require("./fixtures/underscore/cache.json")
-
-var nerfed = "//localhost:" + server.port + "/:"
-
-var configuration = {}
-configuration[nerfed + "_authToken"] = "of-glad-tidings"
-
-var client = common.freshClient(configuration)
-
-function OneA() {
- Readable.call(this)
- this.push("A")
- this.push(null)
-}
-inherits(OneA, Readable)
-
-tap.test("uploading a tarball", function (t) {
- server.expect("PUT", "/underscore", function (req, res) {
- t.equal(req.method, "PUT")
-
- res.json(cache)
- })
-
- client.upload("http://localhost:1337/underscore", new OneA(), "daedabeefa", true, function (error) {
- 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 f9c817684..ccb173a09 100644
--- a/deps/npm/node_modules/npm-registry-client/test/whoami.js
+++ b/deps/npm/node_modules/npm-registry-client/test/whoami.js
@@ -1,18 +1,54 @@
-var tap = require("tap")
+var test = require("tap").test
var server = require("./lib/server.js")
var common = require("./lib/common.js")
+var client = common.freshClient()
-var nerfed = "//localhost:" + server.port + "/:"
+function nop () {}
-var configuration = {}
-configuration[nerfed + "_authToken"] = "not-bad-meaning-bad-but-bad-meaning-wombat"
+var WHOIAM = "wombat"
+var TOKEN = "not-bad-meaning-bad-but-bad-meaning-wombat"
+var AUTH = { token : TOKEN }
+var PARAMS = { auth : AUTH }
-var client = common.freshClient(configuration)
+test("whoami call contract", function (t) {
+ t.throws(function () {
+ client.whoami(undefined, AUTH, nop)
+ }, "requires a URI")
-var WHOIAM = "wombat"
+ t.throws(function () {
+ client.whoami([], AUTH, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ client.whoami(common.registry, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ client.whoami(common.registry, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ client.whoami(common.registry, AUTH, undefined)
+ }, "requires callback")
+
+ t.throws(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"
+ )
+
+ t.end()
+})
-tap.test("whoami", function (t) {
+test("whoami", function (t) {
server.expect("GET", "/whoami", function (req, res) {
t.equal(req.method, "GET")
// only available for token-based auth for now
@@ -21,7 +57,7 @@ tap.test("whoami", function (t) {
res.json({username : WHOIAM})
})
- client.whoami(common.registry, function (error, wombat) {
+ client.whoami(common.registry, PARAMS, function (error, wombat) {
t.ifError(error, "no errors")
t.equal(wombat, WHOIAM, "im a wombat")
diff --git a/deps/npm/node_modules/read-installed/node_modules/debuglog/package.json b/deps/npm/node_modules/read-installed/node_modules/debuglog/package.json
index 396662562..4a8257c98 100644
--- a/deps/npm/node_modules/read-installed/node_modules/debuglog/package.json
+++ b/deps/npm/node_modules/read-installed/node_modules/debuglog/package.json
@@ -27,7 +27,7 @@
"shasum": "aa24ffb9ac3df9a2351837cfb2d279360cd78492",
"tarball": "http://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz"
},
- "_from": "debuglog@>=1.0.1-0 <2.0.0-0",
+ "_from": "debuglog@>=1.0.1 <2.0.0",
"_npmVersion": "1.4.3",
"_npmUser": {
"name": "octet",
@@ -41,5 +41,6 @@
],
"directories": {},
"_shasum": "aa24ffb9ac3df9a2351837cfb2d279360cd78492",
- "_resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
}
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 000000000..ba3315042
--- /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-installed/node_modules/readdir-scoped-modules/package.json b/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/package.json
index 84b91e75a..c33c391c2 100644
--- a/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/package.json
+++ b/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/package.json
@@ -1,6 +1,6 @@
{
"name": "readdir-scoped-modules",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "Like `fs.readdir` but handling `@org/module` dirs as if they were a single entry.",
"main": "readdir.js",
"directories": {
@@ -9,6 +9,7 @@
"dependencies": {
"debuglog": "^1.0.1",
"dezalgo": "^1.0.0",
+ "graceful-fs": "^3.0.4",
"once": "^1.3.0"
},
"devDependencies": {
@@ -31,24 +32,10 @@
"url": "https://github.com/npm/readdir-scoped-modules/issues"
},
"homepage": "https://github.com/npm/readdir-scoped-modules",
- "gitHead": "35a4a7a2325d12ed25ed322cd61f976b740f7fb7",
- "_id": "readdir-scoped-modules@1.0.0",
- "_shasum": "e939de969b38b3e7dfaa14fbcfe7a2fd15a4ea37",
- "_from": "readdir-scoped-modules@>=1.0.0-0 <2.0.0-0",
- "_npmVersion": "2.0.0-alpha.6.0",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "dist": {
- "shasum": "e939de969b38b3e7dfaa14fbcfe7a2fd15a4ea37",
- "tarball": "http://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.0.tgz"
- },
- "_resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.0.tgz"
+ "readme": "# readdir-scoped-modules\n\nLike `fs.readdir` but handling `@org/module` dirs as if they were\na single entry.\n\nUsed by npm.\n\n## USAGE\n\n```javascript\nvar readdir = require('readdir-scoped-modules')\n\nreaddir('node_modules', function (er, entries) {\n // entries will be something like\n // ['a', '@org/foo', '@org/bar']\n})\n```\n",
+ "readmeFilename": "README.md",
+ "gitHead": "451d38946c5b6b6c0db33a890f33536a11ed79f7",
+ "_id": "readdir-scoped-modules@1.0.1",
+ "_shasum": "5c2a77f3e08250a8fddf53fa58cdc17900b808b9",
+ "_from": "readdir-scoped-modules@>=1.0.0 <2.0.0"
}
diff --git a/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/readdir.js b/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/readdir.js
index 91978a739..efbe5526d 100644
--- a/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/readdir.js
+++ b/deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/readdir.js
@@ -1,4 +1,4 @@
-var fs = require ('fs')
+var fs = require ('graceful-fs')
var dz = require ('dezalgo')
var once = require ('once')
var path = require ('path')
diff --git a/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json b/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
index 0bab48d32..942b78604 100644
--- a/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
+++ b/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
@@ -22,7 +22,7 @@
"shasum": "bb703b79480293ddcdcfb3c6a9fea20f483415bc",
"tarball": "http://registry.npmjs.org/util-extend/-/util-extend-1.0.1.tgz"
},
- "_from": "util-extend@>=1.0.1-0 <2.0.0-0",
+ "_from": "util-extend@>=1.0.1 <2.0.0",
"_npmVersion": "1.3.4",
"_npmUser": {
"name": "isaacs",
@@ -36,5 +36,6 @@
],
"directories": {},
"_shasum": "bb703b79480293ddcdcfb3c6a9fea20f483415bc",
- "_resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.1.tgz",
+ "homepage": "https://github.com/isaacs/util-extend"
}
diff --git a/deps/npm/node_modules/read-installed/package.json b/deps/npm/node_modules/read-installed/package.json
index 2c5022553..145205fcc 100644
--- a/deps/npm/node_modules/read-installed/package.json
+++ b/deps/npm/node_modules/read-installed/package.json
@@ -1,7 +1,7 @@
{
"name": "read-installed",
"description": "Read all the installed packages in a folder, and return a tree structure with all the data.",
- "version": "3.1.3",
+ "version": "3.1.5",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/read-installed"
@@ -33,33 +33,14 @@
"rimraf": "^2.2.8",
"tap": "~0.4.8"
},
- "gitHead": "50e45af7581b1a879c62146fafbfa1b92842f7df",
+ "readme": "# read-installed\n\nRead all the installed packages in a folder, and return a tree\nstructure with all the data.\n\nnpm uses this.\n\n## 2.0.0\n\nBreaking changes in `2.0.0`:\n\nThe second argument is now an `Object` that contains the following keys:\n\n * `depth` optional, defaults to Infinity\n * `log` optional log Function\n * `dev` optional, default false, set to true to include devDependencies\n\n## Usage\n\n```javascript\nvar readInstalled = require(\"read-installed\")\n// optional options\nvar options = { dev: false, log: fn, depth: 2 }\nreadInstalled(folder, options, function (er, data) {\n ...\n})\n```\n",
+ "readmeFilename": "README.md",
+ "gitHead": "577c3f3f4f1e435f9bd944b8f99ce3f7552709ef",
"bugs": {
"url": "https://github.com/isaacs/read-installed/issues"
},
"homepage": "https://github.com/isaacs/read-installed",
- "_id": "read-installed@3.1.3",
- "_shasum": "c09092a13c2117f22842cad16804f3b059129d11",
- "_from": "read-installed@>=3.1.2-0 <3.2.0-0",
- "_npmVersion": "2.0.0-beta.3",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- {
- "name": "othiym23",
- "email": "ogd@aoaioxxysz.net"
- }
- ],
- "dist": {
- "shasum": "c09092a13c2117f22842cad16804f3b059129d11",
- "tarball": "http://registry.npmjs.org/read-installed/-/read-installed-3.1.3.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/read-installed/-/read-installed-3.1.3.tgz"
+ "_id": "read-installed@3.1.5",
+ "_shasum": "4ae36081afd3e2204dc2e279807aaa52c30c8c0c",
+ "_from": "read-installed@>=3.1.5 <3.2.0"
}
diff --git a/deps/npm/node_modules/read-installed/read-installed.js b/deps/npm/node_modules/read-installed/read-installed.js
index a92ed3fbe..2e299445b 100644
--- a/deps/npm/node_modules/read-installed/read-installed.js
+++ b/deps/npm/node_modules/read-installed/read-installed.js
@@ -345,7 +345,7 @@ function unmarkExtraneous (obj, opts) {
obj.extraneous = false
- var deps = obj._dependencies
+ var deps = obj._dependencies || []
if (opts.dev && obj.devDependencies && (obj.root || obj.link)) {
Object.keys(obj.devDependencies).forEach(function (k) {
deps[k] = obj.devDependencies[k]
diff --git a/deps/npm/node_modules/read-installed/test/empty.js b/deps/npm/node_modules/read-installed/test/empty.js
new file mode 100644
index 000000000..09ace074f
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/empty.js
@@ -0,0 +1,16 @@
+var readInstalled = require("../read-installed.js");
+var test = require("tap").test;
+var path = require("path");
+
+test("Handle bad path", function (t) {
+ readInstalled(path.join(__dirname, "../unknown"), {
+ dev: true,
+ log: console.error
+ }, function (er, map) {
+ t.notOk(er, "er should be null");
+ t.ok(map, "map should be data");
+ t.equal(Object.keys(map.dependencies).length, 0, "Dependencies should have no keys");
+ if (er) return console.error(er.stack || er.message);
+ t.end();
+ });
+});
diff --git a/deps/npm/node_modules/readable-stream/LICENSE b/deps/npm/node_modules/readable-stream/LICENSE
index 0c44ae716..e3d4e695a 100644
--- a/deps/npm/node_modules/readable-stream/LICENSE
+++ b/deps/npm/node_modules/readable-stream/LICENSE
@@ -1,27 +1,18 @@
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+Copyright Joyent, Inc. and other Node contributors. 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 BSD License
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+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/readable-stream/README.md b/deps/npm/node_modules/readable-stream/README.md
index 34c118979..3fb3e8023 100644
--- a/deps/npm/node_modules/readable-stream/README.md
+++ b/deps/npm/node_modules/readable-stream/README.md
@@ -2,8 +2,8 @@
***Node-core streams for userland***
-[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true)](https://nodei.co/npm/readable-stream/)
-[![NPM](https://nodei.co/npm-dl/readable-stream.png)](https://nodei.co/npm/readable-stream/)
+[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/)
+[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/)
This package is a mirror of the Streams2 and Streams3 implementations in Node-core.
diff --git a/deps/npm/node_modules/readable-stream/package.json b/deps/npm/node_modules/readable-stream/package.json
index 2fbd99751..8d32bee91 100644
--- a/deps/npm/node_modules/readable-stream/package.json
+++ b/deps/npm/node_modules/readable-stream/package.json
@@ -1,6 +1,6 @@
{
"name": "readable-stream",
- "version": "1.0.32",
+ "version": "1.0.33",
"description": "Streams2, a user-land copy of the stream library from Node.js v0.10.x",
"main": "readable.js",
"dependencies": {
@@ -33,16 +33,15 @@
"url": "http://blog.izs.me/"
},
"license": "MIT",
- "gitHead": "2024ad52b1e475465488b4ad39eb41d067ffcbb9",
+ "gitHead": "0bf97a117c5646556548966409ebc57a6dda2638",
"bugs": {
"url": "https://github.com/isaacs/readable-stream/issues"
},
"homepage": "https://github.com/isaacs/readable-stream",
- "_id": "readable-stream@1.0.32",
- "_shasum": "6b44a88ba984cd0ec0834ae7d59a47c39aef48ec",
- "_from": "readable-stream@*",
- "_npmVersion": "2.0.2",
- "_nodeVersion": "0.10.31",
+ "_id": "readable-stream@1.0.33",
+ "_shasum": "3a360dd66c1b1d7fd4705389860eda1d0f61126c",
+ "_from": "readable-stream@>=1.0.33 <1.1.0",
+ "_npmVersion": "1.4.28",
"_npmUser": {
"name": "rvagg",
"email": "rod@vagg.org"
@@ -62,10 +61,10 @@
}
],
"dist": {
- "shasum": "6b44a88ba984cd0ec0834ae7d59a47c39aef48ec",
- "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.32.tgz"
+ "shasum": "3a360dd66c1b1d7fd4705389860eda1d0f61126c",
+ "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.32.tgz",
+ "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/readable-stream/readable.js b/deps/npm/node_modules/readable-stream/readable.js
index 4d1ddfc73..8b5337b5c 100644
--- a/deps/npm/node_modules/readable-stream/readable.js
+++ b/deps/npm/node_modules/readable-stream/readable.js
@@ -1,4 +1,6 @@
+var Stream = require('stream'); // hack to fix a circular dependency issue when used with browserify
exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = Stream;
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
diff --git a/deps/npm/node_modules/realize-package-specifier/index.js b/deps/npm/node_modules/realize-package-specifier/index.js
index 261ad6630..30214b2da 100644
--- a/deps/npm/node_modules/realize-package-specifier/index.js
+++ b/deps/npm/node_modules/realize-package-specifier/index.js
@@ -14,6 +14,7 @@ module.exports = function (spec, where, cb) {
catch (e) {
return cb(e)
}
+ if ((dep.type == "range" || dep.type == "version") && dep.name != dep.raw) return cb(null, dep)
var specpath = dep.type == "local"
? path.resolve(where, dep.spec)
: path.resolve(dep.rawSpec? dep.rawSpec: dep.name)
diff --git a/deps/npm/node_modules/realize-package-specifier/package.json b/deps/npm/node_modules/realize-package-specifier/package.json
index 536457637..b04c49a35 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.2.0",
+ "version": "1.3.0",
"description": "Like npm-package-arg, but more so, producing full file paths and differentiating local tar and directory sources.",
"main": "index.js",
"scripts": {
@@ -25,29 +25,13 @@
"require-inject": "^1.1.0",
"tap": "^0.4.12"
},
- "gitHead": "39016343d5bd5572ab39374323e9588e54985910",
+ "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",
"bugs": {
"url": "https://github.com/npm/realize-package-specifier/issues"
},
- "_id": "realize-package-specifier@1.2.0",
- "_shasum": "93364e40dee38369f92e9b0c76124500342132f2",
- "_from": "realize-package-specifier@>=1.2.0 <1.3.0",
- "_npmVersion": "2.1.2",
- "_nodeVersion": "0.10.32",
- "_npmUser": {
- "name": "iarna",
- "email": "me@re-becca.org"
- },
- "maintainers": [
- {
- "name": "iarna",
- "email": "me@re-becca.org"
- }
- ],
- "dist": {
- "shasum": "93364e40dee38369f92e9b0c76124500342132f2",
- "tarball": "http://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-1.2.0.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-1.2.0.tgz"
+ "_id": "realize-package-specifier@1.3.0",
+ "_shasum": "23374a84e6a9188483f346cc939eb58eec85efa5",
+ "_from": "realize-package-specifier@~1.3.0"
}
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 d5d8fc6c0..b371826e7 100644
--- a/deps/npm/node_modules/realize-package-specifier/test/basic.js
+++ b/deps/npm/node_modules/realize-package-specifier/test/basic.js
@@ -4,15 +4,17 @@ var requireInject = require("require-inject")
var path = require("path")
var re = {
- tarball: /[\/\\]a.tar.gz$/,
- packagedir: /[\/\\]b$/,
- packagejson: /[\/\\]b[\/\\]package.json$/,
- nonpackagedir: /[\/\\]c$/,
- nopackagejson: /[\/\\]c[\/\\]package.json$/,
- remotename: /[\/\\]d$/,
- packagedirlikegithub: /[\/\\]e[\/\\]1$/,
- packagejsonlikegithub: /[\/\\]e[\/\\]1[\/\\]package.json$/,
- github: /[\/\\]e[\/\\]2$/
+ tarball: /[/\\]a.tar.gz$/,
+ packagedir: /[/\\]b$/,
+ packagejson: /[/\\]b[/\\]package.json$/,
+ nonpackagedir: /[/\\]c$/,
+ nopackagejson: /[/\\]c[/\\]package.json$/,
+ remotename: /[/\\]d$/,
+ packagedirlikegithub: /[/\\]e[/\\]1$/,
+ packagejsonlikegithub: /[/\\]e[/\\]1[/\\]package.json$/,
+ github: /[/\\]e[/\\]2$/,
+ localrangefile: /[/\\]1[.]0[.]0$/,
+ localverfile: /[/\\]1$/
}
var rps = requireInject("../index", {
@@ -45,6 +47,12 @@ var rps = requireInject("../index", {
else if (re.github.test(path)) {
callback(new Error("EFILENOTFOUND"))
}
+ else if (re.localverfile.test(path)) {
+ callback(null,{isDirectory:function(){ return false }})
+ }
+ else if (re.localrangefile.test(path)) {
+ callback(null,{isDirectory:function(){ return false }})
+ }
else {
throw new Error("Unknown stat fixture path: "+path)
}
@@ -53,7 +61,7 @@ var rps = requireInject("../index", {
})
test("realize-package-specifier", function (t) {
- t.plan(10)
+ t.plan(12)
rps("a.tar.gz", function (err, result) {
t.is(result.type, "local", "local tarball")
})
@@ -84,9 +92,15 @@ test("realize-package-specifier", function (t) {
rps("e/2", function (err, result) {
t.is(result.type, "github", "github package dependency")
})
+ rps("1", function (err, result) {
+ t.is(result.type, "local", "range like local file is still a local file")
+ })
+ rps("1.0.0", function (err, result) {
+ t.is(result.type, "local", "version like local file is still a local file")
+ })
})
test("named realize-package-specifier", function (t) {
- t.plan(10)
+ t.plan(12)
rps("a@a.tar.gz", function (err, result) {
t.is(result.type, "local", "named local tarball")
@@ -118,4 +132,10 @@ test("named realize-package-specifier", function (t) {
rps("e@e/2", function (err, result) {
t.is(result.type, "github", "github package dependency")
})
+ rps("e@1", function (err, result) {
+ t.is(result.type, "range", "range like specifier is never a local file")
+ })
+ rps("e@1.0.0", function (err, result) {
+ t.is(result.type, "version", "version like specifier is never a local file")
+ })
})
diff --git a/deps/npm/node_modules/request/.travis.yml b/deps/npm/node_modules/request/.travis.yml
index 742c7dfa0..90e06c13e 100644
--- a/deps/npm/node_modules/request/.travis.yml
+++ b/deps/npm/node_modules/request/.travis.yml
@@ -2,6 +2,8 @@ language: node_js
node_js:
- "0.8"
- "0.10"
+before_install: npm install -g npm@~1.4.6
+after_script: ./node_modules/.bin/istanbul cover ./node_modules/tape/bin/tape tests/test-*.js --report lcovonly && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js --verbose
webhooks:
urls: https://webhooks.gitter.im/e/237280ed4796c19cc626
on_success: change # options: [always|never|change] default: always
diff --git a/deps/npm/node_modules/request/CHANGELOG.md b/deps/npm/node_modules/request/CHANGELOG.md
index 11f571f23..f4e5431b4 100644
--- a/deps/npm/node_modules/request/CHANGELOG.md
+++ b/deps/npm/node_modules/request/CHANGELOG.md
@@ -1,954 +1,394 @@
## Change Log
-### upcoming (2014/07/09 12:10 +00:00)
-- [#946](https://github.com/mikeal/request/pull/946) defaults: merge headers (@aj0strow)
-- [#844](https://github.com/mikeal/request/pull/844) Add support for HTTP[S]_PROXY environment variables. Fixes #595. (@jvmccarthy)
+### v2.51.0 (2014/12/10)
+- [#1310](https://github.com/request/request/pull/1310) Revert changes introduced in https://github.com/request/request/pull/1282 (@simov)
-### v2.37.1 (2014/07/07 17:25 +00:00)
-- [8711b2f](https://github.com/mikeal/request/commit/8711b2f3489553a7ddae69fa8c9f538182c9d5c8) 2.37.1 (@mikeal)
+### v2.50.0 (2014/12/09)
+- [#1308](https://github.com/request/request/pull/1308) Add browser test to keep track of browserify compability. (@eiriksm)
+- [#1299](https://github.com/request/request/pull/1299) Add optional support for jsonReviver (@poislagarde)
+- [#1277](https://github.com/request/request/pull/1277) Add Coveralls configuration (@simov)
+- [#1307](https://github.com/request/request/pull/1307) Upgrade form-data, add back browserify compability. Fixes #455. (@eiriksm)
+- [#1305](https://github.com/request/request/pull/1305) Fix typo in README.md (@LewisJEllis)
+- [#1288](https://github.com/request/request/pull/1288) Update README.md to explain custom file use case (@cliffcrosland)
-### v2.37.0 (2014/07/07 17:25 +00:00)
-- [79472b2](https://github.com/mikeal/request/commit/79472b263cde77504a354913a16bdc9fbdc9ed5d) append secureOptions to poolKey (@medovob)
-- [#907](https://github.com/mikeal/request/pull/907) append secureOptions to poolKey (@medovob)
-- [b223a8a](https://github.com/mikeal/request/commit/b223a8add0cbdd4e699a52da66aeb0f0cb17a0c3) expose tough-cookie's getCookiesSync (@charlespwd)
-- [f4dcad0](https://github.com/mikeal/request/commit/f4dcad0fa6e2f2388abae508ad7256a1e1214ab2) test getCookies method (@charlespwd)
-- [adcf62b](https://github.com/mikeal/request/commit/adcf62bf45ec19a28198ca8d3f37e7d7babc883a) update readme (@charlespwd)
-- [4fdf13b](https://github.com/mikeal/request/commit/4fdf13b57dcd20b9fe03c0956f5df70c82d6e4a3) Merge branch 'charlespwd-master' (@lalitkapoor)
-- [83e370d](https://github.com/mikeal/request/commit/83e370d54ca2a5fb162e40e7e705e1e9d702ba0a) Bump version of hawk dep. (@samccone)
-- [#927](https://github.com/mikeal/request/pull/927) Bump version of hawk dep. (@samccone)
-- [c42dcec](https://github.com/mikeal/request/commit/c42dcec10a307cb2299861f87720d491a89142b4) package.json: use OSI-style license name (@isaacs)
-- [8892cb7](https://github.com/mikeal/request/commit/8892cb7bb8945807ff25038e888222d4e902acc8) Swap mime module. (@eiriksm)
-- [d92395e](https://github.com/mikeal/request/commit/d92395e638cbfe5c31eb4ff54941b98b09057486) Make package.json so node .8 understands it. (@eiriksm)
-- [6ebd748](https://github.com/mikeal/request/commit/6ebd748a02a49976d41ebbc4f8396acf8fda1c14) Add some additional hacks to work in the browser. (@eiriksm)
-- [#943](https://github.com/mikeal/request/pull/943) New mime module (@eiriksm)
-- [561454d](https://github.com/mikeal/request/commit/561454d18a68b7a03163308f6d29e127afe97426) Add some code comments about why we do the extra checks. (@eiriksm)
-- [#944](https://github.com/mikeal/request/pull/944) Make request work with browserify (@eiriksm)
-- [6a0add7](https://github.com/mikeal/request/commit/6a0add70b2687cf751b3446a15a513a1fd141738) defaults: merge headers (@aj0strow)
-- [407c1ad](https://github.com/mikeal/request/commit/407c1ada61afca4d4ba50155c6d9430754541df1) prefer late return statement (@aj0strow)
-- [4ab40ba](https://github.com/mikeal/request/commit/4ab40ba2f9aca8958cab149eb9cfbd9edb5534aa) Added support for manual querystring in form option (@charlespwd)
-- [a55627c](https://github.com/mikeal/request/commit/a55627cd9f468cefb2971bb501ebc0c2fc27aa8b) Updated README (@charlespwd)
-- [#949](https://github.com/mikeal/request/pull/949) Manually enter querystring in form option (@charlespwd)
-- [10246c8](https://github.com/mikeal/request/commit/10246c84819db14b32fccca040029b06449242a3) [PATCH v2] Add support for gzip content decoding (@kevinoid)
-- [6180c5f](https://github.com/mikeal/request/commit/6180c5f45c01fb2158b9a44f894a34263479fa84) check for content-length header before setting it in nextTick (@camilleanne)
-- [#951](https://github.com/mikeal/request/pull/951) Add support for gzip content decoding (@kevinoid)
-- [849c681](https://github.com/mikeal/request/commit/849c681846ce3b5492bd47261de391377a3ac19b) Silence EventEmitter memory leak warning #311 (@watson)
-- [#955](https://github.com/mikeal/request/pull/955) check for content-length header before setting it in nextTick (@camilleanne)
-- [#957](https://github.com/mikeal/request/pull/957) Silence EventEmitter memory leak warning #311 (@watson)
-- [c1d951e](https://github.com/mikeal/request/commit/c1d951e536bd41c957f0cade41d051c9d41d1462) Fixing for 0.8 (@mikeal)
-- [4851118](https://github.com/mikeal/request/commit/48511186495888a5f0cb15a107325001ac91990e) 2.37.0 (@mikeal)
+### v2.49.0 (2014/11/28)
+- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb)
+- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki)
+- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov)
+- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov)
+- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok)
+- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov)
-### v2.36.1 (2014/05/19 20:59 +00:00)
-- [c3914fc](https://github.com/mikeal/request/commit/c3914fcd4a74faf6dbf0fb6a4a188e871e0c51b8) 2.36.1 (@mikeal)
+### v2.48.0 (2014/11/12)
+- [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2)
+- [#1253](https://github.com/request/request/pull/1253) Add multipart chunked flag (@simov, @nylen)
+- [#1251](https://github.com/request/request/pull/1251) Clarify that defaults() does not modify global defaults (@nylen)
+- [#1250](https://github.com/request/request/pull/1250) Improve documentation for pool and maxSockets options (@nylen)
+- [#1237](https://github.com/request/request/pull/1237) Documenting error handling when using streams (@vmattos)
+- [#1244](https://github.com/request/request/pull/1244) Finalize changelog command (@nylen)
+- [#1241](https://github.com/request/request/pull/1241) Fix typo (@alexanderGugel)
+- [#1223](https://github.com/request/request/pull/1223) Show latest version number instead of "upcoming" in changelog (@nylen)
+- [#1236](https://github.com/request/request/pull/1236) Document how to use custom CA in README (#1229) (@hypesystem)
+- [#1228](https://github.com/request/request/pull/1228) Support for oauth with RSA-SHA1 signing (@nylen)
+- [#1216](https://github.com/request/request/pull/1216) Made json and multipart options coexist (@nylen, @simov)
+- [#1225](https://github.com/request/request/pull/1225) Allow header white/exclusive lists in any case. (@RReverser)
-### v2.36.0 (2014/05/19 20:59 +00:00)
-- [76a96de](https://github.com/mikeal/request/commit/76a96de75580042aa780e9587ff7a22522119c3f) Reventing lodash merge change. (@mikeal)
-- [b8bb57e](https://github.com/mikeal/request/commit/b8bb57efb17e72e2ac6d957c05c3f2570c7ba6a0) 2.36.0 (@mikeal)
+### v2.47.0 (2014/10/26)
+- [#1222](https://github.com/request/request/pull/1222) Move from mikeal/request to request/request (@nylen)
+- [#1220](https://github.com/request/request/pull/1220) update qs dependency to 2.3.1 (@FredKSchott)
+- [#1212](https://github.com/request/request/pull/1212) Improve tests/test-timeout.js (@nylen)
+- [#1219](https://github.com/request/request/pull/1219) remove old globalAgent workaround for node 0.4 (@request)
+- [#1214](https://github.com/request/request/pull/1214) Remove cruft left over from optional dependencies (@nylen)
+- [#1215](https://github.com/request/request/pull/1215) Add proxyHeaderExclusiveList option for proxy-only headers. (@RReverser)
+- [#1211](https://github.com/request/request/pull/1211) Allow 'Host' header instead of 'host' and remember case across redirects (@nylen)
+- [#1208](https://github.com/request/request/pull/1208) Improve release script (@nylen)
+- [#1213](https://github.com/request/request/pull/1213) Support for custom cookie store (@nylen, @mitsuru)
+- [#1197](https://github.com/request/request/pull/1197) Clean up some code around setting the agent (@FredKSchott)
+- [#1209](https://github.com/request/request/pull/1209) Improve multipart form append test (@simov)
+- [#1207](https://github.com/request/request/pull/1207) Update changelog (@nylen)
+- [#1185](https://github.com/request/request/pull/1185) Stream multipart/related bodies (@simov)
-### v2.35.1 (2014/05/17 20:57 +00:00)
-- [4bbd153](https://github.com/mikeal/request/commit/4bbd1532a68cadf1a88dd69c277645e9b781f364) 2.35.1 (@mikeal)
+### v2.46.0 (2014/10/23)
+- [#1198](https://github.com/request/request/pull/1198) doc for TLS/SSL protocol options (@shawnzhu)
+- [#1200](https://github.com/request/request/pull/1200) Add a Gitter chat badge to README.md (@gitter-badger)
+- [#1196](https://github.com/request/request/pull/1196) Upgrade taper test reporter to v0.3.0 (@nylen)
+- [#1199](https://github.com/request/request/pull/1199) Fix lint error: undeclared var i (@nylen)
+- [#1191](https://github.com/request/request/pull/1191) Move self.proxy decision logic out of init and into a helper (@FredKSchott)
+- [#1190](https://github.com/request/request/pull/1190) Move _buildRequest() logic back into init (@FredKSchott)
+- [#1186](https://github.com/request/request/pull/1186) Support Smarter Unix URL Scheme (@FredKSchott)
+- [#1178](https://github.com/request/request/pull/1178) update form documentation for new usage (@FredKSchott)
+- [#1180](https://github.com/request/request/pull/1180) Enable no-mixed-requires linting rule (@nylen)
+- [#1184](https://github.com/request/request/pull/1184) Don't forward authorization header across redirects to different hosts (@nylen)
+- [#1183](https://github.com/request/request/pull/1183) Correct README about pre and postamble CRLF using multipart and not mult... (@netpoetica)
+- [#1179](https://github.com/request/request/pull/1179) Lint tests directory (@nylen)
+- [#1169](https://github.com/request/request/pull/1169) add metadata for form-data file field (@dotcypress)
+- [#1173](https://github.com/request/request/pull/1173) remove optional dependencies (@seanstrom)
+- [#1165](https://github.com/request/request/pull/1165) Cleanup event listeners and remove function creation from init (@FredKSchott)
+- [#1174](https://github.com/request/request/pull/1174) update the request.cookie docs to have a valid cookie example (@seanstrom)
+- [#1168](https://github.com/request/request/pull/1168) create a detach helper and use detach helper in replace of nextTick (@seanstrom)
+- [#1171](https://github.com/request/request/pull/1171) in post can send form data and use callback (@MiroRadenovic)
+- [#1159](https://github.com/request/request/pull/1159) accept charset for x-www-form-urlencoded content-type (@seanstrom)
+- [#1157](https://github.com/request/request/pull/1157) Update README.md: body with json=true (@Rob--W)
+- [#1164](https://github.com/request/request/pull/1164) Disable tests/test-timeout.js on Travis (@nylen)
+- [#1153](https://github.com/request/request/pull/1153) Document how to run a single test (@nylen)
+- [#1144](https://github.com/request/request/pull/1144) adds documentation for the "response" event within the streaming section (@tbuchok)
+- [#1162](https://github.com/request/request/pull/1162) Update eslintrc file to no longer allow past errors (@FredKSchott)
+- [#1155](https://github.com/request/request/pull/1155) Support/use self everywhere (@seanstrom)
+- [#1161](https://github.com/request/request/pull/1161) fix no-use-before-define lint warnings (@emkay)
+- [#1156](https://github.com/request/request/pull/1156) adding curly brackets to get rid of lint errors (@emkay)
+- [#1151](https://github.com/request/request/pull/1151) Fix localAddress test on OS X (@nylen)
+- [#1145](https://github.com/request/request/pull/1145) documentation: fix outdated reference to setCookieSync old name in README (@FredKSchott)
+- [#1131](https://github.com/request/request/pull/1131) Update pool documentation (@FredKSchott)
+- [#1143](https://github.com/request/request/pull/1143) Rewrite all tests to use tape (@nylen)
+- [#1137](https://github.com/request/request/pull/1137) Add ability to specifiy querystring lib in options. (@jgrund)
+- [#1138](https://github.com/request/request/pull/1138) allow hostname and port in place of host on uri (@cappslock)
+- [#1134](https://github.com/request/request/pull/1134) Fix multiple redirects and `self.followRedirect` (@blakeembrey)
+- [#1130](https://github.com/request/request/pull/1130) documentation fix: add note about npm test for contributing (@FredKSchott)
+- [#1120](https://github.com/request/request/pull/1120) Support/refactor request setup tunnel (@seanstrom)
+- [#1129](https://github.com/request/request/pull/1129) linting fix: convert double quote strings to use single quotes (@FredKSchott)
+- [#1124](https://github.com/request/request/pull/1124) linting fix: remove unneccesary semi-colons (@FredKSchott)
-### v2.35.0 (2014/05/17 20:57 +00:00)
-- [2833da3](https://github.com/mikeal/request/commit/2833da3c3c1c34f4130ad1ba470354fc32410691) initial changelog (@lalitkapoor)
-- [49319e6](https://github.com/mikeal/request/commit/49319e6c09a8a169c95a8d282c900f9fecd50371) Merge branch 'master' of https://github.com/mikeal/request into create-changelog-based-on-pull-requests (@lalitkapoor)
-- [#815](https://github.com/mikeal/request/pull/815) Create changelog based on pull requests (@lalitkapoor)
-- [4b6ce1a](https://github.com/mikeal/request/commit/4b6ce1ac0f79cb8fa633e281d3eb4c0cb61794e1) It appears that secureOptions is an undocumented feature to fix issues with broken server. See joynet/node #5119 (@nw)
-- [#821](https://github.com/mikeal/request/pull/821) added secureOptions back (@nw)
-- [eddd488](https://github.com/mikeal/request/commit/eddd4889fb1bc95c741749e79d9749aab3e103fc) Fixing #825 (@mikeal)
-- [4627a7a](https://github.com/mikeal/request/commit/4627a7a14078494ded8c66c19c43efd07324cbd8) improve error reporting for invalid protocols (@FND)
-- [#840](https://github.com/mikeal/request/pull/840) improve error reporting for invalid protocols (@FND)
-- [#810](https://github.com/mikeal/request/pull/810) add some exposition to mpu example in README.md (@mikermcneil)
-- [8a0e2d6](https://github.com/mikeal/request/commit/8a0e2d65351560858275c73505df12b537f4d001) Added support for HTTP_PROXY and HTTPS_PROXY environment variables, if the proxy option isn't already set. (@jvmccarthy)
-- [f60d348](https://github.com/mikeal/request/commit/f60d348dc1840ee6d7b709efcc2b3cd1a03aef63) Fix word consistency
-- [#850](https://github.com/mikeal/request/pull/850) Fix word consistency in readme (@0xNobody)
-- [#809](https://github.com/mikeal/request/pull/809) upgrade tunnel-proxy to 0.4.0 (@ksato9700)
-- [e86377c](https://github.com/mikeal/request/commit/e86377c0c1e7695c3997f7802175ca37f5a5113b) Won't use HTTP(S)_PROXY env var if proxy explicitly set to null. (@jvmccarthy)
-- [f1bb537](https://github.com/mikeal/request/commit/f1bb537ee2440bd664ea8c445ac3a2c6e31e9932) Add support for RFC 6750 Bearer Tokens
-- [ba51a26](https://github.com/mikeal/request/commit/ba51a26079ec52c0a9145fbe8b6796d46e79bb8e) Add documentation about auth.bearer (@phedny)
-- [#861](https://github.com/mikeal/request/pull/861) Add support for RFC 6750 Bearer Tokens (@phedny)
-- [b8ee579](https://github.com/mikeal/request/commit/b8ee5790ace95440a56074f6afe866f4662e9e88) Fix typo (@dandv)
-- [#866](https://github.com/mikeal/request/pull/866) Fix typo (@dandv)
-- [b292b59](https://github.com/mikeal/request/commit/b292b59fadecb35dac3bee0959c4b4b782e772e3) Clean code syntax in test-pipes.js (@tgohn)
-- [f7996d5](https://github.com/mikeal/request/commit/f7996d5fcfed85e03f293a7c9739e385b64ecaad) Add test for request.pipefilter (@tgohn)
-- [#869](https://github.com/mikeal/request/pull/869) Pipefilter test (@tgohn)
-- [86b99b6](https://github.com/mikeal/request/commit/86b99b671a3c86f4f963a6c67047343fd8edae8f) Fix typo in form example (@mscdex)
-- [2ba4808](https://github.com/mikeal/request/commit/2ba48083ddf2607f85e2c479e0d254483c2610fe) failing test (@lalitkapoor)
-- [39396b0](https://github.com/mikeal/request/commit/39396b0bb2e90eb7ec4dfcf5d2e731a2cb156f5c) extend passed in options (@lalitkapoor)
-- [#891](https://github.com/mikeal/request/pull/891) fixes 857 - options object is mutated by calling request (@lalitkapoor)
-- [54a51c6](https://github.com/mikeal/request/commit/54a51c665887e162ccb9f6b17b9c1f3b017ccc29) merge options (@vohof)
-- [25b95db](https://github.com/mikeal/request/commit/25b95dbdddf874f014386a0a9fe35a7c903b7415) tilde? (@vohof)
-- [#897](https://github.com/mikeal/request/pull/897) merge with default options (@vohof)
-- [a1e4b1a](https://github.com/mikeal/request/commit/a1e4b1a9c2f39ce565fd023bb604da139f689d43) Fixes #555 (@pigulla)
-- [#901](https://github.com/mikeal/request/pull/901) Fixes #555 (@pigulla)
-- [6498a5f](https://github.com/mikeal/request/commit/6498a5f1ae68050cfeabf8f34f75bc72b08f1805) 2.35.0 (@mikeal)
+### v2.45.0 (2014/10/06)
+- [#1128](https://github.com/request/request/pull/1128) Add test for setCookie regression (@nylen)
+- [#1127](https://github.com/request/request/pull/1127) added tests around using objects as values in a query string (@bcoe)
+- [#1103](https://github.com/request/request/pull/1103) Support/refactor request constructor (@nylen, @seanstrom)
+- [#1119](https://github.com/request/request/pull/1119) add basic linting to request library (@FredKSchott)
+- [#1121](https://github.com/request/request/pull/1121) Revert "Explicitly use sync versions of cookie functions" (@nylen)
+- [#1118](https://github.com/request/request/pull/1118) linting fix: Restructure bad empty if statement (@FredKSchott)
+- [#1117](https://github.com/request/request/pull/1117) Fix a bad check for valid URIs (@FredKSchott)
+- [#1113](https://github.com/request/request/pull/1113) linting fix: space out operators (@FredKSchott)
+- [#1116](https://github.com/request/request/pull/1116) Fix typo in `noProxyHost` definition (@FredKSchott)
+- [#1114](https://github.com/request/request/pull/1114) linting fix: Added a `new` operator that was missing when creating and throwing a new error (@FredKSchott)
+- [#1096](https://github.com/request/request/pull/1096) No_proxy support (@samcday)
+- [#1107](https://github.com/request/request/pull/1107) linting-fix: remove unused variables (@FredKSchott)
+- [#1112](https://github.com/request/request/pull/1112) linting fix: Make return values consistent and more straitforward (@FredKSchott)
+- [#1111](https://github.com/request/request/pull/1111) linting fix: authPieces was getting redeclared (@FredKSchott)
+- [#1105](https://github.com/request/request/pull/1105) Use strict mode in request (@FredKSchott)
+- [#1110](https://github.com/request/request/pull/1110) linting fix: replace lazy '==' with more strict '===' (@FredKSchott)
+- [#1109](https://github.com/request/request/pull/1109) linting fix: remove function call from if-else conditional statement (@FredKSchott)
+- [#1102](https://github.com/request/request/pull/1102) Fix to allow setting a `requester` on recursive calls to `request.defaults` (@tikotzky)
+- [#1095](https://github.com/request/request/pull/1095) Tweaking engines in package.json (@pdehaan)
+- [#1082](https://github.com/request/request/pull/1082) Forward the socket event from the httpModule request (@seanstrom)
+- [#972](https://github.com/request/request/pull/972) Clarify gzip handling in the README (@kevinoid)
+- [#1089](https://github.com/request/request/pull/1089) Mention that encoding defaults to utf8, not Buffer (@stuartpb)
+- [#1088](https://github.com/request/request/pull/1088) Fix cookie example in README.md and make it more clear (@pipi32167)
+- [#1027](https://github.com/request/request/pull/1027) Add support for multipart form data in request options. (@crocket)
+- [#1076](https://github.com/request/request/pull/1076) use Request.abort() to abort the request when the request has timed-out (@seanstrom)
+- [#1068](https://github.com/request/request/pull/1068) add optional postamble required by .NET multipart requests (@netpoetica)
-### v2.34.1 (2014/02/18 19:35 +00:00)
-- [aefea20](https://github.com/mikeal/request/commit/aefea20b215ff1a48f0d8d27dcac0186604e3b2d) 2.34.1 (@mikeal)
+### v2.43.0 (2014/09/18)
+- [#1057](https://github.com/request/request/pull/1057) Defaults should not overwrite defined options (@davidwood)
+- [#1046](https://github.com/request/request/pull/1046) Propagate datastream errors, useful in case gzip fails. (@ZJONSSON, @Janpot)
+- [#1063](https://github.com/request/request/pull/1063) copy the input headers object #1060 (@finnp)
+- [#1031](https://github.com/request/request/pull/1031) Explicitly use sync versions of cookie functions (@ZJONSSON)
+- [#1056](https://github.com/request/request/pull/1056) Fix redirects when passing url.parse(x) as URL to convenience method (@nylen)
-### v2.34.0 (2014/02/18 19:35 +00:00)
-- [46edc90](https://github.com/mikeal/request/commit/46edc902e6ffdee39038a6702021728cb9d9b8fa) simpler (@joaojeronimo)
-- [#781](https://github.com/mikeal/request/pull/781) simpler isReadStream function (@joaojeronimo)
-- [fe2f59f](https://github.com/mikeal/request/commit/fe2f59fdc72de5c86404e51ab6bc4e0e8ece95f2) Provide ability to override content-type when `json` option used (@vvo)
-- [#785](https://github.com/mikeal/request/pull/785) Provide ability to override content-type when `json` option used (@vvo)
-- [d134f01](https://github.com/mikeal/request/commit/d134f012e64702e8f4070d61504b39524e1a07ba) Adds content-length calculation when submitting forms using form-data library. This is related to issue 345. (@Juul)
-- [#793](https://github.com/mikeal/request/pull/793) Adds content-length calculation when submitting forms using form-data li... (@Juul)
-- [3ebf25c](https://github.com/mikeal/request/commit/3ebf25c5af1194d8f7b3a3330fe89e729532809b) adding failing test (@lalitkapoor)
-- [0f57a90](https://github.com/mikeal/request/commit/0f57a90384588727a5446bb1f5bf4e0be2d85780) accept options in arguments (@lalitkapoor)
-- [7fb1647](https://github.com/mikeal/request/commit/7fb164731a5aad80c6539e33eda4ad4a51bb7871) silently ignore errors when adding cookie to jar (@lalitkapoor)
-- [d6b2b1c](https://github.com/mikeal/request/commit/d6b2b1c279d12cdddc6593060672d49b12e63fea) add additional header test (@lalitkapoor)
-- [f29e6df](https://github.com/mikeal/request/commit/f29e6dfadc6c3a45b6190998b6608059f87f3c32) Added the Apache license to the package.json. (@keskival)
-- [#802](https://github.com/mikeal/request/pull/802) Added the Apache license to the package.json. (@keskival)
-- [#801](https://github.com/mikeal/request/pull/801) 794 ignore cookie parsing and domain errors (@lalitkapoor)
-- [54e6dfb](https://github.com/mikeal/request/commit/54e6dfb77d57757d4006982f813ebaab9e005cd5) Rewrite UNIX Domain Socket support into 2.33.1. Add test. (@lyuzashi)
-- [3eaed2f](https://github.com/mikeal/request/commit/3eaed2f2e82d9d17a583bcc54270c16a7b674206) Use setImmediate when available, otherwise fallback to nextTick (@lyuzashi)
-- [746ca75](https://github.com/mikeal/request/commit/746ca757da24d5011e92e04cb00c90098a7680fd) Indent wrapped buildRequest function (@lyuzashi)
-- [#516](https://github.com/mikeal/request/pull/516) UNIX Socket URL Support (@native-digital)
-- [9a5b0a8](https://github.com/mikeal/request/commit/9a5b0a81eca9836f05b0192c05c0d41e79034461) initial format (@lalitkapoor)
-- [9380a49](https://github.com/mikeal/request/commit/9380a49779ddb081eba5d0ee51e4396d72d52066) upgrade tunnel-proxy to 0.4.0 (@ksato9700)
-- [1efea37](https://github.com/mikeal/request/commit/1efea374286c728c3c988ee2264fb44cd8c41d88) add some exposition to mpu example in README.md (@mikermcneil)
-- [ba0d63a](https://github.com/mikeal/request/commit/ba0d63ae23a3fc95dfe012df0bd6c8d7e87b1df7) made the language clearer (@mikermcneil)
-- [b43aa81](https://github.com/mikeal/request/commit/b43aa81789c0b8c7ae90d2b983f79dde4a125470) 2.34.0 (@mikeal)
+### v2.42.0 (2014/09/04)
+- [#1053](https://github.com/request/request/pull/1053) Fix #1051 Parse auth properly when using non-tunneling proxy (@isaacs)
-### v2.33.1 (2014/01/16 19:48 +00:00)
-- [afcf827](https://github.com/mikeal/request/commit/afcf827559b3223c96ac1bbd19bd1e4a6d7771e3) 2.33.1 (@mikeal)
+### v2.41.0 (2014/09/04)
+- [#1050](https://github.com/request/request/pull/1050) Pass whitelisted headers to tunneling proxy. Organize all tunneling logic. (@isaacs, @Feldhacker)
+- [#1035](https://github.com/request/request/pull/1035) souped up nodei.co badge (@rvagg)
+- [#1048](https://github.com/request/request/pull/1048) Aws is now possible over a proxy (@steven-aerts)
+- [#1039](https://github.com/request/request/pull/1039) extract out helper functions to a helper file (@seanstrom)
+- [#1021](https://github.com/request/request/pull/1021) Support/refactor indexjs (@seanstrom)
+- [#1033](https://github.com/request/request/pull/1033) Improve and document debug options (@nylen)
+- [#1034](https://github.com/request/request/pull/1034) Fix readme headings (@nylen)
+- [#1030](https://github.com/request/request/pull/1030) Allow recursive request.defaults (@tikotzky)
+- [#1029](https://github.com/request/request/pull/1029) Fix a couple of typos (@nylen)
+- [#675](https://github.com/request/request/pull/675) Checking for SSL fault on connection before reading SSL properties (@VRMink)
+- [#989](https://github.com/request/request/pull/989) Added allowRedirect function. Should return true if redirect is allowed or false otherwise (@doronin)
+- [#1025](https://github.com/request/request/pull/1025) [fixes #1023] Set self._ended to true once response has ended (@mridgway)
+- [#1020](https://github.com/request/request/pull/1020) Add back removed debug metadata (@FredKSchott)
+- [#1008](https://github.com/request/request/pull/1008) Moving to module instead of cutomer buffer concatenation. (@mikeal)
+- [#770](https://github.com/request/request/pull/770) Added dependency badge for README file; (@timgluz)
+- [#1016](https://github.com/request/request/pull/1016) toJSON no longer results in an infinite loop, returns simple objects (@FredKSchott)
+- [#1018](https://github.com/request/request/pull/1018) Remove pre-0.4.4 HTTPS fix (@mmalecki)
+- [#1006](https://github.com/request/request/pull/1006) Migrate to caseless, fixes #1001 (@mikeal)
+- [#995](https://github.com/request/request/pull/995) Fix parsing array of objects (@sjonnet19)
+- [#999](https://github.com/request/request/pull/999) Fix fallback for browserify for optional modules. (@eiriksm)
+- [#996](https://github.com/request/request/pull/996) Wrong oauth signature when multiple same param keys exist [updated] (@bengl)
-### v2.33.0 (2014/01/16 19:48 +00:00)
-- [7f1cc8f](https://github.com/mikeal/request/commit/7f1cc8ff5a8d9443e7a793f4655487e722b75b0d) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [3e43d3d](https://github.com/mikeal/request/commit/3e43d3d5175f5f18d1e97b2f5d4ca6ac6c216e4a) 2.33.0 (@mikeal)
+### v2.40.0 (2014/08/06)
+- [#992](https://github.com/request/request/pull/992) Fix security vulnerability. Update qs (@poeticninja)
+- [#988](https://github.com/request/request/pull/988) “--” -> “—” (@upisfree)
+- [#987](https://github.com/request/request/pull/987) Show optional modules as being loaded by the module that reqeusted them (@iarna)
-### v2.32.1 (2014/01/16 19:33 +00:00)
-- [dd44f39](https://github.com/mikeal/request/commit/dd44f39d37daacbbeb21f9e960f13adbb44eea0a) 2.32.1 (@mikeal)
+### v2.39.0 (2014/07/24)
+- [#976](https://github.com/request/request/pull/976) Update README.md (@fosco-maestro)
-### v2.32.0 (2014/01/16 19:33 +00:00)
-- [#757](https://github.com/mikeal/request/pull/757) require aws-sign2 (@mafintosh)
-- [#744](https://github.com/mikeal/request/pull/744) Use Cookie.parse (@lalitkapoor)
-- [5eaee1c](https://github.com/mikeal/request/commit/5eaee1ce4008ede1df15201622ac478c892d6a8a) Upgrade tough-cookie to 0.10.0 (@stash)
-- [#763](https://github.com/mikeal/request/pull/763) Upgrade tough-cookie to 0.10.0 (@stash)
-- [d2489d0](https://github.com/mikeal/request/commit/d2489d0e24d9a538224f5c8c090dcdeb1f8d4969) Fixed auth error for some servers like twisted. According to rfc 2617 auth scheme token should be case-insensitive. (@bobyrizov)
-- [#764](https://github.com/mikeal/request/pull/764) Case-insensitive authentication scheme (@bobyrizov)
-- [cbee3d0](https://github.com/mikeal/request/commit/cbee3d04ee9f704501a64edb7b9b6d201e98494b) Use tough-cookie CookieJar sync API (@stash)
-- [3eeaf6a](https://github.com/mikeal/request/commit/3eeaf6a90df7b806d91ae1e8e2f56862ece2ea33) Emit error, not cookieError (@stash)
-- [#767](https://github.com/mikeal/request/pull/767) Use tough-cookie CookieJar sync API (@stash)
-- [9eac534](https://github.com/mikeal/request/commit/9eac534dd11e40bba65456491cb62ad68d8f41fa) 2.32.0 (@mikeal)
+### v2.38.0 (2014/07/22)
+- [#952](https://github.com/request/request/pull/952) Adding support to client certificate with proxy use case (@ofirshaked)
+- [#884](https://github.com/request/request/pull/884) Documented tough-cookie installation. (@wbyoung)
+- [#935](https://github.com/request/request/pull/935) Correct repository url (@fritx)
+- [#963](https://github.com/request/request/pull/963) Update changelog (@nylen)
+- [#960](https://github.com/request/request/pull/960) Support gzip with encoding on node pre-v0.9.4 (@kevinoid)
+- [#953](https://github.com/request/request/pull/953) Add async Content-Length computation when using form-data (@LoicMahieu)
+- [#844](https://github.com/request/request/pull/844) Add support for HTTP[S]_PROXY environment variables. Fixes #595. (@jvmccarthy)
+- [#946](https://github.com/request/request/pull/946) defaults: merge headers (@aj0strow)
-### v2.31.1 (2014/01/08 02:57 +00:00)
-- [b1b5e91](https://github.com/mikeal/request/commit/b1b5e9161e149574ba5528c401a70bfadef1a98a) 2.31.1 (@mikeal)
+### v2.37.0 (2014/07/07)
+- [#957](https://github.com/request/request/pull/957) Silence EventEmitter memory leak warning #311 (@watson)
+- [#955](https://github.com/request/request/pull/955) check for content-length header before setting it in nextTick (@camilleanne)
+- [#951](https://github.com/request/request/pull/951) Add support for gzip content decoding (@kevinoid)
+- [#949](https://github.com/request/request/pull/949) Manually enter querystring in form option (@charlespwd)
+- [#944](https://github.com/request/request/pull/944) Make request work with browserify (@eiriksm)
+- [#943](https://github.com/request/request/pull/943) New mime module (@eiriksm)
+- [#927](https://github.com/request/request/pull/927) Bump version of hawk dep. (@samccone)
+- [#907](https://github.com/request/request/pull/907) append secureOptions to poolKey (@medovob)
-### v2.31.0 (2014/01/08 02:57 +00:00)
-- [dd2577f](https://github.com/mikeal/request/commit/dd2577f8264d4d4b07484dec7094b72c00c8416f) Removing s3 test. (@mikeal)
-- [fef5bf3](https://github.com/mikeal/request/commit/fef5bf34258e3695b61c048c683f1d4a7f99b368) Fix callback arguments documentation (@mmalecki)
-- [#736](https://github.com/mikeal/request/pull/736) Fix callback arguments documentation (@mmalecki)
-- [5531c20](https://github.com/mikeal/request/commit/5531c208678145ef35b06e948190be2fd6a8a1c8) updating README example: cookie jar api changed cookie module changed to tough-cookie (@emkay)
-- [#741](https://github.com/mikeal/request/pull/741) README example is using old cookie jar api (@emkay)
-- [9d73e5a](https://github.com/mikeal/request/commit/9d73e5a277af141a6e4fa9dbcae5d0c3b755d277) add note about JSON output body type (@iansltx)
-- [#742](https://github.com/mikeal/request/pull/742) Add note about JSON output body type (@iansltx)
-- [41e20a4](https://github.com/mikeal/request/commit/41e20a4d288e30101e493b383a0e4852a3271a98) Use Cookie.parse (@lalitkapoor)
-- [4d09556](https://github.com/mikeal/request/commit/4d095562a5c42ffb41b0ff194e9e6f32c0f44372) updating setCookie example to make it clear that the callback is required (@emkay)
-- [#745](https://github.com/mikeal/request/pull/745) updating setCookie example to make it clear that the callback is required (@emkay)
-- [b7ede1d](https://github.com/mikeal/request/commit/b7ede1d56f9a2764e4bf764687b81419df817e5a) README: Markdown code highlight (@weakish)
-- [#746](https://github.com/mikeal/request/pull/746) README: Markdown code highlight (@weakish)
-- [#645](https://github.com/mikeal/request/pull/645) update twitter api url to v1.1 (@mick)
-- [20dcd18](https://github.com/mikeal/request/commit/20dcd18ce8e3397ba7e0213da9c760b048ca5b49) require aws-sign2 (@mafintosh)
-- [df2c426](https://github.com/mikeal/request/commit/df2c4264321c3db1387ddf9a945d63b9ae7d57b8) 2.31.0 (@mikeal)
+### v2.35.0 (2014/05/17)
+- [#901](https://github.com/request/request/pull/901) Fixes #555 (@pigulla)
+- [#897](https://github.com/request/request/pull/897) merge with default options (@vohof)
+- [#891](https://github.com/request/request/pull/891) fixes 857 - options object is mutated by calling request (@lalitkapoor)
+- [#869](https://github.com/request/request/pull/869) Pipefilter test (@tgohn)
+- [#866](https://github.com/request/request/pull/866) Fix typo (@dandv)
+- [#861](https://github.com/request/request/pull/861) Add support for RFC 6750 Bearer Tokens (@phedny)
+- [#809](https://github.com/request/request/pull/809) upgrade tunnel-proxy to 0.4.0 (@ksato9700)
+- [#850](https://github.com/request/request/pull/850) Fix word consistency in readme (@0xNobody)
+- [#810](https://github.com/request/request/pull/810) add some exposition to mpu example in README.md (@mikermcneil)
+- [#840](https://github.com/request/request/pull/840) improve error reporting for invalid protocols (@FND)
+- [#821](https://github.com/request/request/pull/821) added secureOptions back (@nw)
+- [#815](https://github.com/request/request/pull/815) Create changelog based on pull requests (@lalitkapoor)
-### v2.30.1 (2013/12/13 19:17 +00:00)
-- [eba2d40](https://github.com/mikeal/request/commit/eba2d402fcdcf1ac878de8672b1c9f5da856dcc1) 2.30.1 (@mikeal)
+### v2.34.0 (2014/02/18)
+- [#516](https://github.com/request/request/pull/516) UNIX Socket URL Support (@lyuzashi)
+- [#801](https://github.com/request/request/pull/801) 794 ignore cookie parsing and domain errors (@lalitkapoor)
+- [#802](https://github.com/request/request/pull/802) Added the Apache license to the package.json. (@keskival)
+- [#793](https://github.com/request/request/pull/793) Adds content-length calculation when submitting forms using form-data li... (@Juul)
+- [#785](https://github.com/request/request/pull/785) Provide ability to override content-type when `json` option used (@vvo)
+- [#781](https://github.com/request/request/pull/781) simpler isReadStream function (@joaojeronimo)
-### v2.30.0 (2013/12/13 19:17 +00:00)
-- [aee3819](https://github.com/mikeal/request/commit/aee38191557574ef570fd9c764af0af7072cc92a) Fix TypeError when calling request.cookie
-- [#728](https://github.com/mikeal/request/pull/728) Fix TypeError when calling request.cookie (@scarletmeow)
-- [628ef76](https://github.com/mikeal/request/commit/628ef768b1f52710b8eb4e14be4db69d174d1dcb) better DIGEST support (@dai-shi)
-- [d919bc1](https://github.com/mikeal/request/commit/d919bc1ce97fa461c365437a0c739bbaa6b86de7) ignore null authValues (DIGEST) (@dai-shi)
-- [75fc209](https://github.com/mikeal/request/commit/75fc209c5a9e6c647a04e42048c30f46c66fc103) DIGEST support: pass algoritm and opaque, add TODO items, test case for compatible mode (@dai-shi)
-- [#730](https://github.com/mikeal/request/pull/730) better HTTP DIGEST support (@dai-shi)
-- [937a24a](https://github.com/mikeal/request/commit/937a24a168a126f406ee8eb55eb78169ddc53497) JSHINT: Creating global 'for' variable. Should be 'for (var ...'.
-- [#732](https://github.com/mikeal/request/pull/732) JSHINT: Creating global 'for' variable. Should be 'for (var ...'. (@Fritz-Lium)
-- [f03be23](https://github.com/mikeal/request/commit/f03be2309bd85a89d2e3c208b2fb4be1a2b95c79) Make digest qop regex more robust (see #730) (@nylen)
-- [c7d97ae](https://github.com/mikeal/request/commit/c7d97aefaebf773ce62c72e9ec656f0250b7a1e7) 2.30.0 (@mikeal)
+### v2.32.0 (2014/01/16)
+- [#767](https://github.com/request/request/pull/767) Use tough-cookie CookieJar sync API (@stash)
+- [#764](https://github.com/request/request/pull/764) Case-insensitive authentication scheme (@bobyrizov)
+- [#763](https://github.com/request/request/pull/763) Upgrade tough-cookie to 0.10.0 (@stash)
+- [#744](https://github.com/request/request/pull/744) Use Cookie.parse (@lalitkapoor)
+- [#757](https://github.com/request/request/pull/757) require aws-sign2 (@mafintosh)
-### v2.29.1 (2013/12/06 20:05 +00:00)
-- [e0f2c41](https://github.com/mikeal/request/commit/e0f2c41bd4e15518e97dd2f4c134be51ed4cb68b) 2.29.1 (@mikeal)
+### v2.31.0 (2014/01/08)
+- [#645](https://github.com/request/request/pull/645) update twitter api url to v1.1 (@mick)
+- [#746](https://github.com/request/request/pull/746) README: Markdown code highlight (@weakish)
+- [#745](https://github.com/request/request/pull/745) updating setCookie example to make it clear that the callback is required (@emkay)
+- [#742](https://github.com/request/request/pull/742) Add note about JSON output body type (@iansltx)
+- [#741](https://github.com/request/request/pull/741) README example is using old cookie jar api (@emkay)
+- [#736](https://github.com/request/request/pull/736) Fix callback arguments documentation (@mmalecki)
-### v2.29.0 (2013/12/06 20:05 +00:00)
-- [3c2cad1](https://github.com/mikeal/request/commit/3c2cad11301380f4056eb3ca4c0c124f7f7f72f5) make request.defaults(options, requester) run the requester for all methods (@jchris)
-- [#727](https://github.com/mikeal/request/pull/727) fix requester bug (@jchris)
-- [0c9f875](https://github.com/mikeal/request/commit/0c9f87542cd1f919751d3ed1f00208ce7705f8e7) 2.29.0 (@mikeal)
+### v2.30.0 (2013/12/13)
+- [#732](https://github.com/request/request/pull/732) JSHINT: Creating global 'for' variable. Should be 'for (var ...'. (@Fritz-Lium)
+- [#730](https://github.com/request/request/pull/730) better HTTP DIGEST support (@dai-shi)
+- [#728](https://github.com/request/request/pull/728) Fix TypeError when calling request.cookie (@scarletmeow)
-### v2.28.1 (2013/12/04 19:42 +00:00)
-- [3e6a300](https://github.com/mikeal/request/commit/3e6a300121586da81b871f759a9feec52810474a) 2.28.1 (@mikeal)
+### v2.29.0 (2013/12/06)
+- [#727](https://github.com/request/request/pull/727) fix requester bug (@jchris)
-### v2.28.0 (2013/12/04 19:42 +00:00)
-- [ac26f43](https://github.com/mikeal/request/commit/ac26f43d9a8212289f92056d3029c207f755cef4) Update request.js (@wprl)
-- [adc2cb6](https://github.com/mikeal/request/commit/adc2cb6721e5980e8ed667a3f558cce8c89ee6c2) Use random cnonce (@wprl)
-- [ff16a9d](https://github.com/mikeal/request/commit/ff16a9daf93e01cecee7fabec64c3e1b423f7db5) Add test for random cnonce (@wprl)
-- [df64c2b](https://github.com/mikeal/request/commit/df64c2bc8f691ecc6f6c214e2254bab439830b88) Restore whitespace (@wprl)
-- [#630](https://github.com/mikeal/request/pull/630) Send random cnonce for HTTP Digest requests (@wprl)
-- [aca5a16](https://github.com/mikeal/request/commit/aca5a169c44cc658e8310691a2ae1cfc4c2b0958) update twitter api url to v1.1 (@mick)
-- [abcbadd](https://github.com/mikeal/request/commit/abcbadd1b2a113c34a37b62d36ddcfd74452850e) Test case for #304. (@diversario)
-- [b8cf874](https://github.com/mikeal/request/commit/b8cf8743b66d8eee4048561a7d81659f053393c8) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm)
-- [e6c7d1f](https://github.com/mikeal/request/commit/e6c7d1f6d23922480c09427d5f54f84eec60b7af) quiet, but check that stderr output has something reasonable for debug (@jrgm)
-- [#659](https://github.com/mikeal/request/pull/659) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm)
-- [23164e4](https://github.com/mikeal/request/commit/23164e4f33bd0837d796037c3d0121db23653c34) option.tunnel to explicitly disable tunneling (@seanmonstar)
-- [#662](https://github.com/mikeal/request/pull/662) option.tunnel to explicitly disable tunneling (@seanmonstar)
-- [#656](https://github.com/mikeal/request/pull/656) Test case for #304. (@diversario)
-- [da16120](https://github.com/mikeal/request/commit/da16120a8f0751b305a341c012dbdcfd62e83585) Change `secureOptions' to `secureProtocol' for HTTPS request (@richarddong)
-- [43d9d0a](https://github.com/mikeal/request/commit/43d9d0a76974d2c61681ddee04479d514ebfa320) add `ciphers' and `secureProtocol' to `options' in `getAgent' (@richarddong)
-- [#666](https://github.com/mikeal/request/pull/666) make `ciphers` and `secureProtocol` to work in https request (@richarddong)
-- [524e035](https://github.com/mikeal/request/commit/524e0356b73240409a11989d369511419526b5ed) change cookie module (@sxyizhiren)
-- [#674](https://github.com/mikeal/request/pull/674) change cookie module,to tough-cookie.please check it . (@sxyizhiren)
-- [e8dbcc8](https://github.com/mikeal/request/commit/e8dbcc83d4eff3c14e03bd754174e2c5d45f2872) tests: Fixed test-timeout.js events unit test (@Turbo87)
-- [aed1c71](https://github.com/mikeal/request/commit/aed1c71fac0047b66a236a990a5569445cfe995d) Added Travis CI configuration file (@Turbo87)
-- [#683](https://github.com/mikeal/request/pull/683) Travis CI support (@Turbo87)
-- [8bfa640](https://github.com/mikeal/request/commit/8bfa6403ce03cbd3f3de6b82388bfcc314e56c61) dependencies: Set `tough-cookie` as optional dependency (@Turbo87)
-- [bcc138d](https://github.com/mikeal/request/commit/bcc138da67b7e1cf29dc7d264a73d8b1d1f4b0e4) dependencies: Set `form-data` as optional dependency (@Turbo87)
-- [751ac28](https://github.com/mikeal/request/commit/751ac28b7f13bfeff2a0e920ca2926a005dcb6f0) dependencies: Set `tunnel-agent` as optional dependency (@Turbo87)
-- [6d7c1c9](https://github.com/mikeal/request/commit/6d7c1c9d8e3a300ff6f2a93e7f3361799acf716b) dependencies: Set `http-signature` as optional dependency (@Turbo87)
-- [733f1e3](https://github.com/mikeal/request/commit/733f1e3ae042a513a18cde1c6e444b18ee07ad66) Added .npmignore file (@Turbo87)
-- [e2fc346](https://github.com/mikeal/request/commit/e2fc346b7e5e470fcd36189bcadf63c53feebb22) dependencies: Set `hawk` as optional dependency (@Turbo87)
-- [e87d45f](https://github.com/mikeal/request/commit/e87d45fe89ea220035bf07696a70292763f7135f) dependencies: Set `aws-sign` as optional dependency (@Turbo87)
-- [1cd81ba](https://github.com/mikeal/request/commit/1cd81ba30908b77cff2fa618aeb232fefaa53ada) lib: Added optional() function (@Turbo87)
-- [28c2c38](https://github.com/mikeal/request/commit/28c2c3820feab0cc719df213a60838db019f3e1a) dependencies: Set `oauth-sign` as optional dependency (@Turbo87)
-- [2ceddf7](https://github.com/mikeal/request/commit/2ceddf7e793feb99c5b6a76998efe238965b22cd) TravisCI: Test with and without optional dependencies (@Turbo87)
-- [#682](https://github.com/mikeal/request/pull/682) Optional dependencies (@Turbo87)
-- [2afab5b](https://github.com/mikeal/request/commit/2afab5b665a2e03becbc4a42ad481bb737405655) Handle blank password in basic auth. (@diversario)
-- [cabe5a6](https://github.com/mikeal/request/commit/cabe5a62dc71282ce8725672184efe9d97ba79a5) Handle `auth.password` and `auth.username`. (@diversario)
-- [#690](https://github.com/mikeal/request/pull/690) Handle blank password in basic auth. (@diversario)
-- [33100c3](https://github.com/mikeal/request/commit/33100c3c7fa678f592374f7b2526fe9a0499b6f6) Typo (@VRMink)
-- [#694](https://github.com/mikeal/request/pull/694) Typo in README (@ExxKA)
-- [9072ff1](https://github.com/mikeal/request/commit/9072ff1556bcb002772838a94e1541585ef68f02) Edited README.md for formatting and clarity of phrasing (@Zearin)
-- [#696](https://github.com/mikeal/request/pull/696) Edited README.md for formatting and clarity of phrasing (@Zearin)
-- [07ee58d](https://github.com/mikeal/request/commit/07ee58d3a8145740ba34cc724f123518e4b3d1c3) Fixing listing in callback part of docs. (@lukasz-zak)
-- [#710](https://github.com/mikeal/request/pull/710) Fixing listing in callback part of docs. (@lukasz-zak)
-- [8ee21d0](https://github.com/mikeal/request/commit/8ee21d0dcc637090f98251eba22b9f4fd1602f0e) Request.multipart no longer crashes when header 'Content-type' is present (@pastaclub)
-- [#715](https://github.com/mikeal/request/pull/715) Request.multipart no longer crashes when header 'Content-type' present (@pastaclub)
-- [8b04ca6](https://github.com/mikeal/request/commit/8b04ca6ad8d025c275e40b806a69112ac53bd416) doc: Removed use of gendered pronouns (@oztu)
-- [#719](https://github.com/mikeal/request/pull/719) Made a comment gender neutral. (@oztu)
-- [8795fc6](https://github.com/mikeal/request/commit/8795fc68cce26b9a45d10db9eaffd4bc943aca3a) README.md: add custom HTTP Headers example. (@tcort)
-- [#724](https://github.com/mikeal/request/pull/724) README.md: add custom HTTP Headers example. (@tcort)
-- [c5d5b1f](https://github.com/mikeal/request/commit/c5d5b1fcf348e768943fe632a9a313d704d35c65) Changing dep. (@mikeal)
-- [bf04163](https://github.com/mikeal/request/commit/bf04163883fa9c62d4e1a9fdd64d6efd7723d5f8) 2.28.0 (@mikeal)
+### v2.28.0 (2013/12/04)
+- [#724](https://github.com/request/request/pull/724) README.md: add custom HTTP Headers example. (@tcort)
+- [#719](https://github.com/request/request/pull/719) Made a comment gender neutral. (@oztu)
+- [#715](https://github.com/request/request/pull/715) Request.multipart no longer crashes when header 'Content-type' present (@pastaclub)
+- [#710](https://github.com/request/request/pull/710) Fixing listing in callback part of docs. (@lukasz-zak)
+- [#696](https://github.com/request/request/pull/696) Edited README.md for formatting and clarity of phrasing (@Zearin)
+- [#694](https://github.com/request/request/pull/694) Typo in README (@VRMink)
+- [#690](https://github.com/request/request/pull/690) Handle blank password in basic auth. (@diversario)
+- [#682](https://github.com/request/request/pull/682) Optional dependencies (@Turbo87)
+- [#683](https://github.com/request/request/pull/683) Travis CI support (@Turbo87)
+- [#674](https://github.com/request/request/pull/674) change cookie module,to tough-cookie.please check it . (@sxyizhiren)
+- [#666](https://github.com/request/request/pull/666) make `ciphers` and `secureProtocol` to work in https request (@richarddong)
+- [#656](https://github.com/request/request/pull/656) Test case for #304. (@diversario)
+- [#662](https://github.com/request/request/pull/662) option.tunnel to explicitly disable tunneling (@seanmonstar)
+- [#659](https://github.com/request/request/pull/659) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm)
+- [#630](https://github.com/request/request/pull/630) Send random cnonce for HTTP Digest requests (@wprl)
-### v2.27.1 (2013/08/15 21:30 +00:00)
-- [a80a026](https://github.com/mikeal/request/commit/a80a026e362a9462d6948adc1b0d2831432147d2) 2.27.1 (@mikeal)
+### v2.27.0 (2013/08/15)
+- [#619](https://github.com/request/request/pull/619) decouple things a bit (@joaojeronimo)
-### v2.27.0 (2013/08/15 21:30 +00:00)
-- [3627b9c](https://github.com/mikeal/request/commit/3627b9cc7752cfe57ac609ed613509ff61017045) rename Request and remove .DS_Store (@joaojeronimo)
-- [920f9b8](https://github.com/mikeal/request/commit/920f9b88f7dd8f8d153e72371b1bf2d16d5e4160) rename Request (@joaojeronimo)
-- [c243cc6](https://github.com/mikeal/request/commit/c243cc66131216bb57bcc0fd79c250a7927ee424) for some reason it removed request.js (@joaojeronimo)
-- [#619](https://github.com/mikeal/request/pull/619) decouple things a bit (@CrowdProcess)
-- [ed4ecc5](https://github.com/mikeal/request/commit/ed4ecc5ae5cd1d9559a937e84638c9234244878b) Try normal stringify first, then fall back to safe stringify (@mikeal)
-- [5642ff5](https://github.com/mikeal/request/commit/5642ff56e64c19e8183dcd5b6f9d07cca295a79e) 2.27.0 (@mikeal)
+### v2.26.0 (2013/08/07)
+- [#613](https://github.com/request/request/pull/613) Fixes #583, moved initialization of self.uri.pathname (@lexander)
+- [#605](https://github.com/request/request/pull/605) Only include ":" + pass in Basic Auth if it's defined (fixes #602) (@bendrucker)
-### v2.26.1 (2013/08/07 16:31 +00:00)
-- [b422510](https://github.com/mikeal/request/commit/b422510ba16315c3e0e1293a17f3a8fa7a653a77) 2.26.1 (@mikeal)
+### v2.24.0 (2013/07/23)
+- [#596](https://github.com/request/request/pull/596) Global agent is being used when pool is specified (@Cauldrath)
+- [#594](https://github.com/request/request/pull/594) Emit complete event when there is no callback (@RomainLK)
+- [#601](https://github.com/request/request/pull/601) Fixed a small typo (@michalstanko)
-### v2.26.0 (2013/08/07 16:31 +00:00)
-- [3b5b62c](https://github.com/mikeal/request/commit/3b5b62cdd4f3b92e63a65d3a7265f5a85b11c4c9) Only include :password in Basic Auth if it's defined (fixes #602) (@bendrucker)
-- [#605](https://github.com/mikeal/request/pull/605) Only include ":" + pass in Basic Auth if it's defined (fixes #602) (@bendrucker)
-- [cce2c2c](https://github.com/mikeal/request/commit/cce2c2c8ea5b0136932b2432e4e25c0124d58d5a) Moved init of self.uri.pathname (@lexander)
-- [08793ec](https://github.com/mikeal/request/commit/08793ec2f266ef88fbe6c947e6b334e04d4b9dc9) Fix all header casing issues forever. (@mikeal)
-- [#613](https://github.com/mikeal/request/pull/613) Fixes #583, moved initialization of self.uri.pathname (@lexander)
-- [f98ff99](https://github.com/mikeal/request/commit/f98ff990d294165498c9fbf79b2de12722e5c842) Update this old ass readme with some new HOTNESS! (@mikeal)
-- [3312010](https://github.com/mikeal/request/commit/3312010f72d035f22b87a6d8d463f0d91b88fea1) markdown badge instead. (@mikeal)
-- [9cf657c](https://github.com/mikeal/request/commit/9cf657c1f08bf460911b8bb0a8c5c0d3ae6135c7) Shorter title. (@mikeal)
-- [2c61d66](https://github.com/mikeal/request/commit/2c61d66f1dc323bb612729c7320797b79b22034c) put Request out (@joaojeronimo)
-- [28513a1](https://github.com/mikeal/request/commit/28513a1b371452699438c0eb73471f8969146264) 2.26.0 (@mikeal)
+### v2.23.0 (2013/07/23)
+- [#589](https://github.com/request/request/pull/589) Prevent setting headers after they are sent (@geek)
+- [#587](https://github.com/request/request/pull/587) Global cookie jar disabled by default (@threepointone)
-### v2.25.1 (2013/07/23 21:51 +00:00)
-- [6387b21](https://github.com/mikeal/request/commit/6387b21a9fb2e16ee4dd2ab73b757eca298587b5) 2.25.1 (@mikeal)
+### v2.22.0 (2013/07/05)
+- [#544](https://github.com/request/request/pull/544) Update http-signature version. (@davidlehn)
+- [#581](https://github.com/request/request/pull/581) Fix spelling of "ignoring." (@bigeasy)
+- [#568](https://github.com/request/request/pull/568) use agentOptions to create agent when specified in request (@SamPlacette)
+- [#564](https://github.com/request/request/pull/564) Fix redirections (@criloz)
+- [#541](https://github.com/request/request/pull/541) The exported request function doesn't have an auth method (@tschaub)
+- [#542](https://github.com/request/request/pull/542) Expose Request class (@regality)
-### v2.25.0 (2013/07/23 21:51 +00:00)
-- [828f12a](https://github.com/mikeal/request/commit/828f12a1ae0f187deee4d531b2eaf7531169aaf2) 2.25.0 (@mikeal)
+### v2.21.0 (2013/04/30)
+- [#536](https://github.com/request/request/pull/536) Allow explicitly empty user field for basic authentication. (@mikeando)
+- [#532](https://github.com/request/request/pull/532) fix typo (@fredericosilva)
+- [#497](https://github.com/request/request/pull/497) Added redirect event (@Cauldrath)
+- [#503](https://github.com/request/request/pull/503) Fix basic auth for passwords that contain colons (@tonistiigi)
+- [#521](https://github.com/request/request/pull/521) Improving test-localAddress.js (@noway421)
+- [#529](https://github.com/request/request/pull/529) dependencies versions bump (@jodaka)
-### v2.24.1 (2013/07/23 20:51 +00:00)
-- [29ae1bc](https://github.com/mikeal/request/commit/29ae1bc454c03216beeea69d65b538ce4f61e8c1) 2.24.1 (@mikeal)
-
-### v2.24.0 (2013/07/23 20:51 +00:00)
-- [f667318](https://github.com/mikeal/request/commit/f66731870d5f3e0e5655cd89612049b540c34714) Fixed a small typo (@michalstanko)
-- [#601](https://github.com/mikeal/request/pull/601) Fixed a small typo (@michalstanko)
-- [#594](https://github.com/mikeal/request/pull/594) Emit complete event when there is no callback (@RomainLK)
-- [#596](https://github.com/mikeal/request/pull/596) Global agent is being used when pool is specified (@Cauldrath)
-- [41ce492](https://github.com/mikeal/request/commit/41ce4926fb08242f19135fd3ae10b18991bc3ee0) New deps. (@mikeal)
-- [8176c94](https://github.com/mikeal/request/commit/8176c94d5d17bd14ef4bfe459fbfe9cee5cbcc6f) 2.24.0 (@mikeal)
-
-### v2.23.1 (2013/07/23 02:45 +00:00)
-- [63f31cb](https://github.com/mikeal/request/commit/63f31cb1d170a4af498fbdd7566f867423caf8e3) 2.23.1 (@mikeal)
-
-### v2.23.0 (2013/07/23 02:44 +00:00)
-- [758f598](https://github.com/mikeal/request/commit/758f598de8d6024db3fa8ee7d0a1fc3e45c50f53) Initial commit. Request package. (@mikeal)
-- [104cc94](https://github.com/mikeal/request/commit/104cc94839d4b71aaf3681142daefba7ace78c94) Removing unnecessary markup. (@mikeal)
-- [12a4cb8](https://github.com/mikeal/request/commit/12a4cb88b949cb4a81d51189d432c25c08522a87) Matching node documentation style. (@mikeal)
-- [ab96993](https://github.com/mikeal/request/commit/ab969931106b10b5f8658dc9e0f512c5dfc2a7da) Release tarball. (@mikeal)
-- [e7e37ad](https://github.com/mikeal/request/commit/e7e37ad537081a040ea3e527aac23ae859b40b2c) Removing old tarball. (@mikeal)
-- [e66e90d](https://github.com/mikeal/request/commit/e66e90dd814ae7bfbcd52003609d7bde9eafea57) Adding automatic redirect following. (@mikeal)
-- [2fc5b84](https://github.com/mikeal/request/commit/2fc5b84832ae42f6ddb081b1909d0a6ca00c8d51) Adding SSL support. (@mikeal)
-- [a3ac375](https://github.com/mikeal/request/commit/a3ac375d4b5800a038ae26233425fadc26866fbc) Fixing bug where callback fired for every redirect. (@mikeal)
-- [1139efe](https://github.com/mikeal/request/commit/1139efedb5aad4a328c1d8ff45fe77839a69169f) Cleaning up tests. (@mikeal)
-- [bb49fe6](https://github.com/mikeal/request/commit/bb49fe6709fa06257f4b7aadc2e450fd45a41328) Rolling version. (@mikeal)
-- [4ff3493](https://github.com/mikeal/request/commit/4ff349371931ec837339aa9082c4ac7ddd4c7c35) Updates to README.md (@mikeal)
-- [1c9cf71](https://github.com/mikeal/request/commit/1c9cf719c92b02ba85c4e47bd2b92a3303cbe1cf) Adding optional body buffer. (@mikeal)
-- [49dfef4](https://github.com/mikeal/request/commit/49dfef42630c4fda6fb208534c00638dc0f06a6b) Rolling version. (@mikeal)
-- [ab40cc8](https://github.com/mikeal/request/commit/ab40cc850652e325fcc3b0a44ee7303ae0a7b77f) Preserve the original full path. (@mikeal)
-- [6d70f62](https://github.com/mikeal/request/commit/6d70f62c356f18098ca738b3dbedcf212ac3d8d8) Rolling version. (@mikeal)
-- [e2ca15a](https://github.com/mikeal/request/commit/e2ca15a0f7e986e3063977ee9bd2eb69e86bdb1f) Fixing bugs and rolling version. (@mikeal)
-- [8165254](https://github.com/mikeal/request/commit/81652543d3a09553cbf33095a7932dec53ccecc2) Cleanup. Fixing '' === '/' path bug. (@mikeal)
-- [a0536a4](https://github.com/mikeal/request/commit/a0536a46d0b91e204fbde1e4341461bc827c9542) Rolling version. (@mikeal)
-- [9ccaad7](https://github.com/mikeal/request/commit/9ccaad7dce05e5dcc3eacaf1500404622a0d8067) Adding stream support for request and response bodies. (@mikeal)
-- [585166d](https://github.com/mikeal/request/commit/585166d979d4476e460e9835cc0516d04a9a3e11) Rolling version. (@mikeal)
-- [41111c8](https://github.com/mikeal/request/commit/41111c88d711da80ea123df238d62038b89769bf) Bugfix release for response stream. (@mikeal)
-- [86e375d](https://github.com/mikeal/request/commit/86e375d093700affe4d6d2b76a7acedbe8da140c) Remove host header when we add it. (@mikeal)
-- [3a6277c](https://github.com/mikeal/request/commit/3a6277c81cfd3457c760f2aaea44852ef832a1e8) Rolling version. (@mikeal)
-- [7a11f69](https://github.com/mikeal/request/commit/7a11f69d5353ecc1319e2e91ca4aefbaf0338136) writing requestBodyStream into request (@beanieboi)
-- [186e9cf](https://github.com/mikeal/request/commit/186e9cf692511d768f8016d311609a0a0a315af6) Using sys.pump (@mikeal)
-- [09e7ade](https://github.com/mikeal/request/commit/09e7ade541e1d40316a3f153128871a353e707b1) Fixing host port addition. Rolling version. (@mikeal)
-- [cec3f3f](https://github.com/mikeal/request/commit/cec3f3f619322f27e2a82c7fd8971722f98d04d6) Using builtin base64. (@mikeal)
-- [2a2e2a2](https://github.com/mikeal/request/commit/2a2e2a2f5c4760d4da3caa1a0f2d14c31a4222dc) new structure. new convenience methods (@mikeal)
-- [f835b5f](https://github.com/mikeal/request/commit/f835b5fb605506b8ecd3c17bebe9ed54f0066cfc) removing old files. (@mikeal)
-- [91616c4](https://github.com/mikeal/request/commit/91616c4e4f488f75a8b04b5b6f0ceef7e814cffd) Adding better redirect handling. (@mikeal)
-- [3a95433](https://github.com/mikeal/request/commit/3a95433cbec9693a16ff365148489a058720ae7c) Fixing tests. (@mikeal)
-- [38eb1d2](https://github.com/mikeal/request/commit/38eb1d2fa8dea582bb7c3fb37a7b05ff91857a46) By popular demand, proxy support! Not really tested yet but it seems to kinda work. (@mikeal)
-- [45d41df](https://github.com/mikeal/request/commit/45d41dff63f36b25b3403e59c8b172b7aa9ed373) Added proxy auth. (@mikeal)
-- [85e3d97](https://github.com/mikeal/request/commit/85e3d97e0dced39a3769c4e3f2707ba3aaab1eaa) Fixing for non-proxy case. (@mikeal)
-- [f796da7](https://github.com/mikeal/request/commit/f796da74849d2b0732bd1bae1d2dcaf1243142c1) Fixing relative uri's for forwards. (@mikeal)
-- [dead30e](https://github.com/mikeal/request/commit/dead30ebef9c3ff806b895e2bd32f52ba3988c69) Adding support for specifying an encoding for the response body. (@mikeal)
-- [9433344](https://github.com/mikeal/request/commit/943334488dcc8e7f90727b86f9eb1bc502c33b4f) Removing debugging statement (@mikeal)
-- [41efb7a](https://github.com/mikeal/request/commit/41efb7a7dcca3b47e97c23c6cdbd3e860d3bd82b) Error on maxRedirects exceeded. (@mikeal)
-- [9549570](https://github.com/mikeal/request/commit/95495701fa4e99a3ab85acdab71ecdaabe0dbd45) Allow options.url, people do it all the time, might as well just support it. (@mikeal)
-- [21a53c0](https://github.com/mikeal/request/commit/21a53c016edcc113e809219639807b46d29dba36) Pumping version. (@mikeal)
-- [aca9782](https://github.com/mikeal/request/commit/aca9782285fe1d727570fe8d799561f45d49048e) Fixing byteLength !== string lenght issues. (@mikeal)
-- [a77c296](https://github.com/mikeal/request/commit/a77c296431eda2a211f59bdb88654c4a64ed4ef3) Don't rely on automatic semicolon insertion (pretty please :) (@papandreou)
-- [8b02f29](https://github.com/mikeal/request/commit/8b02f29c9019dd1d1dd291dd85889b26f592a137) Also set content-length when options.body is the empty string. (@papandreou)
-- [023281c](https://github.com/mikeal/request/commit/023281ca9b4414a9bc0170c2b08aaf886a7a08f7) Simplified boolean logic. (@papandreou)
-- [4f897fd](https://github.com/mikeal/request/commit/4f897fdd6c7c93bea73dbf34623f09af63bb1ed4) Simplified check for whether response.headers.location starts with "http:" or "https:". (@papandreou)
-- [6d7db85](https://github.com/mikeal/request/commit/6d7db85cadf401dffdec07a4d66822207898c69e) Fixed double var declaration. (@papandreou)
-- [97255cf](https://github.com/mikeal/request/commit/97255cfd2a4aa8f34d307e7cd96fe1c1f13cb26a) Process redirects as soon as the response arrives. Prevents the uninteresting redirect response from being pumped into responseBodyStream. (@papandreou)
-- [b2af15f](https://github.com/mikeal/request/commit/b2af15f4fcbe1115cf8b53c5ae89fbf2365bfffc) New feature: If options.noBuffer is true, don't buffer up the response, just return it. Most of the time getting a readable stream is much more flexible than having the option to pipe the response into a writable stream. For one thing, the stream can be paused. (@papandreou)
-- [fee5f89](https://github.com/mikeal/request/commit/fee5f89159a8f36b25df509c55093bf7ebd1c993) A few fixes/changes from papandreou's code, also added new semantics for onResponse. (@mikeal)
-- [fa72fcb](https://github.com/mikeal/request/commit/fa72fcb950029b222f0621e2d49304e35d08c380) Updated documentation. (@mikeal)
-- [4fc7209](https://github.com/mikeal/request/commit/4fc72098e7eeb9518951b9306115340ffdcce7ce) Fix for both onResponse and callback (@mikeal)
-- [3153436](https://github.com/mikeal/request/commit/3153436404fca865a65649d46eb22d9797128c9d) Adding license information. (@mikeal)
-- [59570de](https://github.com/mikeal/request/commit/59570dec37913c7e530303a83f03781d9aca958c) Fix for unescaping passwords for basic auth. (@notmatt)
-- [0d771ab](https://github.com/mikeal/request/commit/0d771ab7882b97d776179972c51c59386f91b953) require querystring (@notmatt)
-- [875f79b](https://github.com/mikeal/request/commit/875f79b6a40340457fafafdadac813cfa5343689) Allow request's body to be an object. (@Stanley)
-- [86895b9](https://github.com/mikeal/request/commit/86895b9c37f7b412b7df963c2a75361ff402d8c5) Merge branch 'master' of github.com:Stanley/request (@Stanley)
-- [4c9c984](https://github.com/mikeal/request/commit/4c9c984cb37bfd4e901ce24b0e9b283604c27bf4) Better tests. (@mikeal)
-- [02f6b38](https://github.com/mikeal/request/commit/02f6b38c1697a55ed43940d1fd0bef6225d4faa2) Added specs for body option (@Stanley)
-- [af66607](https://github.com/mikeal/request/commit/af666072a22b8df4d75fe71885139059f56ea5ee) Made specs pass (@Stanley)
-- [641ec05](https://github.com/mikeal/request/commit/641ec052dd95797816e781b2c3ac2524841db7cb) Merge branch 'master' of https://github.com/Stanley/request into jsonbody (@mikeal)
-- [ab4c96b](https://github.com/mikeal/request/commit/ab4c96be1c002c10806d967a4b266543f8b0267c) Moved spec tests to normal node script tests. Style changes to code and docs. (@mikeal)
-- [fc2a7ef](https://github.com/mikeal/request/commit/fc2a7ef301c1266938a5aeb539e4f3fc3b5191dd) Clearer wording for json option. (@mikeal)
-- [01371d7](https://github.com/mikeal/request/commit/01371d728082e22aabeb840da82a30aec62d7d8a) Removing specs loader. (@mikeal)
-- [560dadd](https://github.com/mikeal/request/commit/560dadd6cbd293622c66cd82b5506704c9850b13) Adding newline to end of test files, makes for cleaner diffs in the future. (@mikeal)
-- [a0348dd](https://github.com/mikeal/request/commit/a0348dd0fef462c3c678a639619c27101c757035) Add pass message when tests finish. (@mikeal)
-- [da77a0e](https://github.com/mikeal/request/commit/da77a0e152c1dd43f5c1e698110d23e4d32280db) Adding better debug message on failures for GET tests. (@mikeal)
-- [6aade82](https://github.com/mikeal/request/commit/6aade822a90724a47176771d137e30b0a702e7ef) throw on error. (@mikeal)
-- [4f41b8d](https://github.com/mikeal/request/commit/4f41b8dbbf9a93c53d5ccdf483c9d7803e279916) Rolling version. (@mikeal)
-- [7cf01f0](https://github.com/mikeal/request/commit/7cf01f0481afb367b5d0d4878645ac535cfe9a2e) master is moving to node v0.3.6+ (@mikeal)
-- [cb403a4](https://github.com/mikeal/request/commit/cb403a4cfdbe3d98feb9151fdbdae1e1436e59ab) Initial support for 0.3.6+.\n\nExperimental support for Request objects as streams. It's untested and requires a pending patch to node.js (@mikeal)
-- [a3c80f9](https://github.com/mikeal/request/commit/a3c80f98f42f25d4cb02d5d9e34ba0e67cc89293) Adding defaults call. (@mikeal)
-- [55f22f9](https://github.com/mikeal/request/commit/55f22f96365c57aa8687de951e3f9ed982eba408) Request will keep it's own agent pool so that it can expose a maxSockets setting for easy pool sizing. (@mikeal)
-- [004741c](https://github.com/mikeal/request/commit/004741c23dc0eaf61f111161bb913ba418e033e4) Fixing reference error. (@mikeal)
-- [8548541](https://github.com/mikeal/request/commit/85485414150fbac58b08126b3684f81dcb930bf1) Simplified pool implementation. (@mikeal)
-- [9121c47](https://github.com/mikeal/request/commit/9121c47e4cbe47bccc20a75e0e6c6c098dce04fb) Default to globalPool. (@mikeal)
-- [9ec3490](https://github.com/mikeal/request/commit/9ec3490aefd52f05b57e6db13730ace54b4439d1) Support for https. Requires pending patch in node core for consistent Agent API. (@mikeal)
-- [146b154](https://github.com/mikeal/request/commit/146b154a1a31ae7a30aa9f28e891e4824af548fa) Fixes for reference errors. (@mikeal)
-- [8756120](https://github.com/mikeal/request/commit/8756120f83ceb94f8ba600acba274ba512696eef) Only create an agent when a relevant option is passed. (@mikeal)
-- [cc3cf03](https://github.com/mikeal/request/commit/cc3cf0322847982875ff32a7cef25c39c29630ba) New HTTP client doesn't require such explicit error listener management. (@mikeal)
-- [f7c0379](https://github.com/mikeal/request/commit/f7c0379b99ac7989df7f934be67cc3ae979591bb) Fixing bug in .pipe() handling. Thanks tanepiper. (@mikeal)
-- [897a7ef](https://github.com/mikeal/request/commit/897a7ef020cefcb7a36c04a11e286238df8ecdaa) Fixes for streams, docs, and convenience methods. (@mikeal)
-- [7c2899a](https://github.com/mikeal/request/commit/7c2899a046b750eda495b23b2d58604260deddbc) Doc fixes. (@mikeal)
-- [f535fe1](https://github.com/mikeal/request/commit/f535fe1008c8f11bb37e16f95fe287ed93343704) Doc fixes. (@mikeal)
-- [d1deb5b](https://github.com/mikeal/request/commit/d1deb5b4dda4474fe9d480ad42ace664d89e73ee) Pipe tests, all passing! (@mikeal)
-- [d67a041](https://github.com/mikeal/request/commit/d67a041783df8d724662d82f9fb792db1be3f4f0) Moving basic example to the top. (@mikeal)
-- [6a98b9e](https://github.com/mikeal/request/commit/6a98b9e4a561b516b14d325c48785a9d6f40c514) Do not mix encoding option with pipeing. (@mikeal)
-- [06b67ef](https://github.com/mikeal/request/commit/06b67ef01f73572a6a9b586854d4c21be427bdb2) Disable pooling with {pool:false} (@mikeal)
-- [1c24881](https://github.com/mikeal/request/commit/1c248815b5dfffda43541e367bd4d66955ca0325) Send all arguments passed to stream methods. (@mikeal)
-- [7946393](https://github.com/mikeal/request/commit/7946393893e75df24b390b7ab19eb5b9d6c23891) Better errors and warnings for different pipe conditions. (@mikeal)
-- [ee2108d](https://github.com/mikeal/request/commit/ee2108db592113a0fe3840c361277fdd89f0c89c) Removing commented out legacy code. (@mikeal)
-- [5f838b3](https://github.com/mikeal/request/commit/5f838b3582eda465f366d7df89c6dd69920405f2) Fixing redirect issue, thanks @linus (@mikeal)
-- [c08758e](https://github.com/mikeal/request/commit/c08758e25290ee12278b3eb95d502645e0d66e4e) Adding del alias, thanks tanepiper. (@mikeal)
-- [0b7d675](https://github.com/mikeal/request/commit/0b7d6756c120ebf17ce6c70fc1ff4ecd6850e704) Keep require('https') from throwing if node is compiled with --without-ssl. This will still throw for Invalid Protocol if https is used. Which makes more sense and makes request work without SSl support. (@davglass)
-- [02fc9f7](https://github.com/mikeal/request/commit/02fc9f7cc8912402a5a98ddefaffa5f6da870562) Rolling version. Pushed new version to npm. (@mikeal)
-- [0b30532](https://github.com/mikeal/request/commit/0b30532ee1a3cabb177017acfa7885b157031df2) Sent a patch today to fix this in core but this hack will fix node that predates that fix to core. (@mikeal)
-- [5d5d8f4](https://github.com/mikeal/request/commit/5d5d8f43156b04fd3ceb312cfdf47cc2b0c4104d) Rolling version. Pushed new version to npm. (@mikeal)
-- [1c00080](https://github.com/mikeal/request/commit/1c000809f1795d2e21635a626cf730aba2049d3e) Fixing reference to tls. (@mikeal)
-- [4c355d1](https://github.com/mikeal/request/commit/4c355d1f87fced167e4b21770bfe6f8208f32b53) Be a better stream. (@mikeal)
-- [9bed22f](https://github.com/mikeal/request/commit/9bed22f22e007201d4faeebdb486603c3bb088c3) Rolled version and pushed to npm (@mikeal)
-- [34df8e2](https://github.com/mikeal/request/commit/34df8e2301dcfd10705b9ff3b257741b0816c8a1) typo in `request.defaults` (@clement)
-- [4d7a6d4](https://github.com/mikeal/request/commit/4d7a6d46fa481e43fe873b8c8fad2f7dd816dbb5) default value only if undefined in `request.defaults` + misplaced `return` statement (@clement)
-- [243a565](https://github.com/mikeal/request/commit/243a56563f1014318a467e46113b2c61b485f377) Adding support for request(url) (@mikeal)
-- [83a9cec](https://github.com/mikeal/request/commit/83a9cec3cb2f7a43a1e10c13da8d0dd72b937965) Fixing case where + is in user or password. (@mikeal)
-- [8bb7f98](https://github.com/mikeal/request/commit/8bb7f98ba8b78c217552c979811c07f1299318fe) making Request a duplex stream rather than adding special handling for pipes out. (@mikeal)
-- [55a1fde](https://github.com/mikeal/request/commit/55a1fdedcad1e291502ce10010dda7e478a1b503) pause and resume should act on response instead of request (@tobowers)
-- [63125a3](https://github.com/mikeal/request/commit/63125a33523e72e449ceef76da57b63522998282) Making request really smart about pipeing to itself so that we can do simple proxy cats (@mikeal)
-- [2f9e257](https://github.com/mikeal/request/commit/2f9e257bc39eb329eec660c6d675fb40172fc5a5) Rolling version since master right now has some pretty hot new code in it. (@mikeal)
-- [#31](https://github.com/mikeal/request/pull/31) Error on piping a request to a destination (@tobowers)
-- [b1f3d54](https://github.com/mikeal/request/commit/b1f3d5439d24b848b2bf3a6459eea74cb0e43df3) The "end" event that was supposed to be emitted to fix a core bug in NodeJS wasn't fired because it wasn't emitted on the response object. (@voxpelli)
-- [#35](https://github.com/mikeal/request/pull/35) The "end" event isn't emitted for some responses (@voxpelli)
-- [40b1c67](https://github.com/mikeal/request/commit/40b1c676e1d3a292719ad2dd9cf9354c101bad47) Rolling version. (@mikeal)
-- [9a28022](https://github.com/mikeal/request/commit/9a28022d0e438d0028e61a53e897689470025e50) Fixing bug in forwarding with new pipes logic. (@mikeal)
-- [44e4e56](https://github.com/mikeal/request/commit/44e4e5605b0a9e02036393bcbd3a8d91280f5611) Fixing big bug in forwarding logic. (@mikeal)
-- [b0cff72](https://github.com/mikeal/request/commit/b0cff72d63689d96e0b1d49a8a5aef9ccc71cb8b) Added timeout option to abort the request before the response starts responding (@mbrevoort)
-- [cc76b10](https://github.com/mikeal/request/commit/cc76b109590437bfae54116e3424b2c6e44a3b3e) corrected spelling error in README (@mbrevoort)
-- [#45](https://github.com/mikeal/request/pull/45) Added timeout option (@mbrevoort)
-- [1cca56b](https://github.com/mikeal/request/commit/1cca56b29bb670c53d5995e76c0b075a747b5ad7) Fixing for node http client refactor. (@mikeal)
-- [2a78aa3](https://github.com/mikeal/request/commit/2a78aa3f827e76c548e001fa519448b24466b518) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [ce12273](https://github.com/mikeal/request/commit/ce12273d3990c1446d3166bbd9e35c0e2435f137) New fs.ReadStream handling hotness. (@mikeal)
-- [535e30a](https://github.com/mikeal/request/commit/535e30a4bd4a8e41d97ffa6a4e99630ac09a4bcb) Adding pipe support to HTTP ServerResponse objects. (@mikeal)
-- [2f0cf6b](https://github.com/mikeal/request/commit/2f0cf6bf44edbaec4c0a0cb15a679302de7f0aff) Setting proper statusCode. (@mikeal)
-- [6e3ecb1](https://github.com/mikeal/request/commit/6e3ecb106c3a32101d80ac0f87968fddd3ac5e2c) Adding test for pipeing file to disc. (@mikeal)
-- [bbbb52e](https://github.com/mikeal/request/commit/bbbb52e406b65100b557caa3687a1aa04fab6ff3) Pumping version. (@mikeal)
-- [a10b6e4](https://github.com/mikeal/request/commit/a10b6e4c08478364b8079801fdb23f3530fcc85f) Adding reference to Request instance on response to make it easier on inline callbacks. fixes #43. (@mikeal)
-- [b9aff1f](https://github.com/mikeal/request/commit/b9aff1fe007dab3f93e666f047fa03a4e8f5f8b7) Add body property to resp when we have it as a shorthand. fixes #28 (@mikeal)
-- [411b30d](https://github.com/mikeal/request/commit/411b30dab1fe5b20880113aa801a2fdbb7c35c40) If the error is handled and not throw we would still process redirects. Fixes #34. (@mikeal)
-- [8f3c2b4](https://github.com/mikeal/request/commit/8f3c2b4f6dee8838f30e2430a23d5071128148f0) w00t! request 2.0 (@mikeal)
-- [9957542](https://github.com/mikeal/request/commit/9957542cc6928443f3a7769510673665b5a90040) valid semver. (@mikeal)
-- [31f5ee2](https://github.com/mikeal/request/commit/31f5ee28726ac7e14355cad0c6d2785f9ca422c6) Drastically improved header handling. (@mikeal)
-- [c99b8fc](https://github.com/mikeal/request/commit/c99b8fcd706ae035f6248669b017ac2995e45f31) Return destination stream from pipe(). (@mikeal)
-- [cba588c](https://github.com/mikeal/request/commit/cba588cec1e204d70f40f8bd11df0e27dc78ef0c) Style fixes. Bye Bye semi-colons. Mostly lined up with npm style. (@mikeal)
-- [8515a51](https://github.com/mikeal/request/commit/8515a510ccc0a661d7c28fce6e513a7d71be7f8f) Clearer spacing. Slightly more consistent. (@mikeal)
-- [3acd82a](https://github.com/mikeal/request/commit/3acd82a10e7d973fc5dbaa574c2e8906e48e1ee9) add failing test for issue #51 (@benatkin)
-- [68c17f6](https://github.com/mikeal/request/commit/68c17f6c9a3d7217368b3b8bc61203e6a14eb4f0) implement parsing json response when json is truthy (@benatkin)
-- [1cb1ec1](https://github.com/mikeal/request/commit/1cb1ec114b03394a0a530f245a857d8424cad02d) allow empty string (@benatkin)
-- [4f8d2df](https://github.com/mikeal/request/commit/4f8d2df9f845690667a56e7698dbaf23b5028177) support JSON APIs that don't set the write content type (@benatkin)
-- [#53](https://github.com/mikeal/request/pull/53) Parse json: Issue #51 (@benatkin)
-- [c63e6e9](https://github.com/mikeal/request/commit/c63e6e96378a2b050bddbe1b39337662f304dc95) Adding proxy to docs, don't know why this wasn't already in. (@mikeal)
-- [ef767d1](https://github.com/mikeal/request/commit/ef767d12f13a9c78d3df89add7556f5421204843) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [1b12d3a](https://github.com/mikeal/request/commit/1b12d3a9f48a6142d75fa1790c80eb313388ca44) Emit a proper error. (@mikeal)
-- [47314d7](https://github.com/mikeal/request/commit/47314d7cb41fe9c3a7717a502bed9cf1b6074ffc) Greatly expanded documentation. (@mikeal)
-- [e477369](https://github.com/mikeal/request/commit/e477369b4bbc271248ee8b686c556567570a6cca) Doc refinements. (@mikeal)
-- [fe4d221](https://github.com/mikeal/request/commit/fe4d22109bc1411c29b253756d609856327ff146) Fix for newer npm (@mikeal)
-- [7b2f788](https://github.com/mikeal/request/commit/7b2f788293e205edc7b46a7fd5304296b5e800e3) More doc cleanup. (@mikeal)
-- [f8eb2e2](https://github.com/mikeal/request/commit/f8eb2e229aca38547236d48066a0b3f9f8f67638) Copy headers so that they survive mutation. (@mikeal)
-- [59eab0e](https://github.com/mikeal/request/commit/59eab0e5e49c6d32697822f712ed725843e70010) Rolling version. (@mikeal)
-- [76bf5f6](https://github.com/mikeal/request/commit/76bf5f6c6e37f6cb972b3d4f1ac495a4ceaaa00d) Improvements to json handling and defaults. (@mikeal)
-- [81e2c40](https://github.com/mikeal/request/commit/81e2c4040a9911a242148e1d4a482ac6c745d8eb) Rolling version. (@mikeal)
-- [76d8924](https://github.com/mikeal/request/commit/76d8924cab295f80518a71d5903f1e815618414f) Proper checking and handling of json bodies (@mikeal)
-- [a8422a8](https://github.com/mikeal/request/commit/a8422a80895ed70e3871c7826a51933a75c51b69) Rolling version. (@mikeal)
-- [f236376](https://github.com/mikeal/request/commit/f2363760782c3d532900a86d383c34f3c94f6d5f) Adding pipefilter. (@mikeal)
-- [dd85f8d](https://github.com/mikeal/request/commit/dd85f8da969c2cc1825a7dfec6eac430de36440c) Rolling version. (@mikeal)
-- [#66](https://github.com/mikeal/request/pull/66) Do not overwrite established content-type headers for read stream deliver (@voodootikigod)
-- [b09212f](https://github.com/mikeal/request/commit/b09212f38fe736c2c92a1ee076cae9d0f4c612c3) Do not overwrite established content-type headers for read stream deliveries. (@voodootikigod)
-- [01bc25d](https://github.com/mikeal/request/commit/01bc25d25343d73e9f5731b3d0df1cf5923398d4) Only apply workaround on pre-0.5 node.js and move test to assert.equal (@mikeal)
-- [d487131](https://github.com/mikeal/request/commit/d487131ebc2f7a4bf265061845f7f3ea2fd3ed34) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [1200df5](https://github.com/mikeal/request/commit/1200df52bd334f9a44a43846159146b8f938fd9e) Rolling version. (@mikeal)
-- [8279362](https://github.com/mikeal/request/commit/82793626f6965884a3720d66f5a276d7d4d30873) fix global var leaks (@aheckmann)
-- [#67](https://github.com/mikeal/request/pull/67) fixed global variable leaks (@aheckmann)
-- [ab91204](https://github.com/mikeal/request/commit/ab9120495a89536c7152e3cdf17d684323b40474) Test that chunked responses are properly toString'ed (@isaacs)
-- [9bff39f](https://github.com/mikeal/request/commit/9bff39fa485f28d7f1754e72f026418ca1186783) Properly flatten chunked responses (@isaacs)
-- [8e4e956](https://github.com/mikeal/request/commit/8e4e95654391c71c22933ffd422fdc82d20ac059) Fix #52 Make the tests runnable with npm (@isaacs)
-- [a9aa9d6](https://github.com/mikeal/request/commit/a9aa9d6d50ef0481553da3e50e40e723a58de10a) Fix #71 Respect the strictSSL flag (@isaacs)
-- [#69](https://github.com/mikeal/request/pull/69) Flatten chunked requests properly (@isaacs)
-- [#73](https://github.com/mikeal/request/pull/73) Fix #71 Respect the strictSSL flag (@isaacs)
-- [#70](https://github.com/mikeal/request/pull/70) add test script to package.json (@isaacs)
-- [08ca561](https://github.com/mikeal/request/commit/08ca5617e0d8bcadee98f10f94a49cbf2dd02862) Fixing case where encoding is set. Also cleaning up trailing whitespace because my editor likes to do that now. (@mikeal)
-- [0be269f](https://github.com/mikeal/request/commit/0be269f7d9da6c3a14a59d5579546fee9d038960) Fixing case where no body exists. (@mikeal)
-- [2f37bbc](https://github.com/mikeal/request/commit/2f37bbc51ff84c3c28ae419138a19bd33a9f0103) Fixing timeout tests. (@mikeal)
-- [f551a2f](https://github.com/mikeal/request/commit/f551a2f02a87994249c2fd37dc8f20a29e8bf529) Fixing legacy naming of self as options. (@mikeal)
-- [717789e](https://github.com/mikeal/request/commit/717789ec9f690e9d5216ce1c27688eef822940cc) Avoid duplicate emit when using a timeout (@Marsup)
-- [#76](https://github.com/mikeal/request/pull/76) Bug when a request fails and a timeout is set (@Marsup)
-- [c1d255e](https://github.com/mikeal/request/commit/c1d255e5bcc5791ab69809913fe6d917ab93c8b7) global leakage in request.defaults (@isaacs)
-- [14070f2](https://github.com/mikeal/request/commit/14070f269c79cae6ef9e7f7a415867150599bb8e) Don't require SSL for non-SSL requests (@isaacs)
-- [4b8f696](https://github.com/mikeal/request/commit/4b8f6965e14c6fb704cf16f5bc011e4787cf32b2) Set proxy auth instead of just setting auth a second time (@isaacs)
-- [cd22fbd](https://github.com/mikeal/request/commit/cd22fbdb00b90c5c75187ecf41373cfbb4af5bcd) Merge branch 'proxy-auth-bug' (@isaacs)
-- [#78](https://github.com/mikeal/request/pull/78) Don't try to do strictSSL for non-ssl connections (@isaacs)
-- [d8c53fc](https://github.com/mikeal/request/commit/d8c53fceca3af385753880395c680f6ec3d4d560) Removing legacy call to sys.puts (@mikeal)
-- [731b32b](https://github.com/mikeal/request/commit/731b32b654bb217de3466b8d149ce480988bb24b) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [9c897df](https://github.com/mikeal/request/commit/9c897dffc7e238f10eb7e14c61978d6821c70f56) Enhance redirect handling: (1) response._redirectsFollowed reports the total number of redirects followed instead of being reset to 0; (2) add response.redirects, an array of the response.statusCode and response.headers.location for each redirect. (@danmactough)
-- [#81](https://github.com/mikeal/request/pull/81) Enhance redirect handling (@danmactough)
-- [4c84001](https://github.com/mikeal/request/commit/4c8400103ec18a0729e29e9ffb17dda65ce02f6d) Document strictSSL option (@isaacs)
-- [d517ac0](https://github.com/mikeal/request/commit/d517ac03278b3ebd9a46ca9f263bea68d655822b) allow passing in buffers as multipart bodies (@kkaefer)
-- [6563865](https://github.com/mikeal/request/commit/6563865b80573ad3c68834a6633aff6d322b59d5) bugs[web] should be bugs[url] (@isaacs)
-- [2625854](https://github.com/mikeal/request/commit/262585480c148c56772dfc8386cfc59d5d262ca0) add option followAllRedirects to follow post/put redirects
-- [bc057af](https://github.com/mikeal/request/commit/bc057affb58272d9152766956e5cde4ea51ca043) fix typo, force redirects to always use GET
-- [d68b434](https://github.com/mikeal/request/commit/d68b434693dbf848dff4c570c4249a35329cc24f) Support node 0.5.11-style url parsing (@isaacs)
-- [#96](https://github.com/mikeal/request/pull/96) Authless parsed url host support (@isaacs)
-- [9f66c6d](https://github.com/mikeal/request/commit/9f66c6d79bc6515d870b906df39bd9d6d9164994) Typo, causing 'TypeError: Cannot read property 'length' of undefined' (@isaacs)
-- [#97](https://github.com/mikeal/request/pull/97) Typo in previous pull causes TypeError in non-0.5.11 versions (@isaacs)
-- [b320e05](https://github.com/mikeal/request/commit/b320e05f2d84510f47a6b6857d091c8cd4d3ae2e) When no request body is being sent set 'content-length':0. fixes #89 (@mikeal)
-- [059916c](https://github.com/mikeal/request/commit/059916c545a0faa953cb8ac66b8c3ae243b1c8ce) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [248e9d6](https://github.com/mikeal/request/commit/248e9d65e73ac868948a82d07feaf33387723a1d) Fix for pipe() after response. Added response event, fixed and updated tests, removed deprecated stream objects. (@mikeal)
-- [a2e5d6e](https://github.com/mikeal/request/commit/a2e5d6e30d3e101f8c5a034ef0401fdde8608ccf) Fixing double callback firing. node 0.5 is much better about calling errors on the client object which, when aborting on timeout, predictable emits an error which then triggers a double callback. (@mikeal)
-- [5f80577](https://github.com/mikeal/request/commit/5f805775e6aeaaf229cc781439b29108fb69f373) Release for 0.6 (@mikeal)
-- [bf906de](https://github.com/mikeal/request/commit/bf906de601121b52c433b0af208550f1db892cde) Adding some oauth support, tested with Twitter. (@mikeal)
-- [8869b2e](https://github.com/mikeal/request/commit/8869b2e88cc305e224556c5ca75b7b59311911d9) Removing irrelevant comments. (@mikeal)
-- [8323eed](https://github.com/mikeal/request/commit/8323eed4915bb73b33544bc276f3840c13969134) Closed issue 82 : handling cookies - added tests too
-- [739f841](https://github.com/mikeal/request/commit/739f84166d619778ab96fd0b0f4f1f43e8b0fdda) Closed issue 82 : handling cookies - added tests too
-- [7daf841](https://github.com/mikeal/request/commit/7daf8415fb1a4e707ec54eb413169e49d8bbe521) Closed issue 82 : handling cookies - added tests too
-- [6c22041](https://github.com/mikeal/request/commit/6c22041a4719bf081c827dda8f35e7b79b4c39d9) changed README
-- [3db7f7d](https://github.com/mikeal/request/commit/3db7f7d38e95406b84f06fed52b69038b0250904) Updated README
-- [6181b7a](https://github.com/mikeal/request/commit/6181b7a8a4be75bcf75cd3ff6dacb8e910737e92) Documented request.cookie() and request.jar()
-- [fc44260](https://github.com/mikeal/request/commit/fc44260d13f0094bfe96d18878a11c6fe88b69e5) Tiny cookie example error on README
-- [366831b](https://github.com/mikeal/request/commit/366831b705b5d5ebfbec5f63b4b140cbafcb4515) Remove instanceof check for CookieJar (mikeal suggestion)
-- [88488cf](https://github.com/mikeal/request/commit/88488cf076efbd916b0326e0981e280c993963a7) Also add cookie to the user defined cookie jar (mikeal's suggestion)
-- [f6fef5b](https://github.com/mikeal/request/commit/f6fef5bfa4ba8e1dfa3022df8991716e5cba7264) Updated cookie documentation in README file
-- [b519044](https://github.com/mikeal/request/commit/b5190441a889164dfeb4148fac643fd7a87cfb51) request.defaults({jar: false}) disables cookies && also updated README
-- [856a65c](https://github.com/mikeal/request/commit/856a65cd28402efbe3831a68d73937564a27ea9b) Update jar documentation in the options also
-- [#102](https://github.com/mikeal/request/pull/102) Implemented cookies - closes issue 82: https://github.com/mikeal/request/issues/82 (@alessioalex)
-- [62592e7](https://github.com/mikeal/request/commit/62592e7fe9ee5ecaee80b8f5bc2400e4a277e694) Cookie bugs (@janjongboom)
-- [a06ad2f](https://github.com/mikeal/request/commit/a06ad2f955270974409e75c088e1f5d1f5298ff5) Follow redirects should work on PUT and POST requests as well. This is more consistent to other frameworks, e.g. .NET (@janjongboom)
-- [bf3f5d3](https://github.com/mikeal/request/commit/bf3f5d30fdabf6946096623fc3398bb66ed19a1f) Cookies shouldn't be discarded when followRedirect = true (@janjongboom)
-- [16db85c](https://github.com/mikeal/request/commit/16db85c07e6c2516269299640fdddca6db7bc051) Revert "Follow redirects should work on PUT and POST requests as well. This is more consistent to other frameworks, e.g. .NET" (@janjongboom)
-- [841664e](https://github.com/mikeal/request/commit/841664e309f329be98c1a011c634f5291af1eebc) Add test for proxy option (@dominictarr)
-- [#105](https://github.com/mikeal/request/pull/105) added test for proxy option. (@dominictarr)
-- [50d2d39](https://github.com/mikeal/request/commit/50d2d3934cd86d7142a4aab66017bb1ef82329cf) Fixing test, emitter matches on req.url so it needs the full url. (@mikeal)
-- [668a291](https://github.com/mikeal/request/commit/668a291013380af305eba12b1d5c7a5376a74c76) Adding some documentation for OAuth signing support. (@mikeal)
-- [04faa3b](https://github.com/mikeal/request/commit/04faa3bf2b1f4ec710414c6ec7231b24767b2f89) Minor improvements in example (@mikeal)
-- [0fddc17](https://github.com/mikeal/request/commit/0fddc1798dcd9b213e3f8aec504c61cecf4d7997) Another small fix to the url in the docs. (@mikeal)
-- [337649a](https://github.com/mikeal/request/commit/337649a08b4263c0d108cd4621475c8ff9cf8dd0) Add oauth to options. (@mikeal)
-- [#86](https://github.com/mikeal/request/pull/86) Can't post binary to multipart requests (@developmentseed)
-- [4e4d428](https://github.com/mikeal/request/commit/4e4d4285490be20abf89ff1fb54fb5088c01c00e) Update to Iris Couch URL (@jhs)
-- [#110](https://github.com/mikeal/request/pull/110) Update to Iris Couch URL (@iriscouch)
-- [d7af099](https://github.com/mikeal/request/commit/d7af0994b382466367f2cafc5376150e661eeb9d) Remove the global `i` as it's causing my test suites to fail with leak detection turned on. (@3rd-Eden)
-- [#117](https://github.com/mikeal/request/pull/117) Remove the global `i` (@3rd-Eden)
-- [b2a4ad1](https://github.com/mikeal/request/commit/b2a4ad1e7d7553230e932ea093d7f77f38147ef9) Force all cookie keys into lower case as suggested by LinusU (@jhurliman)
-- [055a726](https://github.com/mikeal/request/commit/055a7268b40425643d23bd6a4f09c7268dbab680) Applying a modified version of pull request #106 as suggested by janjongboom (@jhurliman)
-- [#121](https://github.com/mikeal/request/pull/121) Another patch for cookie handling regression (@jhurliman)
-- [a353f4e](https://github.com/mikeal/request/commit/a353f4eeb312ea378d34b624f5c4df33eefa152c) Merge remote-tracking branch 'upstream/master' (@janjongboom)
-- [#104](https://github.com/mikeal/request/pull/104) Cookie handling contains bugs (@janjongboom)
-- [a3be5ad](https://github.com/mikeal/request/commit/a3be5ad5ea112422ed00da632530b93bcf54727c) Fix encoding of characters like ( (@mikeal)
-- [dd2067b](https://github.com/mikeal/request/commit/dd2067bbbf77d1132c9ed480848645136b8a5521) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [ddc4e45](https://github.com/mikeal/request/commit/ddc4e453c3b9a0e11da4df156c5e15206abfc1ef) Pushed new version to npm (@mikeal)
-- [feee5eb](https://github.com/mikeal/request/commit/feee5ebd2ca8c09db25b5cb13cd951f7c4322a49) Real fix for encoding issues in javascript and oauth. (@mikeal)
-- [23896cd](https://github.com/mikeal/request/commit/23896cdc66d75ec176876167ff21da72b7ff181b) Pushed new version to npm. (@mikeal)
-- [a471ed2](https://github.com/mikeal/request/commit/a471ed2ca8acdca1010a0fc20434c5c9956b0d0c) HTTP redirect tests (@jhs)
-- [a4a9aa1](https://github.com/mikeal/request/commit/a4a9aa199ff958630791e131092ec332ada00a49) A self-signed certificate for upcoming HTTPS testing (@jhs)
-- [10ac6b9](https://github.com/mikeal/request/commit/10ac6b9db40263bec1bf63ee7e057000ffd2d7e9) HTTPS tests, for now a copy of the test-body tests (@jhs)
-- [105aed1](https://github.com/mikeal/request/commit/105aed1ff99add1957f91df7efabf406e262f463) Support an "httpModules" object for custom http/https module behavior (@jhs)
-- [#112](https://github.com/mikeal/request/pull/112) Support using a custom http-like module (@iriscouch)
-- [d05a875](https://github.com/mikeal/request/commit/d05a8753af576fc1adccc7ffe9633690371c05ee) Test for #129 (@mikeal)
-- [06cdfaa](https://github.com/mikeal/request/commit/06cdfaa3c29233dac3f47e156f2b5b3a0f0ae4b8) return body as buffer when encoding is null
-- [#132](https://github.com/mikeal/request/pull/132) return the body as a Buffer when encoding is set to null (@jahewson)
-- [4882e51](https://github.com/mikeal/request/commit/4882e519ed6b8d08795da5de37166148ce0ee440) fixed cookies parsing, updated tests (@afanasy)
-- [2be228e](https://github.com/mikeal/request/commit/2be228ec8b48a60028bd1d80c8cbebf23964f913) Change `host` to `hostname` in request hash
-- [#135](https://github.com/mikeal/request/pull/135) host vs hostname (@iangreenleaf)
-- [e24abc5](https://github.com/mikeal/request/commit/e24abc5cc2c6fa154ae04fe58a16d135eeba4951) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [c99c809](https://github.com/mikeal/request/commit/c99c809bb48b9c0193aae3789c5c844f7f6cbe92) Reverting host -> hostname because it breaks in pre-0.6. (@mikeal)
-- [a1134d8](https://github.com/mikeal/request/commit/a1134d855f928fde5c4fe9ee255c111da0195bfc) adding logging (@mikeal)
-- [#133](https://github.com/mikeal/request/pull/133) Fixed cookies parsing (@afanasy)
-- [9179471](https://github.com/mikeal/request/commit/9179471f9f63b6ba9c9078a35cb888337ce295e8) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [cbb180b](https://github.com/mikeal/request/commit/cbb180b0399074995c235a555e3e3e162d738f7c) Fixes to oauth test. (@mikeal)
-- [e1c351f](https://github.com/mikeal/request/commit/e1c351f92958634ccf3fbe78aa2f5b06d9c9a5fa) Published new version. (@mikeal)
-- [3ceee86](https://github.com/mikeal/request/commit/3ceee86f1f3aad3a6877d6d3813e087549f3b485) Formatting fixes. (@mikeal)
-- [18e1af5](https://github.com/mikeal/request/commit/18e1af5e38168dcb95c8ae29bb234f1ad9bbbdf9) Fixing log error. (@mikeal)
-- [edc19b5](https://github.com/mikeal/request/commit/edc19b5249f655714efa0f8fa110cf663b742921) Pushed new version. (@mikeal)
-- [f51c32b](https://github.com/mikeal/request/commit/f51c32bd6f4da0419ed8404b610c43ee3f21cf92) added "form" option to readme. (@petejkim)
-- [#144](https://github.com/mikeal/request/pull/144) added "form" option to readme (@petejkim)
-- [b58022e](https://github.com/mikeal/request/commit/b58022ecda782af93e35e5f9601013b90b09ca73) add "forever" method (@thejh)
-- [79d4651](https://github.com/mikeal/request/commit/79d46510ddff2e2c12c69f7ae4072ec489e27b0e) remove logging (@thejh)
-- [f87cbf6](https://github.com/mikeal/request/commit/f87cbf6ec6fc0fc2869c340114514c887b304a80) retry on ECONNRESET on reused socket (@thejh)
-- [1a91675](https://github.com/mikeal/request/commit/1a916757f4ec48b1282fddfa0aaa0fa6a1bf1267) Multipart requests should respect content-type if set; Issue #145 (@apeace)
-- [#146](https://github.com/mikeal/request/pull/146) Multipart should respect content-type if previously set (@apeace)
-- [#148](https://github.com/mikeal/request/pull/148) Retry Agent (@thejh)
-- [70c5b63](https://github.com/mikeal/request/commit/70c5b63aca29a7d1629fa2909ff5b7199bbf0fd1) Publishing new version to npm. (@mikeal)
-- [fc0f04b](https://github.com/mikeal/request/commit/fc0f04bab5d6be56a2c19d47d3e8386bd9a0b29e) Fix: timeout on socket, timeout after redirect
-- [ef79e59](https://github.com/mikeal/request/commit/ef79e59bbb88ed3e7d4368fe3ca5eee411bda345) Fix: timeout after redirect 2
-- [c32a218](https://github.com/mikeal/request/commit/c32a218da2296e89a269f1832d95b12c4aa10852) merge master (@jroes)
-- [d2d9b54](https://github.com/mikeal/request/commit/d2d9b545e5679b829d33deeba0b22f9050fd78b1) add line to docs describing followAllRedirects option (@jroes)
-- [#90](https://github.com/mikeal/request/pull/90) add option followAllRedirects to follow post/put redirects (@jroes)
-- [c08ab7e](https://github.com/mikeal/request/commit/c08ab7efaefd39c04deb6986716efe5a6069528e) Emit an event after we create the request object so that people can manipulate it before nextTick(). (@mikeal)
-- [#162](https://github.com/mikeal/request/pull/162) Fix issue #159 (@dpetukhov)
-- [e77a169](https://github.com/mikeal/request/commit/e77a1695c5c632c067857e99274f28a1d74301fe) fixing streaming example. fixes #164 (@mikeal)
-- [ee53386](https://github.com/mikeal/request/commit/ee53386d85975c79b801edbb4f5bb7ff4c5dc90b) fixes #127 (@mikeal)
-- [e2cd9de](https://github.com/mikeal/request/commit/e2cd9de9a9d10e1aa4cf4e26006bb30fa5086f0b) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [a0ab977](https://github.com/mikeal/request/commit/a0ab9770a8fb89f970bb3783ed4e6dde9e33511b) Added failing test for #125. (@papandreou)
-- [c80800a](https://github.com/mikeal/request/commit/c80800a834b0f8bc0fb40d1fad4d4165a83369fd) Fix cookie jar/headers.cookie collision. Closes #125. (@papandreou)
-- [1ac9e2d](https://github.com/mikeal/request/commit/1ac9e2d1bf776728a1fe676dd3693ef66f50f7f7) Redirect test: Also assert that the request cookie doesn't get doubled in the request for the landing page. (@papandreou)
-- [07bbf33](https://github.com/mikeal/request/commit/07bbf331e2a0d40d261487f6222e8cafee0e50e3) Fixes #150 (@mikeal)
-- [c640eed](https://github.com/mikeal/request/commit/c640eed292c06eac3ec89f60031ddf0fc0add732) Cookie jar handling: Don't double the cookies on each redirect (see discussion on #139). (@papandreou)
-- [808de8b](https://github.com/mikeal/request/commit/808de8b0ba49d4bb81590ec37a873e6be4d9a416) Adding some missing mime types #138 (@serby)
-- [#161](https://github.com/mikeal/request/pull/161) Fix cookie jar/headers.cookie collision (#125) (@papandreou)
-- [#168](https://github.com/mikeal/request/pull/168) Picking off an EasyFix by adding some missing mimetypes. (@serby)
-- [2a30487](https://github.com/mikeal/request/commit/2a304879f4218c1e46195d882bc81c0f874be329) bugfix - allow add cookie to wrapped request (defaults) (@fabianonunes)
-- [a18b4f1](https://github.com/mikeal/request/commit/a18b4f14559f56cf52ca1b421daa6a934d28d51b) Making pipeDest a public prototype method rather than keeping it private. (@mikeal)
-- [#170](https://github.com/mikeal/request/pull/170) can't create a cookie in a wrapped request (defaults) (@fabianonunes)
-- [49a0f60](https://github.com/mikeal/request/commit/49a0f604779c91dd1759a02cbb195ccbd8d73f5d) Structural refactor, getting read for composable API. (@mikeal)
-- [5daa0b2](https://github.com/mikeal/request/commit/5daa0b28b06cf109614f19e76b0e0b9b25ee3baf) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [e4df85c](https://github.com/mikeal/request/commit/e4df85c72221bf09ee7e1eb54f6c881851bd4164) Composable API for OAuth. (@mikeal)
-- [945ec40](https://github.com/mikeal/request/commit/945ec40baef968ddd468c3b4dfce01621e4a0e31) Composable form API (@mikeal)
-- [c30b47f](https://github.com/mikeal/request/commit/c30b47f229522a75af85da269157377b4a7dc37d) Use this, return this. (@mikeal)
-- [e908644](https://github.com/mikeal/request/commit/e908644a69f9107b954f13635736f1e640216aec) Composable multipart API. (@mikeal)
-- [e115677](https://github.com/mikeal/request/commit/e115677b1a03576eb96386986c350f211a4f38cd) Composable jar. Guard against overwrites on retry. (@mikeal)
-- [a482e48](https://github.com/mikeal/request/commit/a482e4802e11fd122b12e18d1b18b49850fef823) Updating copyright for the new year. (@mikeal)
-- [3c6581a](https://github.com/mikeal/request/commit/3c6581a9d4508fe5d75e111ae0fb94c5e0078404) Adding clobber argument for appending to headers. thanks @isaacs (@mikeal)
-- [54e6aca](https://github.com/mikeal/request/commit/54e6aca0ab5982621fc9b35500f2154e50c0c95d) Fixes #144. (@mikeal)
-- [12f4997](https://github.com/mikeal/request/commit/12f4997ed83bfbfefa3fc5b5635bc9a6829aa0d7) Fixing clobber. (@mikeal)
-- [2f34fd1](https://github.com/mikeal/request/commit/2f34fd13b7ec86cb1c67e0a58664b9e060a34a50) Added support for a "query" option value that is a hash of querystring values that is merged (taking precedence over) with the querystring passed in the uri string. (@csainty)
-- [a32d9e7](https://github.com/mikeal/request/commit/a32d9e7069533fb727a71730dbaa0f62ebefb731) Added a js based test runner so I can run tests on windows. (@csainty)
-- [e0b6ce0](https://github.com/mikeal/request/commit/e0b6ce063de0c4223c97982128bb8203caf4a331) Tidied up an issue where ?> was being appended to URLs. (@csainty)
-- [d47150d](https://github.com/mikeal/request/commit/d47150d6748a452df336d8de9743218028a876db) Refactored to match the composable style (@csainty)
-- [b7e0929](https://github.com/mikeal/request/commit/b7e0929837873a8132476bb2b4d2e2a0fdc7cd0f) implemented issue #173 allow uri to be first argument (@twilson63)
-- [b7264a6](https://github.com/mikeal/request/commit/b7264a6626481d5da50a28c91ea0be7b688c9daf) removed debug line and reset ports (@twilson63)
-- [76598c9](https://github.com/mikeal/request/commit/76598c92bee64376e5d431285ac1bf6783140dbb) removed npm-debug (@twilson63)
-- [#177](https://github.com/mikeal/request/pull/177) Issue #173 Support uri as first and optional config as second argument (@twilson63)
-- [0f24051](https://github.com/mikeal/request/commit/0f240517dea65337636a49cb1cc2b5327504430e) Renamed query to qs. It was actually my first choice, but there appeared to be conflicts with the qs = require('querystring'). These are no longer present though and must have been unrelated. (@csainty)
-- [becedaa](https://github.com/mikeal/request/commit/becedaaa7681b0c4ad5c0a9b9922fc950f091af2) Changed test structure to no longer require a server, modeled on the oauth tests. This also lets me revert some of the changes I had to make to the test server and proxy tests (@csainty)
-- [9b2bbf0](https://github.com/mikeal/request/commit/9b2bbf0c12e87a59320efac67759041cd4af913f) Modified how the qs function works, it now no longer tweaks the existing request uri, instead it recreates a new one. This allows me to revert all the other changes I had to make previously and gives a nice clean commit that is self contained. (@csainty)
-- [5ac7e26](https://github.com/mikeal/request/commit/5ac7e26ce4f7bf5a334df91df83699891171c0ae) failing test for .pipe(dst, opts) (@substack)
-- [3b2422e](https://github.com/mikeal/request/commit/3b2422e62fbd6359b841e59a2c1888db71a22c2c) fix for failing pipe opts test (@substack)
-- [8788c8b](https://github.com/mikeal/request/commit/8788c8b8cba96662e9d94a96eb04d96b904adea3) added uri param for post, put, head, del shortcuts (@twilson63)
-- [#179](https://github.com/mikeal/request/pull/179) fix to add opts in .pipe(stream, opts) (@substack)
-- [#180](https://github.com/mikeal/request/pull/180) Modified the post, put, head and del shortcuts to support uri optional param (@twilson63)
-- [37d0699](https://github.com/mikeal/request/commit/37d0699eb681e85b7df4896b0a68b6865e596cb3) Fixing end bug i introduced being stupid. (@mikeal)
-- [3a97292](https://github.com/mikeal/request/commit/3a97292f45273fa2cc937c0698ba19964780b4bb) fixed defaults functionality to support (uri, options, callback) (@twilson63)
-- [#182](https://github.com/mikeal/request/pull/182) Fix request.defaults to support (uri, options, callback) api (@twilson63)
-- [c94b200](https://github.com/mikeal/request/commit/c94b200258fa48697e386121a3e114ab7bed2ecf) Switched npm test from the bash script to a node script so that it is cross-platform. (@csainty)
-- [#176](https://github.com/mikeal/request/pull/176) Querystring option (@csainty)
-- [3b1e609](https://github.com/mikeal/request/commit/3b1e6094451e8d34c93353177de9d76e9a805e43) Adding defaults test back in. (@mikeal)
-- [b4ae0c2](https://github.com/mikeal/request/commit/b4ae0c2d50f018a90a3ec8daa1d14c92a99873b9) Fixing idiotic bug I introduced. (@mikeal)
-- [32f76c8](https://github.com/mikeal/request/commit/32f76c8baaf784dc2f4f1871153b1796bcebdcfe) Pushed new version to npm. (@mikeal)
-- [00d0d9f](https://github.com/mikeal/request/commit/00d0d9f432182f13a5b8aa2e3a2a144b5c179015) Adding accept header to json support. (@mikeal)
-- [0f580e6](https://github.com/mikeal/request/commit/0f580e6f6317c5301a52c0b6963d58e27112abca) Add abort support to the returned request (@itay)
-- [4505e6d](https://github.com/mikeal/request/commit/4505e6d39a44229bfe5dc4d9a920233e05a7dfdb) Fixing some edge streaming cases with redirects by reusing the Request object. (@mikeal)
-- [eed57af](https://github.com/mikeal/request/commit/eed57af8fe3e16632e9e0043d4d7f4d147dbfb8f) Published new version. (@mikeal)
-- [97386b5](https://github.com/mikeal/request/commit/97386b5d7315b5c83702ffc7d0b09e34ecb67e04) Fixing pretty bad bug from the composable refactor. (@mikeal)
-- [b693ce6](https://github.com/mikeal/request/commit/b693ce64e16aaa859d4edc86f82fbb11e00d33c0) Move abort to a prototype method, don't raise error (@itay)
-- [1330eef](https://github.com/mikeal/request/commit/1330eef3ec84a651a435c95cf1ff1a4003086440) Merge branch 'master' of git://github.com/mikeal/request (@itay)
-- [#188](https://github.com/mikeal/request/pull/188) Add abort support to the returned request (@itay)
-- [5ff4645](https://github.com/mikeal/request/commit/5ff46453e713da1ae66a0d510eda4919e4080abe) Style changes. (@mikeal)
-- [2dbd1e4](https://github.com/mikeal/request/commit/2dbd1e4350c2941b795b0e5ee7c0a00cd04cce09) Fixing new params style on master for head request. (@mikeal)
-- [14989b2](https://github.com/mikeal/request/commit/14989b2dfc6830dbdad5364930fba1d2995aba06) Pushed new version to npm. (@mikeal)
-- [0ea2351](https://github.com/mikeal/request/commit/0ea2351ef017ada9b8472f8d73086715ebe30c6a) Fixes #190. outdated check on options.json from before we had boolean support. (@mikeal)
-- [21bf78c](https://github.com/mikeal/request/commit/21bf78c264316f75f4e6c571461521cda6ccf088) Adds a block on DELETE requests in status 300-400 (@goatslacker)
-- [0c0c201](https://github.com/mikeal/request/commit/0c0c20139b28b21a860f72b8ce0124046fae421d) Adds tests for GH-119 Fix (@goatslacker)
-- [#193](https://github.com/mikeal/request/pull/193) Fixes GH-119 (@goatslacker)
-- [5815a69](https://github.com/mikeal/request/commit/5815a697347f20658dc2bdfd0d06e41d0aa0dac4) Fixes #194. setTimeout only works on node 0.6+ (@mikeal)
-- [1ddcd60](https://github.com/mikeal/request/commit/1ddcd605bc8936c5b3534e1cf9aa1b29fa2b060b) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [7b35b4f](https://github.com/mikeal/request/commit/7b35b4ff63bbdf133f0f600a88a87b5723d29bdf) Removing old checks for self.req, it's ensured if start() is called. Implementing early pause/resume for when streams try to pause/resume before any data is emitted. Fixes #195. (@mikeal)
-- [f01b79b](https://github.com/mikeal/request/commit/f01b79bb651f64065bac8877739223527f5b5592) Make ForeverAgent work with HTTPS (@isaacs)
-- [#197](https://github.com/mikeal/request/pull/197) Make ForeverAgent work with HTTPS (@isaacs)
-- [8d85b57](https://github.com/mikeal/request/commit/8d85b57ebb81c9d2d0a6b94aed41bf2ab0e3ad09) Forever inherits bugfix (@isaacs)
-- [#198](https://github.com/mikeal/request/pull/198) Bugfix on forever usage of util.inherits (@isaacs)
-- [37446f5](https://github.com/mikeal/request/commit/37446f54bb21cf9c83ffa81d354d799ae7ecf9ed) Add a test of HTTPS strict with CA checking (@isaacs)
-- [8378d2e](https://github.com/mikeal/request/commit/8378d2ef9b8121a9851d21b3f6ec8304bde61c9d) Support tunneling HTTPS requests over proxies (@isaacs)
-- [#199](https://github.com/mikeal/request/pull/199) Tunnel (@isaacs)
-- [f0052ac](https://github.com/mikeal/request/commit/f0052ac5e6ca9f3f4aa49f6cda6ba15eb5d8b8e6) Published new version to npm. (@mikeal)
-- [cea668f](https://github.com/mikeal/request/commit/cea668f6f7d444831313ccc0e0d301d25f2bd421) Adding more explicit error when undefined is passed as uri or options. (@mikeal)
-- [047b7b5](https://github.com/mikeal/request/commit/047b7b52f3b11f4c44a02aeb1c3583940ddb59c7) Fix special method functions that get passed an options object. (@mikeal)
-- [746de0e](https://github.com/mikeal/request/commit/746de0ef2f564534b29eeb8f296a59bd2c3086a7) pass through Basic authorization option for HTTPS tunneling
-- [6fda9d7](https://github.com/mikeal/request/commit/6fda9d7d75e24cc1302995e41e26a91e03fdfc9a) Always clobber internal objects for qs but preserve old querystring args when clobber is present. (@mikeal)
-- [75ca7a2](https://github.com/mikeal/request/commit/75ca7a25bc9c6102e87f3660a25835c7fcd70edb) Merge branch 'master' of https://github.com/mikeal/request
-- [3b9f0fd](https://github.com/mikeal/request/commit/3b9f0fd3da4ae74de9ec76e7c66c57a7f8641df2) Fix cookies so that attributes are case insensitive
-- [fddbd6e](https://github.com/mikeal/request/commit/fddbd6ee7d531bc4a82f629633b9d1637cb039e8) Properly set cookies during redirects
-- [0d0bdb7](https://github.com/mikeal/request/commit/0d0bdb793f908492d4086fae8744f1e33e68d8c6) Remove request body when following non-GET redirects
-- [#203](https://github.com/mikeal/request/pull/203) Fix cookie and redirect bugs and add auth support for HTTPS tunnel (@milewise)
-- [b5fa773](https://github.com/mikeal/request/commit/b5fa773994de1799cf53491db7f5f3ba32825b20) Replace all occurrences of special chars in RFC3986 (@chriso)
-- [bc6cd6c](https://github.com/mikeal/request/commit/bc6cd6ca6c6157bad76f0b2b23d4993f389ba977) documenting additional behavior of json option (@jphaas)
-- [80e4e43](https://github.com/mikeal/request/commit/80e4e43186de1e9dcfaa1c9a921451560b91267c) Fixes #215. (@mikeal)
-- [51f343b](https://github.com/mikeal/request/commit/51f343b9adfc11ec1b2ddcfb52a57e1e13feacb2) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [89c0f1d](https://github.com/mikeal/request/commit/89c0f1dd324bc65ad9c07436fb2c8220de388c42) titlecase authorization for oauth (@visnup)
-- [#217](https://github.com/mikeal/request/pull/217) need to use Authorization (titlecase) header with Tumblr OAuth (@visnup)
-- [8c163eb](https://github.com/mikeal/request/commit/8c163eb9349459839fc720658979d5c97a955825) Double quotes are optional, and the space after the ; could be required (@janjongboom)
-- [#224](https://github.com/mikeal/request/pull/224) Multipart content-type change (@janjongboom)
-- [96f4b9b](https://github.com/mikeal/request/commit/96f4b9b1f7b937a92f3f94f10d6d02f8878b6107) Style changes. (@mikeal)
-- [b131c64](https://github.com/mikeal/request/commit/b131c64816f621cf15f8c51e76eb105778b4aad8) Adding safe .toJSON method. fixes #167 (@mikeal)
-- [05d6e02](https://github.com/mikeal/request/commit/05d6e02c31ec4e6fcfadbfbe5414e701710f6e55) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [74ca9a4](https://github.com/mikeal/request/commit/74ca9a4852b666d30dd71421e8cc8b8a83177148) Unified error and complete handling. Fixes #171 (@mikeal)
-- [a86c7dc](https://github.com/mikeal/request/commit/a86c7dc7d0a7c640c7def4c0215e46e76a11ff56) Fixing followAllRedirects and all the redirect tests. (@mikeal)
-- [#211](https://github.com/mikeal/request/pull/211) Replace all occurrences of special chars in RFC3986 (@chriso)
-- [7e24e8a](https://github.com/mikeal/request/commit/7e24e8a48d0dcfe10d0cc08b3c4e9627b9a95a97) New version on npm, first 3.0 release candidate. (@mikeal)
-- [22e0f0d](https://github.com/mikeal/request/commit/22e0f0d73459c11b81b0f66a2cde85492dd8e38f) Added test for .toJSON() (@mikeal)
-- [df32746](https://github.com/mikeal/request/commit/df32746f157948b6ae05e87a35cf1768e065ef0b) Adding toJSON to npm test. (@mikeal)
-- [e65bfba](https://github.com/mikeal/request/commit/e65bfba98f0886a059a268dcdceabf41aec1e5cc) New version in npm. (@mikeal)
-- [2b95921](https://github.com/mikeal/request/commit/2b959217151aaff7a6e7cc15e2acfccd1bbb9b85) Fixing defaults when url is passed instead of uri. (@mikeal)
-- [e0534d8](https://github.com/mikeal/request/commit/e0534d860b4931a7a6e645b328fd4418a5433057) Pushed new version to npm. (@mikeal)
-- [d2dc835](https://github.com/mikeal/request/commit/d2dc83538379e9e1fafb94f5698c56b4a5318d8d) don't error when null is passed for options (@polotek)
-- [db80bf0](https://github.com/mikeal/request/commit/db80bf0444bd98c45f635f305154b9da20eed328) expose initParams (@polotek)
-- [8cf019c](https://github.com/mikeal/request/commit/8cf019c9f9f719694408840823e92da08ab9dac3) allow request.defaults to override the main request method (@polotek)
-- [#240](https://github.com/mikeal/request/pull/240) don't error when null is passed for options (@polotek)
-- [69d017d](https://github.com/mikeal/request/commit/69d017de57622429f123235cc5855f36b3e18d1c) added dynamic boundary for multipart requests (@zephrax)
-- [fc13e18](https://github.com/mikeal/request/commit/fc13e185f5e28a280d347e61622ba708e1cd7bbc) added dynamic boundary for multipart requests (@zephrax)
-- [#243](https://github.com/mikeal/request/pull/243) Dynamic boundary (@zephrax)
-- [1764176](https://github.com/mikeal/request/commit/176417698a84c53c0a69bdfd2a05a2942919816c) Fixing the set-cookie header (@jeromegn)
-- [#246](https://github.com/mikeal/request/pull/246) Fixing the set-cookie header (@jeromegn)
-- [6f9da89](https://github.com/mikeal/request/commit/6f9da89348b848479c23192c04b3c0ddd5a4c8bc) do not set content-length header to 0 when self.method is GET or self.method is undefined (@sethbridges)
-- [efc0ea4](https://github.com/mikeal/request/commit/efc0ea44d63372a30011822ad9d37bd3d7b85952) Experimental AWS signing. Signing code from knox. (@mikeal)
-- [4c08a1c](https://github.com/mikeal/request/commit/4c08a1c10bc0ebb679e212ad87419f6c4cc341eb) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [fdb10eb](https://github.com/mikeal/request/commit/fdb10eb493110b8e6e4f679524f38cef946e3f08) Adding support for aws in options. (@mikeal)
-- [dac6a30](https://github.com/mikeal/request/commit/dac6a301ae03207af88fae6f5017e82157b79b41) Fixing upgraded stat size and supporting content-type and content-md5 properly. (@mikeal)
-- [98cb503](https://github.com/mikeal/request/commit/98cb50325e1d7789fd9f44523d2315df5f890d10) Allow body === '' /* the empty string */. (@Filirom1)
-- [0e9ac12](https://github.com/mikeal/request/commit/0e9ac12c69aaca370fbca94b41358e1c3a2f6170) fixed just another global leak of i (@sreuter)
-- [#260](https://github.com/mikeal/request/pull/260) fixed just another leak of 'i' (@sreuter)
-- [#255](https://github.com/mikeal/request/pull/255) multipart allow body === '' ( the empty string ) (@Filirom1)
-- [#249](https://github.com/mikeal/request/pull/249) Fix for the fix of your (closed) issue #89 where self.headers[content-length] is set to 0 for all methods (@sethbridges)
-- [adc9ab1](https://github.com/mikeal/request/commit/adc9ab1f563f3cb4681ac8241fcc75e6099efde2) style changes. making @rwaldron cry (@mikeal)
-- [155e6ee](https://github.com/mikeal/request/commit/155e6ee270924d5698d3fea37cefc1926cbaf998) Fixed `pool: false` to not use the global agent (@timshadel)
-- [1232a8e](https://github.com/mikeal/request/commit/1232a8e46752619d4d4b51d558e6725faf7bf3aa) JSON test should check for equality (@timshadel)
-- [#261](https://github.com/mikeal/request/pull/261) Setting 'pool' to 'false' does NOT disable Agent pooling (@timshadel)
-- [#262](https://github.com/mikeal/request/pull/262) JSON test should check for equality (@timshadel)
-- [914a723](https://github.com/mikeal/request/commit/914a72300702a78a08263fe98a43d25e25713a70) consumer_key and token_secret need to be encoded for OAuth v1 (@nanodocumet)
-- [500e790](https://github.com/mikeal/request/commit/500e790f8773f245ff43dd9c14ec3d5c92fe0b9e) Fix uncontrolled crash when "this.uri" is an invalid URI (@naholyr)
-- [#265](https://github.com/mikeal/request/pull/265) uncaughtException when redirected to invalid URI (@naholyr)
-- [#263](https://github.com/mikeal/request/pull/263) Bug in OAuth key generation for sha1 (@nanodocumet)
-- [f4b87cf](https://github.com/mikeal/request/commit/f4b87cf439453b3ca1d63e85b3aeb3373ee1f17e) I'm not OCD seriously (@TehShrike)
-- [#268](https://github.com/mikeal/request/pull/268) I'm not OCD seriously (@TehShrike)
-- [fcab7f1](https://github.com/mikeal/request/commit/fcab7f1953cd6fb141a7d98f60580c50b59fb73f) Adding a line break to the preamble as the first part of a multipart was not recognized by a server I was communicating with. (@proksoup)
-- [661b62e](https://github.com/mikeal/request/commit/661b62e5319bf0143312404f1fc81c895c46f6e6) Commenting out failing post test. Need to figure out a way to test this now that the default is to use a UUID for the frontier. (@mikeal)
-- [7165c86](https://github.com/mikeal/request/commit/7165c867fa5dea4dcb0aab74d2bf8ab5541e3f1b) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [5a7ca9b](https://github.com/mikeal/request/commit/5a7ca9b398c1300c08a28fb7f266054c3ce8c57a) Added drain event and returning the boolean from write to proper handle back pressure when piping. (@mafintosh)
-- [#273](https://github.com/mikeal/request/pull/273) Pipe back pressure issue (@mafintosh)
-- [f8ae8d1](https://github.com/mikeal/request/commit/f8ae8d18627e4743996d8600f77f4e4c05a2a590) New version in npm. (@mikeal)
-- [7ff5dae](https://github.com/mikeal/request/commit/7ff5daef152bcfac5b02e661e5476a57b9693489) Merge remote-tracking branch 'upstream/master' (@proksoup)
-- [1f34700](https://github.com/mikeal/request/commit/1f34700e5614ea2a2d78b80dd467c002c3e91cb3) fix tests with boundary by injecting boundry from header (@benatkin)
-- [ee2b2c2](https://github.com/mikeal/request/commit/ee2b2c2f7a8625fde4d71d79e19cdc5d98f09955) Like in [node.js](https://github.com/joyent/node/blob/master/lib/net.js#L52) print logs if NODE_DEBUG contains the word request (@Filirom1)
-- [#279](https://github.com/mikeal/request/pull/279) fix tests with boundary by injecting boundry from header (@benatkin)
-- [3daebaf](https://github.com/mikeal/request/commit/3daebaf2551c8d0df7dac1ebff0af4fe08608768) Merge branch 'master' of https://github.com/mikeal/request (@proksoup)
-- [dba2ebf](https://github.com/mikeal/request/commit/dba2ebf09552258f37b60122c19b236064b0d216) Updating with corresponding tests. (@proksoup)
-- [396531d](https://github.com/mikeal/request/commit/396531d083c94bc807a25f7c3a50a0c92a00c5f7) Removing console.log of multipart (@proksoup)
-- [54226a3](https://github.com/mikeal/request/commit/54226a38816b4169e0a7a5d8b1a7feba78235fec) Okay, trying it as an optional parameter, with a new test in test-body.js to verify (@proksoup)
-- [23ae7d5](https://github.com/mikeal/request/commit/23ae7d576cc63d645eecf057112b71d6cb73e7b1) Remove non-"oauth_" parameters from being added into the OAuth Authorization header (@jplock)
-- [8b82ef4](https://github.com/mikeal/request/commit/8b82ef4ff0b50b0c8dcfb830f62466fa30662666) Removing guard, there are some cases where this is valid. (@mikeal)
-- [82440f7](https://github.com/mikeal/request/commit/82440f76f22a5fca856735af66e2dc3fcf240c0d) Adding back in guard for _started, need to keep some measure of safety but we should defer this restriction for as long as possible. (@mikeal)
-- [#282](https://github.com/mikeal/request/pull/282) OAuth Authorization header contains non-"oauth_" parameters (@jplock)
-- [087be3e](https://github.com/mikeal/request/commit/087be3ebbada53699d14839374f1679f63f3138f) Remove stray `console.log()` call in multipart generator. (@bcherry)
-- [0a8a5ab](https://github.com/mikeal/request/commit/0a8a5ab6a08eaeffd45ef4e028be2259d61bb0ee) Merge remote-tracking branch 'upstream/master' (@proksoup)
-- [#241](https://github.com/mikeal/request/pull/241) Composability updates suggested by issue #239 (@polotek)
-- [#284](https://github.com/mikeal/request/pull/284) Remove stray `console.log()` call in multipart generator. (@bcherry)
-- [8344666](https://github.com/mikeal/request/commit/8344666f682a302c914cce7ae9cea8de054f9240) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs)
-- [#272](https://github.com/mikeal/request/pull/272) Boundary begins with CRLF? (@proksoup)
-- [#214](https://github.com/mikeal/request/pull/214) documenting additional behavior of json option (@jphaas)
-- [#207](https://github.com/mikeal/request/pull/207) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs)
-- [9cadd61](https://github.com/mikeal/request/commit/9cadd61d989e85715ea07da8770a3077db41cca3) Allow parser errors to bubble up to request (@mscdex)
-- [6a00fea](https://github.com/mikeal/request/commit/6a00fea09eed99257c0aec2bb66fbf109b0f573a) Only add socket error handler callback once (@mscdex)
-- [975ea90](https://github.com/mikeal/request/commit/975ea90bed9503c67055b20e36baf4bcba54a052) Fix style (@mscdex)
-- [205dfd2](https://github.com/mikeal/request/commit/205dfd2e21c13407d89d3ed92dc2b44b987d962b) Use .once() when listening for parser error (@mscdex)
-- [ff9b564](https://github.com/mikeal/request/commit/ff9b5643d6b5679a9e7d7997ec6275dac10b000e) Add a space after if (@Filirom1)
-- [#280](https://github.com/mikeal/request/pull/280) Like in node.js print options if NODE_DEBUG contains the word request (@Filirom1)
-- [d38e57b](https://github.com/mikeal/request/commit/d38e57bbb3d827aa87427f2130aa5a5a3a973161) Test for #289 (@isaacs)
-- [820af58](https://github.com/mikeal/request/commit/820af5839f2a193d091d98f23fd588bd919e3e58) A test of POST redirect following with 303 status (@isaacs)
-- [7adc5a2](https://github.com/mikeal/request/commit/7adc5a21869bc92cc3b5e84d32c585952c8e5e87) Use self.encoding when calling Buffer.toString() (@isaacs)
-- [#290](https://github.com/mikeal/request/pull/290) A test for #289 (@isaacs)
-- [#293](https://github.com/mikeal/request/pull/293) Allow parser errors to bubble up to request (@mscdex)
-- [ed68b8d](https://github.com/mikeal/request/commit/ed68b8dd024561e9d47d80df255fb79d783c13a7) Updated the twitter oauth dance. The comments weren't clear. Also removed token_key. No longer needed with twitter oauth. (@joemccann)
-- [6bc19cd](https://github.com/mikeal/request/commit/6bc19cda351b59f8e45405499a100abd0b456e42) Forgot to remove token_secret; no longer needed for twitter. (@joemccann)
-- [1f21b17](https://github.com/mikeal/request/commit/1f21b17fc4ff3a7011b23e3c9261d66effa3aa40) Adding form-data support. (@mikeal)
-- [827e950](https://github.com/mikeal/request/commit/827e950500746eb9d3a3fa6f174416b194c9dedf) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [b211200](https://github.com/mikeal/request/commit/b2112009a31fc7f9122970d392750f62b6e77111) Test fixes for relative import. Adding to run all (@mikeal)
-- [1268195](https://github.com/mikeal/request/commit/1268195b75bd5bb3954b4c4f2d9feb80a97994d1) Bundling mime module rather than keep around our own mime-map. (@mikeal)
-- [4f51cec](https://github.com/mikeal/request/commit/4f51cecdc363946b957585c3deccfd8c37e19aa0) Docs for the form API, pumping version. (@mikeal)
-- [90245d7](https://github.com/mikeal/request/commit/90245d7199215d7b195cf7e36b203ca0bd0a6bd3) Doc fixes. (@mikeal)
-- [d98ef41](https://github.com/mikeal/request/commit/d98ef411c560bd1168f242c524a378914ff8eac4) Pushed new version to npm. (@mikeal)
-- [3e11937](https://github.com/mikeal/request/commit/3e119375acda2da225afdb1596f6346dbd551fba) Pass servername to tunneling secure socket creation (@isaacs)
-- [7725b23](https://github.com/mikeal/request/commit/7725b235fdec8889c0c91d55c99992dc683e2e22) Declare dependencies more sanely (@isaacs)
-- [#317](https://github.com/mikeal/request/pull/317) Workaround for #313 (@isaacs)
-- [#318](https://github.com/mikeal/request/pull/318) Pass servername to tunneling secure socket creation (@isaacs)
-- [0c470bc](https://github.com/mikeal/request/commit/0c470bccf1ec097ae600b6116e6244cb624dc00e) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [0d98e5b](https://github.com/mikeal/request/commit/0d98e5b7ea6bd9c4f21535d3682bbed2f2e05df4) Pushed new version to npm. (@mikeal)
-- [64a4448](https://github.com/mikeal/request/commit/64a44488ac8c792a1f548f305fc5c61efe0d77fb) when setting defaults, the wrapper adds the jar method assuming it has the same signature as get, meaning undefined is passed into initParams, which subsequently fails. now passing jar function directly as it has no need of defaults anyway seeing as it only creates a new cookie jar (@StuartHarris)
-- [48c9881](https://github.com/mikeal/request/commit/48c988118bda4691fffbfcf30d5a39b6c1438736) Added test to illustrate #321 (@alexindigo)
-- [8ce0f2a](https://github.com/mikeal/request/commit/8ce0f2a3b6929cd0f7998e00d850eaf5401afdb7) Added *src* stream removal on redirect. #321 (@alexindigo)
-- [c32f0bb](https://github.com/mikeal/request/commit/c32f0bb9feaa71917843856c23b4aae99f78ad4d) Do not try to remove listener from an undefined connection (@strk)
-- [#326](https://github.com/mikeal/request/pull/326) Do not try to remove listener from an undefined connection (@CartoDB)
-- [#322](https://github.com/mikeal/request/pull/322) Fix + test for piped into request bumped into redirect. #321 (@alexindigo)
-- [85b6a63](https://github.com/mikeal/request/commit/85b6a632ac7d3456485fbf931043f10f5f6344a5) New version in npm. (@mikeal)
-- [f462bd3](https://github.com/mikeal/request/commit/f462bd3fa421fa5e5ca6c91852333db90297b80e) Rolling trunk version. (@mikeal)
-- [8a82c5b](https://github.com/mikeal/request/commit/8a82c5b0990cc58fa4cb7f81814d13ba7ae35453) Adding url to redirect error for better debugging. (@mikeal)
-- [013c986](https://github.com/mikeal/request/commit/013c986d0a8b5b2811cd06dd3733f4a3d37df1cc) Better debugging of max redirect errors. (@mikeal)
-- [#320](https://github.com/mikeal/request/pull/320) request.defaults() doesn't need to wrap jar() (@redbadger)
-- [4797f88](https://github.com/mikeal/request/commit/4797f88b42c3cf8680cbde09bf473678a5707aed) Fix #296 - Only set Content-Type if body exists (@Marsup)
-- [f6bcf3e](https://github.com/mikeal/request/commit/f6bcf3eb51982180e813c69cccb942734f815ffe) fixup aws function to work in more situations (@nlf)
-- [ba6c88a](https://github.com/mikeal/request/commit/ba6c88af5e771c2a0e007e6166e037a149561e09) added short blurb on using aws (@nlf)
-- [#343](https://github.com/mikeal/request/pull/343) Allow AWS to work in more situations, added a note in the README on its usage (@nathan-lafreniere)
-- [288c52a](https://github.com/mikeal/request/commit/288c52a2a1579164500c26136552827112801ff1) switch to a case insensitive getter when fetching headers for aws auth signing (@nlf)
-- [#332](https://github.com/mikeal/request/pull/332) Fix #296 - Only set Content-Type if body exists (@Marsup)
-- [7a16286](https://github.com/mikeal/request/commit/7a162868de65b6de15e00c1f707b5e0f292c5f86) Emit errors for anything in init so that it is catchable in a redirect. (@mikeal)
-- [d288d21](https://github.com/mikeal/request/commit/d288d21d709fa81067f5af53737dfde06f842262) fix bug (@azylman)
-- [#355](https://github.com/mikeal/request/pull/355) stop sending erroneous headers on redirected requests (@azylman)
-- [b0b97f5](https://github.com/mikeal/request/commit/b0b97f53a9e94f3aeaa05e2cda5b820668f6e3b2) delete _form along with everything else on a redirect (@jgautier)
-- [#360](https://github.com/mikeal/request/pull/360) Delete self._form along with everything else on redirect (@jgautier)
-- [61e3850](https://github.com/mikeal/request/commit/61e3850f0f91ca6732fbd06b46796fbcd2fea1ad) Made it so that if we pass in Content-Length or content-length in the headers, don't make a new version (@danjenkins)
-- [#361](https://github.com/mikeal/request/pull/361) Don't create a Content-Length header if we already have it set (@danjenkins)
-- [590452d](https://github.com/mikeal/request/commit/590452d6569e68e480d4f40b88022f1b81914ad6) inside oauth.hmacsign: running rfc3986 on base_uri instead of just encodeURIComponent.
-- [#362](https://github.com/mikeal/request/pull/362) Running `rfc3986` on `base_uri` in `oauth.hmacsign` instead of just `encodeURIComponent` (@jeffmarshall)
-- [f7dc90c](https://github.com/mikeal/request/commit/f7dc90c8dae743d5736dc6c807eecde613eb4fd4) Revert "Merge pull request #362 from jeffmarshall/master" (@mikeal)
-- [d631a26](https://github.com/mikeal/request/commit/d631a26e263077eca3d4925de9b0a8d57365ba90) reintroducing the WTF escape + encoding, also fixing a typo.
-- [#363](https://github.com/mikeal/request/pull/363) rfc3986 on base_uri, now passes tests (@jeffmarshall)
-- [bfe2791](https://github.com/mikeal/request/commit/bfe2791f596b749eed6961159d41a404c3aba0d0) oauth fix. (@mikeal)
-- [#344](https://github.com/mikeal/request/pull/344) Make AWS auth signing find headers correctly (@nathan-lafreniere)
-- [e863f25](https://github.com/mikeal/request/commit/e863f25336abc7b9f9936c20e0c06da8db0c6593) style change. (@mikeal)
-- [3e5a87c](https://github.com/mikeal/request/commit/3e5a87ce28b3bb45861b32f283cd20d0084d78a7) Don't remove x_auth_type for Twitter reverse auth (@drudge)
-- [#369](https://github.com/mikeal/request/pull/369) Don't remove x_auth_mode for Twitter reverse auth (@drudge)
-- [25d4667](https://github.com/mikeal/request/commit/25d466773c43949e2eea4236ffc62841757fd1f0) x_auth_mode not x_auth_type (@drudge)
-- [#370](https://github.com/mikeal/request/pull/370) Twitter reverse auth uses x_auth_mode not x_auth_type (@drudge)
-- [cadf4dc](https://github.com/mikeal/request/commit/cadf4dc54f4ee3fae821f6beb1ea6443e528bf6f) massive style commit. (@mikeal)
-- [33453a5](https://github.com/mikeal/request/commit/33453a53bc37e4499853b9d929b3603cdf7a31cd) New version in npm. (@mikeal)
-- [b638185](https://github.com/mikeal/request/commit/b6381854006470af1d0607f636992c7247b6720f) Setting master version. (@mikeal)
-- [8014d2a](https://github.com/mikeal/request/commit/8014d2a5b797f07cf56d2f39a346031436e1b064) correct Host header for proxy tunnel CONNECT (@ypocat)
-- [#374](https://github.com/mikeal/request/pull/374) Correct Host header for proxy tunnel CONNECT (@ypocat)
-- [8c3e9cb](https://github.com/mikeal/request/commit/8c3e9cb529767cff5e7206e2e76531183085b42a) If one of the request parameters is called "timestamp", the "oauth_timestamp" OAuth parameter will get removed during the parameter cleanup loop. (@jplock)
-- [#375](https://github.com/mikeal/request/pull/375) Fix for missing oauth_timestamp parameter (@jplock)
-- [69e6dc5](https://github.com/mikeal/request/commit/69e6dc5c80e67bbd7d135c3ceb657a1b2df58763) Fixed headers piping on redirects (@kapetan)
-- [#376](https://github.com/mikeal/request/pull/376) Headers lost on redirect (@kapetan)
-- [62dbbf3](https://github.com/mikeal/request/commit/62dbbf3d77b0851ba424d4f09d1d0c0be91c1f2d) Resolving the Invalid signature when using "qs" (@landeiro)
-- [d4cf4f9](https://github.com/mikeal/request/commit/d4cf4f98e11f9a85b6bdfd0481c85c8ac34061ce) fixes missing host header on retried request when using forever agent
-- [#380](https://github.com/mikeal/request/pull/380) Fixes missing host header on retried request when using forever agent (@mac-)
-- [#381](https://github.com/mikeal/request/pull/381) Resolving "Invalid signature. Expected signature base string: " (@landeiro)
-- [ea2f975](https://github.com/mikeal/request/commit/ea2f975ae83efe956b77cbcd0fd9ad42c0d5192f) Ensure that uuid is treated as a property name, not an index. (@othiym23)
-- [#388](https://github.com/mikeal/request/pull/388) Ensure "safe" toJSON doesn't break EventEmitters (@othiym23)
-- [11a3bc0](https://github.com/mikeal/request/commit/11a3bc0ea3063f6f0071248e03c8595bfa9fd046) Add more reporting to tests (@mmalecki)
-- [#398](https://github.com/mikeal/request/pull/398) Add more reporting to tests (@mmalecki)
-- [b85bf63](https://github.com/mikeal/request/commit/b85bf633fe8197dc38855f10016a0a76a8ab600a) Optimize environment lookup to happen once only (@mmalecki)
-- [#403](https://github.com/mikeal/request/pull/403) Optimize environment lookup to happen once only (@mmalecki)
-- [dbb9a20](https://github.com/mikeal/request/commit/dbb9a205fafd7bf5a05d2dbe7eb2c6833b4387dc) renaming tests/googledoodle.png to match it's actual image type of jpeg (@nfriedly)
-- [e2d7d4f](https://github.com/mikeal/request/commit/e2d7d4fd35869354ba14a333a4b4989b648e1971) Add more auth options, including digest support (@nylen)
-- [d0d536c](https://github.com/mikeal/request/commit/d0d536c1e5a9a342694ffa5f14ef8fbe8dcfa8bd) Add tests for basic and digest auth (@nylen)
-- [85fd359](https://github.com/mikeal/request/commit/85fd359890646ef9f55cc6e5c6a32e74f4fbb786) Document new auth options (@nylen)
-- [#338](https://github.com/mikeal/request/pull/338) Add more auth options, including digest support (@nylen)
-- [fd2e2fa](https://github.com/mikeal/request/commit/fd2e2fa1e6d580cbc34afd3ae1200682cecb3cf9) Fixed a typo. (@jerem)
-- [#415](https://github.com/mikeal/request/pull/415) Fixed a typo. (@jerem)
-- [53c1508](https://github.com/mikeal/request/commit/53c1508c9c6a58f7d846de82cad36402497a4a4f) Fix for #417 (@mikeal)
-- [b23f985](https://github.com/mikeal/request/commit/b23f985e02da4a96f1369541a128c4204a355666) Fixing merge conflict. (@mikeal)
-- [28e8be5](https://github.com/mikeal/request/commit/28e8be5175793ac99236df88e26c0139a143e32d) Lost a forever fix in the previous merge. Fixing. (@mikeal)
-- [e4d1e25](https://github.com/mikeal/request/commit/e4d1e25c1648ef91f6baf1ef407c712509af4b66) Copy options before adding callback. (@nrn)
-- [22bc67d](https://github.com/mikeal/request/commit/22bc67d7ac739e9c9f74c026f875a0a7c686e29d) Respect specified {Host,host} headers, not just {host} (@andrewschaaf)
-- [#430](https://github.com/mikeal/request/pull/430) Respect specified {Host,host} headers, not just {host} (@andrewschaaf)
-- [6b11acf](https://github.com/mikeal/request/commit/6b11acf3e29fb84daef4e940314cae5ac2e580c6) Updating form-data. (@mikeal)
-- [d195845](https://github.com/mikeal/request/commit/d195845c3e1de42c9aee752eec8efa4dda87ec74) Updating mime (@mikeal)
-- [20ba1d6](https://github.com/mikeal/request/commit/20ba1d6d38191aa7545b927a7262a18c5c63575b) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [0150d9f](https://github.com/mikeal/request/commit/0150d9fa13e51d99880013b9ec29343850b40c2f) Consider `options.rejectUnauthorized` when pooling https agents (@mmalecki)
-- [3e07b6d](https://github.com/mikeal/request/commit/3e07b6d4b81037d0e6e595670db483708ffa8698) Use `rejectUnauthorized: false` in tests (@mmalecki)
-- [3995878](https://github.com/mikeal/request/commit/3995878d9fff18a8707f27ffeb4ed6401086adce) Support `key` and `cert` options (@mmalecki)
-- [#433](https://github.com/mikeal/request/pull/433) Added support for HTTPS cert & key (@indexzero)
-- [8b0f4e8](https://github.com/mikeal/request/commit/8b0f4e8fba33d578a891218201d87e3316ea9844) Released 2.14.0 (@mikeal)
-- [54172c6](https://github.com/mikeal/request/commit/54172c68cab8360372e1e64e3fa14902662950bd) Rolling master version. (@mikeal)
-- [aa4a285](https://github.com/mikeal/request/commit/aa4a28586354901b0c9b298a0aa79abb5ed175af) Add patch convenience method. (@mloar)
-- [66501b9](https://github.com/mikeal/request/commit/66501b9872abc9a2065430cd5ed4a34dd45c8bee) protect against double callback (@spollack)
-- [#444](https://github.com/mikeal/request/pull/444) protect against double callbacks on error path (@spollack)
-- [#448](https://github.com/mikeal/request/pull/448) Convenience method for PATCH (@mloar)
-- [6f0f8c5](https://github.com/mikeal/request/commit/6f0f8c5ee2b2fdc7118804664c2215fe9cb5a2f2) No longer doing bundle dependencies (@mikeal)
-- [3997f98](https://github.com/mikeal/request/commit/3997f980722241c18454a00aeeda07d701c27a8f) No longer using bundle dependencies (@mikeal)
-- [cba36ce](https://github.com/mikeal/request/commit/cba36ce64e68bd26e230b65f81256776ac66e686) Adding hawk signing to request. (@mikeal)
-- [c7a8be6](https://github.com/mikeal/request/commit/c7a8be6d174eff05a9cb2fda987979e475d8543f) Fixing bug in empty options. (@mikeal)
-- [67d753f](https://github.com/mikeal/request/commit/67d753fec99fa1f5a3b35ec0bbbc98896418d86c) node-uuid is much better. (@mikeal)
-- [337718b](https://github.com/mikeal/request/commit/337718baa08cafb3e706d275fd7344a3c92363bb) Smarter test runner. (@mikeal)
-- [bcc33ac](https://github.com/mikeal/request/commit/bcc33aca57baf6fe2a81fbf5983048c9220c71b1) Moved the cookie jar in to it's own module. (@mikeal)
-- [3261be4](https://github.com/mikeal/request/commit/3261be4b5d6f45f62b9f50bec18af770cbb70957) Put aws signing in its own package. (@mikeal)
-- [fbed723](https://github.com/mikeal/request/commit/fbed7234d7b532813105efdc4c54777396a6773b) OAuth signing is now in its own library. (@mikeal)
-- [ef5ab90](https://github.com/mikeal/request/commit/ef5ab90277fb00d0e8eb1c565b0f6ef8c52601d3) Forever agent is now it's own package. (@mikeal)
-- [ca1ed81](https://github.com/mikeal/request/commit/ca1ed813c62c7493dc77108b3efc907cc36930cb) tunneling agent is now it's own library. (@mikeal)
-- [5c75621](https://github.com/mikeal/request/commit/5c75621ba5cea18bcf114117112121d361e5f3c9) Moving from main.js to index. cause it's not 2010 anymore. (@mikeal)
-- [#413](https://github.com/mikeal/request/pull/413) rename googledoodle.png to .jpg (@nfriedly)
-- [b4c4c28](https://github.com/mikeal/request/commit/b4c4c28424d906cd96a2131010b21d7facf8b666) Merge branch 'master' of github.com:mikeal/request (@nrn)
-- [#310](https://github.com/mikeal/request/pull/310) Twitter Oauth Stuff Out of Date; Now Updated (@joemccann)
-- [8b0e7e8](https://github.com/mikeal/request/commit/8b0e7e8c9d196d7286d1563aa54affcc4c8b0e1d) Comment to explain init() and start(). (@mikeal)
-- [43d578d](https://github.com/mikeal/request/commit/43d578dc0206388eeae9584f540d550a06308fc8) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [b7c5ed4](https://github.com/mikeal/request/commit/b7c5ed48b618f71f138f9f08f8d705336f907e01) destroy the response if present when destroying the request (@mafintosh)
-- [b279277](https://github.com/mikeal/request/commit/b279277dc2fb4b649640322980315d74db0d13f3) response.abort should be response.destroy (@mafintosh)
-- [#454](https://github.com/mikeal/request/pull/454) Destroy the response if present when destroying the request (clean merge) (@mafintosh)
-- [#429](https://github.com/mikeal/request/pull/429) Copy options before adding callback. (@nrn)
-- [e0e0fb4](https://github.com/mikeal/request/commit/e0e0fb451f17945a02203639e4836aa327b4e30b) hawk 0.9.0 (@hueniverse)
-- [#456](https://github.com/mikeal/request/pull/456) hawk 0.9.0 (@hueniverse)
-- [2f60bc2](https://github.com/mikeal/request/commit/2f60bc253ff6e28df58a33da24b710b6d506849f) Fixes #453 (@mikeal)
-- [805b6e4](https://github.com/mikeal/request/commit/805b6e4fe3afeeb407b4fca2e34e9caabe30f747) Fixing hawk README to match new usage. (@mikeal)
-- [8feb957](https://github.com/mikeal/request/commit/8feb957911083bce552d1898b7ffcaa87104cd21) Removing old logref code. (@mikeal)
-- [fcf6d67](https://github.com/mikeal/request/commit/fcf6d6765247a2645a233d95468ade2960294074) Safe stringify. (@mikeal)
-- [62455bc](https://github.com/mikeal/request/commit/62455bca81e8760f25a2bf1dec2b06c8e915de79) hawk 0.10 (@hueniverse)
-- [c361b41](https://github.com/mikeal/request/commit/c361b4140e7e6e4fe2a8f039951b65d54af65f42) hawk 0.10 (@hueniverse)
-- [fa1ef30](https://github.com/mikeal/request/commit/fa1ef30dcdac83b271ce38c71975df0ed96b08f7) Strip the UTF8 BOM from a UTF encoded response (@kppullin)
-- [9d636c0](https://github.com/mikeal/request/commit/9d636c0b3e882742e15ba989d0c2413f95364680) if query params are empty, then request path shouldn't end with a '?' (@jaipandya)
-- [#462](https://github.com/mikeal/request/pull/462) if query params are empty, then request path shouldn't end with a '?' (merges cleanly now) (@jaipandya)
-- [#460](https://github.com/mikeal/request/pull/460) hawk 0.10.0 (@hueniverse)
-- [#461](https://github.com/mikeal/request/pull/461) Strip the UTF8 BOM from a UTF encoded response (@kppullin)
-- [6d29ed7](https://github.com/mikeal/request/commit/6d29ed72e34f3b2b6d8a5cfadd96dd26b3dd246d) Moving response handlers to onResponse. (@mikeal)
-- [885d6eb](https://github.com/mikeal/request/commit/885d6ebeb6130c2ab7624304f4a01a898573390b) Using querystring library from visionmedia (@kbackowski)
-- [#471](https://github.com/mikeal/request/pull/471) Using querystring library from visionmedia (@kbackowski)
-- [346bb42](https://github.com/mikeal/request/commit/346bb42898c5804576d9e9b3adf40123260bf73b) On strictSSL set rejectUnauthorized. (@mikeal)
-- [8a45365](https://github.com/mikeal/request/commit/8a453656a705d2fa98fbf9092b1600d2ddadbb5a) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [32cfd3c](https://github.com/mikeal/request/commit/32cfd3cf7b3f23c2b1d36c5ccb475cbb3a4693ff) Style changes. (@mikeal)
-- [ec07ee2](https://github.com/mikeal/request/commit/ec07ee2d3eeb90b6d0ad9f6d7f3a36da72276841) Print debug logs NODE_DEBUG=request in environment (@isaacs)
-- [681af64](https://github.com/mikeal/request/commit/681af644a2ebccad8bcccb75984f7f10f909b382) Flow data in v0.10-style streams (@isaacs)
-- [#473](https://github.com/mikeal/request/pull/473) V0.10 compat (@isaacs)
-- [f07a8ba](https://github.com/mikeal/request/commit/f07a8baebf7001addbc0f7d7c869adddc21768ce) Release. (@mikeal)
-- [1f947a1](https://github.com/mikeal/request/commit/1f947a1d2728147fbf4f57aa361d0bedcebfc206) Rolling master version. (@mikeal)
-- [7a217bb](https://github.com/mikeal/request/commit/7a217bbdced9a05a786fe6534ab52734df342d3e) Reinstate querystring for `unescape` (@shimaore)
-- [b0b4ca9](https://github.com/mikeal/request/commit/b0b4ca913e119337e9313a157eee2f08f77ddc38) Test for `unescape` (@shimaore)
-- [#475](https://github.com/mikeal/request/pull/475) Use `unescape` from `querystring` (@shimaore)
-- [28fc741](https://github.com/mikeal/request/commit/28fc741fa958a9783031189964ef6f6d7e3f3264) Release. (@mikeal)
-- [d3e28ef](https://github.com/mikeal/request/commit/d3e28ef7144da4d9f22f8fb475bd5aa6a80fb947) Rolling master version. (@mikeal)
-- [8f8bb9e](https://github.com/mikeal/request/commit/8f8bb9ee8c4dcd9eb815249fbe2a7cf54f61b56f) Changing so if Accept header is explicitly set, sending json does not overwrite. (@RoryH)
-- [#479](https://github.com/mikeal/request/pull/479) Changing so if Accept header is explicitly set, sending json does not ov... (@RoryH)
-- [7694372](https://github.com/mikeal/request/commit/7694372f3dc9d57ac29ca7ee5c00146aa5e1e747) Proper version for latest. (@mikeal)
-- [aa208cf](https://github.com/mikeal/request/commit/aa208cf5c682262529d749f592db147182cacfaf) 0.8+ only now (@mikeal)
-- [16b5ab9](https://github.com/mikeal/request/commit/16b5ab9151823067b05b382241483ef10811c3e1) Upgrading qs. (@mikeal)
-- [7d10c1e](https://github.com/mikeal/request/commit/7d10c1e83b4663f592c773e7fece83435585a06f) Merge branch 'master' of github.com:mikeal/request (@mikeal)
-- [b8ca4b4](https://github.com/mikeal/request/commit/b8ca4b474b8215cab44ef8ef789303571b3d016f) pumping hawk version. (@mikeal)
-- [9c0e484](https://github.com/mikeal/request/commit/9c0e48430e3a9de8715e77c07c98301399eaf6e3) release (@mikeal)
-- [a9f1896](https://github.com/mikeal/request/commit/a9f189697e2a813bee9bff31de32a25e99e55cf2) rolling master version. (@mikeal)
-- [560a1f8](https://github.com/mikeal/request/commit/560a1f8b927099e44b75274375a690df2a05de67) Set content-type on input. (@mikeal)
-- [5fec436](https://github.com/mikeal/request/commit/5fec436b6602bc8c76133664bca23e98f511b096) Release. (@mikeal)
-- [88d8d5b](https://github.com/mikeal/request/commit/88d8d5bc80679b78a39cab8e6d8295728a0a150d) Rolling version. (@mikeal)
-- [d05b6ba](https://github.com/mikeal/request/commit/d05b6ba72702c2411b4627d4d89190a5f2aba562) Empty body must be passed as empty string, exclude JSON case (@Olegas)
-- [#490](https://github.com/mikeal/request/pull/490) Empty response body (3-rd argument) must be passed to callback as an empty string (@Olegas)
-- [8aa13cd](https://github.com/mikeal/request/commit/8aa13cd5b5e22b24466ef0e59fa8b5f1d0f0795a) Added redirect event (@Cauldrath)
-- [4d63a04](https://github.com/mikeal/request/commit/4d63a042553c90718bf0b90652921b26c52dcb31) Moving response emit above setHeaders on destination streams (@kenperkins)
-- [#498](https://github.com/mikeal/request/pull/498) Moving response emit above setHeaders on destination streams (@kenperkins)
-- [c40993f](https://github.com/mikeal/request/commit/c40993fc987b1a8a3cb08cd5699b2f1b2bd4b28b) Fix a regression introduced by cba36ce6 (@nylen)
-- [edc2e17](https://github.com/mikeal/request/commit/edc2e17e8154239efa6bd2914435798c18882635) Don't delete headers when retrying a request with proper authentication (@nylen)
-- [a375ac1](https://github.com/mikeal/request/commit/a375ac15460f4f3b679f4418d7fc467a5cc94499) Refactor and expand basic auth tests (@nylen)
-- [9bc28bf](https://github.com/mikeal/request/commit/9bc28bf912fb0afdd14b36b0ccbafb185a32546a) Cleanup whitespace. (@mikeal)
-- [9a35cd2](https://github.com/mikeal/request/commit/9a35cd2248d9492b099c7ee46d68ca017b6a701c) Fix basic auth for passwords that contain colons (@tonistiigi)
-- [f724810](https://github.com/mikeal/request/commit/f724810c7b9f82fa1423d0a4d19fcb5aaca98137) Honor the .strictSSL option when using proxies (tunnel-agent) (@jhs)
-- [95a2558](https://github.com/mikeal/request/commit/95a25580375be1b9c39cc2e88a36a8387395bc13) Add HTTP Signature support. (@davidlehn)
-- [921c973](https://github.com/mikeal/request/commit/921c973015721ee0f92ed670f5e88bca057104cc) * Make password optional to support the format: http://username@hostname/
-- [2759ebb](https://github.com/mikeal/request/commit/2759ebbe07e8563fd3ded698d2236309fb28176b) add 'localAddress' support (@yyfrankyy)
-- [#513](https://github.com/mikeal/request/pull/513) add 'localAddress' support (@yyfrankyy)
-- [#512](https://github.com/mikeal/request/pull/512) Make password optional to support the format: http://username@hostname/ (@pajato1)
-- [#508](https://github.com/mikeal/request/pull/508) Honor the .strictSSL option when using proxies (tunnel-agent) (@iriscouch)
-- [5f036e6](https://github.com/mikeal/request/commit/5f036e6f5d3102a89e5401a53090a0627a7850a8) Conflicts: index.js (@nylen)
-- [89d2602](https://github.com/mikeal/request/commit/89d2602ef4e3a4e6e51284f6a29b5767c79ffaba) Conflicts: README.md (@davidlehn)
-- [#502](https://github.com/mikeal/request/pull/502) Fix POST (and probably other) requests that are retried after 401 Unauthorized (@nylen)
-- [eb3e033](https://github.com/mikeal/request/commit/eb3e033170403832fe7070955db32112ec46005f) Merge branch 'master' of git://github.com/mikeal/request (@davidlehn)
-- [#510](https://github.com/mikeal/request/pull/510) Add HTTP Signature support. (@digitalbazaar)
-- [227d998](https://github.com/mikeal/request/commit/227d9985426214b6ac68702933346000298d7790) Update the internal path variable when querystring is changed (@jblebrun)
-- [#519](https://github.com/mikeal/request/pull/519) Update internal path state on post-creation QS changes (@incredible-labs)
-- [428b9c1](https://github.com/mikeal/request/commit/428b9c1ad9831b7dfd6cec4ce68df358590c6d65) Fixing test-tunnel.js (@noway421)
-- [2417599](https://github.com/mikeal/request/commit/24175993f6c362f7fca5965feb0a11756f00baf3) Improving test-localAddress.js (@noway421)
-- [#520](https://github.com/mikeal/request/pull/520) Fixing test-tunnel.js (@noway421)
-- [1e37f1b](https://github.com/mikeal/request/commit/1e37f1bea45174e09e6450bc71dfc081c8cd94de) Some explaining comments (@noway421)
-- [909b024](https://github.com/mikeal/request/commit/909b024619c9e47f615749661d610cccd8421d80) Updating dependencies (@noway421)
-- [#523](https://github.com/mikeal/request/pull/523) Updating dependencies (@noway421)
-- [47191e1](https://github.com/mikeal/request/commit/47191e1a5e29714fb0c5f8b2162b2971570df644) 2.17.0 (@mikeal)
-- [14def5a](https://github.com/mikeal/request/commit/14def5af5903d03f66bd6c9be534e6b76f47c063) 2.18.0 (@mikeal)
-- [56fd6b7](https://github.com/mikeal/request/commit/56fd6b7ec6da162894df0809126d688f30900d25) 2.18.1 (@mikeal)
-- [37dd689](https://github.com/mikeal/request/commit/37dd68989670f8937b537579a4299d9649b8aa16) Fixing dep. (@mikeal)
-- [dd7209a](https://github.com/mikeal/request/commit/dd7209a84dd40afe87db31c6ab66885e2015cb8f) 2.19.0 (@mikeal)
-- [62f3b92](https://github.com/mikeal/request/commit/62f3b9203690d4ad34486fc506fc78a1c9971e03) 2.19.1 (@mikeal)
-- [74c6b2e](https://github.com/mikeal/request/commit/74c6b2e315872980ee9a9a000d25e724138f28b1) Adding test for onelineproxy. (@mikeal)
-- [2a01cc0](https://github.com/mikeal/request/commit/2a01cc082f544647f7176a992e02668519a694be) Fixing onelineproxy. (@mikeal)
-- [8b4c920](https://github.com/mikeal/request/commit/8b4c9203adb372f2ee99b1b012406b482b27c68d) 2.20.0 (@mikeal)
-- [d8d4a33](https://github.com/mikeal/request/commit/d8d4a3311d8d31df88fa8a2ab3265872e5cb97ae) 2.20.1 (@mikeal)
-- [5937012](https://github.com/mikeal/request/commit/59370123b22e8c971e4ee48c3d0caf920d890bda) dependencies versions bump (@jodaka)
-- [#529](https://github.com/mikeal/request/pull/529) dependencies versions bump (@jodaka)
-- [#521](https://github.com/mikeal/request/pull/521) Improving test-localAddress.js (@noway421)
-- [#503](https://github.com/mikeal/request/pull/503) Fix basic auth for passwords that contain colons (@tonistiigi)
-- [#497](https://github.com/mikeal/request/pull/497) Added redirect event (@Cauldrath)
-- [297a9ea](https://github.com/mikeal/request/commit/297a9ea827655e5fb406a86907bb0d89b01deae8) fix typo (@fredericosilva)
-- [#532](https://github.com/mikeal/request/pull/532) fix typo (@fredericosilva)
-- [3691db5](https://github.com/mikeal/request/commit/3691db5a2d0981d4aeabfda5b988a5c69074e187) Allow explicitly empty user field for basic authentication. (@mikeando)
-- [#536](https://github.com/mikeal/request/pull/536) Allow explicitly empty user field for basic authentication. (@mikeando)
-- [5d36e32](https://github.com/mikeal/request/commit/5d36e324047f79cbbf3bb9b71fef633f02b36367) 2.21.0 (@mikeal)
-- [9bd98d6](https://github.com/mikeal/request/commit/9bd98d6052f222aa348635c1acb2e2c99eed0f8c) 2.21.1 (@mikeal)
-- [a918e04](https://github.com/mikeal/request/commit/a918e04a8d767a2948567ea29ed3fdd1650c16b1) The exported request function doesn't have an auth method (@tschaub)
-- [1ebe1ac](https://github.com/mikeal/request/commit/1ebe1ac2f78e8a6149c03ce68fcb23d56df2316e) exposing Request class (@regality)
-- [#542](https://github.com/mikeal/request/pull/542) Expose Request class (@ifit)
-- [467573d](https://github.com/mikeal/request/commit/467573d17b4db5f93ed425ace0594370a7820c7c) Update http-signatures version. (@davidlehn)
-- [#541](https://github.com/mikeal/request/pull/541) The exported request function doesn't have an auth method (@tschaub)
-- [3040bbe](https://github.com/mikeal/request/commit/3040bbe5de846811151dab8dc09944acc93a338e) Fix redirections, (@criloz)
-- [#564](https://github.com/mikeal/request/pull/564) Fix redirections (@NebTex)
-- [397b435](https://github.com/mikeal/request/commit/397b4350fcf885460d7dced94cf1db1f5c167f80) handle ciphers and secureOptions in agentOptions (@SamPlacette)
-- [65a2778](https://github.com/mikeal/request/commit/65a27782db7d2798b6490ea08efacb8f3b0a401c) tests and fix for null agentOptions case (@SamPlacette)
-- [#568](https://github.com/mikeal/request/pull/568) use agentOptions to create agent when specified in request (@SamPlacette)
-- [c116920](https://github.com/mikeal/request/commit/c116920a2cbef25afe2e1bbcf4df074e1e2f9dbb) Let's see how we do with only the main guard. (@mikeal)
-- [f54a335](https://github.com/mikeal/request/commit/f54a3358119298634a7b0c29a21bf1471fc23d98) Fix spelling of "ignoring." (@bigeasy)
-- [5cd215f](https://github.com/mikeal/request/commit/5cd215f327e113dc6c062634e405c577986cfd3c) Change isUrl regex to accept mixed case (@lexander)
-- [02c8e74](https://github.com/mikeal/request/commit/02c8e749360a47d45e3e7b51b7f751fe498d2f25) #583 added tests for isUrl regex change. (@lexander)
-- [#581](https://github.com/mikeal/request/pull/581) Fix spelling of "ignoring." (@bigeasy)
-- [#544](https://github.com/mikeal/request/pull/544) Update http-signature version. (@digitalbazaar)
-- [e77746b](https://github.com/mikeal/request/commit/e77746bf42e974dc91a84d03f44f750dd7ee0989) global cookie jar disabled by default, send jar: true to enable. (@threepointone)
-- [46015ac](https://github.com/mikeal/request/commit/46015ac8d5b74f8107a6ec9fd07c133f46c5d833) 2.22.0 (@mikeal)
-- [e5da4a5](https://github.com/mikeal/request/commit/e5da4a5e1a20bf4f23681f7b996f22c5fadae91d) 2.22.1 (@mikeal)
-- [#587](https://github.com/mikeal/request/pull/587) Global cookie jar disabled by default (@threepointone)
-- [fac9da1](https://github.com/mikeal/request/commit/fac9da1cc426bf0a4bcc5f0b7d0d0aea8b1cce38) Prevent setting headers after they are sent (@wpreul)
-- [#589](https://github.com/mikeal/request/pull/589) Prevent setting headers after they are sent (@wpreul)
-- [bc1537a](https://github.com/mikeal/request/commit/bc1537ab79064cea532b0d14110ce4e49a663bde) Emit complete event when there is no callback
-- [de8508e](https://github.com/mikeal/request/commit/de8508e9feac10563596aeee26727567b3c2e33c) Added check to see if the global pool is being used before using the global agent (@Cauldrath)
-- [03441ef](https://github.com/mikeal/request/commit/03441ef919e51a742aaf9e168d917e97e2d9eb6b) 2.23.0 (@mikeal)
+### v2.17.0 (2013/04/22)
+- [#523](https://github.com/request/request/pull/523) Updating dependencies (@noway421)
+- [#520](https://github.com/request/request/pull/520) Fixing test-tunnel.js (@noway421)
+- [#519](https://github.com/request/request/pull/519) Update internal path state on post-creation QS changes (@jblebrun)
+- [#510](https://github.com/request/request/pull/510) Add HTTP Signature support. (@davidlehn)
+- [#502](https://github.com/request/request/pull/502) Fix POST (and probably other) requests that are retried after 401 Unauthorized (@nylen)
+- [#508](https://github.com/request/request/pull/508) Honor the .strictSSL option when using proxies (tunnel-agent) (@jhs)
+- [#512](https://github.com/request/request/pull/512) Make password optional to support the format: http://username@hostname/ (@pajato1)
+- [#513](https://github.com/request/request/pull/513) add 'localAddress' support (@yyfrankyy)
+- [#498](https://github.com/request/request/pull/498) Moving response emit above setHeaders on destination streams (@kenperkins)
+- [#490](https://github.com/request/request/pull/490) Empty response body (3-rd argument) must be passed to callback as an empty string (@Olegas)
+- [#479](https://github.com/request/request/pull/479) Changing so if Accept header is explicitly set, sending json does not ov... (@RoryH)
+- [#475](https://github.com/request/request/pull/475) Use `unescape` from `querystring` (@shimaore)
+- [#473](https://github.com/request/request/pull/473) V0.10 compat (@isaacs)
+- [#471](https://github.com/request/request/pull/471) Using querystring library from visionmedia (@kbackowski)
+- [#461](https://github.com/request/request/pull/461) Strip the UTF8 BOM from a UTF encoded response (@kppullin)
+- [#460](https://github.com/request/request/pull/460) hawk 0.10.0 (@hueniverse)
+- [#462](https://github.com/request/request/pull/462) if query params are empty, then request path shouldn't end with a '?' (merges cleanly now) (@jaipandya)
+- [#456](https://github.com/request/request/pull/456) hawk 0.9.0 (@hueniverse)
+- [#429](https://github.com/request/request/pull/429) Copy options before adding callback. (@nrn)
+- [#454](https://github.com/request/request/pull/454) Destroy the response if present when destroying the request (clean merge) (@mafintosh)
+- [#310](https://github.com/request/request/pull/310) Twitter Oauth Stuff Out of Date; Now Updated (@joemccann)
+- [#413](https://github.com/request/request/pull/413) rename googledoodle.png to .jpg (@nfriedly)
+- [#448](https://github.com/request/request/pull/448) Convenience method for PATCH (@mloar)
+- [#444](https://github.com/request/request/pull/444) protect against double callbacks on error path (@spollack)
+- [#433](https://github.com/request/request/pull/433) Added support for HTTPS cert & key (@mmalecki)
+- [#430](https://github.com/request/request/pull/430) Respect specified {Host,host} headers, not just {host} (@andrewschaaf)
+- [#415](https://github.com/request/request/pull/415) Fixed a typo. (@jerem)
+- [#338](https://github.com/request/request/pull/338) Add more auth options, including digest support (@nylen)
+- [#403](https://github.com/request/request/pull/403) Optimize environment lookup to happen once only (@mmalecki)
+- [#398](https://github.com/request/request/pull/398) Add more reporting to tests (@mmalecki)
+- [#388](https://github.com/request/request/pull/388) Ensure "safe" toJSON doesn't break EventEmitters (@othiym23)
+- [#381](https://github.com/request/request/pull/381) Resolving "Invalid signature. Expected signature base string: " (@landeiro)
+- [#380](https://github.com/request/request/pull/380) Fixes missing host header on retried request when using forever agent (@mac-)
+- [#376](https://github.com/request/request/pull/376) Headers lost on redirect (@kapetan)
+- [#375](https://github.com/request/request/pull/375) Fix for missing oauth_timestamp parameter (@jplock)
+- [#374](https://github.com/request/request/pull/374) Correct Host header for proxy tunnel CONNECT (@youurayy)
+- [#370](https://github.com/request/request/pull/370) Twitter reverse auth uses x_auth_mode not x_auth_type (@drudge)
+- [#369](https://github.com/request/request/pull/369) Don't remove x_auth_mode for Twitter reverse auth (@drudge)
+- [#344](https://github.com/request/request/pull/344) Make AWS auth signing find headers correctly (@nlf)
+- [#363](https://github.com/request/request/pull/363) rfc3986 on base_uri, now passes tests (@jeffmarshall)
+- [#362](https://github.com/request/request/pull/362) Running `rfc3986` on `base_uri` in `oauth.hmacsign` instead of just `encodeURIComponent` (@jeffmarshall)
+- [#361](https://github.com/request/request/pull/361) Don't create a Content-Length header if we already have it set (@danjenkins)
+- [#360](https://github.com/request/request/pull/360) Delete self._form along with everything else on redirect (@jgautier)
+- [#355](https://github.com/request/request/pull/355) stop sending erroneous headers on redirected requests (@azylman)
+- [#332](https://github.com/request/request/pull/332) Fix #296 - Only set Content-Type if body exists (@Marsup)
+- [#343](https://github.com/request/request/pull/343) Allow AWS to work in more situations, added a note in the README on its usage (@nlf)
+- [#320](https://github.com/request/request/pull/320) request.defaults() doesn't need to wrap jar() (@StuartHarris)
+- [#322](https://github.com/request/request/pull/322) Fix + test for piped into request bumped into redirect. #321 (@alexindigo)
+- [#326](https://github.com/request/request/pull/326) Do not try to remove listener from an undefined connection (@strk)
+- [#318](https://github.com/request/request/pull/318) Pass servername to tunneling secure socket creation (@isaacs)
+- [#317](https://github.com/request/request/pull/317) Workaround for #313 (@isaacs)
+- [#293](https://github.com/request/request/pull/293) Allow parser errors to bubble up to request (@mscdex)
+- [#290](https://github.com/request/request/pull/290) A test for #289 (@isaacs)
+- [#280](https://github.com/request/request/pull/280) Like in node.js print options if NODE_DEBUG contains the word request (@Filirom1)
+- [#207](https://github.com/request/request/pull/207) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs)
+- [#214](https://github.com/request/request/pull/214) documenting additional behavior of json option (@jphaas)
+- [#272](https://github.com/request/request/pull/272) Boundary begins with CRLF? (@elspoono)
+- [#284](https://github.com/request/request/pull/284) Remove stray `console.log()` call in multipart generator. (@bcherry)
+- [#241](https://github.com/request/request/pull/241) Composability updates suggested by issue #239 (@polotek)
+- [#282](https://github.com/request/request/pull/282) OAuth Authorization header contains non-"oauth_" parameters (@jplock)
+- [#279](https://github.com/request/request/pull/279) fix tests with boundary by injecting boundry from header (@benatkin)
+- [#273](https://github.com/request/request/pull/273) Pipe back pressure issue (@mafintosh)
+- [#268](https://github.com/request/request/pull/268) I'm not OCD seriously (@TehShrike)
+- [#263](https://github.com/request/request/pull/263) Bug in OAuth key generation for sha1 (@nanodocumet)
+- [#265](https://github.com/request/request/pull/265) uncaughtException when redirected to invalid URI (@naholyr)
+- [#262](https://github.com/request/request/pull/262) JSON test should check for equality (@timshadel)
+- [#261](https://github.com/request/request/pull/261) Setting 'pool' to 'false' does NOT disable Agent pooling (@timshadel)
+- [#249](https://github.com/request/request/pull/249) Fix for the fix of your (closed) issue #89 where self.headers[content-length] is set to 0 for all methods (@sethbridges)
+- [#255](https://github.com/request/request/pull/255) multipart allow body === '' ( the empty string ) (@Filirom1)
+- [#260](https://github.com/request/request/pull/260) fixed just another leak of 'i' (@sreuter)
+- [#246](https://github.com/request/request/pull/246) Fixing the set-cookie header (@jeromegn)
+- [#243](https://github.com/request/request/pull/243) Dynamic boundary (@zephrax)
+- [#240](https://github.com/request/request/pull/240) don't error when null is passed for options (@polotek)
+- [#211](https://github.com/request/request/pull/211) Replace all occurrences of special chars in RFC3986 (@chriso)
+- [#224](https://github.com/request/request/pull/224) Multipart content-type change (@janjongboom)
+- [#217](https://github.com/request/request/pull/217) need to use Authorization (titlecase) header with Tumblr OAuth (@visnup)
+- [#203](https://github.com/request/request/pull/203) Fix cookie and redirect bugs and add auth support for HTTPS tunnel (@milewise)
+- [#199](https://github.com/request/request/pull/199) Tunnel (@isaacs)
+- [#198](https://github.com/request/request/pull/198) Bugfix on forever usage of util.inherits (@isaacs)
+- [#197](https://github.com/request/request/pull/197) Make ForeverAgent work with HTTPS (@isaacs)
+- [#193](https://github.com/request/request/pull/193) Fixes GH-119 (@goatslacker)
+- [#188](https://github.com/request/request/pull/188) Add abort support to the returned request (@itay)
+- [#176](https://github.com/request/request/pull/176) Querystring option (@csainty)
+- [#182](https://github.com/request/request/pull/182) Fix request.defaults to support (uri, options, callback) api (@twilson63)
+- [#180](https://github.com/request/request/pull/180) Modified the post, put, head and del shortcuts to support uri optional param (@twilson63)
+- [#179](https://github.com/request/request/pull/179) fix to add opts in .pipe(stream, opts) (@substack)
+- [#177](https://github.com/request/request/pull/177) Issue #173 Support uri as first and optional config as second argument (@twilson63)
+- [#170](https://github.com/request/request/pull/170) can't create a cookie in a wrapped request (defaults) (@fabianonunes)
+- [#168](https://github.com/request/request/pull/168) Picking off an EasyFix by adding some missing mimetypes. (@serby)
+- [#161](https://github.com/request/request/pull/161) Fix cookie jar/headers.cookie collision (#125) (@papandreou)
+- [#162](https://github.com/request/request/pull/162) Fix issue #159 (@dpetukhov)
+- [#90](https://github.com/request/request/pull/90) add option followAllRedirects to follow post/put redirects (@jroes)
+- [#148](https://github.com/request/request/pull/148) Retry Agent (@thejh)
+- [#146](https://github.com/request/request/pull/146) Multipart should respect content-type if previously set (@apeace)
+- [#144](https://github.com/request/request/pull/144) added "form" option to readme (@petejkim)
+- [#133](https://github.com/request/request/pull/133) Fixed cookies parsing (@afanasy)
+- [#135](https://github.com/request/request/pull/135) host vs hostname (@iangreenleaf)
+- [#132](https://github.com/request/request/pull/132) return the body as a Buffer when encoding is set to null (@jahewson)
+- [#112](https://github.com/request/request/pull/112) Support using a custom http-like module (@jhs)
+- [#104](https://github.com/request/request/pull/104) Cookie handling contains bugs (@janjongboom)
+- [#121](https://github.com/request/request/pull/121) Another patch for cookie handling regression (@jhurliman)
+- [#117](https://github.com/request/request/pull/117) Remove the global `i` (@3rd-Eden)
+- [#110](https://github.com/request/request/pull/110) Update to Iris Couch URL (@jhs)
+- [#86](https://github.com/request/request/pull/86) Can't post binary to multipart requests (@developmentseed)
+- [#105](https://github.com/request/request/pull/105) added test for proxy option. (@dominictarr)
+- [#102](https://github.com/request/request/pull/102) Implemented cookies - closes issue 82: https://github.com/mikeal/request/issues/82 (@alessioalex)
+- [#97](https://github.com/request/request/pull/97) Typo in previous pull causes TypeError in non-0.5.11 versions (@isaacs)
+- [#96](https://github.com/request/request/pull/96) Authless parsed url host support (@isaacs)
+- [#81](https://github.com/request/request/pull/81) Enhance redirect handling (@danmactough)
+- [#78](https://github.com/request/request/pull/78) Don't try to do strictSSL for non-ssl connections (@isaacs)
+- [#76](https://github.com/request/request/pull/76) Bug when a request fails and a timeout is set (@Marsup)
+- [#70](https://github.com/request/request/pull/70) add test script to package.json (@isaacs)
+- [#73](https://github.com/request/request/pull/73) Fix #71 Respect the strictSSL flag (@isaacs)
+- [#69](https://github.com/request/request/pull/69) Flatten chunked requests properly (@isaacs)
+- [#67](https://github.com/request/request/pull/67) fixed global variable leaks (@aheckmann)
+- [#66](https://github.com/request/request/pull/66) Do not overwrite established content-type headers for read stream deliver (@voodootikigod)
+- [#53](https://github.com/request/request/pull/53) Parse json: Issue #51 (@benatkin)
+- [#45](https://github.com/request/request/pull/45) Added timeout option (@mbrevoort)
+- [#35](https://github.com/request/request/pull/35) The "end" event isn't emitted for some responses (@voxpelli)
+- [#31](https://github.com/request/request/pull/31) Error on piping a request to a destination (@tobowers) \ No newline at end of file
diff --git a/deps/npm/node_modules/request/CONTRIBUTING.md b/deps/npm/node_modules/request/CONTRIBUTING.md
index 17d383e8e..06b1968d9 100644
--- a/deps/npm/node_modules/request/CONTRIBUTING.md
+++ b/deps/npm/node_modules/request/CONTRIBUTING.md
@@ -26,7 +26,7 @@ There are a few basic ground-rules for contributors:
style & testing issues. To diagnose test failures, there are two ways to
run a single test file:
- `node_modules/.bin/taper tests/test-file.js` - run using the default
- [`taper`](/nylen/taper) test reporter.
+ [`taper`](https://github.com/nylen/taper) test reporter.
- `node tests/test-file.js` - view the raw
[tap](https://testanything.org/) output.
diff --git a/deps/npm/node_modules/request/README.md b/deps/npm/node_modules/request/README.md
index 566042078..59d62c2c1 100644
--- a/deps/npm/node_modules/request/README.md
+++ b/deps/npm/node_modules/request/README.md
@@ -1,8 +1,8 @@
# Request — Simplified HTTP client
-[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/mikeal/request?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
[![NPM](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/)
+[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/request/request?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
## Super simple to use
Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.
@@ -48,6 +48,17 @@ request
.pipe(request.put('http://mysite.com/img.png'))
```
+To easily handle errors when streaming requests, listen to the `error` event before piping:
+
+```javascript
+request
+ .get('http://mysite.com/doodle.png')
+ .on('error', function(err) {
+ console.log(err)
+ })
+ .pipe(fs.createWriteStream('doodle.png'))
+```
+
Now let’s get fancy.
```javascript
@@ -147,6 +158,9 @@ to force a tunneling proxy, you may set the `tunnel` option to `true`.
If you are using a tunneling proxy, you may set the
`proxyHeaderWhiteList` to share certain headers with the proxy.
+You can also set the `proxyHeaderExclusiveList` to share certain
+headers only with the proxy and not with destination host.
+
By default, this set is:
```
@@ -177,9 +191,8 @@ via
```
Note that, when using a tunneling proxy, the `proxy-authorization`
-header is *never* sent to the endpoint server, but only to the proxy
-server. All other headers are sent as-is over the established
-connection.
+header and any headers from custom `proxyHeaderExclusiveList` are
+*never* sent to the endpoint server, but only to the proxy server.
### Controlling proxy behaviour using environment variables
@@ -243,10 +256,11 @@ var formData = {
my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
// Pass multiple values /w an Array
attachments: [
- fs.createReadStream(__dirname + '/attacment1.jpg')
+ fs.createReadStream(__dirname + '/attachment1.jpg'),
fs.createReadStream(__dirname + '/attachment2.jpg')
],
// Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS}
+ // Use case: for some types of streams, you'll need to provide "file"-related information manually.
// See the `form-data` README for more information about options: https://github.com/felixge/node-form-data
custom_file: {
value: fs.createReadStream('/dev/urandom'),
@@ -264,7 +278,7 @@ request.post({url:'http://service.com/upload', formData: formData}, function opt
});
```
-For advanced cases, you can the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.)
+For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.)
```javascript
// NOTE: Advanced use-case, for normal use see 'formData' usage above
@@ -282,25 +296,37 @@ See the [form-data README](https://github.com/felixge/node-form-data) for more i
Some variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options.
```javascript
- request(
- { method: 'PUT'
- , preambleCRLF: true
- , postambleCRLF: true
- , uri: 'http://service.com/upload'
- , multipart:
- [ { 'content-type': 'application/json'
- , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
- }
- , { body: 'I am an attachment' }
+ request({
+ method: 'PUT',
+ preambleCRLF: true,
+ postambleCRLF: true,
+ uri: 'http://service.com/upload',
+ multipart: [
+ {
+ 'content-type': 'application/json'
+ body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
+ },
+ { body: 'I am an attachment' },
+ { body: fs.createReadStream('image.png') }
+ ],
+ // alternatively pass an object containing additional options
+ multipart: {
+ chunked: false,
+ data: [
+ {
+ 'content-type': 'application/json',
+ body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
+ },
+ { body: 'I am an attachment' }
]
}
- , function (error, response, body) {
- if (err) {
- return console.error('upload failed:', err);
- }
- console.log('Upload successful! Server responded with:', body);
+ },
+ function (error, response, body) {
+ if (error) {
+ return console.error('upload failed:', error);
}
- )
+ console.log('Upload successful! Server responded with:', body);
+ })
```
@@ -349,6 +375,10 @@ Bearer authentication is supported, and is activated when the `bearer` value is
## OAuth Signing
+[OAuth version 1.0](https://tools.ietf.org/html/rfc5849) is supported. The
+default signing algorithm is
+[HMAC-SHA1](https://tools.ietf.org/html/rfc5849#section-3.4.2):
+
```javascript
// Twitter OAuth
var qs = require('querystring')
@@ -395,6 +425,12 @@ request.post({url:url, oauth:oauth}, function (e, r, body) {
})
```
+For [RSA-SHA1 signing](https://tools.ietf.org/html/rfc5849#section-3.4.3), make
+the following changes to the OAuth options object:
+* Pass `signature_method : 'RSA-SHA1'`
+* Instead of `consumer_secret`, specify a `private_key` string in
+ [PEM format](http://how2ssl.com/articles/working_with_pem_files/)
+
## Custom HTTP Headers
HTTP Headers, such as `User-Agent`, can be set in the `options` object.
@@ -406,7 +442,7 @@ custom `User-Agent` header as well as https.
var request = require('request');
var options = {
- url: 'https://api.github.com/repos/mikeal/request',
+ url: 'https://api.github.com/repos/request/request',
headers: {
'User-Agent': 'request'
}
@@ -440,12 +476,12 @@ var fs = require('fs')
var options = {
url: 'https://api.some-server.com/',
agentOptions: {
- 'cert': fs.readFileSync(certFile),
- 'key': fs.readFileSync(keyFile),
+ cert: fs.readFileSync(certFile),
+ key: fs.readFileSync(keyFile),
// Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format:
- // 'pfx': fs.readFileSync(pfxFilePath),
- 'passphrase': 'password',
- 'securityOptions': 'SSL_OP_NO_SSLv3'
+ // pfx: fs.readFileSync(pfxFilePath),
+ passphrase: 'password',
+ securityOptions: 'SSL_OP_NO_SSLv3'
}
};
@@ -455,11 +491,23 @@ request.get(options);
It is able to force using SSLv3 only by specifying `secureProtocol`:
```javascript
+request.get({
+ url: 'https://api.some-server.com/',
+ agentOptions: {
+ secureProtocol: 'SSLv3_method'
+ }
+});
+```
+
+It is possible to accept other certificates than those signed by generally allowed Certificate Authorities (CAs).
+This can be useful, for example, when using self-signed certificates.
+To allow a different certificate, you can specify the signing CA by adding the contents of the CA's certificate file to the `agentOptions`:
+```javascript
request.get({
url: 'https://api.some-server.com/',
agentOptions: {
- 'secureProtocol': 'SSLv3_method'
+ ca: fs.readFileSync('ca.cert.pem')
}
});
```
@@ -478,11 +526,19 @@ The first argument can be either a `url` or an `options` object. The only requir
* `headers` - http headers (default: `{}`)
* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`, unless `json` is `true`. If `json` is `true`, then `body` must be a JSON-serializable object.
* `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above.
-* `formData` - Data to pass for a `multipart/form-data` request. See "Forms" section above.
-* `multipart` - (experimental) Data to pass for a `multipart/related` request. See "Forms" section above
+* `formData` - Data to pass for a `multipart/form-data` request. See
+ [Forms](#forms) section above.
+* `multipart` - array of objects which contain their own headers and `body`
+ attributes. Sends a `multipart/related` request. See [Forms](#forms) section
+ above.
+ * Alternatively you can pass in an object `{chunked: false, data: []}` where
+ `chunked` is used to specify whether the request is sent in
+ [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding)
+ (the default is `chunked: true`). In non-chunked requests, data items with
+ body streams are not allowed.
* `auth` - A hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above.
* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.
-* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.
+* `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body.
* `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request.
* `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request.
* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise.
@@ -491,6 +547,11 @@ The first argument can be either a `url` or an `options` object. The only requir
* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default).
* `pool` - An object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as [your options allow for it](request.js#L747)). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool.
* A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`).
+ * Note that if you are sending multiple requests in a loop and creating
+ multiple new `pool` objects, `maxSockets` will not work as intended. To
+ work around this, either use [`request.defaults`](#requestdefaultsoptions)
+ with your pool options or create the pool object with the `maxSockets`
+ property outside of the loop.
* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request
* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)
* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.
@@ -509,6 +570,8 @@ The first argument can be either a `url` or an `options` object. The only requir
chain used a tunneling proxy.
* `proxyHeaderWhiteList` - A whitelist of headers to send to a
tunneling proxy.
+* `proxyHeaderExclusiveList` - A whitelist of headers to send
+ exclusively to a tunneling proxy and not to destination.
The callback argument gets 3 arguments:
@@ -523,9 +586,14 @@ There are also shorthand methods for different HTTP METHODs and some other conve
### request.defaults(options)
-This method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.
+This method **returns a wrapper** around the normal request API that defaults
+to whatever options you pass to it.
+
+**Note:** `request.defaults()` **does not** modify the global request API;
+instead, it **returns a wrapper** that has your default settings applied to it.
-**Note:** You can call `.defaults()` on the wrapper that is returned from `request.defaults` to add/override defaults that were previously defaulted.
+**Note:** You can call `.defaults()` on the wrapper that is returned from
+`request.defaults` to add/override defaults that were previously defaulted.
For example:
```javascript
@@ -595,7 +663,7 @@ Function that creates a new cookie.
```javascript
request.cookie('key1=value1')
```
-### request.jar
+### request.jar()
Function that creates a new cookie jar.
@@ -684,7 +752,6 @@ request('http://www.google.com', function () {
OR
```javascript
-// `npm install --save tough-cookie` before this works
var j = request.jar();
var cookie = request.cookie('key1=value1');
var url = 'http://www.google.com';
@@ -694,7 +761,28 @@ request({url: url, jar: j}, function () {
})
```
-To inspect your cookie jar after a request
+To use a custom cookie store (such as a
+[`FileCookieStore`](https://github.com/mitsuru/tough-cookie-filestore)
+which supports saving to and restoring from JSON files), pass it as a parameter
+to `request.jar()`:
+
+```javascript
+var FileCookieStore = require('tough-cookie-filestore');
+// NOTE - currently the 'cookies.json' file must already exist!
+var j = request.jar(new FileCookieStore('cookies.json'));
+request = request.defaults({ jar : j })
+request('http://www.google.com', function() {
+ request('http://images.google.com')
+})
+```
+
+The cookie store must be a
+[`tough-cookie`](https://github.com/goinstant/tough-cookie)
+store and it must support synchronous operations; see the
+[`CookieStore` API docs](https://github.com/goinstant/tough-cookie/#cookiestore-api)
+for details.
+
+To inspect your cookie jar after a request:
```javascript
var j = request.jar()
diff --git a/deps/npm/node_modules/request/examples/README.md b/deps/npm/node_modules/request/examples/README.md
new file mode 100644
index 000000000..526d71bba
--- /dev/null
+++ b/deps/npm/node_modules/request/examples/README.md
@@ -0,0 +1,115 @@
+
+# Authentication
+
+## OAuth
+
+### OAuth1.0 Refresh Token
+
+- http://oauth.googlecode.com/svn/spec/ext/session/1.0/drafts/1/spec.html#anchor4
+- https://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html
+
+```js
+request.post('https://api.login.yahoo.com/oauth/v2/get_token', {
+ oauth: {
+ consumer_key: '...',
+ consumer_secret: '...',
+ token: '...',
+ token_secret: '...',
+ session_handle: '...'
+ }
+}, function (err, res, body) {
+ var result = require('querystring').parse(body)
+ // assert.equal(typeof result, 'object')
+})
+```
+
+### OAuth2 Refresh Token
+
+- https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-6
+
+```js
+request.post('https://accounts.google.com/o/oauth2/token', {
+ form: {
+ grant_type: 'refresh_token',
+ client_id: '...',
+ client_secret: '...',
+ refresh_token: '...'
+ },
+ json: true
+}, function (err, res, body) {
+ // assert.equal(typeof body, 'object')
+})
+```
+
+# Multipart
+
+## multipart/form-data
+
+### Flickr Image Upload
+
+- https://www.flickr.com/services/api/upload.api.html
+
+```js
+request.post('https://up.flickr.com/services/upload', {
+ oauth: {
+ consumer_key: '...',
+ consumer_secret: '...',
+ token: '...',
+ token_secret: '...'
+ },
+ // all meta data should be included here for proper signing
+ qs: {
+ title: 'My cat is awesome',
+ description: 'Sent on ' + new Date(),
+ is_public: 1
+ },
+ // again the same meta data + the actual photo
+ formData: {
+ title: 'My cat is awesome',
+ description: 'Sent on ' + new Date(),
+ is_public: 1,
+ photo:fs.createReadStream('cat.png')
+ },
+ json: true
+}, function (err, res, body) {
+ // assert.equal(typeof body, 'object')
+})
+```
+
+# Streams
+
+## `POST` data
+
+Use Request as a Writable stream to easily `POST` Readable streams (like files, other HTTP requests, or otherwise).
+
+TL;DR: Pipe a Readable Stream onto Request via:
+
+```
+READABLE.pipe(request.post(URL));
+```
+
+A more detailed example:
+
+```js
+var fs = require('fs')
+ , path = require('path')
+ , http = require('http')
+ , request = require('request')
+ , TMP_FILE_PATH = path.join(path.sep, 'tmp', 'foo')
+;
+
+// write a temporary file:
+fs.writeFileSync(TMP_FILE_PATH, 'foo bar baz quk\n');
+
+http.createServer(function(req, res) {
+ console.log('the server is receiving data!\n');
+ req
+ .on('end', res.end.bind(res))
+ .pipe(process.stdout)
+ ;
+}).listen(3000).unref();
+
+fs.createReadStream(TMP_FILE_PATH)
+ .pipe(request.post('http://127.0.0.1:3000'))
+;
+```
diff --git a/deps/npm/node_modules/request/index.js b/deps/npm/node_modules/request/index.js
index 033268405..99b8386b5 100755
--- a/deps/npm/node_modules/request/index.js
+++ b/deps/npm/node_modules/request/index.js
@@ -98,8 +98,8 @@ request.del = function (uri, options, callback) {
return requester(params)(params.uri || null, params.options, params.callback)
}
-request.jar = function () {
- return cookies.jar()
+request.jar = function (store) {
+ return cookies.jar(store)
}
request.cookie = function (str) {
diff --git a/deps/npm/node_modules/request/lib/cookies.js b/deps/npm/node_modules/request/lib/cookies.js
index 017bdb467..adde7c601 100644
--- a/deps/npm/node_modules/request/lib/cookies.js
+++ b/deps/npm/node_modules/request/lib/cookies.js
@@ -13,16 +13,13 @@ exports.parse = function(str) {
if (typeof str !== 'string') {
throw new Error('The cookie function only accepts STRING as param')
}
- if (!Cookie) {
- return null
- }
return Cookie.parse(str)
}
// Adapt the sometimes-Async api of tough.CookieJar to our requirements
-function RequestJar() {
+function RequestJar(store) {
var self = this
- self._jar = new CookieJar()
+ self._jar = new CookieJar(store)
}
RequestJar.prototype.setCookie = function(cookieOrStr, uri, options) {
var self = this
@@ -37,14 +34,6 @@ RequestJar.prototype.getCookies = function(uri) {
return self._jar.getCookiesSync(uri)
}
-exports.jar = function() {
- if (!CookieJar) {
- // tough-cookie not loaded, return a stub object:
- return {
- setCookie: function(){},
- getCookieString: function(){},
- getCookies: function(){}
- }
- }
- return new RequestJar()
+exports.jar = function(store) {
+ return new RequestJar(store)
}
diff --git a/deps/npm/node_modules/request/node_modules/caseless/README.md b/deps/npm/node_modules/request/node_modules/caseless/README.md
index 719584c85..e5077a216 100644
--- a/deps/npm/node_modules/request/node_modules/caseless/README.md
+++ b/deps/npm/node_modules/request/node_modules/caseless/README.md
@@ -1,6 +1,6 @@
## Caseless -- wrap an object to set and get property with caseless semantics but also preserve caseing.
-This library is incredibly useful when working with HTTP headers. It allows you to get/set/check for headers in a caseless manor while also preserving the caseing of headers the first time they are set.
+This library is incredibly useful when working with HTTP headers. It allows you to get/set/check for headers in a caseless manner while also preserving the caseing of headers the first time they are set.
## Usage
diff --git a/deps/npm/node_modules/request/node_modules/caseless/index.js b/deps/npm/node_modules/request/node_modules/caseless/index.js
index 231a997e0..607eea22b 100644
--- a/deps/npm/node_modules/request/node_modules/caseless/index.js
+++ b/deps/npm/node_modules/request/node_modules/caseless/index.js
@@ -25,12 +25,12 @@ Caseless.prototype.has = function (name) {
return false
}
Caseless.prototype.get = function (name) {
- var result, re, match
+ name = name.toLowerCase()
+ var result, _key
var headers = this.dict
Object.keys(headers).forEach(function (key) {
- re = new RegExp(name, 'i')
- match = key.match(re)
- if (match) result = headers[key]
+ _key = key.toLowerCase()
+ if (name === _key) result = headers[key]
})
return result
}
diff --git a/deps/npm/node_modules/request/node_modules/caseless/package.json b/deps/npm/node_modules/request/node_modules/caseless/package.json
index 3725c1026..1efd04a97 100644
--- a/deps/npm/node_modules/request/node_modules/caseless/package.json
+++ b/deps/npm/node_modules/request/node_modules/caseless/package.json
@@ -1,6 +1,6 @@
{
"name": "caseless",
- "version": "0.6.0",
+ "version": "0.8.0",
"description": "Caseless object set/get/has, very useful when working with HTTP headers.",
"main": "index.js",
"scripts": {
@@ -27,11 +27,12 @@
"devDependencies": {
"tape": "^2.10.2"
},
+ "gitHead": "1bfbf01d4481c057738a64ba284749222a944176",
"homepage": "https://github.com/mikeal/caseless",
- "_id": "caseless@0.6.0",
- "_shasum": "8167c1ab8397fb5bb95f96d28e5a81c50f247ac4",
- "_from": "caseless@>=0.6.0 <0.7.0",
- "_npmVersion": "1.4.9",
+ "_id": "caseless@0.8.0",
+ "_shasum": "5bca2881d41437f54b2407ebe34888c7b9ad4f7d",
+ "_from": "caseless@>=0.8.0 <0.9.0",
+ "_npmVersion": "2.0.0",
"_npmUser": {
"name": "mikeal",
"email": "mikeal.rogers@gmail.com"
@@ -43,10 +44,10 @@
}
],
"dist": {
- "shasum": "8167c1ab8397fb5bb95f96d28e5a81c50f247ac4",
- "tarball": "http://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz"
+ "shasum": "5bca2881d41437f54b2407ebe34888c7b9ad4f7d",
+ "tarball": "http://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz",
+ "_resolved": "https://registry.npmjs.org/caseless/-/caseless-0.8.0.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/caseless/test.js b/deps/npm/node_modules/request/node_modules/caseless/test.js
index 5604fa075..084bbaf5e 100644
--- a/deps/npm/node_modules/request/node_modules/caseless/test.js
+++ b/deps/npm/node_modules/request/node_modules/caseless/test.js
@@ -6,7 +6,7 @@ tape('set get has', function (t) {
var headers = {}
, c = caseless(headers)
;
- t.plan(14)
+ t.plan(17)
c.set('a-Header', 'asdf')
t.equal(c.get('a-header'), 'asdf')
t.equal(c.has('a-header'), 'a-Header')
@@ -30,4 +30,11 @@ tape('set get has', function (t) {
t.notOk(c.has('idonotexist'))
t.ok(c.del('idonotexist'))
+ c.set('tva', 'test1')
+ c.set('tva-header', 'test2')
+ t.equal(c.has('tva'), 'tva')
+ t.notOk(c.has('header'))
+
+ t.equal(c.get('tva'), 'test1')
+
})
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/License b/deps/npm/node_modules/request/node_modules/combined-stream/License
index 4804b7ab4..4804b7ab4 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/License
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/License
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md b/deps/npm/node_modules/request/node_modules/combined-stream/Readme.md
index 8043cb48a..8043cb48a 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/Readme.md
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js b/deps/npm/node_modules/request/node_modules/combined-stream/lib/combined_stream.js
index c18ad980d..6b5c21b6b 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/lib/combined_stream.js
@@ -30,7 +30,7 @@ CombinedStream.create = function(options) {
CombinedStream.isStreamLike = function(stream) {
return (typeof stream !== 'function')
&& (typeof stream !== 'string')
- && (typeof stream !== 'boolean')
+ && (typeof stream !== 'boolean')
&& (typeof stream !== 'number')
&& (!Buffer.isBuffer(stream));
};
@@ -40,12 +40,12 @@ CombinedStream.prototype.append = function(stream) {
if (isStreamLike) {
if (!(stream instanceof DelayedStream)) {
- stream.on('data', this._checkDataSize.bind(this));
-
- stream = DelayedStream.create(stream, {
+ var newStream = DelayedStream.create(stream, {
maxDataSize: Infinity,
pauseStream: this.pauseStreams,
});
+ stream.on('data', this._checkDataSize.bind(this));
+ stream = newStream;
}
this._handleErrors(stream);
@@ -97,7 +97,7 @@ CombinedStream.prototype._pipeNext = function(stream) {
var isStreamLike = CombinedStream.isStreamLike(stream);
if (isStreamLike) {
- stream.on('end', this._getNext.bind(this))
+ stream.on('end', this._getNext.bind(this));
stream.pipe(this, {end: false});
return;
}
@@ -123,6 +123,7 @@ CombinedStream.prototype.pause = function() {
return;
}
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
this.emit('pause');
};
@@ -133,6 +134,7 @@ CombinedStream.prototype.resume = function() {
this._getNext();
}
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
this.emit('resume');
};
@@ -159,7 +161,7 @@ CombinedStream.prototype._checkDataSize = function() {
}
var message =
- 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
this._emitError(new Error(message));
};
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/.npmignore
index 2fedb26cc..2fedb26cc 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/.npmignore
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/License
index 4804b7ab4..4804b7ab4 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/License
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Makefile
index b4ff85a33..b4ff85a33 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Makefile
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Readme.md
index 5cb5b35e5..5cb5b35e5 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/Readme.md
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js
index 7c10d4825..7c10d4825 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/package.json
index 3324a13e9..3324a13e9 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/package.json
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/common.js
index 4d71b8a64..4d71b8a64 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/common.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js
index 9ecad5b8a..9ecad5b8a 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js
index 6f417f3e9..6f417f3e9 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js
index b50c39783..b50c39783 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js
index fc4047e08..fc4047e08 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js
index a9d35e72c..a9d35e72c 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js
index 7638a2bf0..7638a2bf0 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js
index 7d312ab1f..7d312ab1f 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js
index d436163b7..d436163b7 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/run.js
index 0bb8e8224..0bb8e8224 100755
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/test/run.js
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json b/deps/npm/node_modules/request/node_modules/combined-stream/package.json
index 080953f16..a44fef984 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json
+++ b/deps/npm/node_modules/request/node_modules/combined-stream/package.json
@@ -6,7 +6,7 @@
},
"name": "combined-stream",
"description": "A stream that emits multiple other streams one after another.",
- "version": "0.0.5",
+ "version": "0.0.7",
"homepage": "https://github.com/felixge/node-combined-stream",
"repository": {
"type": "git",
@@ -25,17 +25,19 @@
"devDependencies": {
"far": "~0.0.7"
},
- "gitHead": "19d9bdd4c20f6806c2ae8adb00a53fb6fd154740",
"bugs": {
"url": "https://github.com/felixge/node-combined-stream/issues"
},
- "_id": "combined-stream@0.0.5",
- "_shasum": "29ed76e5c9aad07c4acf9ca3d32601cce28697a2",
- "_from": "combined-stream@>=0.0.4 <0.1.0",
- "_npmVersion": "1.4.14",
+ "_id": "combined-stream@0.0.7",
+ "dist": {
+ "shasum": "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f",
+ "tarball": "http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz"
+ },
+ "_from": "combined-stream@>=0.0.5 <0.1.0",
+ "_npmVersion": "1.4.3",
"_npmUser": {
- "name": "alexindigo",
- "email": "iam@alexindigo.com"
+ "name": "felixge",
+ "email": "felix@debuggable.com"
},
"maintainers": [
{
@@ -51,11 +53,8 @@
"email": "iam@alexindigo.com"
}
],
- "dist": {
- "shasum": "29ed76e5c9aad07c4acf9ca3d32601cce28697a2",
- "tarball": "http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz"
- },
"directories": {},
- "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz",
+ "_shasum": "0137e657baa5a7541c57ac37ac5fc07d73b4dc1f",
+ "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js b/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
index b8bd15848..5b33f554c 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
+++ b/deps/npm/node_modules/request/node_modules/form-data/lib/form_data.js
@@ -5,7 +5,7 @@ var http = require('http');
var https = require('https');
var parseUrl = require('url').parse;
var fs = require('fs');
-var mime = require('mime');
+var mime = require('mime-types');
var async = require('async');
module.exports = FormData;
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/HISTORY.md b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/HISTORY.md
new file mode 100644
index 000000000..c749c7145
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/HISTORY.md
@@ -0,0 +1,51 @@
+2.0.4 / 2014-12-10
+==================
+
+ * deps: mime-db@~1.3.0
+ - Add new mime types
+
+2.0.3 / 2014-11-09
+==================
+
+ * deps: mime-db@~1.2.0
+ - Add new mime types
+
+2.0.2 / 2014-09-28
+==================
+
+ * deps: mime-db@~1.1.0
+ - Add new mime types
+ - Add additional compressible
+ - Update charsets
+
+2.0.1 / 2014-09-07
+==================
+
+ * Support Node.js 0.6
+
+2.0.0 / 2014-09-02
+==================
+
+ * Use `mime-db`
+ * Remove `.define()`
+
+1.0.2 / 2014-08-04
+==================
+
+ * Set charset=utf-8 for `text/javascript`
+
+1.0.1 / 2014-06-24
+==================
+
+ * Add `text/jsx` type
+
+1.0.0 / 2014-05-12
+==================
+
+ * Return `false` for unknown types
+ * Set charset=utf-8 for `application/json`
+
+0.1.0 / 2014-05-02
+==================
+
+ * Initial release
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/LICENSE b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/LICENSE
index 451fc4550..a7ae8ee9b 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/LICENSE
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/LICENSE
@@ -1,4 +1,7 @@
-Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/README.md b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/README.md
new file mode 100644
index 000000000..99d658b8b
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/README.md
@@ -0,0 +1,99 @@
+# mime-types
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+The ultimate javascript content-type utility.
+
+Similar to [node-mime](https://github.com/broofa/node-mime), except:
+
+- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`,
+ so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.
+- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.
+- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db)
+- No `.define()` functionality
+
+Otherwise, the API is compatible.
+
+## Install
+
+```sh
+$ npm install mime-types
+```
+
+## Adding Types
+
+All mime types are based on [mime-db](https://github.com/jshttp/mime-db),
+so open a PR there if you'd like to add mime types.
+
+## API
+
+```js
+var mime = require('mime-types')
+```
+
+All functions return `false` if input is invalid or not found.
+
+### mime.lookup(path)
+
+Lookup the content-type associated with a file.
+
+```js
+mime.lookup('json') // 'application/json'
+mime.lookup('.md') // 'text/x-markdown'
+mime.lookup('file.html') // 'text/html'
+mime.lookup('folder/file.js') // 'application/javascript'
+
+mime.lookup('cats') // false
+```
+
+### mime.contentType(type)
+
+Create a full content-type header given a content-type or extension.
+
+```js
+mime.contentType('markdown') // 'text/x-markdown; charset=utf-8'
+mime.contentType('file.json') // 'application/json; charset=utf-8'
+```
+
+### mime.extension(type)
+
+Get the default extension for a content-type.
+
+```js
+mime.extension('application/octet-stream') // 'bin'
+```
+
+### mime.charset(type)
+
+Lookup the implied default charset of a content-type.
+
+```js
+mime.charset('text/x-markdown') // 'UTF-8'
+```
+
+### var type = mime.types[extension]
+
+A map of content-types by extension.
+
+### [extensions...] = mime.extensions[type]
+
+A map of extensions by content-type.
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/mime-types.svg?style=flat
+[npm-url]: https://npmjs.org/package/mime-types
+[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat
+[node-version-url]: http://nodejs.org/download/
+[travis-image]: https://img.shields.io/travis/jshttp/mime-types.svg?style=flat
+[travis-url]: https://travis-ci.org/jshttp/mime-types
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types.svg?style=flat
+[coveralls-url]: https://coveralls.io/r/jshttp/mime-types
+[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg?style=flat
+[downloads-url]: https://npmjs.org/package/mime-types
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/index.js b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/index.js
new file mode 100644
index 000000000..b46a202f5
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/index.js
@@ -0,0 +1,63 @@
+
+var db = require('mime-db')
+
+// types[extension] = type
+exports.types = Object.create(null)
+// extensions[type] = [extensions]
+exports.extensions = Object.create(null)
+
+Object.keys(db).forEach(function (name) {
+ var mime = db[name]
+ var exts = mime.extensions
+ if (!exts || !exts.length) return
+ exports.extensions[name] = exts
+ exts.forEach(function (ext) {
+ exports.types[ext] = name
+ })
+})
+
+exports.lookup = function (string) {
+ if (!string || typeof string !== "string") return false
+ // remove any leading paths, though we should just use path.basename
+ string = string.replace(/.*[\.\/\\]/, '').toLowerCase()
+ if (!string) return false
+ return exports.types[string] || false
+}
+
+exports.extension = function (type) {
+ if (!type || typeof type !== "string") return false
+ // to do: use media-typer
+ type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/)
+ if (!type) return false
+ var exts = exports.extensions[type[1].toLowerCase()]
+ if (!exts || !exts.length) return false
+ return exts[0]
+}
+
+// type has to be an exact mime type
+exports.charset = function (type) {
+ var mime = db[type]
+ if (mime && mime.charset) return mime.charset
+
+ // default text/* to utf-8
+ if (/^text\//.test(type)) return 'UTF-8'
+
+ return false
+}
+
+// backwards compatibility
+exports.charsets = {
+ lookup: exports.charset
+}
+
+// to do: maybe use set-type module or something
+exports.contentType = function (type) {
+ if (!type || typeof type !== "string") return false
+ if (!~type.indexOf('/')) type = exports.lookup(type)
+ if (!type) return false
+ if (!~type.indexOf('charset')) {
+ var charset = exports.charset(type)
+ if (charset) type += '; charset=' + charset.toLowerCase()
+ }
+ return type
+}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/LICENSE b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/LICENSE
new file mode 100644
index 000000000..a7ae8ee9b
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/LICENSE
@@ -0,0 +1,22 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/README.md b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/README.md
new file mode 100644
index 000000000..3b6364ebb
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/README.md
@@ -0,0 +1,72 @@
+# mime-db
+
+[![NPM Version][npm-version-image]][npm-url]
+[![NPM Downloads][npm-downloads-image]][npm-url]
+[![Node.js Version][node-image]][node-url]
+[![Build Status][travis-image]][travis-url]
+[![Coverage Status][coveralls-image]][coveralls-url]
+
+This is a database of all mime types.
+It consistents of a single, public JSON file and does not include any logic,
+allowing it to remain as unopinionated as possible with an API.
+It aggregates data from the following sources:
+
+- http://www.iana.org/assignments/media-types/media-types.xhtml
+- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
+
+## Usage
+
+```bash
+npm i mime-db
+```
+
+```js
+var db = require('mime-db');
+
+// grab data on .js files
+var data = db['application/javascript'];
+```
+
+If you're crazy enough to use this in the browser,
+you can just grab the JSON file:
+
+```
+https://cdn.rawgit.com/jshttp/mime-db/master/db.json
+```
+
+## Data Structure
+
+The JSON file is a map lookup for lowercased mime types.
+Each mime type has the following properties:
+
+- `.source` - where the mime type is defined.
+ If not set, it's probably a custom media type.
+ - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
+ - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
+- `.extensions[]` - known extensions associated with this mime type.
+- `.compressible` - whether a file of this type is can be gzipped.
+- `.charset` - the default charset associated with this type, if any.
+
+If unknown, every property could be `undefined`.
+
+## Repository Structure
+
+- `scripts` - these are scripts to run to build the database
+- `src/` - this is a folder of files created from remote sources like Apache and IANA
+- `lib/` - this is a folder of our own custom sources and db, which will be merged into `db.json`
+- `db.json` - the final built JSON file for end-user usage
+
+## Contributing
+
+To edit the database, only make PRs against files in the `lib/` folder.
+To update the build, run `npm run update`.
+
+[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg?style=flat
+[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg?style=flat
+[npm-url]: https://npmjs.org/package/mime-db
+[travis-image]: https://img.shields.io/travis/jshttp/mime-db.svg?style=flat
+[travis-url]: https://travis-ci.org/jshttp/mime-db
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db.svg?style=flat
+[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
+[node-image]: https://img.shields.io/node/v/mime-db.svg?style=flat
+[node-url]: http://nodejs.org/download/
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/db.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/db.json
new file mode 100644
index 000000000..f9f7a6b3c
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/db.json
@@ -0,0 +1,6385 @@
+{
+ "application/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "application/3gpdash-qoe-report+xml": {
+ "source": "iana"
+ },
+ "application/3gpp-ims+xml": {
+ "source": "iana"
+ },
+ "application/a2l": {
+ "source": "iana"
+ },
+ "application/activemessage": {
+ "source": "iana"
+ },
+ "application/alto-costmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-costmapfilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-directory+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointcost+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointcostparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointprop+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointpropparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-error+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-networkmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-networkmapfilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/aml": {
+ "source": "iana"
+ },
+ "application/andrew-inset": {
+ "source": "iana",
+ "extensions": ["ez"]
+ },
+ "application/applefile": {
+ "source": "iana"
+ },
+ "application/applixware": {
+ "source": "apache",
+ "extensions": ["aw"]
+ },
+ "application/atf": {
+ "source": "iana"
+ },
+ "application/atfx": {
+ "source": "iana"
+ },
+ "application/atom+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["atom"]
+ },
+ "application/atomcat+xml": {
+ "source": "iana",
+ "extensions": ["atomcat"]
+ },
+ "application/atomdeleted+xml": {
+ "source": "iana"
+ },
+ "application/atomicmail": {
+ "source": "iana"
+ },
+ "application/atomsvc+xml": {
+ "source": "iana",
+ "extensions": ["atomsvc"]
+ },
+ "application/atxml": {
+ "source": "iana"
+ },
+ "application/auth-policy+xml": {
+ "source": "iana"
+ },
+ "application/bacnet-xdd+zip": {
+ "source": "iana"
+ },
+ "application/batch-smtp": {
+ "source": "iana"
+ },
+ "application/beep+xml": {
+ "source": "iana"
+ },
+ "application/calendar+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/calendar+xml": {
+ "source": "iana"
+ },
+ "application/call-completion": {
+ "source": "iana"
+ },
+ "application/cals-1840": {
+ "source": "iana"
+ },
+ "application/cbor": {
+ "source": "iana"
+ },
+ "application/ccmp+xml": {
+ "source": "iana"
+ },
+ "application/ccxml+xml": {
+ "source": "iana",
+ "extensions": ["ccxml"]
+ },
+ "application/cdfx+xml": {
+ "source": "iana"
+ },
+ "application/cdmi-capability": {
+ "source": "iana",
+ "extensions": ["cdmia"]
+ },
+ "application/cdmi-container": {
+ "source": "iana",
+ "extensions": ["cdmic"]
+ },
+ "application/cdmi-domain": {
+ "source": "iana",
+ "extensions": ["cdmid"]
+ },
+ "application/cdmi-object": {
+ "source": "iana",
+ "extensions": ["cdmio"]
+ },
+ "application/cdmi-queue": {
+ "source": "iana",
+ "extensions": ["cdmiq"]
+ },
+ "application/cea": {
+ "source": "iana"
+ },
+ "application/cea-2018+xml": {
+ "source": "iana"
+ },
+ "application/cellml+xml": {
+ "source": "iana"
+ },
+ "application/cfw": {
+ "source": "iana"
+ },
+ "application/cms": {
+ "source": "iana"
+ },
+ "application/cnrp+xml": {
+ "source": "iana"
+ },
+ "application/coap-group+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/commonground": {
+ "source": "iana"
+ },
+ "application/conference-info+xml": {
+ "source": "iana"
+ },
+ "application/cpl+xml": {
+ "source": "iana"
+ },
+ "application/csrattrs": {
+ "source": "iana"
+ },
+ "application/csta+xml": {
+ "source": "iana"
+ },
+ "application/cstadata+xml": {
+ "source": "iana"
+ },
+ "application/cu-seeme": {
+ "source": "apache",
+ "extensions": ["cu"]
+ },
+ "application/cybercash": {
+ "source": "iana"
+ },
+ "application/dart": {
+ "compressible": true
+ },
+ "application/dash+xml": {
+ "source": "iana",
+ "extensions": ["mdp"]
+ },
+ "application/dashdelta": {
+ "source": "iana"
+ },
+ "application/davmount+xml": {
+ "source": "iana",
+ "extensions": ["davmount"]
+ },
+ "application/dca-rft": {
+ "source": "iana"
+ },
+ "application/dcd": {
+ "source": "iana"
+ },
+ "application/dec-dx": {
+ "source": "iana"
+ },
+ "application/dialog-info+xml": {
+ "source": "iana"
+ },
+ "application/dicom": {
+ "source": "iana"
+ },
+ "application/dii": {
+ "source": "iana"
+ },
+ "application/dit": {
+ "source": "iana"
+ },
+ "application/dns": {
+ "source": "iana"
+ },
+ "application/docbook+xml": {
+ "source": "apache",
+ "extensions": ["dbk"]
+ },
+ "application/dskpp+xml": {
+ "source": "iana"
+ },
+ "application/dssc+der": {
+ "source": "iana",
+ "extensions": ["dssc"]
+ },
+ "application/dssc+xml": {
+ "source": "iana",
+ "extensions": ["xdssc"]
+ },
+ "application/dvcs": {
+ "source": "iana"
+ },
+ "application/ecmascript": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ecma"]
+ },
+ "application/edi-consent": {
+ "source": "iana"
+ },
+ "application/edi-x12": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/edifact": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/emma+xml": {
+ "source": "iana",
+ "extensions": ["emma"]
+ },
+ "application/emotionml+xml": {
+ "source": "iana"
+ },
+ "application/encaprtp": {
+ "source": "iana"
+ },
+ "application/epp+xml": {
+ "source": "iana"
+ },
+ "application/epub+zip": {
+ "source": "iana",
+ "extensions": ["epub"]
+ },
+ "application/eshop": {
+ "source": "iana"
+ },
+ "application/example": {
+ "source": "iana"
+ },
+ "application/exi": {
+ "source": "iana",
+ "extensions": ["exi"]
+ },
+ "application/fastinfoset": {
+ "source": "iana"
+ },
+ "application/fastsoap": {
+ "source": "iana"
+ },
+ "application/fdt+xml": {
+ "source": "iana"
+ },
+ "application/fits": {
+ "source": "iana"
+ },
+ "application/font-sfnt": {
+ "source": "iana"
+ },
+ "application/font-tdpfr": {
+ "source": "iana",
+ "extensions": ["pfr"]
+ },
+ "application/font-woff": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["woff"]
+ },
+ "application/font-woff2": {
+ "compressible": false,
+ "extensions": ["woff2"]
+ },
+ "application/framework-attributes+xml": {
+ "source": "iana"
+ },
+ "application/gml+xml": {
+ "source": "apache",
+ "extensions": ["gml"]
+ },
+ "application/gpx+xml": {
+ "source": "apache",
+ "extensions": ["gpx"]
+ },
+ "application/gxf": {
+ "source": "apache",
+ "extensions": ["gxf"]
+ },
+ "application/gzip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/h224": {
+ "source": "iana"
+ },
+ "application/held+xml": {
+ "source": "iana"
+ },
+ "application/http": {
+ "source": "iana"
+ },
+ "application/hyperstudio": {
+ "source": "iana",
+ "extensions": ["stk"]
+ },
+ "application/ibe-key-request+xml": {
+ "source": "iana"
+ },
+ "application/ibe-pkg-reply+xml": {
+ "source": "iana"
+ },
+ "application/ibe-pp-data": {
+ "source": "iana"
+ },
+ "application/iges": {
+ "source": "iana"
+ },
+ "application/im-iscomposing+xml": {
+ "source": "iana"
+ },
+ "application/index": {
+ "source": "iana"
+ },
+ "application/index.cmd": {
+ "source": "iana"
+ },
+ "application/index.obj": {
+ "source": "iana"
+ },
+ "application/index.response": {
+ "source": "iana"
+ },
+ "application/index.vnd": {
+ "source": "iana"
+ },
+ "application/inkml+xml": {
+ "source": "iana",
+ "extensions": ["ink","inkml"]
+ },
+ "application/iotp": {
+ "source": "iana"
+ },
+ "application/ipfix": {
+ "source": "iana",
+ "extensions": ["ipfix"]
+ },
+ "application/ipp": {
+ "source": "iana"
+ },
+ "application/isup": {
+ "source": "iana"
+ },
+ "application/its+xml": {
+ "source": "iana"
+ },
+ "application/java-archive": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["jar"]
+ },
+ "application/java-serialized-object": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["ser"]
+ },
+ "application/java-vm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["class"]
+ },
+ "application/javascript": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["js"]
+ },
+ "application/jrd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["json","map"]
+ },
+ "application/json-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jsonml+json": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["jsonml"]
+ },
+ "application/kpml-request+xml": {
+ "source": "iana"
+ },
+ "application/kpml-response+xml": {
+ "source": "iana"
+ },
+ "application/ld+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/link-format": {
+ "source": "iana"
+ },
+ "application/load-control+xml": {
+ "source": "iana"
+ },
+ "application/lost+xml": {
+ "source": "iana",
+ "extensions": ["lostxml"]
+ },
+ "application/lostsync+xml": {
+ "source": "iana"
+ },
+ "application/lxf": {
+ "source": "iana"
+ },
+ "application/mac-binhex40": {
+ "source": "iana",
+ "extensions": ["hqx"]
+ },
+ "application/mac-compactpro": {
+ "source": "apache",
+ "extensions": ["cpt"]
+ },
+ "application/macwriteii": {
+ "source": "iana"
+ },
+ "application/mads+xml": {
+ "source": "iana",
+ "extensions": ["mads"]
+ },
+ "application/marc": {
+ "source": "iana",
+ "extensions": ["mrc"]
+ },
+ "application/marcxml+xml": {
+ "source": "iana",
+ "extensions": ["mrcx"]
+ },
+ "application/mathematica": {
+ "source": "iana",
+ "extensions": ["ma","nb","mb"]
+ },
+ "application/mathml+xml": {
+ "source": "iana",
+ "extensions": ["mathml"]
+ },
+ "application/mathml-content+xml": {
+ "source": "iana"
+ },
+ "application/mathml-presentation+xml": {
+ "source": "iana"
+ },
+ "application/mbms-associated-procedure-description+xml": {
+ "source": "iana"
+ },
+ "application/mbms-deregister+xml": {
+ "source": "iana"
+ },
+ "application/mbms-envelope+xml": {
+ "source": "iana"
+ },
+ "application/mbms-msk+xml": {
+ "source": "iana"
+ },
+ "application/mbms-msk-response+xml": {
+ "source": "iana"
+ },
+ "application/mbms-protection-description+xml": {
+ "source": "iana"
+ },
+ "application/mbms-reception-report+xml": {
+ "source": "iana"
+ },
+ "application/mbms-register+xml": {
+ "source": "iana"
+ },
+ "application/mbms-register-response+xml": {
+ "source": "iana"
+ },
+ "application/mbms-schedule+xml": {
+ "source": "iana"
+ },
+ "application/mbms-user-service-description+xml": {
+ "source": "iana"
+ },
+ "application/mbox": {
+ "source": "apache",
+ "extensions": ["mbox"]
+ },
+ "application/mbox+xml": {
+ "source": "iana"
+ },
+ "application/media-policy-dataset+xml": {
+ "source": "iana"
+ },
+ "application/media_control+xml": {
+ "source": "iana"
+ },
+ "application/mediaservercontrol+xml": {
+ "source": "iana",
+ "extensions": ["mscml"]
+ },
+ "application/merge-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/metalink+xml": {
+ "source": "apache",
+ "extensions": ["metalink"]
+ },
+ "application/metalink4+xml": {
+ "source": "iana",
+ "extensions": ["meta4"]
+ },
+ "application/mets+xml": {
+ "source": "iana",
+ "extensions": ["mets"]
+ },
+ "application/mf4": {
+ "source": "iana"
+ },
+ "application/mikey": {
+ "source": "iana"
+ },
+ "application/mods+xml": {
+ "source": "iana",
+ "extensions": ["mods"]
+ },
+ "application/moss-keys": {
+ "source": "iana"
+ },
+ "application/moss-signature": {
+ "source": "iana"
+ },
+ "application/mosskey-data": {
+ "source": "iana"
+ },
+ "application/mosskey-request": {
+ "source": "iana"
+ },
+ "application/mp21": {
+ "source": "iana",
+ "extensions": ["m21","mp21"]
+ },
+ "application/mp4": {
+ "source": "iana",
+ "extensions": ["mp4s","m4p"]
+ },
+ "application/mpeg4-generic": {
+ "source": "iana"
+ },
+ "application/mpeg4-iod": {
+ "source": "iana"
+ },
+ "application/mpeg4-iod-xmt": {
+ "source": "iana"
+ },
+ "application/mrb-consumer+xml": {
+ "source": "iana"
+ },
+ "application/mrb-publish+xml": {
+ "source": "iana"
+ },
+ "application/msc-ivr+xml": {
+ "source": "iana"
+ },
+ "application/msc-mixer+xml": {
+ "source": "iana"
+ },
+ "application/msword": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["doc","dot"]
+ },
+ "application/mxf": {
+ "source": "iana",
+ "extensions": ["mxf"]
+ },
+ "application/nasdata": {
+ "source": "iana"
+ },
+ "application/news-checkgroups": {
+ "source": "iana"
+ },
+ "application/news-groupinfo": {
+ "source": "iana"
+ },
+ "application/news-transmission": {
+ "source": "iana"
+ },
+ "application/nlsml+xml": {
+ "source": "iana"
+ },
+ "application/nss": {
+ "source": "iana"
+ },
+ "application/ocsp-request": {
+ "source": "iana"
+ },
+ "application/ocsp-response": {
+ "source": "apache"
+ },
+ "application/octet-stream": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","buffer"]
+ },
+ "application/oda": {
+ "source": "iana",
+ "extensions": ["oda"]
+ },
+ "application/odx": {
+ "source": "iana"
+ },
+ "application/oebps-package+xml": {
+ "source": "iana",
+ "extensions": ["opf"]
+ },
+ "application/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ogx"]
+ },
+ "application/omdoc+xml": {
+ "source": "apache",
+ "extensions": ["omdoc"]
+ },
+ "application/onenote": {
+ "source": "apache",
+ "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
+ },
+ "application/oscp-response": {
+ "source": "iana"
+ },
+ "application/oxps": {
+ "source": "iana",
+ "extensions": ["oxps"]
+ },
+ "application/p2p-overlay+xml": {
+ "source": "iana"
+ },
+ "application/parityfec": {
+ "source": "iana"
+ },
+ "application/patch-ops-error+xml": {
+ "source": "iana",
+ "extensions": ["xer"]
+ },
+ "application/pdf": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["pdf"]
+ },
+ "application/pdx": {
+ "source": "iana"
+ },
+ "application/pgp-encrypted": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["pgp"]
+ },
+ "application/pgp-keys": {
+ "source": "iana"
+ },
+ "application/pgp-signature": {
+ "source": "iana",
+ "extensions": ["asc","sig"]
+ },
+ "application/pics-rules": {
+ "source": "apache",
+ "extensions": ["prf"]
+ },
+ "application/pidf+xml": {
+ "source": "iana"
+ },
+ "application/pidf-diff+xml": {
+ "source": "iana"
+ },
+ "application/pkcs10": {
+ "source": "iana",
+ "extensions": ["p10"]
+ },
+ "application/pkcs7-mime": {
+ "source": "iana",
+ "extensions": ["p7m","p7c"]
+ },
+ "application/pkcs7-signature": {
+ "source": "iana",
+ "extensions": ["p7s"]
+ },
+ "application/pkcs8": {
+ "source": "iana",
+ "extensions": ["p8"]
+ },
+ "application/pkix-attr-cert": {
+ "source": "iana",
+ "extensions": ["ac"]
+ },
+ "application/pkix-cert": {
+ "source": "iana",
+ "extensions": ["cer"]
+ },
+ "application/pkix-crl": {
+ "source": "iana",
+ "extensions": ["crl"]
+ },
+ "application/pkix-pkipath": {
+ "source": "iana",
+ "extensions": ["pkipath"]
+ },
+ "application/pkixcmp": {
+ "source": "iana",
+ "extensions": ["pki"]
+ },
+ "application/pls+xml": {
+ "source": "iana",
+ "extensions": ["pls"]
+ },
+ "application/poc-settings+xml": {
+ "source": "iana"
+ },
+ "application/postscript": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ai","eps","ps"]
+ },
+ "application/provenance+xml": {
+ "source": "iana"
+ },
+ "application/prs.alvestrand.titrax-sheet": {
+ "source": "iana"
+ },
+ "application/prs.cww": {
+ "source": "iana",
+ "extensions": ["cww"]
+ },
+ "application/prs.hpub+zip": {
+ "source": "iana"
+ },
+ "application/prs.nprend": {
+ "source": "iana"
+ },
+ "application/prs.plucker": {
+ "source": "iana"
+ },
+ "application/prs.rdf-xml-crypt": {
+ "source": "iana"
+ },
+ "application/prs.xsf+xml": {
+ "source": "iana"
+ },
+ "application/pskc+xml": {
+ "source": "iana",
+ "extensions": ["pskcxml"]
+ },
+ "application/qsig": {
+ "source": "iana"
+ },
+ "application/raptorfec": {
+ "source": "iana"
+ },
+ "application/rdf+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rdf"]
+ },
+ "application/reginfo+xml": {
+ "source": "iana",
+ "extensions": ["rif"]
+ },
+ "application/relax-ng-compact-syntax": {
+ "source": "iana",
+ "extensions": ["rnc"]
+ },
+ "application/remote-printing": {
+ "source": "iana"
+ },
+ "application/reputon+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/resource-lists+xml": {
+ "source": "iana",
+ "extensions": ["rl"]
+ },
+ "application/resource-lists-diff+xml": {
+ "source": "iana",
+ "extensions": ["rld"]
+ },
+ "application/riscos": {
+ "source": "iana"
+ },
+ "application/rlmi+xml": {
+ "source": "iana"
+ },
+ "application/rls-services+xml": {
+ "source": "iana",
+ "extensions": ["rs"]
+ },
+ "application/rpki-ghostbusters": {
+ "source": "iana",
+ "extensions": ["gbr"]
+ },
+ "application/rpki-manifest": {
+ "source": "iana",
+ "extensions": ["mft"]
+ },
+ "application/rpki-roa": {
+ "source": "iana",
+ "extensions": ["roa"]
+ },
+ "application/rpki-updown": {
+ "source": "iana"
+ },
+ "application/rsd+xml": {
+ "source": "apache",
+ "extensions": ["rsd"]
+ },
+ "application/rss+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["rss"]
+ },
+ "application/rtf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rtf"]
+ },
+ "application/rtploopback": {
+ "source": "iana"
+ },
+ "application/rtx": {
+ "source": "iana"
+ },
+ "application/samlassertion+xml": {
+ "source": "iana"
+ },
+ "application/samlmetadata+xml": {
+ "source": "iana"
+ },
+ "application/sbml+xml": {
+ "source": "iana",
+ "extensions": ["sbml"]
+ },
+ "application/scaip+xml": {
+ "source": "iana"
+ },
+ "application/scvp-cv-request": {
+ "source": "iana",
+ "extensions": ["scq"]
+ },
+ "application/scvp-cv-response": {
+ "source": "iana",
+ "extensions": ["scs"]
+ },
+ "application/scvp-vp-request": {
+ "source": "iana",
+ "extensions": ["spq"]
+ },
+ "application/scvp-vp-response": {
+ "source": "iana",
+ "extensions": ["spp"]
+ },
+ "application/sdp": {
+ "source": "iana",
+ "extensions": ["sdp"]
+ },
+ "application/sep+xml": {
+ "source": "iana"
+ },
+ "application/sep-exi": {
+ "source": "iana"
+ },
+ "application/session-info": {
+ "source": "iana"
+ },
+ "application/set-payment": {
+ "source": "iana"
+ },
+ "application/set-payment-initiation": {
+ "source": "iana",
+ "extensions": ["setpay"]
+ },
+ "application/set-registration": {
+ "source": "iana"
+ },
+ "application/set-registration-initiation": {
+ "source": "iana",
+ "extensions": ["setreg"]
+ },
+ "application/sgml": {
+ "source": "iana"
+ },
+ "application/sgml-open-catalog": {
+ "source": "iana"
+ },
+ "application/shf+xml": {
+ "source": "iana",
+ "extensions": ["shf"]
+ },
+ "application/sieve": {
+ "source": "iana"
+ },
+ "application/simple-filter+xml": {
+ "source": "iana"
+ },
+ "application/simple-message-summary": {
+ "source": "iana"
+ },
+ "application/simplesymbolcontainer": {
+ "source": "iana"
+ },
+ "application/slate": {
+ "source": "iana"
+ },
+ "application/smil": {
+ "source": "iana"
+ },
+ "application/smil+xml": {
+ "source": "iana",
+ "extensions": ["smi","smil"]
+ },
+ "application/smpte336m": {
+ "source": "iana"
+ },
+ "application/soap+fastinfoset": {
+ "source": "iana"
+ },
+ "application/soap+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sparql-query": {
+ "source": "iana",
+ "extensions": ["rq"]
+ },
+ "application/sparql-results+xml": {
+ "source": "iana",
+ "extensions": ["srx"]
+ },
+ "application/spirits-event+xml": {
+ "source": "iana"
+ },
+ "application/sql": {
+ "source": "iana"
+ },
+ "application/srgs": {
+ "source": "iana",
+ "extensions": ["gram"]
+ },
+ "application/srgs+xml": {
+ "source": "iana",
+ "extensions": ["grxml"]
+ },
+ "application/sru+xml": {
+ "source": "iana",
+ "extensions": ["sru"]
+ },
+ "application/ssdl+xml": {
+ "source": "apache",
+ "extensions": ["ssdl"]
+ },
+ "application/ssml+xml": {
+ "source": "iana",
+ "extensions": ["ssml"]
+ },
+ "application/tamp-apex-update": {
+ "source": "iana"
+ },
+ "application/tamp-apex-update-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-community-update": {
+ "source": "iana"
+ },
+ "application/tamp-community-update-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-error": {
+ "source": "iana"
+ },
+ "application/tamp-sequence-adjust": {
+ "source": "iana"
+ },
+ "application/tamp-sequence-adjust-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-status-query": {
+ "source": "iana"
+ },
+ "application/tamp-status-response": {
+ "source": "iana"
+ },
+ "application/tamp-update": {
+ "source": "iana"
+ },
+ "application/tamp-update-confirm": {
+ "source": "iana"
+ },
+ "application/tar": {
+ "compressible": true
+ },
+ "application/tei+xml": {
+ "source": "iana",
+ "extensions": ["tei","teicorpus"]
+ },
+ "application/thraud+xml": {
+ "source": "iana",
+ "extensions": ["tfi"]
+ },
+ "application/timestamp-query": {
+ "source": "iana"
+ },
+ "application/timestamp-reply": {
+ "source": "iana"
+ },
+ "application/timestamped-data": {
+ "source": "iana",
+ "extensions": ["tsd"]
+ },
+ "application/ttml+xml": {
+ "source": "iana"
+ },
+ "application/tve-trigger": {
+ "source": "iana"
+ },
+ "application/ulpfec": {
+ "source": "iana"
+ },
+ "application/urc-grpsheet+xml": {
+ "source": "iana"
+ },
+ "application/urc-ressheet+xml": {
+ "source": "iana"
+ },
+ "application/urc-targetdesc+xml": {
+ "source": "iana"
+ },
+ "application/urc-uisocketdesc+xml": {
+ "source": "iana"
+ },
+ "application/vcard+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vcard+xml": {
+ "source": "iana"
+ },
+ "application/vemmi": {
+ "source": "iana"
+ },
+ "application/vividence.scriptfile": {
+ "source": "apache"
+ },
+ "application/vnd-acucobol": {
+ "source": "iana"
+ },
+ "application/vnd-curl": {
+ "source": "iana"
+ },
+ "application/vnd-dart": {
+ "source": "iana"
+ },
+ "application/vnd-dxr": {
+ "source": "iana"
+ },
+ "application/vnd-fdf": {
+ "source": "iana"
+ },
+ "application/vnd-mif": {
+ "source": "iana"
+ },
+ "application/vnd-sema": {
+ "source": "iana"
+ },
+ "application/vnd-wap-wmlc": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.bsf+xml": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.pic-bw-large": {
+ "source": "iana",
+ "extensions": ["plb"]
+ },
+ "application/vnd.3gpp.pic-bw-small": {
+ "source": "iana",
+ "extensions": ["psb"]
+ },
+ "application/vnd.3gpp.pic-bw-var": {
+ "source": "iana",
+ "extensions": ["pvb"]
+ },
+ "application/vnd.3gpp.sms": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp2.bcmcsinfo+xml": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp2.sms": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp2.tcap": {
+ "source": "iana",
+ "extensions": ["tcap"]
+ },
+ "application/vnd.3m.post-it-notes": {
+ "source": "iana",
+ "extensions": ["pwn"]
+ },
+ "application/vnd.accpac.simply.aso": {
+ "source": "iana",
+ "extensions": ["aso"]
+ },
+ "application/vnd.accpac.simply.imp": {
+ "source": "iana",
+ "extensions": ["imp"]
+ },
+ "application/vnd.acucobol": {
+ "source": "apache",
+ "extensions": ["acu"]
+ },
+ "application/vnd.acucorp": {
+ "source": "iana",
+ "extensions": ["atc","acutc"]
+ },
+ "application/vnd.adobe.air-application-installer-package+zip": {
+ "source": "apache",
+ "extensions": ["air"]
+ },
+ "application/vnd.adobe.flash-movie": {
+ "source": "iana"
+ },
+ "application/vnd.adobe.formscentral.fcdt": {
+ "source": "iana",
+ "extensions": ["fcdt"]
+ },
+ "application/vnd.adobe.fxp": {
+ "source": "iana",
+ "extensions": ["fxp","fxpl"]
+ },
+ "application/vnd.adobe.partial-upload": {
+ "source": "iana"
+ },
+ "application/vnd.adobe.xdp+xml": {
+ "source": "iana",
+ "extensions": ["xdp"]
+ },
+ "application/vnd.adobe.xfdf": {
+ "source": "iana",
+ "extensions": ["xfdf"]
+ },
+ "application/vnd.aether.imp": {
+ "source": "iana"
+ },
+ "application/vnd.ah-barcode": {
+ "source": "iana"
+ },
+ "application/vnd.ahead.space": {
+ "source": "iana",
+ "extensions": ["ahead"]
+ },
+ "application/vnd.airzip.filesecure.azf": {
+ "source": "iana",
+ "extensions": ["azf"]
+ },
+ "application/vnd.airzip.filesecure.azs": {
+ "source": "iana",
+ "extensions": ["azs"]
+ },
+ "application/vnd.amazon.ebook": {
+ "source": "apache",
+ "extensions": ["azw"]
+ },
+ "application/vnd.americandynamics.acc": {
+ "source": "iana",
+ "extensions": ["acc"]
+ },
+ "application/vnd.amiga.ami": {
+ "source": "iana",
+ "extensions": ["ami"]
+ },
+ "application/vnd.amundsen.maze+xml": {
+ "source": "iana"
+ },
+ "application/vnd.android.package-archive": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["apk"]
+ },
+ "application/vnd.anser-web-certificate-issue-initiation": {
+ "source": "iana",
+ "extensions": ["cii"]
+ },
+ "application/vnd.anser-web-funds-transfer-initiation": {
+ "source": "apache",
+ "extensions": ["fti"]
+ },
+ "application/vnd.antix.game-component": {
+ "source": "iana",
+ "extensions": ["atx"]
+ },
+ "application/vnd.apache.thrift.binary": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.compact": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.json": {
+ "source": "iana"
+ },
+ "application/vnd.api+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.apple.installer+xml": {
+ "source": "iana",
+ "extensions": ["mpkg"]
+ },
+ "application/vnd.apple.mpegurl": {
+ "source": "iana",
+ "extensions": ["m3u8"]
+ },
+ "application/vnd.arastra.swi": {
+ "source": "iana"
+ },
+ "application/vnd.aristanetworks.swi": {
+ "source": "iana",
+ "extensions": ["swi"]
+ },
+ "application/vnd.artsquare": {
+ "source": "iana"
+ },
+ "application/vnd.astraea-software.iota": {
+ "source": "iana",
+ "extensions": ["iota"]
+ },
+ "application/vnd.audiograph": {
+ "source": "iana",
+ "extensions": ["aep"]
+ },
+ "application/vnd.autopackage": {
+ "source": "iana"
+ },
+ "application/vnd.avistar+xml": {
+ "source": "iana"
+ },
+ "application/vnd.balsamiq.bmml+xml": {
+ "source": "iana"
+ },
+ "application/vnd.bekitzur-stech+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.blueice.multipass": {
+ "source": "iana",
+ "extensions": ["mpm"]
+ },
+ "application/vnd.bluetooth.ep.oob": {
+ "source": "iana"
+ },
+ "application/vnd.bluetooth.le.oob": {
+ "source": "iana"
+ },
+ "application/vnd.bmi": {
+ "source": "iana",
+ "extensions": ["bmi"]
+ },
+ "application/vnd.businessobjects": {
+ "source": "iana",
+ "extensions": ["rep"]
+ },
+ "application/vnd.cab-jscript": {
+ "source": "iana"
+ },
+ "application/vnd.canon-cpdl": {
+ "source": "iana"
+ },
+ "application/vnd.canon-lips": {
+ "source": "iana"
+ },
+ "application/vnd.cendio.thinlinc.clientconf": {
+ "source": "iana"
+ },
+ "application/vnd.century-systems.tcp_stream": {
+ "source": "iana"
+ },
+ "application/vnd.chemdraw+xml": {
+ "source": "iana",
+ "extensions": ["cdxml"]
+ },
+ "application/vnd.chipnuts.karaoke-mmd": {
+ "source": "iana",
+ "extensions": ["mmd"]
+ },
+ "application/vnd.cinderella": {
+ "source": "iana",
+ "extensions": ["cdy"]
+ },
+ "application/vnd.cirpack.isdn-ext": {
+ "source": "iana"
+ },
+ "application/vnd.claymore": {
+ "source": "iana",
+ "extensions": ["cla"]
+ },
+ "application/vnd.cloanto.rp9": {
+ "source": "iana",
+ "extensions": ["rp9"]
+ },
+ "application/vnd.clonk.c4group": {
+ "source": "iana",
+ "extensions": ["c4g","c4d","c4f","c4p","c4u"]
+ },
+ "application/vnd.cluetrust.cartomobile-config": {
+ "source": "iana",
+ "extensions": ["c11amc"]
+ },
+ "application/vnd.cluetrust.cartomobile-config-pkg": {
+ "source": "iana",
+ "extensions": ["c11amz"]
+ },
+ "application/vnd.coffeescript": {
+ "source": "iana"
+ },
+ "application/vnd.collection+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.collection.doc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.collection.next+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.commerce-battelle": {
+ "source": "iana"
+ },
+ "application/vnd.commonspace": {
+ "source": "iana",
+ "extensions": ["csp"]
+ },
+ "application/vnd.contact.cmsg": {
+ "source": "iana",
+ "extensions": ["cdbcmsg"]
+ },
+ "application/vnd.cosmocaller": {
+ "source": "iana",
+ "extensions": ["cmc"]
+ },
+ "application/vnd.crick.clicker": {
+ "source": "iana",
+ "extensions": ["clkx"]
+ },
+ "application/vnd.crick.clicker.keyboard": {
+ "source": "iana",
+ "extensions": ["clkk"]
+ },
+ "application/vnd.crick.clicker.palette": {
+ "source": "iana",
+ "extensions": ["clkp"]
+ },
+ "application/vnd.crick.clicker.template": {
+ "source": "iana",
+ "extensions": ["clkt"]
+ },
+ "application/vnd.crick.clicker.wordbank": {
+ "source": "iana",
+ "extensions": ["clkw"]
+ },
+ "application/vnd.criticaltools.wbs+xml": {
+ "source": "iana",
+ "extensions": ["wbs"]
+ },
+ "application/vnd.ctc-posml": {
+ "source": "iana",
+ "extensions": ["pml"]
+ },
+ "application/vnd.ctct.ws+xml": {
+ "source": "iana"
+ },
+ "application/vnd.cups-pdf": {
+ "source": "iana"
+ },
+ "application/vnd.cups-postscript": {
+ "source": "iana"
+ },
+ "application/vnd.cups-ppd": {
+ "source": "iana",
+ "extensions": ["ppd"]
+ },
+ "application/vnd.cups-raster": {
+ "source": "iana"
+ },
+ "application/vnd.cups-raw": {
+ "source": "iana"
+ },
+ "application/vnd.curl": {
+ "source": "apache"
+ },
+ "application/vnd.curl.car": {
+ "source": "apache",
+ "extensions": ["car"]
+ },
+ "application/vnd.curl.pcurl": {
+ "source": "apache",
+ "extensions": ["pcurl"]
+ },
+ "application/vnd.cyan.dean.root+xml": {
+ "source": "iana"
+ },
+ "application/vnd.cybank": {
+ "source": "iana"
+ },
+ "application/vnd.dart": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["dart"]
+ },
+ "application/vnd.data-vision.rdz": {
+ "source": "iana",
+ "extensions": ["rdz"]
+ },
+ "application/vnd.debian.binary-package": {
+ "source": "iana"
+ },
+ "application/vnd.dece-zip": {
+ "source": "iana"
+ },
+ "application/vnd.dece.data": {
+ "source": "iana",
+ "extensions": ["uvf","uvvf","uvd","uvvd"]
+ },
+ "application/vnd.dece.ttml+xml": {
+ "source": "iana",
+ "extensions": ["uvt","uvvt"]
+ },
+ "application/vnd.dece.unspecified": {
+ "source": "iana",
+ "extensions": ["uvx","uvvx"]
+ },
+ "application/vnd.dece.zip": {
+ "source": "apache",
+ "extensions": ["uvz","uvvz"]
+ },
+ "application/vnd.denovo.fcselayout-link": {
+ "source": "iana",
+ "extensions": ["fe_launch"]
+ },
+ "application/vnd.desmume-movie": {
+ "source": "iana"
+ },
+ "application/vnd.dir-bi.plate-dl-nosuffix": {
+ "source": "iana"
+ },
+ "application/vnd.dm.delegation+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dna": {
+ "source": "iana",
+ "extensions": ["dna"]
+ },
+ "application/vnd.document+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dolby.mlp": {
+ "source": "apache",
+ "extensions": ["mlp"]
+ },
+ "application/vnd.dolby.mobile.1": {
+ "source": "iana"
+ },
+ "application/vnd.dolby.mobile.2": {
+ "source": "iana"
+ },
+ "application/vnd.doremir.scorecloud-binary-document": {
+ "source": "iana"
+ },
+ "application/vnd.dpgraph": {
+ "source": "iana",
+ "extensions": ["dpg"]
+ },
+ "application/vnd.dreamfactory": {
+ "source": "iana",
+ "extensions": ["dfac"]
+ },
+ "application/vnd.ds-keypoint": {
+ "source": "apache",
+ "extensions": ["kpxx"]
+ },
+ "application/vnd.dtg.local": {
+ "source": "iana"
+ },
+ "application/vnd.dtg.local.flash": {
+ "source": "iana"
+ },
+ "application/vnd.dtg.local.html": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ait": {
+ "source": "iana",
+ "extensions": ["ait"]
+ },
+ "application/vnd.dvb.dvbj": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.esgcontainer": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcdftnotifaccess": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgaccess": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgaccess2": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgpdd": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcroaming": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.iptv.alfec-base": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.iptv.alfec-enhancement": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-aggregate-root+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-container+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-generic+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-ia-msglist+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-ia-registration-request+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-ia-registration-response+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-init+xml": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.pfr": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.service": {
+ "source": "apache",
+ "extensions": ["svc"]
+ },
+ "application/vnd.dvb_service": {
+ "source": "iana"
+ },
+ "application/vnd.dxr": {
+ "source": "apache"
+ },
+ "application/vnd.dynageo": {
+ "source": "iana",
+ "extensions": ["geo"]
+ },
+ "application/vnd.dzr": {
+ "source": "iana"
+ },
+ "application/vnd.easykaraoke.cdgdownload": {
+ "source": "iana"
+ },
+ "application/vnd.ecdis-update": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.chart": {
+ "source": "iana",
+ "extensions": ["mag"]
+ },
+ "application/vnd.ecowin.filerequest": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.fileupdate": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.series": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.seriesrequest": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.seriesupdate": {
+ "source": "iana"
+ },
+ "application/vnd.emclient.accessrequest+xml": {
+ "source": "iana"
+ },
+ "application/vnd.enliven": {
+ "source": "iana",
+ "extensions": ["nml"]
+ },
+ "application/vnd.enphase.envoy": {
+ "source": "iana"
+ },
+ "application/vnd.eprints.data+xml": {
+ "source": "iana"
+ },
+ "application/vnd.epson.esf": {
+ "source": "iana",
+ "extensions": ["esf"]
+ },
+ "application/vnd.epson.msf": {
+ "source": "iana",
+ "extensions": ["msf"]
+ },
+ "application/vnd.epson.quickanime": {
+ "source": "iana",
+ "extensions": ["qam"]
+ },
+ "application/vnd.epson.salt": {
+ "source": "iana",
+ "extensions": ["slt"]
+ },
+ "application/vnd.epson.ssf": {
+ "source": "iana",
+ "extensions": ["ssf"]
+ },
+ "application/vnd.ericsson.quickcall": {
+ "source": "iana"
+ },
+ "application/vnd.eszigno3+xml": {
+ "source": "iana",
+ "extensions": ["es3","et3"]
+ },
+ "application/vnd.etsi.aoc+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.asic-e+zip": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.asic-s+zip": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.cug+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvcommand+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvdiscovery+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvprofile+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvsad-bc+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvsad-cod+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvsad-npvr+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvservice+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvsync+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.iptvueprofile+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.mcid+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.mheg5": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.overload-control-policy-dataset+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.pstn+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.sci+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.simservs+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.timestamp-token": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.tsl+xml": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.tsl.der": {
+ "source": "iana"
+ },
+ "application/vnd.eudora.data": {
+ "source": "iana"
+ },
+ "application/vnd.ezpix-album": {
+ "source": "iana",
+ "extensions": ["ez2"]
+ },
+ "application/vnd.ezpix-package": {
+ "source": "iana",
+ "extensions": ["ez3"]
+ },
+ "application/vnd.f-secure.mobile": {
+ "source": "iana"
+ },
+ "application/vnd.fdf": {
+ "source": "apache",
+ "extensions": ["fdf"]
+ },
+ "application/vnd.fdsn.mseed": {
+ "source": "iana",
+ "extensions": ["mseed"]
+ },
+ "application/vnd.fdsn.seed": {
+ "source": "iana",
+ "extensions": ["seed","dataless"]
+ },
+ "application/vnd.ffsns": {
+ "source": "iana"
+ },
+ "application/vnd.fints": {
+ "source": "iana"
+ },
+ "application/vnd.flographit": {
+ "source": "iana",
+ "extensions": ["gph"]
+ },
+ "application/vnd.fluxtime.clip": {
+ "source": "iana",
+ "extensions": ["ftc"]
+ },
+ "application/vnd.font-fontforge-sfd": {
+ "source": "iana"
+ },
+ "application/vnd.framemaker": {
+ "source": "iana",
+ "extensions": ["fm","frame","maker","book"]
+ },
+ "application/vnd.frogans.fnc": {
+ "source": "iana",
+ "extensions": ["fnc"]
+ },
+ "application/vnd.frogans.ltf": {
+ "source": "iana",
+ "extensions": ["ltf"]
+ },
+ "application/vnd.fsc.weblaunch": {
+ "source": "iana",
+ "extensions": ["fsc"]
+ },
+ "application/vnd.fujitsu.oasys": {
+ "source": "iana",
+ "extensions": ["oas"]
+ },
+ "application/vnd.fujitsu.oasys2": {
+ "source": "iana",
+ "extensions": ["oa2"]
+ },
+ "application/vnd.fujitsu.oasys3": {
+ "source": "iana",
+ "extensions": ["oa3"]
+ },
+ "application/vnd.fujitsu.oasysgp": {
+ "source": "iana",
+ "extensions": ["fg5"]
+ },
+ "application/vnd.fujitsu.oasysprs": {
+ "source": "iana",
+ "extensions": ["bh2"]
+ },
+ "application/vnd.fujixerox.art-ex": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.art4": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.ddd": {
+ "source": "iana",
+ "extensions": ["ddd"]
+ },
+ "application/vnd.fujixerox.docuworks": {
+ "source": "iana",
+ "extensions": ["xdw"]
+ },
+ "application/vnd.fujixerox.docuworks.binder": {
+ "source": "iana",
+ "extensions": ["xbd"]
+ },
+ "application/vnd.fujixerox.docuworks.container": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.hbpl": {
+ "source": "iana"
+ },
+ "application/vnd.fut-misnet": {
+ "source": "iana"
+ },
+ "application/vnd.fuzzysheet": {
+ "source": "iana",
+ "extensions": ["fzs"]
+ },
+ "application/vnd.genomatix.tuxedo": {
+ "source": "iana",
+ "extensions": ["txd"]
+ },
+ "application/vnd.geo+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.geocube+xml": {
+ "source": "iana"
+ },
+ "application/vnd.geogebra.file": {
+ "source": "iana",
+ "extensions": ["ggb"]
+ },
+ "application/vnd.geogebra.tool": {
+ "source": "iana",
+ "extensions": ["ggt"]
+ },
+ "application/vnd.geometry-explorer": {
+ "source": "iana",
+ "extensions": ["gex","gre"]
+ },
+ "application/vnd.geonext": {
+ "source": "iana",
+ "extensions": ["gxt"]
+ },
+ "application/vnd.geoplan": {
+ "source": "iana",
+ "extensions": ["g2w"]
+ },
+ "application/vnd.geospace": {
+ "source": "iana",
+ "extensions": ["g3w"]
+ },
+ "application/vnd.globalplatform.card-content-mgt": {
+ "source": "iana"
+ },
+ "application/vnd.globalplatform.card-content-mgt-response": {
+ "source": "iana"
+ },
+ "application/vnd.gmx": {
+ "source": "iana",
+ "extensions": ["gmx"]
+ },
+ "application/vnd.google-earth.kml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["kml"]
+ },
+ "application/vnd.google-earth.kmz": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["kmz"]
+ },
+ "application/vnd.gov.sk.e-form+zip": {
+ "source": "iana"
+ },
+ "application/vnd.grafeq": {
+ "source": "iana",
+ "extensions": ["gqf","gqs"]
+ },
+ "application/vnd.gridmp": {
+ "source": "iana"
+ },
+ "application/vnd.groove-account": {
+ "source": "iana",
+ "extensions": ["gac"]
+ },
+ "application/vnd.groove-help": {
+ "source": "iana",
+ "extensions": ["ghf"]
+ },
+ "application/vnd.groove-identity-message": {
+ "source": "iana",
+ "extensions": ["gim"]
+ },
+ "application/vnd.groove-injector": {
+ "source": "iana",
+ "extensions": ["grv"]
+ },
+ "application/vnd.groove-tool-message": {
+ "source": "iana",
+ "extensions": ["gtm"]
+ },
+ "application/vnd.groove-tool-template": {
+ "source": "iana",
+ "extensions": ["tpl"]
+ },
+ "application/vnd.groove-vcard": {
+ "source": "iana",
+ "extensions": ["vcg"]
+ },
+ "application/vnd.hal+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hal+xml": {
+ "source": "iana",
+ "extensions": ["hal"]
+ },
+ "application/vnd.handheld-entertainment+xml": {
+ "source": "iana",
+ "extensions": ["zmm"]
+ },
+ "application/vnd.hbci": {
+ "source": "iana",
+ "extensions": ["hbci"]
+ },
+ "application/vnd.hcl-bireports": {
+ "source": "iana"
+ },
+ "application/vnd.heroku+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hhe.lesson-player": {
+ "source": "iana",
+ "extensions": ["les"]
+ },
+ "application/vnd.hp-hpgl": {
+ "source": "iana",
+ "extensions": ["hpgl"]
+ },
+ "application/vnd.hp-hpid": {
+ "source": "iana",
+ "extensions": ["hpid"]
+ },
+ "application/vnd.hp-hps": {
+ "source": "iana",
+ "extensions": ["hps"]
+ },
+ "application/vnd.hp-jlyt": {
+ "source": "iana",
+ "extensions": ["jlt"]
+ },
+ "application/vnd.hp-pcl": {
+ "source": "iana",
+ "extensions": ["pcl"]
+ },
+ "application/vnd.hp-pclxl": {
+ "source": "iana",
+ "extensions": ["pclxl"]
+ },
+ "application/vnd.httphone": {
+ "source": "iana"
+ },
+ "application/vnd.hydrostatix.sof-data": {
+ "source": "iana"
+ },
+ "application/vnd.hzn-3d-crossword": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.afplinedata": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.electronic-media": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.minipay": {
+ "source": "iana",
+ "extensions": ["mpy"]
+ },
+ "application/vnd.ibm.modcap": {
+ "source": "iana",
+ "extensions": ["afp","listafp","list3820"]
+ },
+ "application/vnd.ibm.rights-management": {
+ "source": "iana",
+ "extensions": ["irm"]
+ },
+ "application/vnd.ibm.secure-container": {
+ "source": "iana",
+ "extensions": ["sc"]
+ },
+ "application/vnd.iccprofile": {
+ "source": "iana",
+ "extensions": ["icc","icm"]
+ },
+ "application/vnd.ieee.1905": {
+ "source": "iana"
+ },
+ "application/vnd.igloader": {
+ "source": "iana",
+ "extensions": ["igl"]
+ },
+ "application/vnd.immervision-ivp": {
+ "source": "iana",
+ "extensions": ["ivp"]
+ },
+ "application/vnd.immervision-ivu": {
+ "source": "iana",
+ "extensions": ["ivu"]
+ },
+ "application/vnd.ims.imsccv1p1": {
+ "source": "iana"
+ },
+ "application/vnd.ims.lis.v2.result+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolproxy+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolproxy.id+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolsettings+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolsettings.simple+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.informedcontrol.rms+xml": {
+ "source": "iana"
+ },
+ "application/vnd.informix-visionary": {
+ "source": "iana"
+ },
+ "application/vnd.infotech.project": {
+ "source": "iana"
+ },
+ "application/vnd.infotech.project+xml": {
+ "source": "iana"
+ },
+ "application/vnd.innopath.wamp.notification": {
+ "source": "iana"
+ },
+ "application/vnd.insors.igm": {
+ "source": "iana",
+ "extensions": ["igm"]
+ },
+ "application/vnd.intercon.formnet": {
+ "source": "iana",
+ "extensions": ["xpw","xpx"]
+ },
+ "application/vnd.intergeo": {
+ "source": "iana",
+ "extensions": ["i2g"]
+ },
+ "application/vnd.intertrust.digibox": {
+ "source": "iana"
+ },
+ "application/vnd.intertrust.nncp": {
+ "source": "iana"
+ },
+ "application/vnd.intu.qbo": {
+ "source": "iana",
+ "extensions": ["qbo"]
+ },
+ "application/vnd.intu.qfx": {
+ "source": "iana",
+ "extensions": ["qfx"]
+ },
+ "application/vnd.iptc.g2.catalogitem+xml": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.conceptitem+xml": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.knowledgeitem+xml": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.newsitem+xml": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.newsmessage+xml": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.packageitem+xml": {
+ "source": "iana"
+ },
+ "application/vnd.iptc.g2.planningitem+xml": {
+ "source": "iana"
+ },
+ "application/vnd.ipunplugged.rcprofile": {
+ "source": "iana",
+ "extensions": ["rcprofile"]
+ },
+ "application/vnd.irepository.package+xml": {
+ "source": "iana",
+ "extensions": ["irp"]
+ },
+ "application/vnd.is-xpr": {
+ "source": "iana",
+ "extensions": ["xpr"]
+ },
+ "application/vnd.isac.fcs": {
+ "source": "iana",
+ "extensions": ["fcs"]
+ },
+ "application/vnd.jam": {
+ "source": "iana",
+ "extensions": ["jam"]
+ },
+ "application/vnd.japannet-directory-service": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-jpnstore-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-payment-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-registration": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-registration-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-setstore-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-verification": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-verification-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.jcp.javame.midlet-rms": {
+ "source": "iana",
+ "extensions": ["rms"]
+ },
+ "application/vnd.jisp": {
+ "source": "iana",
+ "extensions": ["jisp"]
+ },
+ "application/vnd.joost.joda-archive": {
+ "source": "iana",
+ "extensions": ["joda"]
+ },
+ "application/vnd.jsk.isdn-ngn": {
+ "source": "iana"
+ },
+ "application/vnd.kahootz": {
+ "source": "iana",
+ "extensions": ["ktz","ktr"]
+ },
+ "application/vnd.kde.karbon": {
+ "source": "iana",
+ "extensions": ["karbon"]
+ },
+ "application/vnd.kde.kchart": {
+ "source": "iana",
+ "extensions": ["chrt"]
+ },
+ "application/vnd.kde.kformula": {
+ "source": "iana",
+ "extensions": ["kfo"]
+ },
+ "application/vnd.kde.kivio": {
+ "source": "iana",
+ "extensions": ["flw"]
+ },
+ "application/vnd.kde.kontour": {
+ "source": "iana",
+ "extensions": ["kon"]
+ },
+ "application/vnd.kde.kpresenter": {
+ "source": "iana",
+ "extensions": ["kpr","kpt"]
+ },
+ "application/vnd.kde.kspread": {
+ "source": "iana",
+ "extensions": ["ksp"]
+ },
+ "application/vnd.kde.kword": {
+ "source": "iana",
+ "extensions": ["kwd","kwt"]
+ },
+ "application/vnd.kenameaapp": {
+ "source": "iana",
+ "extensions": ["htke"]
+ },
+ "application/vnd.kidspiration": {
+ "source": "iana",
+ "extensions": ["kia"]
+ },
+ "application/vnd.kinar": {
+ "source": "iana",
+ "extensions": ["kne","knp"]
+ },
+ "application/vnd.koan": {
+ "source": "iana",
+ "extensions": ["skp","skd","skt","skm"]
+ },
+ "application/vnd.kodak-descriptor": {
+ "source": "iana",
+ "extensions": ["sse"]
+ },
+ "application/vnd.las.las+xml": {
+ "source": "iana",
+ "extensions": ["lasxml"]
+ },
+ "application/vnd.liberty-request+xml": {
+ "source": "iana"
+ },
+ "application/vnd.llamagraphics.life-balance.desktop": {
+ "source": "iana",
+ "extensions": ["lbd"]
+ },
+ "application/vnd.llamagraphics.life-balance.exchange+xml": {
+ "source": "iana",
+ "extensions": ["lbe"]
+ },
+ "application/vnd.lotus-1-2-3": {
+ "source": "iana",
+ "extensions": ["123"]
+ },
+ "application/vnd.lotus-approach": {
+ "source": "iana",
+ "extensions": ["apr"]
+ },
+ "application/vnd.lotus-freelance": {
+ "source": "iana",
+ "extensions": ["pre"]
+ },
+ "application/vnd.lotus-notes": {
+ "source": "iana",
+ "extensions": ["nsf"]
+ },
+ "application/vnd.lotus-organizer": {
+ "source": "iana",
+ "extensions": ["org"]
+ },
+ "application/vnd.lotus-screencam": {
+ "source": "iana",
+ "extensions": ["scm"]
+ },
+ "application/vnd.lotus-wordpro": {
+ "source": "iana",
+ "extensions": ["lwp"]
+ },
+ "application/vnd.macports.portpkg": {
+ "source": "iana",
+ "extensions": ["portpkg"]
+ },
+ "application/vnd.marlin.drm.actiontoken+xml": {
+ "source": "iana"
+ },
+ "application/vnd.marlin.drm.conftoken+xml": {
+ "source": "iana"
+ },
+ "application/vnd.marlin.drm.license+xml": {
+ "source": "iana"
+ },
+ "application/vnd.marlin.drm.mdcf": {
+ "source": "iana"
+ },
+ "application/vnd.mason+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.maxmind.maxmind-db": {
+ "source": "iana"
+ },
+ "application/vnd.mcd": {
+ "source": "iana",
+ "extensions": ["mcd"]
+ },
+ "application/vnd.medcalcdata": {
+ "source": "iana",
+ "extensions": ["mc1"]
+ },
+ "application/vnd.mediastation.cdkey": {
+ "source": "iana",
+ "extensions": ["cdkey"]
+ },
+ "application/vnd.meridian-slingshot": {
+ "source": "iana"
+ },
+ "application/vnd.mfer": {
+ "source": "iana",
+ "extensions": ["mwf"]
+ },
+ "application/vnd.mfmp": {
+ "source": "iana",
+ "extensions": ["mfm"]
+ },
+ "application/vnd.micrografx-igx": {
+ "source": "iana"
+ },
+ "application/vnd.micrografx.flo": {
+ "source": "iana",
+ "extensions": ["flo"]
+ },
+ "application/vnd.micrografx.igx": {
+ "source": "apache",
+ "extensions": ["igx"]
+ },
+ "application/vnd.miele+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.mif": {
+ "source": "apache",
+ "extensions": ["mif"]
+ },
+ "application/vnd.minisoft-hp3000-save": {
+ "source": "iana"
+ },
+ "application/vnd.mitsubishi.misty-guard.trustweb": {
+ "source": "iana"
+ },
+ "application/vnd.mobius.daf": {
+ "source": "iana",
+ "extensions": ["daf"]
+ },
+ "application/vnd.mobius.dis": {
+ "source": "iana",
+ "extensions": ["dis"]
+ },
+ "application/vnd.mobius.mbk": {
+ "source": "iana",
+ "extensions": ["mbk"]
+ },
+ "application/vnd.mobius.mqy": {
+ "source": "iana",
+ "extensions": ["mqy"]
+ },
+ "application/vnd.mobius.msl": {
+ "source": "iana",
+ "extensions": ["msl"]
+ },
+ "application/vnd.mobius.plc": {
+ "source": "iana",
+ "extensions": ["plc"]
+ },
+ "application/vnd.mobius.txf": {
+ "source": "iana",
+ "extensions": ["txf"]
+ },
+ "application/vnd.mophun.application": {
+ "source": "iana",
+ "extensions": ["mpn"]
+ },
+ "application/vnd.mophun.certificate": {
+ "source": "iana",
+ "extensions": ["mpc"]
+ },
+ "application/vnd.motorola.flexsuite": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.adsi": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.fis": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.gotap": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.kmr": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.ttc": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.wem": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.iprm": {
+ "source": "iana"
+ },
+ "application/vnd.mozilla.xul+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xul"]
+ },
+ "application/vnd.ms-3mfdocument": {
+ "source": "iana"
+ },
+ "application/vnd.ms-artgalry": {
+ "source": "iana",
+ "extensions": ["cil"]
+ },
+ "application/vnd.ms-asf": {
+ "source": "iana"
+ },
+ "application/vnd.ms-cab-compressed": {
+ "source": "iana",
+ "extensions": ["cab"]
+ },
+ "application/vnd.ms-color.iccprofile": {
+ "source": "apache"
+ },
+ "application/vnd.ms-excel": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
+ },
+ "application/vnd.ms-excel.addin.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xlam"]
+ },
+ "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xlsb"]
+ },
+ "application/vnd.ms-excel.sheet.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xlsm"]
+ },
+ "application/vnd.ms-excel.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xltm"]
+ },
+ "application/vnd.ms-fontobject": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["eot"]
+ },
+ "application/vnd.ms-htmlhelp": {
+ "source": "iana",
+ "extensions": ["chm"]
+ },
+ "application/vnd.ms-ims": {
+ "source": "iana",
+ "extensions": ["ims"]
+ },
+ "application/vnd.ms-lrm": {
+ "source": "iana",
+ "extensions": ["lrm"]
+ },
+ "application/vnd.ms-office.activex+xml": {
+ "source": "iana"
+ },
+ "application/vnd.ms-officetheme": {
+ "source": "iana",
+ "extensions": ["thmx"]
+ },
+ "application/vnd.ms-opentype": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.ms-package.obfuscated-opentype": {
+ "source": "apache"
+ },
+ "application/vnd.ms-pki.seccat": {
+ "source": "apache",
+ "extensions": ["cat"]
+ },
+ "application/vnd.ms-pki.stl": {
+ "source": "apache",
+ "extensions": ["stl"]
+ },
+ "application/vnd.ms-playready.initiator+xml": {
+ "source": "iana"
+ },
+ "application/vnd.ms-powerpoint": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ppt","pps","pot"]
+ },
+ "application/vnd.ms-powerpoint.addin.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["ppam"]
+ },
+ "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["pptm"]
+ },
+ "application/vnd.ms-powerpoint.slide.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["sldm"]
+ },
+ "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["ppsm"]
+ },
+ "application/vnd.ms-powerpoint.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["potm"]
+ },
+ "application/vnd.ms-printing.printticket+xml": {
+ "source": "apache"
+ },
+ "application/vnd.ms-project": {
+ "source": "iana",
+ "extensions": ["mpp","mpt"]
+ },
+ "application/vnd.ms-tnef": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.printerpairing": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.lic-chlg-req": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.lic-resp": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.meter-chlg-req": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.meter-resp": {
+ "source": "iana"
+ },
+ "application/vnd.ms-word.document.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["docm"]
+ },
+ "application/vnd.ms-word.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["dotm"]
+ },
+ "application/vnd.ms-works": {
+ "source": "iana",
+ "extensions": ["wps","wks","wcm","wdb"]
+ },
+ "application/vnd.ms-wpl": {
+ "source": "iana",
+ "extensions": ["wpl"]
+ },
+ "application/vnd.ms-xpsdocument": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["xps"]
+ },
+ "application/vnd.mseq": {
+ "source": "iana",
+ "extensions": ["mseq"]
+ },
+ "application/vnd.msign": {
+ "source": "iana"
+ },
+ "application/vnd.multiad.creator": {
+ "source": "iana"
+ },
+ "application/vnd.multiad.creator.cif": {
+ "source": "iana"
+ },
+ "application/vnd.music-niff": {
+ "source": "iana"
+ },
+ "application/vnd.musician": {
+ "source": "iana",
+ "extensions": ["mus"]
+ },
+ "application/vnd.muvee.style": {
+ "source": "iana",
+ "extensions": ["msty"]
+ },
+ "application/vnd.mynfc": {
+ "source": "iana",
+ "extensions": ["taglet"]
+ },
+ "application/vnd.ncd.control": {
+ "source": "iana"
+ },
+ "application/vnd.ncd.reference": {
+ "source": "iana"
+ },
+ "application/vnd.nervana": {
+ "source": "iana"
+ },
+ "application/vnd.netfpx": {
+ "source": "iana"
+ },
+ "application/vnd.neurolanguage.nlu": {
+ "source": "iana",
+ "extensions": ["nlu"]
+ },
+ "application/vnd.nintendo.nitro.rom": {
+ "source": "iana"
+ },
+ "application/vnd.nintendo.snes.rom": {
+ "source": "iana"
+ },
+ "application/vnd.nitf": {
+ "source": "iana",
+ "extensions": ["ntf","nitf"]
+ },
+ "application/vnd.noblenet-directory": {
+ "source": "iana",
+ "extensions": ["nnd"]
+ },
+ "application/vnd.noblenet-sealer": {
+ "source": "iana",
+ "extensions": ["nns"]
+ },
+ "application/vnd.noblenet-web": {
+ "source": "iana",
+ "extensions": ["nnw"]
+ },
+ "application/vnd.nokia.catalogs": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.conml+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.conml+xml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.iptv.config+xml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.isds-radio-presets": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmark+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmark+xml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmarkcollection+xml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.n-gage.ac+xml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.n-gage.data": {
+ "source": "iana",
+ "extensions": ["ngdat"]
+ },
+ "application/vnd.nokia.n-gage.symbian.install": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.ncd": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.pcd+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.pcd+xml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.radio-preset": {
+ "source": "iana",
+ "extensions": ["rpst"]
+ },
+ "application/vnd.nokia.radio-presets": {
+ "source": "iana",
+ "extensions": ["rpss"]
+ },
+ "application/vnd.novadigm.edm": {
+ "source": "iana",
+ "extensions": ["edm"]
+ },
+ "application/vnd.novadigm.edx": {
+ "source": "iana",
+ "extensions": ["edx"]
+ },
+ "application/vnd.novadigm.ext": {
+ "source": "iana",
+ "extensions": ["ext"]
+ },
+ "application/vnd.ntt-local.content-share": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.file-transfer": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.ogw_remote-access": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.sip-ta_remote": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.sip-ta_tcp_stream": {
+ "source": "iana"
+ },
+ "application/vnd.oasis.opendocument.chart": {
+ "source": "iana",
+ "extensions": ["odc"]
+ },
+ "application/vnd.oasis.opendocument.chart-template": {
+ "source": "iana",
+ "extensions": ["otc"]
+ },
+ "application/vnd.oasis.opendocument.database": {
+ "source": "iana",
+ "extensions": ["odb"]
+ },
+ "application/vnd.oasis.opendocument.formula": {
+ "source": "iana",
+ "extensions": ["odf"]
+ },
+ "application/vnd.oasis.opendocument.formula-template": {
+ "source": "iana",
+ "extensions": ["odft"]
+ },
+ "application/vnd.oasis.opendocument.graphics": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["odg"]
+ },
+ "application/vnd.oasis.opendocument.graphics-template": {
+ "source": "iana",
+ "extensions": ["otg"]
+ },
+ "application/vnd.oasis.opendocument.image": {
+ "source": "iana",
+ "extensions": ["odi"]
+ },
+ "application/vnd.oasis.opendocument.image-template": {
+ "source": "iana",
+ "extensions": ["oti"]
+ },
+ "application/vnd.oasis.opendocument.presentation": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["odp"]
+ },
+ "application/vnd.oasis.opendocument.presentation-template": {
+ "source": "iana",
+ "extensions": ["otp"]
+ },
+ "application/vnd.oasis.opendocument.spreadsheet": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ods"]
+ },
+ "application/vnd.oasis.opendocument.spreadsheet-template": {
+ "source": "iana",
+ "extensions": ["ots"]
+ },
+ "application/vnd.oasis.opendocument.text": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["odt"]
+ },
+ "application/vnd.oasis.opendocument.text-master": {
+ "source": "iana",
+ "extensions": ["odm"]
+ },
+ "application/vnd.oasis.opendocument.text-template": {
+ "source": "iana",
+ "extensions": ["ott"]
+ },
+ "application/vnd.oasis.opendocument.text-web": {
+ "source": "iana",
+ "extensions": ["oth"]
+ },
+ "application/vnd.obn": {
+ "source": "iana"
+ },
+ "application/vnd.oftn.l10n+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.contentaccessdownload+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.contentaccessstreaming+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.cspg-hexbinary": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.dae.svg+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.dae.xhtml+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.mippvcontrolmessage+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.pae.gem": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.spdiscovery+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.spdlist+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.ueprofile+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.userprofile+xml": {
+ "source": "iana"
+ },
+ "application/vnd.olpc-sugar": {
+ "source": "iana",
+ "extensions": ["xo"]
+ },
+ "application/vnd.oma-scws-config": {
+ "source": "iana"
+ },
+ "application/vnd.oma-scws-http-request": {
+ "source": "iana"
+ },
+ "application/vnd.oma-scws-http-response": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.drm-trigger+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.imd+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.ltkm": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.notification+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.provisioningtrigger": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgboot": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgdd+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgdu": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.simple-symbol-container": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.smartcard-trigger+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sprov+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.stkm": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-address-book+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-feature-handler+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-pcc+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-subs-invite+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-user-prefs+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dcd": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dcdc": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dd2+xml": {
+ "source": "iana",
+ "extensions": ["dd2"]
+ },
+ "application/vnd.oma.drm.risd+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.group-usage-list+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.pal+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.poc.detailed-progress-report+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.poc.final-report+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.poc.groups+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.poc.invocation-descriptor+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.poc.optimized-progress-report+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.push": {
+ "source": "iana"
+ },
+ "application/vnd.oma.scidm.messages+xml": {
+ "source": "iana"
+ },
+ "application/vnd.oma.xcap-directory+xml": {
+ "source": "iana"
+ },
+ "application/vnd.omads-email+xml": {
+ "source": "iana"
+ },
+ "application/vnd.omads-file+xml": {
+ "source": "iana"
+ },
+ "application/vnd.omads-folder+xml": {
+ "source": "iana"
+ },
+ "application/vnd.omaloc-supl-init": {
+ "source": "iana"
+ },
+ "application/vnd.openeye.oeb": {
+ "source": "iana"
+ },
+ "application/vnd.openofficeorg.extension": {
+ "source": "apache",
+ "extensions": ["oxt"]
+ },
+ "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawing+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml-template": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["pptx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slide": {
+ "source": "iana",
+ "extensions": ["sldx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
+ "source": "iana",
+ "extensions": ["ppsx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.template": {
+ "source": "apache",
+ "extensions": ["potx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml-template": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["xlsx"]
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
+ "source": "apache",
+ "extensions": ["xltx"]
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.theme+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.vmldrawing": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml-template": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["docx"]
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
+ "source": "apache",
+ "extensions": ["dotx"]
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-package.core-properties+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-package.relationships+xml": {
+ "source": "iana"
+ },
+ "application/vnd.orange.indata": {
+ "source": "iana"
+ },
+ "application/vnd.osa.netdeploy": {
+ "source": "iana"
+ },
+ "application/vnd.osgeo.mapguide.package": {
+ "source": "iana",
+ "extensions": ["mgp"]
+ },
+ "application/vnd.osgi.bundle": {
+ "source": "iana"
+ },
+ "application/vnd.osgi.dp": {
+ "source": "iana",
+ "extensions": ["dp"]
+ },
+ "application/vnd.osgi.subsystem": {
+ "source": "iana",
+ "extensions": ["esa"]
+ },
+ "application/vnd.otps.ct-kip+xml": {
+ "source": "iana"
+ },
+ "application/vnd.palm": {
+ "source": "iana",
+ "extensions": ["pdb","pqa","oprc"]
+ },
+ "application/vnd.panoply": {
+ "source": "iana"
+ },
+ "application/vnd.paos+xml": {
+ "source": "iana"
+ },
+ "application/vnd.paos.xml": {
+ "source": "apache"
+ },
+ "application/vnd.pawaafile": {
+ "source": "iana",
+ "extensions": ["paw"]
+ },
+ "application/vnd.pcos": {
+ "source": "iana"
+ },
+ "application/vnd.pg.format": {
+ "source": "iana",
+ "extensions": ["str"]
+ },
+ "application/vnd.pg.osasli": {
+ "source": "iana",
+ "extensions": ["ei6"]
+ },
+ "application/vnd.piaccess.application-licence": {
+ "source": "iana"
+ },
+ "application/vnd.picsel": {
+ "source": "iana",
+ "extensions": ["efif"]
+ },
+ "application/vnd.pmi.widget": {
+ "source": "iana",
+ "extensions": ["wg"]
+ },
+ "application/vnd.poc.group-advertisement+xml": {
+ "source": "iana"
+ },
+ "application/vnd.pocketlearn": {
+ "source": "iana",
+ "extensions": ["plf"]
+ },
+ "application/vnd.powerbuilder6": {
+ "source": "iana",
+ "extensions": ["pbd"]
+ },
+ "application/vnd.powerbuilder6-s": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder7": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder7-s": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder75": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder75-s": {
+ "source": "iana"
+ },
+ "application/vnd.preminet": {
+ "source": "iana"
+ },
+ "application/vnd.previewsystems.box": {
+ "source": "iana",
+ "extensions": ["box"]
+ },
+ "application/vnd.proteus.magazine": {
+ "source": "iana",
+ "extensions": ["mgz"]
+ },
+ "application/vnd.publishare-delta-tree": {
+ "source": "iana",
+ "extensions": ["qps"]
+ },
+ "application/vnd.pvi.ptid1": {
+ "source": "iana",
+ "extensions": ["ptid"]
+ },
+ "application/vnd.pwg-multiplexed": {
+ "source": "apache"
+ },
+ "application/vnd.pwg-xhtml-print+xml": {
+ "source": "iana"
+ },
+ "application/vnd.qualcomm.brew-app-res": {
+ "source": "iana"
+ },
+ "application/vnd.quark.quarkxpress": {
+ "source": "iana",
+ "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
+ },
+ "application/vnd.quobject-quoxdocument": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.moml+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-audit+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-audit-conf+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-audit-conn+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-audit-dialog+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-audit-stream+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-conf+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog-base+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog-fax-detect+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog-group+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog-speech+xml": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.msml-dialog-transform+xml": {
+ "source": "iana"
+ },
+ "application/vnd.rainstor.data": {
+ "source": "iana"
+ },
+ "application/vnd.rapid": {
+ "source": "iana"
+ },
+ "application/vnd.realvnc.bed": {
+ "source": "iana",
+ "extensions": ["bed"]
+ },
+ "application/vnd.recordare.musicxml": {
+ "source": "iana",
+ "extensions": ["mxl"]
+ },
+ "application/vnd.recordare.musicxml+xml": {
+ "source": "iana",
+ "extensions": ["musicxml"]
+ },
+ "application/vnd.renlearn.rlprint": {
+ "source": "iana"
+ },
+ "application/vnd.rig.cryptonote": {
+ "source": "iana",
+ "extensions": ["cryptonote"]
+ },
+ "application/vnd.rim.cod": {
+ "source": "apache",
+ "extensions": ["cod"]
+ },
+ "application/vnd.rn-realmedia": {
+ "source": "apache",
+ "extensions": ["rm"]
+ },
+ "application/vnd.rn-realmedia-vbr": {
+ "source": "apache",
+ "extensions": ["rmvb"]
+ },
+ "application/vnd.route66.link66+xml": {
+ "source": "iana",
+ "extensions": ["link66"]
+ },
+ "application/vnd.rs-274x": {
+ "source": "iana"
+ },
+ "application/vnd.ruckus.download": {
+ "source": "iana"
+ },
+ "application/vnd.s3sms": {
+ "source": "iana"
+ },
+ "application/vnd.sailingtracker.track": {
+ "source": "iana",
+ "extensions": ["st"]
+ },
+ "application/vnd.sbm.cid": {
+ "source": "iana"
+ },
+ "application/vnd.sbm.mid2": {
+ "source": "iana"
+ },
+ "application/vnd.scribus": {
+ "source": "iana"
+ },
+ "application/vnd.sealed-doc": {
+ "source": "iana"
+ },
+ "application/vnd.sealed-eml": {
+ "source": "iana"
+ },
+ "application/vnd.sealed-mht": {
+ "source": "iana"
+ },
+ "application/vnd.sealed-ppt": {
+ "source": "iana"
+ },
+ "application/vnd.sealed-tiff": {
+ "source": "iana"
+ },
+ "application/vnd.sealed-xls": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.3df": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.csf": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.doc": {
+ "source": "apache"
+ },
+ "application/vnd.sealed.eml": {
+ "source": "apache"
+ },
+ "application/vnd.sealed.mht": {
+ "source": "apache"
+ },
+ "application/vnd.sealed.net": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.ppt": {
+ "source": "apache"
+ },
+ "application/vnd.sealed.tiff": {
+ "source": "apache"
+ },
+ "application/vnd.sealed.xls": {
+ "source": "apache"
+ },
+ "application/vnd.sealedmedia.softseal-html": {
+ "source": "iana"
+ },
+ "application/vnd.sealedmedia.softseal-pdf": {
+ "source": "iana"
+ },
+ "application/vnd.sealedmedia.softseal.html": {
+ "source": "apache"
+ },
+ "application/vnd.sealedmedia.softseal.pdf": {
+ "source": "apache"
+ },
+ "application/vnd.seemail": {
+ "source": "iana",
+ "extensions": ["see"]
+ },
+ "application/vnd.sema": {
+ "source": "apache",
+ "extensions": ["sema"]
+ },
+ "application/vnd.semd": {
+ "source": "iana",
+ "extensions": ["semd"]
+ },
+ "application/vnd.semf": {
+ "source": "iana",
+ "extensions": ["semf"]
+ },
+ "application/vnd.shana.informed.formdata": {
+ "source": "iana",
+ "extensions": ["ifm"]
+ },
+ "application/vnd.shana.informed.formtemplate": {
+ "source": "iana",
+ "extensions": ["itp"]
+ },
+ "application/vnd.shana.informed.interchange": {
+ "source": "iana",
+ "extensions": ["iif"]
+ },
+ "application/vnd.shana.informed.package": {
+ "source": "iana",
+ "extensions": ["ipk"]
+ },
+ "application/vnd.simtech-mindmapper": {
+ "source": "iana",
+ "extensions": ["twd","twds"]
+ },
+ "application/vnd.siren+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.smaf": {
+ "source": "iana",
+ "extensions": ["mmf"]
+ },
+ "application/vnd.smart.notebook": {
+ "source": "iana"
+ },
+ "application/vnd.smart.teacher": {
+ "source": "iana",
+ "extensions": ["teacher"]
+ },
+ "application/vnd.software602.filler.form+xml": {
+ "source": "iana"
+ },
+ "application/vnd.software602.filler.form-xml-zip": {
+ "source": "iana"
+ },
+ "application/vnd.solent.sdkm+xml": {
+ "source": "iana",
+ "extensions": ["sdkm","sdkd"]
+ },
+ "application/vnd.spotfire.dxp": {
+ "source": "iana",
+ "extensions": ["dxp"]
+ },
+ "application/vnd.spotfire.sfs": {
+ "source": "iana",
+ "extensions": ["sfs"]
+ },
+ "application/vnd.sss-cod": {
+ "source": "iana"
+ },
+ "application/vnd.sss-dtf": {
+ "source": "iana"
+ },
+ "application/vnd.sss-ntf": {
+ "source": "iana"
+ },
+ "application/vnd.stardivision.calc": {
+ "source": "apache",
+ "extensions": ["sdc"]
+ },
+ "application/vnd.stardivision.draw": {
+ "source": "apache",
+ "extensions": ["sda"]
+ },
+ "application/vnd.stardivision.impress": {
+ "source": "apache",
+ "extensions": ["sdd"]
+ },
+ "application/vnd.stardivision.math": {
+ "source": "apache",
+ "extensions": ["smf"]
+ },
+ "application/vnd.stardivision.writer": {
+ "source": "apache",
+ "extensions": ["sdw","vor"]
+ },
+ "application/vnd.stardivision.writer-global": {
+ "source": "apache",
+ "extensions": ["sgl"]
+ },
+ "application/vnd.stepmania.package": {
+ "source": "iana",
+ "extensions": ["smzip"]
+ },
+ "application/vnd.stepmania.stepchart": {
+ "source": "iana",
+ "extensions": ["sm"]
+ },
+ "application/vnd.street-stream": {
+ "source": "iana"
+ },
+ "application/vnd.sun.wadl+xml": {
+ "source": "iana"
+ },
+ "application/vnd.sun.xml.calc": {
+ "source": "apache",
+ "extensions": ["sxc"]
+ },
+ "application/vnd.sun.xml.calc.template": {
+ "source": "apache",
+ "extensions": ["stc"]
+ },
+ "application/vnd.sun.xml.draw": {
+ "source": "apache",
+ "extensions": ["sxd"]
+ },
+ "application/vnd.sun.xml.draw.template": {
+ "source": "apache",
+ "extensions": ["std"]
+ },
+ "application/vnd.sun.xml.impress": {
+ "source": "apache",
+ "extensions": ["sxi"]
+ },
+ "application/vnd.sun.xml.impress.template": {
+ "source": "apache",
+ "extensions": ["sti"]
+ },
+ "application/vnd.sun.xml.math": {
+ "source": "apache",
+ "extensions": ["sxm"]
+ },
+ "application/vnd.sun.xml.writer": {
+ "source": "apache",
+ "extensions": ["sxw"]
+ },
+ "application/vnd.sun.xml.writer.global": {
+ "source": "apache",
+ "extensions": ["sxg"]
+ },
+ "application/vnd.sun.xml.writer.template": {
+ "source": "apache",
+ "extensions": ["stw"]
+ },
+ "application/vnd.sus-calendar": {
+ "source": "iana",
+ "extensions": ["sus","susp"]
+ },
+ "application/vnd.svd": {
+ "source": "iana",
+ "extensions": ["svd"]
+ },
+ "application/vnd.swiftview-ics": {
+ "source": "iana"
+ },
+ "application/vnd.symbian.install": {
+ "source": "apache",
+ "extensions": ["sis","sisx"]
+ },
+ "application/vnd.syncml+xml": {
+ "source": "iana",
+ "extensions": ["xsm"]
+ },
+ "application/vnd.syncml.dm+wbxml": {
+ "source": "iana",
+ "extensions": ["bdm"]
+ },
+ "application/vnd.syncml.dm+xml": {
+ "source": "iana",
+ "extensions": ["xdm"]
+ },
+ "application/vnd.syncml.dm.notification": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmddf+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmddf+xml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmtnds+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmtnds+xml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.ds.notification": {
+ "source": "iana"
+ },
+ "application/vnd.tao.intent-module-archive": {
+ "source": "iana",
+ "extensions": ["tao"]
+ },
+ "application/vnd.tcpdump.pcap": {
+ "source": "iana",
+ "extensions": ["pcap","cap","dmp"]
+ },
+ "application/vnd.tmd.mediaflex.api+xml": {
+ "source": "iana"
+ },
+ "application/vnd.tmobile-livetv": {
+ "source": "iana",
+ "extensions": ["tmo"]
+ },
+ "application/vnd.trid.tpt": {
+ "source": "iana",
+ "extensions": ["tpt"]
+ },
+ "application/vnd.triscape.mxs": {
+ "source": "iana",
+ "extensions": ["mxs"]
+ },
+ "application/vnd.trueapp": {
+ "source": "iana",
+ "extensions": ["tra"]
+ },
+ "application/vnd.truedoc": {
+ "source": "iana"
+ },
+ "application/vnd.ubisoft.webplayer": {
+ "source": "iana"
+ },
+ "application/vnd.ufdl": {
+ "source": "iana",
+ "extensions": ["ufd","ufdl"]
+ },
+ "application/vnd.uiq.theme": {
+ "source": "iana",
+ "extensions": ["utz"]
+ },
+ "application/vnd.umajin": {
+ "source": "iana",
+ "extensions": ["umj"]
+ },
+ "application/vnd.unity": {
+ "source": "iana",
+ "extensions": ["unityweb"]
+ },
+ "application/vnd.uoml+xml": {
+ "source": "iana",
+ "extensions": ["uoml"]
+ },
+ "application/vnd.uplanet.alert": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.alert-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.bearer-choice": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.bearer-choice-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.cacheop": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.cacheop-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.channel": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.channel-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.list": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.list-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.listcmd": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.listcmd-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.signal": {
+ "source": "iana"
+ },
+ "application/vnd.valve.source.material": {
+ "source": "iana"
+ },
+ "application/vnd.vcx": {
+ "source": "iana",
+ "extensions": ["vcx"]
+ },
+ "application/vnd.vd-study": {
+ "source": "iana"
+ },
+ "application/vnd.vectorworks": {
+ "source": "iana"
+ },
+ "application/vnd.verimatrix.vcas": {
+ "source": "iana"
+ },
+ "application/vnd.vidsoft.vidconference": {
+ "source": "iana"
+ },
+ "application/vnd.visio": {
+ "source": "iana",
+ "extensions": ["vsd","vst","vss","vsw"]
+ },
+ "application/vnd.visionary": {
+ "source": "iana",
+ "extensions": ["vis"]
+ },
+ "application/vnd.vividence.scriptfile": {
+ "source": "iana"
+ },
+ "application/vnd.vsf": {
+ "source": "iana",
+ "extensions": ["vsf"]
+ },
+ "application/vnd.wap-slc": {
+ "source": "iana"
+ },
+ "application/vnd.wap-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.wap.sic": {
+ "source": "iana"
+ },
+ "application/vnd.wap.slc": {
+ "source": "apache"
+ },
+ "application/vnd.wap.wbxml": {
+ "source": "apache",
+ "extensions": ["wbxml"]
+ },
+ "application/vnd.wap.wmlc": {
+ "source": "apache",
+ "extensions": ["wmlc"]
+ },
+ "application/vnd.wap.wmlscriptc": {
+ "source": "iana",
+ "extensions": ["wmlsc"]
+ },
+ "application/vnd.webturbo": {
+ "source": "iana",
+ "extensions": ["wtb"]
+ },
+ "application/vnd.wfa.p2p": {
+ "source": "iana"
+ },
+ "application/vnd.wfa.wsc": {
+ "source": "iana"
+ },
+ "application/vnd.windows.devicepairing": {
+ "source": "iana"
+ },
+ "application/vnd.wmc": {
+ "source": "iana"
+ },
+ "application/vnd.wmf.bootstrap": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.mathematica": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.mathematica.package": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.player": {
+ "source": "iana",
+ "extensions": ["nbp"]
+ },
+ "application/vnd.wordperfect": {
+ "source": "iana",
+ "extensions": ["wpd"]
+ },
+ "application/vnd.wqd": {
+ "source": "iana",
+ "extensions": ["wqd"]
+ },
+ "application/vnd.wrq-hp3000-labelled": {
+ "source": "iana"
+ },
+ "application/vnd.wt.stf": {
+ "source": "iana",
+ "extensions": ["stf"]
+ },
+ "application/vnd.wv.csp+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.wv.csp+xml": {
+ "source": "iana"
+ },
+ "application/vnd.wv.ssp+xml": {
+ "source": "iana"
+ },
+ "application/vnd.xacml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xara": {
+ "source": "iana",
+ "extensions": ["xar"]
+ },
+ "application/vnd.xfdl": {
+ "source": "iana",
+ "extensions": ["xfdl"]
+ },
+ "application/vnd.xfdl.webform": {
+ "source": "iana"
+ },
+ "application/vnd.xmi+xml": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.cpkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.dpkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.plan": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.ppkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.xlim": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.hv-dic": {
+ "source": "iana",
+ "extensions": ["hvd"]
+ },
+ "application/vnd.yamaha.hv-script": {
+ "source": "iana",
+ "extensions": ["hvs"]
+ },
+ "application/vnd.yamaha.hv-voice": {
+ "source": "iana",
+ "extensions": ["hvp"]
+ },
+ "application/vnd.yamaha.openscoreformat": {
+ "source": "iana",
+ "extensions": ["osf"]
+ },
+ "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
+ "source": "iana",
+ "extensions": ["osfpvg"]
+ },
+ "application/vnd.yamaha.remote-setup": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.smaf-audio": {
+ "source": "iana",
+ "extensions": ["saf"]
+ },
+ "application/vnd.yamaha.smaf-phrase": {
+ "source": "iana",
+ "extensions": ["spf"]
+ },
+ "application/vnd.yamaha.through-ngn": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.tunnel-udpencap": {
+ "source": "iana"
+ },
+ "application/vnd.yaoweme": {
+ "source": "iana"
+ },
+ "application/vnd.yellowriver-custom-menu": {
+ "source": "iana",
+ "extensions": ["cmp"]
+ },
+ "application/vnd.zul": {
+ "source": "iana",
+ "extensions": ["zir","zirz"]
+ },
+ "application/vnd.zzazz.deck+xml": {
+ "source": "iana",
+ "extensions": ["zaz"]
+ },
+ "application/voicexml+xml": {
+ "source": "iana",
+ "extensions": ["vxml"]
+ },
+ "application/vq-rtcpxr": {
+ "source": "iana"
+ },
+ "application/vwg-multiplexed": {
+ "source": "iana"
+ },
+ "application/watcherinfo+xml": {
+ "source": "iana"
+ },
+ "application/whoispp-query": {
+ "source": "iana"
+ },
+ "application/whoispp-response": {
+ "source": "iana"
+ },
+ "application/widget": {
+ "source": "iana",
+ "extensions": ["wgt"]
+ },
+ "application/winhlp": {
+ "source": "apache",
+ "extensions": ["hlp"]
+ },
+ "application/wita": {
+ "source": "iana"
+ },
+ "application/wordperfect5.1": {
+ "source": "iana"
+ },
+ "application/wsdl+xml": {
+ "source": "iana",
+ "extensions": ["wsdl"]
+ },
+ "application/wspolicy+xml": {
+ "source": "iana",
+ "extensions": ["wspolicy"]
+ },
+ "application/x-7z-compressed": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["7z"]
+ },
+ "application/x-abiword": {
+ "source": "apache",
+ "extensions": ["abw"]
+ },
+ "application/x-ace-compressed": {
+ "source": "apache",
+ "extensions": ["ace"]
+ },
+ "application/x-amf": {
+ "source": "apache"
+ },
+ "application/x-apple-diskimage": {
+ "source": "apache",
+ "extensions": ["dmg"]
+ },
+ "application/x-authorware-bin": {
+ "source": "apache",
+ "extensions": ["aab","x32","u32","vox"]
+ },
+ "application/x-authorware-map": {
+ "source": "apache",
+ "extensions": ["aam"]
+ },
+ "application/x-authorware-seg": {
+ "source": "apache",
+ "extensions": ["aas"]
+ },
+ "application/x-bcpio": {
+ "source": "apache",
+ "extensions": ["bcpio"]
+ },
+ "application/x-bittorrent": {
+ "source": "apache",
+ "extensions": ["torrent"]
+ },
+ "application/x-blorb": {
+ "source": "apache",
+ "extensions": ["blb","blorb"]
+ },
+ "application/x-bzip": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["bz"]
+ },
+ "application/x-bzip2": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["bz2","boz"]
+ },
+ "application/x-cbr": {
+ "source": "apache",
+ "extensions": ["cbr","cba","cbt","cbz","cb7"]
+ },
+ "application/x-cdlink": {
+ "source": "apache",
+ "extensions": ["vcd"]
+ },
+ "application/x-cfs-compressed": {
+ "source": "apache",
+ "extensions": ["cfs"]
+ },
+ "application/x-chat": {
+ "source": "apache",
+ "extensions": ["chat"]
+ },
+ "application/x-chess-pgn": {
+ "source": "apache",
+ "extensions": ["pgn"]
+ },
+ "application/x-chrome-extension": {
+ "extensions": ["crx"]
+ },
+ "application/x-compress": {
+ "source": "apache"
+ },
+ "application/x-conference": {
+ "source": "apache",
+ "extensions": ["nsc"]
+ },
+ "application/x-cpio": {
+ "source": "apache",
+ "extensions": ["cpio"]
+ },
+ "application/x-csh": {
+ "source": "apache",
+ "extensions": ["csh"]
+ },
+ "application/x-deb": {
+ "compressible": false
+ },
+ "application/x-debian-package": {
+ "source": "apache",
+ "extensions": ["deb","udeb"]
+ },
+ "application/x-dgc-compressed": {
+ "source": "apache",
+ "extensions": ["dgc"]
+ },
+ "application/x-director": {
+ "source": "apache",
+ "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
+ },
+ "application/x-doom": {
+ "source": "apache",
+ "extensions": ["wad"]
+ },
+ "application/x-dtbncx+xml": {
+ "source": "apache",
+ "extensions": ["ncx"]
+ },
+ "application/x-dtbook+xml": {
+ "source": "apache",
+ "extensions": ["dtb"]
+ },
+ "application/x-dtbresource+xml": {
+ "source": "apache",
+ "extensions": ["res"]
+ },
+ "application/x-dvi": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["dvi"]
+ },
+ "application/x-envoy": {
+ "source": "apache",
+ "extensions": ["evy"]
+ },
+ "application/x-eva": {
+ "source": "apache",
+ "extensions": ["eva"]
+ },
+ "application/x-font-bdf": {
+ "source": "apache",
+ "extensions": ["bdf"]
+ },
+ "application/x-font-dos": {
+ "source": "apache"
+ },
+ "application/x-font-framemaker": {
+ "source": "apache"
+ },
+ "application/x-font-ghostscript": {
+ "source": "apache",
+ "extensions": ["gsf"]
+ },
+ "application/x-font-libgrx": {
+ "source": "apache"
+ },
+ "application/x-font-linux-psf": {
+ "source": "apache",
+ "extensions": ["psf"]
+ },
+ "application/x-font-otf": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["otf"]
+ },
+ "application/x-font-pcf": {
+ "source": "apache",
+ "extensions": ["pcf"]
+ },
+ "application/x-font-snf": {
+ "source": "apache",
+ "extensions": ["snf"]
+ },
+ "application/x-font-speedo": {
+ "source": "apache"
+ },
+ "application/x-font-sunos-news": {
+ "source": "apache"
+ },
+ "application/x-font-ttf": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["ttf","ttc"]
+ },
+ "application/x-font-type1": {
+ "source": "apache",
+ "extensions": ["pfa","pfb","pfm","afm"]
+ },
+ "application/x-font-vfont": {
+ "source": "apache"
+ },
+ "application/x-freearc": {
+ "source": "apache",
+ "extensions": ["arc"]
+ },
+ "application/x-futuresplash": {
+ "source": "apache",
+ "extensions": ["spl"]
+ },
+ "application/x-gca-compressed": {
+ "source": "apache",
+ "extensions": ["gca"]
+ },
+ "application/x-glulx": {
+ "source": "apache",
+ "extensions": ["ulx"]
+ },
+ "application/x-gnumeric": {
+ "source": "apache",
+ "extensions": ["gnumeric"]
+ },
+ "application/x-gramps-xml": {
+ "source": "apache",
+ "extensions": ["gramps"]
+ },
+ "application/x-gtar": {
+ "source": "apache",
+ "extensions": ["gtar"]
+ },
+ "application/x-gzip": {
+ "source": "apache"
+ },
+ "application/x-hdf": {
+ "source": "apache",
+ "extensions": ["hdf"]
+ },
+ "application/x-install-instructions": {
+ "source": "apache",
+ "extensions": ["install"]
+ },
+ "application/x-iso9660-image": {
+ "source": "apache",
+ "extensions": ["iso"]
+ },
+ "application/x-java-jnlp-file": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["jnlp"]
+ },
+ "application/x-javascript": {
+ "compressible": true
+ },
+ "application/x-latex": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["latex"]
+ },
+ "application/x-lua-bytecode": {
+ "extensions": ["luac"]
+ },
+ "application/x-lzh-compressed": {
+ "source": "apache",
+ "extensions": ["lzh","lha"]
+ },
+ "application/x-mie": {
+ "source": "apache",
+ "extensions": ["mie"]
+ },
+ "application/x-mobipocket-ebook": {
+ "source": "apache",
+ "extensions": ["prc","mobi"]
+ },
+ "application/x-mpegurl": {
+ "compressible": false
+ },
+ "application/x-ms-application": {
+ "source": "apache",
+ "extensions": ["application"]
+ },
+ "application/x-ms-shortcut": {
+ "source": "apache",
+ "extensions": ["lnk"]
+ },
+ "application/x-ms-wmd": {
+ "source": "apache",
+ "extensions": ["wmd"]
+ },
+ "application/x-ms-wmz": {
+ "source": "apache",
+ "extensions": ["wmz"]
+ },
+ "application/x-ms-xbap": {
+ "source": "apache",
+ "extensions": ["xbap"]
+ },
+ "application/x-msaccess": {
+ "source": "apache",
+ "extensions": ["mdb"]
+ },
+ "application/x-msbinder": {
+ "source": "apache",
+ "extensions": ["obd"]
+ },
+ "application/x-mscardfile": {
+ "source": "apache",
+ "extensions": ["crd"]
+ },
+ "application/x-msclip": {
+ "source": "apache",
+ "extensions": ["clp"]
+ },
+ "application/x-msdownload": {
+ "source": "apache",
+ "extensions": ["exe","dll","com","bat","msi"]
+ },
+ "application/x-msmediaview": {
+ "source": "apache",
+ "extensions": ["mvb","m13","m14"]
+ },
+ "application/x-msmetafile": {
+ "source": "apache",
+ "extensions": ["wmf","wmz","emf","emz"]
+ },
+ "application/x-msmoney": {
+ "source": "apache",
+ "extensions": ["mny"]
+ },
+ "application/x-mspublisher": {
+ "source": "apache",
+ "extensions": ["pub"]
+ },
+ "application/x-msschedule": {
+ "source": "apache",
+ "extensions": ["scd"]
+ },
+ "application/x-msterminal": {
+ "source": "apache",
+ "extensions": ["trm"]
+ },
+ "application/x-mswrite": {
+ "source": "apache",
+ "extensions": ["wri"]
+ },
+ "application/x-netcdf": {
+ "source": "apache",
+ "extensions": ["nc","cdf"]
+ },
+ "application/x-nzb": {
+ "source": "apache",
+ "extensions": ["nzb"]
+ },
+ "application/x-pkcs12": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["p12","pfx"]
+ },
+ "application/x-pkcs7-certificates": {
+ "source": "apache",
+ "extensions": ["p7b","spc"]
+ },
+ "application/x-pkcs7-certreqresp": {
+ "source": "apache",
+ "extensions": ["p7r"]
+ },
+ "application/x-rar-compressed": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["rar"]
+ },
+ "application/x-research-info-systems": {
+ "source": "apache",
+ "extensions": ["ris"]
+ },
+ "application/x-sh": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["sh"]
+ },
+ "application/x-shar": {
+ "source": "apache",
+ "extensions": ["shar"]
+ },
+ "application/x-shockwave-flash": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["swf"]
+ },
+ "application/x-silverlight-app": {
+ "source": "apache",
+ "extensions": ["xap"]
+ },
+ "application/x-sql": {
+ "source": "apache",
+ "extensions": ["sql"]
+ },
+ "application/x-stuffit": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["sit"]
+ },
+ "application/x-stuffitx": {
+ "source": "apache",
+ "extensions": ["sitx"]
+ },
+ "application/x-subrip": {
+ "source": "apache",
+ "extensions": ["srt"]
+ },
+ "application/x-sv4cpio": {
+ "source": "apache",
+ "extensions": ["sv4cpio"]
+ },
+ "application/x-sv4crc": {
+ "source": "apache",
+ "extensions": ["sv4crc"]
+ },
+ "application/x-t3vm-image": {
+ "source": "apache",
+ "extensions": ["t3"]
+ },
+ "application/x-tads": {
+ "source": "apache",
+ "extensions": ["gam"]
+ },
+ "application/x-tar": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["tar"]
+ },
+ "application/x-tcl": {
+ "source": "apache",
+ "extensions": ["tcl"]
+ },
+ "application/x-tex": {
+ "source": "apache",
+ "extensions": ["tex"]
+ },
+ "application/x-tex-tfm": {
+ "source": "apache",
+ "extensions": ["tfm"]
+ },
+ "application/x-texinfo": {
+ "source": "apache",
+ "extensions": ["texinfo","texi"]
+ },
+ "application/x-tgif": {
+ "source": "apache",
+ "extensions": ["obj"]
+ },
+ "application/x-ustar": {
+ "source": "apache",
+ "extensions": ["ustar"]
+ },
+ "application/x-wais-source": {
+ "source": "apache",
+ "extensions": ["src"]
+ },
+ "application/x-web-app-manifest+json": {
+ "compressible": true,
+ "extensions": ["webapp"]
+ },
+ "application/x-www-form-urlencoded": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/x-x509-ca-cert": {
+ "source": "apache",
+ "extensions": ["der","crt"]
+ },
+ "application/x-xfig": {
+ "source": "apache",
+ "extensions": ["fig"]
+ },
+ "application/x-xliff+xml": {
+ "source": "apache",
+ "extensions": ["xlf"]
+ },
+ "application/x-xpinstall": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["xpi"]
+ },
+ "application/x-xz": {
+ "source": "apache",
+ "extensions": ["xz"]
+ },
+ "application/x-zmachine": {
+ "source": "apache",
+ "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
+ },
+ "application/x400-bp": {
+ "source": "iana"
+ },
+ "application/xacml+xml": {
+ "source": "iana"
+ },
+ "application/xaml+xml": {
+ "source": "apache",
+ "extensions": ["xaml"]
+ },
+ "application/xcap-att+xml": {
+ "source": "iana"
+ },
+ "application/xcap-caps+xml": {
+ "source": "iana"
+ },
+ "application/xcap-diff+xml": {
+ "source": "iana",
+ "extensions": ["xdf"]
+ },
+ "application/xcap-el+xml": {
+ "source": "iana"
+ },
+ "application/xcap-error+xml": {
+ "source": "iana"
+ },
+ "application/xcap-ns+xml": {
+ "source": "iana"
+ },
+ "application/xcon-conference-info+xml": {
+ "source": "iana"
+ },
+ "application/xcon-conference-info-diff+xml": {
+ "source": "iana"
+ },
+ "application/xenc+xml": {
+ "source": "iana",
+ "extensions": ["xenc"]
+ },
+ "application/xhtml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xhtml","xht"]
+ },
+ "application/xhtml-voice+xml": {
+ "source": "iana"
+ },
+ "application/xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xml","xsl","xsd"]
+ },
+ "application/xml-dtd": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["dtd"]
+ },
+ "application/xml-external-parsed-entity": {
+ "source": "iana"
+ },
+ "application/xml-patch+xml": {
+ "source": "iana"
+ },
+ "application/xmpp+xml": {
+ "source": "iana"
+ },
+ "application/xop+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xop"]
+ },
+ "application/xproc+xml": {
+ "source": "apache",
+ "extensions": ["xpl"]
+ },
+ "application/xslt+xml": {
+ "source": "iana",
+ "extensions": ["xslt"]
+ },
+ "application/xspf+xml": {
+ "source": "apache",
+ "extensions": ["xspf"]
+ },
+ "application/xv+xml": {
+ "source": "iana",
+ "extensions": ["mxml","xhvml","xvml","xvm"]
+ },
+ "application/yang": {
+ "source": "iana",
+ "extensions": ["yang"]
+ },
+ "application/yin+xml": {
+ "source": "iana",
+ "extensions": ["yin"]
+ },
+ "application/zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["zip"]
+ },
+ "application/zlib": {
+ "source": "iana"
+ },
+ "audio/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "audio/32kadpcm": {
+ "source": "iana"
+ },
+ "audio/3gpp": {
+ "source": "iana"
+ },
+ "audio/3gpp2": {
+ "source": "iana"
+ },
+ "audio/ac3": {
+ "source": "iana"
+ },
+ "audio/adpcm": {
+ "source": "apache",
+ "extensions": ["adp"]
+ },
+ "audio/amr": {
+ "source": "iana"
+ },
+ "audio/amr-wb": {
+ "source": "iana"
+ },
+ "audio/amr-wb+": {
+ "source": "iana"
+ },
+ "audio/aptx": {
+ "source": "iana"
+ },
+ "audio/asc": {
+ "source": "iana"
+ },
+ "audio/atrac-advanced-lossless": {
+ "source": "iana"
+ },
+ "audio/atrac-x": {
+ "source": "iana"
+ },
+ "audio/atrac3": {
+ "source": "iana"
+ },
+ "audio/basic": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["au","snd"]
+ },
+ "audio/bv16": {
+ "source": "iana"
+ },
+ "audio/bv32": {
+ "source": "iana"
+ },
+ "audio/clearmode": {
+ "source": "iana"
+ },
+ "audio/cn": {
+ "source": "iana"
+ },
+ "audio/dat12": {
+ "source": "iana"
+ },
+ "audio/dls": {
+ "source": "iana"
+ },
+ "audio/dsr-es201108": {
+ "source": "iana"
+ },
+ "audio/dsr-es202050": {
+ "source": "iana"
+ },
+ "audio/dsr-es202211": {
+ "source": "iana"
+ },
+ "audio/dsr-es202212": {
+ "source": "iana"
+ },
+ "audio/dv": {
+ "source": "iana"
+ },
+ "audio/dvi4": {
+ "source": "iana"
+ },
+ "audio/eac3": {
+ "source": "iana"
+ },
+ "audio/encaprtp": {
+ "source": "iana"
+ },
+ "audio/evrc": {
+ "source": "iana"
+ },
+ "audio/evrc-qcp": {
+ "source": "iana"
+ },
+ "audio/evrc0": {
+ "source": "iana"
+ },
+ "audio/evrc1": {
+ "source": "iana"
+ },
+ "audio/evrcb": {
+ "source": "iana"
+ },
+ "audio/evrcb0": {
+ "source": "iana"
+ },
+ "audio/evrcb1": {
+ "source": "iana"
+ },
+ "audio/evrcnw": {
+ "source": "iana"
+ },
+ "audio/evrcnw0": {
+ "source": "iana"
+ },
+ "audio/evrcnw1": {
+ "source": "iana"
+ },
+ "audio/evrcwb": {
+ "source": "iana"
+ },
+ "audio/evrcwb0": {
+ "source": "iana"
+ },
+ "audio/evrcwb1": {
+ "source": "iana"
+ },
+ "audio/example": {
+ "source": "iana"
+ },
+ "audio/fwdred": {
+ "source": "iana"
+ },
+ "audio/g719": {
+ "source": "iana"
+ },
+ "audio/g721": {
+ "source": "iana"
+ },
+ "audio/g722": {
+ "source": "iana"
+ },
+ "audio/g7221": {
+ "source": "apache"
+ },
+ "audio/g723": {
+ "source": "iana"
+ },
+ "audio/g726-16": {
+ "source": "iana"
+ },
+ "audio/g726-24": {
+ "source": "iana"
+ },
+ "audio/g726-32": {
+ "source": "iana"
+ },
+ "audio/g726-40": {
+ "source": "iana"
+ },
+ "audio/g728": {
+ "source": "iana"
+ },
+ "audio/g729": {
+ "source": "iana"
+ },
+ "audio/g7291": {
+ "source": "iana"
+ },
+ "audio/g729d": {
+ "source": "iana"
+ },
+ "audio/g729e": {
+ "source": "iana"
+ },
+ "audio/gsm": {
+ "source": "iana"
+ },
+ "audio/gsm-efr": {
+ "source": "iana"
+ },
+ "audio/gsm-hr-08": {
+ "source": "iana"
+ },
+ "audio/ilbc": {
+ "source": "iana"
+ },
+ "audio/ip-mr_v2.5": {
+ "source": "iana"
+ },
+ "audio/isac": {
+ "source": "apache"
+ },
+ "audio/l16": {
+ "source": "iana"
+ },
+ "audio/l20": {
+ "source": "iana"
+ },
+ "audio/l24": {
+ "source": "iana",
+ "compressible": false
+ },
+ "audio/l8": {
+ "source": "iana"
+ },
+ "audio/lpc": {
+ "source": "iana"
+ },
+ "audio/midi": {
+ "source": "apache",
+ "extensions": ["mid","midi","kar","rmi"]
+ },
+ "audio/mobile-xmf": {
+ "source": "iana"
+ },
+ "audio/mp4": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["mp4a","m4a"]
+ },
+ "audio/mp4a-latm": {
+ "source": "iana"
+ },
+ "audio/mpa": {
+ "source": "iana"
+ },
+ "audio/mpa-robust": {
+ "source": "iana"
+ },
+ "audio/mpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
+ },
+ "audio/mpeg4-generic": {
+ "source": "iana"
+ },
+ "audio/musepack": {
+ "source": "apache"
+ },
+ "audio/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["oga","ogg","spx"]
+ },
+ "audio/opus": {
+ "source": "apache"
+ },
+ "audio/parityfec": {
+ "source": "iana"
+ },
+ "audio/pcma": {
+ "source": "iana"
+ },
+ "audio/pcma-wb": {
+ "source": "iana"
+ },
+ "audio/pcmu": {
+ "source": "iana"
+ },
+ "audio/pcmu-wb": {
+ "source": "iana"
+ },
+ "audio/prs.sid": {
+ "source": "iana"
+ },
+ "audio/qcelp": {
+ "source": "iana"
+ },
+ "audio/raptorfec": {
+ "source": "iana"
+ },
+ "audio/red": {
+ "source": "iana"
+ },
+ "audio/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "audio/rtp-midi": {
+ "source": "iana"
+ },
+ "audio/rtploopback": {
+ "source": "iana"
+ },
+ "audio/rtx": {
+ "source": "iana"
+ },
+ "audio/s3m": {
+ "source": "apache",
+ "extensions": ["s3m"]
+ },
+ "audio/silk": {
+ "source": "apache",
+ "extensions": ["sil"]
+ },
+ "audio/smv": {
+ "source": "iana"
+ },
+ "audio/smv-qcp": {
+ "source": "iana"
+ },
+ "audio/smv0": {
+ "source": "iana"
+ },
+ "audio/sp-midi": {
+ "source": "iana"
+ },
+ "audio/speex": {
+ "source": "iana"
+ },
+ "audio/t140c": {
+ "source": "iana"
+ },
+ "audio/t38": {
+ "source": "iana"
+ },
+ "audio/telephone-event": {
+ "source": "iana"
+ },
+ "audio/tone": {
+ "source": "iana"
+ },
+ "audio/uemclip": {
+ "source": "iana"
+ },
+ "audio/ulpfec": {
+ "source": "iana"
+ },
+ "audio/vdvi": {
+ "source": "iana"
+ },
+ "audio/vmr-wb": {
+ "source": "iana"
+ },
+ "audio/vnd.3gpp.iufp": {
+ "source": "iana"
+ },
+ "audio/vnd.4sb": {
+ "source": "iana"
+ },
+ "audio/vnd.audiokoz": {
+ "source": "iana"
+ },
+ "audio/vnd.celp": {
+ "source": "iana"
+ },
+ "audio/vnd.cisco.nse": {
+ "source": "iana"
+ },
+ "audio/vnd.cmles.radio-events": {
+ "source": "iana"
+ },
+ "audio/vnd.cns.anp1": {
+ "source": "iana"
+ },
+ "audio/vnd.cns.inf1": {
+ "source": "iana"
+ },
+ "audio/vnd.dece.audio": {
+ "source": "iana",
+ "extensions": ["uva","uvva"]
+ },
+ "audio/vnd.digital-winds": {
+ "source": "iana",
+ "extensions": ["eol"]
+ },
+ "audio/vnd.dlna.adts": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.heaac.1": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.heaac.2": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.mlp": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.mps": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2x": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2z": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pulse.1": {
+ "source": "iana"
+ },
+ "audio/vnd.dra": {
+ "source": "iana",
+ "extensions": ["dra"]
+ },
+ "audio/vnd.dts": {
+ "source": "iana",
+ "extensions": ["dts"]
+ },
+ "audio/vnd.dts.hd": {
+ "source": "iana",
+ "extensions": ["dtshd"]
+ },
+ "audio/vnd.dvb.file": {
+ "source": "iana"
+ },
+ "audio/vnd.everad.plj": {
+ "source": "iana"
+ },
+ "audio/vnd.hns.audio": {
+ "source": "iana"
+ },
+ "audio/vnd.lucent.voice": {
+ "source": "iana",
+ "extensions": ["lvp"]
+ },
+ "audio/vnd.ms-playready.media.pya": {
+ "source": "iana",
+ "extensions": ["pya"]
+ },
+ "audio/vnd.nokia.mobile-xmf": {
+ "source": "iana"
+ },
+ "audio/vnd.nortel.vbk": {
+ "source": "iana"
+ },
+ "audio/vnd.nuera.ecelp4800": {
+ "source": "iana",
+ "extensions": ["ecelp4800"]
+ },
+ "audio/vnd.nuera.ecelp7470": {
+ "source": "iana",
+ "extensions": ["ecelp7470"]
+ },
+ "audio/vnd.nuera.ecelp9600": {
+ "source": "iana",
+ "extensions": ["ecelp9600"]
+ },
+ "audio/vnd.octel.sbc": {
+ "source": "iana"
+ },
+ "audio/vnd.qcelp": {
+ "source": "iana"
+ },
+ "audio/vnd.rhetorex.32kadpcm": {
+ "source": "iana"
+ },
+ "audio/vnd.rip": {
+ "source": "iana",
+ "extensions": ["rip"]
+ },
+ "audio/vnd.rn-realaudio": {
+ "compressible": false
+ },
+ "audio/vnd.sealedmedia.softseal-mpeg": {
+ "source": "iana"
+ },
+ "audio/vnd.sealedmedia.softseal.mpeg": {
+ "source": "apache"
+ },
+ "audio/vnd.vmx.cvsd": {
+ "source": "iana"
+ },
+ "audio/vnd.wave": {
+ "compressible": false
+ },
+ "audio/vorbis": {
+ "source": "iana",
+ "compressible": false
+ },
+ "audio/vorbis-config": {
+ "source": "iana"
+ },
+ "audio/webm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["weba"]
+ },
+ "audio/x-aac": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["aac"]
+ },
+ "audio/x-aiff": {
+ "source": "apache",
+ "extensions": ["aif","aiff","aifc"]
+ },
+ "audio/x-caf": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["caf"]
+ },
+ "audio/x-flac": {
+ "source": "apache",
+ "extensions": ["flac"]
+ },
+ "audio/x-matroska": {
+ "source": "apache",
+ "extensions": ["mka"]
+ },
+ "audio/x-mpegurl": {
+ "source": "apache",
+ "extensions": ["m3u"]
+ },
+ "audio/x-ms-wax": {
+ "source": "apache",
+ "extensions": ["wax"]
+ },
+ "audio/x-ms-wma": {
+ "source": "apache",
+ "extensions": ["wma"]
+ },
+ "audio/x-pn-realaudio": {
+ "source": "apache",
+ "extensions": ["ram","ra"]
+ },
+ "audio/x-pn-realaudio-plugin": {
+ "source": "apache",
+ "extensions": ["rmp"]
+ },
+ "audio/x-tta": {
+ "source": "apache"
+ },
+ "audio/x-wav": {
+ "source": "apache",
+ "extensions": ["wav"]
+ },
+ "audio/xm": {
+ "source": "apache",
+ "extensions": ["xm"]
+ },
+ "chemical/x-cdx": {
+ "source": "apache",
+ "extensions": ["cdx"]
+ },
+ "chemical/x-cif": {
+ "source": "apache",
+ "extensions": ["cif"]
+ },
+ "chemical/x-cmdf": {
+ "source": "apache",
+ "extensions": ["cmdf"]
+ },
+ "chemical/x-cml": {
+ "source": "apache",
+ "extensions": ["cml"]
+ },
+ "chemical/x-csml": {
+ "source": "apache",
+ "extensions": ["csml"]
+ },
+ "chemical/x-pdb": {
+ "source": "apache"
+ },
+ "chemical/x-xyz": {
+ "source": "apache",
+ "extensions": ["xyz"]
+ },
+ "font/opentype": {
+ "compressible": true,
+ "extensions": ["otf"]
+ },
+ "image/bmp": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["bmp"]
+ },
+ "image/cgm": {
+ "source": "iana",
+ "extensions": ["cgm"]
+ },
+ "image/example": {
+ "source": "iana"
+ },
+ "image/fits": {
+ "source": "iana"
+ },
+ "image/g3fax": {
+ "source": "iana",
+ "extensions": ["g3"]
+ },
+ "image/gif": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["gif"]
+ },
+ "image/ief": {
+ "source": "iana",
+ "extensions": ["ief"]
+ },
+ "image/jp2": {
+ "source": "iana"
+ },
+ "image/jpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["jpeg","jpg","jpe"]
+ },
+ "image/jpm": {
+ "source": "iana"
+ },
+ "image/jpx": {
+ "source": "iana"
+ },
+ "image/ktx": {
+ "source": "iana",
+ "extensions": ["ktx"]
+ },
+ "image/naplps": {
+ "source": "iana"
+ },
+ "image/pjpeg": {
+ "compressible": false
+ },
+ "image/png": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["png"]
+ },
+ "image/prs.btif": {
+ "source": "iana",
+ "extensions": ["btif"]
+ },
+ "image/prs.pti": {
+ "source": "iana"
+ },
+ "image/pwg-raster": {
+ "source": "iana"
+ },
+ "image/sgi": {
+ "source": "apache",
+ "extensions": ["sgi"]
+ },
+ "image/svg+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["svg","svgz"]
+ },
+ "image/t38": {
+ "source": "iana"
+ },
+ "image/tiff": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["tiff","tif"]
+ },
+ "image/tiff-fx": {
+ "source": "iana"
+ },
+ "image/vnd-djvu": {
+ "source": "iana"
+ },
+ "image/vnd-svf": {
+ "source": "iana"
+ },
+ "image/vnd-wap-wbmp": {
+ "source": "iana"
+ },
+ "image/vnd.adobe.photoshop": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["psd"]
+ },
+ "image/vnd.airzip.accelerator.azv": {
+ "source": "iana"
+ },
+ "image/vnd.cns.inf2": {
+ "source": "iana"
+ },
+ "image/vnd.dece.graphic": {
+ "source": "iana",
+ "extensions": ["uvi","uvvi","uvg","uvvg"]
+ },
+ "image/vnd.djvu": {
+ "source": "apache",
+ "extensions": ["djvu","djv"]
+ },
+ "image/vnd.dvb.subtitle": {
+ "source": "iana",
+ "extensions": ["sub"]
+ },
+ "image/vnd.dwg": {
+ "source": "iana",
+ "extensions": ["dwg"]
+ },
+ "image/vnd.dxf": {
+ "source": "iana",
+ "extensions": ["dxf"]
+ },
+ "image/vnd.fastbidsheet": {
+ "source": "iana",
+ "extensions": ["fbs"]
+ },
+ "image/vnd.fpx": {
+ "source": "iana",
+ "extensions": ["fpx"]
+ },
+ "image/vnd.fst": {
+ "source": "iana",
+ "extensions": ["fst"]
+ },
+ "image/vnd.fujixerox.edmics-mmr": {
+ "source": "iana",
+ "extensions": ["mmr"]
+ },
+ "image/vnd.fujixerox.edmics-rlc": {
+ "source": "iana",
+ "extensions": ["rlc"]
+ },
+ "image/vnd.globalgraphics.pgb": {
+ "source": "iana"
+ },
+ "image/vnd.microsoft.icon": {
+ "source": "iana"
+ },
+ "image/vnd.mix": {
+ "source": "iana"
+ },
+ "image/vnd.ms-modi": {
+ "source": "iana",
+ "extensions": ["mdi"]
+ },
+ "image/vnd.ms-photo": {
+ "source": "apache",
+ "extensions": ["wdp"]
+ },
+ "image/vnd.net-fpx": {
+ "source": "iana",
+ "extensions": ["npx"]
+ },
+ "image/vnd.radiance": {
+ "source": "iana"
+ },
+ "image/vnd.sealed-png": {
+ "source": "iana"
+ },
+ "image/vnd.sealed.png": {
+ "source": "apache"
+ },
+ "image/vnd.sealedmedia.softseal-gif": {
+ "source": "iana"
+ },
+ "image/vnd.sealedmedia.softseal-jpg": {
+ "source": "iana"
+ },
+ "image/vnd.sealedmedia.softseal.gif": {
+ "source": "apache"
+ },
+ "image/vnd.sealedmedia.softseal.jpg": {
+ "source": "apache"
+ },
+ "image/vnd.svf": {
+ "source": "apache"
+ },
+ "image/vnd.tencent.tap": {
+ "source": "iana"
+ },
+ "image/vnd.valve.source.texture": {
+ "source": "iana"
+ },
+ "image/vnd.wap.wbmp": {
+ "source": "apache",
+ "extensions": ["wbmp"]
+ },
+ "image/vnd.xiff": {
+ "source": "iana",
+ "extensions": ["xif"]
+ },
+ "image/webp": {
+ "source": "apache",
+ "extensions": ["webp"]
+ },
+ "image/x-3ds": {
+ "source": "apache",
+ "extensions": ["3ds"]
+ },
+ "image/x-cmu-raster": {
+ "source": "apache",
+ "extensions": ["ras"]
+ },
+ "image/x-cmx": {
+ "source": "apache",
+ "extensions": ["cmx"]
+ },
+ "image/x-freehand": {
+ "source": "apache",
+ "extensions": ["fh","fhc","fh4","fh5","fh7"]
+ },
+ "image/x-icon": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["ico"]
+ },
+ "image/x-mrsid-image": {
+ "source": "apache",
+ "extensions": ["sid"]
+ },
+ "image/x-pcx": {
+ "source": "apache",
+ "extensions": ["pcx"]
+ },
+ "image/x-pict": {
+ "source": "apache",
+ "extensions": ["pic","pct"]
+ },
+ "image/x-portable-anymap": {
+ "source": "apache",
+ "extensions": ["pnm"]
+ },
+ "image/x-portable-bitmap": {
+ "source": "apache",
+ "extensions": ["pbm"]
+ },
+ "image/x-portable-graymap": {
+ "source": "apache",
+ "extensions": ["pgm"]
+ },
+ "image/x-portable-pixmap": {
+ "source": "apache",
+ "extensions": ["ppm"]
+ },
+ "image/x-rgb": {
+ "source": "apache",
+ "extensions": ["rgb"]
+ },
+ "image/x-tga": {
+ "source": "apache",
+ "extensions": ["tga"]
+ },
+ "image/x-xbitmap": {
+ "source": "apache",
+ "extensions": ["xbm"]
+ },
+ "image/x-xcf": {
+ "compressible": false
+ },
+ "image/x-xpixmap": {
+ "source": "apache",
+ "extensions": ["xpm"]
+ },
+ "image/x-xwindowdump": {
+ "source": "apache",
+ "extensions": ["xwd"]
+ },
+ "message/cpim": {
+ "source": "iana"
+ },
+ "message/delivery-status": {
+ "source": "iana"
+ },
+ "message/disposition-notification": {
+ "source": "iana"
+ },
+ "message/example": {
+ "source": "iana"
+ },
+ "message/external-body": {
+ "source": "iana"
+ },
+ "message/feedback-report": {
+ "source": "iana"
+ },
+ "message/global": {
+ "source": "iana"
+ },
+ "message/global-delivery-status": {
+ "source": "iana"
+ },
+ "message/global-disposition-notification": {
+ "source": "iana"
+ },
+ "message/global-headers": {
+ "source": "iana"
+ },
+ "message/http": {
+ "source": "iana",
+ "compressible": false
+ },
+ "message/imdn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "message/news": {
+ "source": "iana"
+ },
+ "message/partial": {
+ "source": "iana",
+ "compressible": false
+ },
+ "message/rfc822": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["eml","mime"]
+ },
+ "message/s-http": {
+ "source": "iana"
+ },
+ "message/sip": {
+ "source": "iana"
+ },
+ "message/sipfrag": {
+ "source": "iana"
+ },
+ "message/tracking-status": {
+ "source": "iana"
+ },
+ "message/vnd.si.simp": {
+ "source": "iana"
+ },
+ "message/vnd.wfa.wsc": {
+ "source": "iana"
+ },
+ "model/example": {
+ "source": "iana",
+ "compressible": false
+ },
+ "model/iges": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["igs","iges"]
+ },
+ "model/mesh": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["msh","mesh","silo"]
+ },
+ "model/vnd-dwf": {
+ "source": "iana"
+ },
+ "model/vnd.collada+xml": {
+ "source": "iana",
+ "extensions": ["dae"]
+ },
+ "model/vnd.dwf": {
+ "source": "apache",
+ "extensions": ["dwf"]
+ },
+ "model/vnd.flatland.3dml": {
+ "source": "iana"
+ },
+ "model/vnd.gdl": {
+ "source": "iana",
+ "extensions": ["gdl"]
+ },
+ "model/vnd.gs-gdl": {
+ "source": "iana"
+ },
+ "model/vnd.gs.gdl": {
+ "source": "apache"
+ },
+ "model/vnd.gtw": {
+ "source": "iana",
+ "extensions": ["gtw"]
+ },
+ "model/vnd.moml+xml": {
+ "source": "iana"
+ },
+ "model/vnd.mts": {
+ "source": "iana",
+ "extensions": ["mts"]
+ },
+ "model/vnd.opengex": {
+ "source": "iana"
+ },
+ "model/vnd.parasolid.transmit-binary": {
+ "source": "iana"
+ },
+ "model/vnd.parasolid.transmit-text": {
+ "source": "iana"
+ },
+ "model/vnd.parasolid.transmit.binary": {
+ "source": "apache"
+ },
+ "model/vnd.parasolid.transmit.text": {
+ "source": "apache"
+ },
+ "model/vnd.valve.source.compiled-map": {
+ "source": "iana"
+ },
+ "model/vnd.vtu": {
+ "source": "iana",
+ "extensions": ["vtu"]
+ },
+ "model/vrml": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["wrl","vrml"]
+ },
+ "model/x3d+binary": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["x3db","x3dbz"]
+ },
+ "model/x3d+fastinfoset": {
+ "source": "iana"
+ },
+ "model/x3d+vrml": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["x3dv","x3dvz"]
+ },
+ "model/x3d+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["x3d","x3dz"]
+ },
+ "model/x3d-vrml": {
+ "source": "iana"
+ },
+ "multipart/alternative": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/appledouble": {
+ "source": "iana"
+ },
+ "multipart/byteranges": {
+ "source": "iana"
+ },
+ "multipart/digest": {
+ "source": "iana"
+ },
+ "multipart/encrypted": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/example": {
+ "source": "iana"
+ },
+ "multipart/form-data": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/header-set": {
+ "source": "iana"
+ },
+ "multipart/mixed": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/parallel": {
+ "source": "iana"
+ },
+ "multipart/related": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/report": {
+ "source": "iana"
+ },
+ "multipart/signed": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/voice-message": {
+ "source": "iana"
+ },
+ "multipart/x-mixed-replace": {
+ "source": "iana"
+ },
+ "text/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "text/cache-manifest": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["appcache","manifest"]
+ },
+ "text/calendar": {
+ "source": "iana",
+ "extensions": ["ics","ifb"]
+ },
+ "text/calender": {
+ "compressible": true
+ },
+ "text/cmd": {
+ "compressible": true
+ },
+ "text/coffeescript": {
+ "extensions": ["coffee"]
+ },
+ "text/css": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["css"]
+ },
+ "text/csv": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["csv"]
+ },
+ "text/csv-schema": {
+ "source": "iana"
+ },
+ "text/directory": {
+ "source": "iana"
+ },
+ "text/dns": {
+ "source": "iana"
+ },
+ "text/ecmascript": {
+ "source": "iana"
+ },
+ "text/encaprtp": {
+ "source": "iana"
+ },
+ "text/enriched": {
+ "source": "iana"
+ },
+ "text/example": {
+ "source": "iana"
+ },
+ "text/fwdred": {
+ "source": "iana"
+ },
+ "text/grammar-ref-list": {
+ "source": "iana"
+ },
+ "text/html": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["html","htm"]
+ },
+ "text/jade": {
+ "extensions": ["jade"]
+ },
+ "text/javascript": {
+ "source": "iana",
+ "compressible": true
+ },
+ "text/jcr-cnd": {
+ "source": "iana"
+ },
+ "text/jsx": {
+ "compressible": true,
+ "extensions": ["jsx"]
+ },
+ "text/less": {
+ "extensions": ["less"]
+ },
+ "text/markdown": {
+ "source": "iana"
+ },
+ "text/mizar": {
+ "source": "iana"
+ },
+ "text/n3": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["n3"]
+ },
+ "text/parameters": {
+ "source": "iana"
+ },
+ "text/parityfec": {
+ "source": "iana"
+ },
+ "text/plain": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["txt","text","conf","def","list","log","in","ini"]
+ },
+ "text/provenance-notation": {
+ "source": "iana"
+ },
+ "text/prs.fallenstein.rst": {
+ "source": "iana"
+ },
+ "text/prs.lines.tag": {
+ "source": "iana",
+ "extensions": ["dsc"]
+ },
+ "text/raptorfec": {
+ "source": "iana"
+ },
+ "text/red": {
+ "source": "iana"
+ },
+ "text/rfc822-headers": {
+ "source": "iana"
+ },
+ "text/richtext": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rtx"]
+ },
+ "text/rtf": {
+ "source": "iana"
+ },
+ "text/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "text/rtploopback": {
+ "source": "iana"
+ },
+ "text/rtx": {
+ "source": "iana"
+ },
+ "text/sgml": {
+ "source": "iana",
+ "extensions": ["sgml","sgm"]
+ },
+ "text/stylus": {
+ "extensions": ["stylus","styl"]
+ },
+ "text/t140": {
+ "source": "iana"
+ },
+ "text/tab-separated-values": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["tsv"]
+ },
+ "text/troff": {
+ "source": "iana",
+ "extensions": ["t","tr","roff","man","me","ms"]
+ },
+ "text/turtle": {
+ "source": "iana",
+ "extensions": ["ttl"]
+ },
+ "text/ulpfec": {
+ "source": "iana"
+ },
+ "text/uri-list": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["uri","uris","urls"]
+ },
+ "text/vcard": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["vcard"]
+ },
+ "text/vnd-a": {
+ "source": "iana"
+ },
+ "text/vnd-curl": {
+ "source": "iana"
+ },
+ "text/vnd.abc": {
+ "source": "iana"
+ },
+ "text/vnd.curl": {
+ "source": "apache",
+ "extensions": ["curl"]
+ },
+ "text/vnd.curl.dcurl": {
+ "source": "apache",
+ "extensions": ["dcurl"]
+ },
+ "text/vnd.curl.mcurl": {
+ "source": "apache",
+ "extensions": ["mcurl"]
+ },
+ "text/vnd.curl.scurl": {
+ "source": "apache",
+ "extensions": ["scurl"]
+ },
+ "text/vnd.debian.copyright": {
+ "source": "iana"
+ },
+ "text/vnd.dmclientscript": {
+ "source": "iana"
+ },
+ "text/vnd.dvb.subtitle": {
+ "source": "iana",
+ "extensions": ["sub"]
+ },
+ "text/vnd.esmertec.theme-descriptor": {
+ "source": "iana"
+ },
+ "text/vnd.fly": {
+ "source": "iana",
+ "extensions": ["fly"]
+ },
+ "text/vnd.fmi.flexstor": {
+ "source": "iana",
+ "extensions": ["flx"]
+ },
+ "text/vnd.graphviz": {
+ "source": "iana",
+ "extensions": ["gv"]
+ },
+ "text/vnd.in3d.3dml": {
+ "source": "iana",
+ "extensions": ["3dml"]
+ },
+ "text/vnd.in3d.spot": {
+ "source": "iana",
+ "extensions": ["spot"]
+ },
+ "text/vnd.iptc.newsml": {
+ "source": "iana"
+ },
+ "text/vnd.iptc.nitf": {
+ "source": "iana"
+ },
+ "text/vnd.latex-z": {
+ "source": "iana"
+ },
+ "text/vnd.motorola.reflex": {
+ "source": "iana"
+ },
+ "text/vnd.ms-mediapackage": {
+ "source": "iana"
+ },
+ "text/vnd.net2phone.commcenter.command": {
+ "source": "iana"
+ },
+ "text/vnd.radisys.msml-basic-layout": {
+ "source": "iana"
+ },
+ "text/vnd.si.uricatalogue": {
+ "source": "iana"
+ },
+ "text/vnd.sun.j2me.app-descriptor": {
+ "source": "iana",
+ "extensions": ["jad"]
+ },
+ "text/vnd.trolltech.linguist": {
+ "source": "iana"
+ },
+ "text/vnd.wap-wml": {
+ "source": "iana"
+ },
+ "text/vnd.wap.si": {
+ "source": "iana"
+ },
+ "text/vnd.wap.sl": {
+ "source": "iana"
+ },
+ "text/vnd.wap.wml": {
+ "source": "apache",
+ "extensions": ["wml"]
+ },
+ "text/vnd.wap.wmlscript": {
+ "source": "iana",
+ "extensions": ["wmls"]
+ },
+ "text/vtt": {
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["vtt"]
+ },
+ "text/x-asm": {
+ "source": "apache",
+ "extensions": ["s","asm"]
+ },
+ "text/x-c": {
+ "source": "apache",
+ "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
+ },
+ "text/x-component": {
+ "extensions": ["htc"]
+ },
+ "text/x-fortran": {
+ "source": "apache",
+ "extensions": ["f","for","f77","f90"]
+ },
+ "text/x-gwt-rpc": {
+ "compressible": true
+ },
+ "text/x-handlebars-template": {
+ "extensions": ["hbs"]
+ },
+ "text/x-java-source": {
+ "source": "apache",
+ "extensions": ["java"]
+ },
+ "text/x-jquery-tmpl": {
+ "compressible": true
+ },
+ "text/x-lua": {
+ "extensions": ["lua"]
+ },
+ "text/x-markdown": {
+ "compressible": true,
+ "extensions": ["markdown","md","mkd"]
+ },
+ "text/x-nfo": {
+ "source": "apache",
+ "extensions": ["nfo"]
+ },
+ "text/x-opml": {
+ "source": "apache",
+ "extensions": ["opml"]
+ },
+ "text/x-pascal": {
+ "source": "apache",
+ "extensions": ["p","pas"]
+ },
+ "text/x-sass": {
+ "extensions": ["sass"]
+ },
+ "text/x-scss": {
+ "extensions": ["scss"]
+ },
+ "text/x-setext": {
+ "source": "apache",
+ "extensions": ["etx"]
+ },
+ "text/x-sfv": {
+ "source": "apache",
+ "extensions": ["sfv"]
+ },
+ "text/x-uuencode": {
+ "source": "apache",
+ "extensions": ["uu"]
+ },
+ "text/x-vcalendar": {
+ "source": "apache",
+ "extensions": ["vcs"]
+ },
+ "text/x-vcard": {
+ "source": "apache",
+ "extensions": ["vcf"]
+ },
+ "text/xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "text/xml-external-parsed-entity": {
+ "source": "iana"
+ },
+ "text/yaml": {
+ "extensions": ["yaml","yml"]
+ },
+ "video/1d-interleaved-parityfec": {
+ "source": "apache"
+ },
+ "video/3gpp": {
+ "source": "apache",
+ "extensions": ["3gp"]
+ },
+ "video/3gpp-tt": {
+ "source": "apache"
+ },
+ "video/3gpp2": {
+ "source": "apache",
+ "extensions": ["3g2"]
+ },
+ "video/bmpeg": {
+ "source": "apache"
+ },
+ "video/bt656": {
+ "source": "apache"
+ },
+ "video/celb": {
+ "source": "apache"
+ },
+ "video/dv": {
+ "source": "apache"
+ },
+ "video/example": {
+ "source": "apache"
+ },
+ "video/h261": {
+ "source": "apache",
+ "extensions": ["h261"]
+ },
+ "video/h263": {
+ "source": "apache",
+ "extensions": ["h263"]
+ },
+ "video/h263-1998": {
+ "source": "apache"
+ },
+ "video/h263-2000": {
+ "source": "apache"
+ },
+ "video/h264": {
+ "source": "apache",
+ "extensions": ["h264"]
+ },
+ "video/h264-rcdo": {
+ "source": "apache"
+ },
+ "video/h264-svc": {
+ "source": "apache"
+ },
+ "video/jpeg": {
+ "source": "apache",
+ "extensions": ["jpgv"]
+ },
+ "video/jpeg2000": {
+ "source": "apache"
+ },
+ "video/jpm": {
+ "source": "apache",
+ "extensions": ["jpm","jpgm"]
+ },
+ "video/mj2": {
+ "source": "apache",
+ "extensions": ["mj2","mjp2"]
+ },
+ "video/mp1s": {
+ "source": "apache"
+ },
+ "video/mp2p": {
+ "source": "apache"
+ },
+ "video/mp2t": {
+ "source": "apache",
+ "extensions": ["ts"]
+ },
+ "video/mp4": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["mp4","mp4v","mpg4"]
+ },
+ "video/mp4v-es": {
+ "source": "apache"
+ },
+ "video/mpeg": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
+ },
+ "video/mpeg4-generic": {
+ "source": "apache"
+ },
+ "video/mpv": {
+ "source": "apache"
+ },
+ "video/nv": {
+ "source": "apache"
+ },
+ "video/ogg": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["ogv"]
+ },
+ "video/parityfec": {
+ "source": "apache"
+ },
+ "video/pointer": {
+ "source": "apache"
+ },
+ "video/quicktime": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["qt","mov"]
+ },
+ "video/raw": {
+ "source": "apache"
+ },
+ "video/rtp-enc-aescm128": {
+ "source": "apache"
+ },
+ "video/rtx": {
+ "source": "apache"
+ },
+ "video/smpte292m": {
+ "source": "apache"
+ },
+ "video/ulpfec": {
+ "source": "apache"
+ },
+ "video/vc1": {
+ "source": "apache"
+ },
+ "video/vnd.cctv": {
+ "source": "apache"
+ },
+ "video/vnd.dece.hd": {
+ "source": "apache",
+ "extensions": ["uvh","uvvh"]
+ },
+ "video/vnd.dece.mobile": {
+ "source": "apache",
+ "extensions": ["uvm","uvvm"]
+ },
+ "video/vnd.dece.mp4": {
+ "source": "apache"
+ },
+ "video/vnd.dece.pd": {
+ "source": "apache",
+ "extensions": ["uvp","uvvp"]
+ },
+ "video/vnd.dece.sd": {
+ "source": "apache",
+ "extensions": ["uvs","uvvs"]
+ },
+ "video/vnd.dece.video": {
+ "source": "apache",
+ "extensions": ["uvv","uvvv"]
+ },
+ "video/vnd.directv.mpeg": {
+ "source": "apache"
+ },
+ "video/vnd.directv.mpeg-tts": {
+ "source": "apache"
+ },
+ "video/vnd.dlna.mpeg-tts": {
+ "source": "apache"
+ },
+ "video/vnd.dvb.file": {
+ "source": "apache",
+ "extensions": ["dvb"]
+ },
+ "video/vnd.fvt": {
+ "source": "apache",
+ "extensions": ["fvt"]
+ },
+ "video/vnd.hns.video": {
+ "source": "apache"
+ },
+ "video/vnd.iptvforum.1dparityfec-1010": {
+ "source": "apache"
+ },
+ "video/vnd.iptvforum.1dparityfec-2005": {
+ "source": "apache"
+ },
+ "video/vnd.iptvforum.2dparityfec-1010": {
+ "source": "apache"
+ },
+ "video/vnd.iptvforum.2dparityfec-2005": {
+ "source": "apache"
+ },
+ "video/vnd.iptvforum.ttsavc": {
+ "source": "apache"
+ },
+ "video/vnd.iptvforum.ttsmpeg2": {
+ "source": "apache"
+ },
+ "video/vnd.motorola.video": {
+ "source": "apache"
+ },
+ "video/vnd.motorola.videop": {
+ "source": "apache"
+ },
+ "video/vnd.mpegurl": {
+ "source": "apache",
+ "extensions": ["mxu","m4u"]
+ },
+ "video/vnd.ms-playready.media.pyv": {
+ "source": "apache",
+ "extensions": ["pyv"]
+ },
+ "video/vnd.nokia.interleaved-multimedia": {
+ "source": "apache"
+ },
+ "video/vnd.nokia.videovoip": {
+ "source": "apache"
+ },
+ "video/vnd.objectvideo": {
+ "source": "apache"
+ },
+ "video/vnd.sealed.mpeg1": {
+ "source": "apache"
+ },
+ "video/vnd.sealed.mpeg4": {
+ "source": "apache"
+ },
+ "video/vnd.sealed.swf": {
+ "source": "apache"
+ },
+ "video/vnd.sealedmedia.softseal.mov": {
+ "source": "apache"
+ },
+ "video/vnd.uvvu.mp4": {
+ "source": "apache",
+ "extensions": ["uvu","uvvu"]
+ },
+ "video/vnd.vivo": {
+ "source": "apache",
+ "extensions": ["viv"]
+ },
+ "video/webm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["webm"]
+ },
+ "video/x-f4v": {
+ "source": "apache",
+ "extensions": ["f4v"]
+ },
+ "video/x-fli": {
+ "source": "apache",
+ "extensions": ["fli"]
+ },
+ "video/x-flv": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["flv"]
+ },
+ "video/x-m4v": {
+ "source": "apache",
+ "extensions": ["m4v"]
+ },
+ "video/x-matroska": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["mkv","mk3d","mks"]
+ },
+ "video/x-mng": {
+ "source": "apache",
+ "extensions": ["mng"]
+ },
+ "video/x-ms-asf": {
+ "source": "apache",
+ "extensions": ["asf","asx"]
+ },
+ "video/x-ms-vob": {
+ "source": "apache",
+ "extensions": ["vob"]
+ },
+ "video/x-ms-wm": {
+ "source": "apache",
+ "extensions": ["wm"]
+ },
+ "video/x-ms-wmv": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["wmv"]
+ },
+ "video/x-ms-wmx": {
+ "source": "apache",
+ "extensions": ["wmx"]
+ },
+ "video/x-ms-wvx": {
+ "source": "apache",
+ "extensions": ["wvx"]
+ },
+ "video/x-msvideo": {
+ "source": "apache",
+ "extensions": ["avi"]
+ },
+ "video/x-sgi-movie": {
+ "source": "apache",
+ "extensions": ["movie"]
+ },
+ "video/x-smv": {
+ "source": "apache",
+ "extensions": ["smv"]
+ },
+ "x-conference/x-cooltalk": {
+ "source": "apache",
+ "extensions": ["ice"]
+ },
+ "x-shader/x-fragment": {
+ "compressible": true
+ },
+ "x-shader/x-vertex": {
+ "compressible": true
+ }
+}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/index.js b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/index.js
new file mode 100644
index 000000000..551031f69
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/index.js
@@ -0,0 +1,11 @@
+/*!
+ * mime-db
+ * Copyright(c) 2014 Jonathan Ong
+ * MIT Licensed
+ */
+
+/**
+ * Module exports.
+ */
+
+module.exports = require('./db.json')
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/package.json
new file mode 100644
index 000000000..ff01bd530
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/node_modules/mime-db/package.json
@@ -0,0 +1,78 @@
+{
+ "name": "mime-db",
+ "description": "Media Type Database",
+ "version": "1.3.0",
+ "author": {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jshttp/mime-db"
+ },
+ "devDependencies": {
+ "co": "3",
+ "cogent": "1",
+ "csv-parse": "0",
+ "gnode": "0.1.0",
+ "istanbul": "0.3.4",
+ "mocha": "~1.21.4",
+ "stream-to-array": "2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "files": [
+ "LICENSE",
+ "db.json",
+ "index.js"
+ ],
+ "scripts": {
+ "update": "gnode scripts/extensions && gnode scripts/types && node scripts/build",
+ "clean": "rm src/*",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+ },
+ "keywords": [
+ "mime",
+ "db",
+ "type",
+ "types",
+ "database",
+ "charset",
+ "charsets"
+ ],
+ "gitHead": "dc3a4d4948e9e6814404712d0f3560f1fffe7d73",
+ "bugs": {
+ "url": "https://github.com/jshttp/mime-db/issues"
+ },
+ "homepage": "https://github.com/jshttp/mime-db",
+ "_id": "mime-db@1.3.0",
+ "_shasum": "5fefeb25dd9b097c5d45091c60f8149b98d749ec",
+ "_from": "mime-db@>=1.3.0 <1.4.0",
+ "_npmVersion": "1.4.21",
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "maintainers": [
+ {
+ "name": "jongleberry",
+ "email": "jonathanrichardong@gmail.com"
+ },
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ }
+ ],
+ "dist": {
+ "shasum": "5fefeb25dd9b097c5d45091c60f8149b98d749ec",
+ "tarball": "http://registry.npmjs.org/mime-db/-/mime-db-1.3.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.3.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/package.json
new file mode 100644
index 000000000..1544629b6
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime-types/package.json
@@ -0,0 +1,80 @@
+{
+ "name": "mime-types",
+ "description": "The ultimate javascript content-type utility.",
+ "version": "2.0.4",
+ "contributors": [
+ {
+ "name": "Jeremiah Senkpiel",
+ "email": "fishrock123@rocketmail.com",
+ "url": "https://searchbeam.jit.su"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ }
+ ],
+ "license": "MIT",
+ "keywords": [
+ "mime",
+ "types"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jshttp/mime-types"
+ },
+ "dependencies": {
+ "mime-db": "~1.3.0"
+ },
+ "devDependencies": {
+ "istanbul": "0",
+ "mocha": "~1.21.5"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "test": "mocha --reporter spec test/test.js",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js"
+ },
+ "gitHead": "63a9b82e6e364d62428ed5459e5486504c489bf2",
+ "bugs": {
+ "url": "https://github.com/jshttp/mime-types/issues"
+ },
+ "homepage": "https://github.com/jshttp/mime-types",
+ "_id": "mime-types@2.0.4",
+ "_shasum": "855a612979141d806ba5104294a28c731c6ea790",
+ "_from": "mime-types@>=2.0.3 <2.1.0",
+ "_npmVersion": "1.4.21",
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "maintainers": [
+ {
+ "name": "jongleberry",
+ "email": "jonathanrichardong@gmail.com"
+ },
+ {
+ "name": "fishrock123",
+ "email": "fishrock123@rocketmail.com"
+ },
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ }
+ ],
+ "dist": {
+ "shasum": "855a612979141d806ba5104294a28c731c6ea790",
+ "tarball": "http://registry.npmjs.org/mime-types/-/mime-types-2.0.4.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.4.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/README.md b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/README.md
deleted file mode 100644
index 6ca19bd1e..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/README.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# mime
-
-Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.
-
-## Install
-
-Install with [npm](http://github.com/isaacs/npm):
-
- npm install mime
-
-## API - Queries
-
-### mime.lookup(path)
-Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.
-
- var mime = require('mime');
-
- mime.lookup('/path/to/file.txt'); // => 'text/plain'
- mime.lookup('file.txt'); // => 'text/plain'
- mime.lookup('.TXT'); // => 'text/plain'
- mime.lookup('htm'); // => 'text/html'
-
-### mime.default_type
-Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)
-
-### mime.extension(type)
-Get the default extension for `type`
-
- mime.extension('text/html'); // => 'html'
- mime.extension('application/octet-stream'); // => 'bin'
-
-### mime.charsets.lookup()
-
-Map mime-type to charset
-
- mime.charsets.lookup('text/plain'); // => 'UTF-8'
-
-(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)
-
-## API - Defining Custom Types
-
-The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).
-
-### mime.define()
-
-Add custom mime/extension mappings
-
- mime.define({
- 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],
- 'application/x-my-type': ['x-mt', 'x-mtt'],
- // etc ...
- });
-
- mime.lookup('x-sft'); // => 'text/x-some-format'
-
-The first entry in the extensions array is returned by `mime.extension()`. E.g.
-
- mime.extension('text/x-some-format'); // => 'x-sf'
-
-### mime.load(filepath)
-
-Load mappings from an Apache ".types" format file
-
- mime.load('./my_project.types');
-
-The .types file format is simple - See the `types` dir for examples.
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/mime.js b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/mime.js
deleted file mode 100644
index 48be0c5e4..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/mime.js
+++ /dev/null
@@ -1,114 +0,0 @@
-var path = require('path');
-var fs = require('fs');
-
-function Mime() {
- // Map of extension -> mime type
- this.types = Object.create(null);
-
- // Map of mime type -> extension
- this.extensions = Object.create(null);
-}
-
-/**
- * Define mimetype -> extension mappings. Each key is a mime-type that maps
- * to an array of extensions associated with the type. The first extension is
- * used as the default extension for the type.
- *
- * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
- *
- * @param map (Object) type definitions
- */
-Mime.prototype.define = function (map) {
- for (var type in map) {
- var exts = map[type];
-
- for (var i = 0; i < exts.length; i++) {
- if (process.env.DEBUG_MIME && this.types[exts]) {
- console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' +
- this.types[exts] + ' to ' + type);
- }
-
- this.types[exts[i]] = type;
- }
-
- // Default extension is the first one we encounter
- if (!this.extensions[type]) {
- this.extensions[type] = exts[0];
- }
- }
-};
-
-/**
- * Load an Apache2-style ".types" file
- *
- * This may be called multiple times (it's expected). Where files declare
- * overlapping types/extensions, the last file wins.
- *
- * @param file (String) path of file to load.
- */
-Mime.prototype.load = function(file) {
-
- this._loading = file;
- // Read file and split into lines
- var map = {},
- content = fs.readFileSync(file, 'ascii'),
- lines = content.split(/[\r\n]+/);
-
- lines.forEach(function(line) {
- // Clean up whitespace/comments, and split into fields
- var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/);
- map[fields.shift()] = fields;
- });
-
- this.define(map);
-
- this._loading = null;
-};
-
-/**
- * Lookup a mime type based on extension
- */
-Mime.prototype.lookup = function(path, fallback) {
- var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase();
-
- return this.types[ext] || fallback || this.default_type;
-};
-
-/**
- * Return file extension associated with a mime type
- */
-Mime.prototype.extension = function(mimeType) {
- var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase();
- return this.extensions[type];
-};
-
-// Default instance
-var mime = new Mime();
-
-// Load local copy of
-// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
-mime.load(path.join(__dirname, 'types/mime.types'));
-
-// Load additional types from node.js community
-mime.load(path.join(__dirname, 'types/node.types'));
-
-// Default type
-mime.default_type = mime.lookup('bin');
-
-//
-// Additional API specific to the default instance
-//
-
-mime.Mime = Mime;
-
-/**
- * Lookup a charset based on mime type.
- */
-mime.charsets = {
- lookup: function(mimeType, fallback) {
- // Assume text types are utf8
- return (/^text\//).test(mimeType) ? 'UTF-8' : fallback;
- }
-};
-
-module.exports = mime;
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json
deleted file mode 100644
index b666b72a2..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "author": {
- "name": "Robert Kieffer",
- "email": "robert@broofa.com",
- "url": "http://github.com/broofa"
- },
- "contributors": [
- {
- "name": "Benjamin Thomas",
- "email": "benjamin@benjaminthomas.org",
- "url": "http://github.com/bentomas"
- }
- ],
- "dependencies": {},
- "description": "A comprehensive library for mime-type mapping",
- "devDependencies": {},
- "keywords": [
- "util",
- "mime"
- ],
- "main": "mime.js",
- "name": "mime",
- "repository": {
- "url": "https://github.com/broofa/node-mime",
- "type": "git"
- },
- "version": "1.2.11",
- "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/broofa/node-mime/issues"
- },
- "_id": "mime@1.2.11",
- "dist": {
- "shasum": "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10",
- "tarball": "http://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
- },
- "_from": "mime@>=1.2.11 <1.3.0",
- "_npmVersion": "1.3.6",
- "_npmUser": {
- "name": "broofa",
- "email": "robert@broofa.com"
- },
- "maintainers": [
- {
- "name": "broofa",
- "email": "robert@broofa.com"
- },
- {
- "name": "bentomas",
- "email": "benjamin@benjaminthomas.org"
- }
- ],
- "directories": {},
- "_shasum": "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10",
- "_resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
- "homepage": "https://github.com/broofa/node-mime",
- "scripts": {}
-}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/test.js b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/test.js
deleted file mode 100644
index 2cda1c7ad..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/test.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Usage: node test.js
- */
-
-var mime = require('./mime');
-var assert = require('assert');
-var path = require('path');
-
-function eq(a, b) {
- console.log('Test: ' + a + ' === ' + b);
- assert.strictEqual.apply(null, arguments);
-}
-
-console.log(Object.keys(mime.extensions).length + ' types');
-console.log(Object.keys(mime.types).length + ' extensions\n');
-
-//
-// Test mime lookups
-//
-
-eq('text/plain', mime.lookup('text.txt')); // normal file
-eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase
-eq('text/plain', mime.lookup('dir/text.txt')); // dir + file
-eq('text/plain', mime.lookup('.text.txt')); // hidden file
-eq('text/plain', mime.lookup('.txt')); // nameless
-eq('text/plain', mime.lookup('txt')); // extension-only
-eq('text/plain', mime.lookup('/txt')); // extension-less ()
-eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less
-eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized
-eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default
-
-//
-// Test extensions
-//
-
-eq('txt', mime.extension(mime.types.text));
-eq('html', mime.extension(mime.types.htm));
-eq('bin', mime.extension('application/octet-stream'));
-eq('bin', mime.extension('application/octet-stream '));
-eq('html', mime.extension(' text/html; charset=UTF-8'));
-eq('html', mime.extension('text/html; charset=UTF-8 '));
-eq('html', mime.extension('text/html; charset=UTF-8'));
-eq('html', mime.extension('text/html ; charset=UTF-8'));
-eq('html', mime.extension('text/html;charset=UTF-8'));
-eq('html', mime.extension('text/Html;charset=UTF-8'));
-eq(undefined, mime.extension('unrecognized'));
-
-//
-// Test node.types lookups
-//
-
-eq('application/font-woff', mime.lookup('file.woff'));
-eq('application/octet-stream', mime.lookup('file.buffer'));
-eq('audio/mp4', mime.lookup('file.m4a'));
-eq('font/opentype', mime.lookup('file.otf'));
-
-//
-// Test charsets
-//
-
-eq('UTF-8', mime.charsets.lookup('text/plain'));
-eq(undefined, mime.charsets.lookup(mime.types.js));
-eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
-
-//
-// Test for overlaps between mime.types and node.types
-//
-
-var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime();
-apacheTypes.load(path.join(__dirname, 'types/mime.types'));
-nodeTypes.load(path.join(__dirname, 'types/node.types'));
-
-var keys = [].concat(Object.keys(apacheTypes.types))
- .concat(Object.keys(nodeTypes.types));
-keys.sort();
-for (var i = 1; i < keys.length; i++) {
- if (keys[i] == keys[i-1]) {
- console.warn('Warning: ' +
- 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] +
- ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]);
- }
-}
-
-console.log('\nOK');
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/mime.types b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/mime.types
deleted file mode 100644
index da8cd6918..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/mime.types
+++ /dev/null
@@ -1,1588 +0,0 @@
-# This file maps Internet media types to unique file extension(s).
-# Although created for httpd, this file is used by many software systems
-# and has been placed in the public domain for unlimited redisribution.
-#
-# The table below contains both registered and (common) unregistered types.
-# A type that has no unique extension can be ignored -- they are listed
-# here to guide configurations toward known types and to make it easier to
-# identify "new" types. File extensions are also commonly used to indicate
-# content languages and encodings, so choose them carefully.
-#
-# Internet media types should be registered as described in RFC 4288.
-# The registry is at <http://www.iana.org/assignments/media-types/>.
-#
-# MIME type (lowercased) Extensions
-# ============================================ ==========
-# application/1d-interleaved-parityfec
-# application/3gpp-ims+xml
-# application/activemessage
-application/andrew-inset ez
-# application/applefile
-application/applixware aw
-application/atom+xml atom
-application/atomcat+xml atomcat
-# application/atomicmail
-application/atomsvc+xml atomsvc
-# application/auth-policy+xml
-# application/batch-smtp
-# application/beep+xml
-# application/calendar+xml
-# application/cals-1840
-# application/ccmp+xml
-application/ccxml+xml ccxml
-application/cdmi-capability cdmia
-application/cdmi-container cdmic
-application/cdmi-domain cdmid
-application/cdmi-object cdmio
-application/cdmi-queue cdmiq
-# application/cea-2018+xml
-# application/cellml+xml
-# application/cfw
-# application/cnrp+xml
-# application/commonground
-# application/conference-info+xml
-# application/cpl+xml
-# application/csta+xml
-# application/cstadata+xml
-application/cu-seeme cu
-# application/cybercash
-application/davmount+xml davmount
-# application/dca-rft
-# application/dec-dx
-# application/dialog-info+xml
-# application/dicom
-# application/dns
-application/docbook+xml dbk
-# application/dskpp+xml
-application/dssc+der dssc
-application/dssc+xml xdssc
-# application/dvcs
-application/ecmascript ecma
-# application/edi-consent
-# application/edi-x12
-# application/edifact
-application/emma+xml emma
-# application/epp+xml
-application/epub+zip epub
-# application/eshop
-# application/example
-application/exi exi
-# application/fastinfoset
-# application/fastsoap
-# application/fits
-application/font-tdpfr pfr
-# application/framework-attributes+xml
-application/gml+xml gml
-application/gpx+xml gpx
-application/gxf gxf
-# application/h224
-# application/held+xml
-# application/http
-application/hyperstudio stk
-# application/ibe-key-request+xml
-# application/ibe-pkg-reply+xml
-# application/ibe-pp-data
-# application/iges
-# application/im-iscomposing+xml
-# application/index
-# application/index.cmd
-# application/index.obj
-# application/index.response
-# application/index.vnd
-application/inkml+xml ink inkml
-# application/iotp
-application/ipfix ipfix
-# application/ipp
-# application/isup
-application/java-archive jar
-application/java-serialized-object ser
-application/java-vm class
-application/javascript js
-application/json json
-application/jsonml+json jsonml
-# application/kpml-request+xml
-# application/kpml-response+xml
-application/lost+xml lostxml
-application/mac-binhex40 hqx
-application/mac-compactpro cpt
-# application/macwriteii
-application/mads+xml mads
-application/marc mrc
-application/marcxml+xml mrcx
-application/mathematica ma nb mb
-# application/mathml-content+xml
-# application/mathml-presentation+xml
-application/mathml+xml mathml
-# application/mbms-associated-procedure-description+xml
-# application/mbms-deregister+xml
-# application/mbms-envelope+xml
-# application/mbms-msk+xml
-# application/mbms-msk-response+xml
-# application/mbms-protection-description+xml
-# application/mbms-reception-report+xml
-# application/mbms-register+xml
-# application/mbms-register-response+xml
-# application/mbms-user-service-description+xml
-application/mbox mbox
-# application/media_control+xml
-application/mediaservercontrol+xml mscml
-application/metalink+xml metalink
-application/metalink4+xml meta4
-application/mets+xml mets
-# application/mikey
-application/mods+xml mods
-# application/moss-keys
-# application/moss-signature
-# application/mosskey-data
-# application/mosskey-request
-application/mp21 m21 mp21
-application/mp4 mp4s
-# application/mpeg4-generic
-# application/mpeg4-iod
-# application/mpeg4-iod-xmt
-# application/msc-ivr+xml
-# application/msc-mixer+xml
-application/msword doc dot
-application/mxf mxf
-# application/nasdata
-# application/news-checkgroups
-# application/news-groupinfo
-# application/news-transmission
-# application/nss
-# application/ocsp-request
-# application/ocsp-response
-application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy
-application/oda oda
-application/oebps-package+xml opf
-application/ogg ogx
-application/omdoc+xml omdoc
-application/onenote onetoc onetoc2 onetmp onepkg
-application/oxps oxps
-# application/parityfec
-application/patch-ops-error+xml xer
-application/pdf pdf
-application/pgp-encrypted pgp
-# application/pgp-keys
-application/pgp-signature asc sig
-application/pics-rules prf
-# application/pidf+xml
-# application/pidf-diff+xml
-application/pkcs10 p10
-application/pkcs7-mime p7m p7c
-application/pkcs7-signature p7s
-application/pkcs8 p8
-application/pkix-attr-cert ac
-application/pkix-cert cer
-application/pkix-crl crl
-application/pkix-pkipath pkipath
-application/pkixcmp pki
-application/pls+xml pls
-# application/poc-settings+xml
-application/postscript ai eps ps
-# application/prs.alvestrand.titrax-sheet
-application/prs.cww cww
-# application/prs.nprend
-# application/prs.plucker
-# application/prs.rdf-xml-crypt
-# application/prs.xsf+xml
-application/pskc+xml pskcxml
-# application/qsig
-application/rdf+xml rdf
-application/reginfo+xml rif
-application/relax-ng-compact-syntax rnc
-# application/remote-printing
-application/resource-lists+xml rl
-application/resource-lists-diff+xml rld
-# application/riscos
-# application/rlmi+xml
-application/rls-services+xml rs
-application/rpki-ghostbusters gbr
-application/rpki-manifest mft
-application/rpki-roa roa
-# application/rpki-updown
-application/rsd+xml rsd
-application/rss+xml rss
-application/rtf rtf
-# application/rtx
-# application/samlassertion+xml
-# application/samlmetadata+xml
-application/sbml+xml sbml
-application/scvp-cv-request scq
-application/scvp-cv-response scs
-application/scvp-vp-request spq
-application/scvp-vp-response spp
-application/sdp sdp
-# application/set-payment
-application/set-payment-initiation setpay
-# application/set-registration
-application/set-registration-initiation setreg
-# application/sgml
-# application/sgml-open-catalog
-application/shf+xml shf
-# application/sieve
-# application/simple-filter+xml
-# application/simple-message-summary
-# application/simplesymbolcontainer
-# application/slate
-# application/smil
-application/smil+xml smi smil
-# application/soap+fastinfoset
-# application/soap+xml
-application/sparql-query rq
-application/sparql-results+xml srx
-# application/spirits-event+xml
-application/srgs gram
-application/srgs+xml grxml
-application/sru+xml sru
-application/ssdl+xml ssdl
-application/ssml+xml ssml
-# application/tamp-apex-update
-# application/tamp-apex-update-confirm
-# application/tamp-community-update
-# application/tamp-community-update-confirm
-# application/tamp-error
-# application/tamp-sequence-adjust
-# application/tamp-sequence-adjust-confirm
-# application/tamp-status-query
-# application/tamp-status-response
-# application/tamp-update
-# application/tamp-update-confirm
-application/tei+xml tei teicorpus
-application/thraud+xml tfi
-# application/timestamp-query
-# application/timestamp-reply
-application/timestamped-data tsd
-# application/tve-trigger
-# application/ulpfec
-# application/vcard+xml
-# application/vemmi
-# application/vividence.scriptfile
-# application/vnd.3gpp.bsf+xml
-application/vnd.3gpp.pic-bw-large plb
-application/vnd.3gpp.pic-bw-small psb
-application/vnd.3gpp.pic-bw-var pvb
-# application/vnd.3gpp.sms
-# application/vnd.3gpp2.bcmcsinfo+xml
-# application/vnd.3gpp2.sms
-application/vnd.3gpp2.tcap tcap
-application/vnd.3m.post-it-notes pwn
-application/vnd.accpac.simply.aso aso
-application/vnd.accpac.simply.imp imp
-application/vnd.acucobol acu
-application/vnd.acucorp atc acutc
-application/vnd.adobe.air-application-installer-package+zip air
-application/vnd.adobe.formscentral.fcdt fcdt
-application/vnd.adobe.fxp fxp fxpl
-# application/vnd.adobe.partial-upload
-application/vnd.adobe.xdp+xml xdp
-application/vnd.adobe.xfdf xfdf
-# application/vnd.aether.imp
-# application/vnd.ah-barcode
-application/vnd.ahead.space ahead
-application/vnd.airzip.filesecure.azf azf
-application/vnd.airzip.filesecure.azs azs
-application/vnd.amazon.ebook azw
-application/vnd.americandynamics.acc acc
-application/vnd.amiga.ami ami
-# application/vnd.amundsen.maze+xml
-application/vnd.android.package-archive apk
-application/vnd.anser-web-certificate-issue-initiation cii
-application/vnd.anser-web-funds-transfer-initiation fti
-application/vnd.antix.game-component atx
-application/vnd.apple.installer+xml mpkg
-application/vnd.apple.mpegurl m3u8
-# application/vnd.arastra.swi
-application/vnd.aristanetworks.swi swi
-application/vnd.astraea-software.iota iota
-application/vnd.audiograph aep
-# application/vnd.autopackage
-# application/vnd.avistar+xml
-application/vnd.blueice.multipass mpm
-# application/vnd.bluetooth.ep.oob
-application/vnd.bmi bmi
-application/vnd.businessobjects rep
-# application/vnd.cab-jscript
-# application/vnd.canon-cpdl
-# application/vnd.canon-lips
-# application/vnd.cendio.thinlinc.clientconf
-application/vnd.chemdraw+xml cdxml
-application/vnd.chipnuts.karaoke-mmd mmd
-application/vnd.cinderella cdy
-# application/vnd.cirpack.isdn-ext
-application/vnd.claymore cla
-application/vnd.cloanto.rp9 rp9
-application/vnd.clonk.c4group c4g c4d c4f c4p c4u
-application/vnd.cluetrust.cartomobile-config c11amc
-application/vnd.cluetrust.cartomobile-config-pkg c11amz
-# application/vnd.collection+json
-# application/vnd.commerce-battelle
-application/vnd.commonspace csp
-application/vnd.contact.cmsg cdbcmsg
-application/vnd.cosmocaller cmc
-application/vnd.crick.clicker clkx
-application/vnd.crick.clicker.keyboard clkk
-application/vnd.crick.clicker.palette clkp
-application/vnd.crick.clicker.template clkt
-application/vnd.crick.clicker.wordbank clkw
-application/vnd.criticaltools.wbs+xml wbs
-application/vnd.ctc-posml pml
-# application/vnd.ctct.ws+xml
-# application/vnd.cups-pdf
-# application/vnd.cups-postscript
-application/vnd.cups-ppd ppd
-# application/vnd.cups-raster
-# application/vnd.cups-raw
-# application/vnd.curl
-application/vnd.curl.car car
-application/vnd.curl.pcurl pcurl
-# application/vnd.cybank
-application/vnd.dart dart
-application/vnd.data-vision.rdz rdz
-application/vnd.dece.data uvf uvvf uvd uvvd
-application/vnd.dece.ttml+xml uvt uvvt
-application/vnd.dece.unspecified uvx uvvx
-application/vnd.dece.zip uvz uvvz
-application/vnd.denovo.fcselayout-link fe_launch
-# application/vnd.dir-bi.plate-dl-nosuffix
-application/vnd.dna dna
-application/vnd.dolby.mlp mlp
-# application/vnd.dolby.mobile.1
-# application/vnd.dolby.mobile.2
-application/vnd.dpgraph dpg
-application/vnd.dreamfactory dfac
-application/vnd.ds-keypoint kpxx
-application/vnd.dvb.ait ait
-# application/vnd.dvb.dvbj
-# application/vnd.dvb.esgcontainer
-# application/vnd.dvb.ipdcdftnotifaccess
-# application/vnd.dvb.ipdcesgaccess
-# application/vnd.dvb.ipdcesgaccess2
-# application/vnd.dvb.ipdcesgpdd
-# application/vnd.dvb.ipdcroaming
-# application/vnd.dvb.iptv.alfec-base
-# application/vnd.dvb.iptv.alfec-enhancement
-# application/vnd.dvb.notif-aggregate-root+xml
-# application/vnd.dvb.notif-container+xml
-# application/vnd.dvb.notif-generic+xml
-# application/vnd.dvb.notif-ia-msglist+xml
-# application/vnd.dvb.notif-ia-registration-request+xml
-# application/vnd.dvb.notif-ia-registration-response+xml
-# application/vnd.dvb.notif-init+xml
-# application/vnd.dvb.pfr
-application/vnd.dvb.service svc
-# application/vnd.dxr
-application/vnd.dynageo geo
-# application/vnd.easykaraoke.cdgdownload
-# application/vnd.ecdis-update
-application/vnd.ecowin.chart mag
-# application/vnd.ecowin.filerequest
-# application/vnd.ecowin.fileupdate
-# application/vnd.ecowin.series
-# application/vnd.ecowin.seriesrequest
-# application/vnd.ecowin.seriesupdate
-# application/vnd.emclient.accessrequest+xml
-application/vnd.enliven nml
-# application/vnd.eprints.data+xml
-application/vnd.epson.esf esf
-application/vnd.epson.msf msf
-application/vnd.epson.quickanime qam
-application/vnd.epson.salt slt
-application/vnd.epson.ssf ssf
-# application/vnd.ericsson.quickcall
-application/vnd.eszigno3+xml es3 et3
-# application/vnd.etsi.aoc+xml
-# application/vnd.etsi.cug+xml
-# application/vnd.etsi.iptvcommand+xml
-# application/vnd.etsi.iptvdiscovery+xml
-# application/vnd.etsi.iptvprofile+xml
-# application/vnd.etsi.iptvsad-bc+xml
-# application/vnd.etsi.iptvsad-cod+xml
-# application/vnd.etsi.iptvsad-npvr+xml
-# application/vnd.etsi.iptvservice+xml
-# application/vnd.etsi.iptvsync+xml
-# application/vnd.etsi.iptvueprofile+xml
-# application/vnd.etsi.mcid+xml
-# application/vnd.etsi.overload-control-policy-dataset+xml
-# application/vnd.etsi.sci+xml
-# application/vnd.etsi.simservs+xml
-# application/vnd.etsi.tsl+xml
-# application/vnd.etsi.tsl.der
-# application/vnd.eudora.data
-application/vnd.ezpix-album ez2
-application/vnd.ezpix-package ez3
-# application/vnd.f-secure.mobile
-application/vnd.fdf fdf
-application/vnd.fdsn.mseed mseed
-application/vnd.fdsn.seed seed dataless
-# application/vnd.ffsns
-# application/vnd.fints
-application/vnd.flographit gph
-application/vnd.fluxtime.clip ftc
-# application/vnd.font-fontforge-sfd
-application/vnd.framemaker fm frame maker book
-application/vnd.frogans.fnc fnc
-application/vnd.frogans.ltf ltf
-application/vnd.fsc.weblaunch fsc
-application/vnd.fujitsu.oasys oas
-application/vnd.fujitsu.oasys2 oa2
-application/vnd.fujitsu.oasys3 oa3
-application/vnd.fujitsu.oasysgp fg5
-application/vnd.fujitsu.oasysprs bh2
-# application/vnd.fujixerox.art-ex
-# application/vnd.fujixerox.art4
-# application/vnd.fujixerox.hbpl
-application/vnd.fujixerox.ddd ddd
-application/vnd.fujixerox.docuworks xdw
-application/vnd.fujixerox.docuworks.binder xbd
-# application/vnd.fut-misnet
-application/vnd.fuzzysheet fzs
-application/vnd.genomatix.tuxedo txd
-# application/vnd.geocube+xml
-application/vnd.geogebra.file ggb
-application/vnd.geogebra.tool ggt
-application/vnd.geometry-explorer gex gre
-application/vnd.geonext gxt
-application/vnd.geoplan g2w
-application/vnd.geospace g3w
-# application/vnd.globalplatform.card-content-mgt
-# application/vnd.globalplatform.card-content-mgt-response
-application/vnd.gmx gmx
-application/vnd.google-earth.kml+xml kml
-application/vnd.google-earth.kmz kmz
-application/vnd.grafeq gqf gqs
-# application/vnd.gridmp
-application/vnd.groove-account gac
-application/vnd.groove-help ghf
-application/vnd.groove-identity-message gim
-application/vnd.groove-injector grv
-application/vnd.groove-tool-message gtm
-application/vnd.groove-tool-template tpl
-application/vnd.groove-vcard vcg
-# application/vnd.hal+json
-application/vnd.hal+xml hal
-application/vnd.handheld-entertainment+xml zmm
-application/vnd.hbci hbci
-# application/vnd.hcl-bireports
-application/vnd.hhe.lesson-player les
-application/vnd.hp-hpgl hpgl
-application/vnd.hp-hpid hpid
-application/vnd.hp-hps hps
-application/vnd.hp-jlyt jlt
-application/vnd.hp-pcl pcl
-application/vnd.hp-pclxl pclxl
-# application/vnd.httphone
-application/vnd.hydrostatix.sof-data sfd-hdstx
-# application/vnd.hzn-3d-crossword
-# application/vnd.ibm.afplinedata
-# application/vnd.ibm.electronic-media
-application/vnd.ibm.minipay mpy
-application/vnd.ibm.modcap afp listafp list3820
-application/vnd.ibm.rights-management irm
-application/vnd.ibm.secure-container sc
-application/vnd.iccprofile icc icm
-application/vnd.igloader igl
-application/vnd.immervision-ivp ivp
-application/vnd.immervision-ivu ivu
-# application/vnd.informedcontrol.rms+xml
-# application/vnd.informix-visionary
-# application/vnd.infotech.project
-# application/vnd.infotech.project+xml
-# application/vnd.innopath.wamp.notification
-application/vnd.insors.igm igm
-application/vnd.intercon.formnet xpw xpx
-application/vnd.intergeo i2g
-# application/vnd.intertrust.digibox
-# application/vnd.intertrust.nncp
-application/vnd.intu.qbo qbo
-application/vnd.intu.qfx qfx
-# application/vnd.iptc.g2.conceptitem+xml
-# application/vnd.iptc.g2.knowledgeitem+xml
-# application/vnd.iptc.g2.newsitem+xml
-# application/vnd.iptc.g2.newsmessage+xml
-# application/vnd.iptc.g2.packageitem+xml
-# application/vnd.iptc.g2.planningitem+xml
-application/vnd.ipunplugged.rcprofile rcprofile
-application/vnd.irepository.package+xml irp
-application/vnd.is-xpr xpr
-application/vnd.isac.fcs fcs
-application/vnd.jam jam
-# application/vnd.japannet-directory-service
-# application/vnd.japannet-jpnstore-wakeup
-# application/vnd.japannet-payment-wakeup
-# application/vnd.japannet-registration
-# application/vnd.japannet-registration-wakeup
-# application/vnd.japannet-setstore-wakeup
-# application/vnd.japannet-verification
-# application/vnd.japannet-verification-wakeup
-application/vnd.jcp.javame.midlet-rms rms
-application/vnd.jisp jisp
-application/vnd.joost.joda-archive joda
-application/vnd.kahootz ktz ktr
-application/vnd.kde.karbon karbon
-application/vnd.kde.kchart chrt
-application/vnd.kde.kformula kfo
-application/vnd.kde.kivio flw
-application/vnd.kde.kontour kon
-application/vnd.kde.kpresenter kpr kpt
-application/vnd.kde.kspread ksp
-application/vnd.kde.kword kwd kwt
-application/vnd.kenameaapp htke
-application/vnd.kidspiration kia
-application/vnd.kinar kne knp
-application/vnd.koan skp skd skt skm
-application/vnd.kodak-descriptor sse
-application/vnd.las.las+xml lasxml
-# application/vnd.liberty-request+xml
-application/vnd.llamagraphics.life-balance.desktop lbd
-application/vnd.llamagraphics.life-balance.exchange+xml lbe
-application/vnd.lotus-1-2-3 123
-application/vnd.lotus-approach apr
-application/vnd.lotus-freelance pre
-application/vnd.lotus-notes nsf
-application/vnd.lotus-organizer org
-application/vnd.lotus-screencam scm
-application/vnd.lotus-wordpro lwp
-application/vnd.macports.portpkg portpkg
-# application/vnd.marlin.drm.actiontoken+xml
-# application/vnd.marlin.drm.conftoken+xml
-# application/vnd.marlin.drm.license+xml
-# application/vnd.marlin.drm.mdcf
-application/vnd.mcd mcd
-application/vnd.medcalcdata mc1
-application/vnd.mediastation.cdkey cdkey
-# application/vnd.meridian-slingshot
-application/vnd.mfer mwf
-application/vnd.mfmp mfm
-application/vnd.micrografx.flo flo
-application/vnd.micrografx.igx igx
-application/vnd.mif mif
-# application/vnd.minisoft-hp3000-save
-# application/vnd.mitsubishi.misty-guard.trustweb
-application/vnd.mobius.daf daf
-application/vnd.mobius.dis dis
-application/vnd.mobius.mbk mbk
-application/vnd.mobius.mqy mqy
-application/vnd.mobius.msl msl
-application/vnd.mobius.plc plc
-application/vnd.mobius.txf txf
-application/vnd.mophun.application mpn
-application/vnd.mophun.certificate mpc
-# application/vnd.motorola.flexsuite
-# application/vnd.motorola.flexsuite.adsi
-# application/vnd.motorola.flexsuite.fis
-# application/vnd.motorola.flexsuite.gotap
-# application/vnd.motorola.flexsuite.kmr
-# application/vnd.motorola.flexsuite.ttc
-# application/vnd.motorola.flexsuite.wem
-# application/vnd.motorola.iprm
-application/vnd.mozilla.xul+xml xul
-application/vnd.ms-artgalry cil
-# application/vnd.ms-asf
-application/vnd.ms-cab-compressed cab
-# application/vnd.ms-color.iccprofile
-application/vnd.ms-excel xls xlm xla xlc xlt xlw
-application/vnd.ms-excel.addin.macroenabled.12 xlam
-application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb
-application/vnd.ms-excel.sheet.macroenabled.12 xlsm
-application/vnd.ms-excel.template.macroenabled.12 xltm
-application/vnd.ms-fontobject eot
-application/vnd.ms-htmlhelp chm
-application/vnd.ms-ims ims
-application/vnd.ms-lrm lrm
-# application/vnd.ms-office.activex+xml
-application/vnd.ms-officetheme thmx
-# application/vnd.ms-opentype
-# application/vnd.ms-package.obfuscated-opentype
-application/vnd.ms-pki.seccat cat
-application/vnd.ms-pki.stl stl
-# application/vnd.ms-playready.initiator+xml
-application/vnd.ms-powerpoint ppt pps pot
-application/vnd.ms-powerpoint.addin.macroenabled.12 ppam
-application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm
-application/vnd.ms-powerpoint.slide.macroenabled.12 sldm
-application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm
-application/vnd.ms-powerpoint.template.macroenabled.12 potm
-# application/vnd.ms-printing.printticket+xml
-application/vnd.ms-project mpp mpt
-# application/vnd.ms-tnef
-# application/vnd.ms-wmdrm.lic-chlg-req
-# application/vnd.ms-wmdrm.lic-resp
-# application/vnd.ms-wmdrm.meter-chlg-req
-# application/vnd.ms-wmdrm.meter-resp
-application/vnd.ms-word.document.macroenabled.12 docm
-application/vnd.ms-word.template.macroenabled.12 dotm
-application/vnd.ms-works wps wks wcm wdb
-application/vnd.ms-wpl wpl
-application/vnd.ms-xpsdocument xps
-application/vnd.mseq mseq
-# application/vnd.msign
-# application/vnd.multiad.creator
-# application/vnd.multiad.creator.cif
-# application/vnd.music-niff
-application/vnd.musician mus
-application/vnd.muvee.style msty
-application/vnd.mynfc taglet
-# application/vnd.ncd.control
-# application/vnd.ncd.reference
-# application/vnd.nervana
-# application/vnd.netfpx
-application/vnd.neurolanguage.nlu nlu
-application/vnd.nitf ntf nitf
-application/vnd.noblenet-directory nnd
-application/vnd.noblenet-sealer nns
-application/vnd.noblenet-web nnw
-# application/vnd.nokia.catalogs
-# application/vnd.nokia.conml+wbxml
-# application/vnd.nokia.conml+xml
-# application/vnd.nokia.isds-radio-presets
-# application/vnd.nokia.iptv.config+xml
-# application/vnd.nokia.landmark+wbxml
-# application/vnd.nokia.landmark+xml
-# application/vnd.nokia.landmarkcollection+xml
-# application/vnd.nokia.n-gage.ac+xml
-application/vnd.nokia.n-gage.data ngdat
-application/vnd.nokia.n-gage.symbian.install n-gage
-# application/vnd.nokia.ncd
-# application/vnd.nokia.pcd+wbxml
-# application/vnd.nokia.pcd+xml
-application/vnd.nokia.radio-preset rpst
-application/vnd.nokia.radio-presets rpss
-application/vnd.novadigm.edm edm
-application/vnd.novadigm.edx edx
-application/vnd.novadigm.ext ext
-# application/vnd.ntt-local.file-transfer
-# application/vnd.ntt-local.sip-ta_remote
-# application/vnd.ntt-local.sip-ta_tcp_stream
-application/vnd.oasis.opendocument.chart odc
-application/vnd.oasis.opendocument.chart-template otc
-application/vnd.oasis.opendocument.database odb
-application/vnd.oasis.opendocument.formula odf
-application/vnd.oasis.opendocument.formula-template odft
-application/vnd.oasis.opendocument.graphics odg
-application/vnd.oasis.opendocument.graphics-template otg
-application/vnd.oasis.opendocument.image odi
-application/vnd.oasis.opendocument.image-template oti
-application/vnd.oasis.opendocument.presentation odp
-application/vnd.oasis.opendocument.presentation-template otp
-application/vnd.oasis.opendocument.spreadsheet ods
-application/vnd.oasis.opendocument.spreadsheet-template ots
-application/vnd.oasis.opendocument.text odt
-application/vnd.oasis.opendocument.text-master odm
-application/vnd.oasis.opendocument.text-template ott
-application/vnd.oasis.opendocument.text-web oth
-# application/vnd.obn
-# application/vnd.oftn.l10n+json
-# application/vnd.oipf.contentaccessdownload+xml
-# application/vnd.oipf.contentaccessstreaming+xml
-# application/vnd.oipf.cspg-hexbinary
-# application/vnd.oipf.dae.svg+xml
-# application/vnd.oipf.dae.xhtml+xml
-# application/vnd.oipf.mippvcontrolmessage+xml
-# application/vnd.oipf.pae.gem
-# application/vnd.oipf.spdiscovery+xml
-# application/vnd.oipf.spdlist+xml
-# application/vnd.oipf.ueprofile+xml
-# application/vnd.oipf.userprofile+xml
-application/vnd.olpc-sugar xo
-# application/vnd.oma-scws-config
-# application/vnd.oma-scws-http-request
-# application/vnd.oma-scws-http-response
-# application/vnd.oma.bcast.associated-procedure-parameter+xml
-# application/vnd.oma.bcast.drm-trigger+xml
-# application/vnd.oma.bcast.imd+xml
-# application/vnd.oma.bcast.ltkm
-# application/vnd.oma.bcast.notification+xml
-# application/vnd.oma.bcast.provisioningtrigger
-# application/vnd.oma.bcast.sgboot
-# application/vnd.oma.bcast.sgdd+xml
-# application/vnd.oma.bcast.sgdu
-# application/vnd.oma.bcast.simple-symbol-container
-# application/vnd.oma.bcast.smartcard-trigger+xml
-# application/vnd.oma.bcast.sprov+xml
-# application/vnd.oma.bcast.stkm
-# application/vnd.oma.cab-address-book+xml
-# application/vnd.oma.cab-feature-handler+xml
-# application/vnd.oma.cab-pcc+xml
-# application/vnd.oma.cab-user-prefs+xml
-# application/vnd.oma.dcd
-# application/vnd.oma.dcdc
-application/vnd.oma.dd2+xml dd2
-# application/vnd.oma.drm.risd+xml
-# application/vnd.oma.group-usage-list+xml
-# application/vnd.oma.pal+xml
-# application/vnd.oma.poc.detailed-progress-report+xml
-# application/vnd.oma.poc.final-report+xml
-# application/vnd.oma.poc.groups+xml
-# application/vnd.oma.poc.invocation-descriptor+xml
-# application/vnd.oma.poc.optimized-progress-report+xml
-# application/vnd.oma.push
-# application/vnd.oma.scidm.messages+xml
-# application/vnd.oma.xcap-directory+xml
-# application/vnd.omads-email+xml
-# application/vnd.omads-file+xml
-# application/vnd.omads-folder+xml
-# application/vnd.omaloc-supl-init
-application/vnd.openofficeorg.extension oxt
-# application/vnd.openxmlformats-officedocument.custom-properties+xml
-# application/vnd.openxmlformats-officedocument.customxmlproperties+xml
-# application/vnd.openxmlformats-officedocument.drawing+xml
-# application/vnd.openxmlformats-officedocument.drawingml.chart+xml
-# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml
-# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml
-# application/vnd.openxmlformats-officedocument.extended-properties+xml
-# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml
-# application/vnd.openxmlformats-officedocument.presentationml.comments+xml
-# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml
-# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml
-# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml
-application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
-# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
-# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml
-application/vnd.openxmlformats-officedocument.presentationml.slide sldx
-# application/vnd.openxmlformats-officedocument.presentationml.slide+xml
-# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml
-# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml
-application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
-# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
-# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml
-# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml
-# application/vnd.openxmlformats-officedocument.presentationml.tags+xml
-application/vnd.openxmlformats-officedocument.presentationml.template potx
-# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
-# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml
-application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
-# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml
-application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
-# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml
-# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
-# application/vnd.openxmlformats-officedocument.theme+xml
-# application/vnd.openxmlformats-officedocument.themeoverride+xml
-# application/vnd.openxmlformats-officedocument.vmldrawing
-# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml
-application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
-# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml
-application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
-# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
-# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml
-# application/vnd.openxmlformats-package.core-properties+xml
-# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml
-# application/vnd.openxmlformats-package.relationships+xml
-# application/vnd.quobject-quoxdocument
-# application/vnd.osa.netdeploy
-application/vnd.osgeo.mapguide.package mgp
-# application/vnd.osgi.bundle
-application/vnd.osgi.dp dp
-application/vnd.osgi.subsystem esa
-# application/vnd.otps.ct-kip+xml
-application/vnd.palm pdb pqa oprc
-# application/vnd.paos.xml
-application/vnd.pawaafile paw
-application/vnd.pg.format str
-application/vnd.pg.osasli ei6
-# application/vnd.piaccess.application-licence
-application/vnd.picsel efif
-application/vnd.pmi.widget wg
-# application/vnd.poc.group-advertisement+xml
-application/vnd.pocketlearn plf
-application/vnd.powerbuilder6 pbd
-# application/vnd.powerbuilder6-s
-# application/vnd.powerbuilder7
-# application/vnd.powerbuilder7-s
-# application/vnd.powerbuilder75
-# application/vnd.powerbuilder75-s
-# application/vnd.preminet
-application/vnd.previewsystems.box box
-application/vnd.proteus.magazine mgz
-application/vnd.publishare-delta-tree qps
-application/vnd.pvi.ptid1 ptid
-# application/vnd.pwg-multiplexed
-# application/vnd.pwg-xhtml-print+xml
-# application/vnd.qualcomm.brew-app-res
-application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb
-# application/vnd.radisys.moml+xml
-# application/vnd.radisys.msml+xml
-# application/vnd.radisys.msml-audit+xml
-# application/vnd.radisys.msml-audit-conf+xml
-# application/vnd.radisys.msml-audit-conn+xml
-# application/vnd.radisys.msml-audit-dialog+xml
-# application/vnd.radisys.msml-audit-stream+xml
-# application/vnd.radisys.msml-conf+xml
-# application/vnd.radisys.msml-dialog+xml
-# application/vnd.radisys.msml-dialog-base+xml
-# application/vnd.radisys.msml-dialog-fax-detect+xml
-# application/vnd.radisys.msml-dialog-fax-sendrecv+xml
-# application/vnd.radisys.msml-dialog-group+xml
-# application/vnd.radisys.msml-dialog-speech+xml
-# application/vnd.radisys.msml-dialog-transform+xml
-# application/vnd.rainstor.data
-# application/vnd.rapid
-application/vnd.realvnc.bed bed
-application/vnd.recordare.musicxml mxl
-application/vnd.recordare.musicxml+xml musicxml
-# application/vnd.renlearn.rlprint
-application/vnd.rig.cryptonote cryptonote
-application/vnd.rim.cod cod
-application/vnd.rn-realmedia rm
-application/vnd.rn-realmedia-vbr rmvb
-application/vnd.route66.link66+xml link66
-# application/vnd.rs-274x
-# application/vnd.ruckus.download
-# application/vnd.s3sms
-application/vnd.sailingtracker.track st
-# application/vnd.sbm.cid
-# application/vnd.sbm.mid2
-# application/vnd.scribus
-# application/vnd.sealed.3df
-# application/vnd.sealed.csf
-# application/vnd.sealed.doc
-# application/vnd.sealed.eml
-# application/vnd.sealed.mht
-# application/vnd.sealed.net
-# application/vnd.sealed.ppt
-# application/vnd.sealed.tiff
-# application/vnd.sealed.xls
-# application/vnd.sealedmedia.softseal.html
-# application/vnd.sealedmedia.softseal.pdf
-application/vnd.seemail see
-application/vnd.sema sema
-application/vnd.semd semd
-application/vnd.semf semf
-application/vnd.shana.informed.formdata ifm
-application/vnd.shana.informed.formtemplate itp
-application/vnd.shana.informed.interchange iif
-application/vnd.shana.informed.package ipk
-application/vnd.simtech-mindmapper twd twds
-application/vnd.smaf mmf
-# application/vnd.smart.notebook
-application/vnd.smart.teacher teacher
-# application/vnd.software602.filler.form+xml
-# application/vnd.software602.filler.form-xml-zip
-application/vnd.solent.sdkm+xml sdkm sdkd
-application/vnd.spotfire.dxp dxp
-application/vnd.spotfire.sfs sfs
-# application/vnd.sss-cod
-# application/vnd.sss-dtf
-# application/vnd.sss-ntf
-application/vnd.stardivision.calc sdc
-application/vnd.stardivision.draw sda
-application/vnd.stardivision.impress sdd
-application/vnd.stardivision.math smf
-application/vnd.stardivision.writer sdw vor
-application/vnd.stardivision.writer-global sgl
-application/vnd.stepmania.package smzip
-application/vnd.stepmania.stepchart sm
-# application/vnd.street-stream
-application/vnd.sun.xml.calc sxc
-application/vnd.sun.xml.calc.template stc
-application/vnd.sun.xml.draw sxd
-application/vnd.sun.xml.draw.template std
-application/vnd.sun.xml.impress sxi
-application/vnd.sun.xml.impress.template sti
-application/vnd.sun.xml.math sxm
-application/vnd.sun.xml.writer sxw
-application/vnd.sun.xml.writer.global sxg
-application/vnd.sun.xml.writer.template stw
-# application/vnd.sun.wadl+xml
-application/vnd.sus-calendar sus susp
-application/vnd.svd svd
-# application/vnd.swiftview-ics
-application/vnd.symbian.install sis sisx
-application/vnd.syncml+xml xsm
-application/vnd.syncml.dm+wbxml bdm
-application/vnd.syncml.dm+xml xdm
-# application/vnd.syncml.dm.notification
-# application/vnd.syncml.ds.notification
-application/vnd.tao.intent-module-archive tao
-application/vnd.tcpdump.pcap pcap cap dmp
-application/vnd.tmobile-livetv tmo
-application/vnd.trid.tpt tpt
-application/vnd.triscape.mxs mxs
-application/vnd.trueapp tra
-# application/vnd.truedoc
-# application/vnd.ubisoft.webplayer
-application/vnd.ufdl ufd ufdl
-application/vnd.uiq.theme utz
-application/vnd.umajin umj
-application/vnd.unity unityweb
-application/vnd.uoml+xml uoml
-# application/vnd.uplanet.alert
-# application/vnd.uplanet.alert-wbxml
-# application/vnd.uplanet.bearer-choice
-# application/vnd.uplanet.bearer-choice-wbxml
-# application/vnd.uplanet.cacheop
-# application/vnd.uplanet.cacheop-wbxml
-# application/vnd.uplanet.channel
-# application/vnd.uplanet.channel-wbxml
-# application/vnd.uplanet.list
-# application/vnd.uplanet.list-wbxml
-# application/vnd.uplanet.listcmd
-# application/vnd.uplanet.listcmd-wbxml
-# application/vnd.uplanet.signal
-application/vnd.vcx vcx
-# application/vnd.vd-study
-# application/vnd.vectorworks
-# application/vnd.verimatrix.vcas
-# application/vnd.vidsoft.vidconference
-application/vnd.visio vsd vst vss vsw
-application/vnd.visionary vis
-# application/vnd.vividence.scriptfile
-application/vnd.vsf vsf
-# application/vnd.wap.sic
-# application/vnd.wap.slc
-application/vnd.wap.wbxml wbxml
-application/vnd.wap.wmlc wmlc
-application/vnd.wap.wmlscriptc wmlsc
-application/vnd.webturbo wtb
-# application/vnd.wfa.wsc
-# application/vnd.wmc
-# application/vnd.wmf.bootstrap
-# application/vnd.wolfram.mathematica
-# application/vnd.wolfram.mathematica.package
-application/vnd.wolfram.player nbp
-application/vnd.wordperfect wpd
-application/vnd.wqd wqd
-# application/vnd.wrq-hp3000-labelled
-application/vnd.wt.stf stf
-# application/vnd.wv.csp+wbxml
-# application/vnd.wv.csp+xml
-# application/vnd.wv.ssp+xml
-application/vnd.xara xar
-application/vnd.xfdl xfdl
-# application/vnd.xfdl.webform
-# application/vnd.xmi+xml
-# application/vnd.xmpie.cpkg
-# application/vnd.xmpie.dpkg
-# application/vnd.xmpie.plan
-# application/vnd.xmpie.ppkg
-# application/vnd.xmpie.xlim
-application/vnd.yamaha.hv-dic hvd
-application/vnd.yamaha.hv-script hvs
-application/vnd.yamaha.hv-voice hvp
-application/vnd.yamaha.openscoreformat osf
-application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg
-# application/vnd.yamaha.remote-setup
-application/vnd.yamaha.smaf-audio saf
-application/vnd.yamaha.smaf-phrase spf
-# application/vnd.yamaha.through-ngn
-# application/vnd.yamaha.tunnel-udpencap
-application/vnd.yellowriver-custom-menu cmp
-application/vnd.zul zir zirz
-application/vnd.zzazz.deck+xml zaz
-application/voicexml+xml vxml
-# application/vq-rtcpxr
-# application/watcherinfo+xml
-# application/whoispp-query
-# application/whoispp-response
-application/widget wgt
-application/winhlp hlp
-# application/wita
-# application/wordperfect5.1
-application/wsdl+xml wsdl
-application/wspolicy+xml wspolicy
-application/x-7z-compressed 7z
-application/x-abiword abw
-application/x-ace-compressed ace
-# application/x-amf
-application/x-apple-diskimage dmg
-application/x-authorware-bin aab x32 u32 vox
-application/x-authorware-map aam
-application/x-authorware-seg aas
-application/x-bcpio bcpio
-application/x-bittorrent torrent
-application/x-blorb blb blorb
-application/x-bzip bz
-application/x-bzip2 bz2 boz
-application/x-cbr cbr cba cbt cbz cb7
-application/x-cdlink vcd
-application/x-cfs-compressed cfs
-application/x-chat chat
-application/x-chess-pgn pgn
-application/x-conference nsc
-# application/x-compress
-application/x-cpio cpio
-application/x-csh csh
-application/x-debian-package deb udeb
-application/x-dgc-compressed dgc
-application/x-director dir dcr dxr cst cct cxt w3d fgd swa
-application/x-doom wad
-application/x-dtbncx+xml ncx
-application/x-dtbook+xml dtb
-application/x-dtbresource+xml res
-application/x-dvi dvi
-application/x-envoy evy
-application/x-eva eva
-application/x-font-bdf bdf
-# application/x-font-dos
-# application/x-font-framemaker
-application/x-font-ghostscript gsf
-# application/x-font-libgrx
-application/x-font-linux-psf psf
-application/x-font-otf otf
-application/x-font-pcf pcf
-application/x-font-snf snf
-# application/x-font-speedo
-# application/x-font-sunos-news
-application/x-font-ttf ttf ttc
-application/x-font-type1 pfa pfb pfm afm
-application/font-woff woff
-# application/x-font-vfont
-application/x-freearc arc
-application/x-futuresplash spl
-application/x-gca-compressed gca
-application/x-glulx ulx
-application/x-gnumeric gnumeric
-application/x-gramps-xml gramps
-application/x-gtar gtar
-# application/x-gzip
-application/x-hdf hdf
-application/x-install-instructions install
-application/x-iso9660-image iso
-application/x-java-jnlp-file jnlp
-application/x-latex latex
-application/x-lzh-compressed lzh lha
-application/x-mie mie
-application/x-mobipocket-ebook prc mobi
-application/x-ms-application application
-application/x-ms-shortcut lnk
-application/x-ms-wmd wmd
-application/x-ms-wmz wmz
-application/x-ms-xbap xbap
-application/x-msaccess mdb
-application/x-msbinder obd
-application/x-mscardfile crd
-application/x-msclip clp
-application/x-msdownload exe dll com bat msi
-application/x-msmediaview mvb m13 m14
-application/x-msmetafile wmf wmz emf emz
-application/x-msmoney mny
-application/x-mspublisher pub
-application/x-msschedule scd
-application/x-msterminal trm
-application/x-mswrite wri
-application/x-netcdf nc cdf
-application/x-nzb nzb
-application/x-pkcs12 p12 pfx
-application/x-pkcs7-certificates p7b spc
-application/x-pkcs7-certreqresp p7r
-application/x-rar-compressed rar
-application/x-research-info-systems ris
-application/x-sh sh
-application/x-shar shar
-application/x-shockwave-flash swf
-application/x-silverlight-app xap
-application/x-sql sql
-application/x-stuffit sit
-application/x-stuffitx sitx
-application/x-subrip srt
-application/x-sv4cpio sv4cpio
-application/x-sv4crc sv4crc
-application/x-t3vm-image t3
-application/x-tads gam
-application/x-tar tar
-application/x-tcl tcl
-application/x-tex tex
-application/x-tex-tfm tfm
-application/x-texinfo texinfo texi
-application/x-tgif obj
-application/x-ustar ustar
-application/x-wais-source src
-application/x-x509-ca-cert der crt
-application/x-xfig fig
-application/x-xliff+xml xlf
-application/x-xpinstall xpi
-application/x-xz xz
-application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8
-# application/x400-bp
-application/xaml+xml xaml
-# application/xcap-att+xml
-# application/xcap-caps+xml
-application/xcap-diff+xml xdf
-# application/xcap-el+xml
-# application/xcap-error+xml
-# application/xcap-ns+xml
-# application/xcon-conference-info-diff+xml
-# application/xcon-conference-info+xml
-application/xenc+xml xenc
-application/xhtml+xml xhtml xht
-# application/xhtml-voice+xml
-application/xml xml xsl
-application/xml-dtd dtd
-# application/xml-external-parsed-entity
-# application/xmpp+xml
-application/xop+xml xop
-application/xproc+xml xpl
-application/xslt+xml xslt
-application/xspf+xml xspf
-application/xv+xml mxml xhvml xvml xvm
-application/yang yang
-application/yin+xml yin
-application/zip zip
-# audio/1d-interleaved-parityfec
-# audio/32kadpcm
-# audio/3gpp
-# audio/3gpp2
-# audio/ac3
-audio/adpcm adp
-# audio/amr
-# audio/amr-wb
-# audio/amr-wb+
-# audio/asc
-# audio/atrac-advanced-lossless
-# audio/atrac-x
-# audio/atrac3
-audio/basic au snd
-# audio/bv16
-# audio/bv32
-# audio/clearmode
-# audio/cn
-# audio/dat12
-# audio/dls
-# audio/dsr-es201108
-# audio/dsr-es202050
-# audio/dsr-es202211
-# audio/dsr-es202212
-# audio/dv
-# audio/dvi4
-# audio/eac3
-# audio/evrc
-# audio/evrc-qcp
-# audio/evrc0
-# audio/evrc1
-# audio/evrcb
-# audio/evrcb0
-# audio/evrcb1
-# audio/evrcwb
-# audio/evrcwb0
-# audio/evrcwb1
-# audio/example
-# audio/fwdred
-# audio/g719
-# audio/g722
-# audio/g7221
-# audio/g723
-# audio/g726-16
-# audio/g726-24
-# audio/g726-32
-# audio/g726-40
-# audio/g728
-# audio/g729
-# audio/g7291
-# audio/g729d
-# audio/g729e
-# audio/gsm
-# audio/gsm-efr
-# audio/gsm-hr-08
-# audio/ilbc
-# audio/ip-mr_v2.5
-# audio/isac
-# audio/l16
-# audio/l20
-# audio/l24
-# audio/l8
-# audio/lpc
-audio/midi mid midi kar rmi
-# audio/mobile-xmf
-audio/mp4 mp4a
-# audio/mp4a-latm
-# audio/mpa
-# audio/mpa-robust
-audio/mpeg mpga mp2 mp2a mp3 m2a m3a
-# audio/mpeg4-generic
-# audio/musepack
-audio/ogg oga ogg spx
-# audio/opus
-# audio/parityfec
-# audio/pcma
-# audio/pcma-wb
-# audio/pcmu-wb
-# audio/pcmu
-# audio/prs.sid
-# audio/qcelp
-# audio/red
-# audio/rtp-enc-aescm128
-# audio/rtp-midi
-# audio/rtx
-audio/s3m s3m
-audio/silk sil
-# audio/smv
-# audio/smv0
-# audio/smv-qcp
-# audio/sp-midi
-# audio/speex
-# audio/t140c
-# audio/t38
-# audio/telephone-event
-# audio/tone
-# audio/uemclip
-# audio/ulpfec
-# audio/vdvi
-# audio/vmr-wb
-# audio/vnd.3gpp.iufp
-# audio/vnd.4sb
-# audio/vnd.audiokoz
-# audio/vnd.celp
-# audio/vnd.cisco.nse
-# audio/vnd.cmles.radio-events
-# audio/vnd.cns.anp1
-# audio/vnd.cns.inf1
-audio/vnd.dece.audio uva uvva
-audio/vnd.digital-winds eol
-# audio/vnd.dlna.adts
-# audio/vnd.dolby.heaac.1
-# audio/vnd.dolby.heaac.2
-# audio/vnd.dolby.mlp
-# audio/vnd.dolby.mps
-# audio/vnd.dolby.pl2
-# audio/vnd.dolby.pl2x
-# audio/vnd.dolby.pl2z
-# audio/vnd.dolby.pulse.1
-audio/vnd.dra dra
-audio/vnd.dts dts
-audio/vnd.dts.hd dtshd
-# audio/vnd.dvb.file
-# audio/vnd.everad.plj
-# audio/vnd.hns.audio
-audio/vnd.lucent.voice lvp
-audio/vnd.ms-playready.media.pya pya
-# audio/vnd.nokia.mobile-xmf
-# audio/vnd.nortel.vbk
-audio/vnd.nuera.ecelp4800 ecelp4800
-audio/vnd.nuera.ecelp7470 ecelp7470
-audio/vnd.nuera.ecelp9600 ecelp9600
-# audio/vnd.octel.sbc
-# audio/vnd.qcelp
-# audio/vnd.rhetorex.32kadpcm
-audio/vnd.rip rip
-# audio/vnd.sealedmedia.softseal.mpeg
-# audio/vnd.vmx.cvsd
-# audio/vorbis
-# audio/vorbis-config
-audio/webm weba
-audio/x-aac aac
-audio/x-aiff aif aiff aifc
-audio/x-caf caf
-audio/x-flac flac
-audio/x-matroska mka
-audio/x-mpegurl m3u
-audio/x-ms-wax wax
-audio/x-ms-wma wma
-audio/x-pn-realaudio ram ra
-audio/x-pn-realaudio-plugin rmp
-# audio/x-tta
-audio/x-wav wav
-audio/xm xm
-chemical/x-cdx cdx
-chemical/x-cif cif
-chemical/x-cmdf cmdf
-chemical/x-cml cml
-chemical/x-csml csml
-# chemical/x-pdb
-chemical/x-xyz xyz
-image/bmp bmp
-image/cgm cgm
-# image/example
-# image/fits
-image/g3fax g3
-image/gif gif
-image/ief ief
-# image/jp2
-image/jpeg jpeg jpg jpe
-# image/jpm
-# image/jpx
-image/ktx ktx
-# image/naplps
-image/png png
-image/prs.btif btif
-# image/prs.pti
-image/sgi sgi
-image/svg+xml svg svgz
-# image/t38
-image/tiff tiff tif
-# image/tiff-fx
-image/vnd.adobe.photoshop psd
-# image/vnd.cns.inf2
-image/vnd.dece.graphic uvi uvvi uvg uvvg
-image/vnd.dvb.subtitle sub
-image/vnd.djvu djvu djv
-image/vnd.dwg dwg
-image/vnd.dxf dxf
-image/vnd.fastbidsheet fbs
-image/vnd.fpx fpx
-image/vnd.fst fst
-image/vnd.fujixerox.edmics-mmr mmr
-image/vnd.fujixerox.edmics-rlc rlc
-# image/vnd.globalgraphics.pgb
-# image/vnd.microsoft.icon
-# image/vnd.mix
-image/vnd.ms-modi mdi
-image/vnd.ms-photo wdp
-image/vnd.net-fpx npx
-# image/vnd.radiance
-# image/vnd.sealed.png
-# image/vnd.sealedmedia.softseal.gif
-# image/vnd.sealedmedia.softseal.jpg
-# image/vnd.svf
-image/vnd.wap.wbmp wbmp
-image/vnd.xiff xif
-image/webp webp
-image/x-3ds 3ds
-image/x-cmu-raster ras
-image/x-cmx cmx
-image/x-freehand fh fhc fh4 fh5 fh7
-image/x-icon ico
-image/x-mrsid-image sid
-image/x-pcx pcx
-image/x-pict pic pct
-image/x-portable-anymap pnm
-image/x-portable-bitmap pbm
-image/x-portable-graymap pgm
-image/x-portable-pixmap ppm
-image/x-rgb rgb
-image/x-tga tga
-image/x-xbitmap xbm
-image/x-xpixmap xpm
-image/x-xwindowdump xwd
-# message/cpim
-# message/delivery-status
-# message/disposition-notification
-# message/example
-# message/external-body
-# message/feedback-report
-# message/global
-# message/global-delivery-status
-# message/global-disposition-notification
-# message/global-headers
-# message/http
-# message/imdn+xml
-# message/news
-# message/partial
-message/rfc822 eml mime
-# message/s-http
-# message/sip
-# message/sipfrag
-# message/tracking-status
-# message/vnd.si.simp
-# model/example
-model/iges igs iges
-model/mesh msh mesh silo
-model/vnd.collada+xml dae
-model/vnd.dwf dwf
-# model/vnd.flatland.3dml
-model/vnd.gdl gdl
-# model/vnd.gs-gdl
-# model/vnd.gs.gdl
-model/vnd.gtw gtw
-# model/vnd.moml+xml
-model/vnd.mts mts
-# model/vnd.parasolid.transmit.binary
-# model/vnd.parasolid.transmit.text
-model/vnd.vtu vtu
-model/vrml wrl vrml
-model/x3d+binary x3db x3dbz
-model/x3d+vrml x3dv x3dvz
-model/x3d+xml x3d x3dz
-# multipart/alternative
-# multipart/appledouble
-# multipart/byteranges
-# multipart/digest
-# multipart/encrypted
-# multipart/example
-# multipart/form-data
-# multipart/header-set
-# multipart/mixed
-# multipart/parallel
-# multipart/related
-# multipart/report
-# multipart/signed
-# multipart/voice-message
-# text/1d-interleaved-parityfec
-text/cache-manifest appcache
-text/calendar ics ifb
-text/css css
-text/csv csv
-# text/directory
-# text/dns
-# text/ecmascript
-# text/enriched
-# text/example
-# text/fwdred
-text/html html htm
-# text/javascript
-text/n3 n3
-# text/parityfec
-text/plain txt text conf def list log in
-# text/prs.fallenstein.rst
-text/prs.lines.tag dsc
-# text/vnd.radisys.msml-basic-layout
-# text/red
-# text/rfc822-headers
-text/richtext rtx
-# text/rtf
-# text/rtp-enc-aescm128
-# text/rtx
-text/sgml sgml sgm
-# text/t140
-text/tab-separated-values tsv
-text/troff t tr roff man me ms
-text/turtle ttl
-# text/ulpfec
-text/uri-list uri uris urls
-text/vcard vcard
-# text/vnd.abc
-text/vnd.curl curl
-text/vnd.curl.dcurl dcurl
-text/vnd.curl.scurl scurl
-text/vnd.curl.mcurl mcurl
-# text/vnd.dmclientscript
-text/vnd.dvb.subtitle sub
-# text/vnd.esmertec.theme-descriptor
-text/vnd.fly fly
-text/vnd.fmi.flexstor flx
-text/vnd.graphviz gv
-text/vnd.in3d.3dml 3dml
-text/vnd.in3d.spot spot
-# text/vnd.iptc.newsml
-# text/vnd.iptc.nitf
-# text/vnd.latex-z
-# text/vnd.motorola.reflex
-# text/vnd.ms-mediapackage
-# text/vnd.net2phone.commcenter.command
-# text/vnd.si.uricatalogue
-text/vnd.sun.j2me.app-descriptor jad
-# text/vnd.trolltech.linguist
-# text/vnd.wap.si
-# text/vnd.wap.sl
-text/vnd.wap.wml wml
-text/vnd.wap.wmlscript wmls
-text/x-asm s asm
-text/x-c c cc cxx cpp h hh dic
-text/x-fortran f for f77 f90
-text/x-java-source java
-text/x-opml opml
-text/x-pascal p pas
-text/x-nfo nfo
-text/x-setext etx
-text/x-sfv sfv
-text/x-uuencode uu
-text/x-vcalendar vcs
-text/x-vcard vcf
-# text/xml
-# text/xml-external-parsed-entity
-# video/1d-interleaved-parityfec
-video/3gpp 3gp
-# video/3gpp-tt
-video/3gpp2 3g2
-# video/bmpeg
-# video/bt656
-# video/celb
-# video/dv
-# video/example
-video/h261 h261
-video/h263 h263
-# video/h263-1998
-# video/h263-2000
-video/h264 h264
-# video/h264-rcdo
-# video/h264-svc
-video/jpeg jpgv
-# video/jpeg2000
-video/jpm jpm jpgm
-video/mj2 mj2 mjp2
-# video/mp1s
-# video/mp2p
-# video/mp2t
-video/mp4 mp4 mp4v mpg4
-# video/mp4v-es
-video/mpeg mpeg mpg mpe m1v m2v
-# video/mpeg4-generic
-# video/mpv
-# video/nv
-video/ogg ogv
-# video/parityfec
-# video/pointer
-video/quicktime qt mov
-# video/raw
-# video/rtp-enc-aescm128
-# video/rtx
-# video/smpte292m
-# video/ulpfec
-# video/vc1
-# video/vnd.cctv
-video/vnd.dece.hd uvh uvvh
-video/vnd.dece.mobile uvm uvvm
-# video/vnd.dece.mp4
-video/vnd.dece.pd uvp uvvp
-video/vnd.dece.sd uvs uvvs
-video/vnd.dece.video uvv uvvv
-# video/vnd.directv.mpeg
-# video/vnd.directv.mpeg-tts
-# video/vnd.dlna.mpeg-tts
-video/vnd.dvb.file dvb
-video/vnd.fvt fvt
-# video/vnd.hns.video
-# video/vnd.iptvforum.1dparityfec-1010
-# video/vnd.iptvforum.1dparityfec-2005
-# video/vnd.iptvforum.2dparityfec-1010
-# video/vnd.iptvforum.2dparityfec-2005
-# video/vnd.iptvforum.ttsavc
-# video/vnd.iptvforum.ttsmpeg2
-# video/vnd.motorola.video
-# video/vnd.motorola.videop
-video/vnd.mpegurl mxu m4u
-video/vnd.ms-playready.media.pyv pyv
-# video/vnd.nokia.interleaved-multimedia
-# video/vnd.nokia.videovoip
-# video/vnd.objectvideo
-# video/vnd.sealed.mpeg1
-# video/vnd.sealed.mpeg4
-# video/vnd.sealed.swf
-# video/vnd.sealedmedia.softseal.mov
-video/vnd.uvvu.mp4 uvu uvvu
-video/vnd.vivo viv
-video/webm webm
-video/x-f4v f4v
-video/x-fli fli
-video/x-flv flv
-video/x-m4v m4v
-video/x-matroska mkv mk3d mks
-video/x-mng mng
-video/x-ms-asf asf asx
-video/x-ms-vob vob
-video/x-ms-wm wm
-video/x-ms-wmv wmv
-video/x-ms-wmx wmx
-video/x-ms-wvx wvx
-video/x-msvideo avi
-video/x-sgi-movie movie
-video/x-smv smv
-x-conference/x-cooltalk ice
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/node.types b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/node.types
deleted file mode 100644
index 55b2cf794..000000000
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/types/node.types
+++ /dev/null
@@ -1,77 +0,0 @@
-# What: WebVTT
-# Why: To allow formats intended for marking up external text track resources.
-# http://dev.w3.org/html5/webvtt/
-# Added by: niftylettuce
-text/vtt vtt
-
-# What: Google Chrome Extension
-# Why: To allow apps to (work) be served with the right content type header.
-# http://codereview.chromium.org/2830017
-# Added by: niftylettuce
-application/x-chrome-extension crx
-
-# What: HTC support
-# Why: To properly render .htc files such as CSS3PIE
-# Added by: niftylettuce
-text/x-component htc
-
-# What: HTML5 application cache manifes ('.manifest' extension)
-# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps
-# per https://developer.mozilla.org/en/offline_resources_in_firefox
-# Added by: louisremi
-text/cache-manifest manifest
-
-# What: node binary buffer format
-# Why: semi-standard extension w/in the node community
-# Added by: tootallnate
-application/octet-stream buffer
-
-# What: The "protected" MP-4 formats used by iTunes.
-# Why: Required for streaming music to browsers (?)
-# Added by: broofa
-application/mp4 m4p
-audio/mp4 m4a
-
-# What: Video format, Part of RFC1890
-# Why: See https://github.com/bentomas/node-mime/pull/6
-# Added by: mjrusso
-video/MP2T ts
-
-# What: EventSource mime type
-# Why: mime type of Server-Sent Events stream
-# http://www.w3.org/TR/eventsource/#text-event-stream
-# Added by: francois2metz
-text/event-stream event-stream
-
-# What: Mozilla App manifest mime type
-# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests
-# Added by: ednapiranha
-application/x-web-app-manifest+json webapp
-
-# What: Lua file types
-# Why: Googling around shows de-facto consensus on these
-# Added by: creationix (Issue #45)
-text/x-lua lua
-application/x-lua-bytecode luac
-
-# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax
-# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown
-# Added by: avoidwork
-text/x-markdown markdown md mkd
-
-# What: ini files
-# Why: because they're just text files
-# Added by: Matthew Kastor
-text/plain ini
-
-# What: DASH Adaptive Streaming manifest
-# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video
-# Added by: eelcocramer
-application/dash+xml mdp
-
-# What: OpenType font files - http://www.microsoft.com/typography/otspec/
-# Why: Browsers usually ignore the font MIME types and sniff the content,
-# but Chrome, shows a warning if OpenType fonts aren't served with
-# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png.
-# Added by: alrra
-font/opentype otf
diff --git a/deps/npm/node_modules/request/node_modules/form-data/package.json b/deps/npm/node_modules/request/node_modules/form-data/package.json
index 7700d9992..7f1adae96 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/package.json
@@ -6,7 +6,7 @@
},
"name": "form-data",
"description": "A module to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.",
- "version": "0.1.4",
+ "version": "0.2.0",
"repository": {
"type": "git",
"url": "git://github.com/felixge/node-form-data.git"
@@ -19,9 +19,9 @@
"node": ">= 0.8"
},
"dependencies": {
+ "async": "~0.9.0",
"combined-stream": "~0.0.4",
- "mime": "~1.2.11",
- "async": "~0.9.0"
+ "mime-types": "~2.0.3"
},
"licenses": [
{
@@ -35,15 +35,15 @@
"formidable": "~1.0.14",
"request": "~2.36.0"
},
- "gitHead": "5f5f4809ea685f32658809fa0f13d7eface0e45a",
+ "gitHead": "dfc1a2aef40b97807e2ffe477da06cb2c37e259f",
"bugs": {
"url": "https://github.com/felixge/node-form-data/issues"
},
"homepage": "https://github.com/felixge/node-form-data",
- "_id": "form-data@0.1.4",
- "_shasum": "91abd788aba9702b1aabfa8bc01031a2ac9e3b12",
- "_from": "form-data@>=0.1.0 <0.2.0",
- "_npmVersion": "1.4.14",
+ "_id": "form-data@0.2.0",
+ "_shasum": "26f8bc26da6440e299cbdcfb69035c4f77a6e466",
+ "_from": "form-data@>=0.2.0 <0.3.0",
+ "_npmVersion": "1.4.28",
"_npmUser": {
"name": "alexindigo",
"email": "iam@alexindigo.com"
@@ -71,10 +71,10 @@
}
],
"dist": {
- "shasum": "91abd788aba9702b1aabfa8bc01031a2ac9e3b12",
- "tarball": "http://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz"
+ "shasum": "26f8bc26da6440e299cbdcfb69035c4f77a6e466",
+ "tarball": "http://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
+ "_resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
index 8c68193cd..abd8125af 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
@@ -32,32 +32,14 @@
"pretest": "which gjslint; if [[ \"$?\" = 0 ]] ; then gjslint --nojsdoc -r lib -r tst; else echo \"Missing gjslint. Skipping lint\"; fi",
"test": "tap ./tst"
},
- "_npmUser": {
- "name": "mcavage",
- "email": "mcavage@gmail.com"
+ "readme": "node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS.\nCurrently BER encoding is supported; at some point I'll likely have to do DER.\n\n## Usage\n\nMostly, if you're *actually* needing to read and write ASN.1, you probably don't\nneed this readme to explain what and why. If you have no idea what ASN.1 is,\nsee this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nThe source is pretty much self-explanatory, and has read/write methods for the\ncommon types out there.\n\n### Decoding\n\nThe following reads an ASN.1 sequence with a boolean.\n\n var Ber = require('asn1').Ber;\n\n var reader = new Ber.Reader(new Buffer([0x30, 0x03, 0x01, 0x01, 0xff]));\n\n reader.readSequence();\n console.log('Sequence len: ' + reader.length);\n if (reader.peek() === Ber.Boolean)\n console.log(reader.readBoolean());\n\n### Encoding\n\nThe following generates the same payload as above.\n\n var Ber = require('asn1').Ber;\n\n var writer = new Ber.Writer();\n\n writer.startSequence();\n writer.writeBoolean(true);\n writer.endSequence();\n\n console.log(writer.buffer);\n\n## Installation\n\n npm install asn1\n\n## License\n\nMIT.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-asn1/issues>.\n",
+ "readmeFilename": "README.md",
+ "bugs": {
+ "url": "https://github.com/mcavage/node-asn1/issues"
},
+ "homepage": "https://github.com/mcavage/node-asn1",
"_id": "asn1@0.1.11",
- "_engineSupported": true,
- "_npmVersion": "1.1.0-beta-4",
- "_nodeVersion": "v0.6.6",
- "_defaultsLoaded": true,
- "dist": {
- "shasum": "559be18376d08a4ec4dbe80877d27818639b2df7",
- "tarball": "http://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
- },
- "maintainers": [
- {
- "name": "mcavage",
- "email": "mcavage@gmail.com"
- }
- ],
- "directories": {},
"_shasum": "559be18376d08a4ec4dbe80877d27818639b2df7",
"_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
- "_from": "asn1@0.1.11",
- "bugs": {
- "url": "https://github.com/mcavage/node-asn1/issues"
- },
- "readme": "ERROR: No README data found!",
- "homepage": "https://github.com/mcavage/node-asn1"
+ "_from": "asn1@0.1.11"
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json
index d06cbfd73..99d9d48ab 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json
@@ -13,26 +13,11 @@
"engines": {
"node": ">=0.6"
},
+ "readme": "# node-assert-plus\n\nThis library is a super small wrapper over node's assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require('assert-plus');\n\n function fooAccount(options, callback) {\n\t assert.object(options, 'options');\n\t\tassert.number(options.id, 'options.id);\n\t\tassert.bool(options.isManager, 'options.isManager');\n\t\tassert.string(options.name, 'options.name');\n\t\tassert.arrayOfString(options.email, 'options.email');\n\t\tassert.func(callback, 'callback');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren't* part of node's core assert API are simply assumed to\ntake an argument, and then a string 'name' that's not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, 'foo');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, 'foo');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, 'foo');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don't want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\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 of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject 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\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n",
+ "readmeFilename": "README.md",
"_id": "assert-plus@0.1.2",
- "dist": {
- "shasum": "d93ffdbb67ac5507779be316a7d65146417beef8",
- "tarball": "http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
- },
- "_npmVersion": "1.1.59",
- "_npmUser": {
- "name": "mcavage",
- "email": "mcavage@gmail.com"
- },
- "maintainers": [
- {
- "name": "mcavage",
- "email": "mcavage@gmail.com"
- }
- ],
- "directories": {},
"_shasum": "d93ffdbb67ac5507779be316a7d65146417beef8",
"_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz",
"_from": "assert-plus@0.1.2",
- "readme": "ERROR: No README data found!",
"scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md b/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md
index f039427fa..652609b37 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/LICENSE.md
@@ -1,2 +1,21 @@
-Copyright (c) 2010-2012 Robert Kieffer
-MIT License - http://opensource.org/licenses/mit-license.php
+The MIT License (MIT)
+
+Copyright (c) 2010-2012 Robert Kieffer
+
+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/request/node_modules/node-uuid/README.md b/deps/npm/node_modules/request/node_modules/node-uuid/README.md
index e436a89f8..b7d04c940 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/README.md
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/README.md
@@ -10,6 +10,7 @@ Features:
* Cryptographically strong random # generation on supporting platforms
* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )
* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)
+* Comes with a Command Line Interface for generating uuids on the command line
## Getting Started
@@ -160,13 +161,48 @@ uuid() has become uuid.v4(), and the `format` argument is now implicit in the `b
The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.
+## Command Line Interface
+
+To use the executable, it's probably best to install this library globally.
+
+`npm install -g node-uuid`
+
+Usage:
+
+```
+USAGE: uuid [version] [options]
+
+
+options:
+
+--help Display this message and exit
+```
+
+`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied.
+
+### Examples
+
+```
+> uuid
+3a91f950-dec8-4688-ba14-5b7bbfc7a563
+```
+
+```
+> uuid v1
+9d0b43e0-7696-11e3-964b-250efa37a98e
+```
+
+```
+> uuid v4
+6790ac7c-24ac-4f98-8464-42f6d98a53ae
+```
+
## Testing
In node.js
```
-> cd test
-> node test.js
+npm test
```
In Browser
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/bin/uuid b/deps/npm/node_modules/request/node_modules/node-uuid/bin/uuid
new file mode 100755
index 000000000..f732e9918
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/bin/uuid
@@ -0,0 +1,26 @@
+#!/usr/bin/env node
+
+var path = require('path');
+var uuid = require(path.join(__dirname, '..'));
+
+var arg = process.argv[2];
+
+if ('--help' === arg) {
+ console.log('\n USAGE: uuid [version] [options]\n\n');
+ console.log(' options:\n');
+ console.log(' --help Display this message and exit\n');
+ process.exit(0);
+}
+
+if (null == arg) {
+ console.log(uuid());
+ process.exit(0);
+}
+
+if ('v1' !== arg && 'v4' !== arg) {
+ console.error('Version must be RFC4122 version 1 or version 4, denoted as "v1" or "v4"');
+ process.exit(1);
+}
+
+console.log(uuid[arg]());
+process.exit(0);
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/package.json b/deps/npm/node_modules/request/node_modules/node-uuid/package.json
index bead110cc..975367102 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/package.json
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/package.json
@@ -17,25 +17,34 @@
"email": "dev@tavan.de"
}
],
+ "bin": {
+ "uuid": "./bin/uuid"
+ },
+ "scripts": {
+ "test": "node test/test.js"
+ },
"lib": ".",
"main": "./uuid.js",
"repository": {
"type": "git",
"url": "https://github.com/broofa/node-uuid.git"
},
- "version": "1.4.1",
- "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src=\"uuid.js\"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n",
- "readmeFilename": "README.md",
+ "version": "1.4.2",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://raw.github.com/broofa/node-uuid/master/LICENSE.md"
+ }
+ ],
+ "gitHead": "14c42d2568977f7ddfc02399bd2a6b09e2cfbe5f",
"bugs": {
"url": "https://github.com/broofa/node-uuid/issues"
},
- "_id": "node-uuid@1.4.1",
- "dist": {
- "shasum": "39aef510e5889a3dca9c895b506c73aae1bac048",
- "tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
- },
+ "homepage": "https://github.com/broofa/node-uuid",
+ "_id": "node-uuid@1.4.2",
+ "_shasum": "907db3d11b7b6a2cf4f905fb7199f14ae7379ba0",
"_from": "node-uuid@>=1.4.0 <1.5.0",
- "_npmVersion": "1.3.6",
+ "_npmVersion": "1.4.28",
"_npmUser": {
"name": "broofa",
"email": "robert@broofa.com"
@@ -46,9 +55,11 @@
"email": "robert@broofa.com"
}
],
+ "dist": {
+ "shasum": "907db3d11b7b6a2cf4f905fb7199f14ae7379ba0",
+ "tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
+ },
"directories": {},
- "_shasum": "39aef510e5889a3dca9c895b506c73aae1bac048",
- "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz",
- "homepage": "https://github.com/broofa/node-uuid",
- "scripts": {}
+ "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js b/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js
index 2fac6dc4b..5e2257f09 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/uuid.js
@@ -14,9 +14,9 @@
// Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
//
// Moderately fast, high quality
- if (typeof(require) == 'function') {
+ if (typeof(_global.require) == 'function') {
try {
- var _rb = require('crypto').randomBytes;
+ var _rb = _global.require('crypto').randomBytes;
_rng = _rb && function() {return _rb(16);};
} catch(e) {}
}
@@ -49,7 +49,7 @@
}
// Buffer class to use
- var BufferClass = typeof(Buffer) == 'function' ? Buffer : Array;
+ var BufferClass = typeof(_global.Buffer) == 'function' ? _global.Buffer : Array;
// Maps for number <-> hex string conversion
var _byteToHex = [];
diff --git a/deps/npm/node_modules/request/node_modules/oauth-sign/index.js b/deps/npm/node_modules/request/node_modules/oauth-sign/index.js
index 3a86aca12..bdfd14e18 100644
--- a/deps/npm/node_modules/request/node_modules/oauth-sign/index.js
+++ b/deps/npm/node_modules/request/node_modules/oauth-sign/index.js
@@ -6,6 +6,10 @@ function sha1 (key, body) {
return crypto.createHmac('sha1', key).update(body).digest('base64')
}
+function rsa (key, body) {
+ return crypto.createSign("RSA-SHA1").update(body).sign(key, 'base64');
+}
+
function rfc3986 (str) {
return encodeURIComponent(str)
.replace(/!/g,'%21')
@@ -37,7 +41,7 @@ function compare (a, b) {
return a > b ? 1 : a < b ? -1 : 0
}
-function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {
+function generateBase (httpMethod, base_uri, params) {
// adapted from https://dev.twitter.com/docs/auth/oauth and
// https://dev.twitter.com/docs/auth/creating-signature
@@ -69,6 +73,11 @@ function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret)
rfc3986(normalized)
].join('&')
+ return base
+}
+
+function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {
+ var base = generateBase(httpMethod, base_uri, params)
var key = [
consumer_secret || '',
token_secret || ''
@@ -77,5 +86,31 @@ function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret)
return sha1(key, base)
}
+function rsasign (httpMethod, base_uri, params, private_key, token_secret) {
+ var base = generateBase(httpMethod, base_uri, params)
+ var key = private_key || ''
+
+ return rsa(key, base)
+}
+
+function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) {
+ var method
+
+ switch (signMethod) {
+ case 'RSA-SHA1':
+ method = rsasign
+ break
+ case 'HMAC-SHA1':
+ method = hmacsign
+ break
+ default:
+ throw new Error("Signature method not supported: " + signMethod)
+ }
+
+ return method.apply(null, [].slice.call(arguments, 1))
+}
+
exports.hmacsign = hmacsign
+exports.rsasign = rsasign
+exports.sign = sign
exports.rfc3986 = rfc3986
diff --git a/deps/npm/node_modules/request/node_modules/oauth-sign/package.json b/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
index d8765b6e9..d49bfb746 100644
--- a/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
+++ b/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
@@ -6,7 +6,7 @@
},
"name": "oauth-sign",
"description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.",
- "version": "0.4.0",
+ "version": "0.5.0",
"repository": {
"url": "https://github.com/mikeal/oauth-sign"
},
@@ -20,18 +20,15 @@
"scripts": {
"test": "node test.js"
},
- "readme": "oauth-sign\n==========\n\nOAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. \n",
- "readmeFilename": "README.md",
+ "gitHead": "6fea86c2d4a38e1b3780ad0cc56f00196e5213c1",
"bugs": {
"url": "https://github.com/mikeal/oauth-sign/issues"
},
- "_id": "oauth-sign@0.4.0",
- "dist": {
- "shasum": "f22956f31ea7151a821e5f2fb32c113cad8b9f69",
- "tarball": "http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz"
- },
- "_from": "oauth-sign@>=0.4.0 <0.5.0",
- "_npmVersion": "1.3.2",
+ "homepage": "https://github.com/mikeal/oauth-sign",
+ "_id": "oauth-sign@0.5.0",
+ "_shasum": "d767f5169325620eab2e087ef0c472e773db6461",
+ "_from": "oauth-sign@>=0.5.0 <0.6.0",
+ "_npmVersion": "2.0.0",
"_npmUser": {
"name": "mikeal",
"email": "mikeal.rogers@gmail.com"
@@ -42,8 +39,11 @@
"email": "mikeal.rogers@gmail.com"
}
],
+ "dist": {
+ "shasum": "d767f5169325620eab2e087ef0c472e773db6461",
+ "tarball": "http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz"
+ },
"directories": {},
- "_shasum": "f22956f31ea7151a821e5f2fb32c113cad8b9f69",
- "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz",
- "homepage": "https://github.com/mikeal/oauth-sign"
+ "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/qs/CHANGELOG.md b/deps/npm/node_modules/request/node_modules/qs/CHANGELOG.md
new file mode 100644
index 000000000..f5ee8b464
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/qs/CHANGELOG.md
@@ -0,0 +1,68 @@
+
+## [**2.3.3**](https://github.com/hapijs/qs/issues?milestone=18&state=open)
+- [**#59**](https://github.com/hapijs/qs/issues/59) make sure array indexes are &gt;= 0, closes #57
+- [**#58**](https://github.com/hapijs/qs/issues/58) make qs usable for browser loader
+
+## [**2.3.2**](https://github.com/hapijs/qs/issues?milestone=17&state=closed)
+- [**#55**](https://github.com/hapijs/qs/issues/55) allow merging a string into an object
+
+## [**2.3.1**](https://github.com/hapijs/qs/issues?milestone=16&state=closed)
+- [**#52**](https://github.com/hapijs/qs/issues/52) Return &quot;undefined&quot; and &quot;false&quot; instead of throwing &quot;TypeError&quot;.
+
+## [**2.3.0**](https://github.com/hapijs/qs/issues?milestone=15&state=closed)
+- [**#50**](https://github.com/hapijs/qs/issues/50) add option to omit array indices, closes #46
+
+## [**2.2.5**](https://github.com/hapijs/qs/issues?milestone=14&state=closed)
+- [**#39**](https://github.com/hapijs/qs/issues/39) Is there an alternative to Buffer.isBuffer?
+- [**#49**](https://github.com/hapijs/qs/issues/49) refactor utils.merge, fixes #45
+- [**#41**](https://github.com/hapijs/qs/issues/41) avoid browserifying Buffer, for #39
+
+## [**2.2.4**](https://github.com/hapijs/qs/issues?milestone=13&state=closed)
+- [**#38**](https://github.com/hapijs/qs/issues/38) how to handle object keys beginning with a number
+
+## [**2.2.3**](https://github.com/hapijs/qs/issues?milestone=12&state=closed)
+- [**#37**](https://github.com/hapijs/qs/issues/37) parser discards first empty value in array
+- [**#36**](https://github.com/hapijs/qs/issues/36) Update to lab 4.x
+
+## [**2.2.2**](https://github.com/hapijs/qs/issues?milestone=11&state=closed)
+- [**#33**](https://github.com/hapijs/qs/issues/33) Error when plain object in a value
+- [**#34**](https://github.com/hapijs/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty
+- [**#24**](https://github.com/hapijs/qs/issues/24) Changelog? Semver?
+
+## [**2.2.1**](https://github.com/hapijs/qs/issues?milestone=10&state=closed)
+- [**#32**](https://github.com/hapijs/qs/issues/32) account for circular references properly, closes #31
+- [**#31**](https://github.com/hapijs/qs/issues/31) qs.parse stackoverflow on circular objects
+
+## [**2.2.0**](https://github.com/hapijs/qs/issues?milestone=9&state=closed)
+- [**#26**](https://github.com/hapijs/qs/issues/26) Don&#39;t use Buffer global if it&#39;s not present
+- [**#30**](https://github.com/hapijs/qs/issues/30) Bug when merging non-object values into arrays
+- [**#29**](https://github.com/hapijs/qs/issues/29) Don&#39;t call Utils.clone at the top of Utils.merge
+- [**#23**](https://github.com/hapijs/qs/issues/23) Ability to not limit parameters?
+
+## [**2.1.0**](https://github.com/hapijs/qs/issues?milestone=8&state=closed)
+- [**#22**](https://github.com/hapijs/qs/issues/22) Enable using a RegExp as delimiter
+
+## [**2.0.0**](https://github.com/hapijs/qs/issues?milestone=7&state=closed)
+- [**#18**](https://github.com/hapijs/qs/issues/18) Why is there arrayLimit?
+- [**#20**](https://github.com/hapijs/qs/issues/20) Configurable parametersLimit
+- [**#21**](https://github.com/hapijs/qs/issues/21) make all limits optional, for #18, for #20
+
+## [**1.2.2**](https://github.com/hapijs/qs/issues?milestone=6&state=closed)
+- [**#19**](https://github.com/hapijs/qs/issues/19) Don&#39;t overwrite null values
+
+## [**1.2.1**](https://github.com/hapijs/qs/issues?milestone=5&state=closed)
+- [**#16**](https://github.com/hapijs/qs/issues/16) ignore non-string delimiters
+- [**#15**](https://github.com/hapijs/qs/issues/15) Close code block
+
+## [**1.2.0**](https://github.com/hapijs/qs/issues?milestone=4&state=closed)
+- [**#12**](https://github.com/hapijs/qs/issues/12) Add optional delim argument
+- [**#13**](https://github.com/hapijs/qs/issues/13) fix #11: flattened keys in array are now correctly parsed
+
+## [**1.1.0**](https://github.com/hapijs/qs/issues?milestone=3&state=closed)
+- [**#7**](https://github.com/hapijs/qs/issues/7) Empty values of a POST array disappear after being submitted
+- [**#9**](https://github.com/hapijs/qs/issues/9) Should not omit equals signs (=) when value is null
+- [**#6**](https://github.com/hapijs/qs/issues/6) Minor grammar fix in README
+
+## [**1.0.2**](https://github.com/hapijs/qs/issues?milestone=2&state=closed)
+- [**#5**](https://github.com/hapijs/qs/issues/5) array holes incorrectly copied into object on large index
+
diff --git a/deps/npm/node_modules/request/node_modules/qs/Makefile b/deps/npm/node_modules/request/node_modules/qs/Makefile
index 600a700ec..31cc899d4 100644
--- a/deps/npm/node_modules/request/node_modules/qs/Makefile
+++ b/deps/npm/node_modules/request/node_modules/qs/Makefile
@@ -1,8 +1,8 @@
test:
- @node node_modules/lab/bin/lab
+ @node node_modules/lab/bin/lab -a code -L
test-cov:
- @node node_modules/lab/bin/lab -t 100
+ @node node_modules/lab/bin/lab -a code -t 100 -L
test-cov-html:
- @node node_modules/lab/bin/lab -r html -o coverage.html
+ @node node_modules/lab/bin/lab -a code -L -r html -o coverage.html
-.PHONY: test test-cov test-cov-html \ No newline at end of file
+.PHONY: test test-cov test-cov-html
diff --git a/deps/npm/node_modules/request/node_modules/qs/Readme.md b/deps/npm/node_modules/request/node_modules/qs/Readme.md
index b8618877c..21bf3faf3 100755
--- a/deps/npm/node_modules/request/node_modules/qs/Readme.md
+++ b/deps/npm/node_modules/request/node_modules/qs/Readme.md
@@ -20,7 +20,7 @@ var str = Qs.stringify(obj); // 'a=c'
### Parsing Objects
```javascript
-Qs.parse(string, [depth], [delimiter]);
+Qs.parse(string, [options]);
```
**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`.
@@ -74,22 +74,36 @@ By default, when nesting objects **qs** will only parse up to 5 children deep. T
}
```
-This depth can be overridden by passing a `depth` option to `Qs.parse(string, depth)`:
+This depth can be overridden by passing a `depth` option to `Qs.parse(string, [options])`:
```javascript
-Qs.parse('a[b][c][d][e][f][g][h][i]=j', 1);
+Qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 });
// { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }
```
-The depth limit mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number.
+The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number.
+
+For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option:
+
+```javascript
+Qs.parse('a=b&c=d', { parameterLimit: 1 });
+// { a: 'b' }
+```
An optional delimiter can also be passed:
```javascript
-Qs.parse('a=b;c=d', ';');
+Qs.parse('a=b;c=d', { delimiter: ';' });
// { a: 'b', c: 'd' }
```
+Delimiters can be a regular expression too:
+
+```javascript
+Qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ });
+// { a: 'b', c: 'd', e: 'f' }
+```
+
### Parsing Arrays
**qs** can also parse arrays using a similar `[]` notation:
@@ -132,6 +146,15 @@ Qs.parse('a[100]=b');
// { a: { '100': 'b' } }
```
+This limit can be overridden by passing an `arrayLimit` option:
+
+```javascript
+Qs.parse('a[1]=b', { arrayLimit: 0 });
+// { a: { '1': 'b' } }
+```
+
+To disable array parsing entirely, set `arrayLimit` to `-1`.
+
If you mix notations, **qs** will merge the two items into an object:
```javascript
@@ -149,7 +172,7 @@ Qs.parse('a[][b]=c');
### Stringifying
```javascript
-Qs.stringify(object, [delimiter]);
+Qs.stringify(object, [options]);
```
When stringifying, **qs** always URI encodes output. Objects are stringified as you would expect:
@@ -163,13 +186,20 @@ Qs.stringify({ a: { b: 'c' } });
Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage.
-When arrays are stringified, they are always given explicit indices:
+When arrays are stringified, by default they are given explicit indices:
```javascript
Qs.stringify({ a: ['b', 'c', 'd'] });
// 'a[0]=b&a[1]=c&a[2]=d'
```
+You may override this by setting the `indices` option to `false`:
+
+```javascript
+Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
+// 'a=b&a=c&a=d'
+```
+
Empty strings and null values will omit the value, but the equals sign (=) remains in place:
```javascript
@@ -187,6 +217,6 @@ Qs.stringify({ a: null, b: undefined });
The delimiter may be overridden with stringify as well:
```javascript
-Qs.stringify({ a: 'b', c: 'd' }, ';');
+Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' });
// 'a=b;c=d'
```
diff --git a/deps/npm/node_modules/request/node_modules/qs/index.js b/deps/npm/node_modules/request/node_modules/qs/index.js
index bb0a047c4..2291cd858 100644
--- a/deps/npm/node_modules/request/node_modules/qs/index.js
+++ b/deps/npm/node_modules/request/node_modules/qs/index.js
@@ -1 +1 @@
-module.exports = require('./lib');
+module.exports = require('./lib/');
diff --git a/deps/npm/node_modules/request/node_modules/qs/lib/parse.js b/deps/npm/node_modules/request/node_modules/qs/lib/parse.js
index 4a3fdd974..4e7d02a1b 100755
--- a/deps/npm/node_modules/request/node_modules/qs/lib/parse.js
+++ b/deps/npm/node_modules/request/node_modules/qs/lib/parse.js
@@ -9,16 +9,14 @@ var internals = {
delimiter: '&',
depth: 5,
arrayLimit: 20,
- parametersLimit: 1000
+ parameterLimit: 1000
};
-internals.parseValues = function (str, delimiter) {
-
- delimiter = typeof delimiter === 'string' ? delimiter : internals.delimiter;
+internals.parseValues = function (str, options) {
var obj = {};
- var parts = str.split(delimiter, internals.parametersLimit);
+ var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);
for (var i = 0, il = parts.length; i < il; ++i) {
var part = parts[i];
@@ -31,7 +29,7 @@ internals.parseValues = function (str, delimiter) {
var key = Utils.decode(part.slice(0, pos));
var val = Utils.decode(part.slice(pos + 1));
- if (!obj[key]) {
+ if (!obj.hasOwnProperty(key)) {
obj[key] = val;
}
else {
@@ -44,7 +42,7 @@ internals.parseValues = function (str, delimiter) {
};
-internals.parseObject = function (chain, val) {
+internals.parseObject = function (chain, val, options) {
if (!chain.length) {
return val;
@@ -55,20 +53,23 @@ internals.parseObject = function (chain, val) {
var obj = {};
if (root === '[]') {
obj = [];
- obj = obj.concat(internals.parseObject(chain, val));
+ obj = obj.concat(internals.parseObject(chain, val, options));
}
else {
var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;
var index = parseInt(cleanRoot, 10);
+ var indexString = '' + index;
if (!isNaN(index) &&
root !== cleanRoot &&
- index <= internals.arrayLimit) {
+ indexString === cleanRoot &&
+ index >= 0 &&
+ index <= options.arrayLimit) {
obj = [];
- obj[index] = internals.parseObject(chain, val);
+ obj[index] = internals.parseObject(chain, val, options);
}
else {
- obj[cleanRoot] = internals.parseObject(chain, val);
+ obj[cleanRoot] = internals.parseObject(chain, val, options);
}
}
@@ -76,7 +77,7 @@ internals.parseObject = function (chain, val) {
};
-internals.parseKeys = function (key, val, depth) {
+internals.parseKeys = function (key, val, options) {
if (!key) {
return;
@@ -107,7 +108,7 @@ internals.parseKeys = function (key, val, depth) {
// Loop through children appending to the array until we hit depth
var i = 0;
- while ((segment = child.exec(key)) !== null && i < depth) {
+ while ((segment = child.exec(key)) !== null && i < options.depth) {
++i;
if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) {
@@ -121,11 +122,11 @@ internals.parseKeys = function (key, val, depth) {
keys.push('[' + key.slice(segment.index) + ']');
}
- return internals.parseObject(keys, val);
+ return internals.parseObject(keys, val, options);
};
-module.exports = function (str, depth, delimiter) {
+module.exports = function (str, options) {
if (str === '' ||
str === null ||
@@ -134,21 +135,22 @@ module.exports = function (str, depth, delimiter) {
return {};
}
- if (typeof depth !== 'number') {
- delimiter = depth;
- depth = internals.depth;
- }
+ options = options || {};
+ options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;
+ options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;
+ options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;
+ options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;
- var tempObj = typeof str === 'string' ? internals.parseValues(str, delimiter) : Utils.clone(str);
+ var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;
var obj = {};
// Iterate over the keys and setup the new object
- //
- for (var key in tempObj) {
- if (tempObj.hasOwnProperty(key)) {
- var newObj = internals.parseKeys(key, tempObj[key], depth);
- obj = Utils.merge(obj, newObj);
- }
+
+ var keys = Object.keys(tempObj);
+ for (var i = 0, il = keys.length; i < il; ++i) {
+ var key = keys[i];
+ var newObj = internals.parseKeys(key, tempObj[key], options);
+ obj = Utils.merge(obj, newObj);
}
return Utils.compact(obj);
diff --git a/deps/npm/node_modules/request/node_modules/qs/lib/stringify.js b/deps/npm/node_modules/request/node_modules/qs/lib/stringify.js
index 1cc3df9fc..b4411047f 100755
--- a/deps/npm/node_modules/request/node_modules/qs/lib/stringify.js
+++ b/deps/npm/node_modules/request/node_modules/qs/lib/stringify.js
@@ -1,16 +1,19 @@
// Load modules
+var Utils = require('./utils');
+
// Declare internals
var internals = {
- delimiter: '&'
+ delimiter: '&',
+ indices: true
};
-internals.stringify = function (obj, prefix) {
+internals.stringify = function (obj, prefix, options) {
- if (Buffer.isBuffer(obj)) {
+ if (Utils.isBuffer(obj)) {
obj = obj.toString();
}
else if (obj instanceof Date) {
@@ -29,9 +32,20 @@ internals.stringify = function (obj, prefix) {
var values = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));
+ if (typeof obj === 'undefined') {
+ return values;
+ }
+
+ var objKeys = Object.keys(obj);
+ for (var i = 0, il = objKeys.length; i < il; ++i) {
+ var key = objKeys[i];
+ if (!options.indices &&
+ Array.isArray(obj)) {
+
+ values = values.concat(internals.stringify(obj[key], prefix, options));
+ }
+ else {
+ values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', options));
}
}
@@ -39,16 +53,24 @@ internals.stringify = function (obj, prefix) {
};
-module.exports = function (obj, delimiter) {
+module.exports = function (obj, options) {
- delimiter = typeof delimiter === 'undefined' ? internals.delimiter : delimiter;
+ options = options || {};
+ var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
+ options.indices = typeof options.indices === 'boolean' ? options.indices : internals.indices;
var keys = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- keys = keys.concat(internals.stringify(obj[key], key));
- }
+ if (typeof obj !== 'object' ||
+ obj === null) {
+
+ return '';
+ }
+
+ var objKeys = Object.keys(obj);
+ for (var i = 0, il = objKeys.length; i < il; ++i) {
+ var key = objKeys[i];
+ keys = keys.concat(internals.stringify(obj[key], key, options));
}
return keys.join(delimiter);
diff --git a/deps/npm/node_modules/request/node_modules/qs/lib/utils.js b/deps/npm/node_modules/request/node_modules/qs/lib/utils.js
index 3f5c149d5..5240bd5b0 100755
--- a/deps/npm/node_modules/request/node_modules/qs/lib/utils.js
+++ b/deps/npm/node_modules/request/node_modules/qs/lib/utils.js
@@ -20,54 +20,32 @@ exports.arrayToObject = function (source) {
};
-exports.clone = function (source) {
-
- if (typeof source !== 'object' ||
- source === null) {
-
- return source;
- }
-
- if (Buffer.isBuffer(source)) {
- return source.toString();
- }
-
- var obj = Array.isArray(source) ? [] : {};
- for (var i in source) {
- if (source.hasOwnProperty(i)) {
- obj[i] = exports.clone(source[i]);
- }
- }
-
- return obj;
-};
-
-
exports.merge = function (target, source) {
if (!source) {
return target;
}
- var obj = exports.clone(target);
-
- if (Array.isArray(source)) {
- for (var i = 0, il = source.length; i < il; ++i) {
- if (typeof source[i] !== 'undefined') {
- if (typeof obj[i] === 'object') {
- obj[i] = exports.merge(obj[i], source[i]);
- }
- else {
- obj[i] = source[i];
- }
- }
+ if (typeof source !== 'object') {
+ if (Array.isArray(target)) {
+ target.push(source);
+ }
+ else {
+ target[source] = true;
}
- return obj;
+ return target;
}
- if (Array.isArray(obj)) {
- obj = exports.arrayToObject(obj);
+ if (typeof target !== 'object') {
+ target = [target].concat(source);
+ return target;
+ }
+
+ if (Array.isArray(target) &&
+ !Array.isArray(source)) {
+
+ target = exports.arrayToObject(target);
}
var keys = Object.keys(source);
@@ -75,22 +53,15 @@ exports.merge = function (target, source) {
var key = keys[k];
var value = source[key];
- if (value &&
- typeof value === 'object') {
-
- if (!obj[key]) {
- obj[key] = exports.clone(value);
- }
- else {
- obj[key] = exports.merge(obj[key], value);
- }
+ if (!target[key]) {
+ target[key] = value;
}
else {
- obj[key] = value;
+ target[key] = exports.merge(target[key], value);
}
}
- return obj;
+ return target;
};
@@ -104,30 +75,58 @@ exports.decode = function (str) {
};
-exports.compact = function (obj) {
+exports.compact = function (obj, refs) {
+
+ if (typeof obj !== 'object' ||
+ obj === null) {
- if (typeof obj !== 'object' || obj === null) {
return obj;
}
- var compacted = {};
+ refs = refs || [];
+ var lookup = refs.indexOf(obj);
+ if (lookup !== -1) {
+ return refs[lookup];
+ }
+
+ refs.push(obj);
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- if (Array.isArray(obj[key])) {
- compacted[key] = [];
+ if (Array.isArray(obj)) {
+ var compacted = [];
- for (var i = 0, l = obj[key].length; i < l; i++) {
- if (typeof obj[key][i] !== 'undefined') {
- compacted[key].push(obj[key][i]);
- }
- }
- }
- else {
- compacted[key] = exports.compact(obj[key]);
+ for (var i = 0, il = obj.length; i < il; ++i) {
+ if (typeof obj[i] !== 'undefined') {
+ compacted.push(obj[i]);
}
}
+
+ return compacted;
+ }
+
+ var keys = Object.keys(obj);
+ for (i = 0, il = keys.length; i < il; ++i) {
+ var key = keys[i];
+ obj[key] = exports.compact(obj[key], refs);
+ }
+
+ return obj;
+};
+
+
+exports.isRegExp = function (obj) {
+ return Object.prototype.toString.call(obj) === '[object RegExp]';
+};
+
+
+exports.isBuffer = function (obj) {
+
+ if (obj === null ||
+ typeof obj === 'undefined') {
+
+ return false;
}
- return compacted;
+ return !!(obj.constructor &&
+ obj.constructor.isBuffer &&
+ obj.constructor.isBuffer(obj));
};
diff --git a/deps/npm/node_modules/request/node_modules/qs/package.json b/deps/npm/node_modules/request/node_modules/qs/package.json
index d65387274..8d17dfce1 100755..100644
--- a/deps/npm/node_modules/request/node_modules/qs/package.json
+++ b/deps/npm/node_modules/request/node_modules/qs/package.json
@@ -1,12 +1,13 @@
{
"name": "qs",
- "version": "1.2.2",
+ "version": "2.3.3",
"description": "A querystring parser that supports nesting and arrays, with a depth limit",
"homepage": "https://github.com/hapijs/qs",
"main": "index.js",
"dependencies": {},
"devDependencies": {
- "lab": "3.x.x"
+ "code": "1.x.x",
+ "lab": "5.x.x"
},
"scripts": {
"test": "make test-cov"
@@ -19,27 +20,24 @@
"querystring",
"qs"
],
- "author": {
- "name": "Nathan LaFreniere",
- "email": "quitlahok@gmail.com"
- },
"licenses": [
{
"type": "BSD",
"url": "http://github.com/hapijs/qs/raw/master/LICENSE"
}
],
- "gitHead": "bd9455fea88d1c51a80dbf57ef0f99b4e553177d",
+ "gitHead": "9250c4cda5102fcf72441445816e6d311fc6813d",
"bugs": {
"url": "https://github.com/hapijs/qs/issues"
},
- "_id": "qs@1.2.2",
- "_shasum": "19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88",
- "_from": "qs@>=1.2.0 <1.3.0",
- "_npmVersion": "1.4.21",
+ "_id": "qs@2.3.3",
+ "_shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404",
+ "_from": "qs@>=2.3.1 <2.4.0",
+ "_npmVersion": "2.1.6",
+ "_nodeVersion": "0.10.32",
"_npmUser": {
- "name": "hueniverse",
- "email": "eran@hueniverse.com"
+ "name": "nlf",
+ "email": "quitlahok@gmail.com"
},
"maintainers": [
{
@@ -52,10 +50,10 @@
}
],
"dist": {
- "shasum": "19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88",
- "tarball": "http://registry.npmjs.org/qs/-/qs-1.2.2.tgz"
+ "shasum": "e9e85adbe75da0bbe4c8e0476a086290f863b404",
+ "tarball": "http://registry.npmjs.org/qs/-/qs-2.3.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz",
+ "_resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/qs/test/parse.js b/deps/npm/node_modules/request/node_modules/qs/test/parse.js
index c00e7becf..6c20cc1be 100755
--- a/deps/npm/node_modules/request/node_modules/qs/test/parse.js
+++ b/deps/npm/node_modules/request/node_modules/qs/test/parse.js
@@ -1,5 +1,7 @@
+/* eslint no-extend-native:0 */
// Load modules
+var Code = require('code');
var Lab = require('lab');
var Qs = require('../');
@@ -11,14 +13,13 @@ var internals = {};
// Test shortcuts
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
+var lab = exports.lab = Lab.script();
+var expect = Code.expect;
+var describe = lab.experiment;
+var it = lab.test;
-describe('#parse', function () {
+describe('parse()', function () {
it('parses a simple string', function (done) {
@@ -62,8 +63,8 @@ describe('#parse', function () {
it('only parses one level when depth = 1', function (done) {
- expect(Qs.parse('a[b][c]=d', 1)).to.deep.equal({ a: { b: { '[c]': 'd' } } });
- expect(Qs.parse('a[b][c][d]=e', 1)).to.deep.equal({ a: { b: { '[c][d]': 'e' } } });
+ expect(Qs.parse('a[b][c]=d', { depth: 1 })).to.deep.equal({ a: { b: { '[c]': 'd' } } });
+ expect(Qs.parse('a[b][c][d]=e', { depth: 1 })).to.deep.equal({ a: { b: { '[c][d]': 'e' } } });
done();
});
@@ -81,6 +82,17 @@ describe('#parse', function () {
done();
});
+ it('parses a mix of simple and explicit arrays', function (done) {
+
+ expect(Qs.parse('a=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] });
+ expect(Qs.parse('a[]=b&a=c')).to.deep.equal({ a: ['b', 'c'] });
+ expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({ a: ['b', 'c'] });
+ expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({ a: ['b', 'c'] });
+ expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({ a: ['b', 'c'] });
+ expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({ a: ['b', 'c'] });
+ done();
+ });
+
it('parses a nested array', function (done) {
expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({ a: { b: ['c', 'd'] } });
@@ -103,6 +115,12 @@ describe('#parse', function () {
done();
});
+ it('supports keys that begin with a number', function (done) {
+
+ expect(Qs.parse('a[12b]=c')).to.deep.equal({ a: { '12b': 'c' } });
+ done();
+ });
+
it('supports encoded = signs', function (done) {
expect(Qs.parse('he%3Dllo=th%3Dere')).to.deep.equal({ 'he=llo': 'th=ere' });
@@ -142,6 +160,12 @@ describe('#parse', function () {
done();
});
+ it('can add keys to objects', function (done) {
+
+ expect(Qs.parse('a[b]=c&a=d')).to.deep.equal({ a: { b: 'c', d: true } });
+ done();
+ });
+
it('correctly prunes undefined values when converting an array to an object', function (done) {
expect(Qs.parse('a[2]=b&a[99999999]=c')).to.deep.equal({ a: { '2': 'b', '99999999': 'c' } });
@@ -189,6 +213,7 @@ describe('#parse', function () {
expect(Qs.parse('a[]=b&a[]=&a[]=c')).to.deep.equal({ a: ['b', '', 'c'] });
expect(Qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]=')).to.deep.equal({ a: ['b', '', 'c', ''] });
+ expect(Qs.parse('a[]=&a[]=b&a[]=c')).to.deep.equal({ a: ['', 'b', 'c'] });
done();
});
@@ -205,10 +230,10 @@ describe('#parse', function () {
done();
});
- it('parses buffers to strings', function (done) {
+ it('parses buffers correctly', function (done) {
var b = new Buffer('test');
- expect(Qs.parse({ a: b })).to.deep.equal({ a: b.toString() });
+ expect(Qs.parse({ a: b })).to.deep.equal({ a: b });
done();
});
@@ -247,29 +272,55 @@ describe('#parse', function () {
done();
});
- it('parses a string with an alternative delimiter', function (done) {
+ it('parses a string with an alternative string delimiter', function (done) {
+
+ expect(Qs.parse('a=b;c=d', { delimiter: ';' })).to.deep.equal({ a: 'b', c: 'd' });
+ done();
+ });
+
+ it('parses a string with an alternative RegExp delimiter', function (done) {
+
+ expect(Qs.parse('a=b; c=d', { delimiter: /[;,] */ })).to.deep.equal({ a: 'b', c: 'd' });
+ done();
+ });
+
+ it('does not use non-splittable objects as delimiters', function (done) {
- expect(Qs.parse('a=b;c=d', ';')).to.deep.equal({ a: 'b', c: 'd' });
+ expect(Qs.parse('a=b&c=d', { delimiter: true })).to.deep.equal({ a: 'b', c: 'd' });
done();
});
- it('does not use non-string objects as delimiters', function (done) {
+ it('allows overriding parameter limit', function (done) {
- expect(Qs.parse('a=b&c=d', {})).to.deep.equal({ a: 'b', c: 'd' });
+ expect(Qs.parse('a=b&c=d', { parameterLimit: 1 })).to.deep.equal({ a: 'b' });
+ done();
+ });
+
+ it('allows setting the parameter limit to Infinity', function (done) {
+
+ expect(Qs.parse('a=b&c=d', { parameterLimit: Infinity })).to.deep.equal({ a: 'b', c: 'd' });
+ done();
+ });
+
+ it('allows overriding array limit', function (done) {
+
+ expect(Qs.parse('a[0]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '0': 'b' } });
+ expect(Qs.parse('a[-1]=b', { arrayLimit: -1 })).to.deep.equal({ a: { '-1': 'b' } });
+ expect(Qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 })).to.deep.equal({ a: { '0': 'b', '1': 'c' } });
done();
});
it('parses an object', function (done) {
var input = {
- "user[name]": {"pop[bob]": 3},
- "user[email]": null
+ 'user[name]': {'pop[bob]': 3},
+ 'user[email]': null
};
var expected = {
- "user": {
- "name": {"pop[bob]": 3},
- "email": null
+ 'user': {
+ 'name': {'pop[bob]': 3},
+ 'email': null
}
};
@@ -282,14 +333,14 @@ describe('#parse', function () {
it('parses an object and not child values', function (done) {
var input = {
- "user[name]": {"pop[bob]": { "test": 3 }},
- "user[email]": null
+ 'user[name]': {'pop[bob]': { 'test': 3 }},
+ 'user[email]': null
};
var expected = {
- "user": {
- "name": {"pop[bob]": { "test": 3 }},
- "email": null
+ 'user': {
+ 'name': {'pop[bob]': { 'test': 3 }},
+ 'email': null
}
};
@@ -298,4 +349,65 @@ describe('#parse', function () {
expect(result).to.deep.equal(expected);
done();
});
+
+ it('does not blow up when Buffer global is missing', function (done) {
+
+ var tempBuffer = global.Buffer;
+ delete global.Buffer;
+ var result = Qs.parse('a=b&c=d');
+ global.Buffer = tempBuffer;
+ expect(result).to.deep.equal({ a: 'b', c: 'd' });
+ done();
+ });
+
+ it('does not crash when using invalid dot notation', function (done) {
+
+ expect(Qs.parse('roomInfoList[0].childrenAges[0]=15&roomInfoList[0].numberOfAdults=2')).to.deep.equal({ roomInfoList: [['15', '2']] });
+ done();
+ });
+
+ it('does not crash when parsing circular references', function (done) {
+
+ var a = {};
+ a.b = a;
+
+ var parsed;
+
+ expect(function () {
+
+ parsed = Qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a });
+ }).to.not.throw();
+
+ expect(parsed).to.contain('foo');
+ expect(parsed.foo).to.contain('bar', 'baz');
+ expect(parsed.foo.bar).to.equal('baz');
+ expect(parsed.foo.baz).to.deep.equal(a);
+ done();
+ });
+
+ it('parses plain objects correctly', function (done) {
+
+ var a = Object.create(null);
+ a.b = 'c';
+
+ expect(Qs.parse(a)).to.deep.equal({ b: 'c' });
+ var result = Qs.parse({ a: a });
+ expect(result).to.contain('a');
+ expect(result.a).to.deep.equal(a);
+ done();
+ });
+
+ it('parses dates correctly', function (done) {
+
+ var now = new Date();
+ expect(Qs.parse({ a: now })).to.deep.equal({ a: now });
+ done();
+ });
+
+ it('parses regular expressions correctly', function (done) {
+
+ var re = /^test$/;
+ expect(Qs.parse({ a: re })).to.deep.equal({ a: re });
+ done();
+ });
});
diff --git a/deps/npm/node_modules/request/node_modules/qs/test/stringify.js b/deps/npm/node_modules/request/node_modules/qs/test/stringify.js
index 7bf1df4b5..75e397a74 100755
--- a/deps/npm/node_modules/request/node_modules/qs/test/stringify.js
+++ b/deps/npm/node_modules/request/node_modules/qs/test/stringify.js
@@ -1,5 +1,7 @@
+/* eslint no-extend-native:0 */
// Load modules
+var Code = require('code');
var Lab = require('lab');
var Qs = require('../');
@@ -11,14 +13,13 @@ var internals = {};
// Test shortcuts
-var expect = Lab.expect;
-var before = Lab.before;
-var after = Lab.after;
-var describe = Lab.experiment;
-var it = Lab.test;
+var lab = exports.lab = Lab.script();
+var expect = Code.expect;
+var describe = lab.experiment;
+var it = lab.test;
-describe('#stringify', function () {
+describe('stringify()', function () {
it('stringifies a querystring object', function (done) {
@@ -41,6 +42,12 @@ describe('#stringify', function () {
done();
});
+ it('omits array indices when asked', function (done) {
+
+ expect(Qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false })).to.equal('a=b&a=c&a=d');
+ done();
+ });
+
it('stringifies a nested array value', function (done) {
expect(Qs.stringify({ a: { b: ['c', 'd'] } })).to.equal('a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d');
@@ -54,6 +61,12 @@ describe('#stringify', function () {
done();
});
+ it('does not omit object keys when indices = false', function (done) {
+
+ expect(Qs.stringify({ a: [{ b: 'c' }] }, { indices: false })).to.equal('a%5Bb%5D=c');
+ done();
+ });
+
it('stringifies a complicated object', function (done) {
expect(Qs.stringify({ a: { b: 'c', d: 'e' } })).to.equal('a%5Bb%5D=c&a%5Bd%5D=e');
@@ -69,6 +82,34 @@ describe('#stringify', function () {
done();
});
+ it('stringifies an empty object', function (done) {
+
+ var obj = Object.create(null);
+ obj.a = 'b';
+ expect(Qs.stringify(obj)).to.equal('a=b');
+ done();
+ });
+
+ it('returns an empty string for invalid input', function (done) {
+
+ expect(Qs.stringify(undefined)).to.equal('');
+ expect(Qs.stringify(false)).to.equal('');
+ expect(Qs.stringify(null)).to.equal('');
+ expect(Qs.stringify('')).to.equal('');
+ done();
+ });
+
+ it('stringifies an object with an empty object as a child', function (done) {
+
+ var obj = {
+ a: Object.create(null)
+ };
+
+ obj.a.b = 'c';
+ expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c');
+ done();
+ });
+
it('drops keys with a value of undefined', function (done) {
expect(Qs.stringify({ a: undefined })).to.equal('');
@@ -123,7 +164,16 @@ describe('#stringify', function () {
it('stringifies an object using an alternative delimiter', function (done) {
- expect(Qs.stringify({ a: 'b', c: 'd' }, ';')).to.equal('a=b;c=d');
+ expect(Qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' })).to.equal('a=b;c=d');
+ done();
+ });
+
+ it('doesn\'t blow up when Buffer global is missing', function (done) {
+
+ var tempBuffer = global.Buffer;
+ delete global.Buffer;
+ expect(Qs.stringify({ a: 'b', c: 'd' })).to.equal('a=b&c=d');
+ global.Buffer = tempBuffer;
done();
});
});
diff --git a/deps/npm/node_modules/request/package.json b/deps/npm/node_modules/request/package.json
index d68d512fd..51cd6947b 100755..100644
--- a/deps/npm/node_modules/request/package.json
+++ b/deps/npm/node_modules/request/package.json
@@ -7,17 +7,17 @@
"util",
"utility"
],
- "version": "2.46.0",
+ "version": "2.51.0",
"author": {
"name": "Mikeal Rogers",
"email": "mikeal.rogers@gmail.com"
},
"repository": {
"type": "git",
- "url": "https://github.com/mikeal/request.git"
+ "url": "https://github.com/request/request.git"
},
"bugs": {
- "url": "http://github.com/mikeal/request/issues"
+ "url": "http://github.com/request/request/issues"
},
"license": "Apache-2.0",
"engines": {
@@ -26,36 +26,46 @@
"main": "index.js",
"dependencies": {
"bl": "~0.9.0",
- "caseless": "~0.6.0",
+ "caseless": "~0.8.0",
"forever-agent": "~0.5.0",
- "form-data": "~0.1.0",
+ "form-data": "~0.2.0",
"json-stringify-safe": "~5.0.0",
"mime-types": "~1.0.1",
"node-uuid": "~1.4.0",
- "qs": "~1.2.0",
+ "qs": "~2.3.1",
"tunnel-agent": "~0.4.0",
"tough-cookie": ">=0.12.0",
"http-signature": "~0.10.0",
- "oauth-sign": "~0.4.0",
+ "oauth-sign": "~0.5.0",
"hawk": "1.1.1",
"aws-sign2": "~0.5.0",
- "stringstream": "~0.0.4"
+ "stringstream": "~0.0.4",
+ "combined-stream": "~0.0.5"
},
"scripts": {
- "test": "npm run lint && node node_modules/.bin/taper tests/test-*.js",
+ "test": "npm run lint && node node_modules/.bin/taper tests/test-*.js && npm run test-browser",
+ "test-browser": "browserify tests/browser/test.js -o tests/browser/test-browser.js && karma start tests/browser/karma.conf.js",
"lint": "node node_modules/.bin/eslint lib/ *.js tests/ && echo Lint passed."
},
"devDependencies": {
+ "browserify": "~5.9.1",
+ "coveralls": "~2.11.2",
"eslint": "0.5.1",
+ "function-bind": "~1.0.0",
+ "istanbul": "~0.3.2",
+ "karma": "~0.12.21",
+ "karma-cli": "0.0.4",
+ "karma-phantomjs-launcher": "~0.1.4",
+ "karma-tap": "~1.0.1",
"rimraf": "~2.2.8",
"tape": "~3.0.0",
"taper": "~0.3.0"
},
- "gitHead": "7cdd75ec184868bba3be88a780bfb6e10fe33be4",
- "homepage": "https://github.com/mikeal/request",
- "_id": "request@2.46.0",
- "_shasum": "359195d52eaf720bc69742579d04ad6d265a8274",
- "_from": "request@>=2.46.0 <2.47.0",
+ "gitHead": "1c8aca6a9205df58660c676005fb8ec4603d5265",
+ "homepage": "https://github.com/request/request",
+ "_id": "request@2.51.0",
+ "_shasum": "35d00bbecc012e55f907b1bd9e0dbd577bfef26e",
+ "_from": "request@>=2.51.0 <2.52.0",
"_npmVersion": "1.4.14",
"_npmUser": {
"name": "nylen",
@@ -69,13 +79,17 @@
{
"name": "nylen",
"email": "jnylen@gmail.com"
+ },
+ {
+ "name": "fredkschott",
+ "email": "fkschott@gmail.com"
}
],
"dist": {
- "shasum": "359195d52eaf720bc69742579d04ad6d265a8274",
- "tarball": "http://registry.npmjs.org/request/-/request-2.46.0.tgz"
+ "shasum": "35d00bbecc012e55f907b1bd9e0dbd577bfef26e",
+ "tarball": "http://registry.npmjs.org/request/-/request-2.51.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/request/-/request-2.46.0.tgz",
+ "_resolved": "https://registry.npmjs.org/request/-/request-2.51.0.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/release.sh b/deps/npm/node_modules/request/release.sh
index 05e7767fc..7678bf8d8 100755
--- a/deps/npm/node_modules/request/release.sh
+++ b/deps/npm/node_modules/request/release.sh
@@ -1,3 +1,45 @@
#!/bin/sh
-npm version minor && npm publish && npm version patch && git push --tags && git push origin master
+if [ -z "`which github-changes`" ]; then
+ # specify version because github-changes "is under heavy development. Things
+ # may break between releases" until 0.1.0
+ echo "First, do: [sudo] npm install -g github-changes@0.0.14"
+ exit 1
+fi
+
+if [ -d .git/refs/remotes/upstream ]; then
+ remote=upstream
+else
+ remote=origin
+fi
+
+# Increment v2.x.y -> v2.x+1.0
+npm version minor || exit 1
+
+# Generate changelog from pull requests
+github-changes -o request -r request \
+ --auth --verbose \
+ --file CHANGELOG.md \
+ --only-pulls --use-commit-body \
+ --date-format '(YYYY/MM/DD)' \
+ || exit 1
+
+# Since the tag for the new version hasn't been pushed yet, any changes in it
+# will be marked as "upcoming"
+version="$(grep '"version"' package.json | cut -d'"' -f4)"
+sed -i -e "s/^### upcoming/### v$version/" CHANGELOG.md
+
+# This may fail if no changelog updates
+# TODO: would this ever actually happen? handle it better?
+git add CHANGELOG.md; git commit -m 'Update changelog'
+
+# Publish the new version to npm
+npm publish || exit 1
+
+# Increment v2.x.0 -> v2.x.1
+# For rationale, see:
+# https://github.com/request/oauth-sign/issues/10#issuecomment-58917018
+npm version patch || exit 1
+
+# Push back to the main repo
+git push $remote master --tags || exit 1
diff --git a/deps/npm/node_modules/request/request.js b/deps/npm/node_modules/request/request.js
index 466d91655..90220d2ba 100644
--- a/deps/npm/node_modules/request/request.js
+++ b/deps/npm/node_modules/request/request.js
@@ -25,6 +25,7 @@ var http = require('http')
, copy = require('./lib/copy')
, debug = require('./lib/debug')
, net = require('net')
+ , CombinedStream = require('combined-stream')
var safeStringify = helpers.safeStringify
, md5 = helpers.md5
@@ -56,7 +57,6 @@ var defaultProxyHeaderWhiteList = [
'expect',
'max-forwards',
'pragma',
- 'proxy-authorization',
'referer',
'te',
'transfer-encoding',
@@ -64,6 +64,10 @@ var defaultProxyHeaderWhiteList = [
'via'
]
+var defaultProxyHeaderExclusiveList = [
+ 'proxy-authorization'
+]
+
function filterForNonReserved(reserved, options) {
// Filter out properties that are not reserved.
// Reserved values are passed in at call site.
@@ -111,9 +115,15 @@ function constructProxyHost(uriObject) {
}
function constructProxyHeaderWhiteList(headers, proxyHeaderWhiteList) {
+ var whiteList = proxyHeaderWhiteList
+ .reduce(function (set, header) {
+ set[header.toLowerCase()] = true
+ return set
+ }, {})
+
return Object.keys(headers)
.filter(function (header) {
- return proxyHeaderWhiteList.indexOf(header.toLowerCase()) !== -1
+ return whiteList[header.toLowerCase()]
})
.reduce(function (set, header) {
set[header] = headers[header]
@@ -123,23 +133,13 @@ function constructProxyHeaderWhiteList(headers, proxyHeaderWhiteList) {
function construcTunnelOptions(request) {
var proxy = request.proxy
- var proxyHeaders = request.proxyHeaders
- var proxyAuth
-
- if (proxy.auth) {
- proxyAuth = proxy.auth
- }
-
- if (!proxy.auth && request.proxyAuthorization) {
- proxyHeaders['Proxy-Authorization'] = request.proxyAuthorization
- }
var tunnelOptions = {
proxy: {
host: proxy.hostname,
port: +proxy.port,
- proxyAuth: proxyAuth,
- headers: proxyHeaders
+ proxyAuth: proxy.auth,
+ headers: request.proxyHeaders
},
rejectUnauthorized: request.rejectUnauthorized,
headers: request.headers,
@@ -199,7 +199,8 @@ function getProxyFromURI(uri) {
}
} else {
noProxyItem = noProxyItem.replace(/^\.*/, '.')
- if (hostname.indexOf(noProxyItem) === hostname.length - noProxyItem.length) {
+ var isMatchedAt = hostname.indexOf(noProxyItem)
+ if (isMatchedAt > -1 && isMatchedAt === hostname.length - noProxyItem.length) {
return null
}
}
@@ -303,14 +304,28 @@ Request.prototype.setupTunnel = function () {
return false
}
+ // Always include `defaultProxyHeaderExclusiveList`
+
+ if (!self.proxyHeaderExclusiveList) {
+ self.proxyHeaderExclusiveList = []
+ }
+
+ var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)
+
+ // Treat `proxyHeaderExclusiveList` as part of `proxyHeaderWhiteList`
+
if (!self.proxyHeaderWhiteList) {
self.proxyHeaderWhiteList = defaultProxyHeaderWhiteList
}
+ var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)
+
var proxyHost = constructProxyHost(self.uri)
- self.proxyHeaders = constructProxyHeaderWhiteList(self.headers, self.proxyHeaderWhiteList)
+ self.proxyHeaders = constructProxyHeaderWhiteList(self.headers, proxyHeaderWhiteList)
self.proxyHeaders.host = proxyHost
+ proxyHeaderExclusiveList.forEach(self.removeHeader, self)
+
var tunnelFn = getTunnelFn(self)
var tunnelOptions = construcTunnelOptions(self)
@@ -331,12 +346,6 @@ Request.prototype.init = function (options) {
caseless.httpify(self, self.headers)
- // Never send proxy-auth to the endpoint!
- if (self.hasHeader('proxy-authorization')) {
- self.proxyAuthorization = self.getHeader('proxy-authorization')
- self.removeHeader('proxy-authorization')
- }
-
if (!self.method) {
self.method = options.method || 'GET'
}
@@ -447,11 +456,12 @@ Request.prototype.init = function (options) {
self.setHost = false
if (!self.hasHeader('host')) {
- self.setHeader('host', self.uri.hostname)
+ var hostHeaderName = self.originalHostHeaderName || 'host'
+ self.setHeader(hostHeaderName, self.uri.hostname)
if (self.uri.port) {
if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') &&
!(self.uri.port === 443 && self.uri.protocol === 'https:') ) {
- self.setHeader('host', self.getHeader('host') + (':' + self.uri.port) )
+ self.setHeader(hostHeaderName, self.getHeader('host') + (':' + self.uri.port) )
}
}
self.setHost = true
@@ -556,17 +566,12 @@ Request.prototype.init = function (options) {
self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)
}
- if (self.proxy && !self.tunnel) {
- if (self.proxy.auth && !self.proxyAuthorization) {
- var proxyAuthPieces = self.proxy.auth.split(':').map(function(item){
- return querystring.unescape(item)
- })
- var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
- self.proxyAuthorization = authHeader
- }
- if (self.proxyAuthorization) {
- self.setHeader('proxy-authorization', self.proxyAuthorization)
- }
+ if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) {
+ var proxyAuthPieces = self.proxy.auth.split(':').map(function(item){
+ return querystring.unescape(item)
+ })
+ var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
+ self.setHeader('proxy-authorization', authHeader)
}
if (self.proxy && !self.tunnel) {
@@ -575,7 +580,8 @@ Request.prototype.init = function (options) {
if (options.json) {
self.json(options.json)
- } else if (options.multipart) {
+ }
+ if (options.multipart) {
self.boundary = uuid()
self.multipart(options.multipart)
}
@@ -634,15 +640,7 @@ Request.prototype.init = function (options) {
if (self.pool === false) {
self.agent = false
} else {
- self.agent = self.agent || self.getAgent()
- if (self.maxSockets) {
- // Don't use our pooling if node has the refactored client
- self.agent.maxSockets = self.maxSockets
- }
- if (self.pool.maxSockets) {
- // Don't use our pooling if node has the refactored client
- self.agent.maxSockets = self.pool.maxSockets
- }
+ self.agent = self.agent || self.getNewAgent()
}
self.on('pipe', function (src) {
@@ -684,6 +682,9 @@ Request.prototype.init = function (options) {
if (self._form) {
self._form.pipe(self)
}
+ if (self._multipart) {
+ self._multipart.pipe(self)
+ }
if (self.body) {
if (Array.isArray(self.body)) {
self.body.forEach(function (part) {
@@ -753,7 +754,7 @@ Request.prototype._updateProtocol = function () {
// if there's an agent, we need to get a new one.
if (self.agent) {
- self.agent = self.getAgent()
+ self.agent = self.getNewAgent()
}
} else {
@@ -774,12 +775,12 @@ Request.prototype._updateProtocol = function () {
// if there's an agent, then get a new one.
if (self.agent) {
self.agent = null
- self.agent = self.getAgent()
+ self.agent = self.getNewAgent()
}
}
}
-Request.prototype.getAgent = function () {
+Request.prototype.getNewAgent = function () {
var self = this
var Agent = self.agentClass
var options = {}
@@ -816,16 +817,6 @@ Request.prototype.getAgent = function () {
poolKey += Agent.name
}
- if (!self.httpModule.globalAgent) {
- // node 0.4.x
- options.host = self.host
- options.port = self.port
- if (poolKey) {
- poolKey += ':'
- }
- poolKey += self.host + ':' + self.port
- }
-
// ca option is only relevant if proxy or destination are https
var proxy = self.proxy
if (typeof proxy === 'string') {
@@ -885,6 +876,10 @@ Request.prototype.getAgent = function () {
// generate a new agent for this setting if none yet exists
if (!self.pool[poolKey]) {
self.pool[poolKey] = new Agent(options)
+ // properly set maxSockets on new agents
+ if (self.pool.maxSockets) {
+ self.pool[poolKey].maxSockets = self.pool.maxSockets
+ }
}
return self.pool[poolKey]
@@ -1015,8 +1010,13 @@ Request.prototype.onRequestResponse = function (response) {
}
// Save the original host before any redirect (if it changes, we need to
- // remove any authorization headers)
- self.originalHost = self.headers.host
+ // remove any authorization headers). Also remember the case of the header
+ // name because lots of broken servers expect Host instead of host and we
+ // want the caller to be able to specify this.
+ self.originalHost = self.getHeader('host')
+ if (!self.originalHostHeaderName) {
+ self.originalHostHeaderName = self.hasHeader('host')
+ }
if (self.setHost) {
self.removeHeader('host')
}
@@ -1308,7 +1308,7 @@ Request.prototype.onRequestResponse = function (response) {
if (self._json) {
try {
- response.body = JSON.parse(response.body)
+ response.body = JSON.parse(response.body, self._jsonReviver)
} catch (e) {}
}
debug('emitting complete', self.uri.href)
@@ -1421,12 +1421,23 @@ Request.prototype.form = function (form) {
}
Request.prototype.multipart = function (multipart) {
var self = this
- self.body = []
- if (!self.hasHeader('content-type')) {
+ var chunked = (multipart instanceof Array) || (multipart.chunked === undefined) || multipart.chunked
+ multipart = multipart.data || multipart
+
+ var items = chunked ? new CombinedStream() : []
+ function add (part) {
+ return chunked ? items.append(part) : items.push(new Buffer(part))
+ }
+
+ if (chunked) {
+ self.setHeader('transfer-encoding', 'chunked')
+ }
+
+ var headerName = self.hasHeader('content-type')
+ if (!headerName || self.headers[headerName].indexOf('multipart') === -1) {
self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)
} else {
- var headerName = self.hasHeader('content-type')
self.setHeader(headerName, self.headers[headerName].split(';')[0] + '; boundary=' + self.boundary)
}
@@ -1435,7 +1446,7 @@ Request.prototype.multipart = function (multipart) {
}
if (self.preambleCRLF) {
- self.body.push(new Buffer('\r\n'))
+ add('\r\n')
}
multipart.forEach(function (part) {
@@ -1443,22 +1454,23 @@ Request.prototype.multipart = function (multipart) {
if(typeof body === 'undefined') {
throw new Error('Body attribute missing in multipart.')
}
- delete part.body
var preamble = '--' + self.boundary + '\r\n'
Object.keys(part).forEach(function (key) {
+ if (key === 'body') { return }
preamble += key + ': ' + part[key] + '\r\n'
})
preamble += '\r\n'
- self.body.push(new Buffer(preamble))
- self.body.push(new Buffer(body))
- self.body.push(new Buffer('\r\n'))
+ add(preamble)
+ add(body)
+ add('\r\n')
})
- self.body.push(new Buffer('--' + self.boundary + '--'))
+ add('--' + self.boundary + '--')
if (self.postambleCRLF) {
- self.body.push(new Buffer('\r\n'))
+ add('\r\n')
}
+ self[chunked ? '_multipart' : 'body'] = items
return self
}
Request.prototype.json = function (val) {
@@ -1470,7 +1482,7 @@ Request.prototype.json = function (val) {
self._json = true
if (typeof val === 'boolean') {
- if (typeof self.body === 'object') {
+ if (self.body !== undefined && self.getHeader('content-type') !== 'application/x-www-form-urlencoded') {
self.body = safeStringify(self.body)
if (!self.hasHeader('content-type')) {
self.setHeader('content-type', 'application/json')
@@ -1483,6 +1495,10 @@ Request.prototype.json = function (val) {
}
}
+ if (typeof self.jsonReviver === 'function') {
+ self._jsonReviver = self.jsonReviver
+ }
+
return self
}
Request.prototype.getHeader = function (name, headers) {
@@ -1617,17 +1633,26 @@ Request.prototype.oauth = function (_oauth) {
if (!oa.oauth_nonce) {
oa.oauth_nonce = uuid().replace(/-/g, '')
}
+ if (!oa.oauth_signature_method) {
+ oa.oauth_signature_method = 'HMAC-SHA1'
+ }
- oa.oauth_signature_method = 'HMAC-SHA1'
-
- var consumer_secret = oa.oauth_consumer_secret
+ var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key
delete oa.oauth_consumer_secret
+ delete oa.oauth_private_key
var token_secret = oa.oauth_token_secret
delete oa.oauth_token_secret
var baseurl = self.uri.protocol + '//' + self.uri.host + self.uri.pathname
var params = self.qsLib.parse([].concat(query, form, self.qsLib.stringify(oa)).join('&'))
- var signature = oauth.hmacsign(self.method, baseurl, params, consumer_secret, token_secret)
+
+ var signature = oauth.sign(
+ oa.oauth_signature_method,
+ self.method,
+ baseurl,
+ params,
+ consumer_secret_or_private_key,
+ token_secret)
var realm = _oauth.realm ? 'realm="' + _oauth.realm + '",' : ''
var authHeader = 'OAuth ' + realm +
@@ -1736,6 +1761,9 @@ Request.prototype.destroy = function () {
Request.defaultProxyHeaderWhiteList =
defaultProxyHeaderWhiteList.slice()
+Request.defaultProxyHeaderExclusiveList =
+ defaultProxyHeaderExclusiveList.slice()
+
// Exports
Request.prototype.toJSON = requestToJSON
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index 7e1961d45..1ec808954 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -16,12 +16,12 @@ As a command-line utility:
$ semver -h
- Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]
+ Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | --preid <identifier> | -l | -rv]
Test if version(s) satisfy the supplied range(s), and sort them.
Multiple versions or ranges may be supplied, unless increment
- or decrement options are specified. In that case, only a single
- version may be used, and it is incremented by the specified level
+ option is specified. In that case, only a single version may
+ be used, and it is incremented by the specified level
Program exits successfully if any valid version satisfies
all supplied ranges, and prints all satisfying versions.
@@ -101,6 +101,30 @@ the user is indicating that they are aware of the risk. However, it
is still not appropriate to assume that they have opted into taking a
similar risk on the *next* set of prerelease versions.
+#### Prerelease Identifiers
+
+The method `.inc` takes an additional `identifier` string argument that
+will append the value of the string as a prerelease identifier:
+
+````javascript
+> semver.inc('1.2.3', 'pre', 'beta')
+'1.2.4-beta.0'
+```
+
+command-line example:
+
+```shell
+$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+```
+
+Which then can be used to increment further:
+
+```shell
+$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+```
+
### Advanced Range Syntax
Advanced range syntax desugars to primitive comparators in
@@ -161,8 +185,6 @@ comparator. Allows minor-level changes if not.
`1.2.4-beta.2` would not, because it is a prerelease of a
different `[major, minor, patch]` tuple.
-Note: this is the same as the `~>` operator in rubygems.
-
#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
Allows changes that do not modify the left-most non-zero digit in the
@@ -245,6 +267,9 @@ strings that they parse.
`v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions
in descending order when passed to `Array.sort()`.
+* `diff(v1, v2)`: Returns difference between two versions by the release type
+ (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
+ or null if the versions are the same.
### Ranges
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index a22dc9737..51326d7a3 100644
--- a/deps/npm/node_modules/semver/package.json
+++ b/deps/npm/node_modules/semver/package.json
@@ -1,6 +1,6 @@
{
"name": "semver",
- "version": "4.1.0",
+ "version": "4.2.0",
"description": "The semantic version parser used by npm.",
"main": "semver.js",
"browser": "semver.browser.js",
@@ -21,16 +21,16 @@
"bin": {
"semver": "./bin/semver"
},
- "gitHead": "f8db569b9fd00788d14064aaf81854ed81e1337a",
+ "gitHead": "f353d3337dd9bef990b6873e281342260b4e63ae",
"bugs": {
"url": "https://github.com/isaacs/node-semver/issues"
},
"homepage": "https://github.com/isaacs/node-semver",
- "_id": "semver@4.1.0",
- "_shasum": "bc80a9ff68532814362cc3cfda3c7b75ed9c321c",
- "_from": "semver@>=4.1.0 <5.0.0",
- "_npmVersion": "2.1.3",
- "_nodeVersion": "0.10.31",
+ "_id": "semver@4.2.0",
+ "_shasum": "a571fd4adbe974fe32bd9cb4c5e249606f498423",
+ "_from": "semver@>=4.2.0 <4.3.0",
+ "_npmVersion": "2.1.14",
+ "_nodeVersion": "0.10.33",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -46,10 +46,10 @@
}
],
"dist": {
- "shasum": "bc80a9ff68532814362cc3cfda3c7b75ed9c321c",
- "tarball": "http://registry.npmjs.org/semver/-/semver-4.1.0.tgz"
+ "shasum": "a571fd4adbe974fe32bd9cb4c5e249606f498423",
+ "tarball": "http://registry.npmjs.org/semver/-/semver-4.2.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/semver/-/semver-4.1.0.tgz",
+ "_resolved": "https://registry.npmjs.org/semver/-/semver-4.2.0.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/semver/semver.browser.js b/deps/npm/node_modules/semver/semver.browser.js
index 712de835c..49d785650 100644
--- a/deps/npm/node_modules/semver/semver.browser.js
+++ b/deps/npm/node_modules/semver/semver.browser.js
@@ -454,6 +454,33 @@ function inc(version, release, loose, identifier) {
}
}
+exports.diff = diff;
+function diff(version1, version2) {
+ if (eq(version1, version2)) {
+ return null;
+ } else {
+ var v1 = parse(version1);
+ var v2 = parse(version2);
+ if (v1.prerelease.length || v2.prerelease.length) {
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return 'pre'+key;
+ }
+ }
+ }
+ return 'prerelease';
+ }
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return key;
+ }
+ }
+ }
+ }
+}
+
exports.compareIdentifiers = compareIdentifiers;
var numeric = /^[0-9]+$/;
diff --git a/deps/npm/node_modules/semver/semver.browser.js.gz b/deps/npm/node_modules/semver/semver.browser.js.gz
index e30660555..c6b27c9ad 100644
--- a/deps/npm/node_modules/semver/semver.browser.js.gz
+++ b/deps/npm/node_modules/semver/semver.browser.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/semver.js b/deps/npm/node_modules/semver/semver.js
index 22673fdd1..026173eab 100644
--- a/deps/npm/node_modules/semver/semver.js
+++ b/deps/npm/node_modules/semver/semver.js
@@ -464,6 +464,33 @@ function inc(version, release, loose, identifier) {
}
}
+exports.diff = diff;
+function diff(version1, version2) {
+ if (eq(version1, version2)) {
+ return null;
+ } else {
+ var v1 = parse(version1);
+ var v2 = parse(version2);
+ if (v1.prerelease.length || v2.prerelease.length) {
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return 'pre'+key;
+ }
+ }
+ }
+ return 'prerelease';
+ }
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return key;
+ }
+ }
+ }
+ }
+}
+
exports.compareIdentifiers = compareIdentifiers;
var numeric = /^[0-9]+$/;
diff --git a/deps/npm/node_modules/semver/semver.min.js b/deps/npm/node_modules/semver/semver.min.js
index 56c9249e1..2f07e16ed 100644
--- a/deps/npm/node_modules/semver/semver.min.js
+++ b/deps/npm/node_modules/semver/semver.min.js
@@ -1 +1 @@
-(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[a]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[a]+")";var p=n++;t[p]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var c=n++;t[c]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[o]+t[p]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[c]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var b=n++;t[b]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var $=n++;t[$]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:"+t[p]+")?"+t[v]+"?"+")?)?";var k=n++;t[k]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:"+t[c]+")?"+t[v]+"?"+")?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[$]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[$]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[$]+"$";var N=n++;t[N]="^"+t[A]+t[k]+"$";var P=n++;t[P]="^"+t[y]+"\\s*("+w+")$|^$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+g+")$|^$";var q=n++;t[q]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[$]+")";r[q]=new RegExp(t[q],"g");var L="$1$2$3";var X=n++;t[X]="^\\s*("+t[$]+")"+"\\s+-\\s+"+"("+t[$]+")"+"\\s*$";var _=n++;t[_]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new H(e,t).inc(r,n).version}catch(i){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=ar;function ar(e,r,t){return W(e,r,t)!==0}e.gte=or;function or(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=ar(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=or(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===pr)this.value="";else this.value=this.operator+this.semver.version}var pr={};lr.prototype.parse=function(e){var t=this.loose?r[P]:r[Z];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(this.operator==="=")this.operator="";if(!n[2])this.semver=pr;else this.semver=new H(n[2],this.loose)};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){if(this.semver===pr)return true;if(typeof e==="string")e=new H(e,this.loose);return ur(e,this.operator,this.semver,this.loose)};e.Range=cr;function cr(e,r){if(e instanceof cr&&e.loose===r)return e;if(!(this instanceof cr))return new cr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}cr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};cr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};cr.prototype.toString=function(){return this.range};cr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[_]:r[X];e=e.replace(n,kr);e=e.replace(r[q],L);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[P]:r[Z];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new cr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=br(e,r);e=$r(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[N]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=mr(t);var o=a||mr(n);var f=o||mr(i);var u=f;if(r==="="&&u)r="";if(a){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(o)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(o){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function $r(e,t){return e.trim().replace(r[O],"")}function kr(e,r,t,n,i,s,a,o,f,u,l,p,c){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0";else if(mr(i))r=">="+t+"."+n+".0";else r=">="+r;if(mr(f))o="";else if(mr(u))o="<"+(+f+1)+".0.0";else if(mr(l))o="<"+f+"."+(+u+1)+".0";else if(p)o="<="+f+"."+u+"."+l+"-"+p;else o="<="+o;return(r+" "+o).trim()}cr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new H(e,this.loose);for(var r=0;r<this.set.length;r++){if(Er(this.set[r],e))return true}return false};function Er(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===pr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new cr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new cr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Tr(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Tr(e,r,">",t)}e.outside=Tr;function Tr(e,r,t,n){e=new H(e,n);r=new cr(r,n);var i,s,a,o,f;switch(t){case">":i=nr;s=fr;a=ir;o=">";f=">=";break;case"<":i=ir;s=or;a=nr;o="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var p=null;var c=null;l.forEach(function(e){p=p||e;c=c||e;if(i(e.semver,p.semver,n)){p=e}else if(a(e.semver,c.semver,n)){c=e}});if(p.operator===o||p.operator===f){return false}if((!c.operator||c.operator===o)&&s(e,c.semver)){return false}else if(c.operator===f&&a(e,c.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
+(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[a]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[a]+")";var p=n++;t[p]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var c=n++;t[c]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[o]+t[p]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[c]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var j=n++;t[j]=t[s]+"|x|X|\\*";var b=n++;t[b]=t[i]+"|x|X|\\*";var $=n++;t[$]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:"+t[p]+")?"+t[v]+"?"+")?)?";var k=n++;t[k]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:"+t[c]+")?"+t[v]+"?"+")?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[$]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[$]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[$]+"$";var N=n++;t[N]="^"+t[A]+t[k]+"$";var P=n++;t[P]="^"+t[y]+"\\s*("+w+")$|^$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+g+")$|^$";var q=n++;t[q]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[$]+")";r[q]=new RegExp(t[q],"g");var L="$1$2$3";var X=n++;t[X]="^\\s*("+t[$]+")"+"\\s+-\\s+"+"("+t[$]+")"+"\\s*$";var _=n++;t[_]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return U(this.major,e.major)||U(this.minor,e.minor)||U(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return U(t,n)}while(++r)};H.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new H(e,t).inc(r,n).version}catch(i){return null}}e.diff=K;function K(e,r){if(ar(e,r)){return null}else{var t=D(e);var n=D(r);if(t.prerelease.length||n.prerelease.length){for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return"pre"+i}}}return"prerelease"}for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return i}}}}}e.compareIdentifiers=U;var Q=/^[0-9]+$/;function U(e,r){var t=Q.test(e);var n=Q.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=W;function W(e,r){return U(r,e)}e.compare=Y;function Y(e,r,t){return new H(e,t).compare(r)}e.compareLoose=er;function er(e,r){return Y(e,r,true)}e.rcompare=rr;function rr(e,r,t){return Y(r,e,t)}e.sort=tr;function tr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=nr;function nr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=ir;function ir(e,r,t){return Y(e,r,t)>0}e.lt=sr;function sr(e,r,t){return Y(e,r,t)<0}e.eq=ar;function ar(e,r,t){return Y(e,r,t)===0}e.neq=or;function or(e,r,t){return Y(e,r,t)!==0}e.gte=fr;function fr(e,r,t){return Y(e,r,t)>=0}e.lte=ur;function ur(e,r,t){return Y(e,r,t)<=0}e.cmp=lr;function lr(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=ar(e,t,n);break;case"!=":i=or(e,t,n);break;case">":i=ir(e,t,n);break;case">=":i=fr(e,t,n);break;case"<":i=sr(e,t,n);break;case"<=":i=ur(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=pr;function pr(e,r){if(e instanceof pr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.parse(e);if(this.semver===cr)this.value="";else this.value=this.operator+this.semver.version}var cr={};pr.prototype.parse=function(e){var t=this.loose?r[P]:r[Z];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(this.operator==="=")this.operator="";if(!n[2])this.semver=cr;else this.semver=new H(n[2],this.loose)};pr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};pr.prototype.toString=function(){return this.value};pr.prototype.test=function(e){if(this.semver===cr)return true;if(typeof e==="string")e=new H(e,this.loose);return lr(e,this.operator,this.semver,this.loose)};e.Range=hr;function hr(e,r){if(e instanceof hr&&e.loose===r)return e;if(!(this instanceof hr))return new hr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}hr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};hr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};hr.prototype.toString=function(){return this.range};hr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[_]:r[X];e=e.replace(n,Er);e=e.replace(r[q],L);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[P]:r[Z];var s=e.split(" ").map(function(e){return mr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new pr(e,t)});return s};e.toComparators=vr;function vr(e,r){return new hr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function mr(e,r){e=yr(e,r);e=wr(e,r);e=br(e,r);e=kr(e,r);return e}function gr(e){return!e||e.toLowerCase()==="x"||e==="*"}function wr(e,r){return e.trim().split(/\s+/).map(function(e){return dr(e,r)}).join(" ")}function dr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(gr(r))s="";else if(gr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(gr(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function yr(e,r){return e.trim().split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){var n=t?r[N]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(gr(r))s="";else if(gr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(gr(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return $r(e,r)}).join(" ")}function $r(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=gr(t);var o=a||gr(n);var f=o||gr(i);var u=f;if(r==="="&&u)r="";if(a){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(o)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(o){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function kr(e,t){return e.trim().replace(r[O],"")}function Er(e,r,t,n,i,s,a,o,f,u,l,p,c){if(gr(t))r="";else if(gr(n))r=">="+t+".0.0";else if(gr(i))r=">="+t+"."+n+".0";else r=">="+r;if(gr(f))o="";else if(gr(u))o="<"+(+f+1)+".0.0";else if(gr(l))o="<"+f+"."+(+u+1)+".0";else if(p)o="<="+f+"."+u+"."+l+"-"+p;else o="<="+o;return(r+" "+o).trim()}hr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new H(e,this.loose);for(var r=0;r<this.set.length;r++){if(xr(this.set[r],e))return true}return false};function xr(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===cr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=Rr;function Rr(e,r,t){try{r=new hr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Sr;function Sr(e,r,t){return e.filter(function(e){return Rr(e,r,t)}).sort(function(e,r){return rr(e,r,t)})[0]||null}e.validRange=Vr;function Vr(e,r){try{return new hr(e,r).range||"*"}catch(t){return null}}e.ltr=Ir;function Ir(e,r,t){return Ar(e,r,"<",t)}e.gtr=Tr;function Tr(e,r,t){return Ar(e,r,">",t)}e.outside=Ar;function Ar(e,r,t,n){e=new H(e,n);r=new hr(r,n);var i,s,a,o,f;switch(t){case">":i=ir;s=ur;a=sr;o=">";f=">=";break;case"<":i=sr;s=fr;a=ir;o="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Rr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var p=null;var c=null;l.forEach(function(e){p=p||e;c=c||e;if(i(e.semver,p.semver,n)){p=e}else if(a(e.semver,c.semver,n)){c=e}});if(p.operator===o||p.operator===f){return false}if((!c.operator||c.operator===o)&&s(e,c.semver)){return false}else if(c.operator===f&&a(e,c.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
diff --git a/deps/npm/node_modules/semver/semver.min.js.gz b/deps/npm/node_modules/semver/semver.min.js.gz
index 2362824d1..4a48bed6b 100644
--- a/deps/npm/node_modules/semver/semver.min.js.gz
+++ b/deps/npm/node_modules/semver/semver.min.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/test/index.js b/deps/npm/node_modules/semver/test/index.js
index de8acaedf..1528bb778 100644
--- a/deps/npm/node_modules/semver/test/index.js
+++ b/deps/npm/node_modules/semver/test/index.js
@@ -13,6 +13,7 @@ var lte = semver.lte;
var satisfies = semver.satisfies;
var validRange = semver.validRange;
var inc = semver.inc;
+var diff = semver.diff;
var replaceStars = semver.replaceStars;
var toComparators = semver.toComparators;
var SemVer = semver.SemVer;
@@ -411,6 +412,34 @@ test('\nincrement versions test', function(t) {
t.end();
});
+test('\ndiff versions test', function(t) {
+// [version1, version2, result]
+// diff(version1, version2) -> result
+ [['1.2.3', '0.2.3', 'major'],
+ ['1.4.5', '0.2.3', 'major'],
+ ['1.2.3', '2.0.0-pre', 'premajor'],
+ ['1.2.3', '1.3.3', 'minor'],
+ ['1.0.1', '1.1.0-pre', 'preminor'],
+ ['1.2.3', '1.2.4', 'patch'],
+ ['1.2.3', '1.2.4-pre', 'prepatch'],
+ ['0.0.1', '0.0.1-pre', 'prerelease'],
+ ['0.0.1', '0.0.1-pre-2', 'prerelease'],
+ ['1.1.0', '1.1.0-pre', 'prerelease'],
+ ['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'],
+ ['1.0.0', '1.0.0', null]
+
+ ].forEach(function(v) {
+ var version1 = v[0];
+ var version2 = v[1];
+ var wanted = v[2];
+ var found = diff(version1, version2);
+ var cmd = 'diff(' + version1 + ', ' + version2 + ')';
+ t.equal(found, wanted, cmd + ' === ' + wanted);
+ });
+
+ t.end();
+});
+
test('\nvalid range test', function(t) {
// [range, result]
// validRange(range) -> result
diff --git a/deps/npm/node_modules/tar/.travis.yml b/deps/npm/node_modules/tar/.travis.yml
index 2d26206d5..fca8ef019 100644
--- a/deps/npm/node_modules/tar/.travis.yml
+++ b/deps/npm/node_modules/tar/.travis.yml
@@ -1,3 +1,4 @@
language: node_js
node_js:
- - 0.6
+ - 0.10
+ - 0.11
diff --git a/deps/npm/node_modules/tar/examples/extracter.js b/deps/npm/node_modules/tar/examples/extracter.js
index e150abf25..f6253a72c 100644
--- a/deps/npm/node_modules/tar/examples/extracter.js
+++ b/deps/npm/node_modules/tar/examples/extracter.js
@@ -1,11 +1,19 @@
var tar = require("../tar.js")
, fs = require("fs")
+
+function onError(err) {
+ console.error('An error occurred:', err)
+}
+
+function onEnd() {
+ console.log('Extracted!')
+}
+
+var extractor = tar.Extract({path: __dirname + "/extract"})
+ .on('error', onError)
+ .on('end', onEnd);
+
fs.createReadStream(__dirname + "/../test/fixtures/c.tar")
- .pipe(tar.Extract({ path: __dirname + "/extract" }))
- .on("error", function (er) {
- console.error("error here")
- })
- .on("end", function () {
- console.error("done")
- })
+ .on('error', onError)
+ .pipe(extractor);
diff --git a/deps/npm/node_modules/tar/examples/packer.js b/deps/npm/node_modules/tar/examples/packer.js
index ebe38926e..039969ce3 100644
--- a/deps/npm/node_modules/tar/examples/packer.js
+++ b/deps/npm/node_modules/tar/examples/packer.js
@@ -2,9 +2,23 @@ var tar = require("../tar.js")
, fstream = require("fstream")
, fs = require("fs")
-var dir_destination = fs.createWriteStream('dir.tar')
+var dirDest = fs.createWriteStream('dir.tar')
+
+
+function onError(err) {
+ console.error('An error occurred:', err)
+}
+
+function onEnd() {
+ console.log('Packed!')
+}
+
+var packer = tar.Pack({ noProprietary: true })
+ .on('error', onError)
+ .on('end', onEnd);
// This must be a "directory"
fstream.Reader({ path: __dirname, type: "Directory" })
- .pipe(tar.Pack({ noProprietary: true }))
- .pipe(dir_destination) \ No newline at end of file
+ .on('error', onError)
+ .pipe(packer)
+ .pipe(dirDest)
diff --git a/deps/npm/node_modules/tar/lib/extract.js b/deps/npm/node_modules/tar/lib/extract.js
index c34a81e21..9fb1e6fb1 100644
--- a/deps/npm/node_modules/tar/lib/extract.js
+++ b/deps/npm/node_modules/tar/lib/extract.js
@@ -57,6 +57,14 @@ function Extract (opts) {
me.resume()
})
+ this._fst.on('error', function(err) {
+ me.emit('error', err)
+ })
+
+ this._fst.on('drain', function() {
+ me.emit('drain')
+ })
+
// this._fst.on("end", function () {
// console.error("\nEEEE Extract End", me._fst.path)
// })
diff --git a/deps/npm/node_modules/tar/lib/parse.js b/deps/npm/node_modules/tar/lib/parse.js
index 009a85f41..8517c481b 100644
--- a/deps/npm/node_modules/tar/lib/parse.js
+++ b/deps/npm/node_modules/tar/lib/parse.js
@@ -146,7 +146,7 @@ Parse.prototype._startEntry = function (c) {
e.header = header
e.tar_file_offset = this.position
e.tar_block = this.position / 512
- this.emit("error", e)
+ return this.emit("error", e)
}
switch (tar.types[header.type]) {
diff --git a/deps/npm/node_modules/tar/package.json b/deps/npm/node_modules/tar/package.json
index 207eaa1fd..b4a120992 100644
--- a/deps/npm/node_modules/tar/package.json
+++ b/deps/npm/node_modules/tar/package.json
@@ -6,7 +6,7 @@
},
"name": "tar",
"description": "tar for node",
- "version": "1.0.1",
+ "version": "1.0.3",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-tar.git"
@@ -23,33 +23,18 @@
"devDependencies": {
"graceful-fs": "^3.0.2",
"rimraf": "1.x",
- "tap": "0.x"
+ "tap": "0.x",
+ "mkdirp": "^0.5.0"
},
"license": "BSD",
- "gitHead": "476bf6f5882b9c33d1cbf66f175d0f25e3981044",
+ "readme": "# node-tar\n\nTar for Node.js.\n\n[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)\n\n## API\n\nSee `examples/` for usage examples.\n\n### var tar = require('tar')\n\nReturns an object with `.Pack`, `.Extract` and `.Parse` methods.\n\n### tar.Pack([properties])\n\nReturns a through stream. Use\n[fstream](https://npmjs.org/package/fstream) to write files into the\npack stream and you will receive tar archive data from the pack\nstream.\n\nThis only works with directories, it does not work with individual files.\n\nThe optional `properties` object are used to set properties in the tar\n'Global Extended Header'.\n\n### tar.Extract([options])\n\nReturns a through stream. Write tar data to the stream and the files\nin the tarball will be extracted onto the filesystem.\n\n`options` can be:\n\n```js\n{\n path: '/path/to/extract/tar/into',\n strip: 0, // how many path segments to strip from the root when extracting\n}\n```\n\n`options` also get passed to the `fstream.Writer` instance that `tar`\nuses internally.\n\n### tar.Parse()\n\nReturns a writable stream. Write tar data to it and it will emit\n`entry` events for each entry parsed from the tarball. This is used by\n`tar.Extract`.\n",
+ "readmeFilename": "README.md",
+ "gitHead": "f4151128c585da236c6b1e278b762ecaedc20c15",
"bugs": {
"url": "https://github.com/isaacs/node-tar/issues"
},
"homepage": "https://github.com/isaacs/node-tar",
- "_id": "tar@1.0.1",
- "_shasum": "6075b5a1f236defe0c7e3756d3d9b3ebdad0f19a",
- "_from": "tar@1.0.1",
- "_npmVersion": "1.4.23",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "dist": {
- "shasum": "6075b5a1f236defe0c7e3756d3d9b3ebdad0f19a",
- "tarball": "http://registry.npmjs.org/tar/-/tar-1.0.1.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/tar/-/tar-1.0.1.tgz",
- "readme": "ERROR: No README data found!"
+ "_id": "tar@1.0.3",
+ "_shasum": "15bcdab244fa4add44e4244a0176edb8aa9a2b44",
+ "_from": "tar@>=1.0.3 <1.1.0"
}
diff --git a/deps/npm/node_modules/tar/test/extract.js b/deps/npm/node_modules/tar/test/extract.js
index a68144be9..eca4e7cc9 100644
--- a/deps/npm/node_modules/tar/test/extract.js
+++ b/deps/npm/node_modules/tar/test/extract.js
@@ -118,7 +118,7 @@ var tap = require("tap")
linkpath: undefined,
nlink: 2 },
{ path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL',
- mode: '120755',
+ mode: '120777',
type: 'SymbolicLink',
depth: 1,
size: 200,
diff --git a/deps/npm/node_modules/uid-number/package.json b/deps/npm/node_modules/uid-number/package.json
index 643c36b46..8d416235f 100644
--- a/deps/npm/node_modules/uid-number/package.json
+++ b/deps/npm/node_modules/uid-number/package.json
@@ -6,7 +6,7 @@
},
"name": "uid-number",
"description": "Convert a username/group name to a uid/gid number",
- "version": "0.0.5",
+ "version": "0.0.6",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/uid-number.git"
@@ -19,17 +19,17 @@
"node": "*"
},
"license": "ISC",
+ "gitHead": "aab48f5d6bda85794946b26d945d2ee452e0e9ab",
"bugs": {
"url": "https://github.com/isaacs/uid-number/issues"
},
"homepage": "https://github.com/isaacs/uid-number",
- "_id": "uid-number@0.0.5",
- "dist": {
- "shasum": "5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e",
- "tarball": "http://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz"
- },
- "_from": "uid-number@latest",
- "_npmVersion": "1.4.3",
+ "_id": "uid-number@0.0.6",
+ "scripts": {},
+ "_shasum": "0ea10e8035e8eb5b8e4449f06da1c730663baa81",
+ "_from": "uid-number@>=0.0.6 <0.1.0",
+ "_npmVersion": "2.1.3",
+ "_nodeVersion": "0.10.31",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -40,8 +40,10 @@
"email": "i@izs.me"
}
],
+ "dist": {
+ "shasum": "0ea10e8035e8eb5b8e4449f06da1c730663baa81",
+ "tarball": "http://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz"
+ },
"directories": {},
- "_shasum": "5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e",
- "_resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz"
}
diff --git a/deps/npm/node_modules/uid-number/uid-number.js b/deps/npm/node_modules/uid-number/uid-number.js
index 2ae421ede..bd62184fd 100644
--- a/deps/npm/node_modules/uid-number/uid-number.js
+++ b/deps/npm/node_modules/uid-number/uid-number.js
@@ -32,8 +32,13 @@ function uidNumber (uid, gid, cb) {
child_process.execFile( process.execPath
, [getter, uid, gid]
- , function (code, out, err) {
- if (er) return cb(new Error("could not get uid/gid\n" + err))
+ , function (code, out, stderr) {
+ if (code) {
+ var er = new Error("could not get uid/gid\n" + stderr)
+ er.code = code
+ return cb(er)
+ }
+
try {
out = JSON.parse(out+"")
} catch (ex) {
diff --git a/deps/npm/node_modules/umask/.npmignore b/deps/npm/node_modules/umask/.npmignore
new file mode 100644
index 000000000..59d842baa
--- /dev/null
+++ b/deps/npm/node_modules/umask/.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/umask/ChangeLog b/deps/npm/node_modules/umask/ChangeLog
new file mode 100644
index 000000000..125467451
--- /dev/null
+++ b/deps/npm/node_modules/umask/ChangeLog
@@ -0,0 +1,9 @@
+2015-01-15 Sam Mikes <smikes@cubane.com>
+
+ * index.js: (convert_fromString) accept decimal strings provided they
+ don't begin with '0'
+
+2015-01-14 Sam Mikes <smikes@cubane.com>
+
+ * index.js: initial rev
+
diff --git a/deps/npm/node_modules/umask/LICENSE b/deps/npm/node_modules/umask/LICENSE
new file mode 100644
index 000000000..e637724b3
--- /dev/null
+++ b/deps/npm/node_modules/umask/LICENSE
@@ -0,0 +1,22 @@
+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/umask/README.md b/deps/npm/node_modules/umask/README.md
new file mode 100644
index 000000000..80009ae70
--- /dev/null
+++ b/deps/npm/node_modules/umask/README.md
@@ -0,0 +1,78 @@
+# umask
+
+Convert umask from string &lt;-> number.
+
+## Installation & Use
+
+```
+$ npm install -S umask
+
+var umask = require('umask');
+
+console.log(umask.toString(18)); // 0022
+
+console.log(umask.fromString('0777')) // 511
+```
+
+## API
+
+### `toString( val )`
+
+Converts `val` to a 0-padded octal string. `val` is assumed to be a
+Number in the correct range (0..511)
+
+### `fromString( val, [cb] )`
+
+Converts `val` to a Number that can be used as a umask. `val` can
+be of the following forms:
+
+ * String containing octal number (leading 0)
+ * String containing decimal number
+ * Number
+
+In all cases above, the value obtained is then converted to an integer and
+checked against the legal `umask` range 0..511
+
+`fromString` can be used as a simple converter, with no error feedback, by
+omitting the optional callback argument `cb`:
+
+```
+ var mask = umask.fromString(val);
+
+ // mask is now the umask descibed by val or
+ // the default, 0022 (18 dec)
+```
+
+The callback arguments are `(err, val)` where `err` is either `null` or an
+Error object and `val` is either the converted umask or the default umask, `0022`.
+
+```
+ umask.fromString(val, function (err, val) {
+ if (err) {
+ console.error("invalid umask: " + err.message)
+ }
+
+ /* do something with val */
+ });
+```
+
+The callback, if provided, is always called **synchronously**.
+
+### `validate( data, k, val )`
+
+This is a validation function of the form expected by `nopt`. If
+`val` is a valid umask, the function returns true and sets `data[k]`.
+If `val` is not a valid umask, the function returns false.
+
+The `validate` function is stricter than `fromString`: it only accepts
+Number or octal String values, and the String value must begin with `0`.
+The `validate` function does **not** accept Strings containing decimal
+numbers.
+
+# Maintainer
+
+Sam Mikes <smikes@cubane.com>
+
+# License
+
+MIT \ No newline at end of file
diff --git a/deps/npm/node_modules/umask/index.js b/deps/npm/node_modules/umask/index.js
new file mode 100644
index 000000000..501c0e0c0
--- /dev/null
+++ b/deps/npm/node_modules/umask/index.js
@@ -0,0 +1,77 @@
+'use strict';
+
+var util = require("util");
+
+function toString(val) {
+ val = val.toString(8);
+ while (val.length < 4) {
+ val = "0" + val;
+ }
+ return val;
+}
+
+var defaultUmask = 18; // 0022;
+var defaultUmaskString = toString(defaultUmask);
+
+function validate(data, k, val) {
+ // must be either an integer or an octal string.
+ if (typeof val === "number" && !isNaN(val)) {
+ data[k] = val;
+ return true;
+ }
+
+ if (typeof val === "string") {
+ if (val.charAt(0) !== "0") {
+ return false;
+ }
+ data[k] = parseInt(val, 8);
+ return true;
+ }
+
+ return false;
+}
+
+function convert_fromString(val, cb) {
+ if (typeof val === "string") {
+ // check for octal string first
+ if (val.charAt(0) === '0' && /^[0-7]+$/.test(val)) {
+ val = parseInt(val, 8);
+ } else if (val.charAt(0) !== '0' && /^[0-9]+$/.test(val)) {
+ // legacy support for decimal strings
+ val = parseInt(val, 10);
+ } else {
+ return cb(new Error(util.format("Expected octal string, got %j, defaulting to %j",
+ val, defaultUmaskString)),
+ defaultUmask);
+ }
+ } else if (typeof val !== "number") {
+ return cb(new Error(util.format("Expected number or octal string, got %j, defaulting to %j",
+ val, defaultUmaskString)),
+ defaultUmask);
+ }
+
+ val = Math.floor(val);
+
+ if ((val < 0) || (val > 511)) {
+ return cb(new Error(util.format("Must be in range 0..511 (0000..0777), got %j", val)),
+ defaultUmask);
+ }
+
+ cb(null, val);
+}
+
+function fromString(val, cb) {
+
+ // synchronous callback, no zalgo
+ convert_fromString(val, cb || function (err, result) {
+ /*jslint unparam:true*/
+ val = result;
+ });
+
+ return val;
+}
+
+exports.toString = toString;
+exports.fromString = fromString;
+exports.validate = validate;
+
diff --git a/deps/npm/node_modules/umask/package.json b/deps/npm/node_modules/umask/package.json
new file mode 100644
index 000000000..ed84e346f
--- /dev/null
+++ b/deps/npm/node_modules/umask/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "umask",
+ "version": "1.1.0",
+ "description": "convert umask from string <-> number",
+ "main": "index.js",
+ "scripts": {
+ "test": "lab -ct 100",
+ "lint": "jslint --terse --latest *.js test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/smikes/umask.git"
+ },
+ "keywords": [
+ "umask"
+ ],
+ "author": {
+ "name": "Sam Mikes",
+ "email": "smikes@cubane.com"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/smikes/umask/issues"
+ },
+ "homepage": "https://github.com/smikes/umask",
+ "devDependencies": {
+ "code": "^1.2.1",
+ "jslint": "^0.7.2",
+ "lab": "^5.2.0"
+ },
+ "gitHead": "63d821e4d0b06ef9a4b727c5fbe5976e9534d76e",
+ "_id": "umask@1.1.0",
+ "_shasum": "f29cebf01df517912bb58ff9c4e50fde8e33320d",
+ "_from": "umask@>=1.1.0 <1.2.0",
+ "_npmVersion": "2.2.0",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "smikes",
+ "email": "smikes@cubane.com"
+ },
+ "maintainers": [
+ {
+ "name": "smikes",
+ "email": "smikes@cubane.com"
+ }
+ ],
+ "dist": {
+ "shasum": "f29cebf01df517912bb58ff9c4e50fde8e33320d",
+ "tarball": "http://registry.npmjs.org/umask/-/umask-1.1.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz"
+}
diff --git a/deps/npm/node_modules/umask/test/simple.js b/deps/npm/node_modules/umask/test/simple.js
new file mode 100644
index 000000000..8f29ae745
--- /dev/null
+++ b/deps/npm/node_modules/umask/test/simple.js
@@ -0,0 +1,166 @@
+'use strict';
+
+var umask = require('..');
+
+var Code = require('code');
+var Lab = require('lab');
+var lab = Lab.script();
+exports.lab = lab;
+
+var describe = lab.describe;
+var it = lab.it;
+var expect = Code.expect;
+
+describe('validates umask', function () {
+ // signature of validator: validate(obj, key, val)
+ // store valid value in obj[key]
+ // return false if invalid
+
+ it('accepts numbers', function (done) {
+ var o = {},
+ result = false;
+
+ result = umask.validate(o, 'umask', 0);
+ expect(result).to.equal(true);
+ expect(o.umask).to.equal(0);
+
+ result = umask.validate(o, 'umask', 511);
+ expect(result).to.equal(true);
+ expect(o.umask).to.equal(511);
+ done();
+ });
+
+ it('accepts strings', function (done) {
+ var o = {},
+ result;
+
+ result = umask.validate(o, 'umask', "0");
+ expect(result).to.equal(true);
+ expect(o.umask).to.equal(0);
+
+ result = umask.validate(o, 'umask', "0777");
+ expect(result).to.equal(true);
+ expect(o.umask).to.equal(511);
+
+ done();
+ });
+
+ it('rejects other types', function (done) {
+ expect(umask.validate(undefined, undefined, false)).to.equal(false);
+ expect(umask.validate(undefined, undefined, {})).to.equal(false);
+
+ done();
+ });
+
+ it('rejects non-octalish strings', function (done) {
+ expect(umask.validate(undefined, undefined, "1")).to.equal(false);
+
+ done();
+ });
+
+ it('rejects NaN strings', function (done) {
+ expect(umask.validate(undefined, undefined, NaN)).to.equal(false);
+
+ done();
+ });
+});
+
+describe('umask to string', function () {
+ it("converts umask to string", function (done) {
+ expect(umask.toString(0)).to.equal("0000");
+ expect(umask.toString(1)).to.equal("0001");
+ expect(umask.toString(7)).to.equal("0007");
+ expect(umask.toString(8)).to.equal("0010");
+ expect(umask.toString(511)).to.equal("0777");
+ expect(umask.toString(18)).to.equal("0022");
+ expect(umask.toString(16)).to.equal("0020");
+ done();
+ });
+});
+
+describe('umask from string', function () {
+ it('converts valid values', function (done) {
+ expect(umask.fromString("0000")).to.equal(0);
+ expect(umask.fromString("0")).to.equal(0);
+ expect(umask.fromString("0777")).to.equal(511);
+ expect(umask.fromString("0024")).to.equal(20);
+
+ expect(umask.fromString(0)).to.equal(0);
+ expect(umask.fromString(20)).to.equal(20);
+ expect(umask.fromString(21)).to.equal(21);
+ expect(umask.fromString(511)).to.equal(511);
+
+ done();
+ });
+
+ it('converts valid values', function (done) {
+ expect(umask.fromString("0000")).to.equal(0);
+ expect(umask.fromString("0")).to.equal(0);
+ expect(umask.fromString("010")).to.equal(8);
+ expect(umask.fromString("0777")).to.equal(511);
+ expect(umask.fromString("0024")).to.equal(20);
+
+ expect(umask.fromString("8")).to.equal(8);
+ expect(umask.fromString("9")).to.equal(9);
+ expect(umask.fromString("18")).to.equal(18);
+ expect(umask.fromString("16")).to.equal(16);
+
+ expect(umask.fromString(0)).to.equal(0);
+ expect(umask.fromString(20)).to.equal(20);
+ expect(umask.fromString(21)).to.equal(21);
+ expect(umask.fromString(511)).to.equal(511);
+
+ expect(umask.fromString(0.1)).to.equal(0);
+ expect(umask.fromString(511.1)).to.equal(511);
+
+ done();
+ });
+
+ it('errors on empty string', function (done) {
+ umask.fromString("", function (err, val) {
+ expect(err.message).to.equal('Expected octal string, got "", defaulting to "0022"');
+ expect(val).to.equal(18);
+ done();
+ });
+ });
+
+ it('errors on invalid octal string', function (done) {
+ umask.fromString("099", function (err, val) {
+ expect(err.message).to.equal('Expected octal string, got "099", defaulting to "0022"');
+ expect(val).to.equal(18);
+ done();
+ });
+ });
+
+ it('errors when non-string, non-number (boolean)', function (done) {
+ umask.fromString(false, function (err, val) {
+ expect(err.message).to.equal('Expected number or octal string, got false, defaulting to "0022"');
+ expect(val).to.equal(18);
+ done();
+ });
+ });
+
+ it('errors when non-string, non-number (object)', function (done) {
+ umask.fromString({}, function (err, val) {
+ expect(err.message).to.equal('Expected number or octal string, got {}, defaulting to "0022"');
+ expect(val).to.equal(18);
+ done();
+ });
+ });
+
+ it('errors when out of range (<0)', function (done) {
+ umask.fromString(-1, function (err, val) {
+ expect(err.message).to.equal('Must be in range 0..511 (0000..0777), got -1');
+ expect(val).to.equal(18);
+ done();
+ });
+ });
+
+ it('errors when out of range (>511)', function (done) {
+ umask.fromString(512, function (err, val) {
+ expect(err.message).to.equal('Must be in range 0..511 (0000..0777), got 512');
+ expect(val).to.equal(18);
+ done();
+ });
+ });
+});
diff --git a/deps/npm/node_modules/which/LICENSE b/deps/npm/node_modules/which/LICENSE
index 05a401094..19129e315 100644
--- a/deps/npm/node_modules/which/LICENSE
+++ b/deps/npm/node_modules/which/LICENSE
@@ -1,23 +1,15 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC 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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+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", 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.
+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/which/package.json b/deps/npm/node_modules/which/package.json
index c45dafee9..079989abc 100644
--- a/deps/npm/node_modules/which/package.json
+++ b/deps/npm/node_modules/which/package.json
@@ -6,7 +6,7 @@
},
"name": "which",
"description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
- "version": "1.0.5",
+ "version": "1.0.8",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-which.git"
@@ -15,20 +15,32 @@
"bin": {
"which": "./bin/which"
},
- "engines": {
- "node": "*"
+ "license": "ISC",
+ "gitHead": "681a9ebbc447cb428232ddf6c0983006d89e7755",
+ "bugs": {
+ "url": "https://github.com/isaacs/node-which/issues"
},
- "dependencies": {},
- "devDependencies": {},
+ "homepage": "https://github.com/isaacs/node-which",
+ "_id": "which@1.0.8",
+ "scripts": {},
+ "_shasum": "c2ff319534ac4a1fa45df2221b56c36279903ded",
+ "_from": "which@>=1.0.8 <1.1.0",
+ "_npmVersion": "2.1.11",
+ "_nodeVersion": "0.10.16",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
},
- "_id": "which@1.0.5",
- "optionalDependencies": {},
- "_engineSupported": true,
- "_npmVersion": "1.1.2",
- "_nodeVersion": "v0.7.6-pre",
- "_defaultsLoaded": true,
- "_from": "which@1"
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "c2ff319534ac4a1fa45df2221b56c36279903ded",
+ "tarball": "http://registry.npmjs.org/which/-/which-1.0.8.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/which/-/which-1.0.8.tgz"
}
diff --git a/deps/npm/node_modules/which/which.js b/deps/npm/node_modules/which/which.js
index db7e8f74d..f19dd335b 100644
--- a/deps/npm/node_modules/which/which.js
+++ b/deps/npm/node_modules/which/which.js
@@ -5,12 +5,7 @@ var path = require("path")
, fs
, COLON = process.platform === "win32" ? ";" : ":"
, isExe
-
-try {
- fs = require("graceful-fs")
-} catch (ex) {
- fs = require("fs")
-}
+ , fs = require("fs")
if (process.platform == "win32") {
// On windows, there is no good way to check that a file is executable
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 761c8c814..9717becdc 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "2.1.6",
+ "version": "2.3.0",
"name": "npm",
"description": "A package manager for node",
"keywords": [
@@ -12,7 +12,7 @@
"config": {
"publishtest": false
},
- "homepage": "https://npmjs.org/doc/",
+ "homepage": "https://docs.npmjs.com/",
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
"repository": {
"type": "git",
@@ -43,33 +43,34 @@
"chmodr": "~0.1.0",
"chownr": "0",
"cmd-shim": "~2.0.1",
- "columnify": "~1.2.1",
+ "columnify": "~1.3.2",
"config-chain": "~1.1.8",
"dezalgo": "~1.0.1",
"editor": "~0.1.0",
- "fs-vacuum": "~1.2.1",
+ "fs-vacuum": "~1.2.5",
"fs-write-stream-atomic": "~1.0.2",
- "fstream": "~1.0.2",
+ "fstream": "~1.0.3",
"fstream-npm": "~1.0.1",
"github-url-from-git": "~1.4.0",
"github-url-from-username-repo": "~1.0.2",
- "glob": "~4.0.6",
- "graceful-fs": "~3.0.4",
+ "glob": "~4.3.5",
+ "graceful-fs": "~3.0.5",
"inflight": "~1.0.4",
"inherits": "~2.0.1",
- "ini": "~1.3.0",
- "init-package-json": "~1.1.1",
+ "ini": "~1.3.2",
+ "init-package-json": "~1.1.3",
"lockfile": "~1.0.0",
"lru-cache": "~2.5.0",
- "minimatch": "~1.0.0",
+ "minimatch": "~2.0.1",
"mkdirp": "~0.5.0",
- "node-gyp": "~1.0.1",
+ "node-gyp": "~1.0.2",
"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.2",
+ "npm-install-checks": "~1.0.5",
"npm-package-arg": "~2.1.3",
- "npm-registry-client": "~3.2.4",
+ "npm-registry-client": "~5.0.0",
"npm-user-validate": "~0.1.1",
"npmlog": "~0.1.1",
"once": "~1.3.1",
@@ -77,21 +78,22 @@
"osenv": "~0.1.0",
"path-is-inside": "~1.0.0",
"read": "~1.0.4",
- "read-installed": "~3.1.2",
+ "read-installed": "~3.1.5",
"read-package-json": "~1.2.7",
- "readable-stream": "~1.0.32",
- "realize-package-specifier": "~1.2.0",
- "request": "~2.46.0",
+ "readable-stream": "~1.0.33",
+ "realize-package-specifier": "~1.3.0",
+ "request": "~2.51.0",
"retry": "~0.6.1",
"rimraf": "~2.2.8",
- "semver": "~4.1.0",
+ "semver": "~4.2.0",
"sha": "~1.3.0",
"slide": "~1.1.6",
"sorted-object": "~1.0.0",
- "tar": "~1.0.1",
+ "tar": "~1.0.3",
"text-table": "~0.2.0",
- "uid-number": "0.0.5",
- "which": "1",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "which": "~1.0.8",
"wrappy": "~1.0.1",
"write-file-atomic": "~1.1.0"
},
@@ -130,6 +132,7 @@
"mkdirp",
"node-gyp",
"nopt",
+ "normalize-git-url",
"normalize-package-data",
"npm-cache-filename",
"npm-install-checks",
@@ -156,6 +159,7 @@
"tar",
"text-table",
"uid-number",
+ "umask",
"which",
"wrappy",
"write-file-atomic"
@@ -163,11 +167,11 @@
"devDependencies": {
"marked": "~0.3.2",
"marked-man": "~0.1.4",
- "nock": "~0.48.1",
+ "nock": "~0.57.0",
"npm-registry-couchapp": "~2.6.2",
"npm-registry-mock": "~0.6.3",
"require-inject": "~1.1.0",
- "tap": "~0.4.12"
+ "tap": "~0.5.0"
},
"scripts": {
"test-legacy": "node ./test/run.js",
diff --git a/deps/npm/scripts/install.sh b/deps/npm/scripts/install.sh
index 74840459e..e6624f061 100755
--- a/deps/npm/scripts/install.sh
+++ b/deps/npm/scripts/install.sh
@@ -56,7 +56,7 @@ ret=$?
if [ $ret -eq 0 ] && [ -x "$node" ]; then
(exit 0)
else
- echo "npm cannot be installed without nodejs." >&2
+ echo "npm cannot be installed without node.js." >&2
echo "Install node first, and then try again." >&2
echo "" >&2
echo "Maybe node is installed, but not in the PATH?" >&2
@@ -118,11 +118,11 @@ MAKE=NOMAKE
if [ "x$MAKE" = "x" ]; then
make=`which gmake 2>&1`
- if [ $? -eq 0 ] && [ -x $make ]; then
+ if [ $? -eq 0 ] && [ -x "$make" ]; then
(exit 0)
else
make=`which make 2>&1`
- if [ $? -eq 0 ] && [ -x $make ]; then
+ if [ $? -eq 0 ] && [ -x "$make" ]; then
(exit 0)
else
make=NOMAKE
@@ -161,15 +161,11 @@ if [ -z "$t" ]; then
# switch based on node version.
# note that we can only use strict sh-compatible patterns here.
case $node_version in
- 0.[012345].* | v0.[012345].*)
+ 0.[01234567].* | v0.[01234567].*)
echo "You are using an outdated and unsupported version of" >&2
echo "node ($node_version). Please update node and try again." >&2
exit 99
;;
- v0.[678].* | 0.[678].*)
- echo "install npm@1.1"
- t=1.1
- ;;
*)
echo "install npm@latest"
t="latest"
@@ -177,32 +173,9 @@ if [ -z "$t" ]; then
esac
fi
-# the npmca cert
-cacert='
------BEGIN CERTIFICATE-----
-MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
-VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x
-IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w
-bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y
-MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV
-BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj
-YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA
-aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE
-OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz
-Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl
-y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC
-l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv
-yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl
-ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op
------END CERTIFICATE-----
-'
-
-echo "$cacert" > "$TMP/cafile.crt"
-cacert="$TMP/cafile.crt"
-
# need to echo "" after, because Posix sed doesn't treat EOF
# as an implied end of line.
-url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \
+url=`(curl -SsL https://registry.npmjs.org/npm/$t; echo "") \
| sed -e 's/^.*tarball":"//' \
| sed -e 's/".*$//'`
@@ -210,7 +183,7 @@ ret=$?
if [ "x$url" = "x" ]; then
ret=125
# try without the -e arg to sed.
- url=`(curl -SsL --cacert "$cacert" https://registry.npmjs.org/npm/$t; echo "") \
+ url=`(curl -SsL https://registry.npmjs.org/npm/$t; echo "") \
| sed 's/^.*tarball":"//' \
| sed 's/".*$//'`
ret=$?
@@ -227,28 +200,12 @@ fi
echo "fetching: $url" >&2
cd "$TMP" \
- && curl -SsL --cacert "$cacert" "$url" \
+ && curl -SsL "$url" \
| $tar -xzf - \
- && rm "$cacert" \
&& cd "$TMP"/* \
- && (req=`"$node" bin/read-package-json.js package.json engines.node`
- if [ -d node_modules ]; then
- "$node" node_modules/semver/bin/semver -v "$node_version" -r "$req"
- ret=$?
- else
- "$node" bin/semver.js -v "$node_version" -r "$req"
- ret=$?
- fi
- if [ $ret -ne 0 ]; then
- echo "You need node $req to run this program." >&2
- echo "node --version reports: $node_version" >&2
- echo "Please upgrade node before continuing." >&2
- exit $ret
- fi) \
&& (ver=`"$node" bin/read-package-json.js package.json version`
isnpm10=0
if [ $ret -eq 0 ]; then
- req=`"$node" bin/read-package-json.js package.json engines.node`
if [ -d node_modules ]; then
if "$node" node_modules/semver/bin/semver -v "$ver" -r "1"
then
@@ -288,7 +245,7 @@ cd "$TMP" \
&& (if [ "x$configures" = "x" ]; then
(exit 0)
else
- echo "./configure "$configures
+ echo "./configure $configures"
echo "$configures" > npmrc
fi) \
&& (if [ "$make" = "NOMAKE" ]; then
diff --git a/deps/npm/test/common-tap.js b/deps/npm/test/common-tap.js
index 2efca30c4..1c51ed718 100644
--- a/deps/npm/test/common-tap.js
+++ b/deps/npm/test/common-tap.js
@@ -1,13 +1,12 @@
var spawn = require("child_process").spawn
var path = require("path")
-var fs = require("fs")
var port = exports.port = 1337
exports.registry = "http://localhost:" + port
process.env.npm_config_loglevel = "error"
var npm_config_cache = path.resolve(__dirname, "npm_cache")
-exports.npm_config_cache = npm_config_cache
+process.env.npm_config_cache = exports.npm_config_cache = npm_config_cache
var bin = exports.bin = require.resolve("../bin/npm-cli.js")
var once = require("once")
@@ -42,26 +41,3 @@ exports.npm = function (cmd, opts, cb) {
})
return child
}
-
-// based on http://bit.ly/1tkI6DJ
-function deleteNpmCacheRecursivelySync(cache) {
- cache = cache ? cache : npm_config_cache
- var files = []
- var res
- if( fs.existsSync(cache) ) {
- files = fs.readdirSync(cache)
- files.forEach(function(file,index) {
- var curPath = path.resolve(cache, file)
- if(fs.lstatSync(curPath).isDirectory()) { // recurse
- deleteNpmCacheRecursivelySync(curPath)
- } else { // delete file
- if (res = fs.unlinkSync(curPath))
- throw Error("Failed to delete file " + curPath + ", error " + res)
- }
- })
- if (res = fs.rmdirSync(cache))
- throw Error("Failed to delete directory " + cache + ", error " + res)
- }
- return 0
-}
-exports.deleteNpmCacheRecursivelySync = deleteNpmCacheRecursivelySync \ No newline at end of file
diff --git a/deps/npm/test/fixtures/scoped-underscore-1.3.1.tgz b/deps/npm/test/fixtures/scoped-underscore-1.3.1.tgz
new file mode 100644
index 000000000..d98a34599
--- /dev/null
+++ b/deps/npm/test/fixtures/scoped-underscore-1.3.1.tgz
Binary files differ
diff --git a/deps/npm/test/run.js b/deps/npm/test/run.js
index 904df5b8e..6feba3596 100644
--- a/deps/npm/test/run.js
+++ b/deps/npm/test/run.js
@@ -19,6 +19,7 @@ var temp = process.env.TMPDIR
temp = path.resolve(temp, "npm-test-" + process.pid)
var root = path.resolve(temp, "root")
+ , cache = path.resolve(temp, "npm_cache")
var failures = 0
, mkdir = require("mkdirp")
@@ -47,6 +48,7 @@ env.npm_config_global = "true"
env.npm_config_npat = "false"
env.PATH = pathEnv.join(pathEnvSplit)
env.NODE_PATH = path.join(root, "node_modules")
+env.npm_config_cache = cache
diff --git a/deps/npm/test/tap/00-config-setup.js b/deps/npm/test/tap/00-config-setup.js
index aaad54627..33581eb13 100644
--- a/deps/npm/test/tap/00-config-setup.js
+++ b/deps/npm/test/tap/00-config-setup.js
@@ -63,6 +63,6 @@ if (module === require.main) {
var gcini = "globalconfig = " + exports.globalconfig + "\n"
fs.writeFileSync(exports.userconfig, gcini + uc)
- console.log("0..1")
+ console.log("1..1")
console.log("ok 1 setup done")
}
diff --git a/deps/npm/test/tap/add-remote-git-fake-windows.js b/deps/npm/test/tap/add-remote-git-fake-windows.js
new file mode 100644
index 000000000..5de7cff7d
--- /dev/null
+++ b/deps/npm/test/tap/add-remote-git-fake-windows.js
@@ -0,0 +1,138 @@
+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")
+var repo = resolve(__dirname, "add-remote-git-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 on 'Windows'", function (t) {
+ // before we confuse everything by switching the platform
+ require("../../lib/install.js")
+ require("../../lib/unbuild.js")
+ process.platform = "win32"
+ process.chdir(pkg)
+ npm.commands.install(".", [], function (er) {
+ t.ifError(er, "npm installed via git")
+
+ 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:1234/child.git"
+ }
+}, 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({ registry : common.registry, loglevel : "silent" }, function () {
+ // some really cheesy monkeypatching
+ require("module")._cache[require.resolve("which")] = {
+ exports : function (_, cb) { cb() }
+ }
+ 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/add-remote-git.js b/deps/npm/test/tap/add-remote-git.js
new file mode 100644
index 000000000..325ac2ed3
--- /dev/null
+++ b/deps/npm/test/tap/add-remote-git.js
@@ -0,0 +1,130 @@
+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")
+var repo = resolve(__dirname, "add-remote-git-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("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:1234/child.git"
+ }
+}, 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({ 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=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/login-always-auth.js b/deps/npm/test/tap/adduser-always-auth.js
index 8311096c2..8311096c2 100644
--- a/deps/npm/test/tap/login-always-auth.js
+++ b/deps/npm/test/tap/adduser-always-auth.js
diff --git a/deps/npm/test/tap/adduser-legacy-auth.js b/deps/npm/test/tap/adduser-legacy-auth.js
new file mode 100644
index 000000000..56303903f
--- /dev/null
+++ b/deps/npm/test/tap/adduser-legacy-auth.js
@@ -0,0 +1,89 @@
+var fs = require("fs")
+var path = require("path")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+
+var test = require("tap").test
+var common = require("../common-tap.js")
+
+var opts = {cwd : __dirname}
+var pkg = path.resolve(__dirname, "adduser-legacy-auth")
+var outfile = path.resolve(pkg, "_npmrc")
+
+var contents = "_auth=" + new Buffer("u:x").toString("base64") + "\n" +
+ "email=u@p.me\n"
+
+var responses = {
+ "Username" : "u\n",
+ "Password" : "p\n",
+ "Email" : "u@p.me\n"
+}
+
+function mocks (server) {
+ server.filteringRequestBody(function (r) {
+ if (r.match(/\"_id\":\"org\.couchdb\.user:u\"/)) {
+ return "auth"
+ }
+ })
+ server.put("/-/user/org.couchdb.user:u", "auth")
+ .reply(409, {"error": "user exists"})
+ server.get("/-/user/org.couchdb.user:u?write=true")
+ .reply(200, {_rev : "3-deadcafebabebeef"})
+ server.put("/-/user/org.couchdb.user:u/-rev/3-deadcafebabebeef", "auth", {"authorization" : "Basic dTpw"})
+ .reply(201, {username : "u", password : "p", email : "u@p.me"})
+}
+
+test("setup", function (t) {
+ mkdirp(pkg, function (er) {
+ t.ifError(er, pkg + " made successfully")
+
+ fs.writeFile(outfile, contents, function (er) {
+ t.ifError(er, "wrote legacy config")
+
+ t.end()
+ })
+ })
+})
+
+test("npm login", function (t) {
+ mr({port : common.port, mocks : mocks}, function (s) {
+ var runner = common.npm(
+ [
+ "login",
+ "--registry", common.registry,
+ "--loglevel", "silly",
+ "--userconfig", outfile
+ ],
+ opts,
+ function (err, code) {
+ t.notOk(code, "exited OK")
+ t.notOk(err, "no error output")
+ var config = fs.readFileSync(outfile, "utf8")
+ t.like(config, /:always-auth=false/, "always-auth is scoped and false (by default)")
+ s.close()
+ rimraf(outfile, function (err) {
+ t.ifError(err, "removed config file OK")
+ t.end()
+ })
+ })
+
+ var o = "", e = "", remaining = Object.keys(responses).length
+ runner.stdout.on("data", function (chunk) {
+ remaining--
+ o += chunk
+
+ var label = chunk.toString("utf8").split(":")[0]
+ runner.stdin.write(responses[label])
+
+ if (remaining === 0) runner.stdin.end()
+ })
+ runner.stderr.on("data", function (chunk) { e += chunk })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(outfile)
+ t.pass("cleaned up")
+ t.end()
+})
diff --git a/deps/npm/test/tap/bugs.js b/deps/npm/test/tap/bugs.js
new file mode 100644
index 000000000..845a42123
--- /dev/null
+++ b/deps/npm/test/tap/bugs.js
@@ -0,0 +1,151 @@
+if (process.platform === "win32") {
+ console.error("skipping test, because windows and shebangs")
+ return
+}
+
+var common = require("../common-tap.js")
+var mr = require("npm-registry-mock")
+
+var test = require("tap").test
+var rimraf = require("rimraf")
+var fs = require("fs")
+var path = require("path")
+var join = path.join
+var outFile = path.join(__dirname, "/_output")
+
+var opts = { cwd: __dirname }
+
+test("setup", function (t) {
+ var s = "#!/usr/bin/env bash\n" +
+ "echo \"$@\" > " + JSON.stringify(__dirname) + "/_output\n"
+ fs.writeFileSync(join(__dirname, "/_script.sh"), s, "ascii")
+ fs.chmodSync(join(__dirname, "/_script.sh"), "0755")
+ t.pass("made script")
+ t.end()
+})
+
+test("npm bugs underscore", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ "bugs", "underscore",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + join(__dirname, "/_script.sh")
+ ], opts, function (err, code, stdout, stderr) {
+ t.ifError(err, "bugs ran without issue")
+ t.notOk(stderr, "should have no stderr")
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(outFile, "ascii")
+ s.close()
+ t.equal(res, "https://github.com/jashkenas/underscore/issues\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm bugs optimist - github (https://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ "bugs", "optimist",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + join(__dirname, "/_script.sh")
+ ], opts, function (err, code, stdout, stderr) {
+ t.ifError(err, "bugs ran without issue")
+ t.notOk(stderr, "should have no stderr")
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(outFile, "ascii")
+ s.close()
+ t.equal(res, "https://github.com/substack/node-optimist/issues\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm bugs npm-test-peer-deps - no repo", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ "bugs", "npm-test-peer-deps",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + join(__dirname, "/_script.sh")
+ ], opts, function (err, code, stdout, stderr) {
+ t.ifError(err, "bugs ran without issue")
+ t.notOk(stderr, "should have no stderr")
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(outFile, "ascii")
+ s.close()
+ t.equal(res, "https://www.npmjs.org/package/npm-test-peer-deps\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm bugs test-repo-url-http - non-github (http://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ "bugs", "test-repo-url-http",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + join(__dirname, "/_script.sh")
+ ], opts, function (err, code, stdout, stderr) {
+ t.ifError(err, "bugs ran without issue")
+ t.notOk(stderr, "should have no stderr")
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(outFile, "ascii")
+ s.close()
+ t.equal(res, "https://www.npmjs.org/package/test-repo-url-http\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm bugs test-repo-url-https - non-github (https://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ "bugs", "test-repo-url-https",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + join(__dirname, "/_script.sh")
+ ], opts, function (err, code, stdout, stderr) {
+ t.ifError(err, "bugs ran without issue")
+ t.notOk(stderr, "should have no stderr")
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(outFile, "ascii")
+ s.close()
+ t.equal(res, "https://www.npmjs.org/package/test-repo-url-https\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm bugs test-repo-url-ssh - non-github (ssh://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ "bugs", "test-repo-url-ssh",
+ "--registry=" + common.registry,
+ "--loglevel=silent",
+ "--browser=" + join(__dirname, "/_script.sh")
+ ], opts, function (err, code, stdout, stderr) {
+ t.ifError(err, "bugs ran without issue")
+ t.notOk(stderr, "should have no stderr")
+ t.equal(code, 0, "exit ok")
+ var res = fs.readFileSync(outFile, "ascii")
+ s.close()
+ t.equal(res, "https://www.npmjs.org/package/test-repo-url-ssh\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ fs.unlinkSync(join(__dirname, "/_script.sh"))
+ t.pass("cleaned up")
+ t.end()
+})
diff --git a/deps/npm/test/tap/build-already-built.js b/deps/npm/test/tap/build-already-built.js
new file mode 100644
index 000000000..1de5929f4
--- /dev/null
+++ b/deps/npm/test/tap/build-already-built.js
@@ -0,0 +1,81 @@
+// if "npm rebuild" is run with bundled dependencies,
+// message "already built" should not be error
+var test = require("tap").test
+var path = require("path")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var npmlog = require("npmlog")
+var mkdirp = require("mkdirp")
+var requireInject = require("require-inject")
+
+var npm = require("../../lib/npm.js")
+
+var PKG_DIR = path.resolve(__dirname, "build-alread-built")
+var fakePkg = "foo"
+
+test("setup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+test("issue #6735 build 'already built' message", function (t) {
+ npm.load({loglevel : "warn"}, function () {
+ // capture log messages with level
+ var log = ""
+ npmlog.on("log", function (chunk) {
+ log += chunk.level + " " + chunk.message + "\n"
+ })
+
+ mkdirp.sync(fakePkg)
+ var folder = path.resolve(fakePkg)
+
+ var global = npm.config.get("global")
+
+ var build = requireInject("../../lib/build", {
+ })
+
+ t.test("pin previous behavior", function (t) {
+
+ build([fakePkg], global, false, false, function (err) {
+ t.ok(err, "build failed as expected")
+ t.similar(err.message, /package.json/, "missing package.json as expected")
+ t.notSimilar(log, /already built/, "no already built message written")
+
+ t.end()
+ })
+ })
+
+ t.test("simulate rebuild of bundledDependency", function (t) {
+
+ log = ""
+
+ build._didBuild[folder] = true
+
+ build([fakePkg], global, false, false, function (err) {
+ t.ok(err, "build failed as expected")
+ t.similar(err.message, /package.json/, "missing package.json as expected")
+
+ t.similar(log, /already built/, "already built message written")
+ t.notSimilar(log, /ERR! already built/, "already built message written is not error")
+ t.similar(log, /info already built/, "already built message written is info")
+
+ t.end()
+ })
+ })
+
+ t.end()
+ })
+})
+
+
+test("cleanup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(PKG_DIR)
+}
diff --git a/deps/npm/test/tap/config-private.js b/deps/npm/test/tap/config-private.js
new file mode 100644
index 000000000..37e283eec
--- /dev/null
+++ b/deps/npm/test/tap/config-private.js
@@ -0,0 +1,81 @@
+var fs = require("fs")
+var path = require("path")
+var test = require("tap").test
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "config-private")
+var opts = { cwd: pkg }
+
+test("setup", function (t) {
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ t.end()
+})
+
+test("config get private var (old auth)", function (t) {
+ common.npm([
+ "config",
+ "get",
+ "_auth"
+ ],
+ opts,
+ function (err, code, stdout, stderr) {
+ t.ifError(err)
+
+ t.similar(stderr, /sekretz/, "password blocked on stderr")
+ t.equal(stdout, "", "no output")
+ t.end()
+ }
+ )
+})
+
+test("config get private var (new auth)", function (t) {
+ common.npm([
+ "config",
+ "get",
+ "//registry.npmjs.org/:_password"
+ ],
+ opts,
+ function (err, code, stdout, stderr) {
+ t.ifError(err)
+
+ t.similar(stderr, /sekretz/, "password blocked on stderr")
+ t.equal(stdout, "", "no output")
+ t.end()
+ }
+ )
+})
+
+test("config get public var (new username)", function (t) {
+ var FIXTURE_PATH = path.resolve(pkg, "fixture_npmrc")
+ var s = "//registry.lvh.me/:username = wombat\n" +
+ "//registry.lvh.me/:_password = YmFkIHBhc3N3b3Jk\n" +
+ "//registry.lvh.me/:email = lindsay@wdu.org.au\n"
+ fs.writeFileSync(FIXTURE_PATH, s, "ascii")
+ fs.chmodSync(FIXTURE_PATH, "0444")
+
+ common.npm(
+ [
+ "config",
+ "get",
+ "//registry.lvh.me/:username",
+ "--userconfig=" + FIXTURE_PATH,
+ "--registry=http://registry.lvh.me/"
+ ],
+ opts,
+ function (err, code, stdout, stderr) {
+ t.ifError(err)
+
+ t.equal(stderr, "", "stderr is empty")
+ t.equal(stdout, "wombat\n", "got usename is output")
+ t.end()
+ }
+ )
+})
+
+test("clean", function (t) {
+ rimraf.sync(pkg)
+ t.end()
+})
diff --git a/deps/npm/test/tap/gently-rm-overeager.js b/deps/npm/test/tap/gently-rm-overeager.js
new file mode 100644
index 000000000..7284d3e36
--- /dev/null
+++ b/deps/npm/test/tap/gently-rm-overeager.js
@@ -0,0 +1,62 @@
+var resolve = require("path").resolve
+var fs = require("graceful-fs")
+var test = require("tap").test
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+
+var common = require("../common-tap.js")
+
+var pkg = resolve(__dirname, "gently-rm-overeager")
+var dep = resolve(__dirname, "test-whoops")
+
+var EXEC_OPTS = {
+ cwd : pkg
+}
+
+test("setup", function (t) {
+ cleanup()
+ setup()
+
+ t.end()
+})
+
+test("cache add", function (t) {
+ common.npm(["install", "../test-whoops"], EXEC_OPTS, function (er, c) {
+ t.ifError(er, "test-whoops install didn't explode")
+ t.ok(c, "test-whoops install also failed")
+ fs.readdir(pkg, function (er, files) {
+ t.ifError(er, "package directory is still there")
+ t.deepEqual(files, ["npm-debug.log"], "only debug log remains")
+
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+
+var fixture = {
+ name: "@test/whoops",
+ version: "1.0.0",
+ scripts: {
+ postinstall: "echo \"nope\" && exit 1"
+ }
+}
+
+function cleanup () {
+ rimraf.sync(pkg)
+ rimraf.sync(dep)
+}
+
+function setup () {
+ mkdirp.sync(pkg)
+ // so it doesn't try to install into npm's own node_modules
+ mkdirp.sync(resolve(pkg, "node_modules"))
+ mkdirp.sync(dep)
+ fs.writeFileSync(resolve(dep, "package.json"), JSON.stringify(fixture))
+}
diff --git a/deps/npm/test/tap/gently-rm-symlink.js b/deps/npm/test/tap/gently-rm-symlink.js
new file mode 100644
index 000000000..ff1524b04
--- /dev/null
+++ b/deps/npm/test/tap/gently-rm-symlink.js
@@ -0,0 +1,113 @@
+var resolve = require("path").resolve
+var fs = require("graceful-fs")
+var test = require("tap").test
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+
+var common = require("../common-tap.js")
+
+var pkg = resolve(__dirname, "gently-rm-linked")
+var dep = resolve(__dirname, "test-linked")
+var glb = resolve(__dirname, "test-global")
+var lnk = resolve(__dirname, "test-global-link")
+
+var EXEC_OPTS = {
+ cwd : pkg
+}
+
+test("setup", function (t) {
+ cleanup()
+ setup()
+
+ t.end()
+})
+
+test("install and link", function (t) {
+ common.npm(
+ [
+ "--global",
+ "--prefix", lnk,
+ "--loglevel", "silent",
+ "install", "../test-linked"
+ ],
+ EXEC_OPTS,
+ function (er, code, stdout, stderr) {
+ t.ifError(er, "test-linked install didn't explode")
+ t.notOk(code, "test-linked install also failed")
+ t.notOk(stderr, "no log output")
+
+ verify(t, stdout)
+
+ // again, to make sure unlinking works properlyt
+ common.npm(
+ [
+ "--global",
+ "--prefix", lnk,
+ "--loglevel", "silent",
+ "install", "../test-linked"
+ ],
+ EXEC_OPTS,
+ function (er, code, stdout, stderr) {
+ t.ifError(er, "test-linked install didn't explode")
+ t.notOk(code, "test-linked install also failed")
+ t.notOk(stderr, "no log output")
+
+ verify(t, stdout)
+
+ fs.readdir(pkg, function (er, files) {
+ t.ifError(er, "package directory is still there")
+ t.deepEqual(files, ["node_modules"], "only stub modules dir remains")
+
+ t.end()
+ })
+ }
+ )
+ }
+ )
+})
+
+test("cleanup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+
+var index = "module.exports = function () { console.log('whoop whoop') }"
+
+var fixture = {
+ name: "@test/linked",
+ version: "1.0.0",
+ bin: {
+ linked: "./index.js"
+ }
+}
+
+function verify (t, stdout) {
+ var binPath = resolve(lnk, "bin", "linked")
+ var pkgPath = resolve(lnk, "lib", "node_modules", "@test", "linked")
+ var trgPath = resolve(pkgPath, "index.js")
+ t.equal(
+ stdout,
+ binPath+" -> "+trgPath+"\n@test/linked@1.0.0 "+pkgPath+"\n",
+ "got expected install output"
+ )
+}
+
+function cleanup () {
+ rimraf.sync(pkg)
+ rimraf.sync(dep)
+ rimraf.sync(lnk)
+ rimraf.sync(glb)
+}
+
+function setup () {
+ mkdirp.sync(pkg)
+ mkdirp.sync(glb)
+ fs.symlinkSync(glb, lnk)
+ // so it doesn't try to install into npm's own node_modules
+ mkdirp.sync(resolve(pkg, "node_modules"))
+ mkdirp.sync(dep)
+ fs.writeFileSync(resolve(dep, "package.json"), JSON.stringify(fixture))
+ fs.writeFileSync(resolve(dep, "index.js"), index)
+}
diff --git a/deps/npm/test/tap/get.js b/deps/npm/test/tap/get.js
new file mode 100644
index 000000000..fbc88161e
--- /dev/null
+++ b/deps/npm/test/tap/get.js
@@ -0,0 +1,125 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var cacheFile = require("npm-cache-filename")
+var npm = require("../../")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var path = require("path")
+var mr = require("npm-registry-mock")
+var fs = require("graceful-fs")
+
+function nop () {}
+
+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 PARAMS = {
+ timeout : TIMEOUT,
+ follow : FOLLOW,
+ staleOk : STALE_OK,
+ auth : AUTH
+}
+var PKG_DIR = path.resolve(__dirname, "get-basic")
+var CACHE_DIR = path.resolve(PKG_DIR, "cache")
+var BIGCO_SAMPLE = {
+ name : "@bigco/sample",
+ version : "1.2.3"
+}
+
+// mock server reference
+var server
+
+var mocks = {
+ "get": {
+ "/@bigco%2fsample/1.2.3" : [200, JSON.stringify(BIGCO_SAMPLE)]
+ }
+}
+
+var mapper = cacheFile(CACHE_DIR)
+
+function getCachePath (uri) {
+ return path.join(mapper(uri), ".cache.json")
+}
+
+test("setup", function (t) {
+ mkdirp.sync(CACHE_DIR)
+
+ mr({port: common.port, mocks: mocks}, function (s) {
+ npm.load({cache: CACHE_DIR, registry: common.registry}, function (err) {
+ t.ifError(err)
+ server = s
+ t.end()
+ })
+ })
+})
+
+test("get call contract", function (t) {
+ t.throws(function () {
+ npm.registry.get(undefined, PARAMS, nop)
+ }, "requires a URI")
+
+ t.throws(function () {
+ npm.registry.get([], PARAMS, nop)
+ }, "requires URI to be a string")
+
+ t.throws(function () {
+ npm.registry.get(URI, undefined, nop)
+ }, "requires params object")
+
+ t.throws(function () {
+ npm.registry.get(URI, "", nop)
+ }, "params must be object")
+
+ t.throws(function () {
+ npm.registry.get(URI, PARAMS, undefined)
+ }, "requires callback")
+
+ t.throws(function () {
+ npm.registry.get(URI, PARAMS, "callback")
+ }, "callback must be function")
+
+ t.end()
+})
+
+test("basic request", function (t) {
+ t.plan(9)
+
+ var versioned = common.registry + "/underscore/1.3.3"
+ npm.registry.get(versioned, PARAMS, function (er, data) {
+ t.ifError(er, "loaded specified version underscore data")
+ t.equal(data.version, "1.3.3")
+ fs.stat(getCachePath(versioned), function (er) {
+ t.ifError(er, "underscore 1.3.3 cache data written")
+ })
+ })
+
+ var rollup = common.registry + "/underscore"
+ npm.registry.get(rollup, PARAMS, function (er, data) {
+ t.ifError(er, "loaded all metadata")
+ t.deepEqual(data.name, "underscore")
+ fs.stat(getCachePath(rollup), function (er) {
+ t.ifError(er, "underscore rollup cache data written")
+ })
+ })
+
+ var scoped = common.registry + "/@bigco%2fsample/1.2.3"
+ npm.registry.get(scoped, PARAMS, function (er, data) {
+ t.ifError(er, "loaded all metadata")
+ t.deepEqual(data.name, "@bigco/sample")
+ fs.stat(getCachePath(scoped), function (er) {
+ t.ifError(er, "scoped cache data written")
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ server.close()
+ rimraf.sync(PKG_DIR)
+
+ t.end()
+})
diff --git a/deps/npm/test/tap/git-npmignore.js b/deps/npm/test/tap/git-npmignore.js
new file mode 100644
index 000000000..6a703f0cf
--- /dev/null
+++ b/deps/npm/test/tap/git-npmignore.js
@@ -0,0 +1,172 @@
+var cat = require("graceful-fs").writeFileSync
+var exec = require("child_process").exec
+var readdir = require("graceful-fs").readdirSync
+var resolve = require("path").resolve
+
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var test = require("tap").test
+var tmpdir = require("osenv").tmpdir
+var which = require("which")
+
+var common = require("../common-tap.js")
+
+var pkg = resolve(__dirname, "git-npmignore")
+var dep = resolve(pkg, "deps", "gitch")
+var packname = "gitch-1.0.0.tgz"
+var packed = resolve(pkg, packname)
+var modules = resolve(pkg, "node_modules")
+var installed = resolve(modules, "gitch")
+var expected = [
+ "a.js",
+ "package.json",
+ ".npmignore"
+].sort()
+
+var EXEC_OPTS = {
+ cwd : pkg
+}
+
+test("setup", function (t) {
+ setup(function (er) {
+ t.ifError(er, "setup ran OK")
+
+ t.end()
+ })
+})
+
+test("npm pack directly from directory", function (t) {
+ packInstallTest(dep, t)
+})
+
+test("npm pack via git", function (t) {
+ packInstallTest("git+file://"+dep, t)
+})
+
+test("cleanup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+function packInstallTest (spec, t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "pack", spec
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm pack ran without error")
+ t.notOk(code, "npm pack exited cleanly")
+ t.notOk(stderr, "npm pack ran silently")
+ t.equal(stdout.trim(), packname, "got expected package name")
+
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "install", packed
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm install ran without error")
+ t.notOk(code, "npm install exited cleanly")
+ t.notOk(stderr, "npm install ran silently")
+
+ var actual = readdir(installed).sort()
+ t.same(actual, expected, "no unexpected files in packed directory")
+
+ rimraf(packed, function () {
+ t.end()
+ })
+ }
+ )
+ }
+ )
+}
+
+var gitignore = "node_modules/\n"
+var npmignore = "t.js\n"
+
+var a = "console.log('hi');"
+var t = "require('tap').test(function (t) { t.pass('I am a test!'); t.end(); });"
+var fixture = {
+ "name" : "gitch",
+ "version" : "1.0.0",
+ "private" : true,
+ "main" : "a.js"
+}
+
+function cleanup () {
+ process.chdir(tmpdir())
+ rimraf.sync(pkg)
+}
+
+function setup (cb) {
+ cleanup()
+
+ mkdirp.sync(modules)
+ mkdirp.sync(dep)
+
+ process.chdir(dep)
+
+ cat(resolve(dep, ".npmignore"), npmignore)
+ cat(resolve(dep, ".gitignore"), gitignore)
+ cat(resolve(dep, "a.js"), a)
+ cat(resolve(dep, "t.js"), t)
+ cat(resolve(dep, "package.json"), JSON.stringify(fixture))
+
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "cache", "clean"
+ ],
+ EXEC_OPTS,
+ function (er, code, _, stderr) {
+ if (er) return cb(er)
+ if (code) return cb(new Error("npm cache nonzero exit: "+code))
+ if (stderr) return cb(new Error("npm cache clean error: "+stderr))
+
+ which("git", function found (er, git) {
+ if (er) return cb(er)
+
+ exec(git+" init", init)
+
+ function init (er, _, stderr) {
+ if (er) return cb(er)
+ if (stderr) return cb(new Error("git init error: "+stderr))
+
+ exec(git+" config user.name 'Phantom Faker'", user)
+ }
+
+ function user (er, _, stderr) {
+ if (er) return cb(er)
+ if (stderr) return cb(new Error("git config error: "+stderr))
+
+ exec(git+" config user.email nope@not.real", email)
+ }
+
+ function email (er, _, stderr) {
+ if (er) return cb(er)
+ if (stderr) return cb(new Error("git config error: "+stderr))
+
+ exec(git+" add .", addAll)
+ }
+
+ function addAll (er, _, stderr) {
+ if (er) return cb(er)
+ if (stderr) return cb(new Error("git add . error: "+stderr))
+
+ exec(git+" commit -m boot", commit)
+ }
+
+ function commit (er, _, stderr) {
+ if (er) return cb(er)
+ if (stderr) return cb(new Error("git commit error: "+stderr))
+
+ cb()
+ }
+ })
+ }
+ )
+}
diff --git a/deps/npm/test/tap/ignore-scripts.js b/deps/npm/test/tap/ignore-scripts.js
index 9526443e9..8b5291f78 100644
--- a/deps/npm/test/tap/ignore-scripts.js
+++ b/deps/npm/test/tap/ignore-scripts.js
@@ -27,7 +27,6 @@ var scripts = [
"prepublish", "publish", "postpublish",
"preinstall", "install", "postinstall",
"preuninstall", "uninstall", "postuninstall",
- "preupdate", "update", "postupdate",
"pretest", "test", "posttest",
"prestop", "stop", "poststop",
"prestart", "start", "poststart",
diff --git a/deps/npm/test/tap/ignore-scripts/package.json b/deps/npm/test/tap/ignore-scripts/package.json
index 45336caed..261aa902d 100644
--- a/deps/npm/test/tap/ignore-scripts/package.json
+++ b/deps/npm/test/tap/ignore-scripts/package.json
@@ -9,11 +9,9 @@
"preinstall": "exit 123",
"postinstall": "exit 123",
"preuninstall": "exit 123",
+ "install": "exit 123",
"uninstall": "exit 123",
"postuninstall": "exit 123",
- "preupdate": "exit 123",
- "update": "exit 123",
- "postupdate": "exit 123",
"pretest": "exit 123",
"test": "exit 123",
"posttest": "exit 123",
diff --git a/deps/npm/test/tap/init-interrupt.js b/deps/npm/test/tap/init-interrupt.js
new file mode 100644
index 000000000..962ab7244
--- /dev/null
+++ b/deps/npm/test/tap/init-interrupt.js
@@ -0,0 +1,58 @@
+// if "npm init" is interrupted with ^C, don't report
+// "init written successfully"
+var test = require("tap").test
+var path = require("path")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var npmlog = require("npmlog")
+var requireInject = require("require-inject")
+
+var npm = require("../../lib/npm.js")
+
+var PKG_DIR = path.resolve(__dirname, "init-interrupt")
+
+test("setup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+test("issue #6684 remove confusing message", function (t) {
+
+ var initJsonMock = function (dir, input, config, cb) {
+ process.nextTick(function () {
+ cb({message : "canceled"})
+ })
+ }
+ initJsonMock.yes = function () { return true }
+
+ npm.load({loglevel : "silent"}, function () {
+ var log = ""
+ var init = requireInject("../../lib/init", {
+ "init-package-json": initJsonMock
+ })
+
+ // capture log messages
+ npmlog.on("log", function (chunk) { log += chunk.message + "\n" } )
+
+ init([], function (err, code) {
+ t.ifError(err, "init ran successfully")
+ t.notOk(code, "exited without issue")
+ t.notSimilar(log, /written successfully/, "no success message written")
+ t.similar(log, /canceled/, "alerted that init was canceled")
+
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+
+ t.end()
+})
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(PKG_DIR)
+}
diff --git a/deps/npm/test/tap/install-bad-man.js b/deps/npm/test/tap/install-bad-man.js
new file mode 100644
index 000000000..531509e99
--- /dev/null
+++ b/deps/npm/test/tap/install-bad-man.js
@@ -0,0 +1,79 @@
+var fs = require("fs")
+var resolve = require("path").resolve
+
+var osenv = require("osenv")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var test = require("tap").test
+
+var common = require("../common-tap.js")
+
+var pkg = resolve(__dirname, "install-bad-man")
+var target = resolve(__dirname, "install-bad-man-target")
+
+var EXEC_OPTS = {
+ cwd: target
+}
+
+test("setup", function (t) {
+ setup()
+ t.pass("setup ran")
+ t.end()
+})
+
+test("install from repo on 'OS X'", function (t) {
+ common.npm(
+ [
+ "install",
+ "--prefix", target,
+ "--global",
+ pkg
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm command ran from test")
+ t.equals(code, 1, "install exited with failure (1)")
+ t.notOk(stdout, "no output indicating success")
+ t.notOk(
+ stderr.match(/Cannot read property '1' of null/),
+ "no longer has cryptic error output"
+ )
+ t.ok(
+ stderr.match(/install-bad-man\.1\.lol is not a valid name/),
+ "got expected error output"
+ )
+
+ t.end()
+ }
+ )
+})
+
+test("clean", function (t) {
+ cleanup()
+ t.pass("cleaned up")
+ t.end()
+})
+
+var json = {
+ name : "install-bad-man",
+ version : "1.2.3",
+ man : [ "./install-bad-man.1.lol" ]
+}
+
+function setup () {
+ cleanup()
+ mkdirp.sync(pkg)
+ // make sure it installs locally
+ mkdirp.sync(resolve(target, "node_modules"))
+ fs.writeFileSync(
+ resolve(pkg, "package.json"),
+ JSON.stringify(json, null, 2)+"\n"
+ )
+ fs.writeFileSync(resolve(pkg, "install-bad-man.1.lol"), "lol\n")
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+ rimraf.sync(target)
+}
diff --git a/deps/npm/test/tap/lifecycle-path.js b/deps/npm/test/tap/lifecycle-path.js
index cf4bbdc99..dc05a15dc 100644
--- a/deps/npm/test/tap/lifecycle-path.js
+++ b/deps/npm/test/tap/lifecycle-path.js
@@ -6,11 +6,13 @@ var pkg = path.resolve(__dirname, "lifecycle-path")
var fs = require("fs")
var link = path.resolve(pkg, "node-bin")
-// Without the path to the shell, nothing works usually.
var PATH
if (process.platform === "win32") {
- PATH = "C:\\Windows\\system32;C:\\Windows"
+ // On Windows the 'comspec' environment variable is used,
+ // so cmd.exe does not need to be on the path.
+ PATH = "C:\\foo\\bar"
} else {
+ // On non-Windows, without the path to the shell, nothing usually works.
PATH = "/bin:/usr/bin"
}
diff --git a/deps/npm/test/tap/ls-l-depth-0.js b/deps/npm/test/tap/ls-l-depth-0.js
new file mode 100644
index 000000000..c11f4826e
--- /dev/null
+++ b/deps/npm/test/tap/ls-l-depth-0.js
@@ -0,0 +1,114 @@
+var cat = require("graceful-fs").writeFileSync
+var resolve = require("path").resolve
+
+var mkdirp = require("mkdirp")
+var mr = require("npm-registry-mock")
+var rimraf = require("rimraf")
+var test = require("tap").test
+var tmpdir = require("osenv").tmpdir
+
+var common = require("../common-tap.js")
+
+var pkg = resolve(__dirname, "ls-l-depth-0")
+var dep = resolve(pkg, "deps", "glock")
+var modules = resolve(pkg, "node_modules")
+
+var expected =
+ "\n" +
+ "│ " + pkg + "\n" +
+ "│ \n" +
+ "└── glock@1.8.7\n" +
+ " an inexplicably hostile sample package\n" +
+ " https://github.com/npm/glo.ck\n" +
+ " https://glo.ck\n" +
+ "\n"
+
+var server
+
+var EXEC_OPTS = {
+ cwd : pkg
+}
+
+test("setup", function (t) {
+ setup()
+ mr(common.port, function (s) {
+ server = s
+
+ t.end()
+ })
+})
+
+test("#6311: npm ll --depth=0 duplicates listing", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "install", dep
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm install ran without error")
+ t.notOk(code, "npm install exited cleanly")
+ t.notOk(stderr, "npm install ran silently")
+ t.equal(
+ stdout.trim(),
+ "glock@1.8.7 node_modules/glock\n└── underscore@1.5.1",
+ "got expected install output"
+ )
+
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "ls", "--long",
+ "--depth", "0"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm ll ran without error")
+ t.notOk(code, "npm ll exited cleanly")
+ t.notOk(stderr, "npm ll ran silently")
+ t.equal(
+ stdout,
+ expected,
+ "got expected package name"
+ )
+
+ t.end()
+ }
+ )
+ }
+ )
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ server.close()
+
+ t.end()
+})
+
+var fixture = {
+ "name" : "glock",
+ "version" : "1.8.7",
+ "private" : true,
+ "description" : "an inexplicably hostile sample package",
+ "homepage" : "https://glo.ck",
+ "repository" : "https://github.com/npm/glo.ck",
+ "dependencies" : {
+ "underscore" : "1.5.1"
+ }
+}
+
+function cleanup () {
+ process.chdir(tmpdir())
+ rimraf.sync(pkg)
+}
+
+function setup () {
+ cleanup()
+
+ mkdirp.sync(modules)
+ mkdirp.sync(dep)
+
+ cat(resolve(dep, "package.json"), JSON.stringify(fixture))
+}
diff --git a/deps/npm/test/tap/map-to-registry.js b/deps/npm/test/tap/map-to-registry.js
new file mode 100644
index 000000000..72cdbe516
--- /dev/null
+++ b/deps/npm/test/tap/map-to-registry.js
@@ -0,0 +1,89 @@
+var test = require("tap").test
+var npm = require("../../")
+
+var mapRegistry = require("../../lib/utils/map-to-registry.js")
+
+var creds = {
+ "//registry.npmjs.org/:username" : "u",
+ "//registry.npmjs.org/:_password" : new Buffer("p").toString("base64"),
+ "//registry.npmjs.org/:email" : "e"
+}
+test("setup", function (t) {
+ npm.load(creds, function (err) {
+ t.ifError(err)
+ t.end()
+ })
+})
+
+test("mapRegistryToURI", function (t) {
+ t.plan(16)
+
+ mapRegistry("basic", npm.config, function (er, uri, auth, registry) {
+ t.ifError(er, "mapRegistryToURI worked")
+ t.equal(uri, "https://registry.npmjs.org/basic")
+ t.deepEqual(auth, {
+ scope : "//registry.npmjs.org/",
+ token : undefined,
+ username : "u",
+ password : "p",
+ email : "e",
+ auth : "dTpw",
+ alwaysAuth : false
+ })
+ t.equal(registry, "https://registry.npmjs.org/")
+ })
+
+ npm.config.set("scope", "test")
+ npm.config.set("@test:registry", "http://reg.npm/design/-/rewrite/")
+ npm.config.set("//reg.npm/design/-/rewrite/:_authToken", "a-token")
+ mapRegistry("simple", npm.config, function (er, uri, auth, registry) {
+ t.ifError(er, "mapRegistryToURI worked")
+ t.equal(uri, "http://reg.npm/design/-/rewrite/simple")
+ t.deepEqual(auth, {
+ scope : "//reg.npm/design/-/rewrite/",
+ token : "a-token",
+ username : undefined,
+ password : undefined,
+ email : undefined,
+ auth : undefined,
+ alwaysAuth : undefined
+ })
+ t.equal(registry, "http://reg.npm/design/-/rewrite/")
+ })
+
+ npm.config.set("scope", "")
+ npm.config.set("@test2:registry", "http://reg.npm/-/rewrite/")
+ npm.config.set("//reg.npm/-/rewrite/:_authToken", "b-token")
+ mapRegistry("@test2/easy", npm.config, function (er, uri, auth, registry) {
+ t.ifError(er, "mapRegistryToURI worked")
+ t.equal(uri, "http://reg.npm/-/rewrite/@test2%2feasy")
+ t.deepEqual(auth, {
+ scope : "//reg.npm/-/rewrite/",
+ token : "b-token",
+ username : undefined,
+ password : undefined,
+ email : undefined,
+ auth : undefined,
+ alwaysAuth : undefined
+ })
+ t.equal(registry, "http://reg.npm/-/rewrite/")
+ })
+
+ npm.config.set("scope", "test")
+ npm.config.set("@test3:registry", "http://reg.npm/design/-/rewrite/relative")
+ npm.config.set("//reg.npm/design/-/rewrite/:_authToken", "c-token")
+ mapRegistry("@test3/basic", npm.config, function (er, uri, auth, registry) {
+ t.ifError(er, "mapRegistryToURI worked")
+ t.equal(uri, "http://reg.npm/design/-/rewrite/relative/@test3%2fbasic")
+ t.deepEqual(auth, {
+ scope : "//reg.npm/design/-/rewrite/",
+ token : "c-token",
+ username : undefined,
+ password : undefined,
+ email : undefined,
+ auth : undefined,
+ alwaysAuth : undefined
+ })
+ t.equal(registry, "http://reg.npm/design/-/rewrite/relative/")
+ })
+})
diff --git a/deps/npm/test/tap/nerf-dart.js b/deps/npm/test/tap/nerf-dart.js
new file mode 100644
index 000000000..157f6c7df
--- /dev/null
+++ b/deps/npm/test/tap/nerf-dart.js
@@ -0,0 +1,32 @@
+// taken from https://raw.githubusercontent.com/indexzero/npm/bd3cad01fbd3ab481d2f5da441b9eead16029123/test/tap/config-nerf-dart.js
+// originally written by Charlie Robbins, https://github.com/indexzero
+var test = require("tap").test
+var toNerfDart = require("../../lib/config/nerf-dart.js")
+
+function validNerfDart (uri, valid) {
+ if (!valid) valid = "//registry.npmjs.org/"
+ test(uri, function (t) {
+ t.equal(toNerfDart(uri), valid)
+ t.end()
+ })
+}
+
+validNerfDart("http://registry.npmjs.org")
+validNerfDart("http://registry.npmjs.org/some-package")
+validNerfDart("http://registry.npmjs.org/some-package?write=true")
+validNerfDart("http://user:pass@registry.npmjs.org/some-package?write=true")
+validNerfDart("http://registry.npmjs.org/#random-hash")
+validNerfDart("http://registry.npmjs.org/some-package#random-hash")
+
+validNerfDart(
+ "http://relative.couchapp.npm/design/-/rewrite/",
+ "//relative.couchapp.npm/design/-/rewrite/"
+)
+validNerfDart(
+ "http://relative.couchapp.npm:8080/design/-/rewrite/",
+ "//relative.couchapp.npm:8080/design/-/rewrite/"
+)
+validNerfDart(
+ "http://relative.couchapp.npm:8080/design/-/rewrite/some-package",
+ "//relative.couchapp.npm:8080/design/-/rewrite/"
+)
diff --git a/deps/npm/test/tap/outdated-private.js b/deps/npm/test/tap/outdated-private.js
new file mode 100644
index 000000000..b0f84647f
--- /dev/null
+++ b/deps/npm/test/tap/outdated-private.js
@@ -0,0 +1,101 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var rimraf = require("rimraf")
+var path = require("path")
+var mr = require("npm-registry-mock")
+var osenv = require("osenv")
+var mkdirp = require("mkdirp")
+var fs = require("graceful-fs")
+
+var pkg = path.resolve(__dirname, "outdated-private")
+var pkgLocalPrivate = path.resolve(pkg, "local-private")
+var pkgScopedLocalPrivate = path.resolve(pkg, "another-local-private")
+var pkgLocalUnderscore = path.resolve(pkg, "underscore")
+
+test("setup", function (t) {
+ bootstrap()
+ t.end()
+})
+
+test("outdated ignores private modules", function (t) {
+ t.plan(3)
+ process.chdir(pkg)
+ mr({ port : common.port }, function (s) {
+ npm.load(
+ {
+ loglevel : "silent",
+ parseable : true,
+ registry : common.registry
+ },
+ function () {
+ npm.install(".", function (err) {
+ t.ifError(err, "install success")
+ npm.outdated(function (er, d) {
+ t.ifError(er, "outdated success")
+ t.deepEqual(d, [[
+ path.resolve(__dirname, "outdated-private"),
+ "underscore",
+ "1.3.1",
+ "1.3.1",
+ "1.5.1",
+ "file:underscore"
+ ]])
+ s.close()
+ })
+ })
+ }
+ )
+ })
+})
+
+test("cleanup", function (t) {
+ cleanup()
+ t.end()
+})
+
+var pjParent = JSON.stringify({
+ name : "outdated-private",
+ version : "1.0.0",
+ dependencies : {
+ "local-private" : "file:local-private",
+ "@scoped/another-local-private" : "file:another-local-private",
+ "underscore" : "file:underscore"
+ }
+}, null, 2) + "\n"
+
+var pjLocalPrivate = JSON.stringify({
+ name : "local-private",
+ version : "1.0.0",
+ private : true
+}, null, 2) + "\n"
+
+var pjScopedLocalPrivate = JSON.stringify({
+ name : "@scoped/another-local-private",
+ version : "1.0.0",
+ private : true
+}, null, 2) + "\n"
+
+var pjLocalUnderscore = JSON.stringify({
+ name : "underscore",
+ version : "1.3.1"
+}, null, 2) + "\n"
+
+function bootstrap () {
+ mkdirp.sync(pkg)
+ fs.writeFileSync(path.resolve(pkg, "package.json"), pjParent)
+
+ mkdirp.sync(pkgLocalPrivate)
+ fs.writeFileSync(path.resolve(pkgLocalPrivate, "package.json"), pjLocalPrivate)
+
+ mkdirp.sync(pkgScopedLocalPrivate)
+ fs.writeFileSync(path.resolve(pkgScopedLocalPrivate, "package.json"), pjScopedLocalPrivate)
+
+ mkdirp.sync(pkgLocalUnderscore)
+ fs.writeFileSync(path.resolve(pkgLocalUnderscore, "package.json"), pjLocalUnderscore)
+}
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+}
diff --git a/deps/npm/test/tap/owner.js b/deps/npm/test/tap/owner.js
new file mode 100644
index 000000000..47dc255d8
--- /dev/null
+++ b/deps/npm/test/tap/owner.js
@@ -0,0 +1,161 @@
+var mr = require("npm-registry-mock")
+var test = require("tap").test
+
+var common = require("../common-tap.js")
+
+var server
+
+var EXEC_OPTS = {}
+
+var jashkenas = {
+ name : "jashkenas",
+ email : "jashkenas@gmail.com"
+}
+
+var othiym23 = {
+ name : "othiym23",
+ email : "forrest@npmjs.com"
+}
+
+var bcoe = {
+ name : "bcoe",
+ email : "ben@npmjs.com"
+}
+
+function shrt (user) {
+ return user.name+" <"+user.email+">\n"
+}
+
+function mocks (server) {
+ server.get("/-/user/org.couchdb.user:othiym23")
+ .many().reply(200, othiym23)
+
+ // test 1
+ server.get("/underscore")
+ .reply(200, {_id:"underscore",_rev:1,maintainers:[jashkenas]})
+ server.put(
+ "/underscore/-rev/1",
+ {_id:"underscore",_rev:1,maintainers:[jashkenas,othiym23]},
+ {}
+ ).reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
+
+ // test 2
+ server.get("/@xxx%2fscoped")
+ .reply(200, {_id:"@xxx/scoped",_rev:1,maintainers:[bcoe]})
+ server.put(
+ "/@xxx%2fscoped/-rev/1",
+ {_id:"@xxx/scoped",_rev:1,maintainers:[bcoe,othiym23]},
+ {}
+ ).reply(200, {_id:"@xxx/scoped",_rev:2,maintainers:[bcoe,othiym23]})
+
+ // test 3
+ server.get("/underscore")
+ .reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
+
+ // test 4
+ server.put(
+ "/underscore/-rev/2",
+ {_id:"underscore",_rev:2,maintainers:[jashkenas]},
+ {}
+ ).reply(200, {_id:"underscore",_rev:3,maintainers:[jashkenas]})
+}
+
+test("setup", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "cache", "clean"
+ ],
+ EXEC_OPTS,
+ function (err, code) {
+ t.ifError(err, "npm cache clean ran without error")
+ t.notOk(code, "npm cache clean exited cleanly")
+
+ mr({ port : common.port, mocks : mocks }, function (s) {
+ server = s
+ t.end()
+ })
+ }
+ )
+})
+
+test("npm owner add", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "add", "othiym23", "underscore"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner add ran without error")
+ t.notOk(code, "npm owner add exited cleanly")
+ t.notOk(stderr, "npm owner add ran silently")
+ t.equal(stdout, "+ othiym23 (underscore)\n", "got expected add output")
+
+ t.end()
+ }
+ )
+})
+
+test("npm owner add (scoped)", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "add", "othiym23", "@xxx/scoped"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner add (scoped) ran without error")
+ t.notOk(code, "npm owner add (scoped) exited cleanly")
+ t.notOk(stderr, "npm owner add (scoped) ran silently")
+ t.equal(stdout, "+ othiym23 (@xxx/scoped)\n", "got expected scoped add output")
+
+ t.end()
+ }
+ )
+})
+
+test("npm owner ls", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "ls", "underscore"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner ls ran without error")
+ t.notOk(code, "npm owner ls exited cleanly")
+ t.notOk(stderr, "npm owner ls ran silently")
+ t.equal(stdout, shrt(jashkenas)+shrt(othiym23), "got expected ls output")
+
+ t.end()
+ }
+ )
+})
+
+test("npm owner rm", function (t) {
+ common.npm(
+ [
+ "--loglevel", "silent",
+ "--registry", common.registry,
+ "owner", "rm", "othiym23", "underscore"
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "npm owner rm ran without error")
+ t.notOk(code, "npm owner rm exited cleanly")
+ t.notOk(stderr, "npm owner rm ran silently")
+ t.equal(stdout, "- othiym23 (underscore)\n", "got expected rm output")
+
+ t.end()
+ }
+ )
+})
+
+test("cleanup", function (t) {
+ server.close()
+ t.end()
+})
diff --git a/deps/npm/test/tap/run-script.js b/deps/npm/test/tap/run-script.js
index 6ce361968..6b5ce26aa 100644
--- a/deps/npm/test/tap/run-script.js
+++ b/deps/npm/test/tap/run-script.js
@@ -19,8 +19,8 @@ function testOutput (t, command, er, code, stdout, stderr) {
lines = stdout.trim().split("\n")
stdout = lines.filter(function(line) {
- return line.trim() !== "" && line[0] !== '>'
- }).join(';')
+ return line.trim() !== "" && line[0] !== ">"
+ }).join(";")
t.equal(stdout, command)
t.end()
@@ -78,6 +78,31 @@ test("npm run-script explicitly call pre script with arg", function (t) {
common.npm(["run-script", "prewith-pre", "--", "an arg"], opts, testOutput.bind(null, t, "an arg"))
})
+test("npm run-script test", function (t) {
+ common.npm(["run-script", "test"], opts, function (er, code, stdout, stderr) {
+ t.ifError(er, "npm run-script test ran without issue")
+ t.notOk(stderr, "should not generate errors")
+ t.end()
+ })
+})
+
+test("npm run-script env", function (t) {
+ common.npm(["run-script", "env"], opts, function (er, code, stdout, stderr) {
+ t.ifError(er, "using default env script")
+ t.notOk(stderr, "should not generate errors")
+ t.ok( stdout.indexOf("npm_config_init_version") > 0, "expected values in var list" )
+ t.end()
+ })
+})
+
+test("npm run-script nonexistent-script", function (t) {
+ common.npm(["run-script", "nonexistent-script"], opts, function (er, code, stdout, stderr) {
+ t.ifError(er, "npm run-script nonexistent-script did not cause npm to explode")
+ t.ok(stderr, "should generate errors")
+ t.end()
+ })
+})
+
test("cleanup", function (t) {
cleanup()
t.end()
diff --git a/deps/npm/test/tap/run-script/package.json b/deps/npm/test/tap/run-script/package.json
index afa0e3f0c..ebaffefe0 100644
--- a/deps/npm/test/tap/run-script/package.json
+++ b/deps/npm/test/tap/run-script/package.json
@@ -1,13 +1,13 @@
{"name":"runscript"
,"version":"1.2.3"
,"scripts":{
- "start":"node -e 'console.log(process.argv[1] || \"start\")'",
- "prewith-pre":"node -e 'console.log(process.argv[1] || \"pre\")'",
- "with-pre":"node -e 'console.log(process.argv[1] || \"main\")'",
- "with-post":"node -e 'console.log(process.argv[1] || \"main\")'",
- "postwith-post":"node -e 'console.log(process.argv[1] || \"post\")'",
- "prewith-both":"node -e 'console.log(process.argv[1] || \"pre\")'",
- "with-both":"node -e 'console.log(process.argv[1] || \"main\")'",
- "postwith-both":"node -e 'console.log(process.argv[1] || \"post\")'"
+ "start":"node -e \"console.log(process.argv[1] || 'start')\"",
+ "prewith-pre":"node -e \"console.log(process.argv[1] || 'pre')\"",
+ "with-pre":"node -e \"console.log(process.argv[1] || 'main')\"",
+ "with-post":"node -e \"console.log(process.argv[1] || 'main')\"",
+ "postwith-post":"node -e \"console.log(process.argv[1] || 'post')\"",
+ "prewith-both":"node -e \"console.log(process.argv[1] || 'pre')\"",
+ "with-both":"node -e \"console.log(process.argv[1] || 'main')\"",
+ "postwith-both":"node -e \"console.log(process.argv[1] || 'post')\""
}
}
diff --git a/deps/npm/test/tap/shrinkwrap-local-dependency.js b/deps/npm/test/tap/shrinkwrap-local-dependency.js
new file mode 100644
index 000000000..d9514e42d
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-local-dependency.js
@@ -0,0 +1,121 @@
+var test = require("tap").test
+var path = require("path")
+var fs = require("fs")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var common = require("../common-tap.js")
+
+var PKG_DIR = path.resolve(__dirname, "shrinkwrap-local-dependency")
+var CACHE_DIR = path.resolve(PKG_DIR, "cache")
+var DEP_DIR = path.resolve(PKG_DIR, "dep")
+
+test("shrinkwrap uses resolved with file: on local deps", function(t) {
+ setup()
+
+ common.npm(
+ ["--cache="+CACHE_DIR, "--loglevel=silent", "install", "."],
+ {},
+ function (err, code) {
+ t.ifError(err, "npm install worked")
+ t.equal(code, 0, "npm exited normally")
+
+ common.npm(
+ ["--cache="+CACHE_DIR, "--loglevel=silent", "shrinkwrap"],
+ {},
+ function (err, code) {
+ t.ifError(err, "npm shrinkwrap worked")
+ t.equal(code, 0, "npm exited normally")
+
+ fs.readFile("npm-shrinkwrap.json", { encoding : "utf8" }, function (err, data) {
+ t.ifError(err, "read file correctly")
+ t.deepEqual(JSON.parse(data), desired, "shrinkwrap looks correct")
+
+ t.end()
+ })
+ }
+ )
+ }
+ )
+})
+
+test('"npm install" should install local packages from shrinkwrap', function (t) {
+ cleanNodeModules()
+
+ common.npm(
+ ["--cache="+CACHE_DIR, "--loglevel=silent", "install", "."],
+ {},
+ function (err, code) {
+ t.ifError(err, "install ran correctly")
+ t.notOk(code, "npm install exited with code 0")
+ var dependencyPackageJson = path.resolve(
+ PKG_DIR,
+ "node_modules/npm-test-shrinkwrap-local-dependency-dep/package.json"
+ )
+ t.ok(
+ JSON.parse(fs.readFileSync(dependencyPackageJson, "utf8")),
+ "package with local dependency installed from shrinkwrap"
+ )
+
+ t.end()
+ }
+ )
+})
+
+test("cleanup", function(t) {
+ cleanup()
+ t.end()
+})
+
+var desired = {
+ "name": "npm-test-shrinkwrap-local-dependency",
+ "version": "0.0.0",
+ "dependencies": {
+ "npm-test-shrinkwrap-local-dependency-dep": {
+ "version": "0.0.0",
+ "from": "dep",
+ "resolved": "file:dep"
+ }
+ }
+}
+
+var root = {
+ "author": "Thomas Torp",
+ "name": "npm-test-shrinkwrap-local-dependency",
+ "version": "0.0.0",
+ "dependencies": {
+ "npm-test-shrinkwrap-local-dependency-dep": "file:./dep"
+ }
+}
+
+var dependency = {
+ "author": "Thomas Torp",
+ "name": "npm-test-shrinkwrap-local-dependency-dep",
+ "version": "0.0.0"
+}
+
+function setup() {
+ cleanup()
+ mkdirp.sync(PKG_DIR)
+ mkdirp.sync(CACHE_DIR)
+ mkdirp.sync(DEP_DIR)
+ fs.writeFileSync(
+ path.resolve(PKG_DIR, "package.json"),
+ JSON.stringify(root, null, 2)
+ )
+ fs.writeFileSync(
+ path.resolve(DEP_DIR, "package.json"),
+ JSON.stringify(dependency, null, 2)
+ )
+ process.chdir(PKG_DIR)
+}
+
+function cleanNodeModules() {
+ rimraf.sync(path.resolve(PKG_DIR, "node_modules"))
+}
+
+function cleanup() {
+ process.chdir(osenv.tmpdir())
+ cleanNodeModules()
+ rimraf.sync(PKG_DIR)
+}
diff --git a/deps/npm/test/tap/shrinkwrap-scoped-auth.js b/deps/npm/test/tap/shrinkwrap-scoped-auth.js
new file mode 100644
index 000000000..d6bb6b8d6
--- /dev/null
+++ b/deps/npm/test/tap/shrinkwrap-scoped-auth.js
@@ -0,0 +1,108 @@
+var resolve = require("path").resolve
+var writeFileSync = require("graceful-fs").writeFileSync
+
+var mkdirp = require("mkdirp")
+var mr = require("npm-registry-mock")
+var osenv = require("osenv")
+var rimraf = require("rimraf")
+var test = require("tap").test
+
+var common = require("../common-tap.js")
+var toNerfDart = require("../../lib/config/nerf-dart.js")
+
+var pkg = resolve(__dirname, "shrinkwrap-scoped-auth")
+var outfile = resolve(pkg, "_npmrc")
+var modules = resolve(pkg, "node_modules")
+var tarballPath = "/scoped-underscore/-/scoped-underscore-1.3.1.tgz"
+var tarballURL = common.registry + tarballPath
+var tarball = resolve(__dirname, "../fixtures/scoped-underscore-1.3.1.tgz")
+
+var server
+
+var EXEC_OPTS = {
+ cwd : pkg
+}
+
+function mocks (server) {
+ var auth = "Bearer 0xabad1dea"
+ server.get(tarballPath, { authorization : auth }).replyWithFile(200, tarball)
+ server.get(tarballPath).reply(401, {
+ error : "unauthorized",
+ reason : "You are not authorized to access this db."
+ })
+}
+
+test("setup", function (t) {
+ mr({ port : common.port, mocks : mocks }, function (s) {
+ server = s
+ t.ok(s, "set up mock registry")
+ setup()
+ t.end()
+ })
+})
+
+test("authed npm install with shrinkwrapped scoped package", function (t) {
+ common.npm(
+ [
+ "install",
+ "--loglevel", "silent",
+ "--fetch-retries", 0,
+ "--userconfig", outfile
+ ],
+ EXEC_OPTS,
+ function (err, code, stdout, stderr) {
+ t.ifError(err, "test runner executed without error")
+ t.equal(code, 0, "npm install exited OK")
+ t.notOk(stderr, "no output on stderr")
+ t.equal(
+ stdout,
+ "@scoped/underscore@1.3.1 node_modules/@scoped/underscore\n",
+ "module installed where expected"
+ )
+
+ t.end()
+ }
+ )
+})
+
+test("cleanup", function (t) {
+ server.close()
+ cleanup()
+ t.end()
+})
+
+var contents = "@scoped:registry="+common.registry+"\n" +
+ toNerfDart(common.registry)+":_authToken=0xabad1dea\n"
+
+var json = {
+ name : "test-package-install",
+ version : "1.0.0"
+}
+
+var shrinkwrap = {
+ name : "test-package-install",
+ version : "1.0.0",
+ dependencies : {
+ "@scoped/underscore" : {
+ resolved : tarballURL,
+ from : ">=1.3.1 <2",
+ version : "1.3.1"
+ }
+ }
+}
+
+function setup () {
+ cleanup()
+ mkdirp.sync(modules)
+ writeFileSync(resolve(pkg, "package.json"), JSON.stringify(json, null, 2)+"\n")
+ writeFileSync(outfile, contents)
+ writeFileSync(
+ resolve(pkg, "npm-shrinkwrap.json"),
+ JSON.stringify(shrinkwrap, null, 2)+"\n"
+ )
+}
+
+function cleanup() {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg)
+}
diff --git a/deps/npm/test/tap/spawn-enoent-help.js b/deps/npm/test/tap/spawn-enoent-help.js
new file mode 100644
index 000000000..70fb078fa
--- /dev/null
+++ b/deps/npm/test/tap/spawn-enoent-help.js
@@ -0,0 +1,34 @@
+var path = require("path")
+var test = require("tap").test
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "spawn-enoent-help")
+
+test("setup", function (t) {
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ t.end()
+})
+
+test("enoent help", function (t) {
+ common.npm(["help", "config"], {
+ cwd: pkg,
+ env: {
+ PATH: "",
+ Path: "",
+ "npm_config_loglevel": "warn",
+ "npm_config_viewer": "woman"
+ }
+ }, function (er, code, sout, serr) {
+ t.similar(serr, /Check if the file 'emacsclient' is present./)
+ t.equal(global.cooked, undefined, "Don't leak into global scope")
+ t.end()
+ })
+})
+
+test("clean", function (t) {
+ rimraf.sync(pkg)
+ t.end()
+})
diff --git a/deps/npm/test/tap/spawn-enoent.js b/deps/npm/test/tap/spawn-enoent.js
index 20fed21bc..29b70f6f8 100644
--- a/deps/npm/test/tap/spawn-enoent.js
+++ b/deps/npm/test/tap/spawn-enoent.js
@@ -29,7 +29,7 @@ test("enoent script", function (t) {
"npm_config_loglevel": "warn"
}
}, function (er, code, sout, serr) {
- t.similar(serr, /npm ERR! Failed at the x@1\.2\.3 start script\./)
+ t.similar(serr, /npm ERR! Failed at the x@1\.2\.3 start script 'wharble-garble-blorst'\./)
t.end()
})
})
diff --git a/deps/npm/test/tap/umask-lifecycle.js b/deps/npm/test/tap/umask-lifecycle.js
new file mode 100644
index 000000000..a40eae44b
--- /dev/null
+++ b/deps/npm/test/tap/umask-lifecycle.js
@@ -0,0 +1,52 @@
+var path = require("path")
+var test = require("tap").test
+var fs = require("fs")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "umask-lifecycle")
+var pj = JSON.stringify({
+ name:"x",
+ version: "1.2.3",
+ scripts: { umask: "$npm_execpath config get umask && echo \"$npm_config_umask\" && node -p 'process.umask()'" }
+}, null, 2) + "\n"
+
+var expected = [
+ "",
+ "> x@1.2.3 umask "+path.join(__dirname, "umask-lifecycle"),
+ "> $npm_execpath config get umask && echo \"$npm_config_umask\" && node -p 'process.umask()'",
+ "",
+ "0022",
+ "0022",
+ "18",
+ ""
+].join("\n")
+
+test("setup", function (t) {
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ fs.writeFileSync(pkg + "/package.json", pj)
+ t.end()
+})
+
+test("umask script", function (t) {
+ common.npm(["run", "umask"], {
+ umask: 0022,
+ cwd: pkg,
+ env: {
+ PATH: process.env.PATH,
+ Path: process.env.Path,
+ "npm_config_loglevel": "warn"
+ }
+ }, function (er, code, sout, serr) {
+ t.equal(sout, expected)
+ t.equal(serr, "")
+ t.end()
+ })
+})
+
+test("clean", function (t) {
+ rimraf.sync(pkg)
+ t.end()
+})
diff --git a/deps/npm/test/tap/unpack-foreign-tarball.js b/deps/npm/test/tap/unpack-foreign-tarball.js
index d2e2e73c9..b998175b6 100644
--- a/deps/npm/test/tap/unpack-foreign-tarball.js
+++ b/deps/npm/test/tap/unpack-foreign-tarball.js
@@ -51,12 +51,18 @@ test("gitignore and npmignore", function (t) {
common.npm(["install", file], conf, verify.bind(null, t, ["foo", "bar"]))
})
-test("gitignore and npmignore, not gzipped", function (t) {
+test("gitignore and npmignore, not gzipped 1/2", function (t) {
setup()
var file = path.resolve(dir, "gitignore-and-npmignore.tar")
common.npm(["install", file], conf, verify.bind(null, t, ["foo", "bar"]))
})
+test("gitignore and npmignore, not gzipped 2/2", function (t) {
+ setup()
+ var file = path.resolve(dir, "gitignore-and-npmignore-2.tar")
+ common.npm(["install", file], conf, verify.bind(null, t, ["foo", "bar"]))
+})
+
test("clean", function (t) {
clean()
t.end()
diff --git a/deps/npm/test/tap/unpack-foreign-tarball/gitignore-and-npmignore-2.tar b/deps/npm/test/tap/unpack-foreign-tarball/gitignore-and-npmignore-2.tar
new file mode 100644
index 000000000..289dd568b
--- /dev/null
+++ b/deps/npm/test/tap/unpack-foreign-tarball/gitignore-and-npmignore-2.tar
Binary files differ
diff --git a/deps/npm/test/tap/update-index.js b/deps/npm/test/tap/update-index.js
new file mode 100644
index 000000000..f592ecb07
--- /dev/null
+++ b/deps/npm/test/tap/update-index.js
@@ -0,0 +1,188 @@
+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 mr = require("npm-registry-mock")
+
+var updateIndex = require("../../lib/cache/update-index.js")
+
+var PKG_DIR = path.resolve(__dirname, "get-basic")
+var CACHE_DIR = path.resolve(PKG_DIR, "cache")
+
+var server
+
+function setup (t, mock) {
+ mkdirp.sync(CACHE_DIR)
+ mr({ port: common.port, mocks: mock }, function (s) {
+ npm.load({ cache: CACHE_DIR, registry: common.registry }, function (err) {
+ t.ifError(err, "no error")
+ server = s
+ t.end()
+ })
+ })
+}
+
+function cleanup (t) {
+ server.close()
+ rimraf.sync(PKG_DIR)
+
+ t.end()
+}
+
+test("setup basic", function (t) {
+ setup(t, mocks.basic)
+})
+
+test("request basic", function (t) {
+ updateIndex("http://localhost:1337/-/all", {}, function (er) {
+ t.ifError(er, "no error")
+ t.end()
+ })
+})
+
+test("cleanup basic", cleanup)
+
+test("setup auth", function (t) {
+ setup(t, mocks.auth)
+})
+
+test("request auth failure", function (t) {
+ updateIndex("http://localhost:1337/-/all", {}, function (er) {
+ t.ok(er.code, "E401")
+ t.ok(/^unauthorized/.test(er.message), "unauthorized message")
+ t.end()
+ })
+})
+
+test("request auth success", function (t) {
+ // mimic as if alwaysAuth had been set
+ var params = {
+ auth: {
+ username: "bobby",
+ password: "tables",
+ alwaysAuth: true
+ }
+ }
+
+ updateIndex("http://localhost:1337/-/all", params, function (er) {
+ t.ifError(er, "no error")
+ t.end()
+ })
+})
+
+test("cleanup auth", cleanup)
+
+var mocks = {
+ basic: function (server) {
+ server.get("/-/all").reply(200, allMock)
+ },
+ auth: function (server) {
+ var littleBobbyTablesAuth = new Buffer("bobby:tables").toString("base64")
+ var auth = "Basic " + littleBobbyTablesAuth
+ server.get("/-/all", { authorization: auth }).reply(200, allMock)
+ server.get("/-/all").reply(401, {
+ error: "unauthorized",
+ reason: "You are not authorized to access this db."
+ })
+ }
+}
+
+var allMock = {
+ "_updated": 1411727900+25,
+ "generator-frontcow": {
+ "name": "generator-frontcow",
+ "description": "f36b6a6123da50959741e2ce4d634f96ec668c56 This is a fake description to ensure we do not accidentally search the real npm registry or use some kind of cache",
+ "dist-tags": {
+ "latest": "0.1.19"
+ },
+ "maintainers": [
+ {
+ "name": "bcabanes",
+ "email": "contact@benjamincabanes.com"
+ }
+ ],
+ "homepage": "https://github.com/bcabanes/generator-frontcow",
+ "keywords": [
+ "sass",
+ "frontend",
+ "yeoman-generator",
+ "atomic",
+ "design",
+ "sass",
+ "foundation",
+ "foundation5",
+ "atomic design",
+ "bourbon",
+ "polyfill",
+ "font awesome"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/bcabanes/generator-frontcow"
+ },
+ "author": {
+ "name": "ben",
+ "email": "contact@benjamincabanes.com",
+ "url": "https://github.com/bcabanes"
+ },
+ "bugs": {
+ "url": "https://github.com/bcabanes/generator-frontcow/issues"
+ },
+ "license": "MIT",
+ "readmeFilename": "README.md",
+ "time": {
+ "modified": "2014-10-03T02:26:18.406Z"
+ },
+ "versions": {
+ "0.1.19": "latest"
+ }
+ },
+ "marko": {
+ "name": "marko",
+ "description": "Marko is an extensible, streaming, asynchronous, high performance, HTML-based templating language that can be used in Node.js or in the browser.",
+ "dist-tags": {
+ "latest": "1.2.16"
+ },
+ "maintainers": [
+ {
+ "name": "pnidem",
+ "email": "pnidem@gmail.com"
+ },
+ {
+ "name": "philidem",
+ "email": "phillip.idem@gmail.com"
+ }
+ ],
+ "homepage": "https://github.com/raptorjs/marko",
+ "keywords": [
+ "templating",
+ "template",
+ "async",
+ "streaming"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/raptorjs/marko.git"
+ },
+ "author": {
+ "name": "Patrick Steele-Idem",
+ "email": "pnidem@gmail.com"
+ },
+ "bugs": {
+ "url": "https://github.com/raptorjs/marko/issues"
+ },
+ "license": "Apache License v2.0",
+ "readmeFilename": "README.md",
+ "users": {
+ "pnidem": true
+ },
+ "time": {
+ "modified": "2014-10-03T02:27:31.775Z"
+ },
+ "versions": {
+ "1.2.16": "latest"
+ }
+ }
+}
diff --git a/deps/npm/test/tap/version-git-not-clean.js b/deps/npm/test/tap/version-git-not-clean.js
new file mode 100644
index 000000000..efca36240
--- /dev/null
+++ b/deps/npm/test/tap/version-git-not-clean.js
@@ -0,0 +1,81 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var osenv = require("osenv")
+var path = require("path")
+var fs = require("fs")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var which = require("which")
+var spawn = require("child_process").spawn
+
+var pkg = path.resolve(__dirname, "version-git-not-clean")
+var cache = path.resolve(pkg, "cache")
+
+test("npm version <semver> with working directory not clean", function (t) {
+ setup()
+ npm.load({ cache: cache, registry: common.registry, prefix: pkg }, function () {
+ which("git", function (err, git) {
+ t.ifError(err, "git found")
+
+ function gitInit(_cb) {
+ var child = spawn(git, ["init"])
+ var out = ""
+ child.stdout.on("data", function (d) {
+ out += d.toString()
+ })
+ child.on("exit", function () {
+ return _cb(out)
+ })
+ }
+
+ function addPackageJSON(_cb) {
+ var data = JSON.stringify({ name: "blah", version: "0.1.2" })
+ fs.writeFile("package.json", data, function() {
+ var child = spawn(git, ["add", "package.json"])
+ child.on("exit", function () {
+ var child2 = spawn(git, ["commit", "package.json", "-m", "init"])
+ var out = ""
+ child2.stdout.on("data", function (d) {
+ out += d.toString()
+ })
+ child2.on("exit", function () {
+ return _cb(out)
+ })
+ })
+ })
+ }
+
+ gitInit(function() {
+ addPackageJSON(function() {
+ var data = JSON.stringify({ name: "blah", version: "0.1.3" })
+ fs.writeFile("package.json", data, function() {
+ npm.commands.version(["patch"], function (err) {
+ if (!err) {
+ t.fail("should fail on non-clean working directory")
+ }
+ else {
+ t.equal(err.message, "Git working directory not clean.\nM package.json")
+ }
+ t.end()
+ })
+ })
+ })
+ })
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ // windows fix for locked files
+ process.chdir(osenv.tmpdir())
+
+ rimraf.sync(pkg)
+ t.end()
+})
+
+function setup() {
+ mkdirp.sync(pkg)
+ mkdirp.sync(cache)
+ process.chdir(pkg)
+}
diff --git a/deps/npm/test/tap/version-no-package.js b/deps/npm/test/tap/version-no-package.js
new file mode 100644
index 000000000..539f53feb
--- /dev/null
+++ b/deps/npm/test/tap/version-no-package.js
@@ -0,0 +1,45 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var osenv = require("osenv")
+var path = require("path")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+
+var pkg = path.resolve(__dirname, "version-no-package")
+
+test("setup", function (t) {
+ setup()
+ t.end()
+})
+
+test("npm version in a prefix with no package.json", function(t) {
+ setup()
+ common.npm(
+ ["version", "--json", "--prefix", pkg],
+ { cwd : pkg },
+ function (er, code, stdout, stderr) {
+ t.ifError(er, "npm version doesn't care that there's no package.json")
+ t.notOk(code, "npm version ran without barfing")
+ t.ok(stdout, "got version output")
+ t.notOk(stderr, "no error output")
+ t.doesNotThrow(function () {
+ var metadata = JSON.parse(stdout)
+ t.equal(metadata.node, process.versions.node, "node versions match")
+
+ t.end()
+ }, "able to reconstitute version object from stdout")
+ }
+ )
+})
+
+test("cleanup", function(t) {
+ process.chdir(osenv.tmpdir())
+
+ rimraf.sync(pkg)
+ t.end()
+})
+
+function setup() {
+ mkdirp.sync(pkg)
+ process.chdir(pkg)
+}
diff --git a/deps/npm/test/tap/version-update-shrinkwrap.js b/deps/npm/test/tap/version-update-shrinkwrap.js
new file mode 100644
index 000000000..204c7323b
--- /dev/null
+++ b/deps/npm/test/tap/version-update-shrinkwrap.js
@@ -0,0 +1,249 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var osenv = require("osenv")
+var path = require("path")
+var fs = require("fs")
+var rimraf = require("rimraf")
+var mkdirp = require("mkdirp")
+var which = require("which")
+var spawn = require("child_process").spawn
+
+var pkg = path.resolve(__dirname, "version-shrinkwrap")
+var cache = path.resolve(pkg, "cache")
+
+test("npm version <semver> updates shrinkwrap - no git", function (t) {
+ setup()
+ npm.load({ cache: pkg + "/cache", registry: common.registry }, function () {
+ npm.commands.version(["patch"], function(err) {
+ if (err) return t.fail("Error perform version patch")
+ var shrinkwrap = require(path.resolve(pkg, "npm-shrinkwrap.json"))
+ t.equal(shrinkwrap.version, "0.0.1", "got expected version")
+ t.end()
+ })
+ })
+})
+
+test("npm version <semver> updates git works with no shrinkwrap", function (t) {
+ setup()
+
+ rimraf.sync(path.resolve(pkg, "npm-shrinkwrap.json"))
+
+ var opts = {
+ cache : cache,
+ registry : common.registry
+ }
+ npm.load(opts, function () {
+ npm.config.set("sign-git-tag", false)
+ which("git", function (err, git) {
+ if (err) t.fail("Git not installed, or which git command error")
+
+ initRepo()
+
+ function initRepo () {
+ var init = spawn(git, ["init"])
+ init.stdout.pipe(process.stdout)
+ init.on("exit", function (code) {
+ t.notOk(code, "git init exited without issue")
+
+ configName()
+ })
+ }
+
+ function configName () {
+ var namer = spawn(git, ["config", "user.name", "Phantom Faker"])
+ namer.stdout.pipe(process.stdout)
+ namer.on("exit", function (code) {
+ t.notOk(code, "git config user.name exited without issue")
+
+ configEmail()
+ })
+ }
+
+ function configEmail () {
+ var emailer = spawn(git, ["config", "user.email", "nope@not.real"])
+ emailer.stdout.pipe(process.stdout)
+ emailer.on("exit", function (code) {
+ t.notOk(code, "git config user.email exited without issue")
+
+ addAll()
+ })
+ }
+
+ function addAll () {
+ var emailer = spawn(git, ["add", "package.json"])
+ emailer.stdout.pipe(process.stdout)
+ emailer.on("exit", function (code) {
+ t.notOk(code, "git add package.json exited without issue")
+
+ commit()
+ })
+
+ }
+
+ function commit () {
+ var emailer = spawn(git, ["commit", "-m", "test setup"])
+ emailer.stdout.pipe(process.stdout)
+ emailer.on("exit", function (code) {
+ t.notOk(code, "git commit -m 'test setup' exited without issue")
+
+ version()
+ })
+
+ }
+
+ function version () {
+ npm.commands.version(["patch"], checkCommit)
+ }
+
+ function checkCommit (er) {
+ t.ifError(er, "version command ran without error")
+
+ var shrinkwrap = require(path.resolve(pkg, "npm-shrinkwrap.json"))
+ t.equal(shrinkwrap.version, "0.0.1", "got expected version")
+
+ var shower = spawn(git, ["show", "HEAD", "--name-only"])
+ var out = "", eout = ""
+ shower.stdout.on("data", function (d) {
+ out += d.toString()
+ })
+ shower.stderr.on("data", function (d) {
+ eout += d.toString()
+ })
+ shower.on("exit", function (code) {
+ t.notOk(code, "git show HEAD exited without issue")
+ t.notOk(err, "git show produced no error output")
+
+ var lines = out.split("\n")
+ t.notEqual(lines.indexOf("package.json"), -1, "package.json commited")
+ t.equal(lines.indexOf("npm-shrinkwrap.json"), -1, "npm-shrinkwrap.json not present")
+
+ t.end()
+ })
+ }
+ })
+ })
+})
+
+test("npm version <semver> updates shrinkwrap and updates git", function (t) {
+ setup()
+
+ var opts = {
+ cache : cache,
+ registry : common.registry
+ }
+ npm.load(opts, function () {
+ npm.config.set("sign-git-tag", false)
+ which("git", function (err, git) {
+ t.ifError(err, "git found")
+
+ initRepo()
+
+ function initRepo () {
+ var init = spawn(git, ["init"])
+ init.stdout.pipe(process.stdout)
+ init.on("exit", function (code) {
+ t.notOk(code, "git init exited without issue")
+
+ configName()
+ })
+ }
+
+ function configName () {
+ var namer = spawn(git, ["config", "user.name", "Phantom Faker"])
+ namer.stdout.pipe(process.stdout)
+ namer.on("exit", function (code) {
+ t.notOk(code, "git config user.name exited without issue")
+
+ configEmail()
+ })
+ }
+
+ function configEmail () {
+ var emailer = spawn(git, ["config", "user.email", "nope@not.real"])
+ emailer.stdout.pipe(process.stdout)
+ emailer.on("exit", function (code) {
+ t.notOk(code, "git config user.email exited without issue")
+
+ addAll()
+ })
+ }
+
+ function addAll () {
+ var emailer = spawn(git, ["add", "package.json", "npm-shrinkwrap.json"])
+ emailer.stdout.pipe(process.stdout)
+ emailer.on("exit", function (code) {
+ t.notOk(code, "git add package.json npm-shrinkwrap.json exited without issue")
+
+ commit()
+ })
+
+ }
+
+ function commit () {
+ var emailer = spawn(git, ["commit", "-m", "test setup"])
+ emailer.stdout.pipe(process.stdout)
+ emailer.on("exit", function (code) {
+ t.notOk(code, "git commit -m 'test setup' exited without issue")
+
+ version()
+ })
+
+ }
+
+ function version () {
+ npm.commands.version(["patch"], checkCommit)
+ }
+
+ function checkCommit (er) {
+ t.ifError(er, "version command ran without error")
+
+ var shrinkwrap = require(path.resolve(pkg, "npm-shrinkwrap.json"))
+ t.equal(shrinkwrap.version, "0.0.1", "got expected version")
+
+ var shower = spawn(git, ["show", "HEAD", "--name-only"])
+ var out = "", eout = ""
+ shower.stdout.on("data", function (d) {
+ out += d.toString()
+ })
+ shower.stderr.on("data", function (d) {
+ eout += d.toString()
+ })
+ shower.on("exit", function (code) {
+ t.notOk(code, "git show HEAD exited without issue")
+ t.notOk(err, "git show produced no error output")
+
+ var lines = out.split("\n")
+ t.notEqual(lines.indexOf("package.json"), -1, "package.json commited")
+ t.notEqual(lines.indexOf("npm-shrinkwrap.json"), -1, "npm-shrinkwrap.json commited")
+
+ t.end()
+ })
+ }
+ })
+ })
+})
+
+test("cleanup", function(t) {
+ // windows fix for locked files
+ process.chdir(osenv.tmpdir())
+
+ rimraf.sync(pkg)
+ t.end()
+})
+
+function setup() {
+ rimraf.sync(pkg)
+ mkdirp.sync(pkg)
+ mkdirp.sync(cache)
+ var contents = {
+ author: "Nathan Bowser && Faiq Raza",
+ name: "version-with-shrinkwrap-test",
+ version: "0.0.0",
+ description: "Test for version with shrinkwrap update"
+ }
+
+ fs.writeFileSync(path.resolve(pkg, "package.json"), JSON.stringify(contents), "utf8")
+ fs.writeFileSync(path.resolve(pkg, "npm-shrinkwrap.json"), JSON.stringify(contents), "utf8")
+ process.chdir(pkg)
+}
diff --git a/deps/npm/test/tap/whoami.js b/deps/npm/test/tap/whoami.js
index e4ed30df7..558d0db9a 100644
--- a/deps/npm/test/tap/whoami.js
+++ b/deps/npm/test/tap/whoami.js
@@ -45,7 +45,7 @@ test("npm whoami with bearer auth", {timeout : 2 * 1000}, function (t) {
function verify(req, res) {
t.equal(req.method, "GET")
- t.equal(req.url, "/whoami")
+ t.equal(req.url, "/-/whoami")
res.setHeader("content-type", "application/json")
res.writeHeader(200)
diff --git a/deps/npm/test/tap/zz-cleanup.js b/deps/npm/test/tap/zz-cleanup.js
index 7167537e0..c491cbf07 100644
--- a/deps/npm/test/tap/zz-cleanup.js
+++ b/deps/npm/test/tap/zz-cleanup.js
@@ -1,15 +1,8 @@
var common = require("../common-tap")
var test = require("tap").test
-var fs = require("fs")
+var rimraf = require("rimraf")
test("cleanup", function (t) {
- var res = common.deleteNpmCacheRecursivelySync()
- t.equal(res, 0, "Deleted test npm cache successfully")
-
- // ensure cache is clean
- fs.readdir(common.npm_config_cache, function (err) {
- t.ok(err, "error expected")
- t.equal(err.code, "ENOENT", "npm cache directory no longer exists")
- t.end()
- })
+ rimraf.sync(common.npm_config_cache)
+ t.end()
})