From 9fad8958df671c0e894506ef59b4c781c3dfb349 Mon Sep 17 00:00:00 2001
From: Timothy J Fontaine
Date: Wed, 24 Sep 2014 14:41:07 -0700
Subject: [PATCH] deps: upgrade npm to 2.0.0
---
deps/npm/.travis.yml | 8 +-
deps/npm/CHANGELOG.md | 256 ++-
deps/npm/Makefile | 16 +-
deps/npm/README.md | 6 +-
deps/npm/bin/npm-cli.js | 13 +-
deps/npm/doc/cli/npm-adduser.md | 27 +-
deps/npm/doc/cli/npm-install.md | 45 +-
deps/npm/doc/cli/npm-link.md | 18 +-
deps/npm/doc/cli/npm-ls.md | 8 +-
deps/npm/doc/cli/npm-prefix.md | 8 +-
deps/npm/doc/cli/npm-publish.md | 6 +-
deps/npm/doc/cli/npm-restart.md | 2 +-
deps/npm/doc/cli/npm-run-script.md | 4 +-
deps/npm/doc/cli/npm-start.md | 2 +-
deps/npm/doc/cli/npm-stop.md | 2 +-
deps/npm/doc/cli/npm-test.md | 4 +-
deps/npm/doc/cli/npm-uninstall.md | 5 +-
deps/npm/doc/cli/npm-unpublish.md | 4 +-
deps/npm/doc/cli/npm-update.md | 7 +-
deps/npm/doc/cli/npm-view.md | 4 +-
deps/npm/doc/files/npm-folders.md | 6 +
deps/npm/doc/files/package.json.md | 22 +
deps/npm/doc/misc/npm-config.md | 39 +-
deps/npm/doc/misc/npm-faq.md | 20 +-
deps/npm/doc/misc/npm-index.md | 4 +
deps/npm/doc/misc/npm-registry.md | 17 +-
deps/npm/doc/misc/npm-scope.md | 84 +
deps/npm/doc/misc/npm-scripts.md | 5 +-
deps/npm/doc/misc/semver.md | 209 ++-
deps/npm/html/doc/README.html | 12 +-
deps/npm/html/doc/api/npm-bin.html | 2 +-
deps/npm/html/doc/api/npm-bugs.html | 2 +-
deps/npm/html/doc/api/npm-cache.html | 2 +-
deps/npm/html/doc/api/npm-commands.html | 2 +-
deps/npm/html/doc/api/npm-config.html | 2 +-
deps/npm/html/doc/api/npm-deprecate.html | 2 +-
deps/npm/html/doc/api/npm-docs.html | 2 +-
deps/npm/html/doc/api/npm-edit.html | 2 +-
deps/npm/html/doc/api/npm-explore.html | 2 +-
deps/npm/html/doc/api/npm-help-search.html | 2 +-
deps/npm/html/doc/api/npm-init.html | 2 +-
deps/npm/html/doc/api/npm-install.html | 2 +-
deps/npm/html/doc/api/npm-link.html | 2 +-
deps/npm/html/doc/api/npm-load.html | 2 +-
deps/npm/html/doc/api/npm-ls.html | 2 +-
deps/npm/html/doc/api/npm-outdated.html | 2 +-
deps/npm/html/doc/api/npm-owner.html | 2 +-
deps/npm/html/doc/api/npm-pack.html | 2 +-
deps/npm/html/doc/api/npm-prefix.html | 2 +-
deps/npm/html/doc/api/npm-prune.html | 2 +-
deps/npm/html/doc/api/npm-publish.html | 2 +-
deps/npm/html/doc/api/npm-rebuild.html | 2 +-
deps/npm/html/doc/api/npm-repo.html | 2 +-
deps/npm/html/doc/api/npm-restart.html | 2 +-
deps/npm/html/doc/api/npm-root.html | 2 +-
deps/npm/html/doc/api/npm-run-script.html | 2 +-
deps/npm/html/doc/api/npm-search.html | 2 +-
deps/npm/html/doc/api/npm-shrinkwrap.html | 2 +-
deps/npm/html/doc/api/npm-start.html | 2 +-
deps/npm/html/doc/api/npm-stop.html | 2 +-
deps/npm/html/doc/api/npm-submodule.html | 2 +-
deps/npm/html/doc/api/npm-tag.html | 2 +-
deps/npm/html/doc/api/npm-test.html | 2 +-
deps/npm/html/doc/api/npm-uninstall.html | 2 +-
deps/npm/html/doc/api/npm-unpublish.html | 2 +-
deps/npm/html/doc/api/npm-update.html | 2 +-
deps/npm/html/doc/api/npm-version.html | 2 +-
deps/npm/html/doc/api/npm-view.html | 2 +-
deps/npm/html/doc/api/npm-whoami.html | 2 +-
deps/npm/html/doc/api/npm.html | 4 +-
deps/npm/html/doc/cli/npm-adduser.html | 23 +-
deps/npm/html/doc/cli/npm-bin.html | 2 +-
deps/npm/html/doc/cli/npm-bugs.html | 2 +-
deps/npm/html/doc/cli/npm-build.html | 2 +-
deps/npm/html/doc/cli/npm-bundle.html | 2 +-
deps/npm/html/doc/cli/npm-cache.html | 2 +-
deps/npm/html/doc/cli/npm-completion.html | 2 +-
deps/npm/html/doc/cli/npm-config.html | 2 +-
deps/npm/html/doc/cli/npm-dedupe.html | 2 +-
deps/npm/html/doc/cli/npm-deprecate.html | 2 +-
deps/npm/html/doc/cli/npm-docs.html | 2 +-
deps/npm/html/doc/cli/npm-edit.html | 2 +-
deps/npm/html/doc/cli/npm-explore.html | 2 +-
deps/npm/html/doc/cli/npm-help-search.html | 2 +-
deps/npm/html/doc/cli/npm-help.html | 2 +-
deps/npm/html/doc/cli/npm-init.html | 2 +-
deps/npm/html/doc/cli/npm-install.html | 41 +-
deps/npm/html/doc/cli/npm-link.html | 19 +-
deps/npm/html/doc/cli/npm-ls.html | 12 +-
deps/npm/html/doc/cli/npm-outdated.html | 2 +-
deps/npm/html/doc/cli/npm-owner.html | 2 +-
deps/npm/html/doc/cli/npm-pack.html | 2 +-
deps/npm/html/doc/cli/npm-prefix.html | 9 +-
deps/npm/html/doc/cli/npm-prune.html | 2 +-
deps/npm/html/doc/cli/npm-publish.html | 7 +-
deps/npm/html/doc/cli/npm-rebuild.html | 2 +-
deps/npm/html/doc/cli/npm-repo.html | 2 +-
deps/npm/html/doc/cli/npm-restart.html | 4 +-
deps/npm/html/doc/cli/npm-rm.html | 2 +-
deps/npm/html/doc/cli/npm-root.html | 2 +-
deps/npm/html/doc/cli/npm-run-script.html | 6 +-
deps/npm/html/doc/cli/npm-search.html | 2 +-
deps/npm/html/doc/cli/npm-shrinkwrap.html | 2 +-
deps/npm/html/doc/cli/npm-star.html | 2 +-
deps/npm/html/doc/cli/npm-stars.html | 2 +-
deps/npm/html/doc/cli/npm-start.html | 4 +-
deps/npm/html/doc/cli/npm-stop.html | 4 +-
deps/npm/html/doc/cli/npm-submodule.html | 2 +-
deps/npm/html/doc/cli/npm-tag.html | 2 +-
deps/npm/html/doc/cli/npm-test.html | 6 +-
deps/npm/html/doc/cli/npm-uninstall.html | 6 +-
deps/npm/html/doc/cli/npm-unpublish.html | 5 +-
deps/npm/html/doc/cli/npm-update.html | 8 +-
deps/npm/html/doc/cli/npm-version.html | 2 +-
deps/npm/html/doc/cli/npm-view.html | 6 +-
deps/npm/html/doc/cli/npm-whoami.html | 2 +-
deps/npm/html/doc/cli/npm.html | 10 +-
deps/npm/html/doc/files/npm-folders.html | 7 +-
deps/npm/html/doc/files/npm-global.html | 7 +-
deps/npm/html/doc/files/npm-json.html | 21 +-
deps/npm/html/doc/files/npmrc.html | 2 +-
deps/npm/html/doc/files/package.json.html | 21 +-
deps/npm/html/doc/index.html | 4 +-
deps/npm/html/doc/misc/index.html | 438 -----
deps/npm/html/doc/misc/npm-coding-style.html | 2 +-
deps/npm/html/doc/misc/npm-config.html | 36 +-
deps/npm/html/doc/misc/npm-developers.html | 2 +-
deps/npm/html/doc/misc/npm-disputes.html | 8 +-
deps/npm/html/doc/misc/npm-faq.html | 25 +-
deps/npm/html/doc/misc/npm-index.html | 4 +-
deps/npm/html/doc/misc/npm-registry.html | 17 +-
deps/npm/html/doc/misc/npm-scope.html | 2 +-
deps/npm/html/doc/misc/npm-scripts.html | 7 +-
deps/npm/html/doc/misc/removing-npm.html | 2 +-
deps/npm/html/doc/misc/semver.html | 186 +-
deps/npm/lib/adduser.js | 45 +-
deps/npm/lib/bugs.js | 24 +-
deps/npm/lib/build.js | 4 +-
deps/npm/lib/cache.js | 177 +-
deps/npm/lib/cache/add-local-tarball.js | 13 +-
deps/npm/lib/cache/add-local.js | 22 +-
deps/npm/lib/cache/add-named.js | 59 +-
deps/npm/lib/cache/add-remote-git.js | 65 +-
deps/npm/lib/cache/add-remote-tarball.js | 43 +-
deps/npm/lib/cache/get-stat.js | 4 +-
deps/npm/lib/cache/maybe-github.js | 19 +-
deps/npm/lib/dedupe.js | 18 +-
deps/npm/lib/deprecate.js | 39 +-
deps/npm/lib/docs.js | 26 +-
deps/npm/lib/install.js | 276 +--
deps/npm/lib/link.js | 20 +-
deps/npm/lib/ls.js | 23 +-
deps/npm/lib/npm.js | 11 +-
deps/npm/lib/outdated.js | 35 +-
deps/npm/lib/owner.js | 213 ++-
deps/npm/lib/pack.js | 9 +-
deps/npm/lib/publish.js | 84 +-
deps/npm/lib/rebuild.js | 7 +-
deps/npm/lib/repo.js | 28 +-
deps/npm/lib/run-script.js | 34 +-
deps/npm/lib/search.js | 13 +-
deps/npm/lib/star.js | 30 +-
deps/npm/lib/stars.js | 21 +-
deps/npm/lib/submodule.js | 5 +-
deps/npm/lib/tag.js | 28 +-
deps/npm/lib/unbuild.js | 11 +-
deps/npm/lib/unpublish.js | 84 +-
deps/npm/lib/utils/error-handler.js | 122 +-
deps/npm/lib/utils/fetch.js | 106 --
deps/npm/lib/utils/gently-rm.js | 173 +-
deps/npm/lib/utils/is-git-url.js | 13 -
deps/npm/lib/utils/lifecycle.js | 13 +-
deps/npm/lib/utils/map-to-registry.js | 54 +
deps/npm/lib/version.js | 6 +-
deps/npm/lib/view.js | 115 +-
deps/npm/lib/whoami.js | 40 +-
deps/npm/man/man1/npm-README.1 | 337 ++--
deps/npm/man/man1/npm-adduser.1 | 90 +-
deps/npm/man/man1/npm-bin.1 | 48 +-
deps/npm/man/man1/npm-bugs.1 | 89 +-
deps/npm/man/man1/npm-build.1 | 51 +-
deps/npm/man/man1/npm-bundle.1 | 22 +-
deps/npm/man/man1/npm-cache.1 | 98 +-
deps/npm/man/man1/npm-completion.1 | 42 +-
deps/npm/man/man1/npm-config.1 | 118 +-
deps/npm/man/man1/npm-dedupe.1 | 76 +-
deps/npm/man/man1/npm-deprecate.1 | 55 +-
deps/npm/man/man1/npm-docs.1 | 86 +-
deps/npm/man/man1/npm-edit.1 | 70 +-
deps/npm/man/man1/npm-explore.1 | 85 +-
deps/npm/man/man1/npm-help-search.1 | 60 +-
deps/npm/man/man1/npm-help.1 | 80 +-
deps/npm/man/man1/npm-init.1 | 48 +-
deps/npm/man/man1/npm-install.1 | 552 +++---
deps/npm/man/man1/npm-link.1 | 127 +-
deps/npm/man/man1/npm-ls.1 | 161 +-
deps/npm/man/man1/npm-outdated.1 | 119 +-
deps/npm/man/man1/npm-owner.1 | 59 +-
deps/npm/man/man1/npm-pack.1 | 49 +-
deps/npm/man/man1/npm-prefix.1 | 56 +-
deps/npm/man/man1/npm-prune.1 | 43 +-
deps/npm/man/man1/npm-publish.1 | 67 +-
deps/npm/man/man1/npm-rebuild.1 | 44 +-
deps/npm/man/man1/npm-repo.1 | 56 +-
deps/npm/man/man1/npm-restart.1 | 52 +-
deps/npm/man/man1/npm-rm.1 | 48 +-
deps/npm/man/man1/npm-root.1 | 48 +-
deps/npm/man/man1/npm-run-script.1 | 52 +-
deps/npm/man/man1/npm-search.1 | 66 +-
deps/npm/man/man1/npm-shrinkwrap.1 | 229 +--
deps/npm/man/man1/npm-star.1 | 45 +-
deps/npm/man/man1/npm-stars.1 | 45 +-
deps/npm/man/man1/npm-start.1 | 49 +-
deps/npm/man/man1/npm-stop.1 | 49 +-
deps/npm/man/man1/npm-submodule.1 | 43 +-
deps/npm/man/man1/npm-tag.1 | 84 +-
deps/npm/man/man1/npm-test.1 | 52 +-
deps/npm/man/man1/npm-uninstall.1 | 97 +-
deps/npm/man/man1/npm-unpublish.1 | 57 +-
deps/npm/man/man1/npm-update.1 | 54 +-
deps/npm/man/man1/npm-version.1 | 74 +-
deps/npm/man/man1/npm-view.1 | 188 +-
deps/npm/man/man1/npm-whoami.1 | 42 +-
deps/npm/man/man1/npm.1 | 266 ++-
deps/npm/man/man3/npm-bin.3 | 24 +-
deps/npm/man/man3/npm-bugs.3 | 27 +-
deps/npm/man/man3/npm-cache.3 | 28 +-
deps/npm/man/man3/npm-commands.3 | 35 +-
deps/npm/man/man3/npm-config.3 | 82 +-
deps/npm/man/man3/npm-deprecate.3 | 70 +-
deps/npm/man/man3/npm-docs.3 | 27 +-
deps/npm/man/man3/npm-edit.3 | 29 +-
deps/npm/man/man3/npm-explore.3 | 28 +-
deps/npm/man/man3/npm-help-search.3 | 46 +-
deps/npm/man/man3/npm-init.3 | 41 +-
deps/npm/man/man3/npm-install.3 | 32 +-
deps/npm/man/man3/npm-link.3 | 44 +-
deps/npm/man/man3/npm-load.3 | 40 +-
deps/npm/man/man3/npm-ls.3 | 78 +-
deps/npm/man/man3/npm-outdated.3 | 26 +-
deps/npm/man/man3/npm-owner.3 | 55 +-
deps/npm/man/man3/npm-pack.3 | 27 +-
deps/npm/man/man3/npm-prefix.3 | 29 +-
deps/npm/man/man3/npm-prune.3 | 28 +-
deps/npm/man/man3/npm-publish.3 | 54 +-
deps/npm/man/man3/npm-rebuild.3 | 29 +-
deps/npm/man/man3/npm-repo.3 | 27 +-
deps/npm/man/man3/npm-restart.3 | 42 +-
deps/npm/man/man3/npm-root.3 | 29 +-
deps/npm/man/man3/npm-run-script.3 | 51 +-
deps/npm/man/man3/npm-search.3 | 64 +-
deps/npm/man/man3/npm-shrinkwrap.3 | 32 +-
deps/npm/man/man3/npm-start.3 | 26 +-
deps/npm/man/man3/npm-stop.3 | 26 +-
deps/npm/man/man3/npm-submodule.3 | 43 +-
deps/npm/man/man3/npm-tag.3 | 34 +-
deps/npm/man/man3/npm-test.3 | 27 +-
deps/npm/man/man3/npm-uninstall.3 | 29 +-
deps/npm/man/man3/npm-unpublish.3 | 26 +-
deps/npm/man/man3/npm-update.3 | 26 +-
deps/npm/man/man3/npm-version.3 | 25 +-
deps/npm/man/man3/npm-view.3 | 167 +-
deps/npm/man/man3/npm-whoami.3 | 29 +-
deps/npm/man/man3/npm.3 | 169 +-
deps/npm/man/man5/npm-folders.5 | 225 +--
deps/npm/man/man5/npm-global.5 | 225 +--
deps/npm/man/man5/npm-json.5 | 822 ++++----
deps/npm/man/man5/npmrc.5 | 96 +-
deps/npm/man/man5/package.json.5 | 822 ++++----
deps/npm/man/man7/index.7 | 298 ---
deps/npm/man/man7/npm-coding-style.7 | 234 +--
deps/npm/man/man7/npm-config.7 | 1668 +++++++----------
deps/npm/man/man7/npm-developers.7 | 317 ++--
deps/npm/man/man7/npm-disputes.7 | 142 +-
deps/npm/man/man7/npm-faq.7 | 486 ++---
deps/npm/man/man7/npm-index.7 | 434 ++---
deps/npm/man/man7/npm-registry.7 | 88 +-
deps/npm/man/man7/npm-scripts.7 | 344 ++--
deps/npm/man/man7/removing-npm.7 | 115 +-
deps/npm/man/man7/semver.7 | 478 +++--
deps/npm/node_modules/async-some/.eslintrc | 18 +
deps/npm/node_modules/async-some/.npmignore | 1 +
deps/npm/node_modules/async-some/README.md | 62 +
deps/npm/node_modules/async-some/package.json | 57 +
deps/npm/node_modules/async-some/some.js | 47 +
.../node_modules/async-some/test/base-case.js | 35 +
.../async-some/test/parameters.js | 37 +
.../node_modules/async-some/test/simple.js | 60 +
deps/npm/node_modules/cmd-shim/index.js | 6 +-
deps/npm/node_modules/cmd-shim/package.json | 37 +-
.../node_modules/ansi-regex/package.json | 5 +-
.../node_modules/strip-ansi/package.json | 5 +-
.../defaults/node_modules/clone/package.json | 5 +-
.../node_modules/defaults/package.json | 8 +-
.../node_modules/wcwidth/package.json | 5 +-
deps/npm/node_modules/columnify/package.json | 5 +-
deps/npm/node_modules/dezalgo/README.md | 29 +
deps/npm/node_modules/dezalgo/dezalgo.js | 21 +
.../dezalgo/node_modules/asap/LICENSE.md | 20 +
.../dezalgo/node_modules/asap/README.md | 81 +
.../dezalgo/node_modules/asap/asap.js | 113 ++
.../dezalgo/node_modules/asap/package.json | 39 +
deps/npm/node_modules/dezalgo/package.json | 66 +
deps/npm/node_modules/dezalgo/test/basic.js | 25 +
deps/npm/node_modules/fs-vacuum/.eslintrc | 18 +
deps/npm/node_modules/fs-vacuum/.npmignore | 1 +
deps/npm/node_modules/fs-vacuum/README.md | 33 +
deps/npm/node_modules/fs-vacuum/package.json | 42 +
.../node_modules/fs-vacuum/test/arguments.js | 24 +
.../fs-vacuum/test/base-leaf-mismatch.js | 16 +
.../test/no-entries-file-no-purge.js | 78 +
.../test/no-entries-link-no-purge.js | 78 +
.../fs-vacuum/test/no-entries-no-purge.js | 61 +
.../test/no-entries-with-link-purge.js | 78 +
.../fs-vacuum/test/no-entries-with-purge.js | 67 +
.../test/other-directories-no-purge.js | 76 +
deps/npm/node_modules/fs-vacuum/vacuum.js | 104 +
deps/npm/node_modules/fstream/package.json | 22 +-
.../github-url-from-git/package.json | 5 +-
.../github-url-from-username-repo/index.js | 11 +-
.../package.json | 37 +-
.../test/index.js | 12 +
.../node_modules/promzard/package.json | 5 +-
.../init-package-json/package.json | 20 +-
deps/npm/node_modules/lockfile/package.json | 25 +-
deps/npm/node_modules/node-gyp/package.json | 39 +-
.../normalize-package-data/.npmignore | 0
.../normalize-package-data/.travis.yml | 0
.../normalize-package-data/AUTHORS | 0
.../normalize-package-data/LICENSE | 0
.../normalize-package-data/README.md | 0
.../lib/core_module_names.json | 0
.../lib/extract_description.js | 0
.../normalize-package-data/lib/fixer.js | 0
.../lib/make_warning.js | 0
.../normalize-package-data/lib/normalize.js | 0
.../normalize-package-data/lib/safe_format.js | 0
.../normalize-package-data/lib/typos.json | 0
.../lib/warning_messages.json | 0
.../normalize-package-data/package.json | 24 +-
.../normalize-package-data/test/basic.js | 0
.../test/consistency.js | 0
.../test/dependencies.js | 0
.../test/fixtures/async.json | 0
.../test/fixtures/bcrypt.json | 0
.../test/fixtures/coffee-script.json | 0
.../test/fixtures/http-server.json | 0
.../test/fixtures/movefile.json | 0
.../test/fixtures/no-description.json | 0
.../test/fixtures/node-module_exist.json | 0
.../test/fixtures/npm.json | 0
.../test/fixtures/read-package-json.json | 0
.../test/fixtures/request.json | 0
.../test/fixtures/underscore.json | 0
.../test/github-urls.js | 0
.../normalize-package-data/test/normalize.js | 0
.../normalize-package-data/test/scoped.js | 0
.../normalize-package-data/test/strict.js | 0
.../normalize-package-data/test/typo.js | 0
.../npm-install-checks/package.json | 35 +-
deps/npm/node_modules/npm-package-arg/LICENSE | 15 +
.../node_modules/npm-package-arg/README.md | 55 +
deps/npm/node_modules/npm-package-arg/npa.js | 187 ++
.../node_modules/npm-package-arg/package.json | 38 +
.../npm-package-arg/test/basic.js | 203 ++
.../npm-package-arg/test/windows.js | 41 +
.../npm-registry-client/.npmignore | 2 +
.../npm-registry-client/lib/adduser.js | 92 +-
.../npm-registry-client/lib/attempt.js | 22 +
.../npm-registry-client/lib/authify.js | 27 +
.../npm-registry-client/lib/deprecate.js | 3 +-
.../npm-registry-client/lib/fetch.js | 85 +
.../npm-registry-client/lib/initialize.js | 41 +
.../npm-registry-client/lib/publish.js | 53 +-
.../npm-registry-client/lib/request.js | 215 +--
.../npm-registry-client/lib/star.js | 15 +-
.../npm-registry-client/lib/unpublish.js | 11 +-
.../npm-registry-client/lib/util/nerf-dart.js | 21 +
.../npm-registry-client/lib/whoami.js | 15 +
.../npm-registry-client/package.json | 19 +-
.../npm-registry-client/test/bugs.js | 11 +-
.../npm-registry-client/test/deprecate.js | 18 +-
.../npm-registry-client/test/fetch-404.js | 44 +
.../npm-registry-client/test/fetch-408.js | 52 +
.../npm-registry-client/test/fetch-503.js | 52 +
.../npm-registry-client/test/fetch-basic.js | 44 +
.../npm-registry-client/test/get-all.js | 2 +-
.../npm-registry-client/test/get-basic.js | 10 +-
.../npm-registry-client/test/get-error-403.js | 33 +
.../npm-registry-client/test/lib/common.js | 72 +-
.../npm-registry-client/test/lib/server.js | 2 +-
.../test/publish-again-scoped.js | 82 +
.../npm-registry-client/test/publish-again.js | 26 +-
.../test/publish-scoped-auth-token.js | 52 +
.../test/publish-scoped.js | 57 +
.../npm-registry-client/test/publish.js | 24 +-
.../test/request-gzip-content.js | 8 +-
.../npm-registry-client/test/star.js | 22 +-
.../npm-registry-client/test/stars.js | 10 +-
.../npm-registry-client/test/tag.js | 18 +-
.../test/unpublish-scoped.js | 59 +
.../npm-registry-client/test/unpublish.js | 16 +-
.../npm-registry-client/test/upload.js | 17 +-
.../npm-registry-client/test/whoami.js | 30 +
deps/npm/node_modules/npmconf/.npmignore | 2 +
deps/npm/node_modules/npmconf/LICENSE | 36 +-
deps/npm/node_modules/npmconf/config-defs.js | 29 +-
.../npmconf/lib/get-credentials-by-uri.js | 57 +
.../npm/node_modules/npmconf/lib/nerf-dart.js | 21 +
.../npmconf/lib/set-credentials-by-uri.js | 34 +
.../node_modules/proto-list/package.json | 5 +-
.../node_modules/config-chain/package.json | 2 +-
deps/npm/node_modules/npmconf/npmconf.js | 39 +-
deps/npm/node_modules/npmconf/package.json | 36 +-
.../npm/node_modules/npmconf/test/00-setup.js | 24 +
deps/npm/node_modules/npmconf/test/basic.js | 27 +-
deps/npm/node_modules/npmconf/test/builtin.js | 26 +-
.../node_modules/npmconf/test/credentials.js | 166 ++
.../npmconf/test/fixtures/userconfig | 3 +-
deps/npm/node_modules/npmconf/test/project.js | 27 +-
deps/npm/node_modules/npmconf/test/save.js | 8 +-
.../node_modules/npmconf/test/semver-tag.js | 65 +
.../node_modules/debuglog/LICENSE | 19 +
.../node_modules/debuglog/README.md | 40 +
.../node_modules/debuglog/debuglog.js | 22 +
.../node_modules/debuglog/package.json | 45 +
.../readdir-scoped-modules/LICENSE | 15 +
.../readdir-scoped-modules/README.md | 17 +
.../readdir-scoped-modules/package.json | 54 +
.../readdir-scoped-modules/readdir.js | 71 +
.../readdir-scoped-modules/test/basic.js | 14 +
.../test/fixtures/@org/x/.keep | 0
.../test/fixtures/@org/y/.keep | 0
.../test/fixtures/@scope/x/.keep | 0
.../test/fixtures/@scope/y/.keep | 0
.../test/fixtures/a/x/.keep | 0
.../test/fixtures/a/y/.keep | 0
.../test/fixtures/b/x/.keep | 0
.../test/fixtures/b/y/.keep | 0
.../node_modules/util-extend/package.json | 2 +-
.../node_modules/read-installed/package.json | 39 +-
.../read-installed/read-installed.js | 154 +-
.../node_modules/read-installed/test/basic.js | 11 +-
.../test/cyclic-extraneous-peer-deps.js | 81 +
.../node_modules/read-installed/test/dev.js | 4 +-
.../read-installed/test/extraneous-dev.js | 20 +
.../read-installed/test/extraneous.js | 4 +-
.../fixtures/extraneous-dev-dep/package.json | 7 +
.../grandparent-peer-dev/package.json | 8 +
.../test/grandparent-peer-dev.js | 20 +
.../test/linked-dep-dev-deps-extraneous.js | 59 +
.../read-installed/test/noargs.js | 2 +-
.../read-package-json/package.json | 2 +-
.../node_modules/aws-sign2/package.json | 2 +-
.../request/node_modules/bl/.jshintrc | 59 -
.../node_modules/core-util-is/package.json | 2 +-
.../node_modules/string_decoder/package.json | 2 +-
.../node_modules/readable-stream/package.json | 2 +-
.../request/node_modules/bl/package.json | 2 +-
.../node_modules/caseless/package.json | 2 +-
.../node_modules/forever-agent/package.json | 2 +-
.../form-data/node_modules/async/package.json | 2 +-
.../node_modules/combined-stream/package.json | 2 +-
.../form-data/node_modules/mime/package.json | 2 +-
.../node_modules/form-data/package.json | 2 +-
.../hawk/node_modules/boom/package.json | 2 +-
.../hawk/node_modules/cryptiles/package.json | 2 +-
.../hawk/node_modules/hoek/package.json | 2 +-
.../hawk/node_modules/sntp/package.json | 2 +-
.../node_modules/http-signature/package.json | 2 +-
.../json-stringify-safe/package.json | 2 +-
.../node_modules/mime-types/package.json | 2 +-
.../node_modules/node-uuid/package.json | 2 +-
.../node_modules/oauth-sign/package.json | 2 +-
.../request/node_modules/qs/.jshintrc | 10 -
.../request/node_modules/qs/package.json | 2 +-
.../node_modules/stringstream/package.json | 2 +-
.../node_modules/tunnel-agent/.jshintrc | 5 -
.../node_modules/tunnel-agent/package.json | 2 +-
deps/npm/node_modules/request/package.json | 2 +-
deps/npm/node_modules/semver/Makefile | 6 +-
deps/npm/node_modules/semver/README.md | 209 ++-
deps/npm/node_modules/semver/bin/semver | 4 +-
.../semver/{foot.js => foot.js.txt} | 0
.../semver/{head.js => head.js.txt} | 0
deps/npm/node_modules/semver/package.json | 29 +-
.../npm/node_modules/semver/semver.browser.js | 191 +-
.../node_modules/semver/semver.browser.js.gz | Bin 7180 -> 7391 bytes
deps/npm/node_modules/semver/semver.js | 191 +-
deps/npm/node_modules/semver/semver.min.js | 2 +-
deps/npm/node_modules/semver/semver.min.js.gz | Bin 3295 -> 3397 bytes
deps/npm/node_modules/semver/test/clean.js | 25 +
deps/npm/node_modules/semver/test/gtr.js | 2 +-
deps/npm/node_modules/semver/test/index.js | 219 ++-
deps/npm/node_modules/semver/test/ltr.js | 17 +-
.../npm/node_modules/semver/test/no-module.js | 4 +-
.../readable-stream/lib/_stream_readable.js | 35 +-
.../readable-stream/lib/_stream_writable.js | 1 -
.../node_modules/core-util-is/package.json | 5 +-
.../node_modules/isarray/package.json | 5 +-
.../node_modules/string_decoder/index.js | 75 +-
.../node_modules/string_decoder/package.json | 22 +-
.../node_modules/readable-stream/package.json | 21 +-
deps/npm/node_modules/sha/package.json | 2 +-
deps/npm/node_modules/slide/package.json | 5 +-
deps/npm/node_modules/tar/package.json | 22 +-
deps/npm/package.json | 35 +-
deps/npm/scripts/doc-build.sh | 24 +-
deps/npm/test/common-tap.js | 2 +-
.../npm-test-optional-deps/package.json | 1 -
deps/npm/test/run.js | 45 +-
deps/npm/test/tap/00-verify-ls-ok.js | 15 +
.../test/tap/cache-add-localdir-fallback.js | 76 +
deps/npm/test/tap/cache-shasum.js | 3 +-
deps/npm/test/tap/config-meta.js | 13 +-
deps/npm/test/tap/git-cache-permissions.js | 80 +
deps/npm/test/tap/ignore-install-link.js | 17 +-
deps/npm/test/tap/install-at-locally.js | 1 -
deps/npm/test/tap/install-from-local.js | 38 +
.../package-local-dependency/package.json | 5 +
.../package-local-dev-dependency/package.json | 5 +
.../package-with-local-paths/package.json | 10 +
deps/npm/test/tap/install-save-exact.js | 1 -
deps/npm/test/tap/install-save-local.js | 68 +
.../package-local-dependency/package.json | 5 +
.../package-local-dev-dependency/package.json | 5 +
.../install-save-local/package/package.json | 4 +
deps/npm/test/tap/install-save-prefix.js | 1 -
deps/npm/test/tap/install-scoped-link.js | 52 +
deps/npm/test/tap/install-scoped/package.json | 7 +
deps/npm/test/tap/install-scoped/world.js | 1 +
deps/npm/test/tap/lifecycle-path.js | 61 +
deps/npm/test/tap/lifecycle-path/package.json | 1 +
.../npm/test/tap/lifecycle-path/print-path.js | 1 +
deps/npm/test/tap/maybe-github.js | 22 +-
deps/npm/test/tap/nested-extraneous.js | 53 +
.../optional-metadep-rollback-collision.js | 56 +
.../deps/d1/package.json | 13 +
.../deps/d2/blart.js | 52 +
.../deps/d2/package.json | 15 +
.../deps/opdep/bad-server.js | 35 +
.../deps/opdep/package.json | 15 +
.../package.json | 10 +
deps/npm/test/tap/outdated-notarget.js | 44 +-
deps/npm/test/tap/pack-scoped.js | 91 +
deps/npm/test/tap/prepublish.js | 89 +-
deps/npm/test/tap/publish-config.js | 17 +-
deps/npm/test/tap/publish-scoped.js | 71 +
deps/npm/test/tap/pwd-prefix.js | 35 +
deps/npm/test/tap/registry.js | 20 +-
deps/npm/test/tap/run-script.js | 62 +
deps/npm/test/tap/run-script/package.json | 6 +
deps/npm/test/tap/semver-tag.js | 15 +
deps/npm/test/tap/url-dependencies.js | 20 +-
deps/npm/test/tap/whoami.js | 77 +
tools/upgrade-npm.sh | 7 +
556 files changed, 13934 insertions(+), 10691 deletions(-)
create mode 100644 deps/npm/doc/misc/npm-scope.md
delete mode 100644 deps/npm/html/doc/misc/index.html
delete mode 100644 deps/npm/lib/utils/fetch.js
delete mode 100644 deps/npm/lib/utils/is-git-url.js
create mode 100644 deps/npm/lib/utils/map-to-registry.js
delete mode 100644 deps/npm/man/man7/index.7
create mode 100644 deps/npm/node_modules/async-some/.eslintrc
create mode 100644 deps/npm/node_modules/async-some/.npmignore
create mode 100644 deps/npm/node_modules/async-some/README.md
create mode 100644 deps/npm/node_modules/async-some/package.json
create mode 100644 deps/npm/node_modules/async-some/some.js
create mode 100644 deps/npm/node_modules/async-some/test/base-case.js
create mode 100644 deps/npm/node_modules/async-some/test/parameters.js
create mode 100644 deps/npm/node_modules/async-some/test/simple.js
create mode 100644 deps/npm/node_modules/dezalgo/README.md
create mode 100644 deps/npm/node_modules/dezalgo/dezalgo.js
create mode 100644 deps/npm/node_modules/dezalgo/node_modules/asap/LICENSE.md
create mode 100644 deps/npm/node_modules/dezalgo/node_modules/asap/README.md
create mode 100644 deps/npm/node_modules/dezalgo/node_modules/asap/asap.js
create mode 100644 deps/npm/node_modules/dezalgo/node_modules/asap/package.json
create mode 100644 deps/npm/node_modules/dezalgo/package.json
create mode 100644 deps/npm/node_modules/dezalgo/test/basic.js
create mode 100644 deps/npm/node_modules/fs-vacuum/.eslintrc
create mode 100644 deps/npm/node_modules/fs-vacuum/.npmignore
create mode 100644 deps/npm/node_modules/fs-vacuum/README.md
create mode 100644 deps/npm/node_modules/fs-vacuum/package.json
create mode 100644 deps/npm/node_modules/fs-vacuum/test/arguments.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/base-leaf-mismatch.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/no-entries-file-no-purge.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/no-entries-link-no-purge.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/no-entries-no-purge.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/no-entries-with-link-purge.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/no-entries-with-purge.js
create mode 100644 deps/npm/node_modules/fs-vacuum/test/other-directories-no-purge.js
create mode 100644 deps/npm/node_modules/fs-vacuum/vacuum.js
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/.npmignore (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/.travis.yml (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/AUTHORS (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/LICENSE (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/README.md (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/core_module_names.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/extract_description.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/fixer.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/make_warning.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/normalize.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/safe_format.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/typos.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/lib/warning_messages.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/package.json (74%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/basic.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/consistency.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/dependencies.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/async.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/bcrypt.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/coffee-script.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/http-server.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/movefile.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/no-description.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/node-module_exist.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/npm.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/read-package-json.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/request.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/fixtures/underscore.json (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/github-urls.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/normalize.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/scoped.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/strict.js (100%)
rename deps/npm/node_modules/{read-package-json/node_modules => }/normalize-package-data/test/typo.js (100%)
create mode 100644 deps/npm/node_modules/npm-package-arg/LICENSE
create mode 100644 deps/npm/node_modules/npm-package-arg/README.md
create mode 100644 deps/npm/node_modules/npm-package-arg/npa.js
create mode 100644 deps/npm/node_modules/npm-package-arg/package.json
create mode 100644 deps/npm/node_modules/npm-package-arg/test/basic.js
create mode 100644 deps/npm/node_modules/npm-package-arg/test/windows.js
create mode 100644 deps/npm/node_modules/npm-registry-client/lib/attempt.js
create mode 100644 deps/npm/node_modules/npm-registry-client/lib/authify.js
create mode 100644 deps/npm/node_modules/npm-registry-client/lib/fetch.js
create mode 100644 deps/npm/node_modules/npm-registry-client/lib/initialize.js
create mode 100644 deps/npm/node_modules/npm-registry-client/lib/util/nerf-dart.js
create mode 100644 deps/npm/node_modules/npm-registry-client/lib/whoami.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/fetch-404.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/fetch-408.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/fetch-503.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/fetch-basic.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/get-error-403.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/publish-scoped.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/unpublish-scoped.js
create mode 100644 deps/npm/node_modules/npm-registry-client/test/whoami.js
create mode 100644 deps/npm/node_modules/npmconf/lib/get-credentials-by-uri.js
create mode 100644 deps/npm/node_modules/npmconf/lib/nerf-dart.js
create mode 100644 deps/npm/node_modules/npmconf/lib/set-credentials-by-uri.js
create mode 100644 deps/npm/node_modules/npmconf/test/credentials.js
create mode 100644 deps/npm/node_modules/npmconf/test/semver-tag.js
create mode 100644 deps/npm/node_modules/read-installed/node_modules/debuglog/LICENSE
create mode 100644 deps/npm/node_modules/read-installed/node_modules/debuglog/README.md
create mode 100644 deps/npm/node_modules/read-installed/node_modules/debuglog/debuglog.js
create mode 100644 deps/npm/node_modules/read-installed/node_modules/debuglog/package.json
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/LICENSE
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/README.md
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/package.json
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/readdir.js
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/basic.js
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/@org/x/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/@org/y/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/@scope/x/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/@scope/y/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/a/x/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/a/y/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/b/x/.keep
create mode 100644 deps/npm/node_modules/read-installed/node_modules/readdir-scoped-modules/test/fixtures/b/y/.keep
create mode 100644 deps/npm/node_modules/read-installed/test/cyclic-extraneous-peer-deps.js
create mode 100644 deps/npm/node_modules/read-installed/test/extraneous-dev.js
create mode 100644 deps/npm/node_modules/read-installed/test/fixtures/extraneous-dev-dep/package.json
create mode 100644 deps/npm/node_modules/read-installed/test/fixtures/grandparent-peer-dev/package.json
create mode 100644 deps/npm/node_modules/read-installed/test/grandparent-peer-dev.js
create mode 100644 deps/npm/node_modules/read-installed/test/linked-dep-dev-deps-extraneous.js
delete mode 100644 deps/npm/node_modules/request/node_modules/bl/.jshintrc
delete mode 100644 deps/npm/node_modules/request/node_modules/qs/.jshintrc
delete mode 100644 deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc
rename deps/npm/node_modules/semver/{foot.js => foot.js.txt} (100%)
rename deps/npm/node_modules/semver/{head.js => head.js.txt} (100%)
create mode 100644 deps/npm/node_modules/semver/test/clean.js
create mode 100644 deps/npm/test/tap/00-verify-ls-ok.js
create mode 100644 deps/npm/test/tap/cache-add-localdir-fallback.js
create mode 100644 deps/npm/test/tap/git-cache-permissions.js
create mode 100644 deps/npm/test/tap/install-from-local.js
create mode 100644 deps/npm/test/tap/install-from-local/package-local-dependency/package.json
create mode 100644 deps/npm/test/tap/install-from-local/package-local-dev-dependency/package.json
create mode 100644 deps/npm/test/tap/install-from-local/package-with-local-paths/package.json
create mode 100644 deps/npm/test/tap/install-save-local.js
create mode 100644 deps/npm/test/tap/install-save-local/package-local-dependency/package.json
create mode 100644 deps/npm/test/tap/install-save-local/package-local-dev-dependency/package.json
create mode 100644 deps/npm/test/tap/install-save-local/package/package.json
create mode 100644 deps/npm/test/tap/install-scoped-link.js
create mode 100644 deps/npm/test/tap/install-scoped/package.json
create mode 100644 deps/npm/test/tap/install-scoped/world.js
create mode 100644 deps/npm/test/tap/lifecycle-path.js
create mode 100644 deps/npm/test/tap/lifecycle-path/package.json
create mode 100644 deps/npm/test/tap/lifecycle-path/print-path.js
create mode 100644 deps/npm/test/tap/nested-extraneous.js
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision.js
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision/deps/d1/package.json
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision/deps/d2/blart.js
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision/deps/d2/package.json
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision/deps/opdep/bad-server.js
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision/deps/opdep/package.json
create mode 100644 deps/npm/test/tap/optional-metadep-rollback-collision/package.json
create mode 100644 deps/npm/test/tap/pack-scoped.js
create mode 100644 deps/npm/test/tap/publish-scoped.js
create mode 100644 deps/npm/test/tap/pwd-prefix.js
create mode 100644 deps/npm/test/tap/run-script.js
create mode 100644 deps/npm/test/tap/run-script/package.json
create mode 100644 deps/npm/test/tap/semver-tag.js
create mode 100644 deps/npm/test/tap/whoami.js
create mode 100755 tools/upgrade-npm.sh
diff --git a/deps/npm/.travis.yml b/deps/npm/.travis.yml
index 0fbe8dc335..2734148642 100644
--- a/deps/npm/.travis.yml
+++ b/deps/npm/.travis.yml
@@ -1,5 +1,11 @@
language: node_js
-script: "npm run-script tap"
node_js:
- "0.11"
- "0.10"
+env:
+ - DEPLOY_VERSION=testing
+before_install:
+ - "npm config set spin false"
+ - "npm install -g npm@^2"
+ - "sudo mkdir -p /var/run/couchdb"
+script: "npm run-script tap"
diff --git a/deps/npm/CHANGELOG.md b/deps/npm/CHANGELOG.md
index 330c1ac17a..a8afe8ac75 100644
--- a/deps/npm/CHANGELOG.md
+++ b/deps/npm/CHANGELOG.md
@@ -1,3 +1,69 @@
+### v2.0.0 (2014-09-12):
+
+BREAKING CHANGES:
+
+* [`4378a17`](https://github.com/npm/npm/commit/4378a17db340404a725ffe2eb75c9936f1612670)
+ `semver@4.0.0`: prerelease versions no longer show up in ranges; `^0.x.y`
+ behaves the way it did in `semver@2` rather than `semver@3`; docs have been
+ reorganized for comprehensibility ([@isaacs](https://github.com/isaacs))
+* [`c6ddb64`](https://github.com/npm/npm/commit/c6ddb6462fe32bf3a27b2c4a62a032a92e982429)
+ npm now assumes that node is newer than 0.6
+ ([@isaacs](https://github.com/isaacs))
+
+Other changes:
+
+* [`ea515c3`](https://github.com/npm/npm/commit/ea515c3b858bf493a7b87fa4cdc2110a0d9cef7f)
+ [#6043](https://github.com/npm/npm/issues/6043) `slide@1.1.6`: wait until all
+ callbacks have finished before proceeding
+ ([@othiym23](https://github.com/othiym23))
+* [`0b0a59d`](https://github.com/npm/npm/commit/0b0a59d504f20f424294b1590ace73a7464f0378)
+ [#6043](https://github.com/npm/npm/issues/6043) defer rollbacks until just
+ before the CLI exits ([@isaacs](https://github.com/isaacs))
+* [`a11c88b`](https://github.com/npm/npm/commit/a11c88bdb1488b87d8dcac69df9a55a7a91184b6)
+ [#6175](https://github.com/npm/npm/issues/6175) pack scoped packages
+ correctly ([@othiym23](https://github.com/othiym23))
+* [`e4e48e0`](https://github.com/npm/npm/commit/e4e48e037d4e95fdb6acec80b04c5c6eaee59970)
+ [#6121](https://github.com/npm/npm/issues/6121) `read-installed@3.1.2`: don't
+ mark linked dev dependencies as extraneous
+ ([@isaacs](https://github.com/isaacs))
+* [`d673e41`](https://github.com/npm/npm/commit/d673e4185d43362c2b2a91acbca8c057e7303c7b)
+ `cmd-shim@2.0.1`: depend on `graceful-fs` directly
+ ([@ForbesLindesay](https://github.com/ForbesLindesay))
+* [`9d54d45`](https://github.com/npm/npm/commit/9d54d45e602d595bdab7eae09b9fa1dc46370147)
+ `npm-registry-couchapp@2.5.3`: make tests more reliable on Travis
+ ([@iarna](https://github.com/iarna))
+* [`673d738`](https://github.com/npm/npm/commit/673d738c6142c3d043dcee0b7aa02c9831a2e0ca)
+ ensure permissions are set correctly in cache when running as root
+ ([@isaacs](https://github.com/isaacs))
+* [`6e6a5fb`](https://github.com/npm/npm/commit/6e6a5fb74af10fd345411df4e121e554e2e3f33e)
+ prepare for upgrade to `node-semver@4.0.0`
+ ([@isaacs](https://github.com/isaacs))
+* [`ab8dd87`](https://github.com/npm/npm/commit/ab8dd87b943262f5996744e8d4cc30cc9358b7d7)
+ swap out `ronn` for `marked-man@0.1.3` ([@isaacs](https://github.com/isaacs))
+* [`803da54`](https://github.com/npm/npm/commit/803da5404d5a0b7c9defa3fe7fa0f2d16a2b19d3)
+ `npm-registry-client@3.2.0`: prepare for `node-semver@4.0.0` and include more
+ error information ([@isaacs](https://github.com/isaacs))
+* [`4af0e71`](https://github.com/npm/npm/commit/4af0e7134f5757c3d456d83e8349224a4ba12660)
+ make default error display less scary ([@isaacs](https://github.com/isaacs))
+* [`4fd9e79`](https://github.com/npm/npm/commit/4fd9e7901a15abff7a3dd478d99ce239b9580bca)
+ `npm-registry-client@3.2.1`: handle errors returned by the registry much,
+ much better ([@othiym23](https://github.com/othiym23))
+* [`ca791e2`](https://github.com/npm/npm/commit/ca791e27e97e51c1dd491bff6622ac90b54c3e23)
+ restore a long (always?) missing pass for deduping
+ ([@othiym23](https://github.com/othiym23))
+* [`ca0ef0e`](https://github.com/npm/npm/commit/ca0ef0e99bbdeccf28d550d0296baa4cb5e7ece2)
+ correctly interpret relative paths for local dependencies
+ ([@othiym23](https://github.com/othiym23))
+* [`5eb8db2`](https://github.com/npm/npm/commit/5eb8db2c370eeb4cd34f6e8dc6a935e4ea325621)
+ `npm-package-arg@2.1.2`: support git+file:// URLs for local bare repos
+ ([@othiym23](https://github.com/othiym23))
+* [`860a185`](https://github.com/npm/npm/commit/860a185c43646aca84cb93d1c05e2266045c316b)
+ tweak docs to no longer advocate checking in `node_modules`
+ ([@hunterloftis](https://github.com/hunterloftis))
+* [`80e9033`](https://github.com/npm/npm/commit/80e9033c40e373775e35c674faa6c1948661782b)
+ add links to nodejs.org downloads to docs
+ ([@meetar](https://github.com/meetar))
+
### v1.4.28 (2014-09-12):
* [`f4540b6`](https://github.com/npm/npm/commit/f4540b6537a87e653d7495a9ddcf72949fdd4d14)
@@ -8,16 +74,101 @@
callbacks have finished before proceeding
([@othiym23](https://github.com/othiym23))
+### v2.0.0-beta.3 (2014-09-04):
+
+* [`fa79413`](https://github.com/npm/npm/commit/fa794138bec8edb7b88639db25ee9c010d2f4c2b)
+ [#6119](https://github.com/npm/npm/issues/6119) fall back to registry installs
+ if package.json is missing in a local directory ([@iarna](https://github.com/iarna))
+* [`16073e2`](https://github.com/npm/npm/commit/16073e2d8ae035961c4c189b602d4aacc6d6b387)
+ `npm-package-arg@2.1.0`: support file URIs as local specs
+ ([@othiym23](https://github.com/othiym23))
+* [`9164acb`](https://github.com/npm/npm/commit/9164acbdee28956fa816ce5e473c559395ae4ec2)
+ `github-url-from-username-repo@1.0.2`: don't match strings that are already
+ URIs ([@othiym23](https://github.com/othiym23))
+* [`4067d6b`](https://github.com/npm/npm/commit/4067d6bf303a69be13f3af4b19cf4fee1b0d3e12)
+ [#5629](https://github.com/npm/npm/issues/5629) support saving of local packages
+ in `package.json` ([@dylang](https://github.com/dylang))
+* [`1b2ffdf`](https://github.com/npm/npm/commit/1b2ffdf359a8c897a78f91fc5a5d535c97aaec97)
+ [#6097](https://github.com/npm/npm/issues/6097) document scoped packages
+ ([@seldo](https://github.com/seldo))
+* [`0a67d53`](https://github.com/npm/npm/commit/0a67d536067c4808a594d81288d34c0f7e97e105)
+ [#6007](https://github.com/npm/npm/issues/6007) `request@2.42.0`: properly
+ set headers on proxy requests ([@isaacs](https://github.com/isaacs))
+* [`9bac6b8`](https://github.com/npm/npm/commit/9bac6b860b674d24251bb7b8ba412fdb26cbc836)
+ `npmconf@2.0.8`: disallow semver ranges in tag configuration
+ ([@isaacs](https://github.com/isaacs))
+* [`d2d4d7c`](https://github.com/npm/npm/commit/d2d4d7cd3c32f91a87ffa11fe464d524029011c3)
+ [#6082](https://github.com/npm/npm/issues/6082) don't allow tagging with a
+ semver range as the tag name ([@isaacs](https://github.com/isaacs))
+
### v1.4.27 (2014-09-04):
* [`4cf3c8f`](https://github.com/npm/npm/commit/4cf3c8fd78c9e2693a5f899f50c28f4823c88e2e)
- [#6007](https://github.com/npm/npm/issues/6007) `request@2.42.0`: properly set
+ [#6007](https://github.com/npm/npm/issues/6007) request@2.42.0: properly set
headers on proxy requests ([@isaacs](https://github.com/isaacs))
* [`403cb52`](https://github.com/npm/npm/commit/403cb526be1472bb7545fa8e62d4976382cdbbe5)
- [#6055](https://github.com/npm/npm/issues/6055) `npmconf@1.1.8`: restore
+ [#6055](https://github.com/npm/npm/issues/6055) npmconf@1.1.8: restore
case-insensitivity of environmental config
([@iarna](https://github.com/iarna))
+### v2.0.0-beta.2 (2014-08-29):
+
+SPECIAL LABOR DAY WEEKEND RELEASE PARTY WOOO
+
+* [`ed207e8`](https://github.com/npm/npm/commit/ed207e88019de3150037048df6267024566e1093)
+ `npm-registry-client@3.1.7`: Clean up auth logic and improve logging around
+ auth decisions. Also error on trying to change a user document without
+ writing to it. ([@othiym23](https://github.com/othiym23))
+* [`66c7423`](https://github.com/npm/npm/commit/66c7423b7fb07a326b83c83727879410d43c439f)
+ `npmconf@2.0.7`: support -C as an alias for --prefix
+ ([@isaacs](https://github.com/isaacs))
+* [`0dc6a07`](https://github.com/npm/npm/commit/0dc6a07c778071c94c2251429c7d107e88a45095)
+ [#6059](https://github.com/npm/npm/issues/6059) run commands in prefix, not
+ cwd ([@isaacs](https://github.com/isaacs))
+* [`65d2179`](https://github.com/npm/npm/commit/65d2179af96737eb9038eaa24a293a62184aaa13)
+ `github-url-from-username-repo@1.0.1`: part 3 handle slashes in branch names
+ ([@robertkowalski](https://github.com/robertkowalski))
+* [`e8d75d0`](https://github.com/npm/npm/commit/e8d75d0d9f148ce2b3e8f7671fa281945bac363d)
+ [#6057](https://github.com/npm/npm/issues/6057) `read-installed@3.1.1`:
+ properly handle extraneous dev dependencies of required dependencies
+ ([@othiym23](https://github.com/othiym23))
+* [`0602f70`](https://github.com/npm/npm/commit/0602f708f070d524ad41573afd4c57171cab21ad)
+ [#6064](https://github.com/npm/npm/issues/6064) ls: do not show deps of
+ extraneous deps ([@isaacs](https://github.com/isaacs))
+
+### v2.0.0-beta.1 (2014-08-28):
+
+* [`78a1fc1`](https://github.com/npm/npm/commit/78a1fc12307a0cbdbc944775ed831b876ee65855)
+ `github-url-from-git@1.4.0`: add support for git+https and git+ssh
+ ([@stefanbuck](https://github.com/stefanbuck))
+* [`bf247ed`](https://github.com/npm/npm/commit/bf247edf5429c6b3ec4d4cb798fa0eb0a9c19fc1)
+ `columnify@1.2.1` ([@othiym23](https://github.com/othiym23))
+* [`4bbe682`](https://github.com/npm/npm/commit/4bbe682a6d4eabcd23f892932308c9f228bf4de3)
+ `cmd-shim@2.0.0`: upgrade to graceful-fs 3
+ ([@ForbesLindesay](https://github.com/ForbesLindesay))
+* [`ae1d590`](https://github.com/npm/npm/commit/ae1d590bdfc2476a4ed446e760fea88686e3ae05)
+ `npm-package-arg@2.0.4`: accept slashes in branch names
+ ([@thealphanerd](https://github.com/thealphanerd))
+* [`b2f51ae`](https://github.com/npm/npm/commit/b2f51aecadf585711e145b6516f99e7c05f53614)
+ `semver@3.0.1`: semver.clean() is cleaner
+ ([@isaacs](https://github.com/isaacs))
+* [`1d041a8`](https://github.com/npm/npm/commit/1d041a8a5ebd5bf6cecafab2072d4ec07823adab)
+ `github-url-from-username-repo@1.0.0`: accept slashes in branch names
+ ([@robertkowalski](https://github.com/robertkowalski))
+* [`02c85d5`](https://github.com/npm/npm/commit/02c85d592c4058e5d9eafb0be36b6743ae631998)
+ `async-some@1.0.1` ([@othiym23](https://github.com/othiym23))
+* [`5af493e`](https://github.com/npm/npm/commit/5af493efa8a463cd1acc4a9a394699e2c0793b9c)
+ ensure lifecycle spawn errors caught properly
+ ([@isaacs](https://github.com/isaacs))
+* [`60fe012`](https://github.com/npm/npm/commit/60fe012fac9570d6c72554cdf34a6fa95bf0f0a6)
+ `npmconf@2.0.6`: init.version defaults to 1.0.0
+ ([@isaacs](https://github.com/isaacs))
+* [`b4c717b`](https://github.com/npm/npm/commit/b4c717bbf58fb6a0d64ad229036c79a184297ee2)
+ `npm-registry-client@3.1.4`: properly encode % in passwords
+ ([@isaacs](https://github.com/isaacs))
+* [`7b55f44`](https://github.com/npm/npm/commit/7b55f44420252baeb3f30da437d22956315c31c9)
+ doc: Fix 'npm help index' ([@isaacs](https://github.com/isaacs))
+
### v1.4.26 (2014-08-28):
* [`eceea95`](https://github.com/npm/npm/commit/eceea95c804fa15b18e91c52c0beb08d42a3e77d)
@@ -40,6 +191,51 @@
* [`91cfb58`](https://github.com/npm/npm/commit/91cfb58dda851377ec604782263519f01fd96ad8)
doc: Fix 'npm help index' ([@isaacs](https://github.com/isaacs))
+### v2.0.0-beta.0 (2014-08-21):
+
+* [`685f8be`](https://github.com/npm/npm/commit/685f8be1f2770cc75fd0e519a8d7aac72735a270)
+ `npm-registry-client@3.1.3`: Print the notification header returned by the
+ registry, and make sure status codes are printed without gratuitous quotes
+ around them. ([@isaacs](https://github.com/isaacs) /
+ [@othiym23](https://github.com/othiym23))
+* [`a8cb676`](https://github.com/npm/npm/commit/a8cb676aef0561eaf04487d2719672b097392c85)
+ [#5900](https://github.com/npm/npm/issues/5900) remove `npm` from its own
+ `engines` field in `package.json`. None of us remember why it was there.
+ ([@timoxley](https://github.com/timoxley))
+* [`6c47201`](https://github.com/npm/npm/commit/6c47201a7d071e8bf091b36933daf4199cc98e80)
+ [#5752](https://github.com/npm/npm/issues/5752),
+ [#6013](https://github.com/npm/npm/issues/6013) save git URLs correctly in
+ `_resolved` fields ([@isaacs](https://github.com/isaacs))
+* [`e4e1223`](https://github.com/npm/npm/commit/e4e1223a91c37688ba3378e1fc9d5ae045654d00)
+ [#5936](https://github.com/npm/npm/issues/5936) document the use of tags in
+ `package.json` ([@KenanY](https://github.com/KenanY))
+* [`c92b8d4`](https://github.com/npm/npm/commit/c92b8d4db7bde2a501da5b7d612684de1d629a42)
+ [#6004](https://github.com/npm/npm/issues/6004) manually installed scoped
+ packages are tracked correctly ([@dead](https://github.com/dead)-horse)
+* [`21ca0aa`](https://github.com/npm/npm/commit/21ca0aaacbcfe2b89b0a439d914da0cae62de550)
+ [#5945](https://github.com/npm/npm/issues/5945) link scoped packages
+ correctly ([@dead](https://github.com/dead)-horse)
+* [`16bead7`](https://github.com/npm/npm/commit/16bead7f2c82aec35b83ff0ec04df051ba456764)
+ [#5958](https://github.com/npm/npm/issues/5958) ensure that file streams work
+ in all versions of node ([@dead](https://github.com/dead)-horse)
+* [`dbf0cab`](https://github.com/npm/npm/commit/dbf0cab29d0db43ac95e4b5a1fbdea1e0af75f10)
+ you can now pass quoted args to `npm run-script`
+ ([@bcoe](https://github.com/bcoe))
+* [`0583874`](https://github.com/npm/npm/commit/05838743f01ccb8d2432b3858d66847002fb62df)
+ `tar@1.0.1`: Add test for removing an extract target immediately after
+ unpacking.
+ ([@isaacs](https://github.com/isaacs))
+* [`cdf3b04`](https://github.com/npm/npm/commit/cdf3b0428bc0b0183fb41dcde9e34e8f42c5e3a7)
+ `lockfile@1.0.0`: Fix incorrect interaction between `wait`, `stale`, and
+ `retries` options. Part 2 of race condition leading to `ENOENT`
+ ([@isaacs](https://github.com/isaacs))
+ errors.
+* [`22d72a8`](https://github.com/npm/npm/commit/22d72a87a9e1a9ab56d9585397f63551887d9125)
+ `fstream@1.0.2`: Fix a double-finish call which can result in excess FS
+ operations after the `close` event. Part 1 of race condition leading to
+ `ENOENT` errors.
+ ([@isaacs](https://github.com/isaacs))
+
### v1.4.25 (2014-08-21):
* [`64c0ec2`](https://github.com/npm/npm/commit/64c0ec241ef5d83761ca8de54acb3c41b079956e)
@@ -61,6 +257,48 @@
leading to `ENOENT` errors.
([@isaacs](https://github.com/isaacs))
+### v2.0.0-alpha.7 (2014-08-14):
+
+* [`f23f1d8`](https://github.com/npm/npm/commit/f23f1d8e8f86ec1b7ab8dad68250bccaa67d61b1)
+ doc: update version doc to include `pre-*` increment args
+ ([@isaacs](https://github.com/isaacs))
+* [`b6bb746`](https://github.com/npm/npm/commit/b6bb7461824d4dc1c0936f46bd7929b5cd597986)
+ build: add 'make tag' to tag current release as latest
+ ([@isaacs](https://github.com/isaacs))
+* [`27c4bb6`](https://github.com/npm/npm/commit/27c4bb606e46e5eaf604b19fe8477bc6567f8b2e)
+ build: publish with `--tag=v1.4-next` ([@isaacs](https://github.com/isaacs))
+* [`cff66c3`](https://github.com/npm/npm/commit/cff66c3bf2850880058ebe2a26655dafd002495e)
+ build: add script to output `v1.4-next` publish tag
+ ([@isaacs](https://github.com/isaacs))
+* [`22abec8`](https://github.com/npm/npm/commit/22abec8833474879ac49b9604c103bc845dad779)
+ build: remove outdated `docpublish` make target
+ ([@isaacs](https://github.com/isaacs))
+* [`1be4de5`](https://github.com/npm/npm/commit/1be4de51c3976db8564f72b00d50384c921f0917)
+ build: remove `unpublish` step from `make publish`
+ ([@isaacs](https://github.com/isaacs))
+* [`e429e20`](https://github.com/npm/npm/commit/e429e2011f4d78e398f2461bca3e5a9a146fbd0c)
+ doc: add new changelog ([@othiym23](https://github.com/othiym23))
+* [`9243d20`](https://github.com/npm/npm/commit/9243d207896ea307082256604c10817f7c318d68)
+ lifecycle: test lifecycle path modification
+ ([@isaacs](https://github.com/isaacs))
+* [`021770b`](https://github.com/npm/npm/commit/021770b9cb07451509f0a44afff6c106311d8cf6)
+ lifecycle: BREAKING CHANGE do not add the directory containing node executable
+ ([@chulkilee](https://github.com/chulkilee))
+* [`1d5c41d`](https://github.com/npm/npm/commit/1d5c41dd0d757bce8b87f10c4135f04ece55aeb9)
+ install: rename .gitignore when unpacking foreign tarballs
+ ([@isaacs](https://github.com/isaacs))
+* [`9aac267`](https://github.com/npm/npm/commit/9aac2670a73423544d92b27cc301990a16a9563b)
+ cache: detect non-gzipped tar files more reliably
+ ([@isaacs](https://github.com/isaacs))
+* [`3f24755`](https://github.com/npm/npm/commit/3f24755c8fce3c7ab11ed1dc632cc40d7ef42f62)
+ `readdir-scoped-modules@1.0.0` ([@isaacs](https://github.com/isaacs))
+* [`151cd2f`](https://github.com/npm/npm/commit/151cd2ff87b8ac2fc9ea366bc9b7f766dc5b9684)
+ `read-installed@3.1.0` ([@isaacs](https://github.com/isaacs))
+* [`f5a9434`](https://github.com/npm/npm/commit/f5a94343a8ebe4a8cd987320b55137aef53fb3fd)
+ test: fix Travis timeouts ([@dylang](https://github.com/dylang))
+* [`126cafc`](https://github.com/npm/npm/commit/126cafcc6706814c88af3042f2ffff408747bff4)
+ `npm-registry-couchapp@2.5.0` ([@othiym23](https://github.com/othiym23))
+
### v1.4.24 (2014-08-14):
* [`9344bd9`](https://github.com/npm/npm/commit/9344bd9b2929b5c399a0e0e0b34d45bce7bc24bb)
@@ -89,7 +327,15 @@
cache: detect non-gzipped tar files more reliably
([@isaacs](https://github.com/isaacs))
-### v2.0.0-alpha-6 (2014-07-31):
+### v2.0.0-alpha.6 (2014-08-07):
+
+BREAKING CHANGE:
+
+* [`ea547e2`](https://github.com/npm/npm/commit/ea547e2) Bump semver to
+ version 3: `^0.x.y` is now functionally the same as `=0.x.y`.
+ ([@isaacs](https://github.com/isaacs))
+
+Other changes:
* [`d987707`](https://github.com/npm/npm/commit/d987707) move fetch into
npm-registry-client ([@othiym23](https://github.com/othiym23))
@@ -97,8 +343,6 @@
([@isaacs](https://github.com/isaacs))
* [`9d73de7`](https://github.com/npm/npm/commit/9d73de7) remove unnecessary
mkdirps ([@isaacs](https://github.com/isaacs))
-* [`ea547e2`](https://github.com/npm/npm/commit/ea547e2) Bump semver to version 3
- ([@isaacs](https://github.com/isaacs))
* [`33ccd13`](https://github.com/npm/npm/commit/33ccd13) Don't squash execute
perms in `_git-remotes/` dir ([@adammeadows](https://github.com/adammeadows))
* [`48fd233`](https://github.com/npm/npm/commit/48fd233) `npm-package-arg@2.0.1`
@@ -270,7 +514,7 @@ Other changes:
([@othiym23](https://github.com/othiym23))
* Allow to build all the docs OOTB. ([@GeJ](https://github.com/GeJ))
* Use core.longpaths on win32 git - fixes
- [#5525](https://github.com/npm/npm/issues/5525) (Bradley Meck)
+ [#5525](https://github.com/npm/npm/issues/5525) ([@bmeck](https://github.com/bmeck))
* `npmconf@1.1.2` ([@isaacs](https://github.com/isaacs))
* Consolidate color sniffing in config/log loading process
([@isaacs](https://github.com/isaacs))
diff --git a/deps/npm/Makefile b/deps/npm/Makefile
index 540e2da05b..fe2d963bba 100644
--- a/deps/npm/Makefile
+++ b/deps/npm/Makefile
@@ -72,7 +72,7 @@ dev: install
link: uninstall
node cli.js link -f
-clean: markedclean ronnclean doc-clean uninstall
+clean: markedclean marked-manclean doc-clean uninstall
rm -rf npmrc
node cli.js cache clean
@@ -84,19 +84,19 @@ doc: $(mandocs) $(htmldocs)
markedclean:
rm -rf node_modules/marked node_modules/.bin/marked .building_marked
-ronnclean:
- rm -rf node_modules/ronn node_modules/.bin/ronn .building_ronn
+marked-manclean:
+ rm -rf node_modules/marked-man node_modules/.bin/marked-man .building_marked-man
docclean: doc-clean
doc-clean:
rm -rf \
.building_marked \
- .building_ronn \
+ .building_marked-man \
html/doc \
html/api \
man
-# use `npm install ronn` for this to work.
+# use `npm install marked-man` for this to work.
man/man1/npm-README.1: README.md scripts/doc-build.sh package.json
@[ -d man/man1 ] || mkdir -p man/man1
scripts/doc-build.sh $< $@
@@ -161,10 +161,10 @@ marked: node_modules/.bin/marked
node_modules/.bin/marked:
node cli.js install marked --no-global
-ronn: node_modules/.bin/ronn
+marked-man: node_modules/.bin/marked-man
-node_modules/.bin/ronn:
- node cli.js install ronn --no-global
+node_modules/.bin/marked-man:
+ node cli.js install marked-man --no-global
doc: man
diff --git a/deps/npm/README.md b/deps/npm/README.md
index 0c08862fce..19ced3a81f 100644
--- a/deps/npm/README.md
+++ b/deps/npm/README.md
@@ -16,15 +16,15 @@ and prior, clone the git repo and dig through the old tags and branches.
## Super Easy Install
-npm comes with node now.
+npm comes with [node](http://nodejs.org/download/) now.
### Windows Computers
-Get the MSI. npm is in it.
+[Get the MSI](http://nodejs.org/download/). npm is in it.
### Apple Macintosh Computers
-Get the pkg. npm is in it.
+[Get the pkg](http://nodejs.org/download/). npm is in it.
### Other Sorts of Unices
diff --git a/deps/npm/bin/npm-cli.js b/deps/npm/bin/npm-cli.js
index ef8873542b..ed81a989a3 100755
--- a/deps/npm/bin/npm-cli.js
+++ b/deps/npm/bin/npm-cli.js
@@ -19,8 +19,7 @@ var log = require("npmlog")
log.pause() // will be unpaused when config is loaded.
log.info("it worked if it ends with", "ok")
-var fs = require("graceful-fs")
- , path = require("path")
+var path = require("path")
, npm = require("../lib/npm.js")
, npmconf = require("npmconf")
, errorHandler = require("../lib/utils/error-handler.js")
@@ -58,16 +57,6 @@ if (conf.versions) {
log.info("using", "npm@%s", npm.version)
log.info("using", "node@%s", process.version)
-// make sure that this version of node works with this version of npm.
-var semver = require("semver")
- , nodeVer = process.version
- , reqVer = npm.nodeVersionRequired
-if (reqVer && !semver.satisfies(nodeVer, reqVer)) {
- return errorHandler(new Error(
- "npm doesn't work with node " + nodeVer
- + "\nRequired: node@" + reqVer), true)
-}
-
process.on("uncaughtException", errorHandler)
if (conf.usage && npm.command !== "help") {
diff --git a/deps/npm/doc/cli/npm-adduser.md b/deps/npm/doc/cli/npm-adduser.md
index 68f3a3c008..d60d6e9a07 100644
--- a/deps/npm/doc/cli/npm-adduser.md
+++ b/deps/npm/doc/cli/npm-adduser.md
@@ -3,30 +3,47 @@ npm-adduser(1) -- Add a registry user account
## SYNOPSIS
- npm adduser
+ npm adduser [--registry=url] [--scope=@orgname]
## DESCRIPTION
-Create or verify a user named `` in the npm registry, and
-save the credentials to the `.npmrc` file.
+Create or verify a user named `` in the specified registry, and
+save the credentials to the `.npmrc` file. If no registry is specified,
+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
+To reset your password, go to
You may use this command multiple times with the same user account to
authorize on a new machine.
+`npm login` is an alias to `adduser` and behaves exactly the same way.
+
## CONFIGURATION
### registry
Default: http://registry.npmjs.org/
-The base URL of the npm package registry.
+The base URL of the npm package registry. If `scope` is also specified,
+this registry will only be used for packages with that scope. See `npm-scope(7)`.
+
+### scope
+
+Default: none
+
+If specified, the user and login credentials given will be associated
+with the specified scope. See `npm-scope(7)`. You can use both at the same time,
+e.g.
+
+ npm adduser --registry=http://myregistry.example.com --scope=@myco
+
+This will set a registry for the given scope and login or create a user for
+that registry at the same time.
## SEE ALSO
diff --git a/deps/npm/doc/cli/npm-install.md b/deps/npm/doc/cli/npm-install.md
index 62eec2d8e3..2d42716373 100644
--- a/deps/npm/doc/cli/npm-install.md
+++ b/deps/npm/doc/cli/npm-install.md
@@ -7,10 +7,10 @@ npm-install(1) -- Install a package
npm install
npm install
npm install
- npm install [--save|--save-dev|--save-optional] [--save-exact]
- npm install @
- npm install @
- npm install @
+ npm install [@/] [--save|--save-dev|--save-optional] [--save-exact]
+ npm install [@/]@
+ npm install [@/]@
+ npm install [@/]@
npm i (with any of the previous argument usage)
## DESCRIPTION
@@ -70,7 +70,7 @@ after packing it up into a tarball (b).
npm install https://github.com/indexzero/forever/tarball/v0.5.6
-* `npm install [--save|--save-dev|--save-optional]`:
+* `npm install [@/] [--save|--save-dev|--save-optional]`:
Do a `@` install, where `` is the "tag" config. (See
`npm-config(7)`.)
@@ -98,9 +98,19 @@ after packing it up into a tarball (b).
exact version rather than using npm's default semver range
operator.
+ `` is optional. The package will be downloaded from the registry
+ associated with the specified scope. If no registry is associated with
+ the given scope the default registry is assumed. See `npm-scope(7)`.
+
+ Note: if you do not include the @-symbol on your scope name, npm will
+ interpret this as a GitHub repository instead, see below. Scopes names
+ must also be followed by a slash.
+
Examples:
npm install sax --save
+ npm install githubname/reponame
+ npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save --save-exact
@@ -110,7 +120,7 @@ after packing it up into a tarball (b).
working directory, then it will try to install that, and only try to
fetch the package by name if it is not valid.
-* `npm install @`:
+* `npm install [@/]@`:
Install the version of the package that is referenced by the specified tag.
If the tag does not exist in the registry data for that package, then this
@@ -119,17 +129,19 @@ after packing it up into a tarball (b).
Example:
npm install sax@latest
+ npm install @myorg/mypackage@latest
-* `npm install @`:
+* `npm install [@/]@`:
- Install the specified version of the package. This will fail if the version
- has not been published to the registry.
+ Install the specified version of the package. This will fail if the
+ version has not been published to the registry.
Example:
npm install sax@0.1.1
+ npm install @myorg/privatepackage@1.5.0
-* `npm install @`:
+* `npm install [@/]@`:
Install a version of the package matching the specified version range. This
will follow the same rules for resolving dependencies described in `package.json(5)`.
@@ -140,6 +152,19 @@ after packing it up into a tarball (b).
Example:
npm install sax@">=0.1.0 <0.2.0"
+ npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
+
+* `npm install /`:
+
+ Install the package at `https://github.com/githubname/githubrepo" by
+ attempting to clone it using `git`.
+
+ Example:
+
+ npm install mygithubuser/myproject
+
+ To reference a package in a git repo that is not on GitHub, see git
+ remote urls below.
* `npm install `:
diff --git a/deps/npm/doc/cli/npm-link.md b/deps/npm/doc/cli/npm-link.md
index c0fc01eb26..a6c2747900 100644
--- a/deps/npm/doc/cli/npm-link.md
+++ b/deps/npm/doc/cli/npm-link.md
@@ -4,7 +4,7 @@ npm-link(1) -- Symlink a package folder
## SYNOPSIS
npm link (in package folder)
- npm link
+ npm link [@/]
npm ln (with any of the previous argument usage)
## DESCRIPTION
@@ -12,7 +12,8 @@ npm-link(1) -- Symlink a package folder
Package linking is a two-step process.
First, `npm link` in a package folder will create a globally-installed
-symbolic link from `prefix/package-name` to the current folder.
+symbolic link from `prefix/package-name` to the current folder (see
+`npm-config(7)` for the value of `prefix`).
Next, in some other location, `npm link package-name` will create a
symlink from the local `node_modules` folder to the global symlink.
@@ -20,12 +21,14 @@ symlink from the local `node_modules` folder to the global symlink.
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.
+
When creating tarballs for `npm publish`, the linked packages are
"snapshotted" to their current state by resolving the symbolic links.
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild.
+This is handy for installing your own stuff, so that you can work on it and
+test it iteratively without having to continually rebuild.
For example:
@@ -51,6 +54,11 @@ The second line is the equivalent of doing:
That is, it first creates a global link, and then links the global
installation target into your project's `node_modules` folder.
+If your linked package is scoped (see `npm-scope(7)`) your link command must
+include that scope, e.g.
+
+ npm link @myorg/privatepackage
+
## SEE ALSO
* npm-developers(7)
diff --git a/deps/npm/doc/cli/npm-ls.md b/deps/npm/doc/cli/npm-ls.md
index 21f54264c7..0f0d79489a 100644
--- a/deps/npm/doc/cli/npm-ls.md
+++ b/deps/npm/doc/cli/npm-ls.md
@@ -3,10 +3,10 @@ npm-ls(1) -- List installed packages
## SYNOPSIS
- npm list [ ...]
- npm ls [ ...]
- npm la [ ...]
- npm ll [ ...]
+ npm list [[@/] ...]
+ npm ls [[@/] ...]
+ npm la [[@/] ...]
+ npm ll [[@/] ...]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm-prefix.md b/deps/npm/doc/cli/npm-prefix.md
index f99a401d14..f262a36a75 100644
--- a/deps/npm/doc/cli/npm-prefix.md
+++ b/deps/npm/doc/cli/npm-prefix.md
@@ -3,11 +3,15 @@ npm-prefix(1) -- Display prefix
## SYNOPSIS
- npm prefix
+ npm prefix [-g]
## DESCRIPTION
-Print the prefix to standard out.
+Print the local prefix to standard out. This is the closest parent directory
+to contain a package.json file unless `-g` is also specified.
+
+If `-g` is specified, this will be the value of the global prefix. See
+`npm-config(7)` for more detail.
## SEE ALSO
diff --git a/deps/npm/doc/cli/npm-publish.md b/deps/npm/doc/cli/npm-publish.md
index 338728e3e4..8860b88fc7 100644
--- a/deps/npm/doc/cli/npm-publish.md
+++ b/deps/npm/doc/cli/npm-publish.md
@@ -11,6 +11,10 @@ npm-publish(1) -- Publish a package
Publishes a package to the registry so that it can be installed by name.
+By default npm will publish to the public registry. This can be overridden by
+specifying a different default registry or using a `npm-scope(7)` in the name
+(see `package.json(5)`).
+
* ``:
A folder containing a package.json file
@@ -24,7 +28,7 @@ Publishes a package to the registry so that it can be installed by name.
and `npm install` installs the `latest` tag.
Fails if the package name and version combination already exists in
-the registry.
+the specified registry.
Once a package is published with a given name and version, that
specific name and version combination can never be used again, even if
diff --git a/deps/npm/doc/cli/npm-restart.md b/deps/npm/doc/cli/npm-restart.md
index 4661d6b23b..7b039a8f8f 100644
--- a/deps/npm/doc/cli/npm-restart.md
+++ b/deps/npm/doc/cli/npm-restart.md
@@ -3,7 +3,7 @@ npm-restart(1) -- Start a package
## SYNOPSIS
- npm restart
+ npm restart [-- ]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm-run-script.md b/deps/npm/doc/cli/npm-run-script.md
index 835dbf5df7..09a546b9a8 100644
--- a/deps/npm/doc/cli/npm-run-script.md
+++ b/deps/npm/doc/cli/npm-run-script.md
@@ -3,8 +3,8 @@ npm-run-script(1) -- Run arbitrary package scripts
## SYNOPSIS
- npm run-script [] [command]
- npm run [] [command]
+ npm run-script [command] [-- ]
+ npm run [command] [-- ]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm-start.md b/deps/npm/doc/cli/npm-start.md
index 01347d2e46..759de221f3 100644
--- a/deps/npm/doc/cli/npm-start.md
+++ b/deps/npm/doc/cli/npm-start.md
@@ -3,7 +3,7 @@ npm-start(1) -- Start a package
## SYNOPSIS
- npm start
+ npm start [-- ]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm-stop.md b/deps/npm/doc/cli/npm-stop.md
index bda5cc8f47..92b14b4179 100644
--- a/deps/npm/doc/cli/npm-stop.md
+++ b/deps/npm/doc/cli/npm-stop.md
@@ -3,7 +3,7 @@ npm-stop(1) -- Stop a package
## SYNOPSIS
- npm stop
+ npm stop [-- ]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm-test.md b/deps/npm/doc/cli/npm-test.md
index 800f3ae104..c2267082df 100644
--- a/deps/npm/doc/cli/npm-test.md
+++ b/deps/npm/doc/cli/npm-test.md
@@ -3,8 +3,8 @@ npm-test(1) -- Test a package
## SYNOPSIS
- npm test
- npm tst
+ npm test [-- ]
+ npm tst [-- ]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm-uninstall.md b/deps/npm/doc/cli/npm-uninstall.md
index e24815bec7..bfa667c3e2 100644
--- a/deps/npm/doc/cli/npm-uninstall.md
+++ b/deps/npm/doc/cli/npm-uninstall.md
@@ -3,7 +3,7 @@ npm-rm(1) -- Remove a package
## SYNOPSIS
- npm uninstall [--save|--save-dev|--save-optional]
+ npm uninstall [@/] [--save|--save-dev|--save-optional]
npm rm (with any of the previous argument usage)
## DESCRIPTION
@@ -27,9 +27,12 @@ the package version in your main package.json:
* `--save-optional`: Package will be removed from your `optionalDependencies`.
+Scope is optional and follows the usual rules for `npm-scope(7)`.
+
Examples:
npm uninstall sax --save
+ npm uninstall @myorg/privatepackage --save
npm uninstall node-tap --save-dev
npm uninstall dtrace-provider --save-optional
diff --git a/deps/npm/doc/cli/npm-unpublish.md b/deps/npm/doc/cli/npm-unpublish.md
index 45026197e1..1d5fe92878 100644
--- a/deps/npm/doc/cli/npm-unpublish.md
+++ b/deps/npm/doc/cli/npm-unpublish.md
@@ -3,7 +3,7 @@ npm-unpublish(1) -- Remove a package from the registry
## SYNOPSIS
- npm unpublish [@]
+ npm unpublish [@/][@]
## WARNING
@@ -27,6 +27,8 @@ Even if a package version is unpublished, that specific name and
version combination can never be reused. In order to publish the
package again, a new version number must be used.
+The scope is optional and follows the usual rules for `npm-scope(7)`.
+
## SEE ALSO
* npm-deprecate(1)
diff --git a/deps/npm/doc/cli/npm-update.md b/deps/npm/doc/cli/npm-update.md
index 1ea6b62756..a53d294592 100644
--- a/deps/npm/doc/cli/npm-update.md
+++ b/deps/npm/doc/cli/npm-update.md
@@ -12,8 +12,11 @@ This command will update all the packages listed to the latest version
It will also install missing packages.
-If the `-g` flag is specified, this command will update globally installed packages.
-If no package name is specified, all packages in the specified location (global or local) will be updated.
+If the `-g` flag is specified, this command will update globally installed
+packages.
+
+If no package name is specified, all packages in the specified location (global
+or local) will be updated.
## SEE ALSO
diff --git a/deps/npm/doc/cli/npm-view.md b/deps/npm/doc/cli/npm-view.md
index 1d19fe88d4..8f52a85a92 100644
--- a/deps/npm/doc/cli/npm-view.md
+++ b/deps/npm/doc/cli/npm-view.md
@@ -3,8 +3,8 @@ npm-view(1) -- View registry info
## SYNOPSIS
- npm view [@] [[.]...]
- npm v [@] [[.]...]
+ npm view [@/][@] [[.]...]
+ npm v [@/][@] [[.]...]
## DESCRIPTION
diff --git a/deps/npm/doc/files/npm-folders.md b/deps/npm/doc/files/npm-folders.md
index 1b1485d5ed..1fb21b1a31 100644
--- a/deps/npm/doc/files/npm-folders.md
+++ b/deps/npm/doc/files/npm-folders.md
@@ -42,6 +42,12 @@ Global installs on Unix systems go to `{prefix}/lib/node_modules`.
Global installs on Windows go to `{prefix}/node_modules` (that is, no
`lib` folder.)
+Scoped packages are installed the same way, except they are grouped together
+in a sub-folder of the relevant `node_modules` folder with the name of that
+scope prefix by the @ symbol, e.g. `npm install @myorg/package` would place
+the package in `{prefix}/node_modules/@myorg/package`. See `scopes(7)` for
+more details.
+
If you wish to `require()` a package, then install it locally.
### Executables
diff --git a/deps/npm/doc/files/package.json.md b/deps/npm/doc/files/package.json.md
index b9b05d4d4d..82b9405224 100644
--- a/deps/npm/doc/files/package.json.md
+++ b/deps/npm/doc/files/package.json.md
@@ -30,6 +30,9 @@ The name is what your thing is called. Some tips:
* 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/
+A name can be optionally prefixed by a scope, e.g. `@myorg/mypackage`. See
+`npm-scope(7)` for more detail.
+
## version
The *most* important things in your package.json are the name and version fields.
@@ -320,6 +323,8 @@ See semver(7) for more details about specifying version ranges.
* `range1 || range2` Passes if either range1 or range2 are satisfied.
* `git...` See 'Git URLs as Dependencies' below
* `user/repo` See 'GitHub URLs' below
+* `tag` A specific version tagged and published as `tag` See `npm-tag(1)`
+* `path/path/path` See Local Paths below
For example, these are all valid:
@@ -334,6 +339,8 @@ For example, these are all valid:
, "elf" : "~1.2.3"
, "two" : "2.x"
, "thr" : "3.3.x"
+ , "lat" : "latest"
+ , "dyl" : "~/projects/dyl"
}
}
@@ -369,6 +376,21 @@ As of version 1.1.65, you can refer to GitHub urls as just "foo": "user/foo-proj
}
}
+## Local Paths
+
+As of version 2.0.0 you can provide a path to a local directory that
+contains a package. Local paths can be in the form:
+
+ ../foo/bar
+ ~/foo/bar
+ ./foo/bar
+ /foo/bar
+
+This feature is helpful for local offline development and creating
+tests that require npm installing where you don't want to hit an
+external server, but should not be used when publishing packages
+to the public registry.
+
## devDependencies
If someone is planning on downloading and using your module in their
diff --git a/deps/npm/doc/misc/npm-config.md b/deps/npm/doc/misc/npm-config.md
index 035923fa6f..8b5ae12c0d 100644
--- a/deps/npm/doc/misc/npm-config.md
+++ b/deps/npm/doc/misc/npm-config.md
@@ -50,6 +50,7 @@ The following shorthands are parsed on the command-line:
* `-dd`, `--verbose`: `--loglevel verbose`
* `-ddd`: `--loglevel silly`
* `-g`: `--global`
+* `-C`: `--prefix`
* `-l`: `--long`
* `-m`: `--message`
* `-p`, `--porcelain`: `--parseable`
@@ -253,12 +254,6 @@ set.
The command to run for `npm edit` or `npm config edit`.
-### email
-
-The email of the logged-in user.
-
-Set by the `npm adduser` command. Should not be set explicitly.
-
### engine-strict
* Default: false
@@ -417,6 +412,14 @@ The value `npm init` should use by default for the package author's homepage.
The value `npm init` should use by default for the package license.
+### init.version
+
+* Default: "0.0.0"
+* Type: semver
+
+The value that `npm init` should use by default for the package
+version number, if not already set in package.json.
+
### json
* Default: false
@@ -463,7 +466,7 @@ to the npm registry. Must be IPv4 in versions of Node prior to 0.12.
* Default: "http"
* Type: String
-* Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
+* Values: "silent", "error", "warn", "http", "info", "verbose", "silly"
What level of logs to report. On failure, *all* logs are written to
`npm-debug.log` in the current working directory.
@@ -663,14 +666,25 @@ Only works if there is already a package.json file present.
* Default: '^'
* Type: String
-Configure how versions of packages installed to a package.json file via
+Configure how versions of packages installed to a package.json file via
`--save` or `--save-dev` get prefixed.
For example if a package has version `1.2.3`, by default it's version is
-set to `^1.2.3` which allows minor upgrades for that package, but after
+set to `^1.2.3` which allows minor upgrades for that package, but after
`npm config set save-prefix='~'` it would be set to `~1.2.3` which only allows
patch upgrades.
+### scope
+
+* Default: ""
+* Type: String
+
+Associate an operation with a scope for a scoped registry. Useful when logging
+in to a private registry for the first time:
+`npm login --scope=@organization --registry=registry.organization.com`, which
+will cause `@organization` to be mapped to the registry for future installation
+of packages specified according to the pattern `@organization/package`.
+
### searchopts
* Default: ""
@@ -794,13 +808,6 @@ instead of complete help when doing `npm-help(1)`.
The UID to set to when running package scripts as root.
-### username
-
-* Default: null
-* Type: String
-
-The username on the npm registry. Set with `npm adduser`
-
### userconfig
* Default: ~/.npmrc
diff --git a/deps/npm/doc/misc/npm-faq.md b/deps/npm/doc/misc/npm-faq.md
index 53fa03d629..4dca3cd71e 100644
--- a/deps/npm/doc/misc/npm-faq.md
+++ b/deps/npm/doc/misc/npm-faq.md
@@ -75,18 +75,20 @@ npm will not help you do something that is known to be a bad idea.
## Should I check my `node_modules` folder into git?
-Mikeal Rogers answered this question very well:
+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:
-tl;dr
+https://www.npmjs.org/doc/cli/npm-shrinkwrap.html
-* Check `node_modules` into git for things you **deploy**, such as
- websites and apps.
-* Do not check `node_modules` into git for libraries and modules
- intended to be reused.
-* Use npm to manage dependencies in your dev environment, but not in
- your deployment scripts.
+If you are paranoid about depending on the npm ecosystem,
+you should run a private npm mirror or a private cache.
+
+If you want 100% confidence in being able to reproduce the specific bytes
+included in a deployment, you should use an additional mechanism that can
+verify contents rather than versions. For example,
+Amazon machine images, DigitalOcean snapshots, Heroku slugs, or simple tarballs.
## Is it 'npm' or 'NPM' or 'Npm'?
diff --git a/deps/npm/doc/misc/npm-index.md b/deps/npm/doc/misc/npm-index.md
index 4e9f70c99e..cf969868f9 100644
--- a/deps/npm/doc/misc/npm-index.md
+++ b/deps/npm/doc/misc/npm-index.md
@@ -409,6 +409,10 @@ Index of all npm documentation
The JavaScript Package Registry
+### npm-scope(7)
+
+Scoped packages
+
### npm-scripts(7)
How npm handles the "scripts" field
diff --git a/deps/npm/doc/misc/npm-registry.md b/deps/npm/doc/misc/npm-registry.md
index a8c4b0200d..42cec59448 100644
--- a/deps/npm/doc/misc/npm-registry.md
+++ b/deps/npm/doc/misc/npm-registry.md
@@ -12,15 +12,14 @@ write APIs as well, to allow for publishing packages and managing user
account information.
The official public npm registry is at . It
-is powered by a CouchDB database at
-. The code for the couchapp is
-available at . npm user accounts
-are CouchDB users, stored in the
-database.
-
-The registry URL is supplied by the `registry` config parameter. See
-`npm-config(1)`, `npmrc(5)`, and `npm-config(7)` for more on managing
-npm's configuration.
+is powered by a CouchDB database, of which there is a public mirror at
+. The code for the couchapp is
+available at .
+
+The registry URL used is determined by the scope of the package (see
+`npm-scope(7)`). If no scope is specified, the default registry is used, which is
+supplied by the `registry` config parameter. See `npm-config(1)`,
+`npmrc(5)`, and `npm-config(7)` for more on managing npm's configuration.
## Can I run my own private registry?
diff --git a/deps/npm/doc/misc/npm-scope.md b/deps/npm/doc/misc/npm-scope.md
new file mode 100644
index 0000000000..a4ee1a0825
--- /dev/null
+++ b/deps/npm/doc/misc/npm-scope.md
@@ -0,0 +1,84 @@
+npm-scope(7) -- Scoped packages
+===============================
+
+## DESCRIPTION
+
+All npm packages have a name. Some package names also have a scope. A scope
+follows the usual rules for package names (url-safe characters, no leading dots
+or underscores). When used in package names, preceded by an @-symbol and
+followed by a slash, e.g.
+
+ @somescope/somepackagename
+
+Scopes are a way of grouping related packages together, and also affect a few
+things about the way npm treats the package.
+
+**As of 2014-09-03, scoped packages are not supported by the public npm registry**.
+However, the npm client is backwards-compatible with un-scoped registries, so
+it can be used to work with scoped and un-scoped registries at the same time.
+
+## Installing scoped packages
+
+Scoped packages are installed to a sub-folder of the regular installation
+folder, e.g. if your other packages are installed in `node_modules/packagename`,
+scoped modules will be in `node_modules/@myorg/packagename`. The scope folder
+(`@myorg`) is simply the name of the scope preceded by an @-symbol, and can
+contain any number of scoped packages.
+
+A scoped package is install by referencing it by name, preceded by an @-symbol,
+in `npm install`:
+
+ npm install @myorg/mypackage
+
+Or in `package.json`:
+
+ "dependencies": {
+ "@myorg/mypackage": "^1.3.0"
+ }
+
+Note that if the @-symbol is omitted in either case npm will instead attempt to
+install from GitHub; see `npm-install(1)`.
+
+## Requiring scoped packages
+
+Because scoped packages are installed into a scope folder, you have to
+include the name of the scope when requiring them in your code, e.g.
+
+ require('@myorg/mypackage')
+
+There is nothing special about the way Node treats scope folders, this is
+just specifying to require the module `mypackage` in the folder called `@myorg`.
+
+## Publishing scoped packages
+
+Scoped packages can be published to any registry that supports them.
+*As of 2014-09-03, the public npm registry does not support scoped packages*,
+so attempting to publish a scoped package to the registry will fail unless
+you have associated that scope with a different registry, see below.
+
+## Associating a scope with a registry
+
+Scopes can be associated with a separate registry. This allows you to
+seamlessly use a mix of packages from the public npm registry and one or more
+private registries, such as npm Enterprise.
+
+You can associate a scope with a registry at login, e.g.
+
+ npm login --registry=http://reg.example.com --scope=@myco
+
+Scopes have a many-to-one relationship with registries: one registry can
+host multiple scopes, but a scope only ever points to one registry.
+
+You can also associate a scope with a registry using `npm config`:
+
+ npm config set @myco:registry http://reg.example.com
+
+Once a scope is associated with a registry, any `npm install` for a package
+with that scope will request packages from that registry instead. Any
+`npm publish` for a package name that contains the scope will be published to
+that registry instead.
+
+## SEE ALSO
+
+* npm-install(1)
+* npm-publish(1)
\ No newline at end of file
diff --git a/deps/npm/doc/misc/npm-scripts.md b/deps/npm/doc/misc/npm-scripts.md
index b49d9e23d1..7ef8fb10d1 100644
--- a/deps/npm/doc/misc/npm-scripts.md
+++ b/deps/npm/doc/misc/npm-scripts.md
@@ -33,8 +33,9 @@ following scripts:
Run by the `npm restart` command. Note: `npm restart` will run the
stop and start scripts if no `restart` script is provided.
-Additionally, arbitrary scripts can be run by doing
-`npm run-script `.
+Additionally, arbitrary scripts can be executed by running `npm run-script
+`. *Pre* and *post* commands with matching names will be run for
+those as well (e.g. `premyscript`, `myscript`, `postmyscript`).
## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
diff --git a/deps/npm/doc/misc/semver.md b/deps/npm/doc/misc/semver.md
index 6c7d28061c..af83d717c9 100644
--- a/deps/npm/doc/misc/semver.md
+++ b/deps/npm/doc/misc/semver.md
@@ -41,53 +41,170 @@ A leading `"="` or `"v"` character is stripped off and ignored.
## Ranges
-The following range styles are supported:
-
-* `1.2.3` A specific version. When nothing else will do. Must be a full
- version number, with major, minor, and patch versions specified.
- Note that build metadata is still ignored, so `1.2.3+build2012` will
- satisfy this range.
-* `>1.2.3` Greater than a specific version.
-* `<1.2.3` Less than a specific version. If there is no prerelease
- tag on the version range, then no prerelease version will be allowed
- either, even though these are technically "less than".
-* `>=1.2.3` Greater than or equal to. Note that prerelease versions
- are NOT equal to their "normal" equivalents, so `1.2.3-beta` will
- not satisfy this range, but `2.3.0-beta` will.
-* `<=1.2.3` Less than or equal to. In this case, prerelease versions
- ARE allowed, so `1.2.3-beta` would satisfy.
+A `version range` is a set of `comparators` which specify versions
+that satisfy the range.
+
+A `comparator` is composed of an `operator` and a `version`. The set
+of primitive `operators` is:
+
+* `<` Less than
+* `<=` Less than or equal to
+* `>` Greater than
+* `>=` Greater than or equal to
+* `=` Equal. If no operator is specified, then equality is assumed,
+ so this operator is optional, but MAY be included.
+
+For example, the comparator `>=1.2.7` would match the versions
+`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
+or `1.1.0`.
+
+Comparators can be joined by whitespace to form a `comparator set`,
+which is satisfied by the **intersection** of all of the comparators
+it includes.
+
+A range is composed of one or more comparator sets, joined by `||`. A
+version matches a range if and only if every comparator in at least
+one of the `||`-separated comparator sets is satisfied by the version.
+
+For example, the range `>=1.2.7 <1.3.0` would match the versions
+`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
+or `1.1.0`.
+
+The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
+`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
+
+### Prerelease Tags
+
+If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
+it will only be allowed to satisfy comparator sets if at least one
+comparator with the same `[major, minor, patch]` tuple also has a
+prerelease tag.
+
+For example, the range `>1.2.3-alpha.3` would be allowed to match the
+version `1.2.3-alpha.7`, but it would *not* be satisfied by
+`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
+than" `1.2.3-alpha.3` according to the SemVer sort rules. The version
+range only accepts prerelease tags on the `1.2.3` version. The
+version `3.4.5` *would* satisfy the range, because it does not have a
+prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
+
+The purpose for this behavior is twofold. First, prerelease versions
+frequently are updated very quickly, and contain many breaking changes
+that are (by the author's design) not yet fit for public consumption.
+Therefore, by default, they are excluded from range matching
+semantics.
+
+Second, a user who has opted into using a prerelease version has
+clearly indicated the intent to use *that specific* set of
+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 *next* set of prerelease versions.
+
+### Advanced Range Syntax
+
+Advanced range syntax desugars to primitive comparators in
+deterministic ways.
+
+Advanced ranges may be combined in the same way as primitive
+comparators using white space or `||`.
+
+#### Hyphen Ranges `X.Y.Z - A.B.C`
+
+Specifies an inclusive set.
+
* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
-* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to `1.2.3`". When
- using tilde operators, prerelease versions are supported as well,
- but a prerelease of the next significant digit will NOT be
- satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.
-* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with `1.2.3`". When
- using caret operators, anything from the specified version (including
- prerelease) will be supported up to, but not including, the next
- major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,
- while `1.2.2` and `2.0.0-beta` will not.
-* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with `0.1.3`". `0.x.x` versions are
- special: the first non-zero component indicates potentially breaking changes,
- meaning the caret operator matches any version with the same first non-zero
- component starting at the specified version.
-* `^0.0.2` := `=0.0.2` "Only the version `0.0.2` is considered compatible"
-* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`"
-* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with `1.2`"
-* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`"
-* `1.2.*` Same as `1.2.x`.
-* `1.2` Same as `1.2.x`.
-* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`"
-* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with `1`"
-* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`"
-* `1.*` Same as `1.x`.
-* `1` Same as `1.x`.
-* `*` Any version whatsoever.
-* `x` Same as `*`.
-* `""` (just an empty string) Same as `*`.
-
-
-Ranges can be joined with either a space (which implies "and") or a
-`||` (which implies "or").
+
+If a partial version is provided as the first version in the inclusive
+range, then the missing pieces are replaced with zeroes.
+
+* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
+
+If a partial version is provided as the second version in the
+inclusive range, then all versions that start with the supplied parts
+of the tuple are accepted, but nothing that would be greater than the
+provided tuple parts.
+
+* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
+* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
+
+#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
+
+Any of `X`, `x`, or `*` may be used to "stand in" for one of the
+numeric values in the `[major, minor, patch]` tuple.
+
+* `*` := `>=0.0.0` (Any version satisfies)
+* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
+* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
+
+A partial version range is treated as an X-Range, so the special
+character is in fact optional.
+
+* `` (empty string) := `*` := `>=0.0.0`
+* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
+* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
+
+#### Tilde Ranges `~1.2.3` `~1.2` `~1`
+
+Allows patch-level changes if a minor version is specified on the
+comparator. Allows minor-level changes if not.
+
+* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
+* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
+* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
+* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
+* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
+* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
+* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
+ the `1.2.3` version will be allowed, if they are greater than or
+ equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
+ `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
+`[major, minor, patch]` tuple. In other words, this allows patch and
+minor updates for versions `1.0.0` and above, patch updates for
+versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
+
+Many authors treat a `0.x` version as if the `x` were the major
+"breaking-change" indicator.
+
+Caret ranges are ideal when an author may make breaking changes
+between `0.2.4` and `0.3.0` releases, which is a common practice.
+However, it presumes that there will *not* be breaking changes between
+`0.2.4` and `0.2.5`. It allows for changes that are presumed to be
+additive (but non-breaking), according to commonly observed practices.
+
+* `^1.2.3` := `>=1.2.3 <2.0.0`
+* `^0.2.3` := `>=0.2.3 <0.3.0`
+* `^0.0.3` := `>=0.0.3 <0.0.4`
+* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
+ the `1.2.3` version will be allowed, if they are greater than or
+ equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
+ `1.2.4-beta.2` would not, because it is a prerelease of a
+ different `[major, minor, patch]` tuple.
+* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the
+ `0.0.3` version *only* will be allowed, if they are greater than or
+ equal to `beta`. So, `0.0.3-pr.2` would be allowed.
+
+When parsing caret ranges, a missing `patch` value desugars to the
+number `0`, but will allow flexibility within that value, even if the
+major and minor versions are both `0`.
+
+* `^1.2.x` := `>=1.2.0 <2.0.0`
+* `^0.0.x` := `>=0.0.0 <0.1.0`
+* `^0.0` := `>=0.0.0 <0.1.0`
+
+A missing `minor` and `patch` values will desugar to zero, but also
+allow flexibility within those values, even if the major version is
+zero.
+
+* `^1.x` := `>=1.0.0 <2.0.0`
+* `^0.x` := `>=0.0.0 <1.0.0`
## Functions
diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html
index 6a4832313b..64bb15f319 100644
--- a/deps/npm/html/doc/README.html
+++ b/deps/npm/html/doc/README.html
@@ -19,11 +19,11 @@
To install an old and unsupported version of npm that works on node 0.3
and prior, clone the git repo and dig through the old tags and branches.
Run make install. npm will be installed with node.
If you want a more fancy pants install (a different version, customized
@@ -141,7 +141,7 @@ specific purpose, or lack of malice in any given npm package.
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.
@@ -161,7 +161,7 @@ ban your account in extreme cases. So don't do that.
diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html
index 557d2efe3c..dda88578a8 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.
-
npm-deprecate — npm@1.4.28
+
npm-deprecate — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html
index d42b27b037..076e9b4f82 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.
-
npm-docs — npm@1.4.28
+
npm-docs — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html
index f6f4617e12..c9702a0b46 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.
-
npm-edit — npm@1.4.28
+
npm-edit — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html
index 0136e705a2..be8556656f 100644
--- a/deps/npm/html/doc/api/npm-explore.html
+++ b/deps/npm/html/doc/api/npm-explore.html
@@ -31,5 +31,5 @@ sure to use npm rebuild <pkg> if you make any changes.
-
npm-explore — npm@1.4.28
+
npm-explore — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html
index e2bb08abbd..852f0bc46e 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
-
npm-help-search — npm@1.4.28
+
npm-help-search — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html
index ca23df8f48..dac576d345 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.
-
npm-init — npm@1.4.28
+
npm-init — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html
index c0e0eb78bf..204f1dfb89 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.
-
npm-install — npm@1.4.28
+
npm-install — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html
index aff1250a4c..4eef789e6b 100644
--- a/deps/npm/html/doc/api/npm-link.html
+++ b/deps/npm/html/doc/api/npm-link.html
@@ -42,5 +42,5 @@ the package in the current working directory
diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html
index f1c2504918..a3807d8fd3 100644
--- a/deps/npm/html/doc/api/npm-ls.html
+++ b/deps/npm/html/doc/api/npm-ls.html
@@ -63,5 +63,5 @@ dependency will only be output once.
-
npm-ls — npm@1.4.28
+
npm-ls — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html
index a7e88b882c..c566630a40 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.
-
npm-outdated — npm@1.4.28
+
npm-outdated — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html
index eb8f9abafa..d2b336bd95 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.
-
npm-owner — npm@1.4.28
+
npm-owner — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html
index c2476f20e0..1adb04959b 100644
--- a/deps/npm/html/doc/api/npm-pack.html
+++ b/deps/npm/html/doc/api/npm-pack.html
@@ -33,5 +33,5 @@ overwritten the second time.
diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html
index 9d338cebbd..ae352eb565 100644
--- a/deps/npm/html/doc/api/npm-publish.html
+++ b/deps/npm/html/doc/api/npm-publish.html
@@ -46,5 +46,5 @@ the registry. Overwrites when the "force" environment variable is set
-
npm-publish — npm@1.4.28
+
npm-publish — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html
index 821becbf54..1cb5fffc23 100644
--- a/deps/npm/html/doc/api/npm-rebuild.html
+++ b/deps/npm/html/doc/api/npm-rebuild.html
@@ -30,5 +30,5 @@ the new binary. If no 'packages' parameter is specify, every package wil
-
npm-rebuild — npm@1.4.28
+
npm-rebuild — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html
index d624659c15..2c40c8ed1f 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.
-
npm-repo — npm@1.4.28
+
npm-repo — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html
index 67729df285..382d44ac97 100644
--- a/deps/npm/html/doc/api/npm-restart.html
+++ b/deps/npm/html/doc/api/npm-restart.html
@@ -36,5 +36,5 @@ in the packages parameter.
diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html
index c7ca613833..b5ef687997 100644
--- a/deps/npm/html/doc/api/npm-run-script.html
+++ b/deps/npm/html/doc/api/npm-run-script.html
@@ -41,5 +41,5 @@ assumed to be the command to run. All other elements are ignored.
diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html
index 172646a9ee..e5bf33ae4c 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.
-
npm-shrinkwrap — npm@1.4.28
+
npm-shrinkwrap — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html
index 813b28ce2a..fa8a3db835 100644
--- a/deps/npm/html/doc/api/npm-start.html
+++ b/deps/npm/html/doc/api/npm-start.html
@@ -28,5 +28,5 @@ in the packages parameter.
-
npm-start — npm@1.4.28
+
npm-start — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html
index 65f5c9f26e..bdcf72bde8 100644
--- a/deps/npm/html/doc/api/npm-stop.html
+++ b/deps/npm/html/doc/api/npm-stop.html
@@ -28,5 +28,5 @@ in the packages parameter.
-
npm-stop — npm@1.4.28
+
npm-stop — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-submodule.html b/deps/npm/html/doc/api/npm-submodule.html
index 35364403c3..f7dfcca434 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.
-
npm-submodule — npm@1.4.28
+
npm-submodule — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html
index cf9c71c3c5..2f94ed7f23 100644
--- a/deps/npm/html/doc/api/npm-tag.html
+++ b/deps/npm/html/doc/api/npm-tag.html
@@ -36,5 +36,5 @@ used. For more information about how to set this config, check
-
npm-tag — npm@1.4.28
+
npm-tag — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html
index f2d37483ac..3247238ef9 100644
--- a/deps/npm/html/doc/api/npm-test.html
+++ b/deps/npm/html/doc/api/npm-test.html
@@ -30,5 +30,5 @@ in the packages parameter.
-
npm-test — npm@1.4.28
+
npm-test — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html
index 2abfd08996..ffd317e484 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.
-
npm-uninstall — npm@1.4.28
+
npm-uninstall — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html
index f6412cf7d1..e35acac1d1 100644
--- a/deps/npm/html/doc/api/npm-unpublish.html
+++ b/deps/npm/html/doc/api/npm-unpublish.html
@@ -33,5 +33,5 @@ the root package entry is removed from the registry entirely.
diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html
index 8985822164..376d8b9807 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.
-
npm-version — npm@1.4.28
+
npm-version — npm@2.0.0
diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html
index 59f68ee64a..482d912677 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.
This is the API documentation for npm.
To find documentation of the command line
@@ -110,5 +110,5 @@ method names. Use the npm.deref method to find the real name.
Create or verify a user named <username> in the npm registry, and
-save the credentials to the .npmrc file.
+
Create or verify a user named <username> in the specified registry, and
+save the credentials to the .npmrc file. If no registry is specified,
+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.
The base URL of the npm package registry. If scope is also specified,
+this registry will only be used for packages with that scope. See npm-scope(7).
+
scope
+
Default: none
+
If specified, the user and login credentials given will be associated
+with the specified scope. See npm-scope(7). You can use both at the same time,
+e.g.
diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html
index 8693485aa3..e7ce93bc9d 100644
--- a/deps/npm/html/doc/cli/npm-bugs.html
+++ b/deps/npm/html/doc/cli/npm-bugs.html
@@ -54,5 +54,5 @@ a package.json in the current folder and use the name
-
npm-bugs — npm@1.4.28
+
npm-bugs — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html
index 58dfd36fde..e2f60bb118 100644
--- a/deps/npm/html/doc/cli/npm-build.html
+++ b/deps/npm/html/doc/cli/npm-build.html
@@ -38,5 +38,5 @@ A folder containing a package.json file in its root.
-
npm-build — npm@1.4.28
+
npm-build — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html
index 47355abbf2..0bdbb1ef97 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.
-
npm-bundle — npm@1.4.28
+
npm-bundle — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html
index 3b84f979dc..a384b71b2f 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.
-
npm-cache — npm@1.4.28
+
npm-cache — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html
index cc56d45623..2d0dae8c8d 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.
-
npm-completion — npm@1.4.28
+
npm-completion — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html
index 52efed825b..cf19f65265 100644
--- a/deps/npm/html/doc/cli/npm-config.html
+++ b/deps/npm/html/doc/cli/npm-config.html
@@ -66,5 +66,5 @@ global config.
diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html
index 01640248b5..f4c568cc6d 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:
-
npm-deprecate — npm@1.4.28
+
npm-deprecate — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html
index 05b445cdae..14f447987c 100644
--- a/deps/npm/html/doc/cli/npm-docs.html
+++ b/deps/npm/html/doc/cli/npm-docs.html
@@ -56,5 +56,5 @@ the current folder and use the name property.
-
npm-docs — npm@1.4.28
+
npm-docs — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html
index 50d21486a0..542404cd91 100644
--- a/deps/npm/html/doc/cli/npm-edit.html
+++ b/deps/npm/html/doc/cli/npm-edit.html
@@ -49,5 +49,5 @@ or "notepad" on Windows.
-
npm-edit — npm@1.4.28
+
npm-edit — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html
index c3c3127de6..15d7761ce0 100644
--- a/deps/npm/html/doc/cli/npm-explore.html
+++ b/deps/npm/html/doc/cli/npm-explore.html
@@ -50,5 +50,5 @@ Windows
-
npm-explore — npm@1.4.28
+
npm-explore — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html
index d09aecf8c1..22ddb9dd51 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.
-
npm-help-search — npm@1.4.28
+
npm-help-search — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html
index bb5a2e1667..52096aa57e 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.
-
npm-help — npm@1.4.28
+
npm-help — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html
index ec53ca2567..6b4bfe10cb 100644
--- a/deps/npm/html/doc/cli/npm-init.html
+++ b/deps/npm/html/doc/cli/npm-init.html
@@ -38,5 +38,5 @@ without a really good reason to do so.
Do a <name>@<tag> install, where <tag> is the "tag" config. (See
npm-config(7).)
In most cases, this will install the latest version
@@ -85,8 +85,16 @@ package.json, there is an additional, optional flag:
--save-exact: Saved dependencies will be configured with an
exact version rather than using npm's default semver range
operator.
+
<scope> is optional. The package will be downloaded from the registry
+associated with the specified scope. If no registry is associated with
+the given scope the default registry is assumed. See npm-scope(7).
+
Note: if you do not include the @-symbol on your scope name, npm will
+interpret this as a GitHub repository instead, see below. Scopes names
+must also be followed by a slash.
Examples:
npm install sax --save
+npm install githubname/reponame
+npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save --save-exact
@@ -98,27 +106,38 @@ npm install readable-stream --save --save-exact
working directory, then it will try to install that, and only try to
fetch the package by name if it is not valid.
-
npm install <name>@<tag>:
+
npm install [@<scope>/]<name>@<tag>:
Install the version of the package that is referenced by the specified tag.
If the tag does not exist in the registry data for that package, then this
will fail.
Install a version of the package matching the specified version range. This
will follow the same rules for resolving dependencies described in package.json(5).
Note that most version ranges must be put in quotes so that your shell will
treat it as a single argument.
npm link (in package folder)
-npm link <pkgname>
+npm link [@<scope>/]<pkgname>
npm ln (with any of the previous argument usage)
DESCRIPTION
Package linking is a two-step process.
First, npm link in a package folder will create a globally-installed
-symbolic link from prefix/package-name to the current folder.
+symbolic link from prefix/package-name to the current folder (see
+npm-config(7) for the value of prefix).
Next, in some other location, npm link package-name will create a
symlink from the local node_modules folder to the global symlink.
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.
When creating tarballs for npm publish, the linked packages are
"snapshotted" to their current state by resolving the symbolic links.
-
This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild.
+
This is handy for installing your own stuff, so that you can work on it and
+test it iteratively without having to continually rebuild.
For example:
cd ~/projects/node-redis # go into the package directory
npm link # creates global link
@@ -43,7 +45,10 @@ npm link ../node-redis # link the dir of your dependency
npm link redis
That is, it first creates a global link, and then links the global
installation target into your project's node_modules folder.
-
SEE ALSO
+
If your linked package is scoped (see npm-scope(7)) your link command must
+include that scope, e.g.
npm list [<pkg> ...]
-npm ls [<pkg> ...]
-npm la [<pkg> ...]
-npm ll [<pkg> ...]
+
npm list [[@<scope>/]<pkg> ...]
+npm ls [[@<scope>/]<pkg> ...]
+npm la [[@<scope>/]<pkg> ...]
+npm ll [[@<scope>/]<pkg> ...]
DESCRIPTION
This command will print to stdout all the versions of packages that are
installed, as well as their dependencies, in a tree-structure.
@@ -22,7 +22,7 @@ installed, as well as their dependencies, in a tree-structure.
limit the results to only the paths to the packages named. Note that
nested packages will also show the paths to the specified packages.
For example, running npm ls promzard in npm's source tree will show:
-
diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html
index 4dd7b386d6..b2f8f84e57 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.
-
npm-owner — npm@1.4.28
+
npm-owner — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html
index b5a68f27b7..5518eb188d 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.
Publishes a package to the registry so that it can be installed by name.
+
By default npm will publish to the public registry. This can be overridden by
+specifying a different default registry or using a npm-scope(7) in the name
+(see package.json(5)).
<folder>:
A folder containing a package.json file
@@ -30,7 +33,7 @@ and npm install installs the latest tag.
Fails if the package name and version combination already exists in
-the registry.
+the specified registry.
Once a package is published with a given name and version, that
specific name and version combination can never be used again, even if
it is removed with npm-unpublish(1).
diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html
index 3334c695f8..01d0f33eaf 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.
-
npm-rebuild — npm@1.4.28
+
npm-rebuild — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html
index 3ad91979de..350f2fd9c0 100644
--- a/deps/npm/html/doc/cli/npm-repo.html
+++ b/deps/npm/html/doc/cli/npm-repo.html
@@ -42,5 +42,5 @@ a package.json in the current folder and use the name
This runs a package's "restart" script, if one was provided.
Otherwise it runs package's "stop" script, if one was provided, and then
@@ -37,5 +37,5 @@ the "start" script.
-
npm-restart — npm@1.4.28
+
npm-restart — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html
index 8622174552..188cb517c8 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.
npm run-script [<pkg>] [command]
-npm run [<pkg>] [command]
+
npm run-script [command] [-- <args>]
+npm run [command] [-- <args>]
DESCRIPTION
This runs an arbitrary command from a package's "scripts" object.
If no package name is provided, it will search for a package.json
@@ -40,5 +40,5 @@ called directly, as well.
-
npm-run-script — npm@1.4.28
+
npm-run-script — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html
index cbed488646..fac2fac7d7 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.
-
npm-search — npm@1.4.28
+
npm-search — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html
index 37c8c9c05c..ec54bc8eb7 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.
-
npm-shrinkwrap — npm@1.4.28
+
npm-shrinkwrap — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html
index 5e98d0f272..9b7035784b 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.
-
npm-star — npm@1.4.28
+
npm-star — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html
index c13ede22b8..9c3b24da52 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.
This runs a package's "stop" script, if one was provided.
SEE ALSO
@@ -34,5 +34,5 @@
-
npm-stop — npm@1.4.28
+
npm-stop — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-submodule.html b/deps/npm/html/doc/cli/npm-submodule.html
index 6716c4a11c..899005f061 100644
--- a/deps/npm/html/doc/cli/npm-submodule.html
+++ b/deps/npm/html/doc/cli/npm-submodule.html
@@ -42,5 +42,5 @@ dependencies into the submodule folder.
-
npm-submodule — npm@1.4.28
+
npm-submodule — npm@2.0.0
diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html
index 40a2ffe89f..7dfbd1849f 100644
--- a/deps/npm/html/doc/cli/npm-tag.html
+++ b/deps/npm/html/doc/cli/npm-tag.html
@@ -44,5 +44,5 @@ of using a specific version number:
It is generally considered bad behavior to remove versions of a library
that others are depending on!
@@ -26,6 +26,7 @@ the root package entry is removed from the registry entirely.
Even if a package version is unpublished, that specific name and
version combination can never be reused. In order to publish the
package again, a new version number must be used.
+
The scope is optional and follows the usual rules for npm-scope(7).
This command will update all the packages listed to the latest version
(specified by the tag config).
It will also install missing packages.
-
If the -g flag is specified, this command will update globally installed packages.
-If no package name is specified, all packages in the specified location (global or local) will be updated.
+
If the -g flag is specified, this command will update globally installed
+packages.
+
If no package name is specified, all packages in the specified location (global
+or local) will be updated.
npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
@@ -110,7 +110,7 @@ easily by doing npm view npm contributors.
@@ -154,5 +154,5 @@ will no doubt tell you to put the output in a gist or email.
-
npm — npm@1.4.28
+
npm — npm@2.0.0
diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html
index 637b45c382..cb2b56c29e 100644
--- a/deps/npm/html/doc/files/npm-folders.html
+++ b/deps/npm/html/doc/files/npm-folders.html
@@ -41,6 +41,11 @@ When installing locally, this means that you can
Global installs on Unix systems go to {prefix}/lib/node_modules.
Global installs on Windows go to {prefix}/node_modules (that is, no
lib folder.)
+
Scoped packages are installed the same way, except they are grouped together
+in a sub-folder of the relevant node_modules folder with the name of that
+scope prefix by the @ symbol, e.g. npm install @myorg/package would place
+the package in {prefix}/node_modules/@myorg/package. See scopes(7) for
+more details.
If you wish to require() a package, then install it locally.
Executables
When in global mode, executables are linked into {prefix}/bin on Unix,
@@ -179,5 +184,5 @@ cannot be found elsewhere. See packa
A name can be optionally prefixed by a scope, e.g. @myorg/mypackage. See
+npm-scope(7) for more detail.
version
The most important things in your package.json are the name and version fields.
Those are actually required, and your package won't install without
@@ -234,6 +236,8 @@ a tarball or git URL.
range1 || range2 Passes if either range1 or range2 are satisfied.
git... See 'Git URLs as Dependencies' below
user/repo See 'GitHub URLs' below
+
tag A specific version tagged and published as tag See npm-tag(1)
@@ -271,7 +277,18 @@ an argument to git checkout. The default is master.
"express": "visionmedia/express"
}
}
-
devDependencies
+
Local Paths
+
As of version 2.0.0 you can provide a path to a local directory that
+contains a package. Local paths can be in the form:
+
../foo/bar
+~/foo/bar
+./foo/bar
+/foo/bar
+
This feature is helpful for local offline development and creating
+tests that require npm installing where you don't want to hit an
+external server, but should not be used when publishing packages
+to the public registry.
+
devDependencies
If someone is planning on downloading and using your module in their
program, then they probably don't want or need to download and build
the external test or documentation framework that you use.
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
index 129661d526..b00032dba9 100644
--- a/deps/npm/html/doc/files/package.json.html
+++ b/deps/npm/html/doc/files/package.json.html
@@ -34,6 +34,8 @@ 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/
+
A name can be optionally prefixed by a scope, e.g. @myorg/mypackage. See
+npm-scope(7) for more detail.
version
The most important things in your package.json are the name and version fields.
Those are actually required, and your package won't install without
@@ -234,6 +236,8 @@ a tarball or git URL.
range1 || range2 Passes if either range1 or range2 are satisfied.
git... See 'Git URLs as Dependencies' below
user/repo See 'GitHub URLs' below
+
tag A specific version tagged and published as tag See npm-tag(1)
@@ -271,7 +277,18 @@ an argument to git checkout. The default is master.
"express": "visionmedia/express"
}
}
-
devDependencies
+
Local Paths
+
As of version 2.0.0 you can provide a path to a local directory that
+contains a package. Local paths can be in the form:
+
../foo/bar
+~/foo/bar
+./foo/bar
+/foo/bar
+
This feature is helpful for local offline development and creating
+tests that require npm installing where you don't want to hit an
+external server, but should not be used when publishing packages
+to the public registry.
+
devDependencies
If someone is planning on downloading and using your module in their
program, then they probably don't want or need to download and build
the external test or documentation framework that you use.
What level of logs to report. On failure, all logs are written to
npm-debug.log in the current working directory.
@@ -568,11 +573,22 @@ devDependencies hash.
Default: '^'
Type: String
-
Configure how versions of packages installed to a package.json file via
+
Configure how versions of packages installed to a package.json file via
--save or --save-dev get prefixed.
For example if a package has version 1.2.3, by default it's version is
-set to ^1.2.3 which allows minor upgrades for that package, but after npm config set save-prefix='~' it would be set to ~1.2.3 which only allows
+set to ^1.2.3 which allows minor upgrades for that package, but after
+npm config set save-prefix='~' it would be set to ~1.2.3 which only allows
patch upgrades.
+
scope
+
+
Default: ""
+
Type: String
+
+
Associate an operation with a scope for a scoped registry. Useful when logging
+in to a private registry for the first time:
+npm login --scope=@organization --registry=registry.organization.com, which
+will cause @organization to be mapped to the registry for future installation
+of packages specified according to the pattern @organization/package.
searchopts
Default: ""
@@ -678,12 +694,6 @@ instead of complete help when doing npm-hel
After a few weeks, if there's no resolution, we'll sort it out.
Don't squat on package names. Publish code or move out of the way.
@@ -51,12 +51,12 @@ Joe's appropriate course of action in each case is the same.
owner (Bob).
Joe emails Bob, explaining the situation as respectfully as
possible, and what he would like to do with the module name. He
-adds the npm support staff support@npmjs.com to the CC list of
+adds the npm support staff support@npmjs.com to the CC list of
the email. Mention in the email that Bob can run npm owner add
joe foo to add Joe as an owner of the foo package.
After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can't come to any sort of resolution, email support
-support@npmjs.com and we'll sort it out. ("Reasonable" is
+support@npmjs.com and we'll sort it out. ("Reasonable" is
usually at least 4 weeks, but extra time is allowed around common
holidays.)
@@ -112,5 +112,5 @@ things into it.
-
npm-disputes — npm@1.4.28
+
npm-disputes — npm@2.0.0
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
index cdde512eee..85536d6f12 100644
--- a/deps/npm/html/doc/misc/npm-faq.html
+++ b/deps/npm/html/doc/misc/npm-faq.html
@@ -59,17 +59,16 @@ program that uses it.
in a shell script if you really wanted to.
npm will not help you do something that is known to be a bad idea.
If you are paranoid about depending on the npm ecosystem,
+you should run a private npm mirror or a private cache.
+
If you want 100% confidence in being able to reproduce the specific bytes
+included in a deployment, you should use an additional mechanism that can
+verify contents rather than versions. For example,
+Amazon machine images, DigitalOcean snapshots, Heroku slugs, or simple tarballs.
Is it 'npm' or 'NPM' or 'Npm'?
npm should never be capitalized unless it is being displayed in a
location that is customarily all-caps (such as the title of man pages.)
@@ -237,7 +236,7 @@ that has a package.json in its root, or a git url.
To check if the registry is down, open up
https://registry.npmjs.org/ in a web browser. This will also tell
you if you are just unable to access the internet for some reason.
-
If the registry IS down, let us know by emailing support@npmjs.com
+
If the registry IS down, let us know by emailing support@npmjs.com
or posting an issue at https://github.com/npm/npm/issues. If it's
down for the world (and not just on your local network) then we're
probably already being pinged about it.
The registry URL is supplied by the registry config parameter. See
-npm-config(1), npmrc(5), and npm-config(7) for more on managing
-npm's configuration.
The registry URL used is determined by the scope of the package (see
+npm-scope(7)). If no scope is specified, the default registry is used, which is
+supplied by the registry config parameter. See npm-config(1),
+npmrc(5), and npm-config(7) for more on managing npm's configuration.
Can I run my own private registry?
Yes!
The easiest way is to replicate the couch database, and use the same (or
@@ -71,5 +70,5 @@ effectively implement the entire CouchDB API anyway.
-
npm-registry — npm@1.4.28
+
npm-registry — npm@2.0.0
diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html
index ae8dfa6037..91ac0ae8e1 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.
-
npm-scope — npm@2.0.0-beta.3
+
npm-scope — npm@2.0.0
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
index 0c2c697a50..8b65e871cd 100644
--- a/deps/npm/html/doc/misc/npm-scripts.html
+++ b/deps/npm/html/doc/misc/npm-scripts.html
@@ -41,8 +41,9 @@ Run by the npm start command.
Run by the npm restart command. Note: npm restart will run the
stop and start scripts if no restart script is provided.
-
Additionally, arbitrary scripts can be run by doing
-npm run-script <pkg> <stage>.
+
Additionally, arbitrary scripts can be executed by running `npm run-script
+
. *Pre* and *post* commands with matching names will be run for
+those as well (e.g.premyscript,myscript,postmyscript`).
NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
tl;dr Don't use install. Use a .gyp file for compilation, and
prepublish for anything else.
@@ -218,5 +219,5 @@ the user will sudo the npm command in question.
-
npm-scripts — npm@1.4.28
+
npm-scripts — npm@2.0.0
diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html
index afd747c956..576c734347 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:
-
removing-npm — npm@1.4.28
+
removing-npm — npm@2.0.0
diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html
index 5ab35fa819..2a360ea08f 100644
--- a/deps/npm/html/doc/misc/semver.html
+++ b/deps/npm/html/doc/misc/semver.html
@@ -42,52 +42,150 @@ multiple versions to the utility will just sort them.
http://semver.org/.
A leading "=" or "v" character is stripped off and ignored.
Ranges
-
The following range styles are supported:
+
A version range is a set of comparators which specify versions
+that satisfy the range.
+
A comparator is composed of an operator and a version. The set
+of primitive operators is:
+
+
< Less than
+
<= Less than or equal to
+
> Greater than
+
>= Greater than or equal to
+
= Equal. If no operator is specified, then equality is assumed,
+so this operator is optional, but MAY be included.
+
+
For example, the comparator >=1.2.7 would match the versions
+1.2.7, 1.2.8, 2.5.3, and 1.3.9, but not the versions 1.2.6
+or 1.1.0.
+
Comparators can be joined by whitespace to form a comparator set,
+which is satisfied by the intersection of all of the comparators
+it includes.
+
A range is composed of one or more comparator sets, joined by ||. A
+version matches a range if and only if every comparator in at least
+one of the ||-separated comparator sets is satisfied by the version.
+
For example, the range >=1.2.7 <1.3.0 would match the versions
+1.2.7, 1.2.8, and 1.2.99, but not the versions 1.2.6, 1.3.0,
+or 1.1.0.
+
The range 1.2.7 || >=1.2.9 <2.0.0 would match the versions 1.2.7,
+1.2.9, and 1.4.6, but not the versions 1.2.8 or 2.0.0.
+
Prerelease Tags
+
If a version has a prerelease tag (for example, 1.2.3-alpha.3) then
+it will only be allowed to satisfy comparator sets if at least one
+comparator with the same [major, minor, patch] tuple also has a
+prerelease tag.
+
For example, the range >1.2.3-alpha.3 would be allowed to match the
+version 1.2.3-alpha.7, but it would not be satisfied by
+3.4.5-alpha.9, even though 3.4.5-alpha.9 is technically "greater
+than" 1.2.3-alpha.3 according to the SemVer sort rules. The version
+range only accepts prerelease tags on the 1.2.3 version. The
+version 3.4.5would satisfy the range, because it does not have a
+prerelease flag, and 3.4.5 is greater than 1.2.3-alpha.7.
+
The purpose for this behavior is twofold. First, prerelease versions
+frequently are updated very quickly, and contain many breaking changes
+that are (by the author's design) not yet fit for public consumption.
+Therefore, by default, they are excluded from range matching
+semantics.
+
Second, a user who has opted into using a prerelease version has
+clearly indicated the intent to use that specific set of
+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 next set of prerelease versions.
+
Advanced Range Syntax
+
Advanced range syntax desugars to primitive comparators in
+deterministic ways.
+
Advanced ranges may be combined in the same way as primitive
+comparators using white space or ||.
+
Hyphen Ranges X.Y.Z - A.B.C
+
Specifies an inclusive set.
-
1.2.3 A specific version. When nothing else will do. Must be a full
-version number, with major, minor, and patch versions specified.
-Note that build metadata is still ignored, so 1.2.3+build2012 will
-satisfy this range.
-
>1.2.3 Greater than a specific version.
-
<1.2.3 Less than a specific version. If there is no prerelease
-tag on the version range, then no prerelease version will be allowed
-either, even though these are technically "less than".
-
>=1.2.3 Greater than or equal to. Note that prerelease versions
-are NOT equal to their "normal" equivalents, so 1.2.3-beta will
-not satisfy this range, but 2.3.0-beta will.
-
<=1.2.3 Less than or equal to. In this case, prerelease versions
-ARE allowed, so 1.2.3-beta would satisfy.
1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
-
~1.2.3 := >=1.2.3-0 <1.3.0-0 "Reasonably close to 1.2.3". When
-using tilde operators, prerelease versions are supported as well,
-but a prerelease of the next significant digit will NOT be
-satisfactory, so 1.3.0-beta will not satisfy ~1.2.3.
-
^1.2.3 := >=1.2.3-0 <2.0.0-0 "Compatible with 1.2.3". When
-using caret operators, anything from the specified version (including
-prerelease) will be supported up to, but not including, the next
-major version (or its prereleases). 1.5.1 will satisfy ^1.2.3,
-while 1.2.2 and 2.0.0-beta will not.
-
^0.1.3 := >=0.1.3-0 <0.2.0-0 "Compatible with 0.1.3". 0.x.x versions are
-special: the first non-zero component indicates potentially breaking changes,
-meaning the caret operator matches any version with the same first non-zero
-component starting at the specified version.
-
^0.0.2 := =0.0.2 "Only the version 0.0.2 is considered compatible"
-
~1.2 := >=1.2.0-0 <1.3.0-0 "Any version starting with 1.2"
-
^1.2 := >=1.2.0-0 <2.0.0-0 "Any version compatible with 1.2"
-
1.2.x := >=1.2.0-0 <1.3.0-0 "Any version starting with 1.2"
-
1.2.* Same as 1.2.x.
-
1.2 Same as 1.2.x.
-
~1 := >=1.0.0-0 <2.0.0-0 "Any version starting with 1"
-
^1 := >=1.0.0-0 <2.0.0-0 "Any version compatible with 1"
-
1.x := >=1.0.0-0 <2.0.0-0 "Any version starting with 1"
-
1.* Same as 1.x.
-
1 Same as 1.x.
-
* Any version whatsoever.
-
x Same as *.
-
"" (just an empty string) Same as *.
-
Ranges can be joined with either a space (which implies "and") or a
-|| (which implies "or").
+
If a partial version is provided as the first version in the inclusive
+range, then the missing pieces are replaced with zeroes.
+
+
1.2 - 2.3.4 := >=1.2.0 <=2.3.4
+
+
If a partial version is provided as the second version in the
+inclusive range, then all versions that start with the supplied parts
+of the tuple are accepted, but nothing that would be greater than the
+provided tuple parts.
+
+
1.2.3 - 2.3 := >=1.2.3 <2.4.0
+
1.2.3 - 2 := >=1.2.3 <3.0.0
+
+
X-Ranges 1.2.x1.X1.2.**
+
Any of X, x, or * may be used to "stand in" for one of the
+numeric values in the [major, minor, patch] tuple.
+
+
* := >=0.0.0 (Any version satisfies)
+
1.x := >=1.0.0 <2.0.0 (Matching major version)
+
1.2.x := >=1.2.0 <1.3.0 (Matching major and minor versions)
+
+
A partial version range is treated as an X-Range, so the special
+character is in fact optional.
+
+
` (empty string) :=*:=>=0.0.0`
+
1 := 1.x.x := >=1.0.0 <2.0.0
+
1.2 := 1.2.x := >=1.2.0 <1.3.0
+
+
Tilde Ranges ~1.2.3~1.2~1
+
Allows patch-level changes if a minor version is specified on the
+comparator. Allows minor-level changes if not.
+
+
~1.2.3 := >=1.2.3 <1.(2+1).0 := >=1.2.3 <1.3.0
+
~1.2 := >=1.2.0 <1.(2+1).0 := >=1.2.0 <1.3.0 (Same as 1.2.x)
+
~1 := >=1.0.0 <(1+1).0.0 := >=1.0.0 <2.0.0 (Same as 1.x)
+
~0.2.3 := >=0.2.3 <0.(2+1).0 := >=0.2.3 <0.3.0
+
~0.2 := >=0.2.0 <0.(2+1).0 := >=0.2.0 <0.3.0 (Same as 0.2.x)
+
~0 := >=0.0.0 <(0+1).0.0 := >=0.0.0 <1.0.0 (Same as 0.x)
+
~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0 Note that prereleases in
+the 1.2.3 version will be allowed, if they are greater than or
+equal to beta.2. So, 1.2.3-beta.4 would be allowed, but
+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
+[major, minor, patch] tuple. In other words, this allows patch and
+minor updates for versions 1.0.0 and above, patch updates for
+versions 0.X >=0.1.0, and no updates for versions 0.0.X.
+
Many authors treat a 0.x version as if the x were the major
+"breaking-change" indicator.
+
Caret ranges are ideal when an author may make breaking changes
+between 0.2.4 and 0.3.0 releases, which is a common practice.
+However, it presumes that there will not be breaking changes between
+0.2.4 and 0.2.5. It allows for changes that are presumed to be
+additive (but non-breaking), according to commonly observed practices.
+
+
^1.2.3 := >=1.2.3 <2.0.0
+
^0.2.3 := >=0.2.3 <0.3.0
+
^0.0.3 := >=0.0.3 <0.0.4
+
^1.2.3-beta.2 := >=1.2.3-beta.2 <2.0.0 Note that prereleases in
+the 1.2.3 version will be allowed, if they are greater than or
+equal to beta.2. So, 1.2.3-beta.4 would be allowed, but
+1.2.4-beta.2 would not, because it is a prerelease of a
+different [major, minor, patch] tuple.
+
^0.0.3-beta := >=0.0.3-beta <0.0.4 Note that prereleases in the
+0.0.3 version only will be allowed, if they are greater than or
+equal to beta. So, 0.0.3-pr.2 would be allowed.
+
+
When parsing caret ranges, a missing patch value desugars to the
+number 0, but will allow flexibility within that value, even if the
+major and minor versions are both 0.
+
+
^1.2.x := >=1.2.0 <2.0.0
+
^0.0.x := >=0.0.0 <0.1.0
+
^0.0 := >=0.0.0 <0.1.0
+
+
A missing minor and patch values will desugar to zero, but also
+allow flexibility within those values, even if the major version is
+zero.
+
+
^1.x := >=1.0.0 <2.0.0
+
^0.x := >=0.0.0 <1.0.0
+
Functions
All methods and classes take a final loose boolean argument that, if
true, will be more forgiving about not-quite-valid semver strings.
@@ -165,5 +263,5 @@ range, use the satisfies(version, range) function.
-
semver — npm@1.4.28
+
semver — npm@2.0.0
diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js
index 579ecb0a9f..7e933ea7df 100644
--- a/deps/npm/lib/adduser.js
+++ b/deps/npm/lib/adduser.js
@@ -19,9 +19,10 @@ function adduser (args, cb) {
if (!crypto) return cb(new Error(
"You must compile node with ssl support to use the adduser feature"))
- var c = { u : npm.config.get("username") || ""
- , p : npm.config.get("_password") || ""
- , e : npm.config.get("email") || ""
+ var creds = npm.config.getCredentialsByURI(npm.config.get("registry"))
+ var c = { u : creds.username || ""
+ , p : creds.password || ""
+ , e : creds.email || ""
}
, u = {}
, fns = [readUsername, readPassword, readEmail, save]
@@ -94,7 +95,7 @@ function readPassword (c, u, cb) {
return readPassword(c, u, cb)
}
- c.changed = c.changed || c.p != pw
+ c.changed = c.changed || c.p !== pw
u.p = pw
cb(er)
})
@@ -132,17 +133,45 @@ function save (c, u, cb) {
registry.password = u.p
}
npm.spinner.start()
+
// save existing configs, but yank off for this PUT
- registry.adduser(npm.config.get("registry"), u.u, u.p, u.e, function (er) {
+ var uri = npm.config.get("registry")
+ var scope = npm.config.get("scope")
+
+ // there may be a saved scope and no --registry (for login)
+ if (scope) {
+ if (scope.charAt(0) !== "@") scope = "@" + scope
+
+ var scopedRegistry = npm.config.get(scope + ":registry")
+ if (scopedRegistry) uri = scopedRegistry
+ }
+
+ registry.adduser(uri, u.u, u.p, u.e, function (er, doc) {
npm.spinner.stop()
if (er) return cb(er)
+
registry.username = u.u
registry.password = u.p
registry.email = u.e
- npm.config.set("username", u.u, "user")
- npm.config.set("_password", u.p, "user")
- npm.config.set("email", u.e, "user")
+
+ // don't want this polluting the configuration
npm.config.del("_token", "user")
+
+ if (scope) npm.config.set(scope + ":registry", uri, "user")
+
+ if (doc && doc.token) {
+ npm.config.setCredentialsByURI(uri, {
+ token : doc.token
+ })
+ }
+ else {
+ npm.config.setCredentialsByURI(uri, {
+ username : u.u,
+ password : u.p,
+ email : u.e
+ })
+ }
+
log.info("adduser", "Authorized user %s", u.u)
npm.config.save("user", cb)
})
diff --git a/deps/npm/lib/bugs.js b/deps/npm/lib/bugs.js
index b3022bf2a2..16744cd5c8 100644
--- a/deps/npm/lib/bugs.js
+++ b/deps/npm/lib/bugs.js
@@ -9,19 +9,23 @@ var npm = require("./npm.js")
, opener = require("opener")
, path = require("path")
, readJson = require("read-package-json")
+ , npa = require("npm-package-arg")
, fs = require("fs")
- , url = require("url")
+ , mapToRegistry = require("./utils/map-to-registry.js")
bugs.completion = function (opts, cb) {
if (opts.conf.argv.remain.length > 2) return cb()
- var uri = url.resolve(npm.config.get("registry"), "-/short")
- registry.get(uri, { timeout : 60000 }, function (er, list) {
- return cb(null, list || [])
+ mapToRegistry("-/short", npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, { timeout : 60000 }, function (er, list) {
+ return cb(null, list || [])
+ })
})
}
function bugs (args, cb) {
- var n = args.length && args[0].split("@").shift() || '.'
+ 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)
@@ -56,9 +60,13 @@ function getUrlAndOpen (d, cb) {
}
function callRegistry (n, cb) {
- var uri = url.resolve(npm.config.get("registry"), n + "/latest")
- registry.get(uri, { timeout : 3600 }, function (er, d) {
+ mapToRegistry(n, npm.config, function (er, uri) {
if (er) return cb(er)
- getUrlAndOpen (d, cb)
+
+ registry.get(uri + "/latest", { timeout : 3600 }, function (er, d) {
+ if (er) return cb(er)
+
+ getUrlAndOpen (d, cb)
+ })
})
}
diff --git a/deps/npm/lib/build.js b/deps/npm/lib/build.js
index 350774a453..f1c61bdb8c 100644
--- a/deps/npm/lib/build.js
+++ b/deps/npm/lib/build.js
@@ -75,7 +75,7 @@ function linkStuff (pkg, folder, global, didRB, cb) {
// if it's global, and folder is in {prefix}/node_modules,
// then bins are in {prefix}/bin
// otherwise, then bins are in folder/../.bin
- var parent = path.dirname(folder)
+ var parent = pkg.name[0] === "@" ? path.dirname(path.dirname(folder)) : path.dirname(folder)
, gnm = global && npm.globalDir
, gtop = parent === gnm
@@ -95,7 +95,7 @@ function linkStuff (pkg, folder, global, didRB, cb) {
function shouldWarn(pkg, folder, global, cb) {
var parent = path.dirname(folder)
, top = parent === npm.dir
- , cwd = process.cwd()
+ , cwd = npm.localPrefix
readJson(path.resolve(cwd, "package.json"), function(er, topPkg) {
if (er) return cb(er)
diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js
index 37bba5a065..281d6100a9 100644
--- a/deps/npm/lib/cache.js
+++ b/deps/npm/lib/cache.js
@@ -47,9 +47,15 @@ adding a name@range:
adding a local tarball:
1. untar to tmp/random/{blah}
2. goto folder(2)
+
+adding a namespaced package:
+1. lookup registry for @namespace
+2. namespace_registry.get('name')
+3. add url(namespace/latest.tarball)
*/
exports = module.exports = cache
+
cache.unpack = unpack
cache.clean = clean
cache.read = read
@@ -61,17 +67,18 @@ var npm = require("./npm.js")
, readJson = require("read-package-json")
, log = require("npmlog")
, path = require("path")
- , url = require("url")
, asyncMap = require("slide").asyncMap
, tar = require("./utils/tar.js")
, fileCompletion = require("./utils/completion/file-completion.js")
- , isGitUrl = require("./utils/is-git-url.js")
, deprCheck = require("./utils/depr-check.js")
, addNamed = require("./cache/add-named.js")
, addLocal = require("./cache/add-local.js")
, addRemoteTarball = require("./cache/add-remote-tarball.js")
, addRemoteGit = require("./cache/add-remote-git.js")
+ , maybeGithub = require("./cache/maybe-github.js")
, inflight = require("inflight")
+ , npa = require("npm-package-arg")
+ , getStat = require("./cache/get-stat.js")
cache.usage = "npm cache add "
+ "\nnpm cache add "
@@ -108,9 +115,8 @@ function cache (args, cb) {
switch (cmd) {
case "rm": case "clear": case "clean": return clean(args, cb)
case "list": case "sl": case "ls": return ls(args, cb)
- case "add": return add(args, cb)
- default: return cb(new Error(
- "Invalid cache action: "+cmd))
+ case "add": return add(args, npm.prefix, cb)
+ default: return cb("Usage: "+cache.usage)
}
}
@@ -147,15 +153,30 @@ function read (name, ver, forceBypass, cb) {
})
}
+function normalize (args) {
+ var normalized = ""
+ if (args.length > 0) {
+ var a = npa(args[0])
+ if (a.name) normalized = a.name
+ if (a.rawSpec) normalized = [normalized, a.rawSpec].join("/")
+ if (args.length > 1) normalized = [normalized].concat(args.slice(1)).join("/")
+ }
+
+ if (normalized.substr(-1) === "/") {
+ normalized = normalized.substr(0, normalized.length - 1)
+ }
+ log.silly("ls", "normalized", normalized)
+
+ return normalized
+}
+
// npm cache ls []
function ls (args, cb) {
- args = args.join("/").split("@").join("/")
- if (args.substr(-1) === "/") args = args.substr(0, args.length - 1)
var prefix = npm.config.get("cache")
- if (0 === prefix.indexOf(process.env.HOME)) {
+ if (prefix.indexOf(process.env.HOME) === 0) {
prefix = "~" + prefix.substr(process.env.HOME.length)
}
- ls_(args, npm.config.get("depth"), function (er, files) {
+ ls_(normalize(args), npm.config.get("depth"), function (er, files) {
console.log(files.map(function (f) {
return path.join(prefix, f)
}).join("\n").trim())
@@ -174,9 +195,7 @@ function clean (args, cb) {
if (!args) args = []
- args = args.join("/").split("@").join("/")
- if (args.substr(-1) === "/") args = args.substr(0, args.length - 1)
- var f = path.join(npm.cache, path.normalize(args))
+ var f = path.join(npm.cache, path.normalize(normalize(args)))
if (f === npm.cache) {
fs.readdir(npm.cache, function (er, files) {
if (er) return cb()
@@ -187,30 +206,30 @@ function clean (args, cb) {
})
, rm, cb )
})
- } else rm(path.join(npm.cache, path.normalize(args)), cb)
+ } else rm(path.join(npm.cache, path.normalize(normalize(args))), cb)
}
// npm cache add
// npm cache add
// npm cache add
// npm cache add
-cache.add = function (pkg, ver, scrub, cb) {
+cache.add = function (pkg, ver, where, scrub, cb) {
assert(typeof pkg === "string", "must include name of package to install")
assert(typeof cb === "function", "must include callback")
if (scrub) {
return clean([], function (er) {
if (er) return cb(er)
- add([pkg, ver], cb)
+ add([pkg, ver], where, cb)
})
}
log.verbose("cache add", [pkg, ver])
- return add([pkg, ver], cb)
+ return add([pkg, ver], where, cb)
}
var adding = 0
-function add (args, cb) {
+function add (args, where, cb) {
// this is hot code. almost everything passes through here.
// the args can be any of:
// ["url"]
@@ -226,60 +245,69 @@ function add (args, cb) {
+ " npm cache add @\n"
+ " npm cache add \n"
+ " npm cache add \n"
- , name
, spec
+ , p
if (args[1] === undefined) args[1] = null
// at this point the args length must ==2
if (args[1] !== null) {
- name = args[0]
- spec = args[1]
+ spec = args[0]+"@"+args[1]
} else if (args.length === 2) {
spec = args[0]
}
- log.verbose("cache add", "name=%j spec=%j args=%j", name, spec, args)
+ log.verbose("cache add", "spec=%j args=%j", spec, args)
- if (!name && !spec) return cb(usage)
+ if (!spec) return cb(usage)
if (adding <= 0) {
npm.spinner.start()
}
adding ++
- cb = afterAdd([name, spec], cb)
-
- // see if the spec is a url
- // otherwise, treat as name@version
- var p = url.parse(spec) || {}
- log.verbose("parsed url", p)
-
- // If there's a /, and it's a path, then install the path.
- // If not, and there's a @, it could be that we got name@http://blah
- // in that case, we will not have a protocol now, but if we
- // split and check, we will.
- if (!name && !p.protocol) {
- return maybeFile(spec, cb)
- }
- else {
- switch (p.protocol) {
- case "http:":
- case "https:":
- return addRemoteTarball(spec, { name: name }, null, cb)
+ cb = afterAdd(cb)
+
+ // package.json can have local URI ("file:") dependencies which require
+ // normalization
+ p = npa(spec)
+ if (p.type === "local" && where) spec = path.resolve(where, p.spec)
+ log.verbose("parsed spec", p)
+
+ // short-circuit local installs
+ fs.stat(spec, function (er, s) {
+ if (er) return addNonLocal(spec, cb)
+ if (!s.isDirectory()) return addAndLogLocal(spec, cb)
+ fs.stat(path.join(spec, "package.json"), function (er) {
+ if (er) return addNonLocal(spec, cb)
+ addAndLogLocal(spec, cb)
+ })
+ })
+}
+
+function addAndLogLocal (spec, cb) {
+ log.verbose("cache add", "local package", path.resolve(spec))
+ return addLocal(spec, null, cb)
+}
+function addNonLocal (spec, cb) {
+ var p = npa(spec)
+ log.verbose("parsed spec", p)
+
+ switch (p.type) {
+ case "remote":
+ addRemoteTarball(p.spec, {name : p.name}, null, cb)
+ break
+ case "git":
+ addRemoteGit(p.spec, false, cb)
+ break
+ case "github":
+ maybeGithub(p.spec, cb)
+ break
default:
- if (isGitUrl(p)) return addRemoteGit(spec, p, false, cb)
+ if (p.name) return addNamed(p.name, p.spec, null, cb)
- // if we have a name and a spec, then try name@spec
- if (name) {
- addNamed(name, spec, null, cb)
- }
- // if not, then try just spec (which may try name@"" if not found)
- else {
- addLocal(spec, {}, cb)
- }
+ cb(new Error("couldn't figure out how to install " + spec))
}
- }
}
function unpack (pkg, ver, unpackTarget, dMode, fMode, uid, gid, cb) {
@@ -304,7 +332,7 @@ function unpack (pkg, ver, unpackTarget, dMode, fMode, uid, gid, cb) {
})
}
-function afterAdd (arg, cb) { return function (er, data) {
+function afterAdd (cb) { return function (er, data) {
adding --
if (adding <= 0) {
npm.spinner.stop()
@@ -322,49 +350,32 @@ function afterAdd (arg, cb) { return function (er, data) {
var done = inflight(pj, cb)
- if (!done) return
+ if (!done) return undefined
fs.writeFile(tmp, JSON.stringify(data), "utf8", function (er) {
if (er) return done(er)
- fs.rename(tmp, pj, function (er) {
- done(er, data)
+ getStat(function (er, cs) {
+ if (er) return done(er)
+ fs.rename(tmp, pj, function (er) {
+ if (cs.uid && cs.gid) {
+ fs.chown(pj, cs.uid, cs.gid, function (er) {
+ return done(er, data)
+ })
+ } else {
+ done(er, data)
+ }
+ })
})
})
}}
-function maybeFile (spec, cb) {
- // split name@2.3.4 only if name is a valid package name,
- // don't split in case of "./test@example.com/" (local path)
- fs.stat(spec, function (er) {
- if (!er) {
- // definitely a local thing
- return addLocal(spec, {}, cb)
- }
-
- maybeAt(spec, cb)
- })
-}
-
-function maybeAt (spec, cb) {
- if (spec.indexOf("@") !== -1) {
- var tmp = spec.split("@")
-
- var name = tmp.shift()
- spec = tmp.join("@")
- add([name, spec], cb)
- } else {
- // already know it's not a url, so must be local
- addLocal(spec, {}, cb)
- }
-}
-
-function needName(er, data) {
+function needName (er, data) {
return er ? er
: (data && !data.name) ? new Error("No name provided")
: null
}
-function needVersion(er, data) {
+function needVersion (er, data) {
return er ? er
: (data && !data.version) ? new Error("No version provided")
: null
diff --git a/deps/npm/lib/cache/add-local-tarball.js b/deps/npm/lib/cache/add-local-tarball.js
index bcb938fa97..f7cd761037 100644
--- a/deps/npm/lib/cache/add-local-tarball.js
+++ b/deps/npm/lib/cache/add-local-tarball.js
@@ -191,7 +191,15 @@ function addTmpTarball_ (tgz, data, shasum, cb) {
var target = path.resolve(root, "package.tgz")
getCacheStat(function (er, cs) {
if (er) return cb(er)
- mkdir(pkg, function (er) {
+ mkdir(pkg, function (er, created) {
+
+ // chown starting from the first dir created by mkdirp,
+ // or the root dir, if none had to be created, so that
+ // we know that we get all the children.
+ function chown (er) {
+ chownr(created || root, cs.uid, cs.gid, done)
+ }
+
if (er) return cb(er)
var read = fs.createReadStream(tgz)
var write = fs.createWriteStream(target)
@@ -199,9 +207,6 @@ function addTmpTarball_ (tgz, data, shasum, cb) {
read.on("error", cb).pipe(write).on("error", cb).on("close", fin)
})
- function chown () {
- chownr(root, cs.uid, cs.gid, done)
- }
})
function done() {
diff --git a/deps/npm/lib/cache/add-local.js b/deps/npm/lib/cache/add-local.js
index 2a6d8cf884..bedf34bac1 100644
--- a/deps/npm/lib/cache/add-local.js
+++ b/deps/npm/lib/cache/add-local.js
@@ -13,9 +13,7 @@ var fs = require("graceful-fs")
, lock = locker.lock
, unlock = locker.unlock
, getCacheStat = require("./get-stat.js")
- , addNamed = require("./add-named.js")
, addLocalTarball = require("./add-local-tarball.js")
- , maybeGithub = require("./maybe-github.js")
, sha = require("sha")
module.exports = addLocal
@@ -29,16 +27,12 @@ function addLocal (p, pkgData, cb_) {
function cb (er, data) {
unlock(p, function () {
if (er) {
- // if it doesn't have a / in it, it might be a
- // remote thing.
- if (p.indexOf("/") === -1 && p.charAt(0) !== "."
- && (process.platform !== "win32" || p.indexOf("\\") === -1)) {
- return addNamed(p, "", null, cb_)
- }
log.error("addLocal", "Could not install %s", p)
return cb_(er)
}
- if (data && !data._fromGithub) data._from = p
+ if (data && !data._fromGithub) {
+ data._from = path.relative(npm.prefix, p) || "."
+ }
return cb_(er, data)
})
}
@@ -47,14 +41,8 @@ function addLocal (p, pkgData, cb_) {
if (er) return cb(er)
// figure out if this is a folder or file.
fs.stat(p, function (er, s) {
- if (er) {
- // might be username/project
- // in that case, try it as a github url.
- if (p.split("/").length === 2) {
- return maybeGithub(p, er, cb)
- }
- return cb(er)
- }
+ if (er) return cb(er)
+
if (s.isDirectory()) addLocalDirectory(p, pkgData, null, cb)
else addLocalTarball(p, pkgData, null, cb)
})
diff --git a/deps/npm/lib/cache/add-named.js b/deps/npm/lib/cache/add-named.js
index 7137cc9b56..091d43c016 100644
--- a/deps/npm/lib/cache/add-named.js
+++ b/deps/npm/lib/cache/add-named.js
@@ -13,8 +13,8 @@ var path = require("path")
, locker = require("../utils/locker.js")
, lock = locker.lock
, unlock = locker.unlock
- , maybeGithub = require("./maybe-github.js")
, addRemoteTarball = require("./add-remote-tarball.js")
+ , mapToRegistry = require("../utils/map-to-registry.js")
module.exports = addNamed
@@ -48,7 +48,7 @@ function addNamed (name, version, data, cb_) {
})
}
-function addNameTag (name, tag, data, cb_) {
+function addNameTag (name, tag, data, cb) {
log.info("addNameTag", [name, tag])
var explicit = true
if (!tag) {
@@ -56,17 +56,13 @@ function addNameTag (name, tag, data, cb_) {
tag = npm.config.get("tag")
}
- function cb(er, data) {
- // might be username/project
- // in that case, try it as a github url.
- if (er && tag.split("/").length === 2) {
- return maybeGithub(tag, er, cb_)
- }
- return cb_(er, data)
- }
+ mapToRegistry(name, npm.config, function (er, uri) {
+ if (er) return cb(er)
- var uri = url.resolve(npm.config.get("registry"), name)
- registry.get(uri, null, function (er, data, json, resp) {
+ registry.get(uri, null, next)
+ })
+
+ function next (er, data, json, resp) {
if (!er) {
er = errorResponse(name, resp)
}
@@ -83,7 +79,7 @@ function addNameTag (name, tag, data, cb_) {
er = installTargetsError(tag, data)
return cb(er)
- })
+ }
}
function engineFilter (data) {
@@ -114,22 +110,28 @@ function addNameVersion (name, v, data, cb) {
response = null
return next()
}
- var uri = url.resolve(npm.config.get("registry"), name)
- registry.get(uri, null, function (er, d, json, resp) {
+
+ mapToRegistry(name, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, setData)
+ })
+
+ function setData (er, d, json, resp) {
if (!er) {
er = errorResponse(name, resp)
}
if (er) return cb(er)
data = d && d.versions[ver]
if (!data) {
- er = new Error('version not found: ' + name + '@' + ver)
+ er = new Error("version not found: "+name+"@"+ver)
er.package = name
er.statusCode = 404
return cb(er)
}
response = resp
next()
- })
+ }
function next () {
deprCheck(data)
@@ -166,10 +168,9 @@ function addNameVersion (name, v, data, cb) {
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.
+ // 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
@@ -179,8 +180,8 @@ function addNameVersion (name, v, data, cb) {
}
tb = url.format(tb)
- // only add non-shasum'ed packages if --forced.
- // only ancient things would lack this for good reasons nowadays.
+ // 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))
}
@@ -197,15 +198,21 @@ function addNameRange (name, range, data, cb) {
log.silly("addNameRange", {name:name, range:range, hasData:!!data})
if (data) return next()
- var uri = url.resolve(npm.config.get("registry"), name)
- registry.get(uri, null, function (er, d, json, resp) {
+
+ mapToRegistry(name, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, setData)
+ })
+
+ function setData (er, d, json, resp) {
if (!er) {
er = errorResponse(name, resp)
}
if (er) return cb(er)
data = d
next()
- })
+ }
function next () {
log.silly( "addNameRange", "number 2"
diff --git a/deps/npm/lib/cache/add-remote-git.js b/deps/npm/lib/cache/add-remote-git.js
index 7743aa4a45..304d2f3f0e 100644
--- a/deps/npm/lib/cache/add-remote-git.js
+++ b/deps/npm/lib/cache/add-remote-git.js
@@ -8,9 +8,7 @@ var mkdir = require("mkdirp")
, url = require("url")
, chownr = require("chownr")
, zlib = require("zlib")
- , which = require("which")
, crypto = require("crypto")
- , chmodr = require("chmodr")
, npm = require("../npm.js")
, rm = require("../utils/gently-rm.js")
, inflight = require("inflight")
@@ -28,9 +26,8 @@ var mkdir = require("mkdirp")
// 5. git archive /tmp/random.tgz
// 6. addLocalTarball(/tmp/random.tgz) --format=tar --prefix=package/
// silent flag is used if this should error quietly
-module.exports = function addRemoteGit (u, parsed, silent, cb_) {
+module.exports = function addRemoteGit (u, silent, cb_) {
assert(typeof u === "string", "must have git URL")
- assert(typeof parsed === "object", "must have parsed query")
assert(typeof cb_ === "function", "must have callback")
function cb (er, data) {
@@ -41,6 +38,10 @@ module.exports = function addRemoteGit (u, parsed, silent, cb_) {
if (!cb_) return
+ 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://
@@ -62,16 +63,16 @@ module.exports = function addRemoteGit (u, parsed, silent, cb_) {
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
+ v = u.replace(/[^a-zA-Z0-9]+/g, "-")+"-"+v
log.verbose("addRemoteGit", [u, co])
var p = path.join(npm.config.get("cache"), "_git-remotes", v)
checkGitDir(p, u, co, origUrl, silent, function(er, data) {
- chmodr(p, npm.modes.file, function(erChmod) {
+ addModeRecursive(p, npm.modes.file, function(erAddMode) {
if (er) return cb(er, data)
- return cb(erChmod, data)
+ return cb(erAddMode, data)
})
})
})
@@ -181,16 +182,20 @@ function archiveGitRemote (p, u, co, origUrl, cb) {
parsed.hash = stdout
resolved = url.format(parsed)
+ 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
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)
+ log.verbose("resolved git url", resolved)
next()
})
}
@@ -226,8 +231,48 @@ function gitEnv () {
if (gitEnv_) return gitEnv_
gitEnv_ = {}
for (var k in process.env) {
- if (!~['GIT_PROXY_COMMAND','GIT_SSH','GIT_SSL_NO_VERIFY'].indexOf(k) && k.match(/^GIT/)) continue
+ if (!~["GIT_PROXY_COMMAND","GIT_SSH","GIT_SSL_NO_VERIFY"].indexOf(k) && k.match(/^GIT/)) continue
gitEnv_[k] = process.env[k]
}
return gitEnv_
}
+
+// similar to chmodr except it add permissions rather than overwriting them
+// adapted from https://github.com/isaacs/chmodr/blob/master/chmodr.js
+function addModeRecursive(p, mode, cb) {
+ fs.readdir(p, function (er, children) {
+ // Any error other than ENOTDIR means it's not readable, or doesn't exist.
+ // Give up.
+ if (er && er.code !== "ENOTDIR") return cb(er)
+ if (er || !children.length) return addMode(p, mode, cb)
+
+ var len = children.length
+ var errState = null
+ children.forEach(function (child) {
+ addModeRecursive(path.resolve(p, child), mode, then)
+ })
+
+ function then (er) {
+ if (errState) return undefined
+ if (er) return cb(errState = er)
+ if (--len === 0) return addMode(p, dirMode(mode), cb)
+ }
+ })
+}
+
+function addMode(p, mode, cb) {
+ fs.stat(p, function (er, stats) {
+ if (er) return cb(er)
+ mode = stats.mode | mode
+ fs.chmod(p, mode, cb)
+ })
+}
+
+// taken from https://github.com/isaacs/chmodr/blob/master/chmodr.js
+function dirMode(mode) {
+ if (mode & parseInt("0400", 8)) mode |= parseInt("0100", 8)
+ if (mode & parseInt( "040", 8)) mode |= parseInt( "010", 8)
+ if (mode & parseInt( "04", 8)) mode |= parseInt( "01", 8)
+ return mode
+}
+
diff --git a/deps/npm/lib/cache/add-remote-tarball.js b/deps/npm/lib/cache/add-remote-tarball.js
index db9a05d825..2c7d013039 100644
--- a/deps/npm/lib/cache/add-remote-tarball.js
+++ b/deps/npm/lib/cache/add-remote-tarball.js
@@ -4,8 +4,9 @@ var mkdir = require("mkdirp")
, path = require("path")
, sha = require("sha")
, retry = require("retry")
+ , createWriteStream = require("graceful-fs").createWriteStream
, npm = require("../npm.js")
- , fetch = require("../utils/fetch.js")
+ , registry = npm.registry
, inflight = require("inflight")
, locker = require("../utils/locker.js")
, lock = locker.lock
@@ -80,27 +81,39 @@ function addRemoteTarball_(u, tmp, shasum, cb) {
}
function fetchAndShaCheck (u, tmp, shasum, cb) {
- fetch(u, tmp, function (er, response) {
+ registry.fetch(u, null, function (er, response) {
if (er) {
log.error("fetch failed", u)
return cb(er, response)
}
- if (!shasum) {
- // Well, we weren't given a shasum, so at least sha what we have
- // in case we want to compare it to something else later
- return sha.get(tmp, function (er, shasum) {
- cb(er, response, shasum)
- })
- }
+ var tarball = createWriteStream(tmp, { mode : npm.modes.file })
+ tarball.on("error", function (er) {
+ cb(er)
+ tarball.destroy()
+ })
- // validate that the url we just downloaded matches the expected shasum.
- sha.check(tmp, shasum, function (er) {
- if (er && er.message) {
- // add original filename for better debuggability
- er.message = er.message + '\n' + 'From: ' + u
+ tarball.on("finish", function () {
+ if (!shasum) {
+ // Well, we weren't given a shasum, so at least sha what we have
+ // in case we want to compare it to something else later
+ return sha.get(tmp, function (er, shasum) {
+ log.silly("fetchAndShaCheck", "shasum", shasum)
+ cb(er, response, shasum)
+ })
}
- return cb(er, response, shasum)
+
+ // validate that the url we just downloaded matches the expected shasum.
+ log.silly("fetchAndShaCheck", "shasum", shasum)
+ sha.check(tmp, shasum, function (er) {
+ if (er && er.message) {
+ // add original filename for better debuggability
+ er.message = er.message + "\n" + "From: " + u
+ }
+ return cb(er, response, shasum)
+ })
})
+
+ response.pipe(tarball)
})
}
diff --git a/deps/npm/lib/cache/get-stat.js b/deps/npm/lib/cache/get-stat.js
index 913f5af851..372a86d61f 100644
--- a/deps/npm/lib/cache/get-stat.js
+++ b/deps/npm/lib/cache/get-stat.js
@@ -24,7 +24,9 @@ module.exports = function getCacheStat (cb) {
}
function makeCacheDir (cb) {
- if (!process.getuid) return mkdir(npm.cache, cb)
+ if (!process.getuid) return mkdir(npm.cache, function (er) {
+ return cb(er, {})
+ })
var uid = +process.getuid()
, gid = +process.getgid()
diff --git a/deps/npm/lib/cache/maybe-github.js b/deps/npm/lib/cache/maybe-github.js
index fee64c5dfd..5ecdb69155 100644
--- a/deps/npm/lib/cache/maybe-github.js
+++ b/deps/npm/lib/cache/maybe-github.js
@@ -1,29 +1,26 @@
-var url = require("url")
- , assert = require("assert")
+var assert = require("assert")
, log = require("npmlog")
, addRemoteGit = require("./add-remote-git.js")
-module.exports = function maybeGithub (p, er, cb) {
+module.exports = function maybeGithub (p, cb) {
assert(typeof p === "string", "must pass package name")
- assert(er instanceof Error, "must include error")
assert(typeof cb === "function", "must pass callback")
var u = "git://github.com/" + p
- , up = url.parse(u)
log.info("maybeGithub", "Attempting %s from %s", p, u)
- return addRemoteGit(u, up, true, function (er2, data) {
- if (er2) {
+ return addRemoteGit(u, true, function (er, data) {
+ if (er) {
var upriv = "git+ssh://git@github.com:" + p
- , uppriv = url.parse(upriv)
-
log.info("maybeGithub", "Attempting %s from %s", p, upriv)
- return addRemoteGit(upriv, uppriv, false, function (er3, data) {
- if (er3) return cb(er)
+ return addRemoteGit(upriv, false, function (er, data) {
+ if (er) return cb(er)
+
success(upriv, data)
})
}
+
success(u, data)
})
diff --git a/deps/npm/lib/dedupe.js b/deps/npm/lib/dedupe.js
index e6762e15bc..74397d0cb9 100644
--- a/deps/npm/lib/dedupe.js
+++ b/deps/npm/lib/dedupe.js
@@ -7,7 +7,6 @@
// much better "put pkg X at folder Y" abstraction. Oh well,
// whatever. Perfect enemy of the good, and all that.
-var url = require("url")
var fs = require("fs")
var asyncMap = require("slide").asyncMap
var path = require("path")
@@ -16,6 +15,7 @@ var semver = require("semver")
var rm = require("./utils/gently-rm.js")
var log = require("npmlog")
var npm = require("./npm.js")
+var mapToRegistry = require("./utils/map-to-registry.js")
module.exports = dedupe
@@ -61,7 +61,7 @@ function dedupe_ (dir, filter, unavoidable, dryrun, silent, cb) {
Object.keys(obj.children).forEach(function (k) {
U(obj.children[k])
})
- })
+ })(data)
// then collect them up and figure out who needs them
;(function C (obj) {
@@ -240,13 +240,19 @@ function findVersions (npm, summary, cb) {
var versions = data.versions
var ranges = data.ranges
- var uri = url.resolve(npm.config.get("registry"), name)
- npm.registry.get(uri, null, function (er, data) {
+ mapToRegistry(name, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ npm.registry.get(uri, null, next)
+ })
+
+ function next (er, data) {
var regVersions = er ? [] : Object.keys(data.versions)
var locMatch = bestMatch(versions, ranges)
- var regMatch;
var tag = npm.config.get("tag")
var distTag = data["dist-tags"] && data["dist-tags"][tag]
+
+ var regMatch
if (distTag && data.versions[distTag] && matches(distTag, ranges)) {
regMatch = distTag
} else {
@@ -254,7 +260,7 @@ function findVersions (npm, summary, cb) {
}
cb(null, [[name, has, loc, locMatch, regMatch, locs]])
- })
+ }
}, cb)
}
diff --git a/deps/npm/lib/deprecate.js b/deps/npm/lib/deprecate.js
index 175b69ceb1..17dd4eab0c 100644
--- a/deps/npm/lib/deprecate.js
+++ b/deps/npm/lib/deprecate.js
@@ -1,5 +1,6 @@
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
module.exports = deprecate
@@ -8,16 +9,20 @@ deprecate.usage = "npm deprecate [@] "
deprecate.completion = function (opts, cb) {
// first, get a list of remote packages this user owns.
// once we have a user account, then don't complete anything.
- var un = npm.config.get("username")
- if (!npm.config.get("username")) return cb()
if (opts.conf.argv.remain.length > 2) return cb()
// get the list of packages by user
- var path = "/-/by-user/"+encodeURIComponent(un)
- , uri = url.resolve(npm.config.get("registry"), path)
- npm.registry.get(uri, { timeout : 60000 }, function (er, list) {
- if (er) return cb()
- console.error(list)
- return cb(null, list[un])
+ var path = "/-/by-user/"
+ mapToRegistry(path, npm.config, function (er, uri) {
+ 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) {
+ if (er) return cb()
+ console.error(list)
+ return cb(null, list[c.username])
+ })
})
}
@@ -25,11 +30,15 @@ function deprecate (args, cb) {
var pkg = args[0]
, msg = args[1]
if (msg === undefined) return cb("Usage: " + deprecate.usage)
+
// fetch the data and make sure it exists.
- pkg = pkg.split(/@/)
- var name = pkg.shift()
- , ver = pkg.join("@")
- , uri = url.resolve(npm.config.get("registry"), name)
+ var p = npa(pkg)
+
+ mapToRegistry(p.name, npm.config, next)
+
+ function next (er, uri) {
+ if (er) return cb(er)
- npm.registry.deprecate(uri, ver, msg, cb)
+ npm.registry.deprecate(uri, p.spec, msg, cb)
+ }
}
diff --git a/deps/npm/lib/docs.js b/deps/npm/lib/docs.js
index 77073fbb9c..dead3f7551 100644
--- a/deps/npm/lib/docs.js
+++ b/deps/npm/lib/docs.js
@@ -5,18 +5,21 @@ docs.usage += "\n"
docs.usage += "npm docs ."
docs.completion = function (opts, cb) {
- var uri = url_.resolve(npm.config.get("registry"), "/-/short")
- registry.get(uri, { timeout : 60000 }, function (er, list) {
- return cb(null, list || [])
+ 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 url_ = require("url")
- , npm = require("./npm.js")
+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
@@ -38,7 +41,7 @@ function docs (args, cb) {
function getDoc (project, cb) {
project = project || '.'
- var package = path.resolve(process.cwd(), "package.json")
+ var package = path.resolve(npm.localPrefix, "package.json")
if (project === '.' || project === './') {
var json
@@ -54,8 +57,13 @@ function getDoc (project, cb) {
return opener(url(json), { command: npm.config.get("browser") }, cb)
}
- var uri = url_.resolve(npm.config.get("registry"), project + "/latest")
- registry.get(uri, { timeout : 3600 }, function (er, json) {
+ mapToRegistry(project, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri + "/latest", { timeout : 3600 }, next)
+ })
+
+ function next (er, json) {
var github = "https://github.com/" + project + "#readme"
if (er) {
@@ -64,5 +72,5 @@ function getDoc (project, cb) {
}
return opener(url(json), { command: npm.config.get("browser") }, cb)
- })
+ }
}
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index 9d2c2cfa27..82d872525a 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -34,28 +34,34 @@ install.completion = function (opts, cb) {
// if it starts with https?://, then just give up, because it's a url
// for now, not yet implemented.
var registry = npm.registry
- , uri = url.resolve(npm.config.get("registry"), "-/short")
- registry.get(uri, null, function (er, pkgs) {
- if (er) return cb()
- if (!opts.partialWord) return cb(null, pkgs)
+ mapToRegistry("-/short", npm.config, function (er, uri) {
+ if (er) return cb(er)
- var name = opts.partialWord.split("@").shift()
- pkgs = pkgs.filter(function (p) {
- return p.indexOf(name) === 0
- })
+ registry.get(uri, null, function (er, pkgs) {
+ if (er) return cb()
+ if (!opts.partialWord) return cb(null, pkgs)
- if (pkgs.length !== 1 && opts.partialWord === name) {
- return cb(null, pkgs)
- }
+ var name = npa(opts.partialWord).name
+ pkgs = pkgs.filter(function (p) {
+ return p.indexOf(name) === 0
+ })
- uri = url.resolve(npm.config.get("registry"), pkgs[0])
- registry.get(uri, null, function (er, d) {
- if (er) return cb()
- return cb(null, Object.keys(d["dist-tags"] || {})
- .concat(Object.keys(d.versions || {}))
- .map(function (t) {
- return pkgs[0] + "@" + t
- }))
+ if (pkgs.length !== 1 && opts.partialWord === name) {
+ return cb(null, pkgs)
+ }
+
+ mapToRegistry(pkgs[0], npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, function (er, d) {
+ if (er) return cb()
+ return cb(null, Object.keys(d["dist-tags"] || {})
+ .concat(Object.keys(d.versions || {}))
+ .map(function (t) {
+ return pkgs[0] + "@" + t
+ }))
+ })
+ })
})
})
}
@@ -74,9 +80,10 @@ var npm = require("./npm.js")
, mkdir = require("mkdirp")
, lifecycle = require("./utils/lifecycle.js")
, archy = require("archy")
- , isGitUrl = require("./utils/is-git-url.js")
, npmInstallChecks = require("npm-install-checks")
, sortedObject = require("sorted-object")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
function install (args, cb_) {
var hasArguments = !!args.length
@@ -112,7 +119,7 @@ function install (args, cb_) {
where = args
args = [].concat(cb_) // pass in [] to do default dep-install
cb_ = arguments[2]
- log.verbose("install", "where,what", [where, args])
+ log.verbose("install", "where, what", [where, args])
}
if (!npm.config.get("global")) {
@@ -206,7 +213,7 @@ function findPeerInvalid_ (packageMap, fpiList) {
var pkg = packageMap[packageName]
if (pkg.peerInvalid) {
- var peersDepending = {};
+ var peersDepending = {}
for (var peerName in packageMap) {
var peer = packageMap[peerName]
if (peer.peerDependencies && peer.peerDependencies[packageName]) {
@@ -338,21 +345,33 @@ function save (where, installed, tree, pretty, hasArguments, cb) {
return cb(null, installed, tree, pretty)
}
- var saveBundle = npm.config.get('save-bundle')
- var savePrefix = npm.config.get('save-prefix') || "^";
+ var saveBundle = npm.config.get("save-bundle")
+ var savePrefix = npm.config.get("save-prefix") || "^"
// each item in the tree is a top-level thing that should be saved
// to the package.json file.
// The relevant tree shape is { : {what:} }
var saveTarget = path.resolve(where, "package.json")
- , things = Object.keys(tree).map(function (k) {
- // if "what" was a url, then save that instead.
- var t = tree[k]
- , u = url.parse(t.from)
- , w = t.what.split("@")
- if (u && u.protocol) w[1] = t.from
- return w
- }).reduce(function (set, k) {
+
+ asyncMap(Object.keys(tree), function (k, cb) {
+ // if "what" was a url, then save that instead.
+ var t = tree[k]
+ , u = url.parse(t.from)
+ , a = npa(t.what)
+ , w = [a.name, a.spec]
+
+
+ fs.stat(t.from, function (er){
+ if (!er) {
+ w[1] = "file:" + t.from
+ } else if (u && u.protocol) {
+ w[1] = t.from
+ }
+ cb(null, [w])
+ })
+ }
+ , function (er, arr) {
+ var things = arr.reduce(function (set, k) {
var rangeDescriptor = semver.valid(k[1], true) &&
semver.gte(k[1], "0.1.0", true) &&
!npm.config.get("save-exact")
@@ -361,47 +380,49 @@ function save (where, installed, tree, pretty, hasArguments, cb) {
return set
}, {})
- // don't use readJson, because we don't want to do all the other
- // tricky npm-specific stuff that's in there.
- fs.readFile(saveTarget, function (er, data) {
- // ignore errors here, just don't save it.
- try {
- data = JSON.parse(data.toString("utf8"))
- } catch (ex) {
- er = ex
- }
- if (er) {
- return cb(null, installed, tree, pretty)
- }
+ // don't use readJson, because we don't want to do all the other
+ // tricky npm-specific stuff that's in there.
+ fs.readFile(saveTarget, function (er, data) {
+ // ignore errors here, just don't save it.
+ try {
+ data = JSON.parse(data.toString("utf8"))
+ } catch (ex) {
+ er = ex
+ }
- var deps = npm.config.get("save-optional") ? "optionalDependencies"
- : npm.config.get("save-dev") ? "devDependencies"
- : "dependencies"
+ if (er) {
+ return cb(null, installed, tree, pretty)
+ }
- if (saveBundle) {
- var bundle = data.bundleDependencies || data.bundledDependencies
- delete data.bundledDependencies
- if (!Array.isArray(bundle)) bundle = []
- data.bundleDependencies = bundle.sort()
- }
+ var deps = npm.config.get("save-optional") ? "optionalDependencies"
+ : npm.config.get("save-dev") ? "devDependencies"
+ : "dependencies"
- log.verbose('saving', things)
- data[deps] = data[deps] || {}
- Object.keys(things).forEach(function (t) {
- data[deps][t] = things[t]
if (saveBundle) {
- var i = bundle.indexOf(t)
- if (i === -1) bundle.push(t)
+ var bundle = data.bundleDependencies || data.bundledDependencies
+ delete data.bundledDependencies
+ if (!Array.isArray(bundle)) bundle = []
data.bundleDependencies = bundle.sort()
}
- })
- data[deps] = sortedObject(data[deps])
+ log.verbose("saving", things)
+ data[deps] = data[deps] || {}
+ Object.keys(things).forEach(function (t) {
+ data[deps][t] = things[t]
+ if (saveBundle) {
+ var i = bundle.indexOf(t)
+ if (i === -1) bundle.push(t)
+ data.bundleDependencies = bundle.sort()
+ }
+ })
- data = JSON.stringify(data, null, 2) + "\n"
- fs.writeFile(saveTarget, data, function (er) {
- cb(er, installed, tree, pretty)
+ data[deps] = sortedObject(data[deps])
+
+ data = JSON.stringify(data, null, 2) + "\n"
+ fs.writeFile(saveTarget, data, function (er) {
+ cb(er, installed, tree, pretty)
+ })
})
})
}
@@ -412,22 +433,22 @@ function save (where, installed, tree, pretty, hasArguments, cb) {
// that the submodules are not immediately require()able.
// TODO: Show the complete tree, ls-style, but only if --long is provided
function prettify (tree, installed) {
- if (npm.config.get("json")) {
- function red (set, kv) {
- set[kv[0]] = kv[1]
- return set
- }
+ function red (set, kv) {
+ set[kv[0]] = kv[1]
+ return set
+ }
+ if (npm.config.get("json")) {
tree = Object.keys(tree).map(function (p) {
if (!tree[p]) return null
- var what = tree[p].what.split("@")
- , name = what.shift()
- , version = what.join("@")
+ var what = npa(tree[p].what)
+ , name = what.name
+ , version = what.spec
, o = { name: name, version: version, from: tree[p].from }
o.dependencies = tree[p].children.map(function P (dep) {
- var what = dep.what.split("@")
- , name = what.shift()
- , version = what.join("@")
+ var what = npa(dep.what)
+ , name = what.name
+ , version = what.spec
, o = { version: version, from: dep.from }
o.dependencies = dep.children.map(P).reduce(red, {})
return [name, o]
@@ -615,60 +636,70 @@ function installMany (what, where, context, cb) {
}
function targetResolver (where, context, deps) {
- var alreadyInstalledManually = context.explicit ? [] : null
+ var alreadyInstalledManually = []
+ , resolveLeft = 0
, nm = path.resolve(where, "node_modules")
, parent = context.parent
, wrap = context.wrap
- if (!context.explicit) fs.readdir(nm, function (er, inst) {
- if (er) return alreadyInstalledManually = []
+ if (!context.explicit) readdir(nm)
- // don't even mess with non-package looking things
- inst = inst.filter(function (p) {
- return !p.match(/^[\._-]/)
- })
+ function readdir(name) {
+ resolveLeft++
+ fs.readdir(name, function (er, inst) {
+ if (er) return resolveLeft--
- asyncMap(inst, function (pkg, cb) {
- readJson(path.resolve(nm, pkg, "package.json"), log.warn, function (er, d) {
- if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
- // error means it's not a package, most likely.
- if (er) return cb(null, [])
-
- // if it's a bundled dep, then assume that anything there is valid.
- // otherwise, make sure that it's a semver match with what we want.
- var bd = parent.bundleDependencies
- if (bd && bd.indexOf(d.name) !== -1 ||
- semver.satisfies(d.version, deps[d.name] || "*", true) ||
- deps[d.name] === d._resolved) {
- return cb(null, d.name)
- }
+ // don't even mess with non-package looking things
+ inst = inst.filter(function (p) {
+ if (!p.match(/^[@\._-]/)) return true
+ // scope pacakges
+ var scopepath = path.join(name, p)
+ readdir(scopepath)
+ })
- // see if the package had been previously linked
- fs.lstat(path.resolve(nm, pkg), function(err, s) {
- if (err) return cb(null, [])
- if (s.isSymbolicLink()) {
+ asyncMap(inst, function (pkg, cb) {
+ readJson(path.resolve(name, pkg, "package.json"), log.warn, function (er, d) {
+ if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
+ // error means it's not a package, most likely.
+ if (er) return cb(null, [])
+
+ // if it's a bundled dep, then assume that anything there is valid.
+ // otherwise, make sure that it's a semver match with what we want.
+ var bd = parent.bundleDependencies
+ if (bd && bd.indexOf(d.name) !== -1 ||
+ semver.satisfies(d.version, deps[d.name] || "*", true) ||
+ deps[d.name] === d._resolved) {
return cb(null, d.name)
}
- // something is there, but it's not satisfactory. Clobber it.
- return cb(null, [])
+ // see if the package had been previously linked
+ fs.lstat(path.resolve(nm, pkg), function(err, s) {
+ if (err) return cb(null, [])
+ if (s.isSymbolicLink()) {
+ return cb(null, d.name)
+ }
+
+ // something is there, but it's not satisfactory. Clobber it.
+ return cb(null, [])
+ })
})
+ }, function (er, inst) {
+ // this is the list of things that are valid and should be ignored.
+ alreadyInstalledManually = alreadyInstalledManually.concat(inst)
+ resolveLeft--
})
- }, function (er, inst) {
- // this is the list of things that are valid and should be ignored.
- alreadyInstalledManually = inst
})
- })
+ }
var to = 0
return function resolver (what, cb) {
- if (!alreadyInstalledManually) return setTimeout(function () {
+ if (resolveLeft) return setTimeout(function () {
resolver(what, cb)
}, to++)
// now we know what's been installed here manually,
// or tampered with in some way that npm doesn't want to overwrite.
- if (alreadyInstalledManually.indexOf(what.split("@").shift()) !== -1) {
+ if (alreadyInstalledManually.indexOf(npa(what).name) !== -1) {
log.verbose("already installed", "skipping %s %s", what, where)
return cb(null, [])
}
@@ -692,7 +723,7 @@ function targetResolver (where, context, deps) {
}
if (wrap) {
- var name = what.split(/@/).shift()
+ var name = npa(what).name
if (wrap[name]) {
var wrapTarget = readWrap(wrap[name])
what = name + "@" + wrapTarget
@@ -709,19 +740,16 @@ function targetResolver (where, context, deps) {
// already has a matching copy.
// If it's not a git repo, and the parent already has that pkg, then
// we can skip installing it again.
- cache.add(what, null, false, function (er, data) {
+ var pkgroot = path.resolve(npm.prefix, (parent && parent._from) || "")
+ cache.add(what, null, pkgroot, false, function (er, data) {
if (er && parent && parent.optionalDependencies &&
- parent.optionalDependencies.hasOwnProperty(what.split("@")[0])) {
+ parent.optionalDependencies.hasOwnProperty(npa(what).name)) {
log.warn("optional dep failed, continuing", what)
log.verbose("optional dep failed, continuing", [what, er])
return cb(null, [])
}
- var isGit = false
- , maybeGit = what.split("@").slice(1).join()
-
- if (maybeGit)
- isGit = isGitUrl(url.parse(maybeGit))
+ var isGit = npa(what).type === "git"
if (!er &&
data &&
@@ -733,6 +761,7 @@ function targetResolver (where, context, deps) {
return cb(null, [])
}
+
if (data && !data._from) data._from = what
if (er && parent && parent.name) er.parent = parent.name
return cb(er, data || [])
@@ -771,6 +800,13 @@ function localLink (target, where, context, cb) {
, parent = context.parent
readJson(jsonFile, log.warn, function (er, data) {
+ function thenLink () {
+ npm.commands.link([target.name], function (er, d) {
+ log.silly("localLink", "back from link", [er, d])
+ cb(er, [resultList(target, where, parent && parent._id)])
+ })
+ }
+
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
if (er || data._id === target._id) {
if (er) {
@@ -781,14 +817,6 @@ function localLink (target, where, context, cb) {
thenLink()
})
} else thenLink()
-
- function thenLink () {
- npm.commands.link([target.name], function (er, d) {
- log.silly("localLink", "back from link", [er, d])
- cb(er, [resultList(target, where, parent && parent._id)])
- })
- }
-
} else {
log.verbose("localLink", "install locally (no link)", target._id)
installOne_(target, where, context, cb)
diff --git a/deps/npm/lib/link.js b/deps/npm/lib/link.js
index 8022fc78df..8c6a930290 100644
--- a/deps/npm/lib/link.js
+++ b/deps/npm/lib/link.js
@@ -10,6 +10,7 @@ var npm = require("./npm.js")
, path = require("path")
, rm = require("./utils/gently-rm.js")
, build = require("./build.js")
+ , npa = require("npm-package-arg")
module.exports = link
@@ -49,25 +50,26 @@ function link (args, cb) {
function linkInstall (pkgs, cb) {
asyncMap(pkgs, function (pkg, cb) {
+ var t = path.resolve(npm.globalDir, "..")
+ , pp = path.resolve(npm.globalDir, pkg)
+ , rp = null
+ , target = path.resolve(npm.dir, pkg)
+
function n (er, data) {
if (er) return cb(er, data)
// install returns [ [folder, pkgId], ... ]
// but we definitely installed just one thing.
var d = data.filter(function (d) { return !d[3] })
+ var what = npa(d[0][0])
pp = d[0][1]
- pkg = path.basename(pp)
+ pkg = what.name
target = path.resolve(npm.dir, pkg)
next()
}
- var t = path.resolve(npm.globalDir, "..")
- , pp = path.resolve(npm.globalDir, pkg)
- , rp = null
- , target = path.resolve(npm.dir, pkg)
-
- // if it's a folder or a random not-installed thing, then
- // link or install it first
- if (pkg.indexOf("/") !== -1 || pkg.indexOf("\\") !== -1) {
+ // if it's a folder, a random not-installed thing, or not a scoped package,
+ // then link or install it first
+ if (pkg[0] !== "@" && (pkg.indexOf("/") !== -1 || pkg.indexOf("\\") !== -1)) {
return fs.lstat(path.resolve(pkg), function (er, st) {
if (er || !st.isDirectory()) {
npm.commands.install(t, pkg, n)
diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js
index 781b6443b9..ed329d19e1 100644
--- a/deps/npm/lib/ls.js
+++ b/deps/npm/lib/ls.js
@@ -14,8 +14,8 @@ var npm = require("./npm.js")
, archy = require("archy")
, semver = require("semver")
, url = require("url")
- , isGitUrl = require("./utils/is-git-url.js")
, color = require("ansicolors")
+ , npa = require("npm-package-arg")
ls.usage = "npm ls"
@@ -29,9 +29,9 @@ function ls (args, silent, cb) {
// npm ls 'foo@~1.3' bar 'baz@<2'
if (!args) args = []
else args = args.map(function (a) {
- var nv = a.split("@")
- , name = nv.shift()
- , ver = semver.validRange(nv.join("@")) || ""
+ var p = npa(a)
+ , name = p.name
+ , ver = semver.validRange(p.rawSpec) || ""
return [ name, ver ]
})
@@ -39,6 +39,7 @@ function ls (args, silent, cb) {
var depth = npm.config.get("depth")
var opt = { depth: depth, log: log.warn, dev: true }
readInstalled(dir, opt, function (er, data) {
+ pruneNestedExtraneous(data)
var bfs = bfsify(data, args)
, lite = getLite(bfs)
@@ -75,6 +76,18 @@ function ls (args, silent, cb) {
})
}
+function pruneNestedExtraneous (data, visited) {
+ visited = visited || []
+ visited.push(data)
+ for (var i in data.dependencies) {
+ if (data.dependencies[i].extraneous) {
+ data.dependencies[i].dependencies = {}
+ } else if (visited.indexOf(data.dependencies[i]) === -1) {
+ pruneNestedExtraneous(data.dependencies[i], visited)
+ }
+ }
+}
+
function alphasort (a, b) {
a = a.toLowerCase()
b = b.toLowerCase()
@@ -265,7 +278,7 @@ function makeArchy_ (data, long, dir, depth, parent, d) {
// add giturl to name@version
if (data._resolved) {
- if (isGitUrl(url.parse(data._resolved)))
+ if (npa(data._resolved).type === "git")
out.label += " (" + data._resolved + ")"
}
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index 3139b1d145..c811be5a96 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -46,16 +46,6 @@ try {
var j = JSON.parse(fs.readFileSync(
path.join(__dirname, "../package.json"))+"")
npm.version = j.version
- npm.nodeVersionRequired = j.engines.node
- if (!semver.satisfies(pv, j.engines.node)) {
- log.warn("unsupported version", [""
- ,"npm requires node version: "+j.engines.node
- ,"And you have: "+pv
- ,"which is not satisfactory."
- ,""
- ,"Bad things will likely happen. You have been warned."
- ,""].join("\n"))
- }
} catch (ex) {
try {
log.info("error reading version", ex)
@@ -153,6 +143,7 @@ var commandCache = {}
]
, plumbing = [ "build"
, "unbuild"
+ , "isntall"
, "xmas"
, "substack"
, "visnup"
diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js
index a71df7fe76..fdfd7624db 100644
--- a/deps/npm/lib/outdated.js
+++ b/deps/npm/lib/outdated.js
@@ -28,12 +28,13 @@ var path = require("path")
, asyncMap = require("slide").asyncMap
, npm = require("./npm.js")
, url = require("url")
- , isGitUrl = require("./utils/is-git-url.js")
, color = require("ansicolors")
, styles = require("ansistyles")
, table = require("text-table")
, semver = require("semver")
, os = require("os")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
function outdated (args, silent, cb) {
if (typeof cb !== "function") cb = silent, silent = false
@@ -43,7 +44,7 @@ function outdated (args, silent, cb) {
if (npm.config.get("json")) {
console.log(makeJSON(list))
} else if (npm.config.get("parseable")) {
- console.log(makeParseable(list));
+ console.log(makeParseable(list))
} else {
var outList = list.map(makePretty)
var outTable = [[ "Package"
@@ -99,7 +100,7 @@ function makePretty (p) {
function ansiTrim (str) {
var r = new RegExp("\x1b(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|" +
- "\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)", "g");
+ "\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)", "g")
return str.replace(r, "")
}
@@ -114,7 +115,7 @@ function makeParseable (list) {
, dir = path.resolve(p[0], "node_modules", dep)
, has = p[2]
, want = p[3]
- , latest = p[4];
+ , latest = p[4]
return [ dir
, dep + "@" + want
@@ -264,20 +265,25 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb) {
return skip()
}
- if (isGitUrl(url.parse(req)))
+ if (npa(req).type === "git")
return doIt("git", "git")
// search for the latest package
- var uri = url.resolve(npm.config.get("registry"), dep)
- npm.registry.get(uri, null, function (er, d) {
+ mapToRegistry(dep, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ npm.registry.get(uri, null, updateDeps)
+ })
+
+ function updateDeps (er, d) {
if (er) return cb()
- if (!d || !d['dist-tags'] || !d.versions) return cb()
- var l = d.versions[d['dist-tags'].latest]
+ if (!d || !d["dist-tags"] || !d.versions) return cb()
+ var l = d.versions[d["dist-tags"].latest]
if (!l) return cb()
var r = req
- if (d['dist-tags'][req])
- r = d['dist-tags'][req]
+ if (d["dist-tags"][req])
+ r = d["dist-tags"][req]
if (semver.validRange(r, true)) {
// some kind of semver range.
@@ -290,13 +296,13 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb) {
}
// We didn't find the version in the doc. See if cache can find it.
- cache.add(dep, req, false, onCacheAdd)
+ cache.add(dep, req, null, false, onCacheAdd)
function onCacheAdd(er, d) {
// if this fails, then it means we can't update this thing.
// it's probably a thing that isn't published.
if (er) {
- if (er.code && er.code === 'ETARGET') {
+ if (er.code && er.code === "ETARGET") {
// no viable version found
return skip(er)
}
@@ -315,6 +321,5 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb) {
else
skip()
}
-
- })
+ }
}
diff --git a/deps/npm/lib/owner.js b/deps/npm/lib/owner.js
index 34dbbc2472..2fdee7adb6 100644
--- a/deps/npm/lib/owner.js
+++ b/deps/npm/lib/owner.js
@@ -5,6 +5,12 @@ owner.usage = "npm owner add "
+ "\nnpm owner rm "
+ "\nnpm owner ls "
+var npm = require("./npm.js")
+ , registry = npm.registry
+ , log = require("npmlog")
+ , readJson = require("read-package-json")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+
owner.completion = function (opts, cb) {
var argv = opts.conf.argv.remain
if (argv.length > 4) return cb()
@@ -14,65 +20,78 @@ owner.completion = function (opts, cb) {
else subs.push("ls", "list")
return cb(null, subs)
}
- var un = encodeURIComponent(npm.config.get("username"))
- var theUser, uri
- switch (argv[2]) {
- case "ls":
- if (argv.length > 3) return cb()
- uri = url.resolve(npm.config.get("registry"), "-/short")
- return registry.get(uri, null, cb)
-
- case "rm":
- if (argv.length > 3) {
- theUser = encodeURIComponent(argv[3])
- uri = url.resolve(npm.config.get("registry"), "-/by-user/"+theUser+"|"+un)
- console.error(uri)
- return registry.get(uri, null, function (er, d) {
+
+ npm.commands.whoami([], true, function (er, username) {
+ if (er) return cb()
+
+ var un = encodeURIComponent(username)
+ var byUser, theUser
+ switch (argv[2]) {
+ case "ls":
+ if (argv.length > 3) return cb()
+ return mapToRegistry("-/short", npm.config, function (er, uri) {
if (er) return cb(er)
- // return the intersection
- return cb(null, d[theUser].filter(function (p) {
- // kludge for server adminery.
- return un === "isaacs" || d[un].indexOf(p) === -1
- }))
+
+ registry.get(uri, null, cb)
})
- }
- // else fallthrough
- case "add":
- if (argv.length > 3) {
- theUser = encodeURIComponent(argv[3])
- uri = url.resolve(npm.config.get("registry"), "-/by-user/"+theUser+"|"+un)
- console.error(uri)
- return registry.get(uri, null, function (er, d) {
- console.error(uri, er || d)
- // return mine that they're not already on.
+
+ case "rm":
+ if (argv.length > 3) {
+ theUser = encodeURIComponent(argv[3])
+ byUser = "-/by-user/" + theUser + "|" + un
+ return mapToRegistry(byUser, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ console.error(uri)
+ registry.get(uri, null, function (er, d) {
+ if (er) return cb(er)
+ // return the intersection
+ return cb(null, d[theUser].filter(function (p) {
+ // kludge for server adminery.
+ return un === "isaacs" || d[un].indexOf(p) === -1
+ }))
+ })
+ })
+ }
+ // else fallthrough
+ case "add":
+ if (argv.length > 3) {
+ theUser = encodeURIComponent(argv[3])
+ byUser = "-/by-user/" + theUser + "|" + un
+ return mapToRegistry(byUser, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ console.error(uri)
+ registry.get(uri, null, function (er, d) {
+ console.error(uri, er || d)
+ // return mine that they're not already on.
+ if (er) return cb(er)
+ var mine = d[un] || []
+ , theirs = d[theUser] || []
+ return cb(null, mine.filter(function (p) {
+ return theirs.indexOf(p) === -1
+ }))
+ })
+ })
+ }
+ // just list all users who aren't me.
+ return mapToRegistry("-/users", npm.config, function (er, uri) {
if (er) return cb(er)
- var mine = d[un] || []
- , theirs = d[theUser] || []
- return cb(null, mine.filter(function (p) {
- return theirs.indexOf(p) === -1
- }))
+
+ registry.get(uri, null, function (er, list) {
+ if (er) return cb()
+ return cb(null, Object.keys(list).filter(function (n) {
+ return n !== un
+ }))
+ })
})
- }
- // just list all users who aren't me.
- uri = url.resolve(npm.config.get("registry"), "-/users")
- return registry.get(uri, null, function (er, list) {
- if (er) return cb()
- return cb(null, Object.keys(list).filter(function (n) {
- return n !== un
- }))
- })
- default:
- return cb()
- }
+ default:
+ return cb()
+ }
+ })
}
-var npm = require("./npm.js")
- , registry = npm.registry
- , log = require("npmlog")
- , readJson = require("read-package-json")
- , url = require("url")
-
function owner (args, cb) {
var action = args.shift()
switch (action) {
@@ -90,18 +109,23 @@ function ls (pkg, cb) {
ls(pkg, cb)
})
- var uri = url.resolve(npm.config.get("registry"), pkg)
- registry.get(uri, null, function (er, data) {
- var msg = ""
- if (er) {
- log.error("owner ls", "Couldn't get owner data", pkg)
- return cb(er)
- }
- var owners = data.maintainers
- if (!owners || !owners.length) msg = "admin party!"
- else msg = owners.map(function (o) { return o.name +" <"+o.email+">" }).join("\n")
- console.log(msg)
- cb(er, owners)
+ mapToRegistry(pkg, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, function (er, data) {
+ var msg = ""
+ if (er) {
+ log.error("owner ls", "Couldn't get owner data", pkg)
+ return cb(er)
+ }
+ var owners = data.maintainers
+ if (!owners || !owners.length) msg = "admin party!"
+ else msg = owners.map(function (o) {
+ return o.name + " <" + o.email + ">"
+ }).join("\n")
+ console.log(msg)
+ cb(er, owners)
+ })
})
}
@@ -120,7 +144,7 @@ function add (user, pkg, cb) {
var o = owners[i]
if (o.name === u.name) {
log.info( "owner add"
- , "Already a package owner: "+o.name+" <"+o.email+">")
+ , "Already a package owner: " + o.name + " <" + o.email + ">")
return false
}
}
@@ -145,7 +169,7 @@ function rm (user, pkg, cb) {
return !match
})
if (!found) {
- log.info("owner rm", "Not a package owner: "+user)
+ log.info("owner rm", "Not a package owner: " + user)
return false
}
if (!m.length) return new Error(
@@ -156,15 +180,19 @@ function rm (user, pkg, cb) {
function mutate (pkg, user, mutation, cb) {
if (user) {
- var uri = url.resolve(npm.config.get("registry"), "-/user/org.couchdb.user:"+user)
- registry.get(uri, null, mutate_)
+ var byUser = "-/user/org.couchdb.user:" + user
+ mapToRegistry(byUser, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, mutate_)
+ })
} else {
mutate_(null, null)
}
function mutate_ (er, u) {
if (!er && user && (!u || u.error)) er = new Error(
- "Couldn't get user data for "+user+": "+JSON.stringify(u))
+ "Couldn't get user data for " + user + ": " + JSON.stringify(u))
if (er) {
log.error("owner mutate", "Error getting user data for %s", user)
@@ -172,27 +200,34 @@ function mutate (pkg, user, mutation, cb) {
}
if (u) u = { "name" : u.name, "email" : u.email }
- var uri = url.resolve(npm.config.get("registry"), pkg)
- registry.get(uri, null, function (er, data) {
- if (er) {
- log.error("owner mutate", "Error getting package data for %s", pkg)
- return cb(er)
- }
- 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 uri = url.resolve(npm.config.get("registry"), pkg+"/-rev/"+data._rev)
- registry.request("PUT", uri, { body : data }, function (er, data) {
- if (!er && data.error) er = new Error(
- "Failed to update package metadata: "+JSON.stringify(data))
+ mapToRegistry(pkg, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, function (er, data) {
if (er) {
- log.error("owner mutate", "Failed to update package metadata")
+ log.error("owner mutate", "Error getting package data for %s", pkg)
+ return cb(er)
}
- cb(er, data)
+ 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) {
+ 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))
+ if (er) {
+ log.error("owner mutate", "Failed to update package metadata")
+ }
+ cb(er, data)
+ })
+ })
})
})
}
@@ -207,5 +242,5 @@ function readLocalPkg (cb) {
}
function unknown (action, cb) {
- cb("Usage: \n"+owner.usage)
+ cb("Usage: \n" + owner.usage)
}
diff --git a/deps/npm/lib/pack.js b/deps/npm/lib/pack.js
index ea94dd1542..f955cb71a8 100644
--- a/deps/npm/lib/pack.js
+++ b/deps/npm/lib/pack.js
@@ -40,9 +40,14 @@ function printFiles (files, cb) {
// add to cache, then cp to the cwd
function pack_ (pkg, cb) {
- cache.add(pkg, null, false, function (er, data) {
+ cache.add(pkg, null, null, false, function (er, data) {
if (er) return cb(er)
- var fname = path.resolve(data._id.replace(/@/g, "-") + ".tgz")
+
+ var name = data.name
+ // scoped packages get special treatment
+ if (name[0] === "@") name = name.substr(1).replace(/\//g, "-")
+
+ var fname = name + "-" + data.version + ".tgz"
, cached = path.resolve( npm.cache
, data.name
, data.version
diff --git a/deps/npm/lib/publish.js b/deps/npm/lib/publish.js
index ccad3ea827..701dc2b92e 100644
--- a/deps/npm/lib/publish.js
+++ b/deps/npm/lib/publish.js
@@ -1,7 +1,8 @@
module.exports = publish
-var npm = require("./npm.js")
+var url = require("url")
+ , npm = require("./npm.js")
, log = require("npmlog")
, path = require("path")
, readJson = require("read-package-json")
@@ -9,6 +10,7 @@ var npm = require("./npm.js")
, chain = require("slide").chain
, Conf = require("npmconf").Conf
, RegClient = require("npm-registry-client")
+ , mapToRegistry = require("./utils/map-to-registry.js")
publish.usage = "npm publish "
+ "\nnpm publish "
@@ -22,7 +24,10 @@ publish.completion = function (opts, cb) {
}
function publish (args, isRetry, cb) {
- if (typeof cb !== "function") cb = isRetry, isRetry = false
+ if (typeof cb !== "function") {
+ cb = isRetry
+ isRetry = false
+ }
if (args.length === 0) args = ["."]
if (args.length !== 1) return cb(publish.usage)
@@ -47,15 +52,15 @@ function publish (args, isRetry, cb) {
// That means that we can run publish/postpublish in the dir, rather than
// in the cache dir.
function cacheAddPublish (dir, didPre, isRetry, cb) {
- npm.commands.cache.add(dir, null, false, function (er, data) {
+ npm.commands.cache.add(dir, null, null, false, function (er, data) {
if (er) return cb(er)
log.silly("publish", data)
var cachedir = path.resolve( npm.cache
, data.name
, data.version
, "package" )
- chain
- ( [ !didPre && [lifecycle, data, "prepublish", cachedir]
+ chain([ !didPre &&
+ [lifecycle, data, "prepublish", cachedir]
, [publish_, dir, data, isRetry, cachedir]
, [lifecycle, data, "publish", didPre ? dir : cachedir]
, [lifecycle, data, "postpublish", didPre ? dir : cachedir] ]
@@ -66,48 +71,61 @@ function cacheAddPublish (dir, didPre, isRetry, cb) {
function publish_ (arg, data, isRetry, cachedir, cb) {
if (!data) return cb(new Error("no package.json file found"))
- // check for publishConfig hash
var registry = npm.registry
- var registryURI = npm.config.get("registry")
+ var config = npm.config
+
+ // check for publishConfig hash
if (data.publishConfig) {
- var pubConf = new Conf(npm.config)
- pubConf.save = npm.config.save.bind(npm.config)
+ config = new Conf(npm.config)
+ config.save = npm.config.save.bind(npm.config)
// don't modify the actual publishConfig object, in case we have
// to set a login token or some other data.
- pubConf.unshift(Object.keys(data.publishConfig).reduce(function (s, k) {
+ config.unshift(Object.keys(data.publishConfig).reduce(function (s, k) {
s[k] = data.publishConfig[k]
return s
}, {}))
- registry = new RegClient(pubConf)
- registryURI = pubConf.get("registry")
+ registry = new RegClient(config)
}
data._npmVersion = npm.version
- data._npmUser = { name: npm.config.get("username")
- , email: npm.config.get("email") }
delete data.modules
- if (data.private) return cb(new Error
- ("This package has been marked as private\n"
- +"Remove the 'private' field from the package.json to publish it."))
-
- var tarball = cachedir + ".tgz"
- registry.publish(registryURI, data, tarball, 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.
- // but if it fails again, then report the first error.
- publish([arg], er || true, cb)
- })
- }
- // report the unpublish error if this was a retry and unpublish failed
- if (er && isRetry && isRetry !== true) return cb(isRetry)
+ if (data.private) return cb(
+ new Error(
+ "This package has been marked as private\n" +
+ "Remove the 'private' field from the package.json to publish it."
+ )
+ )
+
+ mapToRegistry(data.name, config, function (er, registryURI) {
if (er) return cb(er)
- console.log("+ " + data._id)
- cb()
+
+ var tarball = cachedir + ".tgz"
+
+ // we just want the base registry URL in this case
+ var registryBase = url.resolve(registryURI, ".")
+ log.verbose("publish", "registryBase", registryBase)
+
+ var c = config.getCredentialsByURI(registryBase)
+ data._npmUser = {name: c.username, email: c.email}
+
+ registry.publish(registryBase, data, tarball, 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.
+ // but if it fails again, then report the first error.
+ publish([arg], er || true, cb)
+ })
+ }
+ // report the unpublish error if this was a retry and unpublish failed
+ if (er && isRetry && isRetry !== true) return cb(isRetry)
+ if (er) return cb(er)
+ console.log("+ " + data._id)
+ cb()
+ })
})
}
diff --git a/deps/npm/lib/rebuild.js b/deps/npm/lib/rebuild.js
index e296451b70..ab372c6ec0 100644
--- a/deps/npm/lib/rebuild.js
+++ b/deps/npm/lib/rebuild.js
@@ -5,6 +5,7 @@ var readInstalled = require("read-installed")
, semver = require("semver")
, log = require("npmlog")
, npm = require("./npm.js")
+ , npa = require("npm-package-arg")
rebuild.usage = "npm rebuild [[@] [name[@] ...]]"
@@ -46,9 +47,9 @@ function filter (data, args, set, seen) {
else if (data.name && data._id) {
for (var i = 0, l = args.length; i < l; i ++) {
var arg = args[i]
- , nv = arg.split("@")
- , n = nv.shift()
- , v = nv.join("@")
+ , nv = npa(arg)
+ , n = nv.name
+ , v = nv.rawSpec
if (n !== data.name) continue
if (!semver.satisfies(data.version, v, true)) continue
pass = true
diff --git a/deps/npm/lib/repo.js b/deps/npm/lib/repo.js
index d209c3ca83..c6db8e37b0 100644
--- a/deps/npm/lib/repo.js
+++ b/deps/npm/lib/repo.js
@@ -5,9 +5,12 @@ repo.usage = "npm repo "
repo.completion = function (opts, cb) {
if (opts.conf.argv.remain.length > 2) return cb()
- var uri = url_.resolve(npm.config.get("registry"), "/-/short")
- registry.get(uri, { timeout : 60000 }, function (er, list) {
- return cb(null, list || [])
+ mapToRegistry("/-/short", npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, { timeout : 60000 }, function (er, list) {
+ return cb(null, list || [])
+ })
})
}
@@ -19,10 +22,12 @@ var npm = require("./npm.js")
, path = require("path")
, readJson = require("read-package-json")
, fs = require("fs")
- , url_ = require('url')
+ , url_ = require("url")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
function repo (args, cb) {
- var n = args.length && args[0].split("@").shift() || '.'
+ 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)
@@ -35,8 +40,8 @@ function repo (args, cb) {
}
function getUrlAndOpen (d, cb) {
- var r = d.repository;
- if (!r) return cb(new Error('no repository'));
+ var r = d.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))
@@ -52,10 +57,13 @@ function getUrlAndOpen (d, cb) {
}
function callRegistry (n, cb) {
- var uri = url_.resolve(npm.config.get("registry"), n + "/latest")
- registry.get(uri, { timeout : 3600 }, function (er, d) {
+ mapToRegistry(n, npm.config, function (er, uri) {
if (er) return cb(er)
- getUrlAndOpen(d, cb)
+
+ registry.get(uri + "/latest", { timeout : 3600 }, function (er, d) {
+ if (er) return cb(er)
+ getUrlAndOpen(d, cb)
+ })
})
}
diff --git a/deps/npm/lib/run-script.js b/deps/npm/lib/run-script.js
index 25e98f01d6..6cb7bf7fb9 100644
--- a/deps/npm/lib/run-script.js
+++ b/deps/npm/lib/run-script.js
@@ -8,7 +8,7 @@ var lifecycle = require("./utils/lifecycle.js")
, log = require("npmlog")
, chain = require("slide").chain
-runScript.usage = "npm run-script [] "
+runScript.usage = "npm run-script [-- ]"
runScript.completion = function (opts, cb) {
@@ -21,7 +21,7 @@ runScript.completion = function (opts, cb) {
if (argv.length === 3) {
// either specified a script locally, in which case, done,
// or a package, in which case, complete against its scripts
- var json = path.join(npm.prefix, "package.json")
+ var json = path.join(npm.localPrefix, "package.json")
return readJson(json, function (er, d) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
if (er) d = {}
@@ -30,7 +30,7 @@ runScript.completion = function (opts, cb) {
if (scripts.indexOf(argv[2]) !== -1) return cb()
// ok, try to find out which package it was, then
var pref = npm.config.get("global") ? npm.config.get("prefix")
- : npm.prefix
+ : npm.localPrefix
var pkgDir = path.resolve( pref, "node_modules"
, argv[2], "package.json" )
readJson(pkgDir, function (er, d) {
@@ -54,7 +54,7 @@ runScript.completion = function (opts, cb) {
})
if (npm.config.get("global")) scripts = [], next()
- else readJson(path.join(npm.prefix, "package.json"), function (er, d) {
+ else readJson(path.join(npm.localPrefix, "package.json"), function (er, d) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
d = d || {}
scripts = Object.keys(d.scripts || {})
@@ -69,18 +69,18 @@ runScript.completion = function (opts, cb) {
function runScript (args, cb) {
if (!args.length) return list(cb)
- var pkgdir = args.length === 1 ? process.cwd()
- : path.resolve(npm.dir, args[0])
- , cmd = args.pop()
+
+ var pkgdir = npm.localPrefix
+ , cmd = args.shift()
readJson(path.resolve(pkgdir, "package.json"), function (er, d) {
if (er) return cb(er)
- run(d, pkgdir, cmd, cb)
+ run(d, pkgdir, cmd, args, cb)
})
}
function list(cb) {
- var json = path.join(npm.prefix, 'package.json')
+ var json = path.join(npm.localPrefix, 'package.json')
return readJson(json, function(er, d) {
if (er && er.code !== 'ENOENT' && er.code !== 'ENOTDIR') return cb(er)
if (er) d = {}
@@ -109,7 +109,7 @@ function list(cb) {
})
}
-function run (pkg, wd, cmd, cb) {
+function run (pkg, wd, cmd, args, cb) {
var cmds = []
if (!pkg.scripts) pkg.scripts = {}
if (cmd === "restart") {
@@ -124,7 +124,21 @@ function run (pkg, wd, cmd, cb) {
}
log.verbose("run-script", cmds)
chain(cmds.map(function (c) {
+ // pass cli arguments after -- to script.
+ if (pkg.scripts[c]) pkg.scripts[c] = pkg.scripts[c] + joinArgs(args)
+
// when running scripts explicitly, assume that they're trusted.
return [lifecycle, pkg, c, wd, true]
}), cb)
}
+
+// join arguments after '--' and pass them to script,
+// handle special characters such as ', ", ' '.
+function joinArgs (args) {
+ var joinedArgs = ''
+ args.forEach(function(arg, i) {
+ if (arg.match(/[ '"]/)) arg = '"' + arg.replace(/"/g, '\\"') + '"'
+ joinedArgs += ' ' + arg
+ })
+ return joinedArgs
+}
diff --git a/deps/npm/lib/search.js b/deps/npm/lib/search.js
index e7892350ca..3be8b0d27d 100644
--- a/deps/npm/lib/search.js
+++ b/deps/npm/lib/search.js
@@ -1,10 +1,10 @@
module.exports = exports = search
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, registry = npm.registry
, columnify = require('columnify')
+ , mapToRegistry = require("./utils/map-to-registry.js")
search.usage = "npm search [some search terms ...]"
@@ -63,10 +63,13 @@ function getFilteredData (staleness, args, notArgs, cb) {
follow : true,
staleOk : true
}
- var uri = url.resolve(npm.config.get("registry"), "-/all")
- registry.get(uri, opts, function (er, data) {
+ mapToRegistry("-/all", npm.config, function (er, uri) {
if (er) return cb(er)
- return cb(null, filter(data, args, notArgs))
+
+ registry.get(uri, opts, function (er, data) {
+ if (er) return cb(er)
+ return cb(null, filter(data, args, notArgs))
+ })
})
}
diff --git a/deps/npm/lib/star.js b/deps/npm/lib/star.js
index 9c0b4ea9ed..123c4ebbb4 100644
--- a/deps/npm/lib/star.js
+++ b/deps/npm/lib/star.js
@@ -1,19 +1,22 @@
module.exports = star
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, registry = npm.registry
, log = require("npmlog")
, asyncMap = require("slide").asyncMap
+ , mapToRegistry = require("./utils/map-to-registry.js")
star.usage = "npm star [pkg, pkg, ...]\n"
+ "npm unstar [pkg, pkg, ...]"
star.completion = function (opts, cb) {
- var uri = url.resolve(npm.config.get("registry"), "-/short")
- registry.get(uri, { timeout : 60000 }, function (er, list) {
- return cb(null, list || [])
+ mapToRegistry("-/short", npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, { timeout : 60000 }, function (er, list) {
+ return cb(null, list || [])
+ })
})
}
@@ -24,13 +27,16 @@ function star (args, cb) {
, using = !(npm.command.match(/^un/))
if (!using) s = u
asyncMap(args, function (pkg, cb) {
- var uri = url.resolve(npm.config.get("registry"), pkg)
- registry.star(uri, using, function (er, data, raw, req) {
- if (!er) {
- console.log(s + " "+pkg)
- log.verbose("star", data)
- }
- cb(er, data, raw, req)
+ mapToRegistry(pkg, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.star(uri, using, function (er, data, raw, req) {
+ if (!er) {
+ console.log(s + " "+pkg)
+ log.verbose("star", data)
+ }
+ cb(er, data, raw, req)
+ })
})
}, cb)
}
diff --git a/deps/npm/lib/stars.js b/deps/npm/lib/stars.js
index f0d2ef73ae..dee5c152af 100644
--- a/deps/npm/lib/stars.js
+++ b/deps/npm/lib/stars.js
@@ -2,23 +2,26 @@ module.exports = stars
stars.usage = "npm stars [username]"
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, registry = npm.registry
, log = require("npmlog")
+ , mapToRegistry = require("./utils/map-to-registry.js")
function stars (args, cb) {
- var name = args.length === 1 ? args[0] : npm.config.get("username")
- , uri = url.resolve(npm.config.get("registry"), name)
- registry.stars(uri, showstars)
+ npm.commands.whoami([], true, function (er, username) {
+ var name = args.length === 1 ? args[0] : username
+ mapToRegistry("", npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.stars(uri, name, showstars)
+ })
+ })
function showstars (er, data) {
- if (er) {
- return cb(er)
- }
+ if (er) return cb(er)
if (data.rows.length === 0) {
- log.warn('stars', 'user has not starred any packages.')
+ log.warn("stars", "user has not starred any packages.")
} else {
data.rows.forEach(function(a) {
console.log(a.value)
diff --git a/deps/npm/lib/submodule.js b/deps/npm/lib/submodule.js
index 2231ced9cf..eab4d21b05 100644
--- a/deps/npm/lib/submodule.js
+++ b/deps/npm/lib/submodule.js
@@ -9,7 +9,6 @@ var npm = require("./npm.js")
, git = require("./utils/git.js")
, asyncMap = require("slide").asyncMap
, chain = require("slide").chain
- , which = require("which")
submodule.usage = "npm submodule "
@@ -23,7 +22,7 @@ function submodule (args, cb) {
if (args.length === 0) return cb(submodule.usage)
asyncMap(args, function (arg, cb) {
- cache.add(arg, null, false, cb)
+ cache.add(arg, null, null, false, cb)
}, function (er, pkgs) {
if (er) return cb(er)
chain(pkgs.map(function (pkg) { return function (cb) {
@@ -71,7 +70,7 @@ function addSubmodule (name, url, cb) {
var getSubmodules = function (cb) {
var args = [ "submodule", "status" ]
-
+
git.whichAndExec(args, function _(er, stdout) {
if (er) return cb(er)
var res = stdout.trim().split(/\n/).map(function (line) {
diff --git a/deps/npm/lib/tag.js b/deps/npm/lib/tag.js
index 1d04ad1f7e..47e9a8c0ac 100644
--- a/deps/npm/lib/tag.js
+++ b/deps/npm/lib/tag.js
@@ -5,16 +5,30 @@ tag.usage = "npm tag @ []"
tag.completion = require("./unpublish.js").completion
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, registry = npm.registry
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
+ , semver = require("semver")
function tag (args, cb) {
- var thing = (args.shift() || "").split("@")
- , project = thing.shift()
- , version = thing.join("@")
+ var thing = npa(args.shift() || "")
+ , project = thing.name
+ , version = thing.rawSpec
, t = args.shift() || npm.config.get("tag")
+
+ t = t.trim()
+
if (!project || !version || !t) return cb("Usage:\n"+tag.usage)
- var uri = url.resolve(npm.config.get("registry"), project)
- registry.tag(uri, version, t, cb)
+
+ if (semver.validRange(t)) {
+ var er = new Error("Tag name must not be a valid SemVer range: " + t)
+ return cb(er)
+ }
+
+ mapToRegistry(project, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.tag(uri, version, t, cb)
+ })
}
diff --git a/deps/npm/lib/unbuild.js b/deps/npm/lib/unbuild.js
index b594f28a9b..797762436b 100644
--- a/deps/npm/lib/unbuild.js
+++ b/deps/npm/lib/unbuild.js
@@ -2,7 +2,6 @@ module.exports = unbuild
unbuild.usage = "npm unbuild \n(this is plumbing)"
var readJson = require("read-package-json")
- , rm = require("./utils/gently-rm.js")
, gentlyRm = require("./utils/gently-rm.js")
, npm = require("./npm.js")
, path = require("path")
@@ -15,7 +14,7 @@ var readJson = require("read-package-json")
// args is a list of folders.
// remove any bins/etc, and then delete the folder.
function unbuild (args, silent, cb) {
- if (typeof silent === 'function') cb = silent, silent = false
+ if (typeof silent === "function") cb = silent, silent = false
asyncMap(args, unbuild_(silent), cb)
}
@@ -28,7 +27,7 @@ function unbuild_ (silent) { return function (folder, cb_) {
log.verbose(folder.substr(npm.prefix.length + 1), "unbuild")
readJson(path.resolve(folder, "package.json"), function (er, pkg) {
// if no json, then just trash it, but no scripts or whatever.
- if (er) return rm(folder, cb)
+ if (er) return gentlyRm(folder, false, cb)
readJson.cache.del(folder)
chain
( [ [lifecycle, pkg, "preuninstall", folder, false, true]
@@ -39,7 +38,7 @@ function unbuild_ (silent) { return function (folder, cb_) {
}
, [rmStuff, pkg, folder]
, [lifecycle, pkg, "postuninstall", folder, false, true]
- , [rm, folder] ]
+ , [gentlyRm, folder, undefined] ]
, cb )
})
}}
@@ -66,8 +65,8 @@ function rmBins (pkg, folder, parent, top, cb) {
log.verbose([binRoot, pkg.bin], "binRoot")
asyncMap(Object.keys(pkg.bin), function (b, cb) {
if (process.platform === "win32") {
- chain([ [rm, path.resolve(binRoot, b) + ".cmd"]
- , [rm, path.resolve(binRoot, b) ] ], cb)
+ chain([ [gentlyRm, path.resolve(binRoot, b) + ".cmd", undefined]
+ , [gentlyRm, path.resolve(binRoot, b), undefined] ], cb)
} else {
gentlyRm( path.resolve(binRoot, b)
, !npm.config.get("force") && folder
diff --git a/deps/npm/lib/unpublish.js b/deps/npm/lib/unpublish.js
index 225c1c3c45..2566cd5ae6 100644
--- a/deps/npm/lib/unpublish.js
+++ b/deps/npm/lib/unpublish.js
@@ -1,40 +1,51 @@
module.exports = unpublish
-var url = require("url")
- , log = require("npmlog")
+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")
+ , npa = require("npm-package-arg")
unpublish.usage = "npm unpublish [@]"
unpublish.completion = function (opts, cb) {
if (opts.conf.argv.remain.length >= 3) return cb()
- var un = encodeURIComponent(npm.config.get("username"))
- if (!un) return cb()
- var uri = url.resolve(npm.config.get("registry"), "-/by-user/"+un)
- registry.get(uri, null, 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.
- pkgs = pkgs[un]
- if (!pkgs || !pkgs.length) return cb()
- var partial = opts.partialWord.split("@")
- , pp = partial.shift()
- pkgs = pkgs.filter(function (p) {
- return p.indexOf(pp) === 0
- })
- if (pkgs.length > 1) return cb(null, pkgs)
- var uri = url.resolve(npm.config.get("registry"), pkgs[0])
- registry.get(uri, null, function (er, d) {
+ npm.commands.whoami([], true, function (er, username) {
+ if (er) return cb()
+
+ var un = encodeURIComponent(username)
+ if (!un) return cb()
+ var byUser = "-/by-user/" + un
+ mapToRegistry(byUser, npm.config, function (er, uri) {
if (er) return cb(er)
- var vers = Object.keys(d.versions)
- if (!vers.length) return cb(null, pkgs)
- return cb(null, vers.map(function (v) {
- return pkgs[0]+"@"+v
- }))
+
+ registry.get(uri, null, 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.
+ pkgs = pkgs[un]
+ if (!pkgs || !pkgs.length) return cb()
+ var pp = npa(opts.partialWord).name
+ pkgs = pkgs.filter(function (p) {
+ return p.indexOf(pp) === 0
+ })
+ if (pkgs.length > 1) return cb(null, pkgs)
+ mapToRegistry(pkgs[0], npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, function (er, d) {
+ if (er) return cb(er)
+ var vers = Object.keys(d.versions)
+ if (!vers.length) return cb(null, pkgs)
+ return cb(null, vers.map(function (v) {
+ return pkgs[0] + "@" + v
+ }))
+ })
+ })
+ })
})
})
}
@@ -42,23 +53,25 @@ unpublish.completion = function (opts, cb) {
function unpublish (args, cb) {
if (args.length > 1) return cb(unpublish.usage)
- var thing = args.length ? args.shift().split("@") : []
- , project = thing.shift()
- , version = thing.join("@")
+ var thing = args.length ? npa(args[0]) : {}
+ , project = thing.name
+ , version = thing.rawSpec
+ log.silly("unpublish", "args[0]", args[0])
+ log.silly("unpublish", "thing", thing)
if (!version && !npm.config.get("force")) {
return cb("Refusing to delete entire project.\n"
- +"Run with --force to do this.\n"
- +unpublish.usage)
+ + "Run with --force to do this.\n"
+ + unpublish.usage)
}
- if (!project || path.resolve(project) === npm.prefix) {
+ if (!project || path.resolve(project) === npm.localPrefix) {
// if there's a package.json in the current folder, then
// read the package name and version out of that.
- var cwdJson = path.join(process.cwd(), "package.json")
+ var cwdJson = path.join(npm.localPrefix, "package.json")
return readJson(cwdJson, function (er, data) {
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
- if (er) return cb("Usage:\n"+unpublish.usage)
+ if (er) return cb("Usage:\n" + unpublish.usage)
gotProject(data.name, data.version, cb)
})
}
@@ -79,7 +92,10 @@ function gotProject (project, version, cb_) {
return cb(er)
}
- var uri = url.resolve(npm.config.get("registry"), project)
- registry.unpublish(uri, version, cb)
+ mapToRegistry(project, npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.unpublish(uri, version, cb)
+ })
})
}
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index 5c4f4c99e8..788d3f8ccc 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -24,13 +24,18 @@ process.on("exit", function (code) {
}
if (wroteLogFile) {
- log.error("", [""
- ,"Additional logging details can be found in:"
+ // just a line break
+ if (log.levels[log.level] <= log.levels.error) console.error("")
+
+ log.error("",
+ ["Please include the following file with any support request:"
," " + path.resolve("npm-debug.log")
].join("\n"))
wroteLogFile = false
}
- log.error("not ok", "code", code)
+ if (code) {
+ log.error("code", code)
+ }
}
var doExit = npm.config.get("_exit")
@@ -87,7 +92,6 @@ function exit (code, noLog) {
function errorHandler (er) {
- var printStack = false
// console.error("errorHandler", er)
if (!npm.config || !npm.config.loaded) {
// logging won't work unless we pretend that it's ready
@@ -112,13 +116,55 @@ function errorHandler (er) {
var m = er.code || er.message.match(/^(?:Error: )?(E[A-Z]+)/)
if (m && !er.code) er.code = m
+ ; [ "type"
+ , "fstream_path"
+ , "fstream_unc_path"
+ , "fstream_type"
+ , "fstream_class"
+ , "fstream_finish_call"
+ , "fstream_linkpath"
+ , "stack"
+ , "fstream_stack"
+ , "statusCode"
+ , "pkgid"
+ ].forEach(function (k) {
+ var v = er[k]
+ if (!v) return
+ if (k === "fstream_stack") v = v.join("\n")
+ log.verbose(k, v)
+ })
+
+ log.verbose("cwd", process.cwd())
+
+ var os = require("os")
+ // log.error("System", os.type() + " " + os.release())
+ // log.error("command", process.argv.map(JSON.stringify).join(" "))
+ // log.error("node -v", process.version)
+ // log.error("npm -v", npm.version)
+ log.error("", os.type() + " " + os.release())
+ log.error("argv", process.argv.map(JSON.stringify).join(" "))
+ log.error("node", process.version)
+ log.error("npm ", "v" + npm.version)
+
+ ; [ "file"
+ , "path"
+ , "code"
+ , "errno"
+ , "syscall"
+ ].forEach(function (k) {
+ var v = er[k]
+ if (v) log.error(k, v)
+ })
+
+ // just a line break
+ if (log.levels[log.level] <= log.levels.error) console.error("")
+
switch (er.code) {
case "ECONNREFUSED":
log.error("", er)
log.error("", ["\nIf you are behind a proxy, please make sure that the"
,"'proxy' config is set properly. See: 'npm help config'"
].join("\n"))
- printStack = true
break
case "EACCES":
@@ -126,7 +172,6 @@ function errorHandler (er) {
log.error("", er)
log.error("", ["\nPlease try running this command again as root/Administrator."
].join("\n"))
- printStack = true
break
case "ELIFECYCLE":
@@ -160,24 +205,22 @@ function errorHandler (er) {
].join("\n"), "JSON.parse")
break
+ // TODO(isaacs)
+ // Add a special case here for E401 and E403 explaining auth issues?
+
case "E404":
var msg = [er.message]
if (er.pkgid && er.pkgid !== "-") {
msg.push("", "'"+er.pkgid+"' is not in the npm registry."
- ,"You should bug the author to publish it")
+ ,"You should bug the author to publish it (or use the name yourself!)")
if (er.parent) {
msg.push("It was specified as a dependency of '"+er.parent+"'")
}
- if (er.pkgid.match(/^node[\.\-]|[\.\-]js$/)) {
- var s = er.pkgid.replace(/^node[\.\-]|[\.\-]js$/g, "")
- if (s !== er.pkgid) {
- s = s.replace(/[^a-z0-9]/g, ' ')
- msg.push("\nMaybe try 'npm search " + s + "'")
- }
- }
msg.push("\nNote that you can also install from a"
- ,"tarball, folder, or http url, or git url.")
+ ,"tarball, folder, http url, or git url.")
}
+ // There's no need to have 404 in the message as well.
+ msg[0] = msg[0].replace(/^404\s+/, "")
log.error("404", msg.join("\n"))
break
@@ -185,9 +228,6 @@ function errorHandler (er) {
log.error("publish fail", ["Cannot publish over existing version."
,"Update the 'version' field in package.json and try again."
,""
- ,"If the previous version was published in error, see:"
- ," npm help unpublish"
- ,""
,"To automatically increment version numbers, see:"
," npm help version"
].join("\n"))
@@ -295,50 +335,13 @@ function errorHandler (er) {
break
default:
- log.error("", er.stack || er.message || er)
- log.error("", ["If you need help, you may report this *entire* log,"
- ,"including the npm and node versions, at:"
+ log.error("", er.message || er)
+ log.error("", ["", "If you need help, you may report this error at:"
," "
].join("\n"))
- printStack = false
break
}
- var os = require("os")
- // just a line break
- if (log.levels[log.level] <= log.levels.error) console.error("")
- log.error("System", os.type() + " " + os.release())
- log.error("command", process.argv
- .map(JSON.stringify).join(" "))
- log.error("cwd", process.cwd())
- log.error("node -v", process.version)
- log.error("npm -v", npm.version)
-
- ; [ "file"
- , "path"
- , "type"
- , "syscall"
- , "fstream_path"
- , "fstream_unc_path"
- , "fstream_type"
- , "fstream_class"
- , "fstream_finish_call"
- , "fstream_linkpath"
- , "code"
- , "errno"
- , "stack"
- , "fstream_stack"
- ].forEach(function (k) {
- var v = er[k]
- if (k === "stack") {
- if (!printStack) return
- if (!v) v = er.message
- }
- if (!v) return
- if (k === "fstream_stack") v = v.join("\n")
- log.error(k, v)
- })
-
exit(typeof er.errno === "number" ? er.errno : 1)
}
@@ -350,17 +353,16 @@ function writeLogFile (cb) {
var fs = require("graceful-fs")
, fstr = fs.createWriteStream("npm-debug.log")
- , util = require("util")
, os = require("os")
, out = ""
log.record.forEach(function (m) {
var pref = [m.id, m.level]
if (m.prefix) pref.push(m.prefix)
- pref = pref.join(' ')
+ pref = pref.join(" ")
m.message.trim().split(/\r?\n/).map(function (line) {
- return (pref + ' ' + line).trim()
+ return (pref + " " + line).trim()
}).forEach(function (line) {
out += line + os.EOL
})
diff --git a/deps/npm/lib/utils/fetch.js b/deps/npm/lib/utils/fetch.js
deleted file mode 100644
index f6e5166ff5..0000000000
--- a/deps/npm/lib/utils/fetch.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Fetch an HTTP url to a local file.
- **/
-
-var request = require("request")
- , fs = require("graceful-fs")
- , npm = require("../npm.js")
- , url = require("url")
- , log = require("npmlog")
- , path = require("path")
- , mkdir = require("mkdirp")
- , chownr = require("chownr")
- , regHost
- , once = require("once")
- , crypto = require("crypto")
-
-module.exports = fetch
-
-function fetch (remote, local, headers, cb) {
- if (typeof cb !== "function") cb = headers, headers = {}
- cb = once(cb)
- log.verbose("fetch", "to=", local)
- mkdir(path.dirname(local), function (er, made) {
- if (er) return cb(er)
- fetch_(remote, local, headers, cb)
- })
-}
-
-function fetch_ (remote, local, headers, cb) {
- var fstr = fs.createWriteStream(local, { mode : npm.modes.file })
- var response = null
-
- fstr.on("error", function (er) {
- cb(er)
- fstr.destroy()
- })
-
- var req = makeRequest(remote, fstr, headers)
- req.on("response", function (res) {
- log.http(res.statusCode, remote)
- response = res
- response.resume()
- // Work around bug in node v0.10.0 where the CryptoStream
- // gets stuck and never starts reading again.
- if (process.version === "v0.10.0") {
- response.resume = function (orig) { return function() {
- var ret = orig.apply(response, arguments)
- if (response.socket.encrypted)
- response.socket.encrypted.read(0)
- return ret
- }}(response.resume)
- }
- })
-
- fstr.on("close", function () {
- var er
- if (response && response.statusCode && response.statusCode >= 400) {
- er = new Error(response.statusCode + " "
- + require("http").STATUS_CODES[response.statusCode])
- }
- cb(er, response)
- })
-}
-
-function makeRequest (remote, fstr, headers) {
- remote = url.parse(remote)
- log.http("GET", remote.href)
- regHost = regHost || url.parse(npm.config.get("registry")).host
-
- if (remote.host === regHost && npm.config.get("always-auth")) {
- remote.auth = new Buffer( npm.config.get("_auth")
- , "base64" ).toString("utf8")
- if (!remote.auth) return fstr.emit("error", new Error(
- "Auth required and none provided. Please run 'npm adduser'"))
- }
-
- var proxy
- if (remote.protocol !== "https:" || !(proxy = npm.config.get("https-proxy"))) {
- proxy = npm.config.get("proxy")
- }
-
- var sessionToken = npm.registry.sessionToken
- if (!sessionToken) {
- sessionToken = crypto.randomBytes(8).toString("hex")
- npm.registry.sessionToken = sessionToken
- }
-
- var ca = remote.host === regHost ? npm.config.get("ca") : undefined
- var opts = { url: remote
- , proxy: proxy
- , strictSSL: npm.config.get("strict-ssl")
- , rejectUnauthorized: npm.config.get("strict-ssl")
- , ca: ca
- , headers:
- { "user-agent": npm.config.get("user-agent")
- , "npm-session": sessionToken
- , referer: npm.registry.refer
- }
- }
- var req = request(opts)
- req.on("error", function (er) {
- fstr.emit("error", er)
- })
- req.pipe(fstr)
- return req
-}
diff --git a/deps/npm/lib/utils/gently-rm.js b/deps/npm/lib/utils/gently-rm.js
index 241740fed6..d43d0725eb 100644
--- a/deps/npm/lib/utils/gently-rm.js
+++ b/deps/npm/lib/utils/gently-rm.js
@@ -3,54 +3,159 @@
module.exports = gentlyRm
-var rimraf = require("rimraf")
- , fs = require("graceful-fs")
- , npm = require("../npm.js")
- , path = require("path")
+var npm = require("../npm.js")
+ , log = require("npmlog")
+ , resolve = require("path").resolve
+ , dirname = require("path").dirname
+ , lstat = require("graceful-fs").lstat
+ , readlink = require("graceful-fs").readlink
+ , isInside = require("path-is-inside")
+ , vacuum = require("fs-vacuum")
+ , rimraf = require("rimraf")
+ , some = require("async-some")
-function gentlyRm (p, gently, cb) {
- if (!cb) cb = gently, gently = null
+function gentlyRm (path, gently, cb) {
+ if (!cb) {
+ cb = gently
+ gently = null
+ }
// never rm the root, prefix, or bin dirs.
// just a safety precaution.
- p = path.resolve(p)
- if (p === npm.dir ||
- p === npm.root ||
- p === npm.bin ||
- p === npm.prefix ||
- p === npm.globalDir ||
- p === npm.globalRoot ||
- p === npm.globalBin ||
- p === npm.globalPrefix) {
- return cb(new Error("May not delete: " + p))
+ var prefixes = [
+ npm.dir, npm.root, npm.bin, npm.prefix,
+ npm.globalDir, npm.globalRoot, npm.globalBin, npm.globalPrefix
+ ]
+
+ var resolved = 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))
}
- if (npm.config.get("force") || !gently) {
- return rimraf(p, cb)
+ var options = {log : log.silly.bind(log, "gentlyRm")}
+ if (npm.config.get("force") || !gently) options.purge = true
+
+ if (!gently) {
+ log.verbose("gentlyRm", "vacuuming", resolved)
+ return vacuum(resolved, options, cb)
}
- gently = path.resolve(gently)
+ var parent = resolve(gently)
+ log.verbose("gentlyRm", "verifying that", parent, "is managed by npm")
+ some(prefixes, isManaged(parent), function (er, matched) {
+ if (er) return cb(er)
+
+ if (!matched) {
+ log.verbose("gentlyRm", parent, "is not managed by npm")
+ return clobberFail(resolved, parent, cb)
+ }
+
+ log.silly("gentlyRm", parent, "is managed by npm")
+
+ 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)
+ }
+
+ log.silly("gentlyRm", resolved, "is not under", parent)
+ log.silly("gentlyRm", "checking to see if", resolved, "is a link")
+ lstat(resolved, function (er, stat) {
+ if (er) {
+ if (er.code === "ENOENT") return cb(null)
+ return cb(er)
+ }
+
+ if (!stat.isSymbolicLink()) {
+ log.verbose("gentlyRm", resolved, "is outside", parent, "and not a link")
+ return clobberFail(resolved, parent, cb)
+ }
+
+ log.silly("gentlyRm", resolved, "is a link")
+ readlink(resolved, function (er, link) {
+ if (er) {
+ if (er.code === "ENOENT") return cb(null)
+ return cb(er)
+ }
- // lstat it, see if it's a symlink.
- fs.lstat(p, function (er, s) {
- if (er) return rimraf(p, cb)
- if (!s.isSymbolicLink()) next(null, path.resolve(p))
- realish(p, next)
+ var source = resolve(dirname(resolved), link)
+ if (isInside(source, parent)) {
+ log.silly("gentlyRm", source, "inside", parent)
+ log.verbose("gentlyRm", "vacuuming", resolved)
+ return vacuum(resolved, options, cb)
+ }
+
+ log.silly("gentlyRm", "checking to see if", source, "is managed by npm")
+ some(prefixes, isManaged(source), function (er, matched) {
+ if (er) return cb(er)
+
+ if (matched) {
+ log.silly("gentlyRm", source, "is under", matched)
+ log.verbose("gentlyRm", "removing", resolved)
+ rimraf(resolved, cb)
+ }
+
+ log.verbose("gentlyRm", source, "is not managed by npm")
+ return clobberFail(path, parent, cb)
+ })
+ })
+ })
})
+}
- function next (er, rp) {
- if (rp && rp.indexOf(gently) !== 0) {
- return clobberFail(p, gently, cb)
+var resolvedPaths = {}
+function isManaged (target) {
+ return predicate
+
+ 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)
}
- rimraf(p, cb)
+
+ // otherwise, check the path
+ lstat(path, function (er, stat) {
+ 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)
+
+ // otherwise, cache & test the link's source
+ readlink(path, function (er, source) {
+ if (er) {
+ if (er.code === "ENOENT") return cb(null, false)
+
+ return cb(er)
+ }
+
+ cacheAndTest(resolve(path, source), path, target, cb)
+ })
+ })
}
-}
-function realish (p, cb) {
- fs.readlink(p, function (er, r) {
- if (er) return cb(er)
- return cb(null, path.resolve(path.dirname(p), r))
- })
+ 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/is-git-url.js b/deps/npm/lib/utils/is-git-url.js
deleted file mode 100644
index 7ded4b602a..0000000000
--- a/deps/npm/lib/utils/is-git-url.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = isGitUrl
-
-function isGitUrl (url) {
- switch (url.protocol) {
- case "git:":
- case "git+http:":
- case "git+https:":
- case "git+rsync:":
- case "git+ftp:":
- case "git+ssh:":
- return true
- }
-}
diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js
index 8bcb99689f..c0eb83dfb1 100644
--- a/deps/npm/lib/utils/lifecycle.js
+++ b/deps/npm/lib/utils/lifecycle.js
@@ -71,11 +71,6 @@ function lifecycle_ (pkg, stage, wd, env, unsafe, failOk, cb) {
, p = wd.split("node_modules")
, acc = path.resolve(p.shift())
- // first add the directory containing the `node` executable currently
- // running, so that any lifecycle script that invoke "node" will execute
- // this same one.
- pathArr.unshift(path.dirname(process.execPath))
-
p.forEach(function (pp) {
pathArr.unshift(path.join(acc, "node_modules", ".bin"))
acc = path.join(acc, "node_modules", pp)
@@ -353,13 +348,9 @@ function makeEnv (data, prefix, env) {
function cmd (stage) {
function CMD (args, cb) {
- if (args.length) {
- chain(args.map(function (p) {
- return [npm.commands, "run-script", [p, stage]]
- }), cb)
- } else npm.commands["run-script"]([stage], cb)
+ npm.commands["run-script"]([stage].concat(args), cb)
}
- CMD.usage = "npm "+stage+" "
+ CMD.usage = "npm "+stage+" [-- ]"
var installedShallow = require("./completion/installed-shallow.js")
CMD.completion = function (opts, cb) {
installedShallow(opts, function (d) {
diff --git a/deps/npm/lib/utils/map-to-registry.js b/deps/npm/lib/utils/map-to-registry.js
new file mode 100644
index 0000000000..cf665e4f65
--- /dev/null
+++ b/deps/npm/lib/utils/map-to-registry.js
@@ -0,0 +1,54 @@
+var url = require("url")
+
+var log = require("npmlog")
+ , npa = require("npm-package-arg")
+
+module.exports = mapToRegistry
+
+function mapToRegistry(name, config, cb) {
+ var uri
+ var scopedRegistry
+
+ // the name itself takes precedence
+ var data = npa(name)
+ if (data.scope) {
+ // the name is definitely scoped, so escape now
+ name = name.replace("/", "%2f")
+
+ log.silly("mapToRegistry", "scope", 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)
+ }
+ }
+
+ // ...then --scope=@scope or --scope=scope
+ var scope = config.get("scope")
+ if (!uri && 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)
+ }
+ }
+
+ // ...and finally use the default registry
+ if (!uri) {
+ uri = url.resolve(config.get("registry"), name)
+ }
+
+ log.verbose("mapToRegistry", "name", name)
+ log.verbose("mapToRegistry", "uri", uri)
+ cb(null, uri)
+}
diff --git a/deps/npm/lib/version.js b/deps/npm/lib/version.js
index 95d5ff2ee2..5091ab9e2d 100644
--- a/deps/npm/lib/version.js
+++ b/deps/npm/lib/version.js
@@ -23,7 +23,7 @@ version.usage = "npm version [ | 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(process.cwd(), "package.json"), function (er, data) {
+ fs.readFile(path.join(npm.localPrefix, "package.json"), function (er, data) {
if (!args.length) {
var v = {}
Object.keys(process.versions).forEach(function (k) {
@@ -63,7 +63,7 @@ function version (args, silent, cb_) {
if (data.version === newVer) return cb_(new Error("Version not changed"))
data.version = newVer
- fs.stat(path.join(process.cwd(), ".git"), function (er, s) {
+ fs.stat(path.join(npm.localPrefix, ".git"), function (er, s) {
function cb (er) {
if (!er && !silent) console.log("v" + newVer)
cb_(er)
@@ -111,7 +111,7 @@ function checkGit (data, cb) {
}
function write (data, cb) {
- fs.writeFile( path.join(process.cwd(), "package.json")
+ fs.writeFile( path.join(npm.localPrefix, "package.json")
, new Buffer(JSON.stringify(data, null, 2) + "\n")
, cb )
}
diff --git a/deps/npm/lib/view.js b/deps/npm/lib/view.js
index 33bf550dd9..43d09cbbcc 100644
--- a/deps/npm/lib/view.js
+++ b/deps/npm/lib/view.js
@@ -4,21 +4,26 @@ module.exports = view
view.usage = "npm view pkg[@version] [[.subfield]...]"
view.completion = function (opts, cb) {
- var uri
if (opts.conf.argv.remain.length <= 2) {
- uri = url.resolve(npm.config.get("registry"), "-/short")
- return registry.get(uri, null, cb)
+ return mapToRegistry("-/short", npm.config, function (er, uri) {
+ if (er) return cb(er)
+
+ registry.get(uri, null, cb)
+ })
}
// have the package, get the fields.
var tag = npm.config.get("tag")
- uri = url.resolve(npm.config.get("registry"), opts.conf.argv.remain[2])
- registry.get(uri, null, function (er, d) {
+ mapToRegistry(opts.conf.argv.remain[2], npm.config, function (er, uri) {
if (er) return cb(er)
- var dv = d.versions[d["dist-tags"][tag]]
- , fields = []
- d.versions = Object.keys(d.versions).sort(semver.compareLoose)
- fields = getFields(d).concat(getFields(dv))
- cb(null, fields)
+
+ registry.get(uri, null, function (er, d) {
+ if (er) return cb(er)
+ var dv = d.versions[d["dist-tags"][tag]]
+ , fields = []
+ d.versions = Object.keys(d.versions).sort(semver.compareLoose)
+ fields = getFields(d).concat(getFields(dv))
+ cb(null, fields)
+ })
})
function getFields (d, f, pref) {
@@ -42,71 +47,75 @@ view.completion = function (opts, cb) {
}
}
-var url = require("url")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, registry = npm.registry
, log = require("npmlog")
, util = require("util")
, semver = require("semver")
+ , mapToRegistry = require("./utils/map-to-registry.js")
+ , npa = require("npm-package-arg")
function view (args, silent, cb) {
if (typeof cb !== "function") cb = silent, silent = false
if (!args.length) return cb("Usage: "+view.usage)
var pkg = args.shift()
- , nv = pkg.split("@")
- , name = nv.shift()
- , version = nv.join("@") || npm.config.get("tag")
+ , nv = npa(pkg)
+ , name = nv.name
+ , version = nv.rawSpec || npm.config.get("tag")
if (name === ".") return cb(view.usage)
// get the data about this package
- var uri = url.resolve(npm.config.get("registry"), name)
- registry.get(uri, null, function (er, data) {
+ mapToRegistry(name, npm.config, function (er, uri) {
if (er) return cb(er)
- if (data["dist-tags"] && data["dist-tags"].hasOwnProperty(version)) {
- version = data["dist-tags"][version]
- }
- if (data.time && data.time.unpublished) {
- var u = data.time.unpublished
- er = new Error("Unpublished by " + u.name + " on " + u.time)
- er.statusCode = 404
- er.code = "E404"
- er.pkgid = data._id
- return cb(er, data)
- }
+ registry.get(uri, null, function (er, data) {
+ if (er) return cb(er)
+ if (data["dist-tags"] && data["dist-tags"].hasOwnProperty(version)) {
+ version = data["dist-tags"][version]
+ }
+ if (data.time && data.time.unpublished) {
+ var u = data.time.unpublished
+ er = new Error("Unpublished by " + u.name + " on " + u.time)
+ er.statusCode = 404
+ er.code = "E404"
+ er.pkgid = data._id
+ return cb(er, data)
+ }
- var results = []
- , error = null
- , versions = data.versions || {}
- data.versions = Object.keys(versions).sort(semver.compareLoose)
- if (!args.length) args = [""]
- // remove readme unless we asked for it
- if (-1 === args.indexOf("readme")) {
- delete data.readme
- }
+ var results = []
+ , error = null
+ , versions = data.versions || {}
+ data.versions = Object.keys(versions).sort(semver.compareLoose)
+ if (!args.length) args = [""]
+
+ // remove readme unless we asked for it
+ if (-1 === args.indexOf("readme")) {
+ delete data.readme
+ }
- Object.keys(versions).forEach(function (v) {
- if (semver.satisfies(v, version, true)) args.forEach(function (args) {
- // remove readme unless we asked for it
- if (-1 === args.indexOf("readme")) {
- delete versions[v].readme
- }
- results.push(showFields(data, versions[v], args))
+ Object.keys(versions).forEach(function (v) {
+ if (semver.satisfies(v, version, true)) args.forEach(function (args) {
+ // remove readme unless we asked for it
+ if (-1 === args.indexOf("readme")) {
+ delete versions[v].readme
+ }
+ results.push(showFields(data, versions[v], args))
+ })
})
- })
- results = results.reduce(reducer, {})
- var retval = results
+ results = results.reduce(reducer, {})
+ var retval = results
- if (args.length === 1 && args[0] === "") {
- retval = cleanBlanks(retval)
- log.silly("cleanup", retval)
- }
+ if (args.length === 1 && args[0] === "") {
+ retval = cleanBlanks(retval)
+ log.silly("cleanup", retval)
+ }
- if (error || silent) cb(error, retval)
- else printData(results, data._id, cb.bind(null, error, retval))
+ if (error || silent) cb(error, retval)
+ else printData(results, data._id, cb.bind(null, error, retval))
+ })
})
}
diff --git a/deps/npm/lib/whoami.js b/deps/npm/lib/whoami.js
index f1c67e2b0d..b33f93743d 100644
--- a/deps/npm/lib/whoami.js
+++ b/deps/npm/lib/whoami.js
@@ -1,13 +1,39 @@
-module.exports = whoami
-
var npm = require("./npm.js")
-whoami.usage = "npm whoami\n(just prints the 'username' config)"
+module.exports = whoami
+
+whoami.usage = "npm whoami\n(just prints username according to given registry)"
function whoami (args, silent, cb) {
- if (typeof cb !== "function") cb = silent, silent = false
- var me = npm.config.get("username")
- var msg = me ? me : "Not authed. Run 'npm adduser'"
+ // FIXME: need tighter checking on this, but is a breaking change
+ if (typeof cb !== "function") {
+ cb = silent
+ silent = false
+ }
+
+ 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))
+ }
+ else if (credentials.token) {
+ return npm.registry.whoami(registry, function (er, username) {
+ if (er) return cb(er)
+
+ if (!silent) console.log(username)
+ cb(null, username)
+ })
+ }
+ }
+
+ // 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, me))
+ process.nextTick(cb.bind(this, null, msg))
}
diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1
index cfa8b45983..8f7d01ba7a 100644
--- a/deps/npm/man/man1/npm-README.1
+++ b/deps/npm/man/man1/npm-README.1
@@ -1,221 +1,177 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm\fR \-\- node package manager![Build Status \fIhttps://img\.shields\.io/travis/npm/npm/master\.svg)](https://travis\-ci\.org/npm/npm\fR
-## SYNOPSIS
-.
+\fBnpm\fR \- node package manager
+.P
+Build Status \fIhttps://img\.shields\.io/travis/npm/npm/master\.svg\fR \fIhttps://travis\-ci\.org/npm/npm\fR
+.SH SYNOPSIS
.P
This is just enough info to get you up and running\.
-.
.P
-Much more info available via \fBnpm help\fR once it\'s installed\.
-.
-.SH "IMPORTANT"
+Much more info available via \fBnpm help\fR once it's installed\.
+.SH IMPORTANT
+.P
\fBYou need node v0\.8 or higher to run this program\.\fR
-.
.P
To install an old \fBand unsupported\fR version of npm that works on node 0\.3
and prior, clone the git repo and dig through the old tags and branches\.
-.
-.SH "Super Easy Install"
-npm comes with node now\.
-.
-.SS "Windows Computers"
-Get the MSI\. npm is in it\.
-.
-.SS "Apple Macintosh Computers"
-Get the pkg\. npm is in it\.
-.
-.SS "Other Sorts of Unices"
+.SH Super Easy Install
+.P
+npm comes with node \fIhttp://nodejs\.org/download/\fR now\.
+.SS Windows Computers
+.P
+Get the MSI \fIhttp://nodejs\.org/download/\fR\|\. npm is in it\.
+.SS Apple Macintosh Computers
+.P
+Get the pkg \fIhttp://nodejs\.org/download/\fR\|\. npm is in it\.
+.SS Other Sorts of Unices
+.P
Run \fBmake install\fR\|\. npm will be installed with node\.
-.
.P
If you want a more fancy pants install (a different version, customized
paths, etc\.) then read on\.
-.
-.SH "Fancy Install (Unix)"
-There\'s a pretty robust install script at \fIhttps://www\.npmjs\.org/install\.sh\fR\|\. You can download that and run it\.
-.
-.P
-Here\'s an example using curl:
-.
-.IP "" 4
-.
-.nf
+.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\.
+.P
+Here's an example using curl:
+.P
+.RS 2
+.EX
curl \-L https://npmjs\.org/install\.sh | sh
-.
-.fi
-.
-.IP "" 0
-.
-.SS "Slightly Fancier"
+.EE
+.RE
+.SS Slightly Fancier
+.P
You can set any npm configuration params with that script:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm_config_prefix=/some/path sh install\.sh
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
Or, you can run it in uber\-debuggery mode:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm_debug=1 sh install\.sh
-.
-.fi
-.
-.IP "" 0
-.
-.SS "Even Fancier"
+.EE
+.RE
+.SS Even Fancier
+.P
Get the code with git\. Use \fBmake\fR to build the docs and do other stuff\.
If you plan on hacking on npm, \fBmake link\fR is your friend\.
-.
.P
-If you\'ve got the npm source code, you can also semi\-permanently set
+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 \fR\|\. (This is helpful
for testing, or running stuff without actually installing npm itself\.)
-.
-.SH "Fancy Windows Install"
-You can download a zip file from \fIhttps://npmjs\.org/dist/\fR, and unpack it
+.SH Fancy Windows Install
+.P
+You can download a zip file from https://npmjs\.org/dist/, and unpack it
in the same folder where node\.exe lives\.
-.
.P
-If that\'s not fancy enough for you, then you can fetch the code with
+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"
+.SH Installing on Cygwin
+.P
No\.
-.
-.SH "Permissions when Using npm to Install Other Stuff"
+.SH Permissions when Using npm to Install Other Stuff
+.P
\fBtl;dr\fR
-.
-.IP "\(bu" 4
-Use \fBsudo\fR for greater safety\. Or don\'t, if you prefer not to\.
-.
-.IP "\(bu" 4
-npm will downgrade permissions if it\'s root before running any build
+.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\.
-.
-.IP "" 0
-.
-.SS "More details\.\.\."
+
+.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:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm config set unsafe\-perm false
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
This will prevent running in unsafe mode, even as non\-root users\.
-.
-.SH "Uninstalling"
+.SH Uninstalling
+.P
So sad to see you go\.
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
sudo npm uninstall npm \-g
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
Or, if that fails,
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
sudo make uninstall
-.
-.fi
-.
-.IP "" 0
-.
-.SH "More Severe Uninstalling"
+.EE
+.RE
+.SH More Severe Uninstalling
+.P
Usually, the above instructions are sufficient\. That will remove
-npm, but leave behind anything you\'ve installed\.
-.
+npm, but leave behind anything you've installed\.
.P
If you would like to remove all the packages that you have installed,
then you can use the \fBnpm ls\fR command to find them, and then \fBnpm rm\fR to
remove them\.
-.
.P
-To remove cruft left behind by npm 0\.x, you can use the included \fBclean\-old\.sh\fR script file\. You can run it conveniently like this:
-.
-.IP "" 4
-.
-.nf
+To remove cruft left behind by npm 0\.x, you can use the included
+\fBclean\-old\.sh\fR script file\. You can run it conveniently like this:
+.P
+.RS 2
+.EX
npm explore npm \-g \-\- sh scripts/clean\-old\.sh
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
npm uses two configuration files, one for per\-user configs, and another
for global (every\-user) configs\. You can view them by doing:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm config get userconfig # defaults to ~/\.npmrc
npm config get globalconfig # defaults to /usr/local/etc/npmrc
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
Uninstalling npm does not remove configuration files by default\. You
must remove them yourself manually if you want them gone\. Note that
this means that future npm installs will not remember the settings that
you have chosen\.
-.
-.SH "Using npm Programmatically"
+.SH Using npm Programmatically
+.P
If you would like to use npm programmatically, you can do that\.
-It\'s not very well documented, but it \fIis\fR rather simple\.
-.
+It's not very well documented, but it \fIis\fR rather simple\.
.P
Most of the time, unless you actually want to do all the things that
-npm does, you should try using one of npm\'s dependencies rather than
+npm does, you should try using one of npm's dependencies rather than
using npm itself, if possible\.
-.
.P
Eventually, npm will be just a thin cli wrapper around the modules
that it depends on, but for now, there are some things that you must
use npm itself to do\.
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
var npm = require("npm")
npm\.load(myConfigObject, function (er) {
if (er) return handlError(er)
@@ -225,117 +181,98 @@ npm\.load(myConfigObject, function (er) {
})
npm\.on("log", function (message) { \.\.\.\. })
})
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
The \fBload\fR function takes an object hash of the command\-line configs\.
The various \fBnpm\.commands\.\fR functions take an \fBarray\fR of
-positional argument \fBstrings\fR\|\. The last argument to any \fBnpm\.commands\.\fR function is a callback\. Some commands take other
+positional argument \fBstrings\fR\|\. The last argument to any
+\fBnpm\.commands\.\fR function is a callback\. Some commands take other
optional arguments\. Read the source\.
-.
.P
You cannot set configs individually for any single npm function at this
time\. Since \fBnpm\fR is a singleton, any call to \fBnpm\.config\.set\fR will
change the value for \fIall\fR npm commands in that process\.
-.
.P
See \fB\|\./bin/npm\-cli\.js\fR for an example of pulling config values off of the
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"
+.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\|\.
-.
.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,
+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
-.
-.SH "Legal Stuff"
+.SH Legal Stuff
+.P
"npm" and "The npm Registry" are owned by npm, Inc\.
All rights reserved\. See the included LICENSE file for more details\.
-.
.P
"Node\.js" and "node" are trademarks owned by Joyent, Inc\.
-.
.P
Modules published on the npm registry are not officially endorsed by
npm, Inc\. or the Node\.js project\.
-.
.P
Data published to the npm registry is not part of npm itself, and is
the sole property of the publisher\. While every effort is made to
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
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 \fIsupport@npmjs\.com\fR and explain the situation\.
-.
+owner \fIhttps://www\.npmjs\.org/doc/misc/npm\-disputes\.html\fR, please email
+support@npmjs\.com and explain the situation\.
.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\.
-.
-.SS "In plainer english"
+.SS In plainer english
+.P
npm is the property of npm, Inc\.
-.
.P
-If you publish something, it\'s yours, and you are solely accountable
+If you publish something, it's yours, and you are solely accountable
for it\.
-.
.P
-If other people publish something, it\'s theirs\.
-.
+If other people publish something, it's theirs\.
.P
Users can publish Bad Stuff\. It will be removed promptly if reported\.
But there is no vetting process for published modules, and you use
them at your own risk\. Please inspect the source\.
-.
.P
If you publish Bad Stuff, we may delete it from the registry, or even
-ban your account in extreme cases\. So don\'t do that\.
-.
-.SH "BUGS"
+ban your account in extreme cases\. So don't do that\.
+.SH BUGS
+.P
When you find issues, please report them:
-.
-.IP "\(bu" 4
-web: \fIhttps://github\.com/npm/npm/issues\fR
-.
-.IP "\(bu" 4
-email: \fInpm\-@googlegroups\.com\fR
-.
-.IP "" 0
-.
-.P
-Be sure to include \fIall\fR of the output from the npm command that didn\'t work
+.RS 0
+.IP \(bu 2
+web:
+https://github\.com/npm/npm/issues
+.IP \(bu 2
+email:
+npm\-@googlegroups\.com
+
+.RE
+.P
+Be sure to include \fIall\fR of the output from the npm command that didn't work
as expected\. The \fBnpm\-debug\.log\fR file is also helpful to provide\.
-.
.P
You can also look for isaacs in #node\.js on irc://irc\.freenode\.net\. He
will no doubt tell you to put the output in a gist or email\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help npm
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 faq
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help help
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 index
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
index da1dcdbc3f..5db7ee28a7 100644
--- a/deps/npm/man/man1/npm-adduser.1
+++ b/deps/npm/man/man1/npm-adduser.1
@@ -1,63 +1,67 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-ADDUSER" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-adduser\fR \-\- Add a registry user account
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm adduser
-.
-.fi
-.
-.SH "DESCRIPTION"
-Create or verify a user named \fB\fR in the npm registry, and
-save the credentials to the \fB\|\.npmrc\fR file\.
-.
+\fBnpm-adduser\fR \- Add a registry user account
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm adduser [\-\-registry=url] [\-\-scope=@orgname]
+.EE
+.RE
+.SH DESCRIPTION
+.P
+Create or verify a user named \fB\fR in the specified registry, and
+save the credentials to the \fB\|\.npmrc\fR file\. If no registry is specified,
+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\.
-.
.P
-To reset your password, go to \fIhttps://npmjs\.org/forgot\fR
-.
+To reset your password, go to https://www\.npmjs\.org/forgot
.P
You may use this command multiple times with the same user account to
authorize on a new machine\.
-.
-.SH "CONFIGURATION"
-.
-.SS "registry"
+.P
+\fBnpm login\fR is an alias to \fBadduser\fR and behaves exactly the same way\.
+.SH CONFIGURATION
+.SS registry
+.P
Default: http://registry\.npmjs\.org/
-.
.P
-The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+The base URL of the npm package registry\. If \fBscope\fR is also specified,
+this registry will only be used for packages with that scope\. See npm help 7 \fBnpm\-scope\fR\|\.
+.SS scope
+.P
+Default: none
+.P
+If specified, the user and login credentials given will be associated
+with the specified scope\. See npm help 7 \fBnpm\-scope\fR\|\. You can use both at the same time,
+e\.g\.
+.P
+.RS 2
+.EX
+npm adduser \-\-registry=http://myregistry\.example\.com \-\-scope=@myco
+.EE
+.RE
+.P
+This will set a registry for the given scope and login or create a user for
+that registry at the same time\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help owner
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help whoami
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1
index 548bb6ad34..b4963914e9 100644
--- a/deps/npm/man/man1/npm-bin.1
+++ b/deps/npm/man/man1/npm-bin.1
@@ -1,40 +1,30 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-BIN" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-bin\fR \-\- Display npm bin folder
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-bin\fR \- Display npm bin folder
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm bin
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Print the folder where npm will install executables\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help prefix
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help root
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index 328ac30451..67c0a6114b 100644
--- a/deps/npm/man/man1/npm-bugs.1
+++ b/deps/npm/man/man1/npm-bugs.1
@@ -1,78 +1,59 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-BUGS" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-bugs\fR \- Bugs for a package in a web browser maybe
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm bugs
npm bugs (with no args in a package dir)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This command tries to guess at the likely location of a package's
bug tracker URL, and then tries to open it using the \fB\-\-browser\fR
config param\. If no package name is provided, it will search for
a \fBpackage\.json\fR in the current folder and use the \fBname\fR property\.
-.
-.SH "CONFIGURATION"
-.
-.SS "browser"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS browser
+.RS 0
+.IP \(bu 2
Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: String
-.
-.IP "" 0
-.
+
+.RE
.P
The browser that is called by the \fBnpm bugs\fR command to open websites\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
+.SS registry
+.RS 0
+.IP \(bu 2
Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: url
-.
-.IP "" 0
-.
+
+.RE
.P
The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help docs
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help view
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-build.1 b/deps/npm/man/man1/npm-build.1
index cc815b63b5..ed530b3860 100644
--- a/deps/npm/man/man1/npm-build.1
+++ b/deps/npm/man/man1/npm-build.1
@@ -1,43 +1,34 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-BUILD" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-build\fR \-\- Build a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-build\fR \- Build a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm build
-.
-.fi
-.
-.IP "\(bu" 4
+.EE
+.RE
+.RS 0
+.IP \(bu 2
\fB\fR:
A folder containing a \fBpackage\.json\fR file in its root\.
-.
-.IP "" 0
-.
-.SH "DESCRIPTION"
+
+.RE
+.SH DESCRIPTION
+.P
This is the plumbing command called by \fBnpm link\fR and \fBnpm install\fR\|\.
-.
.P
It should generally not be called directly\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help link
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-bundle.1 b/deps/npm/man/man1/npm-bundle.1
index 5799f4b19d..7a8355d888 100644
--- a/deps/npm/man/man1/npm-bundle.1
+++ b/deps/npm/man/man1/npm-bundle.1
@@ -1,23 +1,17 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-BUNDLE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-bundle\fR \-\- REMOVED
-.
-.SH "DESCRIPTION"
+\fBnpm-bundle\fR \- REMOVED
+.SH DESCRIPTION
+.P
The \fBnpm bundle\fR command has been removed in 1\.0, for the simple reason
that it is no longer necessary, as the default behavior is now to
install packages into the local space\.
-.
.P
Just use \fBnpm install\fR now to do what \fBnpm bundle\fR used to do\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help install
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
index 3977da0b1a..5a99d11a24 100644
--- a/deps/npm/man/man1/npm-cache.1
+++ b/deps/npm/man/man1/npm-cache.1
@@ -1,100 +1,86 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-CACHE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-cache\fR \-\- Manipulates packages cache
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-cache\fR \- Manipulates packages cache
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm cache add
npm cache add
npm cache add
npm cache add @
+
npm cache ls []
+
npm cache clean []
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Used to add, list, or clear the npm cache folder\.
-.
-.IP "\(bu" 4
+.RS 0
+.IP \(bu 2
add:
Add the specified package to the local cache\. This command is primarily
intended to be used internally by npm, but it can provide a way to
add data to the local installation cache explicitly\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
ls:
Show the data in the cache\. Argument is a path to show in the cache
-folder\. Works a bit like the \fBfind\fR program, but limited by the \fBdepth\fR config\.
-.
-.IP "\(bu" 4
+folder\. Works a bit like the \fBfind\fR program, but limited by the
+\fBdepth\fR config\.
+.IP \(bu 2
clean:
Delete data out of the cache folder\. If an argument is provided, then
it specifies a subpath to delete\. If no argument is provided, then
the entire cache is cleared\.
-.
-.IP "" 0
-.
-.SH "DETAILS"
+
+.RE
+.SH DETAILS
+.P
npm stores cache data in the directory specified in \fBnpm config get cache\fR\|\.
For each package that is added to the cache, three pieces of information are
stored in \fB{cache}/{name}/{version}\fR:
-.
-.IP "\(bu" 4
+.RS 0
+.IP \(bu 2
\|\.\.\./package/package\.json:
The package\.json file, as npm sees it\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
\|\.\.\./package\.tgz:
The tarball for that version\.
-.
-.IP "" 0
-.
+
+.RE
.P
Additionally, whenever a registry request is made, a \fB\|\.cache\.json\fR file
is placed at the corresponding URI, to store the ETag and the requested
data\. This is stored in \fB{cache}/{hostname}/{path}/\.cache\.json\fR\|\.
-.
.P
-Commands that make non\-essential registry requests (such as \fBsearch\fR and \fBview\fR, or the completion scripts) generally specify a minimum timeout\.
+Commands that make non\-essential registry requests (such as \fBsearch\fR and
+\fBview\fR, or the completion scripts) generally specify a minimum timeout\.
If the \fB\|\.cache\.json\fR file is younger than the specified timeout, then
they do not make an HTTP request to the registry\.
-.
-.SH "CONFIGURATION"
-.
-.SS "cache"
+.SH CONFIGURATION
+.SS cache
+.P
Default: \fB~/\.npm\fR on Posix, or \fB%AppData%/npm\-cache\fR on Windows\.
-.
.P
The root cache folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help pack
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index 2ae25687a6..bbd224f76c 100644
--- a/deps/npm/man/man1/npm-completion.1
+++ b/deps/npm/man/man1/npm-completion.1
@@ -1,47 +1,37 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-COMPLETION" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-completion\fR \-\- Tab Completion for npm
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-completion\fR \- Tab Completion for npm
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
\|\. <(npm completion)
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Enables tab\-completion in all npm commands\.
-.
.P
The synopsis above
loads the completions into your current shell\. Adding it to
your ~/\.bashrc or ~/\.zshrc will make the completions available
everywhere\.
-.
.P
You may of course also pipe the output of npm completion to a file
such as \fB/usr/local/etc/bash_completion\.d/npm\fR if you have a system
that will read that file for you\.
-.
.P
When \fBCOMP_CWORD\fR, \fBCOMP_LINE\fR, and \fBCOMP_POINT\fR are defined in the
environment, \fBnpm completion\fR acts in "plumbing mode", and outputs
completions based on the arguments\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 7 developers
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 faq
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help npm
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
index 0b019c7c02..ca7d69d1ba 100644
--- a/deps/npm/man/man1/npm-config.1
+++ b/deps/npm/man/man1/npm-config.1
@@ -1,14 +1,10 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-CONFIG" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-config\fR \-\- Manage the npm configuration files
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-config\fR \- Manage the npm configuration files
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm config set [\-\-global]
npm config get
npm config delete
@@ -17,97 +13,83 @@ npm config edit
npm c [set|get|delete|list]
npm get
npm set [\-\-global]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
npm gets its config settings from the command line, environment
variables, \fBnpmrc\fR files, and in some cases, the \fBpackage\.json\fR file\.
-.
.P
See npm help 5 npmrc for more information about the npmrc files\.
-.
.P
See npm help 7 \fBnpm\-config\fR for a more thorough discussion of the mechanisms
involved\.
-.
.P
The \fBnpm config\fR command can be used to update and edit the contents
of the user and global npmrc files\.
-.
-.SH "Sub\-commands"
+.SH Sub\-commands
+.P
Config supports the following sub\-commands:
-.
-.SS "set"
-.
-.nf
+.SS set
+.P
+.RS 2
+.EX
npm config set key value
-.
-.fi
-.
+.EE
+.RE
.P
Sets the config key to the value\.
-.
.P
If value is omitted, then it sets it to "true"\.
-.
-.SS "get"
-.
-.nf
+.SS get
+.P
+.RS 2
+.EX
npm config get key
-.
-.fi
-.
+.EE
+.RE
.P
Echo the config value to stdout\.
-.
-.SS "list"
-.
-.nf
+.SS list
+.P
+.RS 2
+.EX
npm config list
-.
-.fi
-.
+.EE
+.RE
.P
Show all the config settings\.
-.
-.SS "delete"
-.
-.nf
+.SS delete
+.P
+.RS 2
+.EX
npm config delete key
-.
-.fi
-.
+.EE
+.RE
.P
Deletes the key from all configuration files\.
-.
-.SS "edit"
-.
-.nf
+.SS edit
+.P
+.RS 2
+.EX
npm config edit
-.
-.fi
-.
+.EE
+.RE
.P
Opens the config file in an editor\. Use the \fB\-\-global\fR flag to edit the
global config\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help npm
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index cdfa3520f6..58c01ca287 100644
--- a/deps/npm/man/man1/npm-dedupe.1
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -1,96 +1,74 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-DEDUPE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-dedupe\fR \-\- Reduce duplication
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-dedupe\fR \- Reduce duplication
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm dedupe [package names\.\.\.]
npm ddp [package names\.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Searches the local package tree and attempts to simplify the overall
structure by moving dependencies further up the tree, where they can
be more effectively shared by multiple dependent packages\.
-.
.P
For example, consider this dependency graph:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
a
+\-\- b <\-\- depends on c@1\.0\.x
| `\-\- c@1\.0\.3
`\-\- d <\-\- depends on c@~1\.0\.9
`\-\- c@1\.0\.10
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
In this case, npm help \fBnpm\-dedupe\fR will transform the tree to:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
a
+\-\- b
+\-\- d
`\-\- c@1\.0\.10
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
-Because of the hierarchical nature of node\'s module lookup, b and d
+Because of the hierarchical nature of node's module lookup, b and d
will both get their dependency met by the single c package at the root
level of the tree\.
-.
.P
If a suitable version exists at the target location in the tree
already, then it will be left untouched, but the other duplicates will
be deleted\.
-.
.P
If no suitable version can be found, then a warning is printed, and
nothing is done\.
-.
.P
If any arguments are supplied, then they are filters, and only the
named packages will be touched\.
-.
.P
Note that this operation transforms the dependency tree, and may
result in packages getting updated versions, perhaps from the npm
registry\.
-.
.P
This feature is experimental, and may change in future versions\.
-.
.P
The \fB\-\-tag\fR argument will apply to all of the affected dependencies\. If a
tag with the given name exists, the tagged version is preferred over newer
versions\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help ls
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help update
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
index cc2d18ee52..3ff2f88e9c 100644
--- a/deps/npm/man/man1/npm-deprecate.1
+++ b/deps/npm/man/man1/npm-deprecate.1
@@ -1,48 +1,37 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-DEPRECATE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-deprecate\fR \-\- Deprecate a version of a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-deprecate\fR \- Deprecate a version of a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm deprecate [@]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This command will update the npm registry entry for a package, providing
a deprecation warning to all who attempt to install it\.
-.
.P
It works on version ranges as well as specific versions, so you can do
something like this:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm deprecate my\-thing@"< 0\.2\.3" "critical bug fixed in v0\.2\.3"
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
-Note that you must be the package owner to deprecate something\. See the \fBowner\fR and \fBadduser\fR help topics\.
-.
+Note that you must be the package owner to deprecate something\. See the
+\fBowner\fR and \fBadduser\fR help topics\.
.P
To un\-deprecate a package, specify an empty string (\fB""\fR) for the \fBmessage\fR argument\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
index db3d4e768f..0a55953b0c 100644
--- a/deps/npm/man/man1/npm-docs.1
+++ b/deps/npm/man/man1/npm-docs.1
@@ -1,78 +1,60 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-DOCS" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-docs\fR \- Docs for a package in a web browser maybe
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm docs [ [ \.\.\.]]
npm docs (with no args in a package dir)
npm home [ [ \.\.\.]]
npm home (with no args in a package dir)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This command tries to guess at the likely location of a package's
documentation URL, and then tries to open it using the \fB\-\-browser\fR
config param\. You can pass multiple package names at once\. If no
package name is provided, it will search for a \fBpackage\.json\fR in
the current folder and use the \fBname\fR property\.
-.
-.SH "CONFIGURATION"
-.
-.SS "browser"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS browser
+.RS 0
+.IP \(bu 2
Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: String
-.
-.IP "" 0
-.
+
+.RE
.P
The browser that is called by the \fBnpm docs\fR command to open websites\.
-.
-.SS "registry"
-.
-.IP "\(bu" 4
+.SS registry
+.RS 0
+.IP \(bu 2
Default: https://registry\.npmjs\.org/
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: url
-.
-.IP "" 0
-.
+
+.RE
.P
The base URL of the npm package registry\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help view
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index 036d0715a4..d7f4056154 100644
--- a/deps/npm/man/man1/npm-edit.1
+++ b/deps/npm/man/man1/npm-edit.1
@@ -1,66 +1,50 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-EDIT" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-edit\fR \-\- Edit an installed package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-edit\fR \- Edit an installed package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm edit [@]
-.
-.fi
-.
-.SH "DESCRIPTION"
-Opens the package folder in the default editor (or whatever you\'ve
+.EE
+.RE
+.SH DESCRIPTION
+.P
+Opens the package folder in the default editor (or whatever you've
configured as the npm \fBeditor\fR config \-\- see npm help 7 \fBnpm\-config\fR\|\.)
-.
.P
After it has been edited, the package is rebuilt so as to pick up any
changes in compiled packages\.
-.
.P
For instance, you can do \fBnpm install connect\fR to install connect
into your package, and then \fBnpm edit connect\fR to make a few
changes to your locally installed copy\.
-.
-.SH "CONFIGURATION"
-.
-.SS "editor"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS editor
+.RS 0
+.IP \(bu 2
Default: \fBEDITOR\fR environment variable if set, or \fB"vi"\fR on Posix,
or \fB"notepad"\fR on Windows\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: path
-.
-.IP "" 0
-.
+
+.RE
.P
The command to run for \fBnpm edit\fR or \fBnpm config edit\fR\|\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help explore
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
index c7d570745c..01f91bff91 100644
--- a/deps/npm/man/man1/npm-explore.1
+++ b/deps/npm/man/man1/npm-explore.1
@@ -1,76 +1,57 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-EXPLORE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-explore\fR \-\- Browse an installed package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-explore\fR \- Browse an installed package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm explore [ \-\- ]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Spawn a subshell in the directory of the installed package specified\.
-.
.P
If a command is specified, then it is run in the subshell, which then
immediately terminates\.
-.
.P
-This is particularly handy in the case of git submodules in the \fBnode_modules\fR folder:
-.
-.IP "" 4
-.
-.nf
+This is particularly handy in the case of git submodules in the
+\fBnode_modules\fR folder:
+.P
+.RS 2
+.EX
npm explore some\-dependency \-\- git pull origin master
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
Note that the package is \fInot\fR automatically rebuilt afterwards, so be
sure to use \fBnpm rebuild \fR if you make any changes\.
-.
-.SH "CONFIGURATION"
-.
-.SS "shell"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS shell
+.RS 0
+.IP \(bu 2
Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
Windows
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: path
-.
-.IP "" 0
-.
+
+.RE
.P
The shell to run for the \fBnpm explore\fR command\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help submodule
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help edit
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help rebuild
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help build
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
index 37ba03c796..78864694ac 100644
--- a/deps/npm/man/man1/npm-help-search.1
+++ b/deps/npm/man/man1/npm-help-search.1
@@ -1,59 +1,45 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-HELP\-SEARCH" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-help-search\fR \-\- Search npm help documentation
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-help-search\fR \- Search npm help documentation
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm help\-search some search terms
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This command will search the npm markdown documentation files for the
terms provided, and then list the results, sorted by relevance\.
-.
.P
If only one result is found, then it will show that help topic\.
-.
.P
If the argument to \fBnpm help\fR is not a known help topic, then it will
call \fBhelp\-search\fR\|\. It is rarely if ever necessary to call this
command directly\.
-.
-.SH "CONFIGURATION"
-.
-.SS "long"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS long
+.RS 0
+.IP \(bu 2
Type: Boolean
-.
-.IP "\(bu" 4
+.IP \(bu 2
Default false
-.
-.IP "" 0
-.
+
+.RE
.P
If true, the "long" flag will cause help\-search to output context around
where the terms were found in the documentation\.
-.
.P
If false, then help\-search will just list out the help topics found\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help npm
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 faq
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help help
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
index 7cc361f463..b0456ef22e 100644
--- a/deps/npm/man/man1/npm-help.1
+++ b/deps/npm/man/man1/npm-help.1
@@ -1,77 +1,57 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-HELP" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-help\fR \-\- Get help on npm
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-help\fR \- Get help on npm
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm help
npm help some search terms
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
If supplied a topic, then show the appropriate documentation page\.
-.
.P
If the topic does not exist, or if multiple terms are provided, then run
the \fBhelp\-search\fR command to find a match\. Note that, if \fBhelp\-search\fR
finds a single subject, then it will run \fBhelp\fR on that topic, so unique
matches are equivalent to specifying a topic name\.
-.
-.SH "CONFIGURATION"
-.
-.SS "viewer"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS viewer
+.RS 0
+.IP \(bu 2
Default: "man" on Posix, "browser" on Windows
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: path
-.
-.IP "" 0
-.
+
+.RE
.P
The program to use to view help content\.
-.
.P
Set to \fB"browser"\fR to view html help content in the default web browser\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help npm
-.
-.IP "\(bu" 4
+.IP \(bu 2
README
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 faq
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help help\-search
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 index
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
index 5091fdefd8..93e3845754 100644
--- a/deps/npm/man/man1/npm-init.1
+++ b/deps/npm/man/man1/npm-init.1
@@ -1,43 +1,33 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-INIT" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-init\fR \-\- Interactively create a package\.json file
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-init\fR \- Interactively create a package\.json file
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm init
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This will ask you a bunch of questions, and then write a package\.json for you\.
-.
.P
It attempts to make reasonable guesses about what you want things to be set to,
-and then writes a package\.json file with the options you\'ve selected\.
-.
+and then writes a package\.json file with the options you've selected\.
.P
-If you already have a package\.json file, it\'ll read that first, and default to
+If you already have a package\.json file, it'll read that first, and default to
the options in there\.
-.
.P
It is strictly additive, so it does not delete options from your package\.json
without a really good reason to do so\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
-\fIhttps://github\.com/isaacs/init\-package\-json\fR
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
+https://github\.com/isaacs/init\-package\-json
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help version
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index 7e874f3490..ad6bdf55bb 100644
--- a/deps/npm/man/man1/npm-install.1
+++ b/deps/npm/man/man1/npm-install.1
@@ -1,335 +1,270 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-INSTALL" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-install\fR \-\- Install a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-install\fR \- Install a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm install (with no args in a package dir)
npm install
npm install
npm install
-npm install [\-\-save|\-\-save\-dev|\-\-save\-optional] [\-\-save\-exact]
-npm install @
-npm install @
-npm install @
+npm install [@/] [\-\-save|\-\-save\-dev|\-\-save\-optional] [\-\-save\-exact]
+npm install [@/]@
+npm install [@/]@
+npm install [@/]@
npm i (with any of the previous argument usage)
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This command installs a package, and any packages that it depends on\. If the
package has a shrinkwrap file, the installation of dependencies will be driven
by that\. See npm help shrinkwrap\.
-.
.P
A \fBpackage\fR is:
-.
-.IP "\(bu" 4
+.RS 0
+.IP \(bu 2
a) a folder containing a program described by a package\.json file
-.
-.IP "\(bu" 4
+.IP \(bu 2
b) a gzipped tarball containing (a)
-.
-.IP "\(bu" 4
+.IP \(bu 2
c) a url that resolves to (b)
-.
-.IP "\(bu" 4
+.IP \(bu 2
d) a \fB@\fR that is published on the registry (see npm help 7 \fBnpm\-registry\fR) with (c)
-.
-.IP "\(bu" 4
+.IP \(bu 2
e) a \fB@\fR that points to (d)
-.
-.IP "\(bu" 4
+.IP \(bu 2
f) a \fB\fR that has a "latest" tag satisfying (e)
-.
-.IP "\(bu" 4
+.IP \(bu 2
g) a \fB\fR that resolves to (b)
-.
-.IP "" 0
-.
+
+.RE
.P
Even if you never publish your package, you can still get a lot of
benefits of using npm if you just want to write a node program (a), and
perhaps if you also want to be able to easily install it elsewhere
after packing it up into a tarball (b)\.
-.
-.IP "\(bu" 4
+.RS 0
+.IP \(bu 2
\fBnpm install\fR (in package directory, no arguments):
-.
-.IP
-Install the dependencies in the local node_modules folder\.
-.
-.IP
-In global mode (ie, with \fB\-g\fR or \fB\-\-global\fR appended to the command),
-it installs the current package context (ie, the current working
-directory) as a global package\.
-.
-.IP
-By default, \fBnpm install\fR will install all modules listed as
-dependencies\. With the \fB\-\-production\fR flag,
-npm will not install modules listed in \fBdevDependencies\fR\|\.
-.
-.IP "\(bu" 4
+ Install the dependencies in the local node_modules folder\.
+ In global mode (ie, with \fB\-g\fR or \fB\-\-global\fR appended to the command),
+ it installs the current package context (ie, the current working
+ directory) as a global package\.
+ By default, \fBnpm install\fR will install all modules listed as
+ dependencies\. With the \fB\-\-production\fR flag,
+ npm will not install modules listed in \fBdevDependencies\fR\|\.
+.IP \(bu 2
\fBnpm install \fR:
-.
-.IP
-Install a package that is sitting in a folder on the filesystem\.
-.
-.IP "\(bu" 4
+ Install a package that is sitting in a folder on the filesystem\.
+.IP \(bu 2
\fBnpm install \fR:
-.
-.IP
-Install a package that is sitting on the filesystem\. Note: if you just want
-to link a dev directory into your npm root, you can do this more easily by
-using \fBnpm link\fR\|\.
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install \./package\.tgz
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
+ Install a package that is sitting on the filesystem\. Note: if you just want
+ to link a dev directory into your npm root, you can do this more easily by
+ using \fBnpm link\fR\|\.
+ Example:
+.P
+.RS 2
+.EX
+ npm install \./package\.tgz
+.EE
+.RE
+.IP \(bu 2
\fBnpm install \fR:
-.
-.IP
-Fetch the tarball url, and then install it\. In order to distinguish between
-this and other options, the argument must start with "http://" or "https://"
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
-.
-.fi
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install [\-\-save|\-\-save\-dev|\-\-save\-optional]\fR:
-.
-.IP
-Do a \fB@\fR install, where \fB\fR is the "tag" config\. (See npm help 7 \fBnpm\-config\fR\|\.)
-.
-.IP
-In most cases, this will install the latest version
-of the module published on npm\.
-.
-.IP
-Example:
-.
-.IP
- npm install sax
-.
-.IP
-\fBnpm install\fR takes 3 exclusive, optional flags which save or update
-the package version in your main package\.json:
-.
-.IP "\(bu" 4
+ Fetch the tarball url, and then install it\. In order to distinguish between
+ this and other options, the argument must start with "http://" or "https://"
+ Example:
+.P
+.RS 2
+.EX
+ npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
+.EE
+.RE
+.IP \(bu 2
+\fBnpm install [@/] [\-\-save|\-\-save\-dev|\-\-save\-optional]\fR:
+ Do a \fB@\fR install, where \fB\fR is the "tag" config\. (See
+ npm help 7 \fBnpm\-config\fR\|\.)
+ In most cases, this will install the latest version
+ of the module published on npm\.
+ Example:
+.P
+.RS 2
+.EX
+ npm install sax
+.EE
+.RE
+ \fBnpm install\fR takes 3 exclusive, optional flags which save or update
+ the package version in your main package\.json:
+.RS 0
+.IP \(bu 2
\fB\-\-save\fR: Package will appear in your \fBdependencies\fR\|\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB\-\-save\-dev\fR: Package will appear in your \fBdevDependencies\fR\|\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB\-\-save\-optional\fR: Package will appear in your \fBoptionalDependencies\fR\|\.
-.
-.IP
When using any of the above options to save dependencies to your
package\.json, there is an additional, optional flag:
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB\-\-save\-exact\fR: Saved dependencies will be configured with an
-exact version rather than using npm\'s default semver range
+exact version rather than using npm's default semver range
operator\.
-.
-.IP
+\fB\fR is optional\. The package will be downloaded from the registry
+associated with the specified scope\. If no registry is associated with
+the given scope the default registry is assumed\. See npm help 7 \fBnpm\-scope\fR\|\.
+Note: if you do not include the @\-symbol on your scope name, npm will
+interpret this as a GitHub repository instead, see below\. Scopes names
+must also be followed by a slash\.
Examples:
-.
-.IP
- npm install sax \-\-save
- npm install node\-tap \-\-save\-dev
- npm install dtrace\-provider \-\-save\-optional
- npm install readable\-stream \-\-save \-\-save\-exact
-.
-.IP
-\fBNote\fR: If there is a file or folder named \fB\fR in the current
-working directory, then it will try to install that, and only try to
-fetch the package by name if it is not valid\.
-.
-.IP "" 0
-
-.
-.IP "\(bu" 4
-\fBnpm install @\fR:
-.
-.IP
-Install the version of the package that is referenced by the specified tag\.
-If the tag does not exist in the registry data for that package, then this
-will fail\.
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install sax@latest
-.
-.fi
-.
-.IP "" 0
+.P
+.RS 2
+.EX
+npm install sax \-\-save
+npm install githubname/reponame
+npm install @myorg/privatepackage
+npm install node\-tap \-\-save\-dev
+npm install dtrace\-provider \-\-save\-optional
+npm install readable\-stream \-\-save \-\-save\-exact
+.EE
+.RE
-.
-.IP "\(bu" 4
-\fBnpm install @\fR:
-.
-.IP
-Install the specified version of the package\. This will fail if the version
-has not been published to the registry\.
-.
-.IP
-Example:
-.
-.IP "" 4
-.
-.nf
- npm install sax@0\.1\.1
-.
-.fi
-.
-.IP "" 0
+.RE
-.
-.IP "\(bu" 4
-\fBnpm install @\fR:
-.
-.IP
-Install a version of the package matching the specified version range\. This
-will follow the same rules for resolving dependencies described in npm help 5 \fBpackage\.json\fR\|\.
-.
-.IP
-Note that most version ranges must be put in quotes so that your shell will
-treat it as a single argument\.
-.
-.IP
-Example:
-.
-.IP
- npm install sax@">=0\.1\.0 <0\.2\.0"
-.
-.IP "\(bu" 4
+.RE
+.P
+.RS 2
+.EX
+**Note**: If there is a file or folder named `` in the current
+working directory, then it will try to install that, and only try to
+fetch the package by name if it is not valid\.
+.EE
+.RE
+.RS 0
+.IP \(bu 2
+\fBnpm install [@/]@\fR:
+ Install the version of the package that is referenced by the specified tag\.
+ If the tag does not exist in the registry data for that package, then this
+ will fail\.
+ Example:
+.P
+.RS 2
+.EX
+ npm install sax@latest
+ npm install @myorg/mypackage@latest
+.EE
+.RE
+.IP \(bu 2
+\fBnpm install [@/]@\fR:
+ Install the specified version of the package\. This will fail if the
+ version has not been published to the registry\.
+ Example:
+.P
+.RS 2
+.EX
+ npm install sax@0\.1\.1
+ npm install @myorg/privatepackage@1\.5\.0
+.EE
+.RE
+.IP \(bu 2
+\fBnpm install [@/]@\fR:
+ Install a version of the package matching the specified version range\. This
+ will follow the same rules for resolving dependencies described in npm help 5 \fBpackage\.json\fR\|\.
+ Note that most version ranges must be put in quotes so that your shell will
+ treat it as a single argument\.
+ Example:
+.P
+.RS 2
+.EX
+ npm install sax@">=0\.1\.0 <0\.2\.0"
+ npm install @myorg/privatepackage@">=0\.1\.0 <0\.2\.0"
+.EE
+.RE
+.IP \(bu 2
+\fBnpm install /\fR:
+ Install the package at \fBhttps://github\.com/githubname/githubrepo" by
+ attempting to clone it using\fRgit`\.
+ Example:
+.P
+.RS 2
+.EX
+ npm install mygithubuser/myproject
+.EE
+.RE
+ To reference a package in a git repo that is not on GitHub, see git
+ remote urls below\.
+.IP \(bu 2
\fBnpm install \fR:
-.
-.IP
-Install a package by cloning a git remote url\. The format of the git
-url is:
-.
-.IP
- ://[@][#]
-.
-.IP
-\fB\fR is one of \fBgit\fR, \fBgit+ssh\fR, \fBgit+http\fR, or \fBgit+https\fR\|\. If no \fB\fR is specified, then \fBmaster\fR is
-used\.
-.
-.IP
-Examples:
-.
-.IP "" 4
-.
-.nf
- git+ssh://git@github\.com:npm/npm\.git#v1\.0\.27
- git+https://isaacs@github\.com/npm/npm\.git
- git://github\.com/npm/npm\.git#v1\.0\.27
-.
-.fi
-.
-.IP "" 0
+ Install a package by cloning a git remote url\. The format of the git
+ url is:
+.P
+.RS 2
+.EX
+ ://[@][#]
+.EE
+.RE
+ \fB\fR is one of \fBgit\fR, \fBgit+ssh\fR, \fBgit+http\fR, or
+ \fBgit+https\fR\|\. If no \fB\fR is specified, then \fBmaster\fR is
+ used\.
+ Examples:
+.P
+.RS 2
+.EX
+ git+ssh://git@github\.com:npm/npm\.git#v1\.0\.27
+ git+https://isaacs@github\.com/npm/npm\.git
+ git://github\.com/npm/npm\.git#v1\.0\.27
+.EE
+.RE
-.
-.IP "" 0
-.
+.RE
.P
You may combine multiple arguments, and even multiple types of arguments\.
For example:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm install sax@">=0\.1\.0 <0\.2\.0" bench supervisor
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
The \fB\-\-tag\fR argument will apply to all of the specified install targets\. If a
tag with the given name exists, the tagged version is preferred over newer
versions\.
-.
.P
The \fB\-\-force\fR argument will force npm to fetch remote resources even if a
local copy exists on disk\.
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm install sax \-\-force
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
The \fB\-\-global\fR argument will cause npm to install the package globally
rather than locally\. See npm help 5 \fBnpm\-folders\fR\|\.
-.
.P
The \fB\-\-link\fR argument will cause npm to link global installs into the
local space in some cases\.
-.
.P
The \fB\-\-no\-bin\-links\fR argument will prevent npm from creating symlinks for
any binaries the package might contain\.
-.
.P
The \fB\-\-no\-optional\fR argument will prevent optional dependencies from
being installed\.
-.
.P
The \fB\-\-no\-shrinkwrap\fR argument, which will ignore an available
shrinkwrap file and use the package\.json instead\.
-.
.P
The \fB\-\-nodedir=/path/to/node/source\fR argument will allow npm to find the
node source code so that npm can compile native modules\.
-.
.P
See npm help 7 \fBnpm\-config\fR\|\. Many of the configuration params have some
-effect on installation, since that\'s most of what npm does\.
-.
-.SH "ALGORITHM"
+effect on installation, since that's most of what npm does\.
+.SH ALGORITHM
+.P
To install a package, npm uses the following algorithm:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
install(where, what, family, ancestors)
fetch what, unpack to /node_modules/
for each dep in what\.dependencies
@@ -339,103 +274,78 @@ for each dep@version in what\.dependencies
and not in
add precise version deps to
install(/node_modules/, dep, family)
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
For this \fBpackage{dep}\fR structure: \fBA{B,C}, B{C}, C{D}\fR,
this algorithm produces:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
A
+\-\- B
`\-\- C
`\-\- D
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
That is, the dependency from B to C is satisfied by the fact that A
already caused C to be installed at a higher level\.
-.
.P
See npm help 5 folders for a more detailed description of the specific
folder structures that npm creates\.
-.
-.SS "Limitations of npm's Install Algorithm"
+.SS Limitations of npm's Install Algorithm
+.P
There are some very rare and pathological edge\-cases where a cycle can
cause npm to try to install a never\-ending tree of packages\. Here is
the simplest case:
-.
-.IP "" 4
-.
-.nf
-A \-> B \-> A\' \-> B\' \-> A \-> B \-> A\' \-> B\' \-> A \-> \.\.\.
-.
-.fi
-.
-.IP "" 0
-.
-.P
-where \fBA\fR is some version of a package, and \fBA\'\fR is a different version
+.P
+.RS 2
+.EX
+A \-> B \-> A' \-> B' \-> A \-> B \-> A' \-> B' \-> A \-> \.\.\.
+.EE
+.RE
+.P
+where \fBA\fR is some version of a package, and \fBA'\fR is a different version
of the same package\. Because \fBB\fR depends on a different version of \fBA\fR
than the one that is already in the tree, it must install a separate
-copy\. The same is true of \fBA\'\fR, which must install \fBB\'\fR\|\. Because \fBB\'\fR
+copy\. The same is true of \fBA'\fR, which must install \fBB'\fR\|\. Because \fBB'\fR
depends on the original version of \fBA\fR, which has been overridden, the
cycle falls into infinite regress\.
-.
.P
-To avoid this situation, npm flat\-out refuses to install any \fBname@version\fR that is already present anywhere in the tree of package
+To avoid this situation, npm flat\-out refuses to install any
+\fBname@version\fR that is already present anywhere in the tree of package
folder ancestors\. A more correct, but more complex, solution would be
to symlink the existing version into the new location\. If this ever
affects a real use\-case, it will be investigated\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help update
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help link
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help rebuild
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help build
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help tag
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help rm
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help shrinkwrap
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 15d45e4e07..11ef2dca14 100644
--- a/deps/npm/man/man1/npm-link.1
+++ b/deps/npm/man/man1/npm-link.1
@@ -1,119 +1,100 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-LINK" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-link\fR \-\- Symlink a package folder
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-link\fR \- Symlink a package folder
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm link (in package folder)
-npm link
+npm link [@/]
npm ln (with any of the previous argument usage)
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Package linking is a two\-step process\.
-.
.P
First, \fBnpm link\fR in a package folder will create a globally\-installed
-symbolic link from \fBprefix/package\-name\fR to the current folder\.
-.
+symbolic link from \fBprefix/package\-name\fR to the current folder (see
+npm help 7 \fBnpm\-config\fR for the value of \fBprefix\fR)\.
.P
Next, in some other location, \fBnpm link package\-name\fR will create a
symlink from the local \fBnode_modules\fR folder to the global symlink\.
-.
.P
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\.
.P
When creating tarballs for \fBnpm publish\fR, the linked packages are
"snapshotted" to their current state by resolving the symbolic links\.
-.
.P
-This is
-handy for installing your own stuff, so that you can work on it and test it
-iteratively without having to continually rebuild\.
-.
+This is handy for installing your own stuff, so that you can work on it and
+test it iteratively without having to continually rebuild\.
.P
For example:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
cd ~/projects/node\-redis # go into the package directory
npm link # creates global link
cd ~/projects/node\-bloggy # go into some other package directory\.
npm link redis # link\-install the package
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
Now, any changes to ~/projects/node\-redis will be reflected in
~/projects/node\-bloggy/node_modules/redis/
-.
.P
You may also shortcut the two steps in one\. For example, to do the
above use\-case in a shorter way:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
cd ~/projects/node\-bloggy # go into the dir of your main project
npm link \.\./node\-redis # link the dir of your dependency
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
The second line is the equivalent of doing:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
(cd \.\./node\-redis; npm link)
npm link redis
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
That is, it first creates a global link, and then links the global
-installation target into your project\'s \fBnode_modules\fR folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+installation target into your project's \fBnode_modules\fR folder\.
+.P
+If your linked package is scoped (see npm help 7 \fBnpm\-scope\fR) your link command must
+include that scope, e\.g\.
+.P
+.RS 2
+.EX
+npm link @myorg/privatepackage
+.EE
+.RE
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 7 developers
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 faq
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index 1584fb0f28..64db5a46eb 100644
--- a/deps/npm/man/man1/npm-ls.1
+++ b/deps/npm/man/man1/npm-ls.1
@@ -1,146 +1,111 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-LS" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-ls\fR \-\- List installed packages
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm list [ \.\.\.]
-npm ls [ \.\.\.]
-npm la [ \.\.\.]
-npm ll [ \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
+\fBnpm-ls\fR \- List installed packages
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm list [[@/] \.\.\.]
+npm ls [[@/] \.\.\.]
+npm la [[@/] \.\.\.]
+npm ll [[@/] \.\.\.]
+.EE
+.RE
+.SH DESCRIPTION
+.P
This command will print to stdout all the versions of packages that are
installed, as well as their dependencies, in a tree\-structure\.
-.
.P
Positional arguments are \fBname@version\-range\fR identifiers, which will
limit the results to only the paths to the packages named\. Note that
nested packages will \fIalso\fR show the paths to the specified packages\.
-For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
-.
-.IP "" 4
-.
-.nf
-npm@1.4.28 /path/to/npm
+For example, running \fBnpm ls promzard\fR in npm's source tree will show:
+.P
+.RS 2
+.EX
+npm@2.0.0 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
It will print out extraneous, missing, and invalid packages\.
-.
.P
If a project specifies git urls for dependencies these are shown
in parentheses after the name@version to make it easier for users to
recognize potential forks of a project\.
-.
.P
When run as \fBll\fR or \fBla\fR, it shows extended information by default\.
-.
-.SH "CONFIGURATION"
-.
-.SS "json"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS json
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Show information in JSON format\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
+.SS long
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
+.SS parseable
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
+.SS global
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
List packages in the global install prefix instead of in the current
project\.
-.
-.SS "depth"
-.
-.IP "\(bu" 4
+.SS depth
+.RS 0
+.IP \(bu 2
Type: Int
-.
-.IP "" 0
-.
+
+.RE
.P
Max display depth of the dependency tree\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help link
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help prune
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help outdated
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help update
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
index 7376fcd24a..589bd6d527 100644
--- a/deps/npm/man/man1/npm-outdated.1
+++ b/deps/npm/man/man1/npm-outdated.1
@@ -1,102 +1,79 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-OUTDATED" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-outdated\fR \-\- Check for outdated packages
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-outdated\fR \- Check for outdated packages
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm outdated [ [ \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This command will check the registry to see if any (or, specific) installed
packages are currently outdated\.
-.
.P
-The resulting field \'wanted\' shows the latest version according to the
-version specified in the package\.json, the field \'latest\' the very latest
+The resulting field 'wanted' shows the latest version according to the
+version specified in the package\.json, the field 'latest' the very latest
version of the package\.
-.
-.SH "CONFIGURATION"
-.
-.SS "json"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS json
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Show information in JSON format\.
-.
-.SS "long"
-.
-.IP "\(bu" 4
+.SS long
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Show extended information\.
-.
-.SS "parseable"
-.
-.IP "\(bu" 4
+.SS parseable
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Show parseable output instead of tree view\.
-.
-.SS "global"
-.
-.IP "\(bu" 4
+.SS global
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Check packages in the global install prefix instead of in the current
project\.
-.
-.SS "depth"
-.
-.IP "\(bu" 4
+.SS depth
+.RS 0
+.IP \(bu 2
Type: Int
-.
-.IP "" 0
-.
+
+.RE
.P
Max depth for checking dependency tree\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help update
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
index f204431e5d..c073a8b873 100644
--- a/deps/npm/man/man1/npm-owner.1
+++ b/deps/npm/man/man1/npm-owner.1
@@ -1,58 +1,47 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-OWNER" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-owner\fR \-\- Manage package owners
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-owner\fR \- Manage package owners
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm owner ls
npm owner add
npm owner rm
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Manage ownership of published packages\.
-.
-.IP "\(bu" 4
+.RS 0
+.IP \(bu 2
ls:
List all the users who have access to modify a package and push new versions\.
Handy when you need to know who to bug for help\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
add:
Add a new user as a maintainer of a package\. This user is enabled to modify
metadata, publish new versions, and add other owners\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
rm:
Remove a user from the package owner list\. This immediately revokes their
privileges\.
-.
-.IP "" 0
-.
+
+.RE
.P
Note that there is only one level of access\. Either you can modify a package,
-or you can\'t\. Future versions may contain more fine\-grained access levels, but
+or you can't\. Future versions may contain more fine\-grained access levels, but
that is not implemented at this time\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help adduser
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 disputes
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
index 951d209adb..e90f3789bd 100644
--- a/deps/npm/man/man1/npm-pack.1
+++ b/deps/npm/man/man1/npm-pack.1
@@ -1,48 +1,37 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-PACK" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-pack\fR \-\- Create a tarball from a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-pack\fR \- Create a tarball from a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm pack [ [ \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
-For anything that\'s installable (that is, a package folder, tarball,
+.EE
+.RE
+.SH DESCRIPTION
+.P
+For anything that's installable (that is, a package folder, tarball,
tarball url, name@tag, name@version, or name), this command will fetch
it to the cache, and then copy the tarball to the current working
directory as \fB\-\.tgz\fR, and then write the filenames out to
stdout\.
-.
.P
If the same package is specified multiple times, then the file will be
overwritten the second time\.
-.
.P
If no arguments are supplied, then npm packs the current package folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help cache
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index 9cc3f7cadd..373f5e4abe 100644
--- a/deps/npm/man/man1/npm-prefix.1
+++ b/deps/npm/man/man1/npm-prefix.1
@@ -1,40 +1,34 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-PREFIX" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-prefix\fR \-\- Display prefix
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm prefix
-.
-.fi
-.
-.SH "DESCRIPTION"
-Print the prefix to standard out\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+\fBnpm-prefix\fR \- Display prefix
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm prefix [\-g]
+.EE
+.RE
+.SH DESCRIPTION
+.P
+Print the local prefix to standard out\. This is the closest parent directory
+to contain a package\.json file unless \fB\-g\fR is also specified\.
+.P
+If \fB\-g\fR is specified, this will be the value of the global prefix\. See
+npm help 7 \fBnpm\-config\fR for more detail\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help root
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help bin
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
index 71bb77c407..3c8a66a7fc 100644
--- a/deps/npm/man/man1/npm-prune.1
+++ b/deps/npm/man/man1/npm-prune.1
@@ -1,42 +1,33 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-PRUNE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-prune\fR \-\- Remove extraneous packages
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-prune\fR \- Remove extraneous packages
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm prune [ [ [ [\-\-tag ]
npm publish [\-\-tag ]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Publishes a package to the registry so that it can be installed by name\.
-.
-.IP "\(bu" 4
+.P
+By default npm will publish to the public registry\. This can be overridden by
+specifying a different default registry or using a npm help 7 \fBnpm\-scope\fR in the name
+(see npm help 5 \fBpackage\.json\fR)\.
+.RS 0
+.IP \(bu 2
\fB\fR:
A folder containing a package\.json file
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB\fR:
A url or file path to a gzipped tar archive containing a single folder
with a package\.json file inside\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB[\-\-tag ]\fR
Registers the published package with the given tag, such that \fBnpm install
@\fR will install this version\. By default, \fBnpm publish\fR updates
and \fBnpm install\fR installs the \fBlatest\fR tag\.
-.
-.IP "" 0
-.
+
+.RE
.P
Fails if the package name and version combination already exists in
-the registry\.
-.
+the specified registry\.
.P
Once a package is published with a given name and version, that
specific name and version combination can never be used again, even if
it is removed with npm help unpublish\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help adduser
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help owner
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help deprecate
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help tag
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index 4130eb773f..f8d52a9a1a 100644
--- a/deps/npm/man/man1/npm-rebuild.1
+++ b/deps/npm/man/man1/npm-rebuild.1
@@ -1,37 +1,31 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-REBUILD" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-rebuild\fR \-\- Rebuild a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-rebuild\fR \- Rebuild a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm rebuild [ [ \.\.\.]]
npm rb [ [ \.\.\.]]
-.
-.fi
-.
-.IP "\(bu" 4
+.EE
+.RE
+.RS 0
+.IP \(bu 2
\fB\fR:
The package to rebuild
-.
-.IP "" 0
-.
-.SH "DESCRIPTION"
+
+.RE
+.SH DESCRIPTION
+.P
This command runs the \fBnpm build\fR command on the matched folders\. This is useful
when you install a new version of node, and must recompile all your C++ addons with
the new binary\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help build
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
index 557a3566ea..57c48fb3f5 100644
--- a/deps/npm/man/man1/npm-repo.1
+++ b/deps/npm/man/man1/npm-repo.1
@@ -1,47 +1,37 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-REPO" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-repo\fR \-\- Open package repository page in the browser
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-repo\fR \- Open package repository page in the browser
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm repo
npm repo (with no args in a package dir)
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command tries to guess at the likely location of a package\'s
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This command tries to guess at the likely location of a package's
repository URL, and then tries to open it using the \fB\-\-browser\fR
config param\. If no package name is provided, it will search for
a \fBpackage\.json\fR in the current folder and use the \fBname\fR property\.
-.
-.SH "CONFIGURATION"
-.
-.SS "browser"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS browser
+.RS 0
+.IP \(bu 2
Default: OS X: \fB"open"\fR, Windows: \fB"start"\fR, Others: \fB"xdg\-open"\fR
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: String
-.
-.IP "" 0
-.
+
+.RE
.P
The browser that is called by the \fBnpm repo\fR command to open websites\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help docs
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index 828a43f30f..a4f95db758 100644
--- a/deps/npm/man/man1/npm-restart.1
+++ b/deps/npm/man/man1/npm-restart.1
@@ -1,42 +1,32 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-RESTART" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-restart\fR \-\- Start a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm restart
-.
-.fi
-.
-.SH "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
+\fBnpm-restart\fR \- Start a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm restart [\-\- ]
+.EE
+.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\.
-.
.P
If no version is specified, then it restarts the "active" version\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help run\-script
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help test
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help start
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help stop
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-rm.1 b/deps/npm/man/man1/npm-rm.1
index 424314c7d5..e9df0ff14f 100644
--- a/deps/npm/man/man1/npm-rm.1
+++ b/deps/npm/man/man1/npm-rm.1
@@ -1,44 +1,34 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-RM" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-rm\fR \-\- Remove a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-rm\fR \- Remove a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm rm
npm r
npm uninstall
npm un
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This uninstalls a package, completely removing everything npm installed
on its behalf\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help prune
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
index 463eeaf934..b80a8550e4 100644
--- a/deps/npm/man/man1/npm-root.1
+++ b/deps/npm/man/man1/npm-root.1
@@ -1,40 +1,30 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-ROOT" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-root\fR \-\- Display npm root
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-root\fR \- Display npm root
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm root
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Print the effective \fBnode_modules\fR folder to standard out\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help prefix
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help bin
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index aa2740c119..7ee4fc7912 100644
--- a/deps/npm/man/man1/npm-run-script.1
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -1,45 +1,35 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-RUN\-SCRIPT" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-run-script\fR \-\- Run arbitrary package scripts
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm run\-script [] [command]
-npm run [] [command]
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs an arbitrary command from a package\'s \fB"scripts"\fR object\.
+\fBnpm-run-script\fR \- Run arbitrary package scripts
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm run\-script [command] [\-\- ]
+npm run [command] [\-\- ]
+.EE
+.RE
+.SH DESCRIPTION
+.P
+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\.
-.
.P
It is used by the test, start, restart, and stop commands, but can be
called directly, as well\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help test
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help start
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help restart
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help stop
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index 2c7edcd2ad..16b3fa4fff 100644
--- a/deps/npm/man/man1/npm-search.1
+++ b/deps/npm/man/man1/npm-search.1
@@ -1,62 +1,48 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-SEARCH" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-search\fR \-\- Search for packages
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-search\fR \- Search for packages
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm search [\-\-long] [search terms \.\.\.]
npm s [search terms \.\.\.]
npm se [search terms \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Search the registry for packages matching the search terms\.
-.
.P
-If a term starts with \fB/\fR, then it\'s interpreted as a regular expression\.
+If a term starts with \fB/\fR, then it's interpreted as a regular expression\.
A trailing \fB/\fR will be ignored in this case\. (Note that many regular
expression characters must be escaped or quoted in most shells\.)
-.
-.SH "CONFIGURATION"
-.
-.SS "long"
-.
-.IP "\(bu" 4
+.SH CONFIGURATION
+.SS long
+.RS 0
+.IP \(bu 2
Default: false
-.
-.IP "\(bu" 4
+.IP \(bu 2
Type: Boolean
-.
-.IP "" 0
-.
+
+.RE
.P
Display full package descriptions and other long text across multiple
lines\. When disabled (default) search results are truncated to fit
neatly on a single line\. Modules with extremely long names will
fall on multiple lines\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help view
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 2a053a5b0b..e154851b21 100644
--- a/deps/npm/man/man1/npm-shrinkwrap.1
+++ b/deps/npm/man/man1/npm-shrinkwrap.1
@@ -1,44 +1,37 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-SHRINKWRAP" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-shrinkwrap\fR \-\- Lock down dependency versions
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-shrinkwrap\fR \- Lock down dependency versions
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm shrinkwrap
-.
-.fi
-.
-.SH "DESCRIPTION"
-This command locks down the versions of a package\'s dependencies so
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This command locks down the versions of a package's dependencies so
that you can control exactly which versions of each dependency will be
used when your package is installed\. The "package\.json" file is still
required if you want to use "npm install"\.
-.
.P
-By default, "npm install" recursively installs the target\'s
+By default, "npm install" recursively installs the target's
dependencies (as specified in package\.json), choosing the latest
-available version that satisfies the dependency\'s semver pattern\. In
+available version that satisfies the dependency's semver pattern\. In
some situations, particularly when shipping software where each change
-is tightly managed, it\'s desirable to fully specify each version of
+is tightly managed, it's desirable to fully specify each version of
each dependency recursively so that subsequent builds and deploys do
not inadvertently pick up newer versions of a dependency that satisfy
the semver pattern\. Specifying specific semver patterns in each
-dependency\'s package\.json would facilitate this, but that\'s not always
+dependency's package\.json would facilitate this, but that's not always
possible or desirable, as when another author owns the npm package\.
-It\'s also possible to check dependencies directly into source control,
+It's also possible to check dependencies directly into source control,
but that may be undesirable for other reasons\.
-.
.P
As an example, consider package A:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
{
"name": "A",
"version": "0\.1\.0",
@@ -46,17 +39,13 @@ As an example, consider package A:
"B": "<0\.1\.0"
}
}
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
package B:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
{
"name": "B",
"version": "0\.0\.1",
@@ -64,83 +53,62 @@ package B:
"C": "<0\.1\.0"
}
}
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
and package C:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
{
"name": "C,
"version": "0\.0\.1"
}
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
If these are the only versions of A, B, and C available in the
registry, then a normal "npm install A" will install:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
A@0\.1\.0
`\-\- B@0\.0\.1
`\-\- C@0\.0\.1
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
However, if B@0\.0\.2 is published, then a fresh "npm install A" will
install:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
A@0\.1\.0
`\-\- B@0\.0\.2
`\-\- C@0\.0\.1
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
-assuming the new version did not modify B\'s dependencies\. Of course,
+assuming the new version did not modify B's dependencies\. Of course,
the new version of B could include a new version of C and any number
of new dependencies\. If such changes are undesirable, the author of A
-could specify a dependency on B@0\.0\.1\. However, if A\'s author and B\'s
-author are not the same person, there\'s no way for A\'s author to say
+could specify a dependency on B@0\.0\.1\. However, if A's author and B's
+author are not the same person, there's no way for A's author to say
that he or she does not want to pull in newly published versions of C
-when B hasn\'t changed at all\.
-.
+when B hasn't changed at all\.
+.P
+In this case, A's author can run
.P
-In this case, A\'s author can run
-.
-.IP "" 4
-.
-.nf
+.RS 2
+.EX
npm shrinkwrap
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
This generates npm\-shrinkwrap\.json, which will look something like this:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
{
"name": "A",
"version": "0\.1\.0",
@@ -155,79 +123,68 @@ This generates npm\-shrinkwrap\.json, which will look something like this:
}
}
}
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
The shrinkwrap command has locked down the dependencies based on
-what\'s currently installed in node_modules\. When "npm install"
+what's currently installed in node_modules\. When "npm install"
installs a package with a npm\-shrinkwrap\.json file in the package
root, the shrinkwrap file (rather than package\.json files) completely
drives the installation of that package and all of its dependencies
(recursively)\. So now the author publishes A@0\.1\.0, and subsequent
installs of this package will use B@0\.0\.1 and C@0\.1\.0, regardless the
-dependencies and versions listed in A\'s, B\'s, and C\'s package\.json
+dependencies and versions listed in A's, B's, and C's package\.json
files\.
-.
-.SS "Using shrinkwrapped packages"
+.SS Using shrinkwrapped packages
+.P
Using a shrinkwrapped package is no different than using any other
package: you can "npm install" it by hand, or add a dependency to your
package\.json file and "npm install" it\.
-.
-.SS "Building shrinkwrapped packages"
+.SS Building shrinkwrapped packages
+.P
To shrinkwrap an existing package:
-.
-.IP "1" 4
+.RS 0
+.IP 1. 3
Run "npm install" in the package root to install the current
versions of all dependencies\.
-.
-.IP "2" 4
+.IP 2. 3
Validate that the package works as expected with these versions\.
-.
-.IP "3" 4
+.IP 3. 3
Run "npm shrinkwrap", add npm\-shrinkwrap\.json to git, and publish
your package\.
-.
-.IP "" 0
-.
+
+.RE
.P
To add or update a dependency in a shrinkwrapped package:
-.
-.IP "1" 4
+.RS 0
+.IP 1. 3
Run "npm install" in the package root to install the current
versions of all dependencies\.
-.
-.IP "2" 4
+.IP 2. 3
Add or update dependencies\. "npm install" each new or updated
package individually and then update package\.json\. Note that they
must be explicitly named in order to be installed: running \fBnpm
install\fR with no arguments will merely reproduce the existing
shrinkwrap\.
-.
-.IP "3" 4
+.IP 3. 3
Validate that the package works as expected with the new
dependencies\.
-.
-.IP "4" 4
+.IP 4. 3
Run "npm shrinkwrap", commit the new npm\-shrinkwrap\.json, and
publish your package\.
-.
-.IP "" 0
-.
+
+.RE
.P
You can use npm help outdated to view dependencies with newer versions
available\.
-.
-.SS "Other Notes"
-A shrinkwrap file must be consistent with the package\'s package\.json
+.SS Other Notes
+.P
+A shrinkwrap file must be consistent with the package's package\.json
file\. "npm shrinkwrap" will fail if required dependencies are not
already installed, since that would result in a shrinkwrap that
-wouldn\'t actually work\. Similarly, the command will fail if there are
+wouldn't actually work\. Similarly, the command will fail if there are
extraneous packages (not referenced by package\.json), since that would
indicate that package\.json is not correct\.
-.
.P
Since "npm shrinkwrap" is intended to lock down your dependencies for
production use, \fBdevDependencies\fR will not be included unless you
@@ -235,31 +192,27 @@ explicitly set the \fB\-\-dev\fR flag when you run \fBnpm shrinkwrap\fR\|\. If
installed \fBdevDependencies\fR are excluded, then npm will print a
warning\. If you want them to be installed with your module by
default, please consider adding them to \fBdependencies\fR instead\.
-.
.P
-If shrinkwrapped package A depends on shrinkwrapped package B, B\'s
+If shrinkwrapped package A depends on shrinkwrapped package B, B's
shrinkwrap will not be used as part of the installation of A\. However,
-because A\'s shrinkwrap is constructed from a valid installation of B
-and recursively specifies all dependencies, the contents of B\'s
-shrinkwrap will implicitly be included in A\'s shrinkwrap\.
-.
-.SS "Caveats"
+because A's shrinkwrap is constructed from a valid installation of B
+and recursively specifies all dependencies, the contents of B's
+shrinkwrap will implicitly be included in A's shrinkwrap\.
+.SS Caveats
+.P
If you wish to lock down the specific bytes included in a package, for
example to have 100% confidence in being able to reproduce a
deployment or build, then you ought to check your dependencies into
source control, or pursue some other mechanism that can verify
contents rather than versions\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help ls
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
index bbcfee19eb..211225b259 100644
--- a/deps/npm/man/man1/npm-star.1
+++ b/deps/npm/man/man1/npm-star.1
@@ -1,39 +1,30 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-STAR" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-star\fR \-\- Mark your favorite packages
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-star\fR \- Mark your favorite packages
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm star [, \.\.\.]
npm unstar [, \.\.\.]
-.
-.fi
-.
-.SH "DESCRIPTION"
-"Starring" a package means that you have some interest in it\. It\'s
+.EE
+.RE
+.SH DESCRIPTION
+.P
+"Starring" a package means that you have some interest in it\. It's
a vaguely positive way to show that you care\.
-.
.P
"Unstarring" is the same thing, but in reverse\.
-.
.P
-It\'s a boolean thing\. Starring repeatedly has no additional effect\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+It's a boolean thing\. Starring repeatedly has no additional effect\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help view
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help whoami
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help adduser
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
index 9b2d6d187e..455cf4fcbc 100644
--- a/deps/npm/man/man1/npm-stars.1
+++ b/deps/npm/man/man1/npm-stars.1
@@ -1,40 +1,31 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-STARS" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-stars\fR \-\- View packages marked as favorites
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-stars\fR \- View packages marked as favorites
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm stars
npm stars [username]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
If you have starred a lot of neat things and want to find them again
quickly this command lets you do just that\.
-.
.P
-You may also want to see your friend\'s favorite packages, in this case
+You may also want to see your friend's favorite packages, in this case
you will most certainly enjoy this command\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help star
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help view
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help whoami
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help adduser
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
index c76e2c92a5..866cfd3a2a 100644
--- a/deps/npm/man/man1/npm-start.1
+++ b/deps/npm/man/man1/npm-start.1
@@ -1,37 +1,28 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-START" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-start\fR \-\- Start a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm start
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "start" script, if one was provided\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+\fBnpm-start\fR \- Start a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm start [\-\- ]
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This runs a package's "start" script, if one was provided\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help run\-script
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help test
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help restart
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help stop
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
index 37c1a5fe03..1c4a6a6775 100644
--- a/deps/npm/man/man1/npm-stop.1
+++ b/deps/npm/man/man1/npm-stop.1
@@ -1,37 +1,28 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-STOP" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-stop\fR \-\- Stop a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm stop
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "stop" script, if one was provided\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+\fBnpm-stop\fR \- Stop a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm stop [\-\- ]
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This runs a package's "stop" script, if one was provided\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help run\-script
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help test
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help start
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help restart
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-submodule.1 b/deps/npm/man/man1/npm-submodule.1
index 71853335c5..bfb210d6eb 100644
--- a/deps/npm/man/man1/npm-submodule.1
+++ b/deps/npm/man/man1/npm-submodule.1
@@ -1,42 +1,35 @@
-.\" 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"
-.
-.nf
+\fBnpm-submodule\fR \- Add a package as a git submodule
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm submodule
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
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/\fR\|\.
-.
+description, then this command will add it as a git submodule at
+\fBnode_modules/\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 \-\- npm install\fR to install the
dependencies into the submodule folder\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
git help submodule
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-tag.1 b/deps/npm/man/man1/npm-tag.1
index c1d463f8ce..03fdbdb428 100644
--- a/deps/npm/man/man1/npm-tag.1
+++ b/deps/npm/man/man1/npm-tag.1
@@ -1,74 +1,54 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-TAG" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-tag\fR \-\- Tag a published version
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-tag\fR \- Tag a published version
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm tag @ []
-.
-.fi
-.
-.SH "DESCRIPTION"
-Tags the specified version of the package with the specified tag, or the \fB\-\-tag\fR config if not specified\.
-.
+.EE
+.RE
+.SH DESCRIPTION
+.P
+Tags the specified version of the package with the specified tag, or the
+\fB\-\-tag\fR config if not specified\.
.P
A tag can be used when installing packages as a reference to a version instead
of using a specific version number:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm install @
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
When installing dependencies, a preferred tagged version may be specified:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm install \-\-tag
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
This also applies to \fBnpm dedupe\fR\|\.
-.
.P
Publishing a package always sets the "latest" tag to the published version\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help dedupe
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
index 063fc92679..8e92115ac4 100644
--- a/deps/npm/man/man1/npm-test.1
+++ b/deps/npm/man/man1/npm-test.1
@@ -1,42 +1,32 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-TEST" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-test\fR \-\- Test a package
-.
-.SH "SYNOPSIS"
-.
-.nf
- npm test
- npm tst
-.
-.fi
-.
-.SH "DESCRIPTION"
-This runs a package\'s "test" script, if one was provided\.
-.
+\fBnpm-test\fR \- Test a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+ npm test [\-\- ]
+ npm tst [\-\- ]
+.EE
+.RE
+.SH DESCRIPTION
+.P
+This runs a package's "test" script, if one was provided\.
.P
To run tests as a condition of installation, set the \fBnpat\fR config to
true\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help run\-script
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 scripts
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help start
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help restart
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help stop
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
index 364d9c1d7c..2ade4acd03 100644
--- a/deps/npm/man/man1/npm-uninstall.1
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -1,87 +1,68 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-RM" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-rm\fR \-\- Remove a package
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm uninstall [\-\-save|\-\-save\-dev|\-\-save\-optional]
+\fBnpm-rm\fR \- Remove a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm uninstall [@/] [\-\-save|\-\-save\-dev|\-\-save\-optional]
npm rm (with any of the previous argument usage)
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
This uninstalls a package, completely removing everything npm installed
on its behalf\.
-.
.P
Example:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm uninstall sax
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
In global mode (ie, with \fB\-g\fR or \fB\-\-global\fR appended to the command),
it uninstalls the current package context as a global package\.
-.
.P
\fBnpm uninstall\fR takes 3 exclusive, optional flags which save or update
the package version in your main package\.json:
-.
-.IP "\(bu" 4
+.RS 0
+.IP \(bu 2
\fB\-\-save\fR: Package will be removed from your \fBdependencies\fR\|\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB\-\-save\-dev\fR: Package will be removed from your \fBdevDependencies\fR\|\.
-.
-.IP "\(bu" 4
+.IP \(bu 2
\fB\-\-save\-optional\fR: Package will be removed from your \fBoptionalDependencies\fR\|\.
-.
-.IP "" 0
-.
+
+.RE
+.P
+Scope is optional and follows the usual rules for npm help 7 \fBnpm\-scope\fR\|\.
.P
Examples:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm uninstall sax \-\-save
+npm uninstall @myorg/privatepackage \-\-save
npm uninstall node\-tap \-\-save\-dev
npm uninstall dtrace\-provider \-\-save\-optional
-.
-.fi
-.
-.IP "" 0
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.EE
+.RE
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help prune
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 config
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 npmrc
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
index e5b8a65601..9aec7540b0 100644
--- a/deps/npm/man/man1/npm-unpublish.1
+++ b/deps/npm/man/man1/npm-unpublish.1
@@ -1,58 +1,47 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-UNPUBLISH" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-unpublish\fR \-\- Remove a package from the registry
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm unpublish [@]
-.
-.fi
-.
-.SH "WARNING"
+\fBnpm-unpublish\fR \- Remove a package from the registry
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
+npm unpublish [@/][@]
+.EE
+.RE
+.SH WARNING
+.P
\fBIt is generally considered bad behavior to remove versions of a library
that others are depending on!\fR
-.
.P
Consider using the \fBdeprecate\fR command
instead, if your intent is to encourage users to upgrade\.
-.
.P
There is plenty of room on the registry\.
-.
-.SH "DESCRIPTION"
+.SH DESCRIPTION
+.P
This removes a package version from the registry, deleting its
entry and removing the tarball\.
-.
.P
If no version is specified, or if all versions are removed then
the root package entry is removed from the registry entirely\.
-.
.P
Even if a package version is unpublished, that specific name and
version combination can never be reused\. In order to publish the
package again, a new version number must be used\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.P
+The scope is optional and follows the usual rules for npm help 7 \fBnpm\-scope\fR\|\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help deprecate
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help publish
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help adduser
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help owner
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
index de2201209f..4edfab3206 100644
--- a/deps/npm/man/man1/npm-update.1
+++ b/deps/npm/man/man1/npm-update.1
@@ -1,45 +1,37 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-UPDATE" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-update\fR \-\- Update a package
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-update\fR \- Update a package
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm update [\-g] [ [ \.\.\.]]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
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\.
-.
.P
-If the \fB\-g\fR flag is specified, this command will update globally installed packages\.
-If no package name is specified, all packages in the specified location (global or local) will be updated\.
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+If the \fB\-g\fR flag is specified, this command will update globally installed
+packages\.
+.P
+If no package name is specified, all packages in the specified location (global
+or local) will be updated\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help install
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help outdated
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 registry
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 folders
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help ls
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
index fc52da6e8f..5c05aab9bd 100644
--- a/deps/npm/man/man1/npm-version.1
+++ b/deps/npm/man/man1/npm-version.1
@@ -1,75 +1,61 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-VERSION" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-version\fR \-\- Bump a package version
-.
-.SH "SYNOPSIS"
-.
-.nf
+\fBnpm-version\fR \- Bump a package version
+.SH SYNOPSIS
+.P
+.RS 2
+.EX
npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease]
-.
-.fi
-.
-.SH "DESCRIPTION"
+.EE
+.RE
+.SH DESCRIPTION
+.P
Run this in a package directory to bump the version and write the new
data back to the package\.json file\.
-.
.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",
"prepatch", "preminor", "premajor", "prerelease")\. In the second case,
the existing version will be incremented by 1 in the specified field\.
-.
.P
If run in a git repo, it will also create a version commit and tag, and
fail if the repo is not clean\.
-.
.P
If supplied with \fB\-\-message\fR (shorthand: \fB\-m\fR) config option, npm will
-use it as a commit message when creating a version commit\. If the \fBmessage\fR config contains \fB%s\fR then that will be replaced with the
+use it as a commit message when creating a version commit\. If the
+\fBmessage\fR config contains \fB%s\fR then that will be replaced with the
resulting version number\. For example:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
npm version patch \-m "Upgrade to %s for reasons"
-.
-.fi
-.
-.IP "" 0
-.
+.EE
+.RE
.P
If the \fBsign\-git\-tag\fR config is set, then the tag will be signed using
the \fB\-s\fR flag to git\. Note that you must have a default GPG key set up
in your git config for this to work properly\. For example:
-.
-.IP "" 4
-.
-.nf
+.P
+.RS 2
+.EX
$ npm config set sign\-git\-tag true
$ npm version patch
+
You need a passphrase to unlock the secret key for
user: "isaacs (http://blog\.izs\.me/) "
2048\-bit RSA key, ID 6C481CF6, created 2010\-08\-31
+
Enter passphrase:
-.
-.fi
-.
-.IP "" 0
-.
-.SH "SEE ALSO"
-.
-.IP "\(bu" 4
+.EE
+.RE
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
npm help init
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 5 package\.json
-.
-.IP "\(bu" 4
+.IP \(bu 2
npm help 7 semver
-.
-.IP "" 0
+
+.RE
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
index 44b42b308d..af435f023d 100644
--- a/deps/npm/man/man1/npm-view.1
+++ b/deps/npm/man/man1/npm-view.1
@@ -1,186 +1,136 @@
-.\" Generated with Ronnjs 0.3.8
-.\" http://github.com/kapouer/ronnjs/
-.
.TH "NPM\-VIEW" "1" "September 2014" "" ""
-.
.SH "NAME"
-\fBnpm-view\fR \-\- View registry info
-.
-.SH "SYNOPSIS"
-.
-.nf
-npm view [@] [