summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy J Fontaine <tjfontaine@gmail.com>2014-06-05 15:18:15 -0700
committerTimothy J Fontaine <tjfontaine@gmail.com>2014-06-06 15:07:29 -0700
commitf051f317905b3b31945dfe965a492e54902e595f (patch)
tree06fedaefc3fc2dd5d6f197762afa4cd351659858
parent535c7777ac674ba86cf93c44824e07b0e23ea8c4 (diff)
downloadnode-f051f317905b3b31945dfe965a492e54902e595f.tar.gz
npm: upgrade to v1.4.14
-rw-r--r--deps/npm/.npmrc2
-rw-r--r--deps/npm/LICENSE5
-rw-r--r--deps/npm/Makefile8
-rwxr-xr-xdeps/npm/bin/npm1
-rw-r--r--deps/npm/doc/api/npm-cache.md30
-rw-r--r--deps/npm/doc/cli/npm-cache.md8
-rw-r--r--deps/npm/doc/cli/npm-run-script.md1
-rw-r--r--deps/npm/doc/cli/npm.md16
-rw-r--r--deps/npm/doc/files/npmrc.md14
-rw-r--r--deps/npm/doc/misc/npm-config.md14
-rw-r--r--deps/npm/doc/misc/npm-faq.md4
-rw-r--r--deps/npm/doc/misc/npm-index.md4
-rw-r--r--deps/npm/doc/misc/npm-scripts.md2
-rw-r--r--deps/npm/doc/misc/semver.md90
-rw-r--r--deps/npm/html/doc/README.html6
-rw-r--r--deps/npm/html/doc/api/npm-bin.html2
-rw-r--r--deps/npm/html/doc/api/npm-bugs.html2
-rw-r--r--deps/npm/html/doc/api/npm-cache.html46
-rw-r--r--deps/npm/html/doc/api/npm-commands.html2
-rw-r--r--deps/npm/html/doc/api/npm-config.html2
-rw-r--r--deps/npm/html/doc/api/npm-deprecate.html2
-rw-r--r--deps/npm/html/doc/api/npm-docs.html2
-rw-r--r--deps/npm/html/doc/api/npm-edit.html2
-rw-r--r--deps/npm/html/doc/api/npm-explore.html2
-rw-r--r--deps/npm/html/doc/api/npm-help-search.html2
-rw-r--r--deps/npm/html/doc/api/npm-init.html2
-rw-r--r--deps/npm/html/doc/api/npm-install.html2
-rw-r--r--deps/npm/html/doc/api/npm-link.html2
-rw-r--r--deps/npm/html/doc/api/npm-load.html2
-rw-r--r--deps/npm/html/doc/api/npm-ls.html2
-rw-r--r--deps/npm/html/doc/api/npm-outdated.html2
-rw-r--r--deps/npm/html/doc/api/npm-owner.html2
-rw-r--r--deps/npm/html/doc/api/npm-pack.html2
-rw-r--r--deps/npm/html/doc/api/npm-prefix.html2
-rw-r--r--deps/npm/html/doc/api/npm-prune.html2
-rw-r--r--deps/npm/html/doc/api/npm-publish.html2
-rw-r--r--deps/npm/html/doc/api/npm-rebuild.html2
-rw-r--r--deps/npm/html/doc/api/npm-repo.html2
-rw-r--r--deps/npm/html/doc/api/npm-restart.html2
-rw-r--r--deps/npm/html/doc/api/npm-root.html2
-rw-r--r--deps/npm/html/doc/api/npm-run-script.html2
-rw-r--r--deps/npm/html/doc/api/npm-search.html2
-rw-r--r--deps/npm/html/doc/api/npm-shrinkwrap.html2
-rw-r--r--deps/npm/html/doc/api/npm-start.html2
-rw-r--r--deps/npm/html/doc/api/npm-stop.html2
-rw-r--r--deps/npm/html/doc/api/npm-submodule.html2
-rw-r--r--deps/npm/html/doc/api/npm-tag.html2
-rw-r--r--deps/npm/html/doc/api/npm-test.html2
-rw-r--r--deps/npm/html/doc/api/npm-uninstall.html2
-rw-r--r--deps/npm/html/doc/api/npm-unpublish.html2
-rw-r--r--deps/npm/html/doc/api/npm-update.html2
-rw-r--r--deps/npm/html/doc/api/npm-version.html2
-rw-r--r--deps/npm/html/doc/api/npm-view.html2
-rw-r--r--deps/npm/html/doc/api/npm-whoami.html2
-rw-r--r--deps/npm/html/doc/api/npm.html4
-rw-r--r--deps/npm/html/doc/cli/npm-adduser.html2
-rw-r--r--deps/npm/html/doc/cli/npm-bin.html2
-rw-r--r--deps/npm/html/doc/cli/npm-bugs.html2
-rw-r--r--deps/npm/html/doc/cli/npm-build.html2
-rw-r--r--deps/npm/html/doc/cli/npm-bundle.html2
-rw-r--r--deps/npm/html/doc/cli/npm-cache.html10
-rw-r--r--deps/npm/html/doc/cli/npm-completion.html2
-rw-r--r--deps/npm/html/doc/cli/npm-config.html2
-rw-r--r--deps/npm/html/doc/cli/npm-dedupe.html2
-rw-r--r--deps/npm/html/doc/cli/npm-deprecate.html2
-rw-r--r--deps/npm/html/doc/cli/npm-docs.html2
-rw-r--r--deps/npm/html/doc/cli/npm-edit.html2
-rw-r--r--deps/npm/html/doc/cli/npm-explore.html2
-rw-r--r--deps/npm/html/doc/cli/npm-help-search.html2
-rw-r--r--deps/npm/html/doc/cli/npm-help.html2
-rw-r--r--deps/npm/html/doc/cli/npm-init.html2
-rw-r--r--deps/npm/html/doc/cli/npm-install.html2
-rw-r--r--deps/npm/html/doc/cli/npm-link.html2
-rw-r--r--deps/npm/html/doc/cli/npm-ls.html4
-rw-r--r--deps/npm/html/doc/cli/npm-outdated.html2
-rw-r--r--deps/npm/html/doc/cli/npm-owner.html2
-rw-r--r--deps/npm/html/doc/cli/npm-pack.html2
-rw-r--r--deps/npm/html/doc/cli/npm-prefix.html2
-rw-r--r--deps/npm/html/doc/cli/npm-prune.html2
-rw-r--r--deps/npm/html/doc/cli/npm-publish.html2
-rw-r--r--deps/npm/html/doc/cli/npm-rebuild.html2
-rw-r--r--deps/npm/html/doc/cli/npm-repo.html2
-rw-r--r--deps/npm/html/doc/cli/npm-restart.html2
-rw-r--r--deps/npm/html/doc/cli/npm-rm.html2
-rw-r--r--deps/npm/html/doc/cli/npm-root.html2
-rw-r--r--deps/npm/html/doc/cli/npm-run-script.html3
-rw-r--r--deps/npm/html/doc/cli/npm-search.html2
-rw-r--r--deps/npm/html/doc/cli/npm-shrinkwrap.html2
-rw-r--r--deps/npm/html/doc/cli/npm-star.html2
-rw-r--r--deps/npm/html/doc/cli/npm-stars.html2
-rw-r--r--deps/npm/html/doc/cli/npm-start.html2
-rw-r--r--deps/npm/html/doc/cli/npm-stop.html2
-rw-r--r--deps/npm/html/doc/cli/npm-submodule.html2
-rw-r--r--deps/npm/html/doc/cli/npm-tag.html2
-rw-r--r--deps/npm/html/doc/cli/npm-test.html2
-rw-r--r--deps/npm/html/doc/cli/npm-uninstall.html2
-rw-r--r--deps/npm/html/doc/cli/npm-unpublish.html2
-rw-r--r--deps/npm/html/doc/cli/npm-update.html2
-rw-r--r--deps/npm/html/doc/cli/npm-version.html2
-rw-r--r--deps/npm/html/doc/cli/npm-view.html2
-rw-r--r--deps/npm/html/doc/cli/npm-whoami.html2
-rw-r--r--deps/npm/html/doc/cli/npm.html23
-rw-r--r--deps/npm/html/doc/files/npm-folders.html2
-rw-r--r--deps/npm/html/doc/files/npm-global.html2
-rw-r--r--deps/npm/html/doc/files/npm-json.html2
-rw-r--r--deps/npm/html/doc/files/npmrc.html13
-rw-r--r--deps/npm/html/doc/files/package.json.html2
-rw-r--r--deps/npm/html/doc/index.html4
-rw-r--r--deps/npm/html/doc/misc/npm-coding-style.html2
-rw-r--r--deps/npm/html/doc/misc/npm-config.html14
-rw-r--r--deps/npm/html/doc/misc/npm-developers.html2
-rw-r--r--deps/npm/html/doc/misc/npm-disputes.html8
-rw-r--r--deps/npm/html/doc/misc/npm-faq.html8
-rw-r--r--deps/npm/html/doc/misc/npm-index.html4
-rw-r--r--deps/npm/html/doc/misc/npm-registry.html2
-rw-r--r--deps/npm/html/doc/misc/npm-scripts.html4
-rw-r--r--deps/npm/html/doc/misc/removing-npm.html2
-rw-r--r--deps/npm/html/doc/misc/semver.html94
-rw-r--r--deps/npm/lib/adduser.js4
-rw-r--r--deps/npm/lib/cache.js1251
-rw-r--r--deps/npm/lib/cache/add-local-tarball.js223
-rw-r--r--deps/npm/lib/cache/add-local.js146
-rw-r--r--deps/npm/lib/cache/add-named.js275
-rw-r--r--deps/npm/lib/cache/add-remote-git.js285
-rw-r--r--deps/npm/lib/cache/add-remote-tarball.js106
-rw-r--r--deps/npm/lib/cache/get-stat.js63
-rw-r--r--deps/npm/lib/cache/maybe-github.js35
-rw-r--r--deps/npm/lib/explore.js1
-rw-r--r--deps/npm/lib/help.js1
-rw-r--r--deps/npm/lib/init.js5
-rw-r--r--deps/npm/lib/install.js3
-rw-r--r--deps/npm/lib/ls.js7
-rw-r--r--deps/npm/lib/npm.js146
-rw-r--r--deps/npm/lib/outdated.js23
-rw-r--r--deps/npm/lib/pack.js2
-rw-r--r--deps/npm/lib/publish.js2
-rw-r--r--deps/npm/lib/repo.js23
-rw-r--r--deps/npm/lib/submodule.js6
-rw-r--r--deps/npm/lib/utils/depr-check.js13
-rw-r--r--deps/npm/lib/utils/error-handler.js1
-rw-r--r--deps/npm/lib/utils/lifecycle.js3
-rw-r--r--deps/npm/lib/utils/locker.js52
-rw-r--r--deps/npm/lib/utils/tar.js6
-rw-r--r--deps/npm/lib/version.js7
-rw-r--r--deps/npm/lib/view.js2
-rw-r--r--deps/npm/man/man1/npm-README.12
-rw-r--r--deps/npm/man/man1/npm-adduser.12
-rw-r--r--deps/npm/man/man1/npm-bin.12
-rw-r--r--deps/npm/man/man1/npm-bugs.12
-rw-r--r--deps/npm/man/man1/npm-build.12
-rw-r--r--deps/npm/man/man1/npm-bundle.12
-rw-r--r--deps/npm/man/man1/npm-cache.112
-rw-r--r--deps/npm/man/man1/npm-completion.12
-rw-r--r--deps/npm/man/man1/npm-config.12
-rw-r--r--deps/npm/man/man1/npm-dedupe.12
-rw-r--r--deps/npm/man/man1/npm-deprecate.12
-rw-r--r--deps/npm/man/man1/npm-docs.12
-rw-r--r--deps/npm/man/man1/npm-edit.12
-rw-r--r--deps/npm/man/man1/npm-explore.12
-rw-r--r--deps/npm/man/man1/npm-help-search.12
-rw-r--r--deps/npm/man/man1/npm-help.12
-rw-r--r--deps/npm/man/man1/npm-init.12
-rw-r--r--deps/npm/man/man1/npm-install.12
-rw-r--r--deps/npm/man/man1/npm-link.12
-rw-r--r--deps/npm/man/man1/npm-ls.14
-rw-r--r--deps/npm/man/man1/npm-outdated.12
-rw-r--r--deps/npm/man/man1/npm-owner.12
-rw-r--r--deps/npm/man/man1/npm-pack.12
-rw-r--r--deps/npm/man/man1/npm-prefix.12
-rw-r--r--deps/npm/man/man1/npm-prune.12
-rw-r--r--deps/npm/man/man1/npm-publish.12
-rw-r--r--deps/npm/man/man1/npm-rebuild.12
-rw-r--r--deps/npm/man/man1/npm-repo.12
-rw-r--r--deps/npm/man/man1/npm-restart.12
-rw-r--r--deps/npm/man/man1/npm-rm.12
-rw-r--r--deps/npm/man/man1/npm-root.12
-rw-r--r--deps/npm/man/man1/npm-run-script.13
-rw-r--r--deps/npm/man/man1/npm-search.12
-rw-r--r--deps/npm/man/man1/npm-shrinkwrap.12
-rw-r--r--deps/npm/man/man1/npm-star.12
-rw-r--r--deps/npm/man/man1/npm-stars.12
-rw-r--r--deps/npm/man/man1/npm-start.12
-rw-r--r--deps/npm/man/man1/npm-stop.12
-rw-r--r--deps/npm/man/man1/npm-submodule.12
-rw-r--r--deps/npm/man/man1/npm-tag.12
-rw-r--r--deps/npm/man/man1/npm-test.12
-rw-r--r--deps/npm/man/man1/npm-uninstall.12
-rw-r--r--deps/npm/man/man1/npm-unpublish.12
-rw-r--r--deps/npm/man/man1/npm-update.12
-rw-r--r--deps/npm/man/man1/npm-version.12
-rw-r--r--deps/npm/man/man1/npm-view.12
-rw-r--r--deps/npm/man/man1/npm-whoami.12
-rw-r--r--deps/npm/man/man1/npm.118
-rw-r--r--deps/npm/man/man3/npm-bin.32
-rw-r--r--deps/npm/man/man3/npm-bugs.32
-rw-r--r--deps/npm/man/man3/npm-cache.340
-rw-r--r--deps/npm/man/man3/npm-commands.32
-rw-r--r--deps/npm/man/man3/npm-config.32
-rw-r--r--deps/npm/man/man3/npm-deprecate.32
-rw-r--r--deps/npm/man/man3/npm-docs.32
-rw-r--r--deps/npm/man/man3/npm-edit.32
-rw-r--r--deps/npm/man/man3/npm-explore.32
-rw-r--r--deps/npm/man/man3/npm-help-search.32
-rw-r--r--deps/npm/man/man3/npm-init.32
-rw-r--r--deps/npm/man/man3/npm-install.32
-rw-r--r--deps/npm/man/man3/npm-link.32
-rw-r--r--deps/npm/man/man3/npm-load.32
-rw-r--r--deps/npm/man/man3/npm-ls.32
-rw-r--r--deps/npm/man/man3/npm-outdated.32
-rw-r--r--deps/npm/man/man3/npm-owner.32
-rw-r--r--deps/npm/man/man3/npm-pack.32
-rw-r--r--deps/npm/man/man3/npm-prefix.32
-rw-r--r--deps/npm/man/man3/npm-prune.32
-rw-r--r--deps/npm/man/man3/npm-publish.32
-rw-r--r--deps/npm/man/man3/npm-rebuild.32
-rw-r--r--deps/npm/man/man3/npm-repo.32
-rw-r--r--deps/npm/man/man3/npm-restart.32
-rw-r--r--deps/npm/man/man3/npm-root.32
-rw-r--r--deps/npm/man/man3/npm-run-script.32
-rw-r--r--deps/npm/man/man3/npm-search.32
-rw-r--r--deps/npm/man/man3/npm-shrinkwrap.32
-rw-r--r--deps/npm/man/man3/npm-start.32
-rw-r--r--deps/npm/man/man3/npm-stop.32
-rw-r--r--deps/npm/man/man3/npm-submodule.32
-rw-r--r--deps/npm/man/man3/npm-tag.32
-rw-r--r--deps/npm/man/man3/npm-test.32
-rw-r--r--deps/npm/man/man3/npm-uninstall.32
-rw-r--r--deps/npm/man/man3/npm-unpublish.32
-rw-r--r--deps/npm/man/man3/npm-update.32
-rw-r--r--deps/npm/man/man3/npm-version.32
-rw-r--r--deps/npm/man/man3/npm-view.32
-rw-r--r--deps/npm/man/man3/npm-whoami.32
-rw-r--r--deps/npm/man/man3/npm.34
-rw-r--r--deps/npm/man/man5/npm-folders.52
-rw-r--r--deps/npm/man/man5/npm-global.52
-rw-r--r--deps/npm/man/man5/npm-json.52
-rw-r--r--deps/npm/man/man5/npmrc.518
-rw-r--r--deps/npm/man/man5/package.json.52
-rw-r--r--deps/npm/man/man7/npm-coding-style.72
-rw-r--r--deps/npm/man/man7/npm-config.725
-rw-r--r--deps/npm/man/man7/npm-developers.72
-rw-r--r--deps/npm/man/man7/npm-disputes.72
-rw-r--r--deps/npm/man/man7/npm-faq.76
-rw-r--r--deps/npm/man/man7/npm-index.75
-rw-r--r--deps/npm/man/man7/npm-registry.72
-rw-r--r--deps/npm/man/man7/npm-scripts.74
-rw-r--r--deps/npm/man/man7/removing-npm.72
-rw-r--r--deps/npm/man/man7/semver.7109
-rw-r--r--deps/npm/node_modules/abbrev/CONTRIBUTING.md3
-rw-r--r--deps/npm/node_modules/abbrev/abbrev.js (renamed from deps/npm/node_modules/abbrev/lib/abbrev.js)49
-rw-r--r--deps/npm/node_modules/abbrev/package.json34
-rw-r--r--deps/npm/node_modules/abbrev/test.js47
-rw-r--r--deps/npm/node_modules/char-spinner/LICENSE15
-rw-r--r--deps/npm/node_modules/char-spinner/README.md31
-rw-r--r--deps/npm/node_modules/char-spinner/package.json54
-rw-r--r--deps/npm/node_modules/char-spinner/spin.js51
-rw-r--r--deps/npm/node_modules/char-spinner/test/basic.js35
-rw-r--r--deps/npm/node_modules/columnify/package.json18
-rw-r--r--deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json33
-rw-r--r--deps/npm/node_modules/fstream-npm/package.json10
-rw-r--r--deps/npm/node_modules/github-url-from-username-repo/package.json23
-rw-r--r--deps/npm/node_modules/glob/package.json10
-rw-r--r--deps/npm/node_modules/inflight/LICENSE15
-rw-r--r--deps/npm/node_modules/inflight/README.md37
-rw-r--r--deps/npm/node_modules/inflight/inflight.js25
-rw-r--r--deps/npm/node_modules/inflight/package.json50
-rw-r--r--deps/npm/node_modules/inflight/test.js33
-rw-r--r--deps/npm/node_modules/ini/.npmignore1
-rw-r--r--deps/npm/node_modules/ini/ini.js30
-rw-r--r--deps/npm/node_modules/ini/package.json32
-rw-r--r--deps/npm/node_modules/ini/test/fixtures/foo.ini16
-rw-r--r--deps/npm/node_modules/ini/test/foo.js10
-rw-r--r--deps/npm/node_modules/init-package-json/default-input.js2
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/package.json26
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/promzard.js2
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/test/basic.js8
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/test/exports.js2
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/test/fn.js2
-rw-r--r--deps/npm/node_modules/init-package-json/package.json28
-rw-r--r--deps/npm/node_modules/minimatch/README.md4
-rw-r--r--deps/npm/node_modules/minimatch/minimatch.js14
-rw-r--r--deps/npm/node_modules/minimatch/node_modules/sigmund/package.json24
-rw-r--r--deps/npm/node_modules/minimatch/package.json26
-rw-r--r--deps/npm/node_modules/minimatch/test/defaults.js2
-rw-r--r--deps/npm/node_modules/node-gyp/README.md15
-rw-r--r--deps/npm/node_modules/node-gyp/lib/configure.js3
-rw-r--r--deps/npm/node_modules/node-gyp/lib/node-gyp.js3
-rw-r--r--deps/npm/node_modules/node-gyp/package.json33
-rw-r--r--deps/npm/node_modules/npm-cache-filename/LICENSE15
-rw-r--r--deps/npm/node_modules/npm-cache-filename/README.md21
-rw-r--r--deps/npm/node_modules/npm-cache-filename/index.js20
-rw-r--r--deps/npm/node_modules/npm-cache-filename/package.json33
-rw-r--r--deps/npm/node_modules/npm-cache-filename/test.js21
-rw-r--r--deps/npm/node_modules/npm-install-checks/LICENSE213
-rw-r--r--deps/npm/node_modules/npm-install-checks/package.json19
-rw-r--r--deps/npm/node_modules/npm-registry-client/README.md3
-rw-r--r--deps/npm/node_modules/npm-registry-client/index.js4
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/adduser.js13
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/deprecate.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/get.js25
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/publish.js13
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/request.js30
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/star.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/stars.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/tag.js4
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/unpublish.js3
-rw-r--r--deps/npm/node_modules/npm-registry-client/package.json21
-rw-r--r--deps/npm/node_modules/npm-user-validate/README.md6
-rw-r--r--deps/npm/node_modules/npm-user-validate/npm-user-validate.js8
-rw-r--r--deps/npm/node_modules/npm-user-validate/package.json18
-rw-r--r--deps/npm/node_modules/npm-user-validate/test/pw.test.js10
-rw-r--r--deps/npm/node_modules/npmconf/config-defs.js4
-rw-r--r--deps/npm/node_modules/npmconf/lib/find-prefix.js (renamed from deps/npm/lib/utils/find-prefix.js)5
-rw-r--r--deps/npm/node_modules/npmconf/lib/load-prefix.js51
-rw-r--r--deps/npm/node_modules/npmconf/lib/load-uid.js15
-rw-r--r--deps/npm/node_modules/npmconf/lib/set-user.js23
-rw-r--r--deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json20
-rw-r--r--deps/npm/node_modules/npmconf/node_modules/config-chain/package.json22
-rw-r--r--deps/npm/node_modules/npmconf/npmconf.js103
-rw-r--r--deps/npm/node_modules/npmconf/package.json14
-rw-r--r--deps/npm/node_modules/npmconf/test/basic.js13
-rw-r--r--deps/npm/node_modules/npmconf/test/builtin.js13
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/.npmrc1
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/package.json0
-rw-r--r--deps/npm/node_modules/npmconf/test/project.js85
-rw-r--r--deps/npm/node_modules/npmlog/package.json20
-rw-r--r--deps/npm/node_modules/read-installed/node_modules/util-extend/package.json22
-rw-r--r--deps/npm/node_modules/read-installed/package.json6
-rw-r--r--deps/npm/node_modules/read-installed/read-installed.js26
-rw-r--r--deps/npm/node_modules/read-installed/test/depth-0.js2
-rw-r--r--deps/npm/node_modules/read-installed/test/fixtures/grandparent-peer/package.json8
-rw-r--r--deps/npm/node_modules/read-installed/test/grandparent-peer.js24
-rw-r--r--deps/npm/node_modules/semver/README.md90
-rwxr-xr-xdeps/npm/node_modules/semver/bin/semver1
-rw-r--r--deps/npm/node_modules/semver/package.json7
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js40
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js.gzbin6903 -> 7180 bytes
-rw-r--r--deps/npm/node_modules/semver/semver.js40
-rw-r--r--deps/npm/node_modules/semver/semver.min.js2
-rw-r--r--deps/npm/node_modules/semver/semver.min.js.gzbin3231 -> 3295 bytes
-rw-r--r--deps/npm/node_modules/semver/test/index.js32
-rw-r--r--deps/npm/node_modules/uid-number/LICENCE25
-rw-r--r--deps/npm/node_modules/uid-number/package.json23
-rw-r--r--deps/npm/package.json36
-rw-r--r--deps/npm/test/tap/00-verify-bundle-deps.js27
-rw-r--r--deps/npm/test/tap/cache-shasum.js2
-rw-r--r--deps/npm/test/tap/config-meta.js7
-rw-r--r--deps/npm/test/tap/install-save-prefix.js2
-rw-r--r--deps/npm/test/tap/ls-depth-unmet.js97
-rw-r--r--deps/npm/test/tap/ls-depth-unmet/package.json10
-rw-r--r--deps/npm/test/tap/maybe-github.js76
-rw-r--r--deps/npm/test/tap/noargs-install-config-save.js6
-rw-r--r--deps/npm/test/tap/repo.js115
-rw-r--r--deps/npm/test/tap/update-save.js160
-rw-r--r--deps/npm/test/tap/update-save/README.md1
-rw-r--r--deps/npm/test/tap/update-save/index.js1
-rw-r--r--deps/npm/test/tap/update-save/package.json10
-rw-r--r--deps/npm/test/tap/url-dependencies.js1
358 files changed, 4050 insertions, 2343 deletions
diff --git a/deps/npm/.npmrc b/deps/npm/.npmrc
new file mode 100644
index 000000000..ca0bc48dd
--- /dev/null
+++ b/deps/npm/.npmrc
@@ -0,0 +1,2 @@
+save-prefix = ~
+proprietary-attribs = false
diff --git a/deps/npm/LICENSE b/deps/npm/LICENSE
index 2c0baba40..9505fc119 100644
--- a/deps/npm/LICENSE
+++ b/deps/npm/LICENSE
@@ -214,9 +214,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------
-"Node.js" and "node" trademark Joyent, Inc. npm is not officially
-part of the Node.js project, and is neither owned by nor
-officially affiliated with Joyent, Inc.
+"Node.js" trademark Joyent, Inc. npm is not officially part of the Node.js
+project, and is neither owned by nor affiliated with Joyent, Inc.
Packages published in the npm registry (other than the Software and
its included dependencies) are not part of npm itself, are the sole
diff --git a/deps/npm/Makefile b/deps/npm/Makefile
index 870965b52..c06734958 100644
--- a/deps/npm/Makefile
+++ b/deps/npm/Makefile
@@ -169,8 +169,7 @@ publish: link doc
git push origin &&\
git push origin --tags &&\
npm publish &&\
- make doc-publish &&\
- make zip-publish
+ make doc-publish
docpublish: doc-publish
doc-publish: doc
@@ -202,13 +201,10 @@ doc-publish: doc
esac; \
done
-zip-publish: release
- scp release/* node@nodejs.org:dist/npm/
-
release:
@bash scripts/release.sh
sandwich:
@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || (echo "make it yourself" && exit 13)
-.PHONY: all latest install dev link doc clean uninstall test man doc-publish doc-clean docclean docpublish release zip-publish
+.PHONY: all latest install dev link doc clean uninstall test man doc-publish doc-clean docclean docpublish release
diff --git a/deps/npm/bin/npm b/deps/npm/bin/npm
index 07ade35e0..d020ccfe7 100755
--- a/deps/npm/bin/npm
+++ b/deps/npm/bin/npm
@@ -1,4 +1,5 @@
#!/bin/sh
+(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix
basedir=`dirname "$0"`
diff --git a/deps/npm/doc/api/npm-cache.md b/deps/npm/doc/api/npm-cache.md
new file mode 100644
index 000000000..e7079d8c1
--- /dev/null
+++ b/deps/npm/doc/api/npm-cache.md
@@ -0,0 +1,30 @@
+npm-cache(3) -- manage the npm cache programmatically
+=====================================================
+
+## SYNOPSIS
+
+ npm.commands.cache([args], callback)
+
+ // helpers
+ npm.commands.cache.clean([args], callback)
+ npm.commands.cache.add([args], callback)
+ npm.commands.cache.read(name, version, forceBypass, callback)
+
+## DESCRIPTION
+
+This acts much the same ways as the npm-cache(1) command line
+functionality.
+
+The callback is called with the package.json data of the thing that is
+eventually added to or read from the cache.
+
+The top level `npm.commands.cache(...)` functionality is a public
+interface, and like all commands on the `npm.commands` object, it will
+match the command line behavior exactly.
+
+However, the cache folder structure and the cache helper functions are
+considered **internal** API surface, and as such, may change in future
+releases of npm, potentially without warning or significant version
+incrementation.
+
+Use at your own risk.
diff --git a/deps/npm/doc/cli/npm-cache.md b/deps/npm/doc/cli/npm-cache.md
index af3cfac4d..03b5902bd 100644
--- a/deps/npm/doc/cli/npm-cache.md
+++ b/deps/npm/doc/cli/npm-cache.md
@@ -37,16 +37,14 @@ npm stores cache data in the directory specified in `npm config get cache`.
For each package that is added to the cache, three pieces of information are
stored in `{cache}/{name}/{version}`:
-* .../package/:
- A folder containing the package contents as they appear in the tarball.
-* .../package.json:
- The package.json file, as npm sees it, with overlays applied and a _id attribute.
+* .../package/package.json:
+ The package.json file, as npm sees it.
* .../package.tgz:
The tarball for that version.
Additionally, whenever a registry request is made, a `.cache.json` file
is placed at the corresponding URI, to store the ETag and the requested
-data.
+data. This is stored in `{cache}/{hostname}/{path}/.cache.json`.
Commands that make non-essential registry requests (such as `search` and
`view`, or the completion scripts) generally specify a minimum timeout.
diff --git a/deps/npm/doc/cli/npm-run-script.md b/deps/npm/doc/cli/npm-run-script.md
index 783fab30e..835dbf5df 100644
--- a/deps/npm/doc/cli/npm-run-script.md
+++ b/deps/npm/doc/cli/npm-run-script.md
@@ -4,6 +4,7 @@ npm-run-script(1) -- Run arbitrary package scripts
## SYNOPSIS
npm run-script [<pkg>] [command]
+ npm run [<pkg>] [command]
## DESCRIPTION
diff --git a/deps/npm/doc/cli/npm.md b/deps/npm/doc/cli/npm.md
index 903aa1079..ad16d419e 100644
--- a/deps/npm/doc/cli/npm.md
+++ b/deps/npm/doc/cli/npm.md
@@ -31,6 +31,22 @@ Use `npm install blerg` to install the latest version of "blerg". Check out
Use the `npm search` command to show everything that's available.
Use `npm ls` to show everything you've installed.
+## DEPENDENCIES
+
+If a package references to another package with a git URL, npm depends
+on a preinstalled git.
+
+If one of the packages npm tries to install is a native node module and
+requires compiling of C++ Code, npm will use
+[node-gyp](https://github.com/TooTallNate/node-gyp) for that task.
+For a Unix system, [node-gyp](https://github.com/TooTallNate/node-gyp)
+needs Python, make and a buildchain like GCC. On Windows,
+Python and Microsoft Visual Studio C++ is needed. Python 3 is
+not supported by [node-gyp](https://github.com/TooTallNate/node-gyp).
+For more information visit
+[the node-gyp repository](https://github.com/TooTallNate/node-gyp) and
+the [node-gyp Wiki](https://github.com/TooTallNate/node-gyp/wiki).
+
## DIRECTORIES
See `npm-folders(5)` to learn about where npm puts stuff.
diff --git a/deps/npm/doc/files/npmrc.md b/deps/npm/doc/files/npmrc.md
index e65f722fd..ba57a6f2c 100644
--- a/deps/npm/doc/files/npmrc.md
+++ b/deps/npm/doc/files/npmrc.md
@@ -13,8 +13,9 @@ For a list of available configuration options, see npm-config(7).
## FILES
-The three relevant files are:
+The four relevant files are:
+* per-project config file (/path/to/my/project/.npmrc)
* per-user config file (~/.npmrc)
* global config file ($PREFIX/npmrc)
* npm builtin config file (/path/to/npm/npmrc)
@@ -29,6 +30,17 @@ Each of these files is loaded, and config options are resolved in
priority order. For example, a setting in the userconfig file would
override the setting in the globalconfig file.
+### Per-project config file
+
+When working locally in a project, a `.npmrc` file in the root of the
+project (ie, a sibling of `node_modules` and `package.json`) will set
+config values specific to this project.
+
+Note that this only applies to the root of the project that you're
+running npm in. It has no effect when your module is published. For
+example, you can't publish a module that forces itself to install
+globally, or in a different location.
+
### Per-user config file
`$HOME/.npmrc` (or the `userconfig` param, if set in the environment
diff --git a/deps/npm/doc/misc/npm-config.md b/deps/npm/doc/misc/npm-config.md
index a70de8121..b49e98736 100644
--- a/deps/npm/doc/misc/npm-config.md
+++ b/deps/npm/doc/misc/npm-config.md
@@ -24,8 +24,9 @@ same.
### npmrc Files
-The three relevant files are:
+The four relevant files are:
+* per-project config file (/path/to/my/project/.npmrc)
* per-user config file (~/.npmrc)
* global config file ($PREFIX/npmrc)
* npm builtin config file (/path/to/npm/npmrc)
@@ -712,6 +713,17 @@ using `-s` to add a signature.
Note that git requires you to have set up GPG keys in your git configs
for this to work properly.
+### spin
+
+* Default: true
+* Type: Boolean or `"always"`
+
+When set to `true`, npm will display an ascii spinner while it is doing
+things, if `process.stderr` is a TTY.
+
+Set to `false` to suppress the spinner, or set to `always` to output
+the spinner even for non-TTY outputs.
+
### strict-ssl
* Default: true
diff --git a/deps/npm/doc/misc/npm-faq.md b/deps/npm/doc/misc/npm-faq.md
index 081605230..53fa03d62 100644
--- a/deps/npm/doc/misc/npm-faq.md
+++ b/deps/npm/doc/misc/npm-faq.md
@@ -258,7 +258,7 @@ change it again? npm doesn't currently track any state about past
configuration settings, so this would be rather difficult to do
properly. It would have to track every previous value for this
config, and always accept any of them, or else yesterday's install may
-be broken tomorrow. Complexity hurdle #5.
+be broken tomorrow. Complexity hurdle #4.
Never going to happen. The folder is named `node_modules`. It is
written indelibly in the Node Way, handed down from the ancient times
@@ -340,7 +340,7 @@ contributed to it, some of them quite substantially.
The npm open source project, The npm Registry, and [the community
website](https://www.npmjs.org) are maintained and operated by the
-good folks at [npm, Inc.](https://www.npmjs.com)
+good folks at [npm, Inc.](http://www.npmjs.com)
## I have a question or request not addressed here. Where should I put it?
diff --git a/deps/npm/doc/misc/npm-index.md b/deps/npm/doc/misc/npm-index.md
index 9f14e51b1..ebfdc5a8a 100644
--- a/deps/npm/doc/misc/npm-index.md
+++ b/deps/npm/doc/misc/npm-index.md
@@ -209,6 +209,10 @@ Display npm bin folder
Bugs for a package in a web browser maybe
+## npm-cache(3)
+
+manage the npm cache programmatically
+
## npm-commands(3)
npm commands
diff --git a/deps/npm/doc/misc/npm-scripts.md b/deps/npm/doc/misc/npm-scripts.md
index 02d76f1c4..b49d9e23d 100644
--- a/deps/npm/doc/misc/npm-scripts.md
+++ b/deps/npm/doc/misc/npm-scripts.md
@@ -34,7 +34,7 @@ following scripts:
stop and start scripts if no `restart` script is provided.
Additionally, arbitrary scripts can be run by doing
-`npm run-script <stage> <pkg>`.
+`npm run-script <pkg> <stage>`.
## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
diff --git a/deps/npm/doc/misc/semver.md b/deps/npm/doc/misc/semver.md
index 176fbcba9..6c7d28061 100644
--- a/deps/npm/doc/misc/semver.md
+++ b/deps/npm/doc/misc/semver.md
@@ -34,7 +34,7 @@ As a command-line utility:
## Versions
-A "version" is described by the v2.0.0 specification found at
+A "version" is described by the `v2.0.0` specification found at
<http://semver.org/>.
A leading `"="` or `"v"` character is stripped off and ignored.
@@ -43,9 +43,10 @@ A leading `"="` or `"v"` character is stripped off and ignored.
The following range styles are supported:
-* `1.2.3` A specific version. When nothing else will do. Note that
- build metadata is still ignored, so `1.2.3+build2012` will satisfy
- this range.
+* `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
@@ -56,26 +57,33 @@ The following range styles are supported:
* `<=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
+* `~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
+* `^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
+* `^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` := `>=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"
+* `^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
@@ -90,42 +98,50 @@ The resulting output will always be 100% strict, of course.
Strict-mode Comparators and Ranges will be strict about the SemVer
strings that they parse.
-* valid(v): Return the parsed version, or null if it's not valid.
-* inc(v, release): Return the version incremented by the release type
- (major, minor, patch, or prerelease), or null if it's not valid.
+* `valid(v)`: Return the parsed version, or null if it's not valid.
+* `inc(v, release)`: Return the version incremented by the release
+ type (`major`, `premajor`, `minor`, `preminor`, `patch`,
+ `prepatch`, or `prerelease`), or null if it's not valid
+ * `premajor` in one call will bump the version up to the next major
+ version and down to a prerelease of that major version.
+ `preminor`, and `prepatch` work the same way.
+ * If called from a non-prerelease version, the `prerelease` will work the
+ same as `prepatch`. It increments the patch version, then makes a
+ prerelease. If the input version is already a prerelease it simply
+ increments it.
### Comparison
-* gt(v1, v2): `v1 > v2`
-* gte(v1, v2): `v1 >= v2`
-* lt(v1, v2): `v1 < v2`
-* lte(v1, v2): `v1 <= v2`
-* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,
+* `gt(v1, v2)`: `v1 > v2`
+* `gte(v1, v2)`: `v1 >= v2`
+* `lt(v1, v2)`: `v1 < v2`
+* `lte(v1, v2)`: `v1 <= v2`
+* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
even if they're not the exact same string. You already know how to
compare strings.
-* neq(v1, v2): `v1 != v2` The opposite of eq.
-* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call
+* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
+* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
the corresponding function above. `"==="` and `"!=="` do simple
string comparison, but are included for completeness. Throws if an
invalid comparison string is provided.
-* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
- v2 is greater. Sorts in ascending order if passed to Array.sort().
-* rcompare(v1, v2): The reverse of compare. Sorts an array of versions
- in descending order when passed to Array.sort().
+* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
+ `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
+* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions
+ in descending order when passed to `Array.sort()`.
### Ranges
-* validRange(range): Return the valid range or null if it's not valid
-* satisfies(version, range): Return true if the version satisfies the
+* `validRange(range)`: Return the valid range or null if it's not valid
+* `satisfies(version, range)`: Return true if the version satisfies the
range.
-* maxSatisfying(versions, range): Return the highest version in the list
- that satisfies the range, or null if none of them do.
-* gtr(version, range): Return true if version is greater than all the
+* `maxSatisfying(versions, range)`: Return the highest version in the list
+ that satisfies the range, or `null` if none of them do.
+* `gtr(version, range)`: Return `true` if version is greater than all the
versions possible in the range.
-* ltr(version, range): Return true if version is less than all the
+* `ltr(version, range)`: Return `true` if version is less than all the
versions possible in the range.
-* outside(version, range, hilo): Return true if the version is outside
+* `outside(version, range, hilo)`: Return true if the version is outside
the bounds of the range in either the high or low direction. The
`hilo` argument must be either the string `'>'` or `'<'`. (This is
the function called by `gtr` and `ltr`.)
@@ -134,8 +150,8 @@ Note that, since ranges may be non-contiguous, a version might not be
greater than a range, less than a range, *or* satisfy a range! For
example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
until `2.0.0`, so the version `1.2.10` would not be greater than the
-range (because 2.0.1 satisfies, which is higher), nor less than the
-range (since 1.2.8 satisfies, which is lower), and it also does not
+range (because `2.0.1` satisfies, which is higher), nor less than the
+range (since `1.2.8` satisfies, which is lower), and it also does not
satisfy the range.
If you want to know if a version satisfies or does not satisfy a
diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html
index df5c3ce03..0a192419a 100644
--- a/deps/npm/html/doc/README.html
+++ b/deps/npm/html/doc/README.html
@@ -141,7 +141,7 @@ specific purpose, or lack of malice in any given npm package.</p>
<p>If you have a complaint about a package in the public npm registry,
and cannot <a href="https://www.npmjs.org/doc/misc/npm-disputes.html">resolve it with the package
owner</a>, please email
-<a href="&#109;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#115;&#117;&#x70;&#112;&#x6f;&#x72;&#x74;&#x40;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#109;">&#115;&#117;&#x70;&#112;&#x6f;&#x72;&#x74;&#x40;&#110;&#112;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#109;</a> and explain the situation.</p>
+<a href="&#109;&#97;&#x69;&#x6c;&#116;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#116;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#x2e;&#x63;&#x6f;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#116;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#x2e;&#x63;&#x6f;&#x6d;</a> and explain the situation.</p>
<p>Any data published to The npm Registry (including user account
information) may be removed or modified at the sole discretion of the
npm server administrators.</p>
@@ -161,7 +161,7 @@ ban your account in extreme cases. So don&#39;t do that.</p>
<li>web:
<a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li>
<li>email:
-<a href="&#109;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x6e;&#x70;&#109;&#45;&#64;&#103;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#109;">&#x6e;&#x70;&#109;&#45;&#64;&#103;&#x6f;&#111;&#x67;&#x6c;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#109;</a></li>
+<a href="&#x6d;&#x61;&#105;&#108;&#116;&#x6f;&#x3a;&#x6e;&#x70;&#x6d;&#x2d;&#x40;&#103;&#111;&#111;&#x67;&#x6c;&#101;&#x67;&#x72;&#x6f;&#x75;&#112;&#x73;&#x2e;&#x63;&#111;&#109;">&#x6e;&#x70;&#x6d;&#x2d;&#x40;&#103;&#111;&#111;&#x67;&#x6c;&#101;&#x67;&#x72;&#x6f;&#x75;&#112;&#x73;&#x2e;&#x63;&#111;&#109;</a></li>
</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
@@ -186,5 +186,5 @@ will no doubt tell you to put the output in a gist or email.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.4.10</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html
index 56bde010d..4694b4d15 100644
--- a/deps/npm/html/doc/api/npm-bin.html
+++ b/deps/npm/html/doc/api/npm-bin.html
@@ -28,5 +28,5 @@ to the <code>npm.bin</code> member.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bin &mdash; npm@1.4.10</p>
+<p id="footer">npm-bin &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html
index 4e5074f54..1678f2fdb 100644
--- a/deps/npm/html/doc/api/npm-bugs.html
+++ b/deps/npm/html/doc/api/npm-bugs.html
@@ -33,5 +33,5 @@ friendly for programmatic use.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bugs &mdash; npm@1.4.10</p>
+<p id="footer">npm-bugs &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-cache.html b/deps/npm/html/doc/api/npm-cache.html
new file mode 100644
index 000000000..d74e31e23
--- /dev/null
+++ b/deps/npm/html/doc/api/npm-cache.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <title>npm-cache</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-cache.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-cache.html">npm-cache</a></h1> <p>manage the npm cache programmatically</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.cache([args], callback)
+
+// helpers
+npm.commands.cache.clean([args], callback)
+npm.commands.cache.add([args], callback)
+npm.commands.cache.read(name, version, forceBypass, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>This acts much the same ways as the <a href="../cli/npm-cache.html">npm-cache(1)</a> command line
+functionality.</p>
+<p>The callback is called with the package.json data of the thing that is
+eventually added to or read from the cache.</p>
+<p>The top level <code>npm.commands.cache(...)</code> functionality is a public
+interface, and like all commands on the <code>npm.commands</code> object, it will
+match the command line behavior exactly.</p>
+<p>However, the cache folder structure and the cache helper functions are
+considered <strong>internal</strong> API surface, and as such, may change in future
+releases of npm, potentially without warning or significant version
+incrementation.</p>
+<p>Use at your own risk.</p>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-cache &mdash; npm@1.4.14</p>
+
diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html
index 3c68e4ba5..275911f3d 100644
--- a/deps/npm/html/doc/api/npm-commands.html
+++ b/deps/npm/html/doc/api/npm-commands.html
@@ -36,5 +36,5 @@ usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-commands &mdash; npm@1.4.10</p>
+<p id="footer">npm-commands &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html
index eee2e52bb..adc681699 100644
--- a/deps/npm/html/doc/api/npm-config.html
+++ b/deps/npm/html/doc/api/npm-config.html
@@ -57,5 +57,5 @@ functions instead.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-config &mdash; npm@1.4.10</p>
+<p id="footer">npm-config &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html
index 9513b9648..220b2e637 100644
--- a/deps/npm/html/doc/api/npm-deprecate.html
+++ b/deps/npm/html/doc/api/npm-deprecate.html
@@ -47,5 +47,5 @@ a deprecation warning to all who attempt to install it.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-deprecate &mdash; npm@1.4.10</p>
+<p id="footer">npm-deprecate &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html
index 62e246e06..617e8886e 100644
--- a/deps/npm/html/doc/api/npm-docs.html
+++ b/deps/npm/html/doc/api/npm-docs.html
@@ -33,5 +33,5 @@ friendly for programmatic use.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-docs &mdash; npm@1.4.10</p>
+<p id="footer">npm-docs &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html
index 78e685f04..700e45ced 100644
--- a/deps/npm/html/doc/api/npm-edit.html
+++ b/deps/npm/html/doc/api/npm-edit.html
@@ -36,5 +36,5 @@ and how this is used.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-edit &mdash; npm@1.4.10</p>
+<p id="footer">npm-edit &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html
index d177e9089..ea0aacecf 100644
--- a/deps/npm/html/doc/api/npm-explore.html
+++ b/deps/npm/html/doc/api/npm-explore.html
@@ -31,5 +31,5 @@ sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-explore &mdash; npm@1.4.10</p>
+<p id="footer">npm-explore &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html
index ec4c6ea06..f263eaf79 100644
--- a/deps/npm/html/doc/api/npm-help-search.html
+++ b/deps/npm/html/doc/api/npm-help-search.html
@@ -44,5 +44,5 @@ Name of the file that matched</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-help-search &mdash; npm@1.4.10</p>
+<p id="footer">npm-help-search &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html
index 81d790bb7..062b2e872 100644
--- a/deps/npm/html/doc/api/npm-init.html
+++ b/deps/npm/html/doc/api/npm-init.html
@@ -39,5 +39,5 @@ then go ahead and use this programmatically.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-init &mdash; npm@1.4.10</p>
+<p id="footer">npm-init &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html
index 5fa76079a..11a5f377d 100644
--- a/deps/npm/html/doc/api/npm-install.html
+++ b/deps/npm/html/doc/api/npm-install.html
@@ -32,5 +32,5 @@ installed or when an error has been encountered.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-install &mdash; npm@1.4.10</p>
+<p id="footer">npm-install &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html
index 1f162e3b4..def9bd2bf 100644
--- a/deps/npm/html/doc/api/npm-link.html
+++ b/deps/npm/html/doc/api/npm-link.html
@@ -42,5 +42,5 @@ the package in the current working directory</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-link &mdash; npm@1.4.10</p>
+<p id="footer">npm-link &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html
index b996d7aa9..79ff0980f 100644
--- a/deps/npm/html/doc/api/npm-load.html
+++ b/deps/npm/html/doc/api/npm-load.html
@@ -37,5 +37,5 @@ config object.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-load &mdash; npm@1.4.10</p>
+<p id="footer">npm-load &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html
index cd5f19880..a30aef58f 100644
--- a/deps/npm/html/doc/api/npm-ls.html
+++ b/deps/npm/html/doc/api/npm-ls.html
@@ -63,5 +63,5 @@ dependency will only be output once.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-ls &mdash; npm@1.4.10</p>
+<p id="footer">npm-ls &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html
index 854942b7d..0be019538 100644
--- a/deps/npm/html/doc/api/npm-outdated.html
+++ b/deps/npm/html/doc/api/npm-outdated.html
@@ -28,5 +28,5 @@ currently outdated.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-outdated &mdash; npm@1.4.10</p>
+<p id="footer">npm-outdated &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html
index 8a71f25e4..a0d654055 100644
--- a/deps/npm/html/doc/api/npm-owner.html
+++ b/deps/npm/html/doc/api/npm-owner.html
@@ -47,5 +47,5 @@ that is not implemented at this time.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-owner &mdash; npm@1.4.10</p>
+<p id="footer">npm-owner &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html
index d08cbfae6..41304792e 100644
--- a/deps/npm/html/doc/api/npm-pack.html
+++ b/deps/npm/html/doc/api/npm-pack.html
@@ -33,5 +33,5 @@ overwritten the second time.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-pack &mdash; npm@1.4.10</p>
+<p id="footer">npm-pack &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html
index 44a17f79c..09e6a5cee 100644
--- a/deps/npm/html/doc/api/npm-prefix.html
+++ b/deps/npm/html/doc/api/npm-prefix.html
@@ -29,5 +29,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prefix &mdash; npm@1.4.10</p>
+<p id="footer">npm-prefix &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html
index 0358f77a6..82cd6118e 100644
--- a/deps/npm/html/doc/api/npm-prune.html
+++ b/deps/npm/html/doc/api/npm-prune.html
@@ -30,5 +30,5 @@ package&#39;s dependencies list.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prune &mdash; npm@1.4.10</p>
+<p id="footer">npm-prune &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html
index e3e03960b..49eaabd59 100644
--- a/deps/npm/html/doc/api/npm-publish.html
+++ b/deps/npm/html/doc/api/npm-publish.html
@@ -46,5 +46,5 @@ the registry. Overwrites when the &quot;force&quot; environment variable is set
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-publish &mdash; npm@1.4.10</p>
+<p id="footer">npm-publish &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html
index f37301f56..e8a302389 100644
--- a/deps/npm/html/doc/api/npm-rebuild.html
+++ b/deps/npm/html/doc/api/npm-rebuild.html
@@ -30,5 +30,5 @@ the new binary. If no &#39;packages&#39; parameter is specify, every package wil
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-rebuild &mdash; npm@1.4.10</p>
+<p id="footer">npm-rebuild &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html
index 8af28e55c..5fdc0d61d 100644
--- a/deps/npm/html/doc/api/npm-repo.html
+++ b/deps/npm/html/doc/api/npm-repo.html
@@ -33,5 +33,5 @@ friendly for programmatic use.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-repo &mdash; npm@1.4.10</p>
+<p id="footer">npm-repo &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html
index bd33c4458..b71335e5c 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 <code>packages</code> parameter.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-restart &mdash; npm@1.4.10</p>
+<p id="footer">npm-restart &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html
index ef54abb66..82a122069 100644
--- a/deps/npm/html/doc/api/npm-root.html
+++ b/deps/npm/html/doc/api/npm-root.html
@@ -29,5 +29,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-root &mdash; npm@1.4.10</p>
+<p id="footer">npm-root &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html
index b1575d699..8b47cd5e1 100644
--- a/deps/npm/html/doc/api/npm-run-script.html
+++ b/deps/npm/html/doc/api/npm-run-script.html
@@ -41,5 +41,5 @@ assumed to be the command to run. All other elements are ignored.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-run-script &mdash; npm@1.4.10</p>
+<p id="footer">npm-run-script &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html
index d13d836c9..02f8e6f42 100644
--- a/deps/npm/html/doc/api/npm-search.html
+++ b/deps/npm/html/doc/api/npm-search.html
@@ -53,5 +53,5 @@ like).</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-search &mdash; npm@1.4.10</p>
+<p id="footer">npm-search &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html
index 659d1b392..f8a3eca52 100644
--- a/deps/npm/html/doc/api/npm-shrinkwrap.html
+++ b/deps/npm/html/doc/api/npm-shrinkwrap.html
@@ -33,5 +33,5 @@ been saved.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-shrinkwrap &mdash; npm@1.4.10</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html
index 2b2f41fd8..1c9ec3a25 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 <code>packages</code> parameter.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-start &mdash; npm@1.4.10</p>
+<p id="footer">npm-start &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html
index a7dfcedd4..d1ab824a3 100644
--- a/deps/npm/html/doc/api/npm-stop.html
+++ b/deps/npm/html/doc/api/npm-stop.html
@@ -28,5 +28,5 @@ in the <code>packages</code> parameter.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-stop &mdash; npm@1.4.10</p>
+<p id="footer">npm-stop &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-submodule.html b/deps/npm/html/doc/api/npm-submodule.html
index ab98ab5bc..79f005461 100644
--- a/deps/npm/html/doc/api/npm-submodule.html
+++ b/deps/npm/html/doc/api/npm-submodule.html
@@ -42,5 +42,5 @@ dependencies into the submodule folder.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-submodule &mdash; npm@1.4.10</p>
+<p id="footer">npm-submodule &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html
index af49ab455..6648205dd 100644
--- a/deps/npm/html/doc/api/npm-tag.html
+++ b/deps/npm/html/doc/api/npm-tag.html
@@ -36,5 +36,5 @@ used. For more information about how to set this config, check
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-tag &mdash; npm@1.4.10</p>
+<p id="footer">npm-tag &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html
index 548d97937..ae2148f76 100644
--- a/deps/npm/html/doc/api/npm-test.html
+++ b/deps/npm/html/doc/api/npm-test.html
@@ -30,5 +30,5 @@ in the <code>packages</code> parameter.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-test &mdash; npm@1.4.10</p>
+<p id="footer">npm-test &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html
index 77f6233a0..0599d68ea 100644
--- a/deps/npm/html/doc/api/npm-uninstall.html
+++ b/deps/npm/html/doc/api/npm-uninstall.html
@@ -30,5 +30,5 @@ uninstalled or when an error has been encountered.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-uninstall &mdash; npm@1.4.10</p>
+<p id="footer">npm-uninstall &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html
index 7b3c99df2..186ae801d 100644
--- a/deps/npm/html/doc/api/npm-unpublish.html
+++ b/deps/npm/html/doc/api/npm-unpublish.html
@@ -33,5 +33,5 @@ the root package entry is removed from the registry entirely.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-unpublish &mdash; npm@1.4.10</p>
+<p id="footer">npm-unpublish &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html
index f706f1e86..4d725404d 100644
--- a/deps/npm/html/doc/api/npm-update.html
+++ b/deps/npm/html/doc/api/npm-update.html
@@ -27,5 +27,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-update &mdash; npm@1.4.10</p>
+<p id="footer">npm-update &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html
index ede9d6b37..f052db67c 100644
--- a/deps/npm/html/doc/api/npm-version.html
+++ b/deps/npm/html/doc/api/npm-version.html
@@ -32,5 +32,5 @@ not have exactly one element. The only element should be a version number.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-version &mdash; npm@1.4.10</p>
+<p id="footer">npm-version &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html
index b4c54cf1f..c91edf916 100644
--- a/deps/npm/html/doc/api/npm-view.html
+++ b/deps/npm/html/doc/api/npm-view.html
@@ -81,5 +81,5 @@ the field name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-view &mdash; npm@1.4.10</p>
+<p id="footer">npm-view &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html
index b6e17a6b5..b75a055b3 100644
--- a/deps/npm/html/doc/api/npm-whoami.html
+++ b/deps/npm/html/doc/api/npm-whoami.html
@@ -29,5 +29,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-whoami &mdash; npm@1.4.10</p>
+<p id="footer">npm-whoami &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html
index 2cc3b6448..09dfa0018 100644
--- a/deps/npm/html/doc/api/npm.html
+++ b/deps/npm/html/doc/api/npm.html
@@ -23,7 +23,7 @@ npm.load([configObject, ]function (er, npm) {
npm.commands.install([&quot;package&quot;], cb)
})
</code></pre><h2 id="version">VERSION</h2>
-<p>1.4.10</p>
+<p>1.4.14</p>
<h2 id="description">DESCRIPTION</h2>
<p>This is the API documentation for npm.
To find documentation of the command line
@@ -110,5 +110,5 @@ method names. Use the <code>npm.deref</code> method to find the real name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm &mdash; npm@1.4.10</p>
+<p id="footer">npm &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html
index 94f3f5d9e..a0432fcfc 100644
--- a/deps/npm/html/doc/cli/npm-adduser.html
+++ b/deps/npm/html/doc/cli/npm-adduser.html
@@ -46,5 +46,5 @@ authorize on a new machine.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-adduser &mdash; npm@1.4.10</p>
+<p id="footer">npm-adduser &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html
index 7bb77547a..4d5d74239 100644
--- a/deps/npm/html/doc/cli/npm-bin.html
+++ b/deps/npm/html/doc/cli/npm-bin.html
@@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bin &mdash; npm@1.4.10</p>
+<p id="footer">npm-bin &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html
index e308b5687..1a571fd12 100644
--- a/deps/npm/html/doc/cli/npm-bugs.html
+++ b/deps/npm/html/doc/cli/npm-bugs.html
@@ -54,5 +54,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bugs &mdash; npm@1.4.10</p>
+<p id="footer">npm-bugs &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html
index ccf049e04..ceec57429 100644
--- a/deps/npm/html/doc/cli/npm-build.html
+++ b/deps/npm/html/doc/cli/npm-build.html
@@ -38,5 +38,5 @@ A folder containing a <code>package.json</code> file in its root.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-build &mdash; npm@1.4.10</p>
+<p id="footer">npm-build &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html
index 7493151d1..b6ca08ac3 100644
--- a/deps/npm/html/doc/cli/npm-bundle.html
+++ b/deps/npm/html/doc/cli/npm-bundle.html
@@ -31,5 +31,5 @@ install packages into the local space.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-bundle &mdash; npm@1.4.10</p>
+<p id="footer">npm-bundle &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html
index 1d0d0805c..c36d9bd9e 100644
--- a/deps/npm/html/doc/cli/npm-cache.html
+++ b/deps/npm/html/doc/cli/npm-cache.html
@@ -43,16 +43,14 @@ the entire cache is cleared.</p>
For each package that is added to the cache, three pieces of information are
stored in <code>{cache}/{name}/{version}</code>:</p>
<ul>
-<li>.../package/:
-A folder containing the package contents as they appear in the tarball.</li>
-<li>.../package.json:
-The package.json file, as npm sees it, with overlays applied and a _id attribute.</li>
+<li>.../package/package.json:
+The package.json file, as npm sees it.</li>
<li>.../package.tgz:
The tarball for that version.</li>
</ul>
<p>Additionally, whenever a registry request is made, a <code>.cache.json</code> file
is placed at the corresponding URI, to store the ETag and the requested
-data.</p>
+data. This is stored in <code>{cache}/{hostname}/{path}/.cache.json</code>.</p>
<p>Commands that make non-essential registry requests (such as <code>search</code> and
<code>view</code>, or the completion scripts) generally specify a minimum timeout.
If the <code>.cache.json</code> file is younger than the specified timeout, then
@@ -83,5 +81,5 @@ they do not make an HTTP request to the registry.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-cache &mdash; npm@1.4.10</p>
+<p id="footer">npm-cache &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html
index 5208ee05d..77bd60389 100644
--- a/deps/npm/html/doc/cli/npm-completion.html
+++ b/deps/npm/html/doc/cli/npm-completion.html
@@ -42,5 +42,5 @@ completions based on the arguments.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-completion &mdash; npm@1.4.10</p>
+<p id="footer">npm-completion &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html
index a44e771d5..20baf24eb 100644
--- a/deps/npm/html/doc/cli/npm-config.html
+++ b/deps/npm/html/doc/cli/npm-config.html
@@ -66,5 +66,5 @@ global config.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-config &mdash; npm@1.4.10</p>
+<p id="footer">npm-config &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html
index 17bbbe703..acdfea64a 100644
--- a/deps/npm/html/doc/cli/npm-dedupe.html
+++ b/deps/npm/html/doc/cli/npm-dedupe.html
@@ -63,5 +63,5 @@ versions.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-dedupe &mdash; npm@1.4.10</p>
+<p id="footer">npm-dedupe &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html
index 4852aa339..a74b32969 100644
--- a/deps/npm/html/doc/cli/npm-deprecate.html
+++ b/deps/npm/html/doc/cli/npm-deprecate.html
@@ -38,5 +38,5 @@ something like this:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-deprecate &mdash; npm@1.4.10</p>
+<p id="footer">npm-deprecate &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html
index bef7fad93..bea53fb54 100644
--- a/deps/npm/html/doc/cli/npm-docs.html
+++ b/deps/npm/html/doc/cli/npm-docs.html
@@ -56,5 +56,5 @@ the current folder and use the <code>name</code> property.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-docs &mdash; npm@1.4.10</p>
+<p id="footer">npm-docs &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html
index ad2b9b2c5..7ac413dbb 100644
--- a/deps/npm/html/doc/cli/npm-edit.html
+++ b/deps/npm/html/doc/cli/npm-edit.html
@@ -49,5 +49,5 @@ or <code>&quot;notepad&quot;</code> on Windows.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-edit &mdash; npm@1.4.10</p>
+<p id="footer">npm-edit &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html
index 13a906d26..2b2c6d86f 100644
--- a/deps/npm/html/doc/cli/npm-explore.html
+++ b/deps/npm/html/doc/cli/npm-explore.html
@@ -50,5 +50,5 @@ Windows</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-explore &mdash; npm@1.4.10</p>
+<p id="footer">npm-explore &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html
index 74c0efae5..230ba2448 100644
--- a/deps/npm/html/doc/cli/npm-help-search.html
+++ b/deps/npm/html/doc/cli/npm-help-search.html
@@ -46,5 +46,5 @@ where the terms were found in the documentation.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-help-search &mdash; npm@1.4.10</p>
+<p id="footer">npm-help-search &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html
index da1bbd929..94390b8f8 100644
--- a/deps/npm/html/doc/cli/npm-help.html
+++ b/deps/npm/html/doc/cli/npm-help.html
@@ -52,5 +52,5 @@ matches are equivalent to specifying a topic name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-help &mdash; npm@1.4.10</p>
+<p id="footer">npm-help &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html
index 443503060..79727e3de 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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-init &mdash; npm@1.4.10</p>
+<p id="footer">npm-init &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html
index af7251cd7..0990a9cfe 100644
--- a/deps/npm/html/doc/cli/npm-install.html
+++ b/deps/npm/html/doc/cli/npm-install.html
@@ -220,5 +220,5 @@ affects a real use-case, it will be investigated.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-install &mdash; npm@1.4.10</p>
+<p id="footer">npm-install &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html
index ab9d36e59..8db829432 100644
--- a/deps/npm/html/doc/cli/npm-link.html
+++ b/deps/npm/html/doc/cli/npm-link.html
@@ -66,5 +66,5 @@ installation target into your project&#39;s <code>node_modules</code> folder.</p
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-link &mdash; npm@1.4.10</p>
+<p id="footer">npm-link &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html
index 1d7ecfa1b..45090d719 100644
--- a/deps/npm/html/doc/cli/npm-ls.html
+++ b/deps/npm/html/doc/cli/npm-ls.html
@@ -22,7 +22,7 @@ installed, as well as their dependencies, in a tree-structure.</p>
limit the results to only the paths to the packages named. Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-<pre><code>npm@1.4.10 /path/to/npm
+<pre><code>npm@1.4.14 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
@@ -85,5 +85,5 @@ project.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-ls &mdash; npm@1.4.10</p>
+<p id="footer">npm-ls &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html
index 94224cc90..e784c19b3 100644
--- a/deps/npm/html/doc/cli/npm-outdated.html
+++ b/deps/npm/html/doc/cli/npm-outdated.html
@@ -67,5 +67,5 @@ project.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-outdated &mdash; npm@1.4.10</p>
+<p id="footer">npm-outdated &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html
index e73d1d352..a7976af48 100644
--- a/deps/npm/html/doc/cli/npm-owner.html
+++ b/deps/npm/html/doc/cli/npm-owner.html
@@ -49,5 +49,5 @@ that is not implemented at this time.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-owner &mdash; npm@1.4.10</p>
+<p id="footer">npm-owner &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html
index 9d6b56b10..6ad4c9973 100644
--- a/deps/npm/html/doc/cli/npm-pack.html
+++ b/deps/npm/html/doc/cli/npm-pack.html
@@ -41,5 +41,5 @@ overwritten the second time.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-pack &mdash; npm@1.4.10</p>
+<p id="footer">npm-pack &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html
index 3ddc96fab..9444984d5 100644
--- a/deps/npm/html/doc/cli/npm-prefix.html
+++ b/deps/npm/html/doc/cli/npm-prefix.html
@@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prefix &mdash; npm@1.4.10</p>
+<p id="footer">npm-prefix &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html
index f555382b2..d936b7034 100644
--- a/deps/npm/html/doc/cli/npm-prune.html
+++ b/deps/npm/html/doc/cli/npm-prune.html
@@ -39,5 +39,5 @@ packages specified in your <code>devDependencies</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-prune &mdash; npm@1.4.10</p>
+<p id="footer">npm-prune &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html
index 876c2caf4..d4c8077c0 100644
--- a/deps/npm/html/doc/cli/npm-publish.html
+++ b/deps/npm/html/doc/cli/npm-publish.html
@@ -54,5 +54,5 @@ it is removed with <a href="../cli/npm-unpublish.html">npm-unpublish(1)</a>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-publish &mdash; npm@1.4.10</p>
+<p id="footer">npm-publish &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html
index cf5b553d1..46b73f7f4 100644
--- a/deps/npm/html/doc/cli/npm-rebuild.html
+++ b/deps/npm/html/doc/cli/npm-rebuild.html
@@ -38,5 +38,5 @@ the new binary.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-rebuild &mdash; npm@1.4.10</p>
+<p id="footer">npm-rebuild &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html
index 325d607a8..0900e0df8 100644
--- a/deps/npm/html/doc/cli/npm-repo.html
+++ b/deps/npm/html/doc/cli/npm-repo.html
@@ -42,5 +42,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-repo &mdash; npm@1.4.10</p>
+<p id="footer">npm-repo &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html
index cef310499..3fb826b6f 100644
--- a/deps/npm/html/doc/cli/npm-restart.html
+++ b/deps/npm/html/doc/cli/npm-restart.html
@@ -37,5 +37,5 @@ the &quot;start&quot; script.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-restart &mdash; npm@1.4.10</p>
+<p id="footer">npm-restart &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html
index d8f6491ba..12ed0e68d 100644
--- a/deps/npm/html/doc/cli/npm-rm.html
+++ b/deps/npm/html/doc/cli/npm-rm.html
@@ -39,5 +39,5 @@ on its behalf.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-rm &mdash; npm@1.4.10</p>
+<p id="footer">npm-rm &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html
index e4f097ee1..260340e5c 100644
--- a/deps/npm/html/doc/cli/npm-root.html
+++ b/deps/npm/html/doc/cli/npm-root.html
@@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-root &mdash; npm@1.4.10</p>
+<p id="footer">npm-root &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html
index 64afc282b..8d9676aa6 100644
--- a/deps/npm/html/doc/cli/npm-run-script.html
+++ b/deps/npm/html/doc/cli/npm-run-script.html
@@ -12,6 +12,7 @@
<h1><a href="../cli/npm-run-script.html">npm-run-script</a></h1> <p>Run arbitrary package scripts</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm run-script [&lt;pkg&gt;] [command]
+npm run [&lt;pkg&gt;] [command]
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>This runs an arbitrary command from a package&#39;s <code>&quot;scripts&quot;</code> object.
If no package name is provided, it will search for a <code>package.json</code>
@@ -39,5 +40,5 @@ called directly, as well.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-run-script &mdash; npm@1.4.10</p>
+<p id="footer">npm-run-script &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html
index e71c6bb2a..4ada3f32e 100644
--- a/deps/npm/html/doc/cli/npm-search.html
+++ b/deps/npm/html/doc/cli/npm-search.html
@@ -49,5 +49,5 @@ fall on multiple lines.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-search &mdash; npm@1.4.10</p>
+<p id="footer">npm-search &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html
index 03c63e443..3ccbdb704 100644
--- a/deps/npm/html/doc/cli/npm-shrinkwrap.html
+++ b/deps/npm/html/doc/cli/npm-shrinkwrap.html
@@ -172,5 +172,5 @@ contents rather than versions.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-shrinkwrap &mdash; npm@1.4.10</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html
index 053fd9b8e..5dbe8ed10 100644
--- a/deps/npm/html/doc/cli/npm-star.html
+++ b/deps/npm/html/doc/cli/npm-star.html
@@ -36,5 +36,5 @@ a vaguely positive way to show that you care.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-star &mdash; npm@1.4.10</p>
+<p id="footer">npm-star &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html
index 4ce9697ca..859defc07 100644
--- a/deps/npm/html/doc/cli/npm-stars.html
+++ b/deps/npm/html/doc/cli/npm-stars.html
@@ -37,5 +37,5 @@ you will most certainly enjoy this command.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-stars &mdash; npm@1.4.10</p>
+<p id="footer">npm-stars &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html
index 412a9916c..cda2070c5 100644
--- a/deps/npm/html/doc/cli/npm-start.html
+++ b/deps/npm/html/doc/cli/npm-start.html
@@ -34,5 +34,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-start &mdash; npm@1.4.10</p>
+<p id="footer">npm-start &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html
index 76a83fd56..29b168d47 100644
--- a/deps/npm/html/doc/cli/npm-stop.html
+++ b/deps/npm/html/doc/cli/npm-stop.html
@@ -34,5 +34,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-stop &mdash; npm@1.4.10</p>
+<p id="footer">npm-stop &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-submodule.html b/deps/npm/html/doc/cli/npm-submodule.html
index e8cba1b48..e1b1ee714 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.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-submodule &mdash; npm@1.4.10</p>
+<p id="footer">npm-submodule &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html
index 9e7a83f7d..c534dbfbf 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:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-tag &mdash; npm@1.4.10</p>
+<p id="footer">npm-tag &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html
index 155b93005..a1ce4e133 100644
--- a/deps/npm/html/doc/cli/npm-test.html
+++ b/deps/npm/html/doc/cli/npm-test.html
@@ -37,5 +37,5 @@ true.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-test &mdash; npm@1.4.10</p>
+<p id="footer">npm-test &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html
index 343bc01d8..e543ebc97 100644
--- a/deps/npm/html/doc/cli/npm-uninstall.html
+++ b/deps/npm/html/doc/cli/npm-uninstall.html
@@ -55,5 +55,5 @@ npm uninstall dtrace-provider --save-optional
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-uninstall &mdash; npm@1.4.10</p>
+<p id="footer">npm-uninstall &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html
index de53589b5..7406cbf93 100644
--- a/deps/npm/html/doc/cli/npm-unpublish.html
+++ b/deps/npm/html/doc/cli/npm-unpublish.html
@@ -46,5 +46,5 @@ package again, a new version number must be used.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-unpublish &mdash; npm@1.4.10</p>
+<p id="footer">npm-unpublish &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html
index 7d624199f..d62586ce1 100644
--- a/deps/npm/html/doc/cli/npm-update.html
+++ b/deps/npm/html/doc/cli/npm-update.html
@@ -38,5 +38,5 @@ If no package name is specified, all packages in the specified location (global
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-update &mdash; npm@1.4.10</p>
+<p id="footer">npm-update &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html
index 027c8ebfe..ef6325b85 100644
--- a/deps/npm/html/doc/cli/npm-version.html
+++ b/deps/npm/html/doc/cli/npm-version.html
@@ -55,5 +55,5 @@ Enter passphrase:
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-version &mdash; npm@1.4.10</p>
+<p id="footer">npm-version &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html
index adce11547..c3d5e9d12 100644
--- a/deps/npm/html/doc/cli/npm-view.html
+++ b/deps/npm/html/doc/cli/npm-view.html
@@ -82,5 +82,5 @@ the field name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-view &mdash; npm@1.4.10</p>
+<p id="footer">npm-view &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html
index e91ab740d..4e8885e6b 100644
--- a/deps/npm/html/doc/cli/npm-whoami.html
+++ b/deps/npm/html/doc/cli/npm-whoami.html
@@ -33,5 +33,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-whoami &mdash; npm@1.4.10</p>
+<p id="footer">npm-whoami &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html
index 6381af290..3641019fc 100644
--- a/deps/npm/html/doc/cli/npm.html
+++ b/deps/npm/html/doc/cli/npm.html
@@ -13,7 +13,7 @@
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm &lt;command&gt; [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>1.4.10</p>
+<p>1.4.14</p>
<h2 id="description">DESCRIPTION</h2>
<p>npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
@@ -28,6 +28,19 @@ programs.</p>
<code><a href="../cli/npm-install.html">npm-install(1)</a></code> for more info. It can do a lot of stuff.</p>
<p>Use the <code>npm search</code> command to show everything that&#39;s available.
Use <code>npm ls</code> to show everything you&#39;ve installed.</p>
+<h2 id="dependencies">DEPENDENCIES</h2>
+<p>If a package references to another package with a git URL, npm depends
+on a preinstalled git.</p>
+<p>If one of the packages npm tries to install is a native node module and
+requires compiling of C++ Code, npm will use
+<a href="https://github.com/TooTallNate/node-gyp">node-gyp</a> for that task.
+For a Unix system, <a href="https://github.com/TooTallNate/node-gyp">node-gyp</a>
+needs Python, make and a buildchain like GCC. On Windows,
+Python and Microsoft Visual Studio C++ is needed. Python 3 is
+not supported by <a href="https://github.com/TooTallNate/node-gyp">node-gyp</a>.
+For more information visit
+<a href="https://github.com/TooTallNate/node-gyp">the node-gyp repository</a> and
+the <a href="https://github.com/TooTallNate/node-gyp/wiki">node-gyp Wiki</a>.</p>
<h2 id="directories">DIRECTORIES</h2>
<p>See <code><a href="../files/npm-folders.html">npm-folders(5)</a></code> to learn about where npm puts stuff.</p>
<p>In particular, npm has two modes of operation:</p>
@@ -97,7 +110,7 @@ easily by doing <code>npm view npm contributors</code>.</p>
the issues list or ask on the mailing list.</p>
<ul>
<li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
-<li><a href="&#109;&#x61;&#105;&#108;&#x74;&#111;&#58;&#110;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#x72;&#x6f;&#117;&#112;&#x73;&#46;&#x63;&#x6f;&#x6d;">&#110;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#103;&#x72;&#x6f;&#117;&#112;&#x73;&#46;&#x63;&#x6f;&#x6d;</a></li>
+<li><a href="&#x6d;&#x61;&#105;&#108;&#x74;&#x6f;&#x3a;&#110;&#112;&#x6d;&#45;&#x40;&#103;&#111;&#111;&#103;&#x6c;&#101;&#103;&#114;&#x6f;&#117;&#112;&#115;&#x2e;&#99;&#111;&#109;">&#110;&#112;&#x6d;&#45;&#x40;&#103;&#111;&#111;&#103;&#x6c;&#101;&#103;&#114;&#x6f;&#117;&#112;&#115;&#x2e;&#99;&#111;&#109;</a></li>
</ul>
<h2 id="bugs">BUGS</h2>
<p>When you find issues, please report them:</p>
@@ -105,7 +118,7 @@ the issues list or ask on the mailing list.</p>
<li>web:
<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
<li>email:
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#x6e;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#103;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#x70;&#115;&#x2e;&#x63;&#111;&#x6d;">&#x6e;&#112;&#109;&#x2d;&#x40;&#103;&#111;&#x6f;&#103;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#x70;&#115;&#x2e;&#x63;&#111;&#x6d;</a></li>
+<a href="&#x6d;&#97;&#105;&#108;&#116;&#x6f;&#58;&#110;&#112;&#x6d;&#45;&#x40;&#103;&#111;&#111;&#x67;&#108;&#101;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#99;&#x6f;&#x6d;">&#110;&#112;&#x6d;&#45;&#x40;&#103;&#111;&#111;&#x67;&#108;&#101;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#99;&#x6f;&#x6d;</a></li>
</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
@@ -115,7 +128,7 @@ will no doubt tell you to put the output in a gist or email.</p>
<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#x69;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;">&#x69;&#64;&#105;&#x7a;&#115;&#46;&#x6d;&#x65;</a></p>
+<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#x40;&#105;&#x7a;&#115;&#46;&#x6d;&#101;">&#105;&#x40;&#105;&#x7a;&#115;&#46;&#x6d;&#101;</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
@@ -141,5 +154,5 @@ will no doubt tell you to put the output in a gist or email.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm &mdash; npm@1.4.10</p>
+<p id="footer">npm &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html
index 5846fe962..fa35509f4 100644
--- a/deps/npm/html/doc/files/npm-folders.html
+++ b/deps/npm/html/doc/files/npm-folders.html
@@ -179,5 +179,5 @@ cannot be found elsewhere. See <code><a href="../files/package.json.html">packa
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-folders &mdash; npm@1.4.10</p>
+<p id="footer">npm-folders &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html
index 5846fe962..fa35509f4 100644
--- a/deps/npm/html/doc/files/npm-global.html
+++ b/deps/npm/html/doc/files/npm-global.html
@@ -179,5 +179,5 @@ cannot be found elsewhere. See <code><a href="../files/package.json.html">packa
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-folders &mdash; npm@1.4.10</p>
+<p id="footer">npm-folders &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html
index 43a9f0742..e7f51d11f 100644
--- a/deps/npm/html/doc/files/npm-json.html
+++ b/deps/npm/html/doc/files/npm-json.html
@@ -459,5 +459,5 @@ ignored.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">package.json &mdash; npm@1.4.10</p>
+<p id="footer">package.json &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html
index b6df4dc57..90588e61e 100644
--- a/deps/npm/html/doc/files/npmrc.html
+++ b/deps/npm/html/doc/files/npmrc.html
@@ -17,8 +17,9 @@ variables, and <code>npmrc</code> files.</p>
of the user and global npmrc files.</p>
<p>For a list of available configuration options, see <a href="../misc/npm-config.html">npm-config(7)</a>.</p>
<h2 id="files">FILES</h2>
-<p>The three relevant files are:</p>
+<p>The four relevant files are:</p>
<ul>
+<li>per-project config file (/path/to/my/project/.npmrc)</li>
<li>per-user config file (~/.npmrc)</li>
<li>global config file ($PREFIX/npmrc)</li>
<li>npm builtin config file (/path/to/npm/npmrc)</li>
@@ -30,6 +31,14 @@ parameters. Environment variables can be replaced using
</code></pre><p>Each of these files is loaded, and config options are resolved in
priority order. For example, a setting in the userconfig file would
override the setting in the globalconfig file.</p>
+<h3 id="per-project-config-file">Per-project config file</h3>
+<p>When working locally in a project, a <code>.npmrc</code> file in the root of the
+project (ie, a sibling of <code>node_modules</code> and <code>package.json</code>) will set
+config values specific to this project.</p>
+<p>Note that this only applies to the root of the project that you&#39;re
+running npm in. It has no effect when your module is published. For
+example, you can&#39;t publish a module that forces itself to install
+globally, or in a different location.</p>
<h3 id="per-user-config-file">Per-user config file</h3>
<p><code>$HOME/.npmrc</code> (or the <code>userconfig</code> param, if set in the environment
or on the command line)</p>
@@ -64,5 +73,5 @@ manner.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npmrc &mdash; npm@1.4.10</p>
+<p id="footer">npmrc &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html
index 43a9f0742..e7f51d11f 100644
--- a/deps/npm/html/doc/files/package.json.html
+++ b/deps/npm/html/doc/files/package.json.html
@@ -459,5 +459,5 @@ ignored.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">package.json &mdash; npm@1.4.10</p>
+<p id="footer">package.json &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html
index 91c6876e9..56b3baff7 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -114,6 +114,8 @@
<p>Display npm bin folder</p>
<h2 id="npm-bugs-3-"><a href="api/npm-bugs.html">npm-bugs(3)</a></h2>
<p>Bugs for a package in a web browser maybe</p>
+<h2 id="npm-cache-3-"><a href="api/npm-cache.html">npm-cache(3)</a></h2>
+<p>manage the npm cache programmatically</p>
<h2 id="npm-commands-3-"><a href="api/npm-commands.html">npm-commands(3)</a></h2>
<p>npm commands</p>
<h2 id="npm-config-3-"><a href="api/npm-config.html">npm-config(3)</a></h2>
@@ -226,5 +228,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-index &mdash; npm@1.4.10</p>
+<p id="footer">npm-index &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html
index f26eb2931..e9c012125 100644
--- a/deps/npm/html/doc/misc/npm-coding-style.html
+++ b/deps/npm/html/doc/misc/npm-coding-style.html
@@ -147,5 +147,5 @@ set to anything.&quot;</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-coding-style &mdash; npm@1.4.10</p>
+<p id="footer">npm-coding-style &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html
index e279450aa..eefe76f1b 100644
--- a/deps/npm/html/doc/misc/npm-config.html
+++ b/deps/npm/html/doc/misc/npm-config.html
@@ -26,8 +26,9 @@ are not given a value will be given the value of <code>true</code>. Config
values are case-insensitive, so <code>NPM_CONFIG_FOO=bar</code> will work the
same.</p>
<h3 id="npmrc-files">npmrc Files</h3>
-<p>The three relevant files are:</p>
+<p>The four relevant files are:</p>
<ul>
+<li>per-project config file (/path/to/my/project/.npmrc)</li>
<li>per-user config file (~/.npmrc)</li>
<li>global config file ($PREFIX/npmrc)</li>
<li>npm builtin config file (/path/to/npm/npmrc)</li>
@@ -608,6 +609,15 @@ installing.</p>
using <code>-s</code> to add a signature.</p>
<p>Note that git requires you to have set up GPG keys in your git configs
for this to work properly.</p>
+<h3 id="spin">spin</h3>
+<ul>
+<li>Default: true</li>
+<li>Type: Boolean or <code>&quot;always&quot;</code></li>
+</ul>
+<p>When set to <code>true</code>, npm will display an ascii spinner while it is doing
+things, if <code>process.stderr</code> is a TTY.</p>
+<p>Set to <code>false</code> to suppress the spinner, or set to <code>always</code> to output
+the spinner even for non-TTY outputs.</p>
<h3 id="strict-ssl">strict-ssl</h3>
<ul>
<li>Default: true</li>
@@ -731,5 +741,5 @@ hash, and exit successfully.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-config &mdash; npm@1.4.10</p>
+<p id="footer">npm-config &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html
index 6076b8ef1..7c4720b5a 100644
--- a/deps/npm/html/doc/misc/npm-developers.html
+++ b/deps/npm/html/doc/misc/npm-developers.html
@@ -181,5 +181,5 @@ from a fresh checkout.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-developers &mdash; npm@1.4.10</p>
+<p id="footer">npm-developers &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html
index e7db18cab..360565f72 100644
--- a/deps/npm/html/doc/misc/npm-disputes.html
+++ b/deps/npm/html/doc/misc/npm-disputes.html
@@ -13,7 +13,7 @@
<h2 id="synopsis">SYNOPSIS</h2>
<ol>
<li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
-<li>Email the author, CC <a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#x73;&#117;&#112;&#112;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#x6a;&#x73;&#x2e;&#x63;&#x6f;&#x6d;">&#x73;&#117;&#112;&#112;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#109;&#x6a;&#x73;&#x2e;&#x63;&#x6f;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#109;&#x61;&#105;&#108;&#x74;&#111;&#58;&#x73;&#117;&#x70;&#x70;&#111;&#114;&#116;&#64;&#110;&#x70;&#x6d;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;">&#x73;&#117;&#x70;&#x70;&#111;&#114;&#116;&#64;&#110;&#x70;&#x6d;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;</a></li>
<li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
</ol>
<p>Don&#39;t squat on package names. Publish code or move out of the way.</p>
@@ -51,12 +51,12 @@ Joe&#39;s appropriate course of action in each case is the same.</p>
owner (Bob).</li>
<li>Joe emails Bob, explaining the situation <strong>as respectfully as
possible</strong>, and what he would like to do with the module name. He
-adds the npm support staff <a href="&#109;&#97;&#105;&#108;&#x74;&#x6f;&#58;&#115;&#117;&#x70;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#115;&#46;&#99;&#111;&#109;">&#115;&#117;&#x70;&#x70;&#111;&#114;&#116;&#x40;&#x6e;&#112;&#x6d;&#106;&#115;&#46;&#99;&#111;&#109;</a> to the CC list of
+adds the npm support staff <a href="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#x75;&#112;&#112;&#x6f;&#x72;&#116;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#46;&#x63;&#111;&#109;">&#x73;&#x75;&#112;&#112;&#x6f;&#x72;&#116;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#46;&#x63;&#111;&#109;</a> to the CC list of
the email. Mention in the email that Bob can run <code>npm owner add
joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
<li>After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can&#39;t come to any sort of resolution, email support
-<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#111;&#x72;&#116;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#x6d;">&#115;&#x75;&#112;&#x70;&#111;&#x72;&#116;&#x40;&#x6e;&#112;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
+<a href="&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#x70;&#x6d;&#106;&#115;&#46;&#99;&#111;&#109;">&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#x70;&#x6d;&#106;&#115;&#46;&#99;&#111;&#109;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
usually at least 4 weeks, but extra time is allowed around common
holidays.)</li>
</ol>
@@ -112,5 +112,5 @@ things into it.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-disputes &mdash; npm@1.4.10</p>
+<p id="footer">npm-disputes &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html
index 02ba3f901..7e2c7aca0 100644
--- a/deps/npm/html/doc/misc/npm-faq.html
+++ b/deps/npm/html/doc/misc/npm-faq.html
@@ -199,7 +199,7 @@ change it again? npm doesn&#39;t currently track any state about past
configuration settings, so this would be rather difficult to do
properly. It would have to track every previous value for this
config, and always accept any of them, or else yesterday&#39;s install may
-be broken tomorrow. Complexity hurdle #5.</p>
+be broken tomorrow. Complexity hurdle #4.</p>
<p>Never going to happen. The folder is named <code>node_modules</code>. It is
written indelibly in the Node Way, handed down from the ancient times
of Node 0.3.</p>
@@ -237,7 +237,7 @@ that has a package.json in its root, or a git url.
<p>To check if the registry is down, open up
<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a> in a web browser. This will also tell
you if you are just unable to access the internet for some reason.</p>
-<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#x75;&#x70;&#x70;&#111;&#x72;&#116;&#x40;&#110;&#112;&#x6d;&#x6a;&#115;&#x2e;&#x63;&#x6f;&#109;">&#x73;&#x75;&#x70;&#x70;&#111;&#x72;&#116;&#x40;&#110;&#112;&#x6d;&#x6a;&#115;&#x2e;&#x63;&#x6f;&#109;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#x3a;&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#x40;&#110;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#99;&#x6f;&#109;">&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#x40;&#110;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#99;&#x6f;&#109;</a>
or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. If it&#39;s
down for the world (and not just on your local network) then we&#39;re
probably already being pinged about it.</p>
@@ -254,7 +254,7 @@ There is not sufficient need to impose namespace rules on everyone.</p>
contributed to it, some of them quite substantially.</p>
<p>The npm open source project, The npm Registry, and <a href="https://www.npmjs.org">the community
website</a> are maintained and operated by the
-good folks at <a href="https://www.npmjs.com">npm, Inc.</a></p>
+good folks at <a href="http://www.npmjs.com">npm, Inc.</a></p>
<h2 id="i-have-a-question-or-request-not-addressed-here-where-should-i-put-it-">I have a question or request not addressed here. Where should I put it?</h2>
<p>Post an issue on the github project:</p>
<ul>
@@ -285,5 +285,5 @@ good folks at <a href="https://www.npmjs.com">npm, Inc.</a></p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-faq &mdash; npm@1.4.10</p>
+<p id="footer">npm-faq &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html
index 47dcc35c7..3db53a749 100644
--- a/deps/npm/html/doc/misc/npm-index.html
+++ b/deps/npm/html/doc/misc/npm-index.html
@@ -114,6 +114,8 @@
<p>Display npm bin folder</p>
<h2 id="npm-bugs-3-"><a href="../api/npm-bugs.html">npm-bugs(3)</a></h2>
<p>Bugs for a package in a web browser maybe</p>
+<h2 id="npm-cache-3-"><a href="../api/npm-cache.html">npm-cache(3)</a></h2>
+<p>manage the npm cache programmatically</p>
<h2 id="npm-commands-3-"><a href="../api/npm-commands.html">npm-commands(3)</a></h2>
<p>npm commands</p>
<h2 id="npm-config-3-"><a href="../api/npm-config.html">npm-config(3)</a></h2>
@@ -226,5 +228,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-index &mdash; npm@1.4.10</p>
+<p id="footer">npm-index &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html
index 50f0b5967..44faba0a9 100644
--- a/deps/npm/html/doc/misc/npm-registry.html
+++ b/deps/npm/html/doc/misc/npm-registry.html
@@ -71,5 +71,5 @@ effectively implement the entire CouchDB API anyway.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-registry &mdash; npm@1.4.10</p>
+<p id="footer">npm-registry &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html
index 2fcb00949..31c6e2fc1 100644
--- a/deps/npm/html/doc/misc/npm-scripts.html
+++ b/deps/npm/html/doc/misc/npm-scripts.html
@@ -42,7 +42,7 @@ Run by the <code>npm restart</code> command. Note: <code>npm restart</code> will
stop and start scripts if no <code>restart</code> script is provided.</li>
</ul>
<p>Additionally, arbitrary scripts can be run by doing
-<code>npm run-script &lt;stage&gt; &lt;pkg&gt;</code>.</p>
+<code>npm run-script &lt;pkg&gt; &lt;stage&gt;</code>.</p>
<h2 id="note-install-scripts-are-an-antipattern">NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN</h2>
<p><strong>tl;dr</strong> Don&#39;t use <code>install</code>. Use a <code>.gyp</code> file for compilation, and
<code>prepublish</code> for anything else.</p>
@@ -218,5 +218,5 @@ the user will sudo the npm command in question.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">npm-scripts &mdash; npm@1.4.10</p>
+<p id="footer">npm-scripts &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html
index 7b77eecf3..d03538d59 100644
--- a/deps/npm/html/doc/misc/removing-npm.html
+++ b/deps/npm/html/doc/misc/removing-npm.html
@@ -57,5 +57,5 @@ modules. To track those down, you can do the following:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">removing-npm &mdash; npm@1.4.10</p>
+<p id="footer">removing-npm &mdash; npm@1.4.14</p>
diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html
index 4e28efd60..818e554c6 100644
--- a/deps/npm/html/doc/misc/semver.html
+++ b/deps/npm/html/doc/misc/semver.html
@@ -38,15 +38,16 @@ then exits failure.
Versions are printed in ascending order, so supplying
multiple versions to the utility will just sort them.
</code></pre><h2 id="versions">Versions</h2>
-<p>A &quot;version&quot; is described by the v2.0.0 specification found at
+<p>A &quot;version&quot; is described by the <code>v2.0.0</code> specification found at
<a href="http://semver.org/">http://semver.org/</a>.</p>
<p>A leading <code>&quot;=&quot;</code> or <code>&quot;v&quot;</code> character is stripped off and ignored.</p>
<h2 id="ranges">Ranges</h2>
<p>The following range styles are supported:</p>
<ul>
-<li><code>1.2.3</code> A specific version. When nothing else will do. Note that
-build metadata is still ignored, so <code>1.2.3+build2012</code> will satisfy
-this range.</li>
+<li><code>1.2.3</code> 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 <code>1.2.3+build2012</code> will
+satisfy this range.</li>
<li><code>&gt;1.2.3</code> Greater than a specific version.</li>
<li><code>&lt;1.2.3</code> Less than a specific version. If there is no prerelease
tag on the version range, then no prerelease version will be allowed
@@ -57,26 +58,33 @@ not satisfy this range, but <code>2.3.0-beta</code> will.</li>
<li><code>&lt;=1.2.3</code> Less than or equal to. In this case, prerelease versions
ARE allowed, so <code>1.2.3-beta</code> would satisfy.</li>
<li><code>1.2.3 - 2.3.4</code> := <code>&gt;=1.2.3 &lt;=2.3.4</code></li>
-<li><code>~1.2.3</code> := <code>&gt;=1.2.3-0 &lt;1.3.0-0</code> &quot;Reasonably close to 1.2.3&quot;. When
+<li><code>~1.2.3</code> := <code>&gt;=1.2.3-0 &lt;1.3.0-0</code> &quot;Reasonably close to <code>1.2.3</code>&quot;. When
using tilde operators, prerelease versions are supported as well,
but a prerelease of the next significant digit will NOT be
satisfactory, so <code>1.3.0-beta</code> will not satisfy <code>~1.2.3</code>.</li>
-<li><code>^1.2.3</code> := <code>&gt;=1.2.3-0 &lt;2.0.0-0</code> &quot;Compatible with 1.2.3&quot;. When
+<li><code>^1.2.3</code> := <code>&gt;=1.2.3-0 &lt;2.0.0-0</code> &quot;Compatible with <code>1.2.3</code>&quot;. 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). <code>1.5.1</code> will satisfy <code>^1.2.3</code>,
while <code>1.2.2</code> and <code>2.0.0-beta</code> will not.</li>
-<li><code>^0.1.3</code> := <code>&gt;=0.1.3-0 &lt;0.2.0-0</code> &quot;Compatible with 0.1.3&quot;. 0.x.x versions are
+<li><code>^0.1.3</code> := <code>&gt;=0.1.3-0 &lt;0.2.0-0</code> &quot;Compatible with <code>0.1.3</code>&quot;. <code>0.x.x</code> 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.</li>
-<li><code>^0.0.2</code> := <code>=0.0.2</code> &quot;Only the version 0.0.2 is considered compatible&quot;</li>
-<li><code>~1.2</code> := <code>&gt;=1.2.0-0 &lt;1.3.0-0</code> &quot;Any version starting with 1.2&quot;</li>
-<li><code>^1.2</code> := <code>&gt;=1.2.0-0 &lt;2.0.0-0</code> &quot;Any version compatible with 1.2&quot;</li>
-<li><code>1.2.x</code> := <code>&gt;=1.2.0-0 &lt;1.3.0-0</code> &quot;Any version starting with 1.2&quot;</li>
-<li><code>~1</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version starting with 1&quot;</li>
-<li><code>^1</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version compatible with 1&quot;</li>
-<li><code>1.x</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version starting with 1&quot;</li>
+<li><code>^0.0.2</code> := <code>=0.0.2</code> &quot;Only the version <code>0.0.2</code> is considered compatible&quot;</li>
+<li><code>~1.2</code> := <code>&gt;=1.2.0-0 &lt;1.3.0-0</code> &quot;Any version starting with <code>1.2</code>&quot;</li>
+<li><code>^1.2</code> := <code>&gt;=1.2.0-0 &lt;2.0.0-0</code> &quot;Any version compatible with <code>1.2</code>&quot;</li>
+<li><code>1.2.x</code> := <code>&gt;=1.2.0-0 &lt;1.3.0-0</code> &quot;Any version starting with <code>1.2</code>&quot;</li>
+<li><code>1.2.*</code> Same as <code>1.2.x</code>.</li>
+<li><code>1.2</code> Same as <code>1.2.x</code>.</li>
+<li><code>~1</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version starting with <code>1</code>&quot;</li>
+<li><code>^1</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version compatible with <code>1</code>&quot;</li>
+<li><code>1.x</code> := <code>&gt;=1.0.0-0 &lt;2.0.0-0</code> &quot;Any version starting with <code>1</code>&quot;</li>
+<li><code>1.*</code> Same as <code>1.x</code>.</li>
+<li><code>1</code> Same as <code>1.x</code>.</li>
+<li><code>*</code> Any version whatsoever.</li>
+<li><code>x</code> Same as <code>*</code>.</li>
+<li><code>&quot;&quot;</code> (just an empty string) Same as <code>*</code>.</li>
</ul>
<p>Ranges can be joined with either a space (which implies &quot;and&quot;) or a
<code>||</code> (which implies &quot;or&quot;).</p>
@@ -87,41 +95,51 @@ The resulting output will always be 100% strict, of course.</p>
<p>Strict-mode Comparators and Ranges will be strict about the SemVer
strings that they parse.</p>
<ul>
-<li>valid(v): Return the parsed version, or null if it&#39;s not valid.</li>
-<li>inc(v, release): Return the version incremented by the release type
-(major, minor, patch, or prerelease), or null if it&#39;s not valid.</li>
+<li><code>valid(v)</code>: Return the parsed version, or null if it&#39;s not valid.</li>
+<li><code>inc(v, release)</code>: Return the version incremented by the release
+type (<code>major</code>, <code>premajor</code>, <code>minor</code>, <code>preminor</code>, <code>patch</code>,
+<code>prepatch</code>, or <code>prerelease</code>), or null if it&#39;s not valid<ul>
+<li><code>premajor</code> in one call will bump the version up to the next major
+version and down to a prerelease of that major version.
+<code>preminor</code>, and <code>prepatch</code> work the same way.</li>
+<li>If called from a non-prerelease version, the <code>prerelease</code> will work the
+same as <code>prepatch</code>. It increments the patch version, then makes a
+prerelease. If the input version is already a prerelease it simply
+increments it.</li>
+</ul>
+</li>
</ul>
<h3 id="comparison">Comparison</h3>
<ul>
-<li>gt(v1, v2): <code>v1 &gt; v2</code></li>
-<li>gte(v1, v2): <code>v1 &gt;= v2</code></li>
-<li>lt(v1, v2): <code>v1 &lt; v2</code></li>
-<li>lte(v1, v2): <code>v1 &lt;= v2</code></li>
-<li>eq(v1, v2): <code>v1 == v2</code> This is true if they&#39;re logically equivalent,
+<li><code>gt(v1, v2)</code>: <code>v1 &gt; v2</code></li>
+<li><code>gte(v1, v2)</code>: <code>v1 &gt;= v2</code></li>
+<li><code>lt(v1, v2)</code>: <code>v1 &lt; v2</code></li>
+<li><code>lte(v1, v2)</code>: <code>v1 &lt;= v2</code></li>
+<li><code>eq(v1, v2)</code>: <code>v1 == v2</code> This is true if they&#39;re logically equivalent,
even if they&#39;re not the exact same string. You already know how to
compare strings.</li>
-<li>neq(v1, v2): <code>v1 != v2</code> The opposite of eq.</li>
-<li>cmp(v1, comparator, v2): Pass in a comparison string, and it&#39;ll call
+<li><code>neq(v1, v2)</code>: <code>v1 != v2</code> The opposite of <code>eq</code>.</li>
+<li><code>cmp(v1, comparator, v2)</code>: Pass in a comparison string, and it&#39;ll call
the corresponding function above. <code>&quot;===&quot;</code> and <code>&quot;!==&quot;</code> do simple
string comparison, but are included for completeness. Throws if an
invalid comparison string is provided.</li>
-<li>compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
-v2 is greater. Sorts in ascending order if passed to Array.sort().</li>
-<li>rcompare(v1, v2): The reverse of compare. Sorts an array of versions
-in descending order when passed to Array.sort().</li>
+<li><code>compare(v1, v2)</code>: Return <code>0</code> if <code>v1 == v2</code>, or <code>1</code> if <code>v1</code> is greater, or <code>-1</code> if
+<code>v2</code> is greater. Sorts in ascending order if passed to <code>Array.sort()</code>.</li>
+<li><code>rcompare(v1, v2)</code>: The reverse of compare. Sorts an array of versions
+in descending order when passed to <code>Array.sort()</code>.</li>
</ul>
<h3 id="ranges">Ranges</h3>
<ul>
-<li>validRange(range): Return the valid range or null if it&#39;s not valid</li>
-<li>satisfies(version, range): Return true if the version satisfies the
+<li><code>validRange(range)</code>: Return the valid range or null if it&#39;s not valid</li>
+<li><code>satisfies(version, range)</code>: Return true if the version satisfies the
range.</li>
-<li>maxSatisfying(versions, range): Return the highest version in the list
-that satisfies the range, or null if none of them do.</li>
-<li>gtr(version, range): Return true if version is greater than all the
+<li><code>maxSatisfying(versions, range)</code>: Return the highest version in the list
+that satisfies the range, or <code>null</code> if none of them do.</li>
+<li><code>gtr(version, range)</code>: Return <code>true</code> if version is greater than all the
versions possible in the range.</li>
-<li>ltr(version, range): Return true if version is less than all the
+<li><code>ltr(version, range)</code>: Return <code>true</code> if version is less than all the
versions possible in the range.</li>
-<li>outside(version, range, hilo): Return true if the version is outside
+<li><code>outside(version, range, hilo)</code>: Return true if the version is outside
the bounds of the range in either the high or low direction. The
<code>hilo</code> argument must be either the string <code>&#39;&gt;&#39;</code> or <code>&#39;&lt;&#39;</code>. (This is
the function called by <code>gtr</code> and <code>ltr</code>.)</li>
@@ -130,8 +148,8 @@ the function called by <code>gtr</code> and <code>ltr</code>.)</li>
greater than a range, less than a range, <em>or</em> satisfy a range! For
example, the range <code>1.2 &lt;1.2.9 || &gt;2.0.0</code> would have a hole from <code>1.2.9</code>
until <code>2.0.0</code>, so the version <code>1.2.10</code> would not be greater than the
-range (because 2.0.1 satisfies, which is higher), nor less than the
-range (since 1.2.8 satisfies, which is lower), and it also does not
+range (because <code>2.0.1</code> satisfies, which is higher), nor less than the
+range (since <code>1.2.8</code> satisfies, which is lower), and it also does not
satisfy the range.</p>
<p>If you want to know if a version satisfies or does not satisfy a
range, use the <code>satisfies(version, range)</code> function.</p>
@@ -147,5 +165,5 @@ range, use the <code>satisfies(version, range)</code> function.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
-<p id="footer">semver &mdash; npm@1.4.10</p>
+<p id="footer">semver &mdash; npm@1.4.14</p>
diff --git a/deps/npm/lib/adduser.js b/deps/npm/lib/adduser.js
index 94a119683..f826a76e8 100644
--- a/deps/npm/lib/adduser.js
+++ b/deps/npm/lib/adduser.js
@@ -15,6 +15,7 @@ try {
adduser.usage = "npm adduser\nThen enter stuff at the prompts"
function adduser (args, cb) {
+ npm.spinner.stop()
if (!crypto) return cb(new Error(
"You must compile node with ssl support to use the adduser feature"))
@@ -131,9 +132,10 @@ function save (c, u, cb) {
registry.username = u.u
registry.password = u.p
}
-
+ npm.spinner.start()
// save existing configs, but yank off for this PUT
registry.adduser(u.u, u.p, u.e, function (er) {
+ npm.spinner.stop()
if (er) return cb(er)
registry.username = u.u
registry.password = u.p
diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js
index 32fb9f832..99e85a0f9 100644
--- a/deps/npm/lib/cache.js
+++ b/deps/npm/lib/cache.js
@@ -7,15 +7,14 @@
//
/*
-fetching a url:
-1. Check for url in inFlightUrls. If present, add cb, and return.
-2. create inFlightURL list
-3. Acquire lock at {cache}/{sha(url)}.lock
+fetching a URL:
+1. Check for URL in inflight URLs. If present, add cb, and return.
+2. Acquire lock at {cache}/{sha(url)}.lock
retries = {cache-lock-retries, def=3}
stale = {cache-lock-stale, def=30000}
wait = {cache-lock-wait, def=100}
-4. if lock can't be acquired, then fail
-5. fetch url, clear lock, call cbs
+3. if lock can't be acquired, then fail
+4. fetch url, clear lock, call cbs
cache folders:
1. urls: http!/server.com/path/to/thing
@@ -51,40 +50,27 @@ adding a local tarball:
*/
exports = module.exports = cache
-cache.read = read
-cache.clean = clean
cache.unpack = unpack
-cache.lock = lock
-cache.unlock = unlock
+cache.clean = clean
+cache.read = read
-var mkdir = require("mkdirp")
- , spawn = require("child_process").spawn
- , exec = require("child_process").execFile
- , once = require("once")
- , fetch = require("./utils/fetch.js")
- , npm = require("./npm.js")
+var npm = require("./npm.js")
, fs = require("graceful-fs")
+ , assert = require("assert")
, rm = require("./utils/gently-rm.js")
, readJson = require("read-package-json")
- , registry = npm.registry
, log = require("npmlog")
, path = require("path")
- , sha = require("sha")
+ , url = require("url")
, asyncMap = require("slide").asyncMap
- , semver = require("semver")
, tar = require("./utils/tar.js")
, fileCompletion = require("./utils/completion/file-completion.js")
- , url = require("url")
- , chownr = require("chownr")
- , lockFile = require("lockfile")
- , crypto = require("crypto")
- , retry = require("retry")
- , zlib = require("zlib")
- , chmodr = require("chmodr")
- , which = require("which")
, isGitUrl = require("./utils/is-git-url.js")
- , pathIsInside = require("path-is-inside")
- , http = require("http")
+ , 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")
cache.usage = "npm cache add <tarball file>"
+ "\nnpm cache add <folder>"
@@ -131,24 +117,31 @@ function cache (args, cb) {
// just do a readJson and return.
// if they're not, then fetch them from the registry.
function read (name, ver, forceBypass, cb) {
- if (typeof cb !== "function") cb = forceBypass, forceBypass = true
+ assert(typeof name === "string", "must include name of module to install")
+ assert(typeof cb === "function", "must include callback")
+
+ if (forceBypass === undefined || forceBypass === null) forceBypass = true
+
var jsonFile = path.join(npm.cache, name, ver, "package", "package.json")
function c (er, data) {
if (data) deprCheck(data)
+
return cb(er, data)
}
if (forceBypass && npm.config.get("force")) {
log.verbose("using force", "skipping cache")
- return addNamed(name, ver, c)
+ return addNamed(name, ver, null, c)
}
readJson(jsonFile, function (er, data) {
er = needName(er, data)
er = needVersion(er, data)
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
- if (er) return addNamed(name, ver, c)
+ if (er) return addNamed(name, ver, null, c)
+
deprCheck(data)
+
c(er, data)
})
}
@@ -176,8 +169,10 @@ function ls_ (req, depth, cb) {
// npm cache clean [<path>]
function clean (args, cb) {
- if (!cb) cb = args, args = []
+ assert(typeof cb === "function", "must include callback")
+
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))
@@ -199,8 +194,9 @@ function clean (args, cb) {
// npm cache add <tarball>
// npm cache add <folder>
cache.add = function (pkg, ver, scrub, cb) {
- if (typeof cb !== "function") cb = scrub, scrub = false
- if (typeof cb !== "function") cb = ver, ver = null
+ 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)
@@ -256,1109 +252,26 @@ function add (args, cb) {
// in that case, we will not have a protocol now, but if we
// split and check, we will.
if (!name && !p.protocol) {
- if (spec.indexOf("/") !== -1 ||
- process.platform === "win32" && spec.indexOf("\\") !== -1) {
- return maybeFile(spec, p, cb)
- } else if (spec.indexOf("@") !== -1) {
- return maybeAt(spec, cb)
- }
- }
-
- add_(name, spec, p, cb)
-}
-
-function afterAdd (arg, cb) { return function (er, data) {
- if (er || !data || !data.name || !data.version) {
- return cb(er, data)
- }
-
- // Save the resolved, shasum, etc. into the data so that the next
- // time we load from this cached data, we have all the same info.
- var name = data.name
- var ver = data.version
- var pj = path.join(npm.cache, name, ver, "package", "package.json")
- fs.writeFile(pj, JSON.stringify(data), "utf8", function (er) {
- cb(er, data)
- })
-}}
-
-
-
-function maybeFile (spec, p, cb) {
- fs.stat(spec, function (er, stat) {
- if (!er) {
- // definitely a local thing
- addLocal(spec, cb)
- } else if (er && spec.indexOf("@") !== -1) {
- // bar@baz/loofa
- maybeAt(spec, cb)
- } else {
- // Already know it's not a url, so must be local
- addLocal(spec, cb)
- }
- })
-}
-
-function maybeAt (spec, cb) {
- var tmp = spec.split("@")
-
- // split name@2.3.4 only if name is a valid package name,
- // don't split in case of "./test@example.com/" (local path)
- var name = tmp.shift()
- spec = tmp.join("@")
- return add([name, spec], cb)
-}
-
-function add_ (name, spec, p, cb) {
- switch (p.protocol) {
- case "http:":
- case "https:":
- return addRemoteTarball(spec, null, name, cb)
-
- default:
- if (isGitUrl(p))
- return addRemoteGit(spec, p, name, false, cb)
-
- // if we have a name and a spec, then try name@spec
- // if not, then try just spec (which may try name@"" if not found)
- if (name) {
- addNamed(name, spec, cb)
- } else {
- addLocal(spec, cb)
- }
- }
-}
-
-function fetchAndShaCheck (u, tmp, shasum, cb) {
- fetch(u, tmp, 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)
- })
- }
-
- // validate that the url we just downloaded matches the expected shasum.
- sha.check(tmp, shasum, function (er) {
- if (er != null && er.message) {
- // add original filename for better debuggability
- er.message = er.message + '\n' + 'From: ' + u
- }
- return cb(er, response, shasum)
- })
- })
-}
-
-// Only have a single download action at once for a given url
-// additional calls stack the callbacks.
-var inFlightURLs = {}
-function addRemoteTarball (u, shasum, name, version, cb_) {
- if (typeof cb_ !== "function") cb_ = version, version = ""
- if (typeof cb_ !== "function") cb_ = name, name = ""
- if (typeof cb_ !== "function") cb_ = shasum, shasum = null
-
- if (!inFlightURLs[u]) inFlightURLs[u] = []
- var iF = inFlightURLs[u]
- iF.push(cb_)
- if (iF.length > 1) return
-
- function cb (er, data) {
- if (data) {
- data._from = u
- data._shasum = data._shasum || shasum
- data._resolved = u
- }
- unlock(u, function () {
- var c
- while (c = iF.shift()) c(er, data)
- delete inFlightURLs[u]
- })
- }
-
- var tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
-
- lock(u, function (er) {
- if (er) return cb(er)
-
- log.verbose("addRemoteTarball", [u, shasum])
- mkdir(path.dirname(tmp), function (er) {
- if (er) return cb(er)
- addRemoteTarball_(u, tmp, shasum, done)
- })
- })
-
- function done (er, resp, shasum) {
- if (er) return cb(er)
- addLocalTarball(tmp, name, version, shasum, cb)
- }
-}
-
-function addRemoteTarball_(u, tmp, shasum, cb) {
- // Tuned to spread 3 attempts over about a minute.
- // See formula at <https://github.com/tim-kos/node-retry>.
- var operation = retry.operation
- ( { retries: npm.config.get("fetch-retries")
- , factor: npm.config.get("fetch-retry-factor")
- , minTimeout: npm.config.get("fetch-retry-mintimeout")
- , maxTimeout: npm.config.get("fetch-retry-maxtimeout") })
-
- operation.attempt(function (currentAttempt) {
- log.info("retry", "fetch attempt " + currentAttempt
- + " at " + (new Date()).toLocaleTimeString())
- fetchAndShaCheck(u, tmp, shasum, function (er, response, shasum) {
- // Only retry on 408, 5xx or no `response`.
- var sc = response && response.statusCode
- var statusRetry = !sc || (sc === 408 || sc >= 500)
- if (er && statusRetry && operation.retry(er)) {
- log.info("retry", "will retry, error on last attempt: " + er)
- return
- }
- cb(er, response, shasum)
- })
- })
-}
-
-// 1. cacheDir = path.join(cache,'_git-remotes',sha1(u))
-// 2. checkGitDir(cacheDir) ? 4. : 3. (rm cacheDir if necessary)
-// 3. git clone --mirror u cacheDir
-// 4. cd cacheDir && git fetch -a origin
-// 5. git archive /tmp/random.tgz
-// 6. addLocalTarball(/tmp/random.tgz) <gitref> --format=tar --prefix=package/
-// silent flag is used if this should error quietly
-function addRemoteGit (u, parsed, name, silent, cb_) {
- if (typeof cb_ !== "function") cb_ = name, name = null
-
- if (!inFlightURLs[u]) inFlightURLs[u] = []
- var iF = inFlightURLs[u]
- iF.push(cb_)
- if (iF.length > 1) return
-
- // git is so tricky!
- // if the path is like ssh://foo:22/some/path then it works, but
- // it needs the ssh://
- // If the path is like ssh://foo:some/path then it works, but
- // only if you remove the ssh://
- var origUrl = u
- u = u.replace(/^git\+/, "")
- .replace(/#.*$/, "")
-
- // ssh paths that are scp-style urls don't need the ssh://
- if (parsed.pathname.match(/^\/?:/)) {
- u = u.replace(/^ssh:\/\//, "")
- }
-
- function cb (er, data) {
- unlock(u, function () {
- var c
- while (c = iF.shift()) c(er, data)
- delete inFlightURLs[origUrl]
- })
+ return maybeFile(spec, cb)
}
+ else {
+ switch (p.protocol) {
+ case "http:":
+ case "https:":
+ return addRemoteTarball(spec, { name: name }, null, cb)
- lock(u, function (er) {
- if (er) return cb(er)
-
- // figure out what we should check out.
- var co = parsed.hash && parsed.hash.substr(1) || "master"
-
- var v = crypto.createHash("sha1").update(u).digest("hex").slice(0, 8)
- v = u.replace(/[^a-zA-Z0-9]+/g, '-') + '-' + v
-
- 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) {
- if (er) return cb(er, data)
- return cb(erChmod, data)
- })
- })
- })
-}
-
-function checkGitDir (p, u, co, origUrl, silent, cb) {
- fs.stat(p, function (er, s) {
- if (er) return cloneGitRemote(p, u, co, origUrl, silent, cb)
- if (!s.isDirectory()) return rm(p, function (er){
- if (er) return cb(er)
- cloneGitRemote(p, u, co, origUrl, silent, cb)
- })
-
- var git = npm.config.get("git")
- var args = [ "config", "--get", "remote.origin.url" ]
- var env = gitEnv()
+ default:
+ if (isGitUrl(p)) return addRemoteGit(spec, p, false, cb)
- // check for git
- which(git, function (err) {
- if (err) {
- err.code = "ENOGIT"
- return cb(err)
- }
- exec(git, args, {cwd: p, env: env}, function (er, stdout, stderr) {
- stdoutTrimmed = (stdout + "\n" + stderr).trim()
- if (er || u !== stdout.trim()) {
- log.warn( "`git config --get remote.origin.url` returned "
- + "wrong result ("+u+")", stdoutTrimmed )
- return rm(p, function (er){
- if (er) return cb(er)
- cloneGitRemote(p, u, co, origUrl, silent, cb)
- })
+ // if we have a name and a spec, then try name@spec
+ if (name) {
+ addNamed(name, spec, null, cb)
}
- log.verbose("git remote.origin.url", stdoutTrimmed)
- archiveGitRemote(p, u, co, origUrl, cb)
- })
- })
- })
-}
-
-function cloneGitRemote (p, u, co, origUrl, silent, cb) {
- mkdir(p, function (er) {
- if (er) return cb(er)
-
- var git = npm.config.get("git")
- var args = [ "clone", "--mirror", u, p ]
- var env = gitEnv()
-
- // check for git
- which(git, function (err) {
- if (err) {
- err.code = "ENOGIT"
- return cb(err)
- }
- exec(git, args, {cwd: p, env: env}, function (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- if (silent) {
- log.verbose("git clone " + u, stdout)
- } else {
- log.error("git clone " + u, stdout)
- }
- return cb(er)
+ // if not, then try just spec (which may try name@"" if not found)
+ else {
+ addLocal(spec, {}, cb)
}
- log.verbose("git clone " + u, stdout)
- archiveGitRemote(p, u, co, origUrl, cb)
- })
- })
- })
-}
-
-function archiveGitRemote (p, u, co, origUrl, cb) {
- var git = npm.config.get("git")
- var archive = [ "fetch", "-a", "origin" ]
- var resolve = [ "rev-list", "-n1", co ]
- var env = gitEnv()
-
- var errState = null
- var n = 0
- var resolved = null
- var tmp
-
- exec(git, archive, {cwd: p, env: env}, function (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- log.error("git fetch -a origin ("+u+")", stdout)
- return cb(er)
- }
- log.verbose("git fetch -a origin ("+u+")", stdout)
- tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
- verifyOwnership()
- })
-
- function verifyOwnership() {
- if (process.platform === "win32") {
- log.silly("verifyOwnership", "skipping for windows")
- resolveHead()
- } else {
- getCacheStat(function(er, cs) {
- if (er) {
- log.error("Could not get cache stat")
- return cb(er)
- }
- chownr(p, cs.uid, cs.gid, function(er) {
- if (er) {
- log.error("Failed to change folder ownership under npm cache for %s", p)
- return cb(er)
- }
- resolveHead()
- })
- })
- }
- }
-
- function resolveHead () {
- exec(git, resolve, {cwd: p, env: env}, function (er, stdout, stderr) {
- stdout = (stdout + "\n" + stderr).trim()
- if (er) {
- log.error("Failed resolving git HEAD (" + u + ")", stderr)
- return cb(er)
- }
- log.verbose("git rev-list -n1 " + co, stdout)
- var parsed = url.parse(origUrl)
- parsed.hash = stdout
- resolved = url.format(parsed)
-
- // https://github.com/npm/npm/issues/3224
- // node incorrectly sticks a / at the start of the path
- // We know that the host won't change, so split and detect this
- var spo = origUrl.split(parsed.host)
- var spr = resolved.split(parsed.host)
- if (spo[1].charAt(0) === ':' && spr[1].charAt(0) === '/')
- spr[1] = spr[1].slice(1)
- resolved = spr.join(parsed.host)
-
- log.verbose('resolved git url', resolved)
- next()
- })
- }
-
- function next () {
- mkdir(path.dirname(tmp), function (er) {
- if (er) return cb(er)
- var gzip = zlib.createGzip({ level: 9 })
- var git = npm.config.get("git")
- var args = ["archive", co, "--format=tar", "--prefix=package/"]
- var out = fs.createWriteStream(tmp)
- var env = gitEnv()
- cb = once(cb)
- var cp = spawn(git, args, { env: env, cwd: p })
- cp.on("error", cb)
- cp.stderr.on("data", function(chunk) {
- log.silly(chunk.toString(), "git archive")
- })
-
- cp.stdout.pipe(gzip).pipe(out).on("close", function() {
- addLocalTarball(tmp, function(er, data) {
- if (data) data._resolved = resolved
- cb(er, data)
- })
- })
- })
- }
-}
-
-var gitEnv_
-function gitEnv () {
- // git responds to env vars in some weird ways in post-receive hooks
- // so don't carry those along.
- 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
- gitEnv_[k] = process.env[k]
- }
- return gitEnv_
-}
-
-
-// only have one request in flight for a given
-// name@blah thing.
-var inFlightNames = {}
-function addNamed (name, x, data, cb_) {
- if (typeof cb_ !== "function") cb_ = data, data = null
- log.verbose("addNamed", [name, x])
-
- var k = name + "@" + x
- if (!inFlightNames[k]) inFlightNames[k] = []
- var iF = inFlightNames[k]
- iF.push(cb_)
- if (iF.length > 1) return
-
- function cb (er, data) {
- if (data && !data._fromGithub) data._from = k
- unlock(k, function () {
- var c
- while (c = iF.shift()) c(er, data)
- delete inFlightNames[k]
- })
- }
-
- log.verbose("addNamed", [semver.valid(x), semver.validRange(x)])
- lock(k, function (er, fd) {
- if (er) return cb(er)
-
- var fn = ( semver.valid(x, true) ? addNameVersion
- : semver.validRange(x, true) ? addNameRange
- : addNameTag
- )
- fn(name, x, data, cb)
- })
-}
-
-function addNameTag (name, tag, data, cb_) {
- if (typeof cb_ !== "function") cb_ = data, data = null
- log.info("addNameTag", [name, tag])
- var explicit = true
- if (!tag) {
- explicit = false
- 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, name, er, cb_)
}
- return cb_(er, data)
- }
-
- registry.get(name, function (er, data, json, response) {
- if (!er) {
- er = errorResponse(name, response)
- }
- if (er) return cb(er)
- engineFilter(data)
- if (data["dist-tags"] && data["dist-tags"][tag]
- && data.versions[data["dist-tags"][tag]]) {
- var ver = data["dist-tags"][tag]
- return addNamed(name, ver, data.versions[ver], cb)
- }
- if (!explicit && Object.keys(data.versions).length) {
- return addNamed(name, "*", data, cb)
- }
-
- er = installTargetsError(tag, data)
- return cb(er)
- })
-}
-
-
-function engineFilter (data) {
- var npmv = npm.version
- , nodev = npm.config.get("node-version")
- , strict = npm.config.get("engine-strict")
-
- if (!nodev || npm.config.get("force")) return data
-
- Object.keys(data.versions || {}).forEach(function (v) {
- var eng = data.versions[v].engines
- if (!eng) return
- if (!strict && !data.versions[v].engineStrict) return
- if (eng.node && !semver.satisfies(nodev, eng.node, true)
- || eng.npm && !semver.satisfies(npmv, eng.npm, true)) {
- delete data.versions[v]
- }
- })
-}
-
-function errorResponse (name, response) {
- if (response.statusCode >= 400) {
- var er = new Error(http.STATUS_CODES[response.statusCode])
- er.statusCode = response.statusCode
- er.code = "E" + er.statusCode
- er.pkgid = name
- }
- return er
-}
-
-function addNameRange (name, range, data, cb) {
- if (typeof cb !== "function") cb = data, data = null
-
- range = semver.validRange(range, true)
- if (range === null) return cb(new Error(
- "Invalid version range: "+range))
-
- log.silly("addNameRange", {name:name, range:range, hasData:!!data})
-
- if (data) return next()
- registry.get(name, function (er, d, json, response) {
- if (!er) {
- er = errorResponse(name, response)
- }
- if (er) return cb(er)
- data = d
- next()
- })
-
- function next () {
- log.silly( "addNameRange", "number 2"
- , {name:name, range:range, hasData:!!data})
- engineFilter(data)
-
- log.silly("addNameRange", "versions"
- , [data.name, Object.keys(data.versions || {})])
-
- // if the tagged version satisfies, then use that.
- var tagged = data["dist-tags"][npm.config.get("tag")]
- if (tagged
- && data.versions[tagged]
- && semver.satisfies(tagged, range, true)) {
- return addNamed(name, tagged, data.versions[tagged], cb)
- }
-
- // find the max satisfying version.
- var versions = Object.keys(data.versions || {})
- var ms = semver.maxSatisfying(versions, range, true)
- if (!ms) {
- return cb(installTargetsError(range, data))
- }
-
- // if we don't have a registry connection, try to see if
- // there's a cached copy that will be ok.
- addNamed(name, ms, data.versions[ms], cb)
- }
-}
-
-function installTargetsError (requested, data) {
- var targets = Object.keys(data["dist-tags"]).filter(function (f) {
- return (data.versions || {}).hasOwnProperty(f)
- }).concat(Object.keys(data.versions || {}))
-
- requested = data.name + (requested ? "@'" + requested + "'" : "")
-
- targets = targets.length
- ? "Valid install targets:\n" + JSON.stringify(targets) + "\n"
- : "No valid targets found.\n"
- + "Perhaps not compatible with your version of node?"
-
- var er = new Error( "No compatible version found: "
- + requested + "\n" + targets)
- er.code = "ETARGET"
- return er
-}
-
-function addNameVersion (name, v, data, cb) {
- if (typeof cb !== "function") cb = data, data = null
-
- var ver = semver.valid(v, true)
- if (!ver) return cb(new Error("Invalid version: "+v))
-
- var response
-
- if (data) {
- response = null
- return next()
- }
- registry.get(name, function (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.package = name
- er.statusCode = 404
- return cb(er)
- }
- response = resp
- next()
- })
-
- function next () {
- deprCheck(data)
- var dist = data.dist
-
- if (!dist) return cb(new Error("No dist in "+data._id+" package"))
-
- if (!dist.tarball) return cb(new Error(
- "No dist.tarball in " + data._id + " package"))
-
- if ((response && response.statusCode !== 304) || npm.config.get("force")) {
- return fetchit()
- }
-
- // we got cached data, so let's see if we have a tarball.
- var pkgroot = path.join(npm.cache, name, ver)
- var pkgtgz = path.join(pkgroot, "package.tgz")
- var pkgjson = path.join(pkgroot, "package", "package.json")
- fs.stat(pkgtgz, function (er, s) {
- if (!er) {
- readJson(pkgjson, function (er, data) {
- er = needName(er, data)
- er = needVersion(er, data)
- if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR")
- return cb(er)
- if (er) return fetchit()
- // check the SHA of the package we have, to ensure it wasn't installed
- // from somewhere other than the registry (eg, a fork)
- if (data._shasum && dist.shasum && data._shasum !== dist.shasum)
- return fetchit()
- return cb(null, data)
- })
- } else return fetchit()
- })
-
- function fetchit () {
- if (!npm.config.get("registry")) {
- return cb(new Error("Cannot fetch: "+dist.tarball))
- }
-
- // use the same protocol as the registry.
- // https registry --> https tarballs, but
- // only if they're the same hostname, or else
- // detached tarballs may not work.
- var tb = url.parse(dist.tarball)
- var rp = url.parse(npm.config.get("registry"))
- if (tb.hostname === rp.hostname
- && tb.protocol !== rp.protocol) {
- tb.protocol = url.parse(npm.config.get("registry")).protocol
- delete tb.href
- }
- tb = url.format(tb)
-
- // only add non-shasum'ed packages if --forced.
- // only ancient things would lack this for good reasons nowadays.
- if (!dist.shasum && !npm.config.get("force")) {
- return cb(new Error("package lacks shasum: " + data._id))
- }
- return addRemoteTarball( tb
- , dist.shasum
- , name
- , ver
- , cb )
- }
- }
-}
-
-function addLocal (p, name, cb_) {
- if (typeof cb_ !== "function") cb_ = name, name = ""
-
- 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, "", cb_)
- }
- log.error("addLocal", "Could not install %s", p)
- return cb_(er)
- }
- if (data && !data._fromGithub) data._from = p
- return cb_(er, data)
- })
- }
-
- lock(p, function (er) {
- 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, name, er, cb)
- }
- return cb(er)
- }
- if (s.isDirectory()) addLocalDirectory(p, name, cb)
- else addLocalTarball(p, name, cb)
- })
- })
-}
-
-function maybeGithub (p, name, er, cb) {
- var u = "git://github.com/" + p
- , up = url.parse(u)
- log.info("maybeGithub", "Attempting %s from %s", p, u)
-
- return addRemoteGit(u, up, name, true, function (er2, data) {
- if (er2) {
- 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, name, function (er3, data) {
- if (er3) return cb(er)
- success(upriv, data)
- })
- }
- success(u, data)
- })
-
- function success (u, data) {
- data._from = u
- data._fromGithub = true
- return cb(null, data)
- }
-}
-
-function addLocalTarball (p, name, version, shasum, cb_) {
- if (typeof cb_ !== "function") cb_ = shasum, shasum = null
- if (typeof cb_ !== "function") cb_ = version, version = ""
- if (typeof cb_ !== "function") cb_ = name, name = ""
-
- // If we don't have a shasum yet, then get the shasum now.
- if (!shasum) {
- return sha.get(p, function (er, shasum) {
- if (er) return cb_(er)
- addLocalTarball(p, name, version, shasum, cb_)
- })
- }
-
- // if it's a tar, and not in place,
- // then unzip to .tmp, add the tmp folder, and clean up tmp
- if (pathIsInside(p, npm.tmp))
- return addTmpTarball(p, name, version, shasum, cb_)
-
- if (pathIsInside(p, npm.cache)) {
- if (path.basename(p) !== "package.tgz") return cb_(new Error(
- "Not a valid cache tarball name: "+p))
- return addPlacedTarball(p, name, shasum, cb_)
- }
-
- function cb (er, data) {
- if (data) {
- data._resolved = p
- data._shasum = data._shasum || shasum
- }
- return cb_(er, data)
- }
-
- // just copy it over and then add the temp tarball file.
- var tmp = path.join(npm.tmp, name + Date.now()
- + "-" + Math.random(), "tmp.tgz")
- mkdir(path.dirname(tmp), function (er) {
- if (er) return cb(er)
- var from = fs.createReadStream(p)
- , to = fs.createWriteStream(tmp)
- , errState = null
- function errHandler (er) {
- if (errState) return
- return cb(errState = er)
- }
- from.on("error", errHandler)
- to.on("error", errHandler)
- to.on("close", function () {
- if (errState) return
- log.verbose("chmod", tmp, npm.modes.file.toString(8))
- fs.chmod(tmp, npm.modes.file, function (er) {
- if (er) return cb(er)
- addTmpTarball(tmp, name, null, shasum, cb)
- })
- })
- from.pipe(to)
- })
-}
-
-// to maintain the cache dir's permissions consistently.
-var cacheStat = null
-function getCacheStat (cb) {
- if (cacheStat) return cb(null, cacheStat)
- fs.stat(npm.cache, function (er, st) {
- if (er) return makeCacheDir(cb)
- if (!st.isDirectory()) {
- log.error("getCacheStat", "invalid cache dir %j", npm.cache)
- return cb(er)
- }
- return cb(null, cacheStat = st)
- })
-}
-
-function makeCacheDir (cb) {
- if (!process.getuid) return mkdir(npm.cache, cb)
-
- var uid = +process.getuid()
- , gid = +process.getgid()
-
- if (uid === 0) {
- if (process.env.SUDO_UID) uid = +process.env.SUDO_UID
- if (process.env.SUDO_GID) gid = +process.env.SUDO_GID
- }
- if (uid !== 0 || !process.env.HOME) {
- cacheStat = {uid: uid, gid: gid}
- return mkdir(npm.cache, afterMkdir)
- }
-
- fs.stat(process.env.HOME, function (er, st) {
- if (er) {
- log.error("makeCacheDir", "homeless?")
- return cb(er)
- }
- cacheStat = st
- log.silly("makeCacheDir", "cache dir uid, gid", [st.uid, st.gid])
- return mkdir(npm.cache, afterMkdir)
- })
-
- function afterMkdir (er, made) {
- if (er || !cacheStat || isNaN(cacheStat.uid) || isNaN(cacheStat.gid)) {
- return cb(er, cacheStat)
- }
-
- if (!made) return cb(er, cacheStat)
-
- // ensure that the ownership is correct.
- chownr(made, cacheStat.uid, cacheStat.gid, function (er) {
- return cb(er, cacheStat)
- })
- }
-}
-
-
-
-
-function addPlacedTarball (p, name, shasum, cb) {
- if (!cb) cb = name, name = ""
- getCacheStat(function (er, cs) {
- if (er) return cb(er)
- return addPlacedTarball_(p, name, cs.uid, cs.gid, shasum, cb)
- })
-}
-
-// Resolved sum is the shasum from the registry dist object, but
-// *not* necessarily the shasum of this tarball, because for stupid
-// historical reasons, npm re-packs each package an extra time through
-// a temp directory, so all installed packages are actually built with
-// *this* version of npm, on this machine.
-//
-// Once upon a time, this meant that we could change package formats
-// around and fix junk that might be added by incompatible tar
-// implementations. Then, for a while, it was a way to correct bs
-// added by bugs in our own tar implementation. Now, it's just
-// garbage, but cleaning it up is a pain, and likely to cause issues
-// if anything is overlooked, so it's not high priority.
-//
-// If you're bored, and looking to make npm go faster, and you've
-// already made it this far in this file, here's a better methodology:
-//
-// cache.add should really be cache.place. That is, it should take
-// a set of arguments like it does now, but then also a destination
-// folder.
-//
-// cache.add('foo@bar', '/path/node_modules/foo', cb)
-//
-// 1. Resolve 'foo@bar' to some specific:
-// - git url
-// - local folder
-// - local tarball
-// - tarball url
-// 2. If resolved through the registry, then pick up the dist.shasum
-// along the way.
-// 3. Acquire request() stream fetching bytes: FETCH
-// 4. FETCH.pipe(tar unpack stream to dest)
-// 5. FETCH.pipe(shasum generator)
-// When the tar and shasum streams both finish, make sure that the
-// shasum matches dist.shasum, and if not, clean up and bail.
-//
-// publish(cb)
-//
-// 1. read package.json
-// 2. get root package object (for rev, and versions)
-// 3. update root package doc with version info
-// 4. remove _attachments object
-// 5. remove versions object
-// 5. jsonify, remove last }
-// 6. get stream: registry.put(/package)
-// 7. write trailing-}-less JSON
-// 8. write "_attachments":
-// 9. JSON.stringify(attachments), remove trailing }
-// 10. Write start of attachments (stubs)
-// 11. JSON(filename)+':{"type":"application/octet-stream","data":"'
-// 12. acquire tar packing stream, PACK
-// 13. PACK.pipe(PUT)
-// 14. PACK.pipe(shasum generator)
-// 15. when PACK finishes, get shasum
-// 16. PUT.write('"}},') (finish _attachments
-// 17. update "versions" object with current package version
-// (including dist.shasum and dist.tarball)
-// 18. write '"versions":' + JSON(versions)
-// 19. write '}}' (versions, close main doc)
-
-function addPlacedTarball_ (p, name, uid, gid, resolvedSum, cb) {
- // now we know it's in place already as .cache/name/ver/package.tgz
- // unpack to .cache/name/ver/package/, read the package.json,
- // and fire cb with the json data.
- var target = path.dirname(p)
- , folder = path.join(target, "package")
-
- lock(folder, function (er) {
- if (er) return cb(er)
- rmUnpack()
- })
-
- function rmUnpack () {
- rm(folder, function (er) {
- unlock(folder, function () {
- if (er) {
- log.error("addPlacedTarball", "Could not remove %j", folder)
- return cb(er)
- }
- thenUnpack()
- })
- })
- }
-
- function thenUnpack () {
- tar.unpack(p, folder, null, null, uid, gid, function (er) {
- if (er) {
- log.error("addPlacedTarball", "Could not unpack %j to %j", p, target)
- return cb(er)
- }
- // calculate the sha of the file that we just unpacked.
- // this is so that the data is available when publishing.
- sha.get(p, function (er, shasum) {
- if (er) {
- log.error("addPlacedTarball", "shasum fail", p)
- return cb(er)
- }
- readJson(path.join(folder, "package.json"), function (er, data) {
- er = needName(er, data)
- er = needVersion(er, data)
- if (er) {
- log.error("addPlacedTarball", "Couldn't read json in %j"
- , folder)
- return cb(er)
- }
-
- data.dist = data.dist || {}
- data.dist.shasum = shasum
- deprCheck(data)
- asyncMap([p], function (f, cb) {
- log.verbose("chmod", f, npm.modes.file.toString(8))
- fs.chmod(f, npm.modes.file, cb)
- }, function (f, cb) {
- if (process.platform === "win32") {
- log.silly("chown", "skipping for windows", f)
- cb()
- } else if (typeof uid === "number"
- && typeof gid === "number"
- && parseInt(uid, 10) === uid
- && parseInt(gid, 10) === gid) {
- log.verbose("chown", f, [uid, gid])
- fs.chown(f, uid, gid, cb)
- } else {
- log.verbose("chown", "skip for invalid uid/gid", [f, uid, gid])
- cb()
- }
- }, function (er) {
- cb(er, data)
- })
- })
- })
- })
- }
-}
-
-// At this point, if shasum is set, it's something that we've already
-// read and checked. Just stashing it in the data at this point.
-function addLocalDirectory (p, name, shasum, cb) {
- if (typeof cb !== "function") cb = shasum, shasum = ""
- if (typeof cb !== "function") cb = name, name = ""
- // if it's a folder, then read the package.json,
- // tar it to the proper place, and add the cache tar
- if (pathIsInside(p, npm.cache)) return cb(new Error(
- "Adding a cache directory to the cache will make the world implode."))
- readJson(path.join(p, "package.json"), false, function (er, data) {
- er = needName(er, data)
- er = needVersion(er, data)
- if (er) return cb(er)
- deprCheck(data)
- var random = Date.now() + "-" + Math.random()
- , tmp = path.join(npm.tmp, random)
- , tmptgz = path.resolve(tmp, "tmp.tgz")
- , placed = path.resolve( npm.cache, data.name
- , data.version, "package.tgz" )
- , placeDirect = path.basename(p) === "package"
- , tgz = placeDirect ? placed : tmptgz
- , version = data.version
-
- name = data.name
-
- getCacheStat(function (er, cs) {
- mkdir(path.dirname(tgz), function (er, made) {
- if (er) return cb(er)
-
- var fancy = !pathIsInside(p, npm.tmp)
- && !pathIsInside(p, npm.cache)
- tar.pack(tgz, p, data, fancy, function (er) {
- if (er) {
- log.error( "addLocalDirectory", "Could not pack %j to %j"
- , p, tgz )
- return cb(er)
- }
-
- // if we don't get a cache stat, or if the gid/uid is not
- // a number, then just move on. chown would fail anyway.
- if (!cs || isNaN(cs.uid) || isNaN(cs.gid)) return cb()
-
- chownr(made || tgz, cs.uid, cs.gid, function (er) {
- if (er) return cb(er)
- addLocalTarball(tgz, name, version, shasum, cb)
- })
- })
- })
- })
- })
-}
-
-// XXX This is where it should be fixed
-// Right now it's unpacking to a "package" folder, and then
-// adding that local folder, for historical reasons.
-// Instead, unpack to the *cache* folder, and then copy the
-// tgz into place in the cache, so the shasum doesn't change.
-function addTmpTarball (tgz, name, version, shasum, cb) {
- // Just have a placeholder here so we can move it into place after.
- var tmp = false
- if (!version) {
- tmp = true
- version = 'tmp_' + crypto.randomBytes(6).toString('hex')
- }
- if (!name) {
- tmp = true
- name = 'tmp_' + crypto.randomBytes(6).toString('hex')
- }
- if (!tmp) {
- var pdir = path.resolve(npm.cache, name, version, "package")
- } else {
- var pdir = path.resolve(npm.cache, name + version + "package")
- }
-
- getCacheStat(function (er, cs) {
- if (er) return cb(er)
- tar.unpack(tgz, pdir, null, null, cs.uid, cs.gid, next)
- })
-
- function next (er) {
- if (er) return cb(er)
- // it MUST be able to get a version now!
- var pj = path.resolve(pdir, "package.json")
- readJson(pj, function (er, data) {
- if (er) return cb(er)
- if (version === data.version && name === data.name && !tmp) {
- addTmpTarball_(tgz, data, name, version, shasum, cb)
- } else {
- var old = pdir
- name = data.name
- version = data.version
- pdir = path.resolve(npm.cache, name, version, "package")
- mkdir(path.dirname(pdir), function(er) {
- if (er) return cb(er)
- rm(pdir, function(er) {
- if (er) return cb(er)
- fs.rename(old, pdir, function(er) {
- if (er) return cb(er)
- rm(old, function(er) {
- if (er) return cb(er)
- addTmpTarball_(tgz, data, name, version, shasum, cb)
- })
- })
- })
- })
- }
- })
- }
-}
-
-function addTmpTarball_ (tgz, data, name, version, shasum, cb) {
- cb = once(cb)
- var target = path.resolve(npm.cache, name, version, "package.tgz")
- var read = fs.createReadStream(tgz)
- var write = fs.createWriteStream(target)
- read.on("error", cb).pipe(write).on("error", cb).on("close", done)
-
- function done() {
- data._shasum = data._shasum || shasum
- cb(null, data)
}
}
@@ -1368,7 +281,7 @@ function unpack (pkg, ver, unpackTarget, dMode, fMode, uid, gid, cb) {
if (typeof cb !== "function") cb = fMode, fMode = null
if (typeof cb !== "function") cb = dMode, dMode = null
- read(pkg, ver, false, function (er, data) {
+ read(pkg, ver, false, function (er) {
if (er) {
log.error("unpack", "Could not read data for %s", pkg + "@" + ver)
return cb(er)
@@ -1384,54 +297,44 @@ function unpack (pkg, ver, unpackTarget, dMode, fMode, uid, gid, cb) {
})
}
-var deprecated = {}
- , deprWarned = {}
-function deprCheck (data) {
- if (deprecated[data._id]) data.deprecated = deprecated[data._id]
- if (data.deprecated) deprecated[data._id] = data.deprecated
- else return
- if (!deprWarned[data._id]) {
- deprWarned[data._id] = true
- log.warn("deprecated", "%s: %s", data._id, data.deprecated)
+function afterAdd (arg, cb) { return function (er, data) {
+ if (er || !data || !data.name || !data.version) {
+ return cb(er, data)
}
-}
-function lockFileName (u) {
- var c = u.replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "")
- , h = crypto.createHash("sha1").update(u).digest("hex")
- h = h.substr(0, 8)
- c = c.substr(-32)
- log.silly("lockFile", h + "-" + c, u)
- return path.resolve(npm.config.get("cache"), h + "-" + c + ".lock")
-}
+ // Save the resolved, shasum, etc. into the data so that the next
+ // time we load from this cached data, we have all the same info.
+ var name = data.name
+ var ver = data.version
+ var pj = path.join(npm.cache, name, ver, "package", "package.json")
+ fs.writeFile(pj, JSON.stringify(data), "utf8", function (er) {
+ cb(er, data)
+ })
+}}
-var myLocks = {}
-function lock (u, cb) {
- // the cache dir needs to exist already for this.
- getCacheStat(function (er, cs) {
- if (er) return cb(er)
- var opts = { stale: npm.config.get("cache-lock-stale")
- , retries: npm.config.get("cache-lock-retries")
- , wait: npm.config.get("cache-lock-wait") }
- var lf = lockFileName(u)
- log.verbose("lock", u, lf)
- lockFile.lock(lf, opts, function(er) {
- if (!er) myLocks[lf] = true
- cb(er)
- })
+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 unlock (u, cb) {
- var lf = lockFileName(u)
- , locked = myLocks[lf]
- if (locked === false) {
- return process.nextTick(cb)
- } else if (locked === true) {
- myLocks[lf] = false
- lockFile.unlock(lockFileName(u), 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 {
- throw new Error("Attempt to unlock " + u + ", which hasn't been locked")
+ // already know it's not a url, so must be local
+ addLocal(spec, {}, cb)
}
}
diff --git a/deps/npm/lib/cache/add-local-tarball.js b/deps/npm/lib/cache/add-local-tarball.js
new file mode 100644
index 000000000..bcb938fa9
--- /dev/null
+++ b/deps/npm/lib/cache/add-local-tarball.js
@@ -0,0 +1,223 @@
+var mkdir = require("mkdirp")
+ , assert = require("assert")
+ , fs = require("graceful-fs")
+ , readJson = require("read-package-json")
+ , log = require("npmlog")
+ , path = require("path")
+ , sha = require("sha")
+ , npm = require("../npm.js")
+ , tar = require("../utils/tar.js")
+ , pathIsInside = require("path-is-inside")
+ , locker = require("../utils/locker.js")
+ , lock = locker.lock
+ , unlock = locker.unlock
+ , getCacheStat = require("./get-stat.js")
+ , chownr = require("chownr")
+ , inflight = require("inflight")
+ , once = require("once")
+
+module.exports = addLocalTarball
+
+function addLocalTarball (p, pkgData, shasum, cb_) {
+ assert(typeof p === "string", "must have path")
+ assert(typeof cb_ === "function", "must have callback")
+
+ if (!pkgData) pkgData = {}
+ var name = pkgData.name || ""
+
+ // If we don't have a shasum yet, then get the shasum now.
+ if (!shasum) {
+ return sha.get(p, function (er, shasum) {
+ if (er) return cb_(er)
+ addLocalTarball(p, pkgData, shasum, cb_)
+ })
+ }
+
+ // if it's a tar, and not in place,
+ // then unzip to .tmp, add the tmp folder, and clean up tmp
+ if (pathIsInside(p, npm.tmp))
+ return addTmpTarball(p, pkgData, shasum, cb_)
+
+ if (pathIsInside(p, npm.cache)) {
+ if (path.basename(p) !== "package.tgz") return cb_(new Error(
+ "Not a valid cache tarball name: "+p))
+ return addPlacedTarball(p, pkgData, shasum, cb_)
+ }
+
+ function cb (er, data) {
+ if (data) {
+ data._resolved = p
+ data._shasum = data._shasum || shasum
+ }
+ return cb_(er, data)
+ }
+
+ // just copy it over and then add the temp tarball file.
+ var tmp = path.join(npm.tmp, name + Date.now()
+ + "-" + Math.random(), "tmp.tgz")
+ mkdir(path.dirname(tmp), function (er) {
+ if (er) return cb(er)
+ var from = fs.createReadStream(p)
+ , to = fs.createWriteStream(tmp)
+ , errState = null
+ function errHandler (er) {
+ if (errState) return
+ return cb(errState = er)
+ }
+ from.on("error", errHandler)
+ to.on("error", errHandler)
+ to.on("close", function () {
+ if (errState) return
+ log.verbose("chmod", tmp, npm.modes.file.toString(8))
+ fs.chmod(tmp, npm.modes.file, function (er) {
+ if (er) return cb(er)
+ addTmpTarball(tmp, pkgData, shasum, cb)
+ })
+ })
+ from.pipe(to)
+ })
+}
+
+function addPlacedTarball (p, pkgData, shasum, cb) {
+ assert(pkgData, "should have package data by now")
+ assert(typeof cb === "function", "cb function required")
+
+ getCacheStat(function (er, cs) {
+ if (er) return cb(er)
+ return addPlacedTarball_(p, pkgData, cs.uid, cs.gid, shasum, cb)
+ })
+}
+
+function addPlacedTarball_ (p, pkgData, uid, gid, resolvedSum, cb) {
+ // now we know it's in place already as .cache/name/ver/package.tgz
+ var name = pkgData.name
+ , version = pkgData.version
+ , folder = path.join(npm.cache, name, version, "package")
+
+ // First, make sure we have the shasum, if we don't already.
+ if (!resolvedSum) {
+ sha.get(p, function (er, shasum) {
+ if (er) return cb(er)
+ addPlacedTarball_(p, pkgData, uid, gid, shasum, cb)
+ })
+ return
+ }
+
+ lock(folder, function (er) {
+ if (er) return cb(er)
+
+ // async try/finally
+ var originalCb = cb
+ cb = function (er, data) {
+ unlock(folder, function (er2) {
+ return originalCb(er || er2, data)
+ })
+ }
+
+ mkdir(folder, function (er) {
+ if (er) return cb(er)
+ var pj = path.join(folder, "package.json")
+ var json = JSON.stringify(pkgData, null, 2)
+ fs.writeFile(pj, json, "utf8", function (er) {
+ cb(er, pkgData)
+ })
+ })
+ })
+}
+
+function addTmpTarball (tgz, pkgData, shasum, cb) {
+ assert(typeof cb === "function", "must have callback function")
+ assert(shasum, "should have shasum by now")
+
+ cb = inflight("addTmpTarball:" + tgz, cb)
+ if (!cb) return
+
+ // we already have the package info, so just move into place
+ if (pkgData && pkgData.name && pkgData.version) {
+ return addTmpTarball_(tgz, pkgData, shasum, cb)
+ }
+
+ // This is a tarball we probably downloaded from the internet.
+ // The shasum's already been checked, but we haven't ever had
+ // a peek inside, so we unpack it here just to make sure it is
+ // what it says it is.
+ // Note: we might not have any clue what we think it is, for
+ // example if the user just did `npm install ./foo.tgz`
+
+ var target = tgz + "-unpack"
+ getCacheStat(function (er, cs) {
+ tar.unpack(tgz, target, null, null, cs.uid, cs.gid, next)
+ })
+
+ function next (er) {
+ if (er) return cb(er)
+ var pj = path.join(target, "package.json")
+ readJson(pj, function (er, data) {
+ // XXX dry with similar stanza in add-local.js
+ er = needName(er, data)
+ er = needVersion(er, data)
+ // check that this is what we expected.
+ if (!er && pkgData.name && pkgData.name !== data.name) {
+ er = new Error( "Invalid Package: expected "
+ + pkgData.name + " but found "
+ + data.name )
+ }
+
+ if (!er && pkgData.version && pkgData.version !== data.version) {
+ er = new Error( "Invalid Package: expected "
+ + pkgData.name + "@" + pkgData.version
+ + " but found "
+ + data.name + "@" + data.version )
+ }
+
+ if (er) return cb(er)
+
+ addTmpTarball_(tgz, data, shasum, cb)
+ })
+ }
+}
+
+function addTmpTarball_ (tgz, data, shasum, cb) {
+ assert(typeof cb === "function", "must have callback function")
+ cb = once(cb)
+
+ var name = data.name
+ var version = data.version
+ assert(name, "should have package name by now")
+ assert(version, "should have package version by now")
+
+ var root = path.resolve(npm.cache, name, version)
+ var pkg = path.resolve(root, "package")
+ var target = path.resolve(root, "package.tgz")
+ getCacheStat(function (er, cs) {
+ if (er) return cb(er)
+ mkdir(pkg, function (er) {
+ if (er) return cb(er)
+ var read = fs.createReadStream(tgz)
+ var write = fs.createWriteStream(target)
+ var fin = cs.uid && cs.gid ? chown : done
+ read.on("error", cb).pipe(write).on("error", cb).on("close", fin)
+ })
+
+ function chown () {
+ chownr(root, cs.uid, cs.gid, done)
+ }
+ })
+
+ function done() {
+ data._shasum = data._shasum || shasum
+ cb(null, data)
+ }
+}
+
+function needName(er, data) {
+ return er ? er
+ : (data && !data.name) ? new Error("No name provided")
+ : null
+}
+
+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.js b/deps/npm/lib/cache/add-local.js
new file mode 100644
index 000000000..2a6d8cf88
--- /dev/null
+++ b/deps/npm/lib/cache/add-local.js
@@ -0,0 +1,146 @@
+var fs = require("graceful-fs")
+ , assert = require("assert")
+ , path = require("path")
+ , mkdir = require("mkdirp")
+ , chownr = require("chownr")
+ , pathIsInside = require("path-is-inside")
+ , readJson = require("read-package-json")
+ , log = require("npmlog")
+ , npm = require("../npm.js")
+ , tar = require("../utils/tar.js")
+ , deprCheck = require("../utils/depr-check.js")
+ , locker = require("../utils/locker.js")
+ , 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
+
+function addLocal (p, pkgData, cb_) {
+ assert(typeof p === "string", "must have path")
+ assert(typeof cb === "function", "must have callback")
+
+ pkgData = pkgData || {}
+
+ 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
+ return cb_(er, data)
+ })
+ }
+
+ lock(p, function (er) {
+ 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 (s.isDirectory()) addLocalDirectory(p, pkgData, null, cb)
+ else addLocalTarball(p, pkgData, null, cb)
+ })
+ })
+}
+
+// At this point, if shasum is set, it's something that we've already
+// read and checked. Just stashing it in the data at this point.
+function addLocalDirectory (p, pkgData, shasum, cb) {
+ assert(pkgData, "must pass package data")
+ assert(typeof cb === "function", "must have callback")
+
+ // if it's a folder, then read the package.json,
+ // tar it to the proper place, and add the cache tar
+ if (pathIsInside(p, npm.cache)) return cb(new Error(
+ "Adding a cache directory to the cache will make the world implode."))
+
+ readJson(path.join(p, "package.json"), false, function (er, data) {
+ er = needName(er, data)
+ er = needVersion(er, data)
+
+ // check that this is what we expected.
+ if (!er && pkgData.name && pkgData.name !== data.name) {
+ er = new Error( "Invalid Package: expected "
+ + pkgData.name + " but found "
+ + data.name )
+ }
+
+ if (!er && pkgData.version && pkgData.version !== data.version) {
+ er = new Error( "Invalid Package: expected "
+ + pkgData.name + "@" + pkgData.version
+ + " but found "
+ + data.name + "@" + data.version )
+ }
+
+ if (er) return cb(er)
+ deprCheck(data)
+
+ // pack to {cache}/name/ver/package.tgz
+ var croot = path.resolve(npm.cache, data.name, data.version)
+ var tgz = path.resolve(croot, "package.tgz")
+ var pj = path.resolve(croot, "package/package.json")
+ getCacheStat(function (er, cs) {
+ mkdir(path.dirname(pj), function (er, made) {
+ if (er) return cb(er)
+ var fancy = !pathIsInside(p, npm.tmp)
+ tar.pack(tgz, p, data, fancy, function (er) {
+ if (er) {
+ log.error( "addLocalDirectory", "Could not pack %j to %j"
+ , p, tgz )
+ return cb(er)
+ }
+
+ if (!cs || isNaN(cs.uid) || isNaN(cs.gid)) next()
+
+ chownr(made || tgz, cs.uid, cs.gid, next)
+ })
+ })
+ })
+
+ function next (er) {
+ if (er) return cb(er)
+ // if we have the shasum already, just add it
+ if (shasum) {
+ return addLocalTarball(tgz, data, shasum, cb)
+ } else {
+ sha.get(tgz, function (er, shasum) {
+ if (er) {
+ return cb(er)
+ }
+ data._shasum = shasum
+ return addLocalTarball(tgz, data, shasum, cb)
+ })
+ }
+ }
+ })
+}
+
+function needName(er, data) {
+ return er ? er
+ : (data && !data.name) ? new Error("No name provided")
+ : null
+}
+
+function needVersion(er, data) {
+ return er ? er
+ : (data && !data.version) ? new Error("No version provided")
+ : null
+}
diff --git a/deps/npm/lib/cache/add-named.js b/deps/npm/lib/cache/add-named.js
new file mode 100644
index 000000000..7684d01d0
--- /dev/null
+++ b/deps/npm/lib/cache/add-named.js
@@ -0,0 +1,275 @@
+var path = require("path")
+ , assert = require("assert")
+ , fs = require("graceful-fs")
+ , http = require("http")
+ , log = require("npmlog")
+ , semver = require("semver")
+ , readJson = require("read-package-json")
+ , url = require("url")
+ , npm = require("../npm.js")
+ , registry = npm.registry
+ , deprCheck = require("../utils/depr-check.js")
+ , inflight = require("inflight")
+ , locker = require("../utils/locker.js")
+ , lock = locker.lock
+ , unlock = locker.unlock
+ , maybeGithub = require("./maybe-github.js")
+ , addRemoteTarball = require("./add-remote-tarball.js")
+
+
+module.exports = addNamed
+
+var NAME_PREFIX = "addName:"
+function addNamed (name, version, data, cb_) {
+ assert(typeof name === "string", "must have module name")
+ assert(typeof cb_ === "function", "must have callback")
+
+ log.verbose("addNamed", [name, version])
+
+ var key = name + "@" + version
+ function cb (er, data) {
+ if (data && !data._fromGithub) data._from = key
+ unlock(key, function () { cb_(er, data) })
+ }
+
+ cb_ = inflight(NAME_PREFIX + key, cb_)
+
+ if (!cb_) return
+
+ log.verbose("addNamed", [semver.valid(version), semver.validRange(version)])
+ lock(key, function (er) {
+ if (er) return cb(er)
+
+ var fn = ( semver.valid(version, true) ? addNameVersion
+ : semver.validRange(version, true) ? addNameRange
+ : addNameTag
+ )
+ fn(name, version, data, cb)
+ })
+}
+
+function addNameTag (name, tag, data, cb_) {
+ log.info("addNameTag", [name, tag])
+ var explicit = true
+ if (!tag) {
+ explicit = false
+ 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)
+ }
+
+ registry.get(name, function (er, data, json, resp) {
+ if (!er) {
+ er = errorResponse(name, resp)
+ }
+ if (er) return cb(er)
+ engineFilter(data)
+ if (data["dist-tags"] && data["dist-tags"][tag]
+ && data.versions[data["dist-tags"][tag]]) {
+ var ver = data["dist-tags"][tag]
+ return addNamed(name, ver, data.versions[ver], cb)
+ }
+ if (!explicit && Object.keys(data.versions).length) {
+ return addNamed(name, "*", data, cb)
+ }
+
+ er = installTargetsError(tag, data)
+ return cb(er)
+ })
+}
+
+function engineFilter (data) {
+ var npmv = npm.version
+ , nodev = npm.config.get("node-version")
+ , strict = npm.config.get("engine-strict")
+
+ if (!nodev || npm.config.get("force")) return data
+
+ Object.keys(data.versions || {}).forEach(function (v) {
+ var eng = data.versions[v].engines
+ if (!eng) return
+ if (!strict && !data.versions[v].engineStrict) return
+ if (eng.node && !semver.satisfies(nodev, eng.node, true)
+ || eng.npm && !semver.satisfies(npmv, eng.npm, true)) {
+ delete data.versions[v]
+ }
+ })
+}
+
+function addNameVersion (name, v, data, cb) {
+ var ver = semver.valid(v, true)
+ if (!ver) return cb(new Error("Invalid version: "+v))
+
+ var response
+
+ if (data) {
+ response = null
+ return next()
+ }
+ registry.get(name, function (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.package = name
+ er.statusCode = 404
+ return cb(er)
+ }
+ response = resp
+ next()
+ })
+
+ function next () {
+ deprCheck(data)
+ var dist = data.dist
+
+ if (!dist) return cb(new Error("No dist in "+data._id+" package"))
+
+ if (!dist.tarball) return cb(new Error(
+ "No dist.tarball in " + data._id + " package"))
+
+ if ((response && response.statusCode !== 304) || npm.config.get("force")) {
+ return fetchit()
+ }
+
+ // we got cached data, so let's see if we have a tarball.
+ var pkgroot = path.join(npm.cache, name, ver)
+ var pkgtgz = path.join(pkgroot, "package.tgz")
+ var pkgjson = path.join(pkgroot, "package", "package.json")
+ fs.stat(pkgtgz, function (er) {
+ if (!er) {
+ readJson(pkgjson, function (er, data) {
+ er = needName(er, data)
+ er = needVersion(er, data)
+ if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR")
+ return cb(er)
+ if (er) return fetchit()
+ return cb(null, data)
+ })
+ } else return fetchit()
+ })
+
+ function fetchit () {
+ if (!npm.config.get("registry")) {
+ return cb(new Error("Cannot fetch: "+dist.tarball))
+ }
+
+ // use the same protocol as the registry.
+ // https registry --> https tarballs, but
+ // only if they're the same hostname, or else
+ // detached tarballs may not work.
+ var tb = url.parse(dist.tarball)
+ var rp = url.parse(npm.config.get("registry"))
+ if (tb.hostname === rp.hostname
+ && tb.protocol !== rp.protocol) {
+ tb.protocol = url.parse(npm.config.get("registry")).protocol
+ delete tb.href
+ }
+ tb = url.format(tb)
+
+ // only add non-shasum'ed packages if --forced.
+ // only ancient things would lack this for good reasons nowadays.
+ if (!dist.shasum && !npm.config.get("force")) {
+ return cb(new Error("package lacks shasum: " + data._id))
+ }
+ return addRemoteTarball(tb, data, dist.shasum, cb)
+ }
+ }
+}
+
+function addNameRange (name, range, data, cb) {
+ range = semver.validRange(range, true)
+ if (range === null) return cb(new Error(
+ "Invalid version range: "+range))
+
+ log.silly("addNameRange", {name:name, range:range, hasData:!!data})
+
+ if (data) return next()
+ registry.get(name, function (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"
+ , {name:name, range:range, hasData:!!data})
+ engineFilter(data)
+
+ log.silly("addNameRange", "versions"
+ , [data.name, Object.keys(data.versions || {})])
+
+ // if the tagged version satisfies, then use that.
+ var tagged = data["dist-tags"][npm.config.get("tag")]
+ if (tagged
+ && data.versions[tagged]
+ && semver.satisfies(tagged, range, true)) {
+ return addNamed(name, tagged, data.versions[tagged], cb)
+ }
+
+ // find the max satisfying version.
+ var versions = Object.keys(data.versions || {})
+ var ms = semver.maxSatisfying(versions, range, true)
+ if (!ms) {
+ return cb(installTargetsError(range, data))
+ }
+
+ // if we don't have a registry connection, try to see if
+ // there's a cached copy that will be ok.
+ addNamed(name, ms, data.versions[ms], cb)
+ }
+}
+
+function installTargetsError (requested, data) {
+ var targets = Object.keys(data["dist-tags"]).filter(function (f) {
+ return (data.versions || {}).hasOwnProperty(f)
+ }).concat(Object.keys(data.versions || {}))
+
+ requested = data.name + (requested ? "@'" + requested + "'" : "")
+
+ targets = targets.length
+ ? "Valid install targets:\n" + JSON.stringify(targets) + "\n"
+ : "No valid targets found.\n"
+ + "Perhaps not compatible with your version of node?"
+
+ var er = new Error( "No compatible version found: "
+ + requested + "\n" + targets)
+ er.code = "ETARGET"
+ return er
+}
+
+function errorResponse (name, response) {
+ var er
+ if (response.statusCode >= 400) {
+ er = new Error(http.STATUS_CODES[response.statusCode])
+ er.statusCode = response.statusCode
+ er.code = "E" + er.statusCode
+ er.pkgid = name
+ }
+ return er
+}
+
+function needName(er, data) {
+ return er ? er
+ : (data && !data.name) ? new Error("No name provided")
+ : null
+}
+
+function needVersion(er, data) {
+ return er ? er
+ : (data && !data.version) ? new Error("No version provided")
+ : null
+}
diff --git a/deps/npm/lib/cache/add-remote-git.js b/deps/npm/lib/cache/add-remote-git.js
new file mode 100644
index 000000000..2168d189f
--- /dev/null
+++ b/deps/npm/lib/cache/add-remote-git.js
@@ -0,0 +1,285 @@
+var mkdir = require("mkdirp")
+ , assert = require("assert")
+ , spawn = require("child_process").spawn
+ , exec = require("child_process").execFile
+ , once = require("once")
+ , fs = require("graceful-fs")
+ , log = require("npmlog")
+ , path = require("path")
+ , 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")
+ , locker = require("../utils/locker.js")
+ , lock = locker.lock
+ , unlock = locker.unlock
+ , getCacheStat = require("./get-stat.js")
+ , addLocalTarball = require("./add-local-tarball.js")
+
+
+// 1. cacheDir = path.join(cache,'_git-remotes',sha1(u))
+// 2. checkGitDir(cacheDir) ? 4. : 3. (rm cacheDir if necessary)
+// 3. git clone --mirror u cacheDir
+// 4. cd cacheDir && git fetch -a origin
+// 5. git archive /tmp/random.tgz
+// 6. addLocalTarball(/tmp/random.tgz) <gitref> --format=tar --prefix=package/
+// silent flag is used if this should error quietly
+module.exports = function addRemoteGit (u, parsed, 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) {
+ unlock(u, function () { cb_(er, data) })
+ }
+
+ cb_ = inflight(u, cb_)
+
+ if (!cb_) return
+
+ // git is so tricky!
+ // if the path is like ssh://foo:22/some/path then it works, but
+ // it needs the ssh://
+ // If the path is like ssh://foo:some/path then it works, but
+ // only if you remove the ssh://
+ var origUrl = u
+ u = u.replace(/^git\+/, "")
+ .replace(/#.*$/, "")
+
+ // ssh paths that are scp-style urls don't need the ssh://
+ if (parsed.pathname.match(/^\/?:/)) {
+ u = u.replace(/^ssh:\/\//, "")
+ }
+
+ lock(u, function (er) {
+ if (er) return cb(er)
+
+ // figure out what we should check out.
+ var co = parsed.hash && parsed.hash.substr(1) || "master"
+
+ var v = crypto.createHash("sha1").update(u).digest("hex").slice(0, 8)
+ v = u.replace(/[^a-zA-Z0-9]+/g, '-') + '-' + v
+
+ 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) {
+ if (er) return cb(er, data)
+ return cb(erChmod, data)
+ })
+ })
+ })
+}
+
+function checkGitDir (p, u, co, origUrl, silent, cb) {
+ fs.stat(p, function (er, s) {
+ if (er) return cloneGitRemote(p, u, co, origUrl, silent, cb)
+ if (!s.isDirectory()) return rm(p, function (er){
+ if (er) return cb(er)
+ cloneGitRemote(p, u, co, origUrl, silent, cb)
+ })
+
+ var git = npm.config.get("git")
+ var args = [ "config", "--get", "remote.origin.url" ]
+ var env = gitEnv()
+
+ // check for git
+ which(git, function (err) {
+ if (err) {
+ err.code = "ENOGIT"
+ return cb(err)
+ }
+ exec(git, args, {cwd: p, env: env}, function (er, stdout, stderr) {
+ var stdoutTrimmed = (stdout + "\n" + stderr).trim()
+ if (er || u !== stdout.trim()) {
+ log.warn( "`git config --get remote.origin.url` returned "
+ + "wrong result ("+u+")", stdoutTrimmed )
+ return rm(p, function (er){
+ if (er) return cb(er)
+ cloneGitRemote(p, u, co, origUrl, silent, cb)
+ })
+ }
+ log.verbose("git remote.origin.url", stdoutTrimmed)
+ archiveGitRemote(p, u, co, origUrl, cb)
+ })
+ })
+ })
+}
+
+function checkGitDir (p, u, co, origUrl, silent, cb) {
+ fs.stat(p, function (er, s) {
+ if (er) return cloneGitRemote(p, u, co, origUrl, silent, cb)
+ if (!s.isDirectory()) return rm(p, function (er){
+ if (er) return cb(er)
+ cloneGitRemote(p, u, co, origUrl, silent, cb)
+ })
+
+ var git = npm.config.get("git")
+ var args = [ "config", "--get", "remote.origin.url" ]
+ var env = gitEnv()
+
+ // check for git
+ which(git, function (err) {
+ if (err) {
+ err.code = "ENOGIT"
+ return cb(err)
+ }
+ exec(git, args, {cwd: p, env: env}, function (er, stdout, stderr) {
+ var stdoutTrimmed = (stdout + "\n" + stderr).trim()
+ if (er || u !== stdout.trim()) {
+ log.warn( "`git config --get remote.origin.url` returned "
+ + "wrong result ("+u+")", stdoutTrimmed )
+ return rm(p, function (er){
+ if (er) return cb(er)
+ cloneGitRemote(p, u, co, origUrl, silent, cb)
+ })
+ }
+ log.verbose("git remote.origin.url", stdoutTrimmed)
+ archiveGitRemote(p, u, co, origUrl, cb)
+ })
+ })
+ })
+}
+
+function cloneGitRemote (p, u, co, origUrl, silent, cb) {
+ mkdir(p, function (er) {
+ if (er) return cb(er)
+
+ var git = npm.config.get("git")
+ var args = [ "clone", "--mirror", u, p ]
+ var env = gitEnv()
+
+ // check for git
+ which(git, function (err) {
+ if (err) {
+ err.code = "ENOGIT"
+ return cb(err)
+ }
+ exec(git, args, {cwd: p, env: env}, function (er, stdout, stderr) {
+ stdout = (stdout + "\n" + stderr).trim()
+ if (er) {
+ if (silent) {
+ log.verbose("git clone " + u, stdout)
+ } else {
+ log.error("git clone " + u, stdout)
+ }
+ return cb(er)
+ }
+ log.verbose("git clone " + u, stdout)
+ archiveGitRemote(p, u, co, origUrl, cb)
+ })
+ })
+ })
+}
+
+function archiveGitRemote (p, u, co, origUrl, cb) {
+ var git = npm.config.get("git")
+ var archive = [ "fetch", "-a", "origin" ]
+ var resolve = [ "rev-list", "-n1", co ]
+ var env = gitEnv()
+
+ var resolved = null
+ var tmp
+
+ exec(git, archive, {cwd: p, env: env}, function (er, stdout, stderr) {
+ stdout = (stdout + "\n" + stderr).trim()
+ if (er) {
+ log.error("git fetch -a origin ("+u+")", stdout)
+ return cb(er)
+ }
+ log.verbose("git fetch -a origin ("+u+")", stdout)
+ tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz")
+ verifyOwnership()
+ })
+
+ function verifyOwnership() {
+ if (process.platform === "win32") {
+ log.silly("verifyOwnership", "skipping for windows")
+ resolveHead()
+ } else {
+ getCacheStat(function(er, cs) {
+ if (er) {
+ log.error("Could not get cache stat")
+ return cb(er)
+ }
+ chownr(p, cs.uid, cs.gid, function(er) {
+ if (er) {
+ log.error("Failed to change folder ownership under npm cache for %s", p)
+ return cb(er)
+ }
+ resolveHead()
+ })
+ })
+ }
+ }
+
+ function resolveHead () {
+ exec(git, resolve, {cwd: p, env: env}, function (er, stdout, stderr) {
+ stdout = (stdout + "\n" + stderr).trim()
+ if (er) {
+ log.error("Failed resolving git HEAD (" + u + ")", stderr)
+ return cb(er)
+ }
+ log.verbose("git rev-list -n1 " + co, stdout)
+ var parsed = url.parse(origUrl)
+ parsed.hash = stdout
+ resolved = url.format(parsed)
+
+ // https://github.com/npm/npm/issues/3224
+ // node incorrectly sticks a / at the start of the path
+ // We know that the host won't change, so split and detect this
+ var spo = origUrl.split(parsed.host)
+ var spr = resolved.split(parsed.host)
+ if (spo[1].charAt(0) === ':' && spr[1].charAt(0) === '/')
+ spr[1] = spr[1].slice(1)
+ resolved = spr.join(parsed.host)
+
+ log.verbose('resolved git url', resolved)
+ next()
+ })
+ }
+
+ function next () {
+ mkdir(path.dirname(tmp), function (er) {
+ if (er) return cb(er)
+ var gzip = zlib.createGzip({ level: 9 })
+ var git = npm.config.get("git")
+ var args = ["archive", co, "--format=tar", "--prefix=package/"]
+ var out = fs.createWriteStream(tmp)
+ var env = gitEnv()
+ cb = once(cb)
+ var cp = spawn(git, args, { env: env, cwd: p })
+ cp.on("error", cb)
+ cp.stderr.on("data", function(chunk) {
+ log.silly(chunk.toString(), "git archive")
+ })
+
+ cp.stdout.pipe(gzip).pipe(out).on("close", function() {
+ addLocalTarball(tmp, null, null, function(er, data) {
+ if (data) data._resolved = resolved
+ cb(er, data)
+ })
+ })
+ })
+ }
+}
+
+var gitEnv_
+function gitEnv () {
+ // git responds to env vars in some weird ways in post-receive hooks
+ // so don't carry those along.
+ 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
+ gitEnv_[k] = process.env[k]
+ }
+ return gitEnv_
+}
diff --git a/deps/npm/lib/cache/add-remote-tarball.js b/deps/npm/lib/cache/add-remote-tarball.js
new file mode 100644
index 000000000..db9a05d82
--- /dev/null
+++ b/deps/npm/lib/cache/add-remote-tarball.js
@@ -0,0 +1,106 @@
+var mkdir = require("mkdirp")
+ , assert = require("assert")
+ , log = require("npmlog")
+ , path = require("path")
+ , sha = require("sha")
+ , retry = require("retry")
+ , npm = require("../npm.js")
+ , fetch = require("../utils/fetch.js")
+ , inflight = require("inflight")
+ , locker = require("../utils/locker.js")
+ , lock = locker.lock
+ , unlock = locker.unlock
+ , addLocalTarball = require("./add-local-tarball.js")
+ , cacheFile = require("npm-cache-filename")
+
+module.exports = addRemoteTarball
+
+function addRemoteTarball (u, pkgData, shasum, cb_) {
+ assert(typeof u === "string", "must have module URL")
+ assert(typeof cb_ === "function", "must have callback")
+
+ function cb (er, data) {
+ if (data) {
+ data._from = u
+ data._shasum = data._shasum || shasum
+ data._resolved = u
+ }
+ unlock(u, function () {
+ cb_(er, data)
+ })
+ }
+
+ cb_ = inflight(u, cb_)
+
+ if (!cb_) return
+
+ // XXX Fetch direct to cache location, store tarballs under
+ // ${cache}/registry.npmjs.org/pkg/-/pkg-1.2.3.tgz
+ var tmp = cacheFile(npm.tmp, u)
+
+ function next (er, resp, shasum) {
+ if (er) return cb(er)
+ addLocalTarball(tmp, pkgData, shasum, cb)
+ }
+
+ lock(u, function (er) {
+ if (er) return cb(er)
+
+ log.verbose("addRemoteTarball", [u, shasum])
+ mkdir(path.dirname(tmp), function (er) {
+ if (er) return cb(er)
+ addRemoteTarball_(u, tmp, shasum, next)
+ })
+ })
+}
+
+function addRemoteTarball_(u, tmp, shasum, cb) {
+ // Tuned to spread 3 attempts over about a minute.
+ // See formula at <https://github.com/tim-kos/node-retry>.
+ var operation = retry.operation
+ ( { retries: npm.config.get("fetch-retries")
+ , factor: npm.config.get("fetch-retry-factor")
+ , minTimeout: npm.config.get("fetch-retry-mintimeout")
+ , maxTimeout: npm.config.get("fetch-retry-maxtimeout") })
+
+ operation.attempt(function (currentAttempt) {
+ log.info("retry", "fetch attempt " + currentAttempt
+ + " at " + (new Date()).toLocaleTimeString())
+ fetchAndShaCheck(u, tmp, shasum, function (er, response, shasum) {
+ // Only retry on 408, 5xx or no `response`.
+ var sc = response && response.statusCode
+ var statusRetry = !sc || (sc === 408 || sc >= 500)
+ if (er && statusRetry && operation.retry(er)) {
+ log.info("retry", "will retry, error on last attempt: " + er)
+ return
+ }
+ cb(er, response, shasum)
+ })
+ })
+}
+
+function fetchAndShaCheck (u, tmp, shasum, cb) {
+ fetch(u, tmp, 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)
+ })
+ }
+
+ // 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
+ }
+ return cb(er, response, shasum)
+ })
+ })
+}
diff --git a/deps/npm/lib/cache/get-stat.js b/deps/npm/lib/cache/get-stat.js
new file mode 100644
index 000000000..913f5af85
--- /dev/null
+++ b/deps/npm/lib/cache/get-stat.js
@@ -0,0 +1,63 @@
+var mkdir = require("mkdirp")
+ , fs = require("graceful-fs")
+ , log = require("npmlog")
+ , chownr = require("chownr")
+ , npm = require("../npm.js")
+ , inflight = require("inflight")
+
+// to maintain the cache dir's permissions consistently.
+var cacheStat = null
+module.exports = function getCacheStat (cb) {
+ if (cacheStat) return cb(null, cacheStat)
+
+ cb = inflight("getCacheStat", cb)
+ if (!cb) return
+
+ fs.stat(npm.cache, function (er, st) {
+ if (er) return makeCacheDir(cb)
+ if (!st.isDirectory()) {
+ log.error("getCacheStat", "invalid cache dir %j", npm.cache)
+ return cb(er)
+ }
+ return cb(null, cacheStat = st)
+ })
+}
+
+function makeCacheDir (cb) {
+ if (!process.getuid) return mkdir(npm.cache, cb)
+
+ var uid = +process.getuid()
+ , gid = +process.getgid()
+
+ if (uid === 0) {
+ if (process.env.SUDO_UID) uid = +process.env.SUDO_UID
+ if (process.env.SUDO_GID) gid = +process.env.SUDO_GID
+ }
+ if (uid !== 0 || !process.env.HOME) {
+ cacheStat = {uid: uid, gid: gid}
+ return mkdir(npm.cache, afterMkdir)
+ }
+
+ fs.stat(process.env.HOME, function (er, st) {
+ if (er) {
+ log.error("makeCacheDir", "homeless?")
+ return cb(er)
+ }
+ cacheStat = st
+ log.silly("makeCacheDir", "cache dir uid, gid", [st.uid, st.gid])
+ return mkdir(npm.cache, afterMkdir)
+ })
+
+ function afterMkdir (er, made) {
+ if (er || !cacheStat || isNaN(cacheStat.uid) || isNaN(cacheStat.gid)) {
+ return cb(er, cacheStat)
+ }
+
+ if (!made) return cb(er, cacheStat)
+
+ // ensure that the ownership is correct.
+ chownr(made, cacheStat.uid, cacheStat.gid, function (er) {
+ return cb(er, cacheStat)
+ })
+ }
+}
diff --git a/deps/npm/lib/cache/maybe-github.js b/deps/npm/lib/cache/maybe-github.js
new file mode 100644
index 000000000..fee64c5df
--- /dev/null
+++ b/deps/npm/lib/cache/maybe-github.js
@@ -0,0 +1,35 @@
+var url = require("url")
+ , assert = require("assert")
+ , log = require("npmlog")
+ , addRemoteGit = require("./add-remote-git.js")
+
+module.exports = function maybeGithub (p, er, 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) {
+ 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)
+ success(upriv, data)
+ })
+ }
+ success(u, data)
+ })
+
+ function success (u, data) {
+ data._from = u
+ data._fromGithub = true
+ return cb(null, data)
+ }
+}
diff --git a/deps/npm/lib/explore.js b/deps/npm/lib/explore.js
index 8b55115e0..767d9a876 100644
--- a/deps/npm/lib/explore.js
+++ b/deps/npm/lib/explore.js
@@ -26,6 +26,7 @@ function explore (args, cb) {
"\nExploring "+cwd+"\n"+
"Type 'exit' or ^D when finished\n")
+ npm.spinner.stop()
var shell = spawn(sh, args, { cwd: cwd, customFds: [0, 1, 2] })
shell.on("close", function (er) {
// only fail if non-interactive.
diff --git a/deps/npm/lib/help.js b/deps/npm/lib/help.js
index 72b4393b6..c68f322ab 100644
--- a/deps/npm/lib/help.js
+++ b/deps/npm/lib/help.js
@@ -15,6 +15,7 @@ var fs = require("graceful-fs")
, glob = require("glob")
function help (args, cb) {
+ npm.spinner.stop()
var argv = npm.config.get("argv").cooked
var argnum = 0
diff --git a/deps/npm/lib/init.js b/deps/npm/lib/init.js
index d064ae8bc..8ae991f5b 100644
--- a/deps/npm/lib/init.js
+++ b/deps/npm/lib/init.js
@@ -12,6 +12,7 @@ init.usage = "npm init"
function init (args, cb) {
var dir = process.cwd()
log.pause()
+ npm.spinner.stop()
var initFile = npm.config.get('init-module')
console.log(
@@ -31,6 +32,10 @@ function init (args, cb) {
log.resume()
log.silly('package data', data)
log.info('init', 'written successfully')
+ if (er && er.message === 'canceled') {
+ log.warn('init', 'canceled')
+ return cb(null, data)
+ }
cb(er, data)
})
}
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index 3e319fa67..5cf974ea7 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -391,6 +391,7 @@ function save (where, installed, tree, pretty, hasArguments, cb) {
if (saveBundle) {
var i = bundle.indexOf(t)
if (i === -1) bundle.push(t)
+ data.bundleDependencies = bundle.sort()
}
})
@@ -709,7 +710,7 @@ 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, function (er, data) {
+ cache.add(what, null, false, function (er, data) {
if (er && parent && parent.optionalDependencies &&
parent.optionalDependencies.hasOwnProperty(what.split("@")[0])) {
log.warn("optional dep failed, continuing", what)
diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js
index efe503b62..12e4d2edc 100644
--- a/deps/npm/lib/ls.js
+++ b/deps/npm/lib/ls.js
@@ -128,8 +128,7 @@ function getLite (data, noname) {
var dep = data.dependencies[d]
if (typeof dep === "string") {
lite.problems = lite.problems || []
- var p
- if (data.depth >= maxDepth) {
+ if (data.depth > maxDepth) {
p = "max depth reached: "
} else {
p = "missing: "
@@ -223,14 +222,14 @@ function makeArchy (data, long, dir) {
function makeArchy_ (data, long, dir, depth, parent, d) {
var color = npm.color
if (typeof data === "string") {
- if (depth < npm.config.get("depth")) {
+ if (depth -1 <= npm.config.get("depth")) {
// just missing
var p = parent.link || parent.path
var unmet = "UNMET DEPENDENCY"
if (color) {
unmet = "\033[31;40m" + unmet + "\033[0m"
}
- data = unmet + " " + d + " " + data
+ data = unmet + " " + d + "@" + data
} else {
data = d+"@"+ data
}
diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js
index 613bf0095..c0c744f99 100644
--- a/deps/npm/lib/npm.js
+++ b/deps/npm/lib/npm.js
@@ -24,12 +24,8 @@ var EventEmitter = require("events").EventEmitter
, abbrev = require("abbrev")
, which = require("which")
, semver = require("semver")
- , findPrefix = require("./utils/find-prefix.js")
- , getUid = require("uid-number")
- , mkdirp = require("mkdirp")
- , slide = require("slide")
- , chain = slide.chain
, RegClient = require("npm-registry-client")
+ , charSpin = require("char-spinner")
npm.config = {
loaded: false,
@@ -41,23 +37,6 @@ npm.config = {
}
}
-// /usr/local is often a read-only fs, which is not
-// well handled by node or mkdirp. Just double-check
-// in the case of errors when making the prefix dirs.
-function mkdir (p, cb) {
- mkdirp(p, function (er, made) {
- // it could be that we couldn't create it, because it
- // already exists, and is on a read-only fs.
- if (er) {
- return fs.stat(p, function (er2, st) {
- if (er2 || !st.isDirectory()) return cb(er)
- return cb(null, made)
- })
- }
- return cb(er, made)
- })
-}
-
npm.commands = {}
try {
@@ -182,6 +161,22 @@ var commandCache = {}
})
, abbrevs = abbrev(fullList)
+npm.spinner =
+ { int: null
+ , start: function () {
+ if (npm.spinner.int) return
+ var c = npm.config.get("spin")
+ if (!c) return
+ var stream = npm.config.get("logstream")
+ var opt = { tty: c !== "always", stream: stream }
+ npm.spinner.int = charSpin(opt)
+ }
+ , stop: function () {
+ clearInterval(npm.spinner.int)
+ npm.spinner.int = null
+ }
+ }
+
Object.keys(abbrevs).concat(plumbing).forEach(function addCommand (c) {
Object.defineProperty(npm.commands, c, { get : function () {
if (!loaded) throw new Error(
@@ -204,6 +199,9 @@ Object.keys(abbrevs).concat(plumbing).forEach(function addCommand (c) {
}
if (args.length === 1) args.unshift([])
+ npm.spinner.start()
+
+ npm.registry.version = npm.version
if (!npm.registry.refer) {
npm.registry.refer = [a].concat(args[0]).map(function (arg) {
// exclude anything that might be a URL, path, or private module
@@ -350,118 +348,24 @@ function load (npm, cli, cb) {
// at this point the configs are all set.
// go ahead and spin up the registry client.
- var token = config.get("_token")
- if (typeof token === "string") {
- try {
- token = JSON.parse(token)
- config.set("_token", token, "user")
- config.save("user")
- } catch (e) { token = null }
- }
-
npm.registry = new RegClient(npm.config)
- // save the token cookie in the config file
- if (npm.registry.couchLogin) {
- npm.registry.couchLogin.tokenSet = function (tok) {
- npm.config.set("_token", tok, "user")
- // ignore save error. best effort.
- npm.config.save("user")
- }
- }
-
var umask = npm.config.get("umask")
npm.modes = { exec: 0777 & (~umask)
, file: 0666 & (~umask)
, umask: umask }
- chain([ [ loadPrefix, npm, cli ]
- , [ setUser, config, config.root ]
- , [ loadUid, npm ]
- ], cb)
- })
- })
-}
+ var gp = Object.getOwnPropertyDescriptor(config, "globalPrefix")
+ Object.defineProperty(npm, "globalPrefix", gp)
-function loadPrefix (npm, config, cb) {
- // try to guess at a good node_modules location.
- var p
- , gp
- if (!Object.prototype.hasOwnProperty.call(config, "prefix")) {
- p = process.cwd()
- } else {
- p = npm.config.get("prefix")
- }
- gp = npm.config.get("prefix")
-
- findPrefix(p, function (er, p) {
- Object.defineProperty(npm, "localPrefix",
- { get : function () { return p }
- , set : function (r) { return p = r }
- , enumerable : true
- })
- // the prefix MUST exist, or else nothing works.
- if (!npm.config.get("global")) {
- mkdir(p, next)
- } else {
- next(er)
- }
- })
-
- gp = path.resolve(gp)
- Object.defineProperty(npm, "globalPrefix",
- { get : function () { return gp }
- , set : function (r) { return gp = r }
- , enumerable : true
- })
- // the prefix MUST exist, or else nothing works.
- mkdir(gp, next)
-
-
- var i = 2
- , errState = null
- function next (er) {
- if (errState) return
- if (er) return cb(errState = er)
- if (--i === 0) return cb()
- }
-}
+ var lp = Object.getOwnPropertyDescriptor(config, "localPrefix")
+ Object.defineProperty(npm, "localPrefix", lp)
-
-function loadUid (npm, cb) {
- // if we're not in unsafe-perm mode, then figure out who
- // to run stuff as. Do this first, to support `npm update npm -g`
- if (!npm.config.get("unsafe-perm")) {
- getUid(npm.config.get("user"), npm.config.get("group"), cb)
- } else {
- process.nextTick(cb)
- }
-}
-
-function setUser (cl, dc, cb) {
- // If global, leave it as-is.
- // If not global, then set the user to the owner of the prefix folder.
- // Just set the default, so it can be overridden.
- if (cl.get("global")) return cb()
- if (process.env.SUDO_UID) {
- dc.user = +(process.env.SUDO_UID)
- return cb()
- }
-
- var prefix = path.resolve(cl.get("prefix"))
- mkdir(prefix, function (er) {
- if (er) {
- log.error("could not create prefix dir", prefix)
- return cb(er)
- }
- fs.stat(prefix, function (er, st) {
- dc.user = st && st.uid
- return cb(er)
+ return cb()
})
})
}
-
Object.defineProperty(npm, "prefix",
{ get : function () {
return npm.config.get("global") ? npm.globalPrefix : npm.localPrefix
diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js
index 6ca348726..ef406fbdc 100644
--- a/deps/npm/lib/outdated.js
+++ b/deps/npm/lib/outdated.js
@@ -155,12 +155,33 @@ function outdated_ (args, dir, parentHas, depth, cb) {
}
var deps = null
readJson(path.resolve(dir, "package.json"), function (er, d) {
+ d = d || {}
if (er && er.code !== "ENOENT" && er.code !== "ENOTDIR") return cb(er)
deps = (er) ? true : (d.dependencies || {})
+
+ if (npm.config.get("save-dev")) {
+ deps = d.devDependencies || {}
+ return next()
+ }
+
+ if (npm.config.get("save")) {
+ // remove optional dependencies from dependencies during --save.
+ Object.keys(d.optionalDependencies || {}).forEach(function (k) {
+ delete deps[k]
+ })
+ return next()
+ }
+
+ if (npm.config.get("save-optional")) {
+ deps = d.optionalDependencies || {}
+ return next()
+ }
+
var doUpdate = npm.config.get("dev") ||
(!npm.config.get("production") &&
!Object.keys(parentHas).length &&
!npm.config.get("global"))
+
if (!er && d && doUpdate) {
Object.keys(d.devDependencies || {}).forEach(function (k) {
if (!(k in parentHas)) {
@@ -273,7 +294,7 @@ 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, onCacheAdd)
+ cache.add(dep, req, false, onCacheAdd)
function onCacheAdd(er, d) {
// if this fails, then it means we can't update this thing.
diff --git a/deps/npm/lib/pack.js b/deps/npm/lib/pack.js
index 302aa81f2..ea94dd154 100644
--- a/deps/npm/lib/pack.js
+++ b/deps/npm/lib/pack.js
@@ -40,7 +40,7 @@ function printFiles (files, cb) {
// add to cache, then cp to the cwd
function pack_ (pkg, cb) {
- cache.add(pkg, function (er, data) {
+ cache.add(pkg, null, false, function (er, data) {
if (er) return cb(er)
var fname = path.resolve(data._id.replace(/@/g, "-") + ".tgz")
, cached = path.resolve( npm.cache
diff --git a/deps/npm/lib/publish.js b/deps/npm/lib/publish.js
index cede9ff0a..01d66b407 100644
--- a/deps/npm/lib/publish.js
+++ b/deps/npm/lib/publish.js
@@ -49,7 +49,7 @@ 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, function (er, data) {
+ npm.commands.cache.add(dir, null, false, function (er, data) {
if (er) return cb(er)
log.silly("publish", data)
var cachedir = path.resolve( npm.cache
diff --git a/deps/npm/lib/repo.js b/deps/npm/lib/repo.js
index b95bd7562..a2ec99bb0 100644
--- a/deps/npm/lib/repo.js
+++ b/deps/npm/lib/repo.js
@@ -19,6 +19,7 @@ var npm = require("./npm.js")
, path = require("path")
, readJson = require("read-package-json")
, fs = require("fs")
+ , url_ = require('url')
function repo (args, cb) {
var n = args.length && args[0].split("@").shift() || '.'
@@ -40,7 +41,11 @@ function getUrlAndOpen (d, cb) {
// from https://github.com/npm/npm-www/issues/418
if (githubUserRepo(r.url))
r.url = githubUserRepo(r.url)
- var url = github(r.url)
+
+ var url = (r.url && ~r.url.indexOf('github'))
+ ? github(r.url)
+ : nonGithubUrl(r.url)
+
if (!url)
return cb(new Error('no repository: could not get url'))
opener(url, { command: npm.config.get("browser") }, cb)
@@ -52,3 +57,19 @@ function callRegistry (n, cb) {
getUrlAndOpen(d, cb)
})
}
+
+function nonGithubUrl (url) {
+ try {
+ var idx = url.indexOf('@')
+ if (idx !== -1) {
+ url = url.slice(idx+1).replace(/:([^\d]+)/, '/$1')
+ }
+ url = url_.parse(url)
+ var protocol = url.protocol === 'https:'
+ ? 'https:'
+ : 'http:'
+ return protocol + '//' + (url.host || '') +
+ url.path.replace(/\.git$/, '')
+ }
+ catch(e) {}
+}
diff --git a/deps/npm/lib/submodule.js b/deps/npm/lib/submodule.js
index 72a224814..5ea5a4f46 100644
--- a/deps/npm/lib/submodule.js
+++ b/deps/npm/lib/submodule.js
@@ -23,7 +23,7 @@ function submodule (args, cb) {
if (args.length === 0) return cb(submodule.usage)
asyncMap(args, function (arg, cb) {
- cache.add(arg, cb)
+ cache.add(arg, null, false, cb)
}, function (er, pkgs) {
if (er) return cb(er)
chain(pkgs.map(function (pkg) { return function (cb) {
@@ -99,9 +99,9 @@ var getSubmodules = function getSubmodules (cb) {
err.code = "ENOGIT"
return cb(err)
}
- exec(git, args, function (er, stdout, stderr) {
+ exec(git, args, function (er, stdout) {
if (er) return cb(er)
- res = stdout.trim().split(/\n/).map(function (line) {
+ var res = stdout.trim().split(/\n/).map(function (line) {
return line.trim().split(/\s+/)[1]
}).filter(function (line) {
// only care about submodules in the node_modules folder.
diff --git a/deps/npm/lib/utils/depr-check.js b/deps/npm/lib/utils/depr-check.js
new file mode 100644
index 000000000..7166348b0
--- /dev/null
+++ b/deps/npm/lib/utils/depr-check.js
@@ -0,0 +1,13 @@
+var log = require("npmlog")
+
+var deprecated = {}
+ , deprWarned = {}
+module.exports = function deprCheck (data) {
+ if (deprecated[data._id]) data.deprecated = deprecated[data._id]
+ if (data.deprecated) deprecated[data._id] = data.deprecated
+ else return
+ if (!deprWarned[data._id]) {
+ deprWarned[data._id] = true
+ log.warn("deprecated", "%s: %s", data._id, data.deprecated)
+ }
+}
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index b025fdd37..feeec184c 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -63,6 +63,7 @@ function exit (code, noLog) {
// if we're really exiting, then let it exit on its own, so that
// in-process stuff can finish or clean up first.
if (!doExit) process.emit("exit", code)
+ npm.spinner.stop()
}
}
diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js
index 1af5bddca..af009cc21 100644
--- a/deps/npm/lib/utils/lifecycle.js
+++ b/deps/npm/lib/utils/lifecycle.js
@@ -162,6 +162,9 @@ function runCmd (note, cmd, pkg, env, stage, wd, unsafe, cb) {
, group = unsafe ? null : npm.config.get("group")
if (log.level !== 'silent') {
+ if (npm.spinner.int) {
+ npm.config.get("logstream").write("\r \r")
+ }
console.log(note)
}
log.verbose("unsafe-perm in lifecycle", unsafe)
diff --git a/deps/npm/lib/utils/locker.js b/deps/npm/lib/utils/locker.js
new file mode 100644
index 000000000..9e322d7af
--- /dev/null
+++ b/deps/npm/lib/utils/locker.js
@@ -0,0 +1,52 @@
+var crypto = require("crypto")
+var path = require("path")
+
+var npm = require("../npm.js")
+var lockFile = require("lockfile")
+var log = require("npmlog")
+var getCacheStat = require("../cache/get-stat.js")
+
+function lockFileName (u) {
+ var c = u.replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "")
+ , h = crypto.createHash("sha1").update(u).digest("hex")
+ h = h.substr(0, 8)
+ c = c.substr(-32)
+ log.silly("lockFile", h + "-" + c, u)
+ return path.resolve(npm.config.get("cache"), h + "-" + c + ".lock")
+}
+
+var myLocks = {}
+function lock (u, cb) {
+ // the cache dir needs to exist already for this.
+ getCacheStat(function (er, cs) {
+ if (er) return cb(er)
+ var opts = { stale: npm.config.get("cache-lock-stale")
+ , retries: npm.config.get("cache-lock-retries")
+ , wait: npm.config.get("cache-lock-wait") }
+ var lf = lockFileName(u)
+ log.verbose("lock", u, lf)
+ lockFile.lock(lf, opts, function(er) {
+ if (!er) myLocks[lf] = true
+ cb(er)
+ })
+ })
+}
+
+function unlock (u, cb) {
+ var lf = lockFileName(u)
+ , locked = myLocks[lf]
+ if (locked === false) {
+ return process.nextTick(cb)
+ } else if (locked === true) {
+ myLocks[lf] = false
+ lockFile.unlock(lockFileName(u), cb)
+ } else {
+ throw new Error("Attempt to unlock " + u + ", which hasn't been locked")
+ }
+}
+
+module.exports = {
+ lock: lock,
+ unlock: unlock,
+ _lockFileName: lockFileName
+}
diff --git a/deps/npm/lib/utils/tar.js b/deps/npm/lib/utils/tar.js
index b73c134e4..3121bb028 100644
--- a/deps/npm/lib/utils/tar.js
+++ b/deps/npm/lib/utils/tar.js
@@ -8,7 +8,6 @@ var npm = require("../npm.js")
, uidNumber = require("uid-number")
, rm = require("./gently-rm.js")
, readJson = require("read-package-json")
- , cache = require("../cache.js")
, myUid = process.getuid && process.getuid()
, myGid = process.getgid && process.getgid()
, tar = require("tar")
@@ -16,13 +15,14 @@ var npm = require("../npm.js")
, fstream = require("fstream")
, Packer = require("fstream-npm")
, lifecycle = require("./lifecycle.js")
+ , locker = require("./locker.js")
function lock(path, cb) {
- return cache.lock('tar://' + path, cb)
+ return locker.lock('tar://' + path, cb)
}
function unlock(path, cb) {
- return cache.unlock('tar://' + path, cb)
+ return locker.unlock('tar://' + path, cb)
}
if (process.env.SUDO_UID && myUid === 0) {
diff --git a/deps/npm/lib/version.js b/deps/npm/lib/version.js
index 4e155da96..ec3f93b20 100644
--- a/deps/npm/lib/version.js
+++ b/deps/npm/lib/version.js
@@ -11,7 +11,7 @@ var exec = require("child_process").execFile
, which = require("which")
, npm = require("./npm.js")
-version.usage = "npm version [<newversion> | major | minor | patch]\n"
+version.usage = "npm version [<newversion> | major | minor | patch | prerelease | preminor | premajor ]\n"
+ "\n(run in package dir)\n"
+ "'npm -v' or 'npm --version' to print npm version "
+ "("+npm.version+")\n"
@@ -105,6 +105,11 @@ function checkGit (data, cb) {
chain
( [ [ exec, git, [ "add", "package.json" ], {env: process.env} ]
, [ exec, git, [ "commit", "-m", message ], {env: process.env} ]
+ , sign && function (cb) {
+ npm.spinner.stop()
+ cb()
+ }
+
, [ exec, git, [ "tag", "v" + data.version, flag, message ]
, {env: process.env} ] ]
, cb )
diff --git a/deps/npm/lib/view.js b/deps/npm/lib/view.js
index 18484b2bd..6b7382378 100644
--- a/deps/npm/lib/view.js
+++ b/deps/npm/lib/view.js
@@ -208,7 +208,7 @@ function printData (data, name, cb) {
d = JSON.stringify(d)
}
if (f && showFields) f += " = "
- if (d.indexOf("\n") !== -1) d = "\n" + d
+ if (d.indexOf("\n") !== -1) d = " \n" + d
msg += (showVersions ? name + "@" + v + " " : "")
+ (showFields ? f : "") + d + "\n"
})
diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1
index 0f8bef3d7..030823c8a 100644
--- a/deps/npm/man/man1/npm-README.1
+++ b/deps/npm/man/man1/npm-README.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM" "1" "May 2014" "" ""
+.TH "NPM" "1" "June 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
diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1
index 594330a41..6535cb409 100644
--- a/deps/npm/man/man1/npm-adduser.1
+++ b/deps/npm/man/man1/npm-adduser.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-ADDUSER" "1" "May 2014" "" ""
+.TH "NPM\-ADDUSER" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-adduser\fR \-\- Add a registry user account
diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1
index af5468b59..750f9fb30 100644
--- a/deps/npm/man/man1/npm-bin.1
+++ b/deps/npm/man/man1/npm-bin.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-BIN" "1" "May 2014" "" ""
+.TH "NPM\-BIN" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-bin\fR \-\- Display npm bin folder
diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1
index b3a953bfe..43a71a261 100644
--- a/deps/npm/man/man1/npm-bugs.1
+++ b/deps/npm/man/man1/npm-bugs.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-BUGS" "1" "May 2014" "" ""
+.TH "NPM\-BUGS" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
diff --git a/deps/npm/man/man1/npm-build.1 b/deps/npm/man/man1/npm-build.1
index 152caf79c..e6c410019 100644
--- a/deps/npm/man/man1/npm-build.1
+++ b/deps/npm/man/man1/npm-build.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-BUILD" "1" "May 2014" "" ""
+.TH "NPM\-BUILD" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-build\fR \-\- Build a package
diff --git a/deps/npm/man/man1/npm-bundle.1 b/deps/npm/man/man1/npm-bundle.1
index 5f2f85a3f..0a8f2d5c3 100644
--- a/deps/npm/man/man1/npm-bundle.1
+++ b/deps/npm/man/man1/npm-bundle.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-BUNDLE" "1" "May 2014" "" ""
+.TH "NPM\-BUNDLE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-bundle\fR \-\- REMOVED
diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1
index 0e5b949c2..9976f72ab 100644
--- a/deps/npm/man/man1/npm-cache.1
+++ b/deps/npm/man/man1/npm-cache.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-CACHE" "1" "May 2014" "" ""
+.TH "NPM\-CACHE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-cache\fR \-\- Manipulates packages cache
@@ -46,12 +46,8 @@ For each package that is added to the cache, three pieces of information are
stored in \fB{cache}/{name}/{version}\fR:
.
.IP "\(bu" 4
-\|\.\.\./package/:
-A folder containing the package contents as they appear in the tarball\.
-.
-.IP "\(bu" 4
-\|\.\.\./package\.json:
-The package\.json file, as npm sees it, with overlays applied and a _id attribute\.
+\|\.\.\./package/package\.json:
+The package\.json file, as npm sees it\.
.
.IP "\(bu" 4
\|\.\.\./package\.tgz:
@@ -62,7 +58,7 @@ The tarball for that version\.
.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\.
+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\.
diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1
index 6d1ec8d97..2c8a411fa 100644
--- a/deps/npm/man/man1/npm-completion.1
+++ b/deps/npm/man/man1/npm-completion.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-COMPLETION" "1" "May 2014" "" ""
+.TH "NPM\-COMPLETION" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-completion\fR \-\- Tab Completion for npm
diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1
index 38490724d..ebe9cb20e 100644
--- a/deps/npm/man/man1/npm-config.1
+++ b/deps/npm/man/man1/npm-config.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-CONFIG" "1" "May 2014" "" ""
+.TH "NPM\-CONFIG" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-config\fR \-\- Manage the npm configuration files
diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1
index e60192178..8ffe7d7fa 100644
--- a/deps/npm/man/man1/npm-dedupe.1
+++ b/deps/npm/man/man1/npm-dedupe.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DEDUPE" "1" "May 2014" "" ""
+.TH "NPM\-DEDUPE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-dedupe\fR \-\- Reduce duplication
diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1
index e4a19b23b..0776d22f2 100644
--- a/deps/npm/man/man1/npm-deprecate.1
+++ b/deps/npm/man/man1/npm-deprecate.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DEPRECATE" "1" "May 2014" "" ""
+.TH "NPM\-DEPRECATE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-deprecate\fR \-\- Deprecate a version of a package
diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1
index 27cbb05c8..8b5613afd 100644
--- a/deps/npm/man/man1/npm-docs.1
+++ b/deps/npm/man/man1/npm-docs.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DOCS" "1" "May 2014" "" ""
+.TH "NPM\-DOCS" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1
index 678c9128b..bc2de5574 100644
--- a/deps/npm/man/man1/npm-edit.1
+++ b/deps/npm/man/man1/npm-edit.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-EDIT" "1" "May 2014" "" ""
+.TH "NPM\-EDIT" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-edit\fR \-\- Edit an installed package
diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1
index 2baac8f2f..4380044c6 100644
--- a/deps/npm/man/man1/npm-explore.1
+++ b/deps/npm/man/man1/npm-explore.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-EXPLORE" "1" "May 2014" "" ""
+.TH "NPM\-EXPLORE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-explore\fR \-\- Browse an installed package
diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1
index cf723d2f4..a40780920 100644
--- a/deps/npm/man/man1/npm-help-search.1
+++ b/deps/npm/man/man1/npm-help-search.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-HELP\-SEARCH" "1" "May 2014" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-help-search\fR \-\- Search npm help documentation
diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1
index 9e6c240fd..66998f90a 100644
--- a/deps/npm/man/man1/npm-help.1
+++ b/deps/npm/man/man1/npm-help.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-HELP" "1" "May 2014" "" ""
+.TH "NPM\-HELP" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-help\fR \-\- Get help on npm
diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1
index 795a8db9b..947b6bb95 100644
--- a/deps/npm/man/man1/npm-init.1
+++ b/deps/npm/man/man1/npm-init.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-INIT" "1" "May 2014" "" ""
+.TH "NPM\-INIT" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-init\fR \-\- Interactively create a package\.json file
diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1
index d98b55b12..501d019ca 100644
--- a/deps/npm/man/man1/npm-install.1
+++ b/deps/npm/man/man1/npm-install.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-INSTALL" "1" "May 2014" "" ""
+.TH "NPM\-INSTALL" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-install\fR \-\- Install a package
diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1
index 389dd82d5..b6a851f78 100644
--- a/deps/npm/man/man1/npm-link.1
+++ b/deps/npm/man/man1/npm-link.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-LINK" "1" "May 2014" "" ""
+.TH "NPM\-LINK" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-link\fR \-\- Symlink a package folder
diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1
index f0662f64c..8258cc709 100644
--- a/deps/npm/man/man1/npm-ls.1
+++ b/deps/npm/man/man1/npm-ls.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-LS" "1" "May 2014" "" ""
+.TH "NPM\-LS" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-ls\fR \-\- List installed packages
@@ -29,7 +29,7 @@ For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
.IP "" 4
.
.nf
-npm@1.4.10 /path/to/npm
+npm@1.4.14 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.
diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1
index f0e7ce6d9..ac1056b2a 100644
--- a/deps/npm/man/man1/npm-outdated.1
+++ b/deps/npm/man/man1/npm-outdated.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-OUTDATED" "1" "May 2014" "" ""
+.TH "NPM\-OUTDATED" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-outdated\fR \-\- Check for outdated packages
diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1
index dbb41b7b8..3d4195dc4 100644
--- a/deps/npm/man/man1/npm-owner.1
+++ b/deps/npm/man/man1/npm-owner.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-OWNER" "1" "May 2014" "" ""
+.TH "NPM\-OWNER" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-owner\fR \-\- Manage package owners
diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1
index c23b617e0..6c79d8078 100644
--- a/deps/npm/man/man1/npm-pack.1
+++ b/deps/npm/man/man1/npm-pack.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PACK" "1" "May 2014" "" ""
+.TH "NPM\-PACK" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-pack\fR \-\- Create a tarball from a package
diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1
index 66849742b..c50736c8f 100644
--- a/deps/npm/man/man1/npm-prefix.1
+++ b/deps/npm/man/man1/npm-prefix.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PREFIX" "1" "May 2014" "" ""
+.TH "NPM\-PREFIX" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-prefix\fR \-\- Display prefix
diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1
index 710438d10..37fd8ff59 100644
--- a/deps/npm/man/man1/npm-prune.1
+++ b/deps/npm/man/man1/npm-prune.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PRUNE" "1" "May 2014" "" ""
+.TH "NPM\-PRUNE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-prune\fR \-\- Remove extraneous packages
diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1
index 19271c82a..4a4d00464 100644
--- a/deps/npm/man/man1/npm-publish.1
+++ b/deps/npm/man/man1/npm-publish.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PUBLISH" "1" "May 2014" "" ""
+.TH "NPM\-PUBLISH" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-publish\fR \-\- Publish a package
diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1
index 7dda41232..5fc945b5a 100644
--- a/deps/npm/man/man1/npm-rebuild.1
+++ b/deps/npm/man/man1/npm-rebuild.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-REBUILD" "1" "May 2014" "" ""
+.TH "NPM\-REBUILD" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-rebuild\fR \-\- Rebuild a package
diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1
index e79f8826a..066321316 100644
--- a/deps/npm/man/man1/npm-repo.1
+++ b/deps/npm/man/man1/npm-repo.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-REPO" "1" "May 2014" "" ""
+.TH "NPM\-REPO" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-repo\fR \-\- Open package repository page in the browser
diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1
index d7ebaf7c0..5e3bfeafb 100644
--- a/deps/npm/man/man1/npm-restart.1
+++ b/deps/npm/man/man1/npm-restart.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-RESTART" "1" "May 2014" "" ""
+.TH "NPM\-RESTART" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-restart\fR \-\- Start a package
diff --git a/deps/npm/man/man1/npm-rm.1 b/deps/npm/man/man1/npm-rm.1
index a41689777..cdde04137 100644
--- a/deps/npm/man/man1/npm-rm.1
+++ b/deps/npm/man/man1/npm-rm.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-RM" "1" "May 2014" "" ""
+.TH "NPM\-RM" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-rm\fR \-\- Remove a package
diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1
index ec6a2391b..12da90c85 100644
--- a/deps/npm/man/man1/npm-root.1
+++ b/deps/npm/man/man1/npm-root.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-ROOT" "1" "May 2014" "" ""
+.TH "NPM\-ROOT" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-root\fR \-\- Display npm root
diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1
index c350d9f19..fce151536 100644
--- a/deps/npm/man/man1/npm-run-script.1
+++ b/deps/npm/man/man1/npm-run-script.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-RUN\-SCRIPT" "1" "May 2014" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-run-script\fR \-\- Run arbitrary package scripts
@@ -10,6 +10,7 @@
.
.nf
npm run\-script [<pkg>] [command]
+npm run [<pkg>] [command]
.
.fi
.
diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1
index 1680fc327..9fc78f267 100644
--- a/deps/npm/man/man1/npm-search.1
+++ b/deps/npm/man/man1/npm-search.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SEARCH" "1" "May 2014" "" ""
+.TH "NPM\-SEARCH" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-search\fR \-\- Search for packages
diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1
index 1c646b4d6..117606169 100644
--- a/deps/npm/man/man1/npm-shrinkwrap.1
+++ b/deps/npm/man/man1/npm-shrinkwrap.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SHRINKWRAP" "1" "May 2014" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-shrinkwrap\fR \-\- Lock down dependency versions
diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1
index caa723e74..efcf75b07 100644
--- a/deps/npm/man/man1/npm-star.1
+++ b/deps/npm/man/man1/npm-star.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-STAR" "1" "May 2014" "" ""
+.TH "NPM\-STAR" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-star\fR \-\- Mark your favorite packages
diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1
index 2daacdf6c..651773854 100644
--- a/deps/npm/man/man1/npm-stars.1
+++ b/deps/npm/man/man1/npm-stars.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-STARS" "1" "May 2014" "" ""
+.TH "NPM\-STARS" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-stars\fR \-\- View packages marked as favorites
diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1
index d8c525d5b..bf2c7a738 100644
--- a/deps/npm/man/man1/npm-start.1
+++ b/deps/npm/man/man1/npm-start.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-START" "1" "May 2014" "" ""
+.TH "NPM\-START" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-start\fR \-\- Start a package
diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1
index 0f0a28d53..f921547fc 100644
--- a/deps/npm/man/man1/npm-stop.1
+++ b/deps/npm/man/man1/npm-stop.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-STOP" "1" "May 2014" "" ""
+.TH "NPM\-STOP" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-stop\fR \-\- Stop a package
diff --git a/deps/npm/man/man1/npm-submodule.1 b/deps/npm/man/man1/npm-submodule.1
index f3385e1d5..588b1f0b2 100644
--- a/deps/npm/man/man1/npm-submodule.1
+++ b/deps/npm/man/man1/npm-submodule.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SUBMODULE" "1" "May 2014" "" ""
+.TH "NPM\-SUBMODULE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-submodule\fR \-\- Add a package as a git submodule
diff --git a/deps/npm/man/man1/npm-tag.1 b/deps/npm/man/man1/npm-tag.1
index d58047064..823e5477e 100644
--- a/deps/npm/man/man1/npm-tag.1
+++ b/deps/npm/man/man1/npm-tag.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-TAG" "1" "May 2014" "" ""
+.TH "NPM\-TAG" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-tag\fR \-\- Tag a published version
diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1
index 85d7d3681..35b6279c6 100644
--- a/deps/npm/man/man1/npm-test.1
+++ b/deps/npm/man/man1/npm-test.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-TEST" "1" "May 2014" "" ""
+.TH "NPM\-TEST" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-test\fR \-\- Test a package
diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1
index 3fbee0242..688d42500 100644
--- a/deps/npm/man/man1/npm-uninstall.1
+++ b/deps/npm/man/man1/npm-uninstall.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-RM" "1" "May 2014" "" ""
+.TH "NPM\-RM" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-rm\fR \-\- Remove a package
diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1
index 1d98b1be7..691e1fa4a 100644
--- a/deps/npm/man/man1/npm-unpublish.1
+++ b/deps/npm/man/man1/npm-unpublish.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-UNPUBLISH" "1" "May 2014" "" ""
+.TH "NPM\-UNPUBLISH" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-unpublish\fR \-\- Remove a package from the registry
diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1
index 949bae254..f1856b80f 100644
--- a/deps/npm/man/man1/npm-update.1
+++ b/deps/npm/man/man1/npm-update.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-UPDATE" "1" "May 2014" "" ""
+.TH "NPM\-UPDATE" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-update\fR \-\- Update a package
diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1
index d2ae8a0ff..0aeea2a92 100644
--- a/deps/npm/man/man1/npm-version.1
+++ b/deps/npm/man/man1/npm-version.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-VERSION" "1" "May 2014" "" ""
+.TH "NPM\-VERSION" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-version\fR \-\- Bump a package version
diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1
index 8083dda68..de1b11a7b 100644
--- a/deps/npm/man/man1/npm-view.1
+++ b/deps/npm/man/man1/npm-view.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-VIEW" "1" "May 2014" "" ""
+.TH "NPM\-VIEW" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-view\fR \-\- View registry info
diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1
index f3f82701b..821e5cc78 100644
--- a/deps/npm/man/man1/npm-whoami.1
+++ b/deps/npm/man/man1/npm-whoami.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-WHOAMI" "1" "May 2014" "" ""
+.TH "NPM\-WHOAMI" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-whoami\fR \-\- Display npm username
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index dd60a59ae..7e941b866 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM" "1" "May 2014" "" ""
+.TH "NPM" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm\fR \-\- node package manager
@@ -14,7 +14,7 @@ npm <command> [args]
.fi
.
.SH "VERSION"
-1.4.10
+1.4.14
.
.SH "DESCRIPTION"
npm is the package manager for the Node JavaScript platform\. It puts
@@ -39,6 +39,20 @@ npm help Use \fBnpm install blerg\fR to install the latest version of "blerg"\.
Use the \fBnpm search\fR command to show everything that\'s available\.
Use \fBnpm ls\fR to show everything you\'ve installed\.
.
+.SH "DEPENDENCIES"
+If a package references to another package with a git URL, npm depends
+on a preinstalled git\.
+.
+.P
+If one of the packages npm tries to install is a native node module and
+requires compiling of C++ Code, npm will use node\-gyp \fIhttps://github\.com/TooTallNate/node\-gyp\fR for that task\.
+For a Unix system, node\-gyp \fIhttps://github\.com/TooTallNate/node\-gyp\fR
+needs Python, make and a buildchain like GCC\. On Windows,
+Python and Microsoft Visual Studio C++ is needed\. Python 3 is
+not supported by node\-gyp \fIhttps://github\.com/TooTallNate/node\-gyp\fR\|\.
+For more information visit the node\-gyp repository \fIhttps://github\.com/TooTallNate/node\-gyp\fR and
+the node\-gyp Wiki \fIhttps://github\.com/TooTallNate/node\-gyp/wiki\fR\|\.
+.
.SH "DIRECTORIES"
npm help See \fBnpm\-folders\fR to learn about where npm puts stuff\.
.
diff --git a/deps/npm/man/man3/npm-bin.3 b/deps/npm/man/man3/npm-bin.3
index 7a15705f2..15a0f715d 100644
--- a/deps/npm/man/man3/npm-bin.3
+++ b/deps/npm/man/man3/npm-bin.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-BIN" "3" "May 2014" "" ""
+.TH "NPM\-BIN" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-bin\fR \-\- Display npm bin folder
diff --git a/deps/npm/man/man3/npm-bugs.3 b/deps/npm/man/man3/npm-bugs.3
index 97b1440f3..98d56039d 100644
--- a/deps/npm/man/man3/npm-bugs.3
+++ b/deps/npm/man/man3/npm-bugs.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-BUGS" "3" "May 2014" "" ""
+.TH "NPM\-BUGS" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
diff --git a/deps/npm/man/man3/npm-cache.3 b/deps/npm/man/man3/npm-cache.3
new file mode 100644
index 000000000..efee67947
--- /dev/null
+++ b/deps/npm/man/man3/npm-cache.3
@@ -0,0 +1,40 @@
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-CACHE" "3" "June 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-cache\fR \-\- manage the npm cache programmatically
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.cache([args], callback)
+// helpers
+npm\.commands\.cache\.clean([args], callback)
+npm\.commands\.cache\.add([args], callback)
+npm\.commands\.cache\.read(name, version, forceBypass, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+npm help This acts much the same ways as the npm\-cache command line
+functionality\.
+.
+.P
+The callback is called with the package\.json data of the thing that is
+eventually added to or read from the cache\.
+.
+.P
+The top level \fBnpm\.commands\.cache(\.\.\.)\fR functionality is a public
+interface, and like all commands on the \fBnpm\.commands\fR object, it will
+match the command line behavior exactly\.
+.
+.P
+However, the cache folder structure and the cache helper functions are
+considered \fBinternal\fR API surface, and as such, may change in future
+releases of npm, potentially without warning or significant version
+incrementation\.
+.
+.P
+Use at your own risk\.
diff --git a/deps/npm/man/man3/npm-commands.3 b/deps/npm/man/man3/npm-commands.3
index 0f3fa8668..494139a16 100644
--- a/deps/npm/man/man3/npm-commands.3
+++ b/deps/npm/man/man3/npm-commands.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-COMMANDS" "3" "May 2014" "" ""
+.TH "NPM\-COMMANDS" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-commands\fR \-\- npm commands
diff --git a/deps/npm/man/man3/npm-config.3 b/deps/npm/man/man3/npm-config.3
index 818a6e4bd..8389e543e 100644
--- a/deps/npm/man/man3/npm-config.3
+++ b/deps/npm/man/man3/npm-config.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-CONFIG" "3" "May 2014" "" ""
+.TH "NPM\-CONFIG" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-config\fR \-\- Manage the npm configuration files
diff --git a/deps/npm/man/man3/npm-deprecate.3 b/deps/npm/man/man3/npm-deprecate.3
index 72dd86c46..30e3318bc 100644
--- a/deps/npm/man/man3/npm-deprecate.3
+++ b/deps/npm/man/man3/npm-deprecate.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DEPRECATE" "3" "May 2014" "" ""
+.TH "NPM\-DEPRECATE" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-deprecate\fR \-\- Deprecate a version of a package
diff --git a/deps/npm/man/man3/npm-docs.3 b/deps/npm/man/man3/npm-docs.3
index f476f754c..8061baf8c 100644
--- a/deps/npm/man/man3/npm-docs.3
+++ b/deps/npm/man/man3/npm-docs.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DOCS" "3" "May 2014" "" ""
+.TH "NPM\-DOCS" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
diff --git a/deps/npm/man/man3/npm-edit.3 b/deps/npm/man/man3/npm-edit.3
index 646676109..b7d3f657b 100644
--- a/deps/npm/man/man3/npm-edit.3
+++ b/deps/npm/man/man3/npm-edit.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-EDIT" "3" "May 2014" "" ""
+.TH "NPM\-EDIT" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-edit\fR \-\- Edit an installed package
diff --git a/deps/npm/man/man3/npm-explore.3 b/deps/npm/man/man3/npm-explore.3
index 61441abea..60187503e 100644
--- a/deps/npm/man/man3/npm-explore.3
+++ b/deps/npm/man/man3/npm-explore.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-EXPLORE" "3" "May 2014" "" ""
+.TH "NPM\-EXPLORE" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-explore\fR \-\- Browse an installed package
diff --git a/deps/npm/man/man3/npm-help-search.3 b/deps/npm/man/man3/npm-help-search.3
index ef5893b85..febd3391b 100644
--- a/deps/npm/man/man3/npm-help-search.3
+++ b/deps/npm/man/man3/npm-help-search.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-HELP\-SEARCH" "3" "May 2014" "" ""
+.TH "NPM\-HELP\-SEARCH" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-help-search\fR \-\- Search the help pages
diff --git a/deps/npm/man/man3/npm-init.3 b/deps/npm/man/man3/npm-init.3
index 528002af1..0a66df109 100644
--- a/deps/npm/man/man3/npm-init.3
+++ b/deps/npm/man/man3/npm-init.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "INIT" "3" "May 2014" "" ""
+.TH "INIT" "3" "June 2014" "" ""
.
.SH "NAME"
\fBinit\fR \-\- Interactively create a package\.json file
diff --git a/deps/npm/man/man3/npm-install.3 b/deps/npm/man/man3/npm-install.3
index 90b708902..16964560a 100644
--- a/deps/npm/man/man3/npm-install.3
+++ b/deps/npm/man/man3/npm-install.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-INSTALL" "3" "May 2014" "" ""
+.TH "NPM\-INSTALL" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-install\fR \-\- install a package programmatically
diff --git a/deps/npm/man/man3/npm-link.3 b/deps/npm/man/man3/npm-link.3
index 28d418cc1..521b7c992 100644
--- a/deps/npm/man/man3/npm-link.3
+++ b/deps/npm/man/man3/npm-link.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-LINK" "3" "May 2014" "" ""
+.TH "NPM\-LINK" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-link\fR \-\- Symlink a package folder
diff --git a/deps/npm/man/man3/npm-load.3 b/deps/npm/man/man3/npm-load.3
index 5de64de6a..8e871ee93 100644
--- a/deps/npm/man/man3/npm-load.3
+++ b/deps/npm/man/man3/npm-load.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-LOAD" "3" "May 2014" "" ""
+.TH "NPM\-LOAD" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-load\fR \-\- Load config settings
diff --git a/deps/npm/man/man3/npm-ls.3 b/deps/npm/man/man3/npm-ls.3
index 30d8f0a78..2c68f6a2c 100644
--- a/deps/npm/man/man3/npm-ls.3
+++ b/deps/npm/man/man3/npm-ls.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-LS" "3" "May 2014" "" ""
+.TH "NPM\-LS" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-ls\fR \-\- List installed packages
diff --git a/deps/npm/man/man3/npm-outdated.3 b/deps/npm/man/man3/npm-outdated.3
index 59c0a2491..f9a763585 100644
--- a/deps/npm/man/man3/npm-outdated.3
+++ b/deps/npm/man/man3/npm-outdated.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-OUTDATED" "3" "May 2014" "" ""
+.TH "NPM\-OUTDATED" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-outdated\fR \-\- Check for outdated packages
diff --git a/deps/npm/man/man3/npm-owner.3 b/deps/npm/man/man3/npm-owner.3
index fb7c622c4..e42ebfa91 100644
--- a/deps/npm/man/man3/npm-owner.3
+++ b/deps/npm/man/man3/npm-owner.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-OWNER" "3" "May 2014" "" ""
+.TH "NPM\-OWNER" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-owner\fR \-\- Manage package owners
diff --git a/deps/npm/man/man3/npm-pack.3 b/deps/npm/man/man3/npm-pack.3
index 3ab49a2bf..1384be5ff 100644
--- a/deps/npm/man/man3/npm-pack.3
+++ b/deps/npm/man/man3/npm-pack.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PACK" "3" "May 2014" "" ""
+.TH "NPM\-PACK" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-pack\fR \-\- Create a tarball from a package
diff --git a/deps/npm/man/man3/npm-prefix.3 b/deps/npm/man/man3/npm-prefix.3
index 72676148c..e10480e9e 100644
--- a/deps/npm/man/man3/npm-prefix.3
+++ b/deps/npm/man/man3/npm-prefix.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PREFIX" "3" "May 2014" "" ""
+.TH "NPM\-PREFIX" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-prefix\fR \-\- Display prefix
diff --git a/deps/npm/man/man3/npm-prune.3 b/deps/npm/man/man3/npm-prune.3
index 948b4d2b3..cde69a393 100644
--- a/deps/npm/man/man3/npm-prune.3
+++ b/deps/npm/man/man3/npm-prune.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PRUNE" "3" "May 2014" "" ""
+.TH "NPM\-PRUNE" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-prune\fR \-\- Remove extraneous packages
diff --git a/deps/npm/man/man3/npm-publish.3 b/deps/npm/man/man3/npm-publish.3
index 01c2d1b43..139414a8f 100644
--- a/deps/npm/man/man3/npm-publish.3
+++ b/deps/npm/man/man3/npm-publish.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-PUBLISH" "3" "May 2014" "" ""
+.TH "NPM\-PUBLISH" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-publish\fR \-\- Publish a package
diff --git a/deps/npm/man/man3/npm-rebuild.3 b/deps/npm/man/man3/npm-rebuild.3
index 86fcca546..8fede0d36 100644
--- a/deps/npm/man/man3/npm-rebuild.3
+++ b/deps/npm/man/man3/npm-rebuild.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-REBUILD" "3" "May 2014" "" ""
+.TH "NPM\-REBUILD" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-rebuild\fR \-\- Rebuild a package
diff --git a/deps/npm/man/man3/npm-repo.3 b/deps/npm/man/man3/npm-repo.3
index 161b213a2..65daa6bf9 100644
--- a/deps/npm/man/man3/npm-repo.3
+++ b/deps/npm/man/man3/npm-repo.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-REPO" "3" "May 2014" "" ""
+.TH "NPM\-REPO" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-repo\fR \-\- Open package repository page in the browser
diff --git a/deps/npm/man/man3/npm-restart.3 b/deps/npm/man/man3/npm-restart.3
index d51ee54ad..699e1cec6 100644
--- a/deps/npm/man/man3/npm-restart.3
+++ b/deps/npm/man/man3/npm-restart.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-RESTART" "3" "May 2014" "" ""
+.TH "NPM\-RESTART" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-restart\fR \-\- Start a package
diff --git a/deps/npm/man/man3/npm-root.3 b/deps/npm/man/man3/npm-root.3
index a7ae76d7d..1f3f4fef0 100644
--- a/deps/npm/man/man3/npm-root.3
+++ b/deps/npm/man/man3/npm-root.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-ROOT" "3" "May 2014" "" ""
+.TH "NPM\-ROOT" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-root\fR \-\- Display npm root
diff --git a/deps/npm/man/man3/npm-run-script.3 b/deps/npm/man/man3/npm-run-script.3
index 24aec93ef..44919b788 100644
--- a/deps/npm/man/man3/npm-run-script.3
+++ b/deps/npm/man/man3/npm-run-script.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-RUN\-SCRIPT" "3" "May 2014" "" ""
+.TH "NPM\-RUN\-SCRIPT" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-run-script\fR \-\- Run arbitrary package scripts
diff --git a/deps/npm/man/man3/npm-search.3 b/deps/npm/man/man3/npm-search.3
index 90b57e189..54278ceb0 100644
--- a/deps/npm/man/man3/npm-search.3
+++ b/deps/npm/man/man3/npm-search.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SEARCH" "3" "May 2014" "" ""
+.TH "NPM\-SEARCH" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-search\fR \-\- Search for packages
diff --git a/deps/npm/man/man3/npm-shrinkwrap.3 b/deps/npm/man/man3/npm-shrinkwrap.3
index d82fa004c..8d26fd0f8 100644
--- a/deps/npm/man/man3/npm-shrinkwrap.3
+++ b/deps/npm/man/man3/npm-shrinkwrap.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SHRINKWRAP" "3" "May 2014" "" ""
+.TH "NPM\-SHRINKWRAP" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file
diff --git a/deps/npm/man/man3/npm-start.3 b/deps/npm/man/man3/npm-start.3
index cddc6836a..748f13a80 100644
--- a/deps/npm/man/man3/npm-start.3
+++ b/deps/npm/man/man3/npm-start.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-START" "3" "May 2014" "" ""
+.TH "NPM\-START" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-start\fR \-\- Start a package
diff --git a/deps/npm/man/man3/npm-stop.3 b/deps/npm/man/man3/npm-stop.3
index ff52fb917..7929b7d4f 100644
--- a/deps/npm/man/man3/npm-stop.3
+++ b/deps/npm/man/man3/npm-stop.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-STOP" "3" "May 2014" "" ""
+.TH "NPM\-STOP" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-stop\fR \-\- Stop a package
diff --git a/deps/npm/man/man3/npm-submodule.3 b/deps/npm/man/man3/npm-submodule.3
index b28915bdb..cf48a8d40 100644
--- a/deps/npm/man/man3/npm-submodule.3
+++ b/deps/npm/man/man3/npm-submodule.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SUBMODULE" "3" "May 2014" "" ""
+.TH "NPM\-SUBMODULE" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-submodule\fR \-\- Add a package as a git submodule
diff --git a/deps/npm/man/man3/npm-tag.3 b/deps/npm/man/man3/npm-tag.3
index 0f56e71be..c7df2e2d8 100644
--- a/deps/npm/man/man3/npm-tag.3
+++ b/deps/npm/man/man3/npm-tag.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-TAG" "3" "May 2014" "" ""
+.TH "NPM\-TAG" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-tag\fR \-\- Tag a published version
diff --git a/deps/npm/man/man3/npm-test.3 b/deps/npm/man/man3/npm-test.3
index 826582ecf..6b580a565 100644
--- a/deps/npm/man/man3/npm-test.3
+++ b/deps/npm/man/man3/npm-test.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-TEST" "3" "May 2014" "" ""
+.TH "NPM\-TEST" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-test\fR \-\- Test a package
diff --git a/deps/npm/man/man3/npm-uninstall.3 b/deps/npm/man/man3/npm-uninstall.3
index 964791ab0..9b65ca709 100644
--- a/deps/npm/man/man3/npm-uninstall.3
+++ b/deps/npm/man/man3/npm-uninstall.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-UNINSTALL" "3" "May 2014" "" ""
+.TH "NPM\-UNINSTALL" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-uninstall\fR \-\- uninstall a package programmatically
diff --git a/deps/npm/man/man3/npm-unpublish.3 b/deps/npm/man/man3/npm-unpublish.3
index 00711d492..de593b380 100644
--- a/deps/npm/man/man3/npm-unpublish.3
+++ b/deps/npm/man/man3/npm-unpublish.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-UNPUBLISH" "3" "May 2014" "" ""
+.TH "NPM\-UNPUBLISH" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-unpublish\fR \-\- Remove a package from the registry
diff --git a/deps/npm/man/man3/npm-update.3 b/deps/npm/man/man3/npm-update.3
index fccf96f3a..98a0cdd13 100644
--- a/deps/npm/man/man3/npm-update.3
+++ b/deps/npm/man/man3/npm-update.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-UPDATE" "3" "May 2014" "" ""
+.TH "NPM\-UPDATE" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-update\fR \-\- Update a package
diff --git a/deps/npm/man/man3/npm-version.3 b/deps/npm/man/man3/npm-version.3
index 757a2d11d..1e23051f3 100644
--- a/deps/npm/man/man3/npm-version.3
+++ b/deps/npm/man/man3/npm-version.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-VERSION" "3" "May 2014" "" ""
+.TH "NPM\-VERSION" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-version\fR \-\- Bump a package version
diff --git a/deps/npm/man/man3/npm-view.3 b/deps/npm/man/man3/npm-view.3
index d5c9e8017..9aaffd57a 100644
--- a/deps/npm/man/man3/npm-view.3
+++ b/deps/npm/man/man3/npm-view.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-VIEW" "3" "May 2014" "" ""
+.TH "NPM\-VIEW" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-view\fR \-\- View registry info
diff --git a/deps/npm/man/man3/npm-whoami.3 b/deps/npm/man/man3/npm-whoami.3
index c24fae9f4..117a1fc86 100644
--- a/deps/npm/man/man3/npm-whoami.3
+++ b/deps/npm/man/man3/npm-whoami.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-WHOAMI" "3" "May 2014" "" ""
+.TH "NPM\-WHOAMI" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-whoami\fR \-\- Display npm username
diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3
index d7f2ad3c8..dfb77f665 100644
--- a/deps/npm/man/man3/npm.3
+++ b/deps/npm/man/man3/npm.3
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM" "3" "May 2014" "" ""
+.TH "NPM" "3" "June 2014" "" ""
.
.SH "NAME"
\fBnpm\fR \-\- node package manager
@@ -21,7 +21,7 @@ npm\.load([configObject, ]function (er, npm) {
.fi
.
.SH "VERSION"
-1.4.10
+1.4.14
.
.SH "DESCRIPTION"
This is the API documentation for npm\.
diff --git a/deps/npm/man/man5/npm-folders.5 b/deps/npm/man/man5/npm-folders.5
index 982b0bc63..63aff6617 100644
--- a/deps/npm/man/man5/npm-folders.5
+++ b/deps/npm/man/man5/npm-folders.5
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-FOLDERS" "5" "May 2014" "" ""
+.TH "NPM\-FOLDERS" "5" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-folders\fR \-\- Folder Structures Used by npm
diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5
index 982b0bc63..63aff6617 100644
--- a/deps/npm/man/man5/npm-global.5
+++ b/deps/npm/man/man5/npm-global.5
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-FOLDERS" "5" "May 2014" "" ""
+.TH "NPM\-FOLDERS" "5" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-folders\fR \-\- Folder Structures Used by npm
diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5
index 89083280d..73ec3c3fa 100644
--- a/deps/npm/man/man5/npm-json.5
+++ b/deps/npm/man/man5/npm-json.5
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "PACKAGE\.JSON" "5" "May 2014" "" ""
+.TH "PACKAGE\.JSON" "5" "June 2014" "" ""
.
.SH "NAME"
\fBpackage.json\fR \-\- Specifics of npm\'s package\.json handling
diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5
index 6ee6df6c7..aea7e7569 100644
--- a/deps/npm/man/man5/npmrc.5
+++ b/deps/npm/man/man5/npmrc.5
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPMRC" "5" "May 2014" "" ""
+.TH "NPMRC" "5" "June 2014" "" ""
.
.SH "NAME"
\fBnpmrc\fR \-\- The npm config files
@@ -18,7 +18,10 @@ of the user and global npmrc files\.
npm help For a list of available configuration options, see npm\-config\.
.
.SH "FILES"
-The three relevant files are:
+The four relevant files are:
+.
+.IP "\(bu" 4
+per\-project config file (/path/to/my/project/\.npmrc)
.
.IP "\(bu" 4
per\-user config file (~/\.npmrc)
@@ -49,6 +52,17 @@ Each of these files is loaded, and config options are resolved in
priority order\. For example, a setting in the userconfig file would
override the setting in the globalconfig file\.
.
+.SS "Per\-project config file"
+When working locally in a project, a \fB\|\.npmrc\fR file in the root of the
+project (ie, a sibling of \fBnode_modules\fR and \fBpackage\.json\fR) will set
+config values specific to this project\.
+.
+.P
+Note that this only applies to the root of the project that you\'re
+running npm in\. It has no effect when your module is published\. For
+example, you can\'t publish a module that forces itself to install
+globally, or in a different location\.
+.
.SS "Per\-user config file"
\fB$HOME/\.npmrc\fR (or the \fBuserconfig\fR param, if set in the environment
or on the command line)
diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5
index 89083280d..73ec3c3fa 100644
--- a/deps/npm/man/man5/package.json.5
+++ b/deps/npm/man/man5/package.json.5
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "PACKAGE\.JSON" "5" "May 2014" "" ""
+.TH "PACKAGE\.JSON" "5" "June 2014" "" ""
.
.SH "NAME"
\fBpackage.json\fR \-\- Specifics of npm\'s package\.json handling
diff --git a/deps/npm/man/man7/npm-coding-style.7 b/deps/npm/man/man7/npm-coding-style.7
index 5014ba53c..863ec301c 100644
--- a/deps/npm/man/man7/npm-coding-style.7
+++ b/deps/npm/man/man7/npm-coding-style.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-CODING\-STYLE" "7" "May 2014" "" ""
+.TH "NPM\-CODING\-STYLE" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-coding-style\fR \-\- npm\'s "funny" coding style
diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7
index 6c96048d8..cdf5761dd 100644
--- a/deps/npm/man/man7/npm-config.7
+++ b/deps/npm/man/man7/npm-config.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-CONFIG" "7" "May 2014" "" ""
+.TH "NPM\-CONFIG" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-config\fR \-\- More than you probably want to know about npm configuration
@@ -24,7 +24,10 @@ values are case\-insensitive, so \fBNPM_CONFIG_FOO=bar\fR will work the
same\.
.
.SS "npmrc Files"
-The three relevant files are:
+The four relevant files are:
+.
+.IP "\(bu" 4
+per\-project config file (/path/to/my/project/\.npmrc)
.
.IP "\(bu" 4
per\-user config file (~/\.npmrc)
@@ -1248,6 +1251,24 @@ using \fB\-s\fR to add a signature\.
Note that git requires you to have set up GPG keys in your git configs
for this to work properly\.
.
+.SS "spin"
+.
+.IP "\(bu" 4
+Default: true
+.
+.IP "\(bu" 4
+Type: Boolean or \fB"always"\fR
+.
+.IP "" 0
+.
+.P
+When set to \fBtrue\fR, npm will display an ascii spinner while it is doing
+things, if \fBprocess\.stderr\fR is a TTY\.
+.
+.P
+Set to \fBfalse\fR to suppress the spinner, or set to \fBalways\fR to output
+the spinner even for non\-TTY outputs\.
+.
.SS "strict\-ssl"
.
.IP "\(bu" 4
diff --git a/deps/npm/man/man7/npm-developers.7 b/deps/npm/man/man7/npm-developers.7
index 1122e23af..70fbb46af 100644
--- a/deps/npm/man/man7/npm-developers.7
+++ b/deps/npm/man/man7/npm-developers.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DEVELOPERS" "7" "May 2014" "" ""
+.TH "NPM\-DEVELOPERS" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-developers\fR \-\- Developer Guide
diff --git a/deps/npm/man/man7/npm-disputes.7 b/deps/npm/man/man7/npm-disputes.7
index 942d530bb..abcb426cb 100644
--- a/deps/npm/man/man7/npm-disputes.7
+++ b/deps/npm/man/man7/npm-disputes.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-DISPUTES" "7" "May 2014" "" ""
+.TH "NPM\-DISPUTES" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-disputes\fR \-\- Handling Module Name Disputes
diff --git a/deps/npm/man/man7/npm-faq.7 b/deps/npm/man/man7/npm-faq.7
index c84a06d37..f15f24ef9 100644
--- a/deps/npm/man/man7/npm-faq.7
+++ b/deps/npm/man/man7/npm-faq.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-FAQ" "7" "May 2014" "" ""
+.TH "NPM\-FAQ" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-faq\fR \-\- Frequently Asked Questions
@@ -340,7 +340,7 @@ change it again? npm doesn\'t currently track any state about past
configuration settings, so this would be rather difficult to do
properly\. It would have to track every previous value for this
config, and always accept any of them, or else yesterday\'s install may
-be broken tomorrow\. Complexity hurdle #5\.
+be broken tomorrow\. Complexity hurdle #4\.
.
.P
Never going to happen\. The folder is named \fBnode_modules\fR\|\. It is
@@ -436,7 +436,7 @@ contributed to it, some of them quite substantially\.
.P
The npm open source project, The npm Registry, and the community
website \fIhttps://www\.npmjs\.org\fR are maintained and operated by the
-good folks at npm, Inc\. \fIhttps://www\.npmjs\.com\fR
+good folks at npm, Inc\. \fIhttp://www\.npmjs\.com\fR
.
.SH "I have a question or request not addressed here\. Where should I put it?"
Post an issue on the github project:
diff --git a/deps/npm/man/man7/npm-index.7 b/deps/npm/man/man7/npm-index.7
index 576a047d3..87d730849 100644
--- a/deps/npm/man/man7/npm-index.7
+++ b/deps/npm/man/man7/npm-index.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-INDEX" "7" "May 2014" "" ""
+.TH "NPM\-INDEX" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-index\fR \-\- Index of all npm documentation
@@ -159,6 +159,9 @@ Display npm bin folder
npm apihelp .SH "npm\-bugs"
Bugs for a package in a web browser maybe
.
+npm apihelp .SH "npm\-cache"
+manage the npm cache programmatically
+.
npm apihelp .SH "npm\-commands"
npm commands
.
diff --git a/deps/npm/man/man7/npm-registry.7 b/deps/npm/man/man7/npm-registry.7
index a6f4e7367..09163fbc4 100644
--- a/deps/npm/man/man7/npm-registry.7
+++ b/deps/npm/man/man7/npm-registry.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-REGISTRY" "7" "May 2014" "" ""
+.TH "NPM\-REGISTRY" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-registry\fR \-\- The JavaScript Package Registry
diff --git a/deps/npm/man/man7/npm-scripts.7 b/deps/npm/man/man7/npm-scripts.7
index 10f83192f..03c5a5229 100644
--- a/deps/npm/man/man7/npm-scripts.7
+++ b/deps/npm/man/man7/npm-scripts.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-SCRIPTS" "7" "May 2014" "" ""
+.TH "NPM\-SCRIPTS" "7" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-scripts\fR \-\- How npm handles the "scripts" field
@@ -63,7 +63,7 @@ stop and start scripts if no \fBrestart\fR script is provided\.
.IP "" 0
.
.P
-Additionally, arbitrary scripts can be run by doing \fBnpm run\-script <stage> <pkg>\fR\|\.
+Additionally, arbitrary scripts can be run by doing \fBnpm run\-script <pkg> <stage>\fR\|\.
.
.SH "NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN"
\fBtl;dr\fR Don\'t use \fBinstall\fR\|\. Use a \fB\|\.gyp\fR file for compilation, and \fBprepublish\fR for anything else\.
diff --git a/deps/npm/man/man7/removing-npm.7 b/deps/npm/man/man7/removing-npm.7
index 1ae454573..b73ed56af 100644
--- a/deps/npm/man/man7/removing-npm.7
+++ b/deps/npm/man/man7/removing-npm.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "NPM\-REMOVAL" "1" "May 2014" "" ""
+.TH "NPM\-REMOVAL" "1" "June 2014" "" ""
.
.SH "NAME"
\fBnpm-removal\fR \-\- Cleaning the Slate
diff --git a/deps/npm/man/man7/semver.7 b/deps/npm/man/man7/semver.7
index 6f7ebf1dd..662b9c8f2 100644
--- a/deps/npm/man/man7/semver.7
+++ b/deps/npm/man/man7/semver.7
@@ -1,7 +1,7 @@
.\" Generated with Ronnjs 0.3.8
.\" http://github.com/kapouer/ronnjs/
.
-.TH "SEMVER" "7" "May 2014" "" ""
+.TH "SEMVER" "7" "June 2014" "" ""
.
.SH "NAME"
\fBsemver\fR \-\- The semantic versioner for npm
@@ -43,7 +43,7 @@ multiple versions to the utility will just sort them\.
.IP "" 0
.
.SH "Versions"
-A "version" is described by the v2\.0\.0 specification found at \fIhttp://semver\.org/\fR\|\.
+A "version" is described by the \fBv2\.0\.0\fR specification found at \fIhttp://semver\.org/\fR\|\.
.
.P
A leading \fB"="\fR or \fB"v"\fR character is stripped off and ignored\.
@@ -52,9 +52,10 @@ A leading \fB"="\fR or \fB"v"\fR character is stripped off and ignored\.
The following range styles are supported:
.
.IP "\(bu" 4
-\fB1\.2\.3\fR A specific version\. When nothing else will do\. Note that
-build metadata is still ignored, so \fB1\.2\.3+build2012\fR will satisfy
-this range\.
+\fB1\.2\.3\fR 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 \fB1\.2\.3+build2012\fR will
+satisfy this range\.
.
.IP "\(bu" 4
\fB>1\.2\.3\fR Greater than a specific version\.
@@ -77,44 +78,65 @@ ARE allowed, so \fB1\.2\.3\-beta\fR would satisfy\.
\fB1\.2\.3 \- 2\.3\.4\fR := \fB>=1\.2\.3 <=2\.3\.4\fR
.
.IP "\(bu" 4
-\fB~1\.2\.3\fR := \fB>=1\.2\.3\-0 <1\.3\.0\-0\fR "Reasonably close to 1\.2\.3"\. When
+\fB~1\.2\.3\fR := \fB>=1\.2\.3\-0 <1\.3\.0\-0\fR "Reasonably close to \fB1\.2\.3\fR"\. When
using tilde operators, prerelease versions are supported as well,
but a prerelease of the next significant digit will NOT be
satisfactory, so \fB1\.3\.0\-beta\fR will not satisfy \fB~1\.2\.3\fR\|\.
.
.IP "\(bu" 4
-\fB^1\.2\.3\fR := \fB>=1\.2\.3\-0 <2\.0\.0\-0\fR "Compatible with 1\.2\.3"\. When
+\fB^1\.2\.3\fR := \fB>=1\.2\.3\-0 <2\.0\.0\-0\fR "Compatible with \fB1\.2\.3\fR"\. 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)\. \fB1\.5\.1\fR will satisfy \fB^1\.2\.3\fR,
while \fB1\.2\.2\fR and \fB2\.0\.0\-beta\fR will not\.
.
.IP "\(bu" 4
-\fB^0\.1\.3\fR := \fB>=0\.1\.3\-0 <0\.2\.0\-0\fR "Compatible with 0\.1\.3"\. 0\.x\.x versions are
+\fB^0\.1\.3\fR := \fB>=0\.1\.3\-0 <0\.2\.0\-0\fR "Compatible with \fB0\.1\.3\fR"\. \fB0\.x\.x\fR 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\.
.
.IP "\(bu" 4
-\fB^0\.0\.2\fR := \fB=0\.0\.2\fR "Only the version 0\.0\.2 is considered compatible"
+\fB^0\.0\.2\fR := \fB=0\.0\.2\fR "Only the version \fB0\.0\.2\fR is considered compatible"
.
.IP "\(bu" 4
-\fB~1\.2\fR := \fB>=1\.2\.0\-0 <1\.3\.0\-0\fR "Any version starting with 1\.2"
+\fB~1\.2\fR := \fB>=1\.2\.0\-0 <1\.3\.0\-0\fR "Any version starting with \fB1\.2\fR"
.
.IP "\(bu" 4
-\fB^1\.2\fR := \fB>=1\.2\.0\-0 <2\.0\.0\-0\fR "Any version compatible with 1\.2"
+\fB^1\.2\fR := \fB>=1\.2\.0\-0 <2\.0\.0\-0\fR "Any version compatible with \fB1\.2\fR"
.
.IP "\(bu" 4
-\fB1\.2\.x\fR := \fB>=1\.2\.0\-0 <1\.3\.0\-0\fR "Any version starting with 1\.2"
+\fB1\.2\.x\fR := \fB>=1\.2\.0\-0 <1\.3\.0\-0\fR "Any version starting with \fB1\.2\fR"
.
.IP "\(bu" 4
-\fB~1\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version starting with 1"
+\fB1\.2\.*\fR Same as \fB1\.2\.x\fR\|\.
.
.IP "\(bu" 4
-\fB^1\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version compatible with 1"
+\fB1\.2\fR Same as \fB1\.2\.x\fR\|\.
.
.IP "\(bu" 4
-\fB1\.x\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version starting with 1"
+\fB~1\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version starting with \fB1\fR"
+.
+.IP "\(bu" 4
+\fB^1\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version compatible with \fB1\fR"
+.
+.IP "\(bu" 4
+\fB1\.x\fR := \fB>=1\.0\.0\-0 <2\.0\.0\-0\fR "Any version starting with \fB1\fR"
+.
+.IP "\(bu" 4
+\fB1\.*\fR Same as \fB1\.x\fR\|\.
+.
+.IP "\(bu" 4
+\fB1\fR Same as \fB1\.x\fR\|\.
+.
+.IP "\(bu" 4
+\fB*\fR Any version whatsoever\.
+.
+.IP "\(bu" 4
+\fBx\fR Same as \fB*\fR\|\.
+.
+.IP "\(bu" 4
+\fB""\fR (just an empty string) Same as \fB*\fR\|\.
.
.IP "" 0
.
@@ -131,75 +153,86 @@ Strict\-mode Comparators and Ranges will be strict about the SemVer
strings that they parse\.
.
.IP "\(bu" 4
-valid(v): Return the parsed version, or null if it\'s not valid\.
+\fBvalid(v)\fR: Return the parsed version, or null if it\'s not valid\.
+.
+.IP "\(bu" 4
+\fBinc(v, release)\fR\fBmajor\fR\fBpremajor\fR\fBminor\fR\fBpreminor\fR\fBpatch\fR\fBprepatch\fR\fBprerelease\fR
+.
+.IP "\(bu" 4
+\fBpremajor\fR in one call will bump the version up to the next major
+version and down to a prerelease of that major version\. \fBpreminor\fR, and \fBprepatch\fR work the same way\.
.
.IP "\(bu" 4
-inc(v, release): Return the version incremented by the release type
-(major, minor, patch, or prerelease), or null if it\'s not valid\.
+If called from a non\-prerelease version, the \fBprerelease\fR will work the
+same as \fBprepatch\fR\|\. It increments the patch version, then makes a
+prerelease\. If the input version is already a prerelease it simply
+increments it\.
+.
+.IP "" 0
+
.
.IP "" 0
.
.SS "Comparison"
.
.IP "\(bu" 4
-gt(v1, v2): \fBv1 > v2\fR
+\fBgt(v1, v2)\fR: \fBv1 > v2\fR
.
.IP "\(bu" 4
-gte(v1, v2): \fBv1 >= v2\fR
+\fBgte(v1, v2)\fR: \fBv1 >= v2\fR
.
.IP "\(bu" 4
-lt(v1, v2): \fBv1 < v2\fR
+\fBlt(v1, v2)\fR: \fBv1 < v2\fR
.
.IP "\(bu" 4
-lte(v1, v2): \fBv1 <= v2\fR
+\fBlte(v1, v2)\fR: \fBv1 <= v2\fR
.
.IP "\(bu" 4
-eq(v1, v2): \fBv1 == v2\fR This is true if they\'re logically equivalent,
+\fBeq(v1, v2)\fR: \fBv1 == v2\fR This is true if they\'re logically equivalent,
even if they\'re not the exact same string\. You already know how to
compare strings\.
.
.IP "\(bu" 4
-neq(v1, v2): \fBv1 != v2\fR The opposite of eq\.
+\fBneq(v1, v2)\fR: \fBv1 != v2\fR The opposite of \fBeq\fR\|\.
.
.IP "\(bu" 4
-cmp(v1, comparator, v2): Pass in a comparison string, and it\'ll call
+\fBcmp(v1, comparator, v2)\fR: Pass in a comparison string, and it\'ll call
the corresponding function above\. \fB"==="\fR and \fB"!=="\fR do simple
string comparison, but are included for completeness\. Throws if an
invalid comparison string is provided\.
.
.IP "\(bu" 4
-compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or \-1 if
-v2 is greater\. Sorts in ascending order if passed to Array\.sort()\.
+\fBcompare(v1, v2)\fR: Return \fB0\fR if \fBv1 == v2\fR, or \fB1\fR if \fBv1\fR is greater, or \fB\-1\fR if \fBv2\fR is greater\. Sorts in ascending order if passed to \fBArray\.sort()\fR\|\.
.
.IP "\(bu" 4
-rcompare(v1, v2): The reverse of compare\. Sorts an array of versions
-in descending order when passed to Array\.sort()\.
+\fBrcompare(v1, v2)\fR: The reverse of compare\. Sorts an array of versions
+in descending order when passed to \fBArray\.sort()\fR\|\.
.
.IP "" 0
.
.SS "Ranges"
.
.IP "\(bu" 4
-validRange(range): Return the valid range or null if it\'s not valid
+\fBvalidRange(range)\fR: Return the valid range or null if it\'s not valid
.
.IP "\(bu" 4
-satisfies(version, range): Return true if the version satisfies the
+\fBsatisfies(version, range)\fR: Return true if the version satisfies the
range\.
.
.IP "\(bu" 4
-maxSatisfying(versions, range): Return the highest version in the list
-that satisfies the range, or null if none of them do\.
+\fBmaxSatisfying(versions, range)\fR: Return the highest version in the list
+that satisfies the range, or \fBnull\fR if none of them do\.
.
.IP "\(bu" 4
-gtr(version, range): Return true if version is greater than all the
+\fBgtr(version, range)\fR: Return \fBtrue\fR if version is greater than all the
versions possible in the range\.
.
.IP "\(bu" 4
-ltr(version, range): Return true if version is less than all the
+\fBltr(version, range)\fR: Return \fBtrue\fR if version is less than all the
versions possible in the range\.
.
.IP "\(bu" 4
-outside(version, range, hilo): Return true if the version is outside
+\fBoutside(version, range, hilo)\fR: Return true if the version is outside
the bounds of the range in either the high or low direction\. The \fBhilo\fR argument must be either the string \fB\'>\'\fR or \fB\'<\'\fR\|\. (This is
the function called by \fBgtr\fR and \fBltr\fR\|\.)
.
@@ -210,8 +243,8 @@ Note that, since ranges may be non\-contiguous, a version might not be
greater than a range, less than a range, \fIor\fR satisfy a range! For
example, the range \fB1\.2 <1\.2\.9 || >2\.0\.0\fR would have a hole from \fB1\.2\.9\fR
until \fB2\.0\.0\fR, so the version \fB1\.2\.10\fR would not be greater than the
-range (because 2\.0\.1 satisfies, which is higher), nor less than the
-range (since 1\.2\.8 satisfies, which is lower), and it also does not
+range (because \fB2\.0\.1\fR satisfies, which is higher), nor less than the
+range (since \fB1\.2\.8\fR satisfies, which is lower), and it also does not
satisfy the range\.
.
.P
diff --git a/deps/npm/node_modules/abbrev/CONTRIBUTING.md b/deps/npm/node_modules/abbrev/CONTRIBUTING.md
new file mode 100644
index 000000000..2f302612f
--- /dev/null
+++ b/deps/npm/node_modules/abbrev/CONTRIBUTING.md
@@ -0,0 +1,3 @@
+ To get started, <a
+ href="http://www.clahub.com/agreements/isaacs/abbrev-js">sign the
+ Contributor License Agreement</a>.
diff --git a/deps/npm/node_modules/abbrev/lib/abbrev.js b/deps/npm/node_modules/abbrev/abbrev.js
index bee4132c9..69cfeac52 100644
--- a/deps/npm/node_modules/abbrev/lib/abbrev.js
+++ b/deps/npm/node_modules/abbrev/abbrev.js
@@ -60,52 +60,3 @@ function abbrev (list) {
function lexSort (a, b) {
return a === b ? 0 : a > b ? 1 : -1
}
-
-
-// tests
-if (module === require.main) {
-
-var assert = require("assert")
-var util = require("util")
-
-console.log("running tests")
-function test (list, expect) {
- var actual = abbrev(list)
- assert.deepEqual(actual, expect,
- "abbrev("+util.inspect(list)+") === " + util.inspect(expect) + "\n"+
- "actual: "+util.inspect(actual))
- actual = abbrev.apply(exports, list)
- assert.deepEqual(abbrev.apply(exports, list), expect,
- "abbrev("+list.map(JSON.stringify).join(",")+") === " + util.inspect(expect) + "\n"+
- "actual: "+util.inspect(actual))
-}
-
-test([ "ruby", "ruby", "rules", "rules", "rules" ],
-{ rub: 'ruby'
-, ruby: 'ruby'
-, rul: 'rules'
-, rule: 'rules'
-, rules: 'rules'
-})
-test(["fool", "foom", "pool", "pope"],
-{ fool: 'fool'
-, foom: 'foom'
-, poo: 'pool'
-, pool: 'pool'
-, pop: 'pope'
-, pope: 'pope'
-})
-test(["a", "ab", "abc", "abcd", "abcde", "acde"],
-{ a: 'a'
-, ab: 'ab'
-, abc: 'abc'
-, abcd: 'abcd'
-, abcde: 'abcde'
-, ac: 'acde'
-, acd: 'acde'
-, acde: 'acde'
-})
-
-console.log("pass")
-
-}
diff --git a/deps/npm/node_modules/abbrev/package.json b/deps/npm/node_modules/abbrev/package.json
index bea853e6e..bac363a18 100644
--- a/deps/npm/node_modules/abbrev/package.json
+++ b/deps/npm/node_modules/abbrev/package.json
@@ -1,14 +1,14 @@
{
"name": "abbrev",
- "version": "1.0.4",
+ "version": "1.0.5",
"description": "Like ruby's abbrev module, but in js",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me"
},
- "main": "./lib/abbrev.js",
+ "main": "abbrev.js",
"scripts": {
- "test": "node lib/abbrev.js"
+ "test": "node test.js"
},
"repository": {
"type": "git",
@@ -18,8 +18,28 @@
"type": "MIT",
"url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE"
},
- "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n var abbrev = require(\"abbrev\");\n abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n \n // returns:\n { fl: 'flop'\n , flo: 'flop'\n , flop: 'flop'\n , fol: 'folding'\n , fold: 'folding'\n , foldi: 'folding'\n , foldin: 'folding'\n , folding: 'folding'\n , foo: 'foo'\n , fool: 'fool'\n }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n",
- "readmeFilename": "README.md",
- "_id": "abbrev@1.0.4",
- "_from": "abbrev@latest"
+ "bugs": {
+ "url": "https://github.com/isaacs/abbrev-js/issues"
+ },
+ "homepage": "https://github.com/isaacs/abbrev-js",
+ "_id": "abbrev@1.0.5",
+ "_shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
+ "_from": "abbrev@latest",
+ "_npmVersion": "1.4.7",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
+ "tarball": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
}
diff --git a/deps/npm/node_modules/abbrev/test.js b/deps/npm/node_modules/abbrev/test.js
new file mode 100644
index 000000000..d5a7303ed
--- /dev/null
+++ b/deps/npm/node_modules/abbrev/test.js
@@ -0,0 +1,47 @@
+var abbrev = require('./abbrev.js')
+var assert = require("assert")
+var util = require("util")
+
+console.log("TAP Version 13")
+var count = 0
+
+function test (list, expect) {
+ count++
+ var actual = abbrev(list)
+ assert.deepEqual(actual, expect,
+ "abbrev("+util.inspect(list)+") === " + util.inspect(expect) + "\n"+
+ "actual: "+util.inspect(actual))
+ actual = abbrev.apply(exports, list)
+ assert.deepEqual(abbrev.apply(exports, list), expect,
+ "abbrev("+list.map(JSON.stringify).join(",")+") === " + util.inspect(expect) + "\n"+
+ "actual: "+util.inspect(actual))
+ console.log('ok - ' + list.join(' '))
+}
+
+test([ "ruby", "ruby", "rules", "rules", "rules" ],
+{ rub: 'ruby'
+, ruby: 'ruby'
+, rul: 'rules'
+, rule: 'rules'
+, rules: 'rules'
+})
+test(["fool", "foom", "pool", "pope"],
+{ fool: 'fool'
+, foom: 'foom'
+, poo: 'pool'
+, pool: 'pool'
+, pop: 'pope'
+, pope: 'pope'
+})
+test(["a", "ab", "abc", "abcd", "abcde", "acde"],
+{ a: 'a'
+, ab: 'ab'
+, abc: 'abc'
+, abcd: 'abcd'
+, abcde: 'abcde'
+, ac: 'acde'
+, acd: 'acde'
+, acde: 'acde'
+})
+
+console.log("0..%d", count)
diff --git a/deps/npm/node_modules/char-spinner/LICENSE b/deps/npm/node_modules/char-spinner/LICENSE
new file mode 100644
index 000000000..05eeeb88c
--- /dev/null
+++ b/deps/npm/node_modules/char-spinner/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/char-spinner/README.md b/deps/npm/node_modules/char-spinner/README.md
new file mode 100644
index 000000000..b1290f592
--- /dev/null
+++ b/deps/npm/node_modules/char-spinner/README.md
@@ -0,0 +1,31 @@
+# char-spinner
+
+Put a little spinner on process.stderr, as unobtrusively as possible.
+
+## USAGE
+
+```javascript
+var spinner = require("char-spinner")
+
+// All options are optional
+// even the options argument itself is optional
+spinner(options)
+```
+
+## OPTIONS
+
+Usually the defaults are what you want. Mostly they're just
+configurable for testing purposes.
+
+* `stream` Output stream. Default=`process.stderr`
+* `tty` Only show spinner if output stream has a truish `.isTTY`. Default=`true`
+* `string` String of chars to spin. Default=`'/-\\|'`
+* `interval` Number of ms between frames, bigger = slower. Default=`50`
+* `cleanup` Print `'\r \r'` to stream on process exit. Default=`true`
+* `unref` Unreference the spinner interval so that the process can
+ exit normally. Default=`true`
+* `delay` Number of frames to "skip over" before printing the spinner.
+ Useful if you want to avoid showing the spinner for very fast
+ actions. Default=`2`
+
+Returns the generated interval, if one was created.
diff --git a/deps/npm/node_modules/char-spinner/package.json b/deps/npm/node_modules/char-spinner/package.json
new file mode 100644
index 000000000..91092d84b
--- /dev/null
+++ b/deps/npm/node_modules/char-spinner/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "char-spinner",
+ "version": "1.0.1",
+ "description": "Put a little spinner on process.stderr, as unobtrusively as possible.",
+ "main": "spin.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "^0.4.10"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/char-spinner"
+ },
+ "keywords": [
+ "char",
+ "spinner"
+ ],
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/isaacs/char-spinner/issues"
+ },
+ "homepage": "https://github.com/isaacs/char-spinner",
+ "gitHead": "091b2ff5960aa083f68a5619fa93999d072aa152",
+ "_id": "char-spinner@1.0.1",
+ "_shasum": "e6ea67bd247e107112983b7ab0479ed362800081",
+ "_from": "char-spinner@latest",
+ "_npmVersion": "1.4.13",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "e6ea67bd247e107112983b7ab0479ed362800081",
+ "tarball": "http://registry.npmjs.org/char-spinner/-/char-spinner-1.0.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/char-spinner/-/char-spinner-1.0.1.tgz"
+}
diff --git a/deps/npm/node_modules/char-spinner/spin.js b/deps/npm/node_modules/char-spinner/spin.js
new file mode 100644
index 000000000..cae8540c6
--- /dev/null
+++ b/deps/npm/node_modules/char-spinner/spin.js
@@ -0,0 +1,51 @@
+module.exports = spinner
+
+function spinner(opt) {
+ opt = opt || {}
+ var str = opt.stream || process.stderr
+ var tty = typeof opt.tty === 'boolean' ? opt.tty : true
+ var string = opt.string || '/-\\|'
+ var ms = typeof opt.interval === 'number' ? opt.interval : 50
+ if (ms < 0) ms = 0
+ if (tty && !str.isTTY) return false
+ var CR = str.isTTY ? '\u001b[0G' : '\u000d';
+ var CLEAR = str.isTTY ? '\u001b[2K' : '\u000d \u000d';
+
+ var s = 0
+ var sprite = string.split('')
+ var wrote = false
+
+ var delay = typeof opt.delay === 'number' ? opt.delay : 2
+
+ var interval = setInterval(function() {
+ if (--delay >= 0) return
+ s = ++s % sprite.length
+ var c = sprite[s]
+ str.write(c + CR)
+ wrote = true
+ }, ms)
+
+ var unref = typeof opt.unref === 'boolean' ? opt.unref : true
+ if (unref && typeof interval.unref === 'function') {
+ interval.unref()
+ }
+
+ var cleanup = typeof opt.cleanup === 'boolean' ? opt.cleanup : true
+ if (cleanup) {
+ process.on('exit', function() {
+ if (wrote) {
+ str.write(CLEAR);
+ }
+ })
+ }
+
+ module.exports.clear = function () {
+ str.write(CLEAR);
+ };
+
+ return interval
+}
+
+module.exports.clear = function () {};
+
+
diff --git a/deps/npm/node_modules/char-spinner/test/basic.js b/deps/npm/node_modules/char-spinner/test/basic.js
new file mode 100644
index 000000000..ed91b984f
--- /dev/null
+++ b/deps/npm/node_modules/char-spinner/test/basic.js
@@ -0,0 +1,35 @@
+var test = require('tap').test
+var spinner = require('../spin.js')
+
+test('does nothing when not a tty', function(t) {
+ var int = spinner({
+ stream: { write: function(c) {
+ throw new Error('wrote something: ' + JSON.stringify(c))
+ }, isTTY: false },
+ })
+ t.notOk(int)
+ t.end()
+})
+
+test('write spinny stuff', function(t) {
+ var output = ''
+ var written = 0
+ var expect = "b\u001b[0Gc\u001b[0Gd\u001b[0Ge\u001b[0Gf\u001b[0Gg\u001b[0Gh\u001b[0Gi\u001b[0Gj\u001b[0Gk\u001b[0Gl\u001b[0Gm\u001b[0Gn\u001b[0Go\u001b[0Gp\u001b[0Ga\u001b[0Gb\u001b[0Gc\u001b[0Gd\u001b[0Ge\u001b[0Gf\u001b[0Gg\u001b[0Gh\u001b[0Gi\u001b[0Gj\u001b[0Gk\u001b[0Gl\u001b[0Gm\u001b[0Gn\u001b[0Go\u001b[0Gp\u001b[0Ga\u001b[0Gb\u001b[0Gc\u001b[0Gd\u001b[0Ge\u001b[0Gf\u001b[0Gg\u001b[0Gh\u001b[0Gi\u001b[0Gj\u001b[0Gk\u001b[0Gl\u001b[0Gm\u001b[0Gn\u001b[0Go\u001b[0Gp\u001b[0Ga\u001b[0Gb\u001b[0Gc\u001b[0G"
+
+ var int = spinner({
+ interval: 0,
+ string: 'abcdefghijklmnop',
+ stream: {
+ write: function(c) {
+ output += c
+ if (++written == 50) {
+ t.equal(output, expect)
+ clearInterval(int)
+ t.end()
+ }
+ },
+ isTTY: true
+ },
+ cleanup: false
+ })
+})
diff --git a/deps/npm/node_modules/columnify/package.json b/deps/npm/node_modules/columnify/package.json
index f4fa2cb2a..5ad3d4a72 100644
--- a/deps/npm/node_modules/columnify/package.json
+++ b/deps/npm/node_modules/columnify/package.json
@@ -31,12 +31,24 @@
"url": "https://github.com/timoxley/columnify/issues"
},
"homepage": "https://github.com/timoxley/columnify",
- "readme": "# columnify\n\n[![Build Status](https://travis-ci.org/timoxley/columnify.png?branch=master)](https://travis-ci.org/timoxley/columnify)\n\nCreate text-based columns suitable for console output. \nSupports minimum and maximum column widths via truncation and text wrapping.\n\nDesigned to [handle sensible wrapping in npm search results](https://github.com/isaacs/npm/pull/2328).\n\n`npm search` before & after integrating columnify:\n\n![npm-tidy-search](https://f.cloud.github.com/assets/43438/1848959/ae02ad04-76a1-11e3-8255-4781debffc26.gif)\n\n## Installation & Update\n\n```\n$ npm install --save columnify@latest\n```\n\n## Usage\n\n```js\nvar columnify = require('columnify')\nvar columns = columnify(data, options)\nconsole.log(columns)\n```\n\n## Examples\n\n### Simple Columns\n\nText is aligned under column headings. Columns are automatically resized\nto fit the content of the largest cell. Each cell will be padded with\nspaces to fill the available space and ensure column contents are\nleft-aligned.\n\n```js\nvar columnify = require('columnify')\n\nvar columns = columnify([{\n name: 'mod1',\n version: '0.0.1'\n}, {\n name: 'module2',\n version: '0.2.0'\n}])\n\nconsole.log(columns)\n```\n```\nNAME VERSION\nmod1 0.0.1 \nmodule2 0.2.0 \n```\n\n### Wrapping Column Cells\n\nYou can define the maximum width before wrapping for individual cells in\ncolumns. Minimum width is also supported. Wrapping will happen at word\nboundaries. Empty cells or those which do not fill the max/min width\nwill be padded with spaces.\n\n```js\nvar columnify = require('columnify')\n\nvar columns = columnify([{\n name: 'mod1',\n description: 'some description which happens to be far larger than the max',\n version: '0.0.1',\n}, {\n name: 'module-two',\n description: 'another description larger than the max',\n version: '0.2.0',\n})\n\nconsole.log(columns)\n```\n```\nNAME DESCRIPTION VERSION\nmod1 some description which happens 0.0.1\n to be far larger than the max\nmodule-two another description larger 0.2.0\n than the max\n```\n\n### Truncated Columns\n\nYou can disable wrapping and instead truncate content at the maximum\ncolumn width. Truncation respects word boundaries. A truncation marker,\n`…` will appear next to the last word in any truncated line.\n\n```js\nvar columns = columnify(data, {\n truncate: true,\n config: {\n description: {\n maxWidth: 20\n }\n }\n})\n\nconsole.log(columns)\n```\n\n```\nNAME DESCRIPTION VERSION\nmod1 some description… 0.0.1 \nmodule-two another description… 0.2.0 \n```\n\n\n### Custom Truncation Marker\n\nYou can change the truncation marker to something other than the default\n`…`.\n\n```js\nvar columns = columnify(data, {\n truncate: true,\n truncateMarker: '>',\n widths: {\n description: {\n maxWidth: 20\n }\n }\n})\n\nconsole.log(columns)\n```\n\n```\nNAME DESCRIPTION VERSION\nmod1 some description> 0.0.1 \nmodule-two another description> 0.2.0 \n```\n\n### Custom Column Splitter\n\nIf your columns need some bling, you can split columns with custom\ncharacters.\n\n```js\n\nvar columns = columnify(data, {\n columnSplitter: ' | '\n})\n\nconsole.log(columns)\n```\n```\nNAME | DESCRIPTION | VERSION\nmod1 | some description which happens to be far larger than the max | 0.0.1\nmodule-two | another description larger than the max | 0.2.0\n```\n\n### Filtering & Ordering Columns\n\nBy default, all properties are converted into columns, whether or not\nthey exist on every object or not.\n\nTo explicitly specify which columns to include, and in which order,\nsupply an \"include\" array:\n\n```js\nvar data = [{\n name: 'module1',\n description: 'some description',\n version: '0.0.1',\n}, {\n name: 'module2',\n description: 'another description',\n version: '0.2.0',\n}]\n\nvar columns = columnify(data, {\n include: ['name', 'version'] // note description not included\n})\n\nconsole.log(columns)\n```\n\n```\nNAME VERSION\nmodule1 0.0.1\nmodule2 0.2.0\n```\n## License\n\nMIT\n",
- "readmeFilename": "Readme.md",
"_id": "columnify@0.1.2",
"dist": {
- "shasum": "ab1a1f1e37b26ba4b87c6920fb717fe51c827042"
+ "shasum": "ab1a1f1e37b26ba4b87c6920fb717fe51c827042",
+ "tarball": "http://registry.npmjs.org/columnify/-/columnify-0.1.2.tgz"
},
"_from": "columnify@0.1.2",
+ "_npmVersion": "1.3.23",
+ "_npmUser": {
+ "name": "timoxley",
+ "email": "secoif@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "timoxley",
+ "email": "secoif@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_shasum": "ab1a1f1e37b26ba4b87c6920fb717fe51c827042",
"_resolved": "https://registry.npmjs.org/columnify/-/columnify-0.1.2.tgz"
}
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
index fcf03f281..a4794004c 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream-ignore",
"description": "A thing for ignoring files based on globs",
- "version": "0.0.7",
+ "version": "0.0.8",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-ignore.git"
@@ -16,9 +16,9 @@
"test": "tap test/*.js"
},
"dependencies": {
- "minimatch": "~0.2.0",
"fstream": "~0.1.17",
- "inherits": "2"
+ "inherits": "2",
+ "minimatch": "^0.3.0"
},
"devDependencies": {
"tap": "",
@@ -26,15 +26,30 @@
"mkdirp": ""
},
"license": "BSD",
- "readme": "# fstream-ignore\n\nA fstream DirReader that filters out files that match globs in `.ignore`\nfiles throughout the tree, like how git ignores files based on a\n`.gitignore` file.\n\nHere's an example:\n\n```javascript\nvar Ignore = require(\"fstream-ignore\")\nIgnore({ path: __dirname\n , ignoreFiles: [\".ignore\", \".gitignore\"]\n })\n .on(\"child\", function (c) {\n console.error(c.path.substr(c.root.path.length + 1))\n })\n .pipe(tar.Pack())\n .pipe(fs.createWriteStream(\"foo.tar\"))\n```\n\nThis will tar up the files in __dirname into `foo.tar`, ignoring\nanything matched by the globs in any .iginore or .gitignore file.\n",
- "readmeFilename": "README.md",
+ "gitHead": "8dfc936e8b2d25c0d82042b73a22c659e6e69a1e",
"bugs": {
"url": "https://github.com/isaacs/fstream-ignore/issues"
},
- "_id": "fstream-ignore@0.0.7",
+ "homepage": "https://github.com/isaacs/fstream-ignore",
+ "_id": "fstream-ignore@0.0.8",
+ "_shasum": "cc4830fb9963178be5d9eb37569a4a0785cf9e53",
+ "_from": "fstream-ignore@~0.0",
+ "_npmVersion": "1.4.10",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
"dist": {
- "shasum": "eea3033f0c3728139de7b57ab1b0d6d89c353c63"
+ "shasum": "cc4830fb9963178be5d9eb37569a4a0785cf9e53",
+ "tarball": "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.8.tgz"
},
- "_from": "fstream-ignore@~0.0.5",
- "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz"
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.8.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json
index 7769921d8..299148af5 100644
--- a/deps/npm/node_modules/fstream-npm/package.json
+++ b/deps/npm/node_modules/fstream-npm/package.json
@@ -6,22 +6,26 @@
},
"name": "fstream-npm",
"description": "fstream class for creating npm packages",
- "version": "0.1.6",
+ "version": "0.1.7",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-npm.git"
},
"main": "./fstream-npm.js",
"dependencies": {
- "fstream-ignore": "~0.0.5",
+ "fstream-ignore": "~0.0",
"inherits": "2"
},
"license": "BSD",
"readme": "# fstream-npm\n\nThis is an fstream DirReader class that will read a directory and filter\nthings according to the semantics of what goes in an npm package.\n\nFor example:\n\n```javascript\n// This will print out all the files that would be included\n// by 'npm publish' or 'npm install' of this directory.\n\nvar FN = require(\"fstream-npm\")\nFN({ path: \"./\" })\n .on(\"child\", function (e) {\n console.error(e.path.substr(e.root.path.length + 1))\n })\n```\n\n",
"readmeFilename": "README.md",
+ "gitHead": "13839c9be784f2addc9352d525b35835fba01151",
"bugs": {
"url": "https://github.com/isaacs/fstream-npm/issues"
},
- "_id": "fstream-npm@0.1.6",
+ "homepage": "https://github.com/isaacs/fstream-npm",
+ "_id": "fstream-npm@0.1.7",
+ "scripts": {},
+ "_shasum": "423dc5d1d1fcb7d878501f43c7e11a33292bd55f",
"_from": "fstream-npm@latest"
}
diff --git a/deps/npm/node_modules/github-url-from-username-repo/package.json b/deps/npm/node_modules/github-url-from-username-repo/package.json
index 239ba7739..7eadf899d 100644
--- a/deps/npm/node_modules/github-url-from-username-repo/package.json
+++ b/deps/npm/node_modules/github-url-from-username-repo/package.json
@@ -26,13 +26,26 @@
"github",
"repo"
],
- "readme": "[![Build Status](https://travis-ci.org/robertkowalski/github-url-from-username-repo.png?branch=master)](https://travis-ci.org/robertkowalski/github-url-from-username-repo)\n[![Dependency Status](https://gemnasium.com/robertkowalski/github-url-from-username-repo.png)](https://gemnasium.com/robertkowalski/github-url-from-username-repo)\n\n\n# github-url-from-username-repo\n\n## Usage\n\n```javascript\n\nvar getUrl = require(\"github-url-from-username-repo\")\ngetUrl(\"visionmedia/express\") // git://github.com/visionmedia/express\n\n```",
- "readmeFilename": "README.md",
"homepage": "https://github.com/robertkowalski/github-url-from-username-repo",
"_id": "github-url-from-username-repo@0.1.0",
"dist": {
- "shasum": "fe398af670692e91af7bcfc5ae1d99ff97b1df89"
+ "shasum": "fe398af670692e91af7bcfc5ae1d99ff97b1df89",
+ "tarball": "http://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-0.1.0.tgz"
},
- "_from": "github-url-from-username-repo@0.1.0",
- "_resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-0.1.0.tgz"
+ "_from": "github-url-from-username-repo@~0.1.0",
+ "_npmVersion": "1.4.6",
+ "_npmUser": {
+ "name": "robertkowalski",
+ "email": "rok@kowalski.gd"
+ },
+ "maintainers": [
+ {
+ "name": "robertkowalski",
+ "email": "rok@kowalski.gd"
+ }
+ ],
+ "directories": {},
+ "_shasum": "fe398af670692e91af7bcfc5ae1d99ff97b1df89",
+ "_resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-0.1.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 71f32cd49..795af8cbe 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -6,7 +6,7 @@
},
"name": "glob",
"description": "a little globber",
- "version": "3.2.9",
+ "version": "3.2.10",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
@@ -16,8 +16,8 @@
"node": "*"
},
"dependencies": {
- "minimatch": "~0.2.11",
- "inherits": "2"
+ "inherits": "2",
+ "minimatch": "^0.3.0"
},
"devDependencies": {
"tap": "~0.4.0",
@@ -31,10 +31,12 @@
"license": "BSD",
"readme": "# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\nThis is a glob implementation in JavaScript. It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n // files is an array of filenames.\n // If the `nonull` option is set, and nothing\n // was found, then files is [\"**/*.js\"]\n // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n * `err` {Error | null}\n * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n * `err` {Error | null}\n * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered. When an error is encountered, the\n glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`. There\n is no way at this time to continue a glob search after aborting, but\n you can re-use the statCache to avoid having to duplicate syscalls.\n* `statCache` Collection of all the stat results the glob search\n performed.\n* `cache` Convenience object. Each field has the following possible\n values:\n * `false` - Path does not exist\n * `true` - Path exists\n * `1` - Path exists, and is not a directory\n * `2` - Path exists, and is a directory\n * `[file, entries, ...]` - Path exists, is a directory, and the\n array value is the results of `fs.readdir`\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n matches found. If the `nonull` option is set, and no match was found,\n then the `matches` list contains the original pattern. The matches\n are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior. Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search. Defaults\n to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n onto. Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n Note that an explicit dot in a portion of the pattern will always\n match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n \"mounted\" onto the root setting, so that a valid filesystem path is\n returned. Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches. Note that this\n requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results. This reduces performance\n somewhat, and is completely unnecessary, unless `readdir` is presumed\n to be an untrustworthy indicator of file existence. It will cause\n ELOOP to be triggered one level sooner in the case of cyclical\n symbolic links.\n* `silent` When an unusual error is encountered\n when attempting to read a directory, a warning will be printed to\n stderr. Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n when attempting to read a directory, the process will just continue on\n in search of other matches. Set the `strict` option to raise an error\n in these cases.\n* `cache` See `cache` property above. Pass in a previously generated\n cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n unnecessary stat calls. While it should not normally be necessary to\n set this, you may pass the statCache from one glob() call to the\n options object of another, if you know that the filesystem will not\n change between calls. (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n same file showing up multiple times in the result set. By default,\n this implementation prevents duplicates in the result set.\n Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n containing the pattern itself. This is the default in glob(3).\n* `nocase` Perform a case-insensitive match. Note that case-insensitive\n filesystems will sometimes result in glob returning results that are\n case-insensitively matched anyway, since readdir and stat will not\n raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation. You must use\nforward-slashes **only** in glob expressions. Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`. On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead. However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes. For the vast majority\nof operations, this is never a problem.\n",
"readmeFilename": "README.md",
+ "gitHead": "4e00805b5529af626bf0512d6810c27a96ca2a12",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
"homepage": "https://github.com/isaacs/node-glob",
- "_id": "glob@3.2.9",
+ "_id": "glob@3.2.10",
+ "_shasum": "e229a4d843fdabca3dd8cdc96c456e29c6e79f13",
"_from": "glob@latest"
}
diff --git a/deps/npm/node_modules/inflight/LICENSE b/deps/npm/node_modules/inflight/LICENSE
new file mode 100644
index 000000000..05eeeb88c
--- /dev/null
+++ b/deps/npm/node_modules/inflight/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/inflight/README.md b/deps/npm/node_modules/inflight/README.md
new file mode 100644
index 000000000..6dc892917
--- /dev/null
+++ b/deps/npm/node_modules/inflight/README.md
@@ -0,0 +1,37 @@
+# inflight
+
+Add callbacks to requests in flight to avoid async duplication
+
+## USAGE
+
+```javascript
+var inflight = require('inflight')
+
+// some request that does some stuff
+function req(key, callback) {
+ // key is any random string. like a url or filename or whatever.
+ //
+ // will return either a falsey value, indicating that the
+ // request for this key is already in flight, or a new callback
+ // which when called will call all callbacks passed to inflightk
+ // with the same key
+ callback = inflight(key, callback)
+
+ // If we got a falsey value back, then there's already a req going
+ if (!callback) return
+
+ // this is where you'd fetch the url or whatever
+ // callback is also once()-ified, so it can safely be assigned
+ // to multiple events etc. First call wins.
+ setTimeout(function() {
+ callback(null, key)
+ }, 100)
+}
+
+// only assigns a single setTimeout
+// when it dings, all cbs get called
+req('foo', cb1)
+req('foo', cb2)
+req('foo', cb3)
+req('foo', cb4)
+```
diff --git a/deps/npm/node_modules/inflight/inflight.js b/deps/npm/node_modules/inflight/inflight.js
new file mode 100644
index 000000000..1fe279f9a
--- /dev/null
+++ b/deps/npm/node_modules/inflight/inflight.js
@@ -0,0 +1,25 @@
+module.exports = inflight
+
+var reqs = Object.create(null)
+var once = require('once')
+
+function inflight (key, cb) {
+ if (reqs[key]) {
+ reqs[key].push(cb)
+ return null
+ } else {
+ reqs[key] = [cb]
+ return makeres(key)
+ }
+}
+
+function makeres(key) {
+ return once(res)
+ function res(error, data) {
+ var cbs = reqs[key]
+ delete reqs[key]
+ cbs.forEach(function(cb) {
+ cb(error, data)
+ })
+ }
+}
diff --git a/deps/npm/node_modules/inflight/package.json b/deps/npm/node_modules/inflight/package.json
new file mode 100644
index 000000000..f4e294aad
--- /dev/null
+++ b/deps/npm/node_modules/inflight/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "inflight",
+ "version": "1.0.1",
+ "description": "Add callbacks to requests in flight to avoid async duplication",
+ "main": "inflight.js",
+ "dependencies": {
+ "once": "^1.3.0"
+ },
+ "devDependencies": {
+ "tap": "^0.4.10"
+ },
+ "scripts": {
+ "test": "tap test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/inflight"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/inflight/issues"
+ },
+ "homepage": "https://github.com/isaacs/inflight",
+ "license": "ISC",
+ "_id": "inflight@1.0.1",
+ "_shasum": "01f6911821535243c790ac0f998f54e9023ffb6f",
+ "_from": "inflight@~1.0.1",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "01f6911821535243c790ac0f998f54e9023ffb6f",
+ "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/inflight/test.js b/deps/npm/node_modules/inflight/test.js
new file mode 100644
index 000000000..28fc14503
--- /dev/null
+++ b/deps/npm/node_modules/inflight/test.js
@@ -0,0 +1,33 @@
+var test = require('tap').test
+var inf = require('./inflight.js')
+
+
+function req (key, cb) {
+ cb = inf(key, cb)
+ if (cb) setTimeout(function () {
+ cb(key)
+ cb(key)
+ })
+ return cb
+}
+
+test('basic', function (t) {
+ var calleda = false
+ var a = req('key', function (k) {
+ t.notOk(calleda)
+ calleda = true
+ t.equal(k, 'key')
+ if (calledb) t.end()
+ })
+ t.ok(a, 'first returned cb function')
+
+ var calledb = false
+ var b = req('key', function (k) {
+ t.notOk(calledb)
+ calledb = true
+ t.equal(k, 'key')
+ if (calleda) t.end()
+ })
+
+ t.notOk(b, 'second should get falsey inflight response')
+})
diff --git a/deps/npm/node_modules/ini/.npmignore b/deps/npm/node_modules/ini/.npmignore
new file mode 100644
index 000000000..3c3629e64
--- /dev/null
+++ b/deps/npm/node_modules/ini/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/deps/npm/node_modules/ini/ini.js b/deps/npm/node_modules/ini/ini.js
index eaf320933..1d1e6e934 100644
--- a/deps/npm/node_modules/ini/ini.js
+++ b/deps/npm/node_modules/ini/ini.js
@@ -42,12 +42,12 @@ function encode (obj, section) {
}
function dotSplit (str) {
- return str.replace(/\1/g, '\2LITERAL\\1LITERAL\2')
- .replace(/\\\./g, '\1')
+ return str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002')
+ .replace(/\\\./g, '\u0001')
.split(/\./).map(function (part) {
return part.replace(/\1/g, '\\.')
- .replace(/\2LITERAL\\1LITERAL\2/g, '\1')
- })
+ .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001')
+ })
}
function decode (str) {
@@ -61,7 +61,7 @@ function decode (str) {
, section = null
lines.forEach(function (line, _, __) {
- if (!line || line.match(/^\s*;/)) return
+ if (!line || line.match(/^\s*[;#]/)) return
var match = line.match(re)
if (!match) return
if (match[1] !== undefined) {
@@ -122,21 +122,29 @@ function decode (str) {
return out
}
+function isQuoted (val) {
+ return (val.charAt(0) === "\"" && val.slice(-1) === "\"")
+ || (val.charAt(0) === "'" && val.slice(-1) === "'")
+}
+
function safe (val) {
return ( typeof val !== "string"
|| val.match(/[\r\n]/)
|| val.match(/^\[/)
|| (val.length > 1
- && val.charAt(0) === "\""
- && val.slice(-1) === "\"")
+ && isQuoted(val))
|| val !== val.trim() )
? JSON.stringify(val)
- : val.replace(/;/g, '\\;')
+ : val.replace(/;/g, '\\;').replace(/#/g, "\\#")
}
function unsafe (val, doUnesc) {
val = (val || "").trim()
- if (val.charAt(0) === "\"" && val.slice(-1) === "\"") {
+ if (isQuoted(val)) {
+ // remove the single quotes before calling JSON.parse
+ if (val.charAt(0) === "'") {
+ val = val.substr(1, val.length - 2);
+ }
try { val = JSON.parse(val) } catch (_) {}
} else {
// walk the val to find the first not-escaped ; character
@@ -145,12 +153,12 @@ function unsafe (val, doUnesc) {
for (var i = 0, l = val.length; i < l; i++) {
var c = val.charAt(i)
if (esc) {
- if (c === "\\" || c === ";")
+ if ("\\;#".indexOf(c) !== -1)
unesc += c
else
unesc += "\\" + c
esc = false
- } else if (c === ";") {
+ } else if (";#".indexOf(c) !== -1) {
break
} else if (c === "\\") {
esc = true
diff --git a/deps/npm/node_modules/ini/package.json b/deps/npm/node_modules/ini/package.json
index 41c63607a..6c3c8d18e 100644
--- a/deps/npm/node_modules/ini/package.json
+++ b/deps/npm/node_modules/ini/package.json
@@ -6,7 +6,7 @@
},
"name": "ini",
"description": "An ini encoder/decoder for node",
- "version": "1.1.0",
+ "version": "1.2.0",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/ini.git"
@@ -20,10 +20,30 @@
},
"dependencies": {},
"devDependencies": {
- "tap": "~0.0.9"
+ "tap": "~0.4.0"
},
- "readme": "An ini format parser and serializer for node.\n\nSections are treated as nested objects. Items before the first heading\nare saved on the object directly.\n\n## Usage\n\nConsider an ini-file `config.ini` that looks like this:\n\n ; this comment is being ignored\n scope = global\n\n [database]\n user = dbuser\n password = dbpassword\n database = use_this_database\n\n [paths.default]\n datadir = /var/lib/data\n array[] = first value\n array[] = second value\n array[] = third value\n\nYou can read, manipulate and write the ini-file like so:\n\n var fs = require('fs')\n , ini = require('ini')\n\n var config = ini.parse(fs.readFileSync('./config.ini', 'utf-8'))\n\n config.scope = 'local'\n config.database.database = 'use_another_database'\n config.paths.default.tmpdir = '/tmp'\n delete config.paths.default.datadir\n config.paths.default.array.push('fourth value')\n\n fs.writeFileSync('./config_modified.ini', ini.stringify(config, 'section'))\n\nThis will result in a file called `config_modified.ini` being written to the filesystem with the following content:\n\n [section]\n scope = local\n [section.database]\n user = dbuser\n password = dbpassword\n database = use_another_database\n [section.paths.default]\n tmpdir = /tmp\n array[] = first value\n array[] = second value\n array[] = third value\n array[] = fourth value\n\n\n## API\n\n### decode(inistring)\nDecode the ini-style formatted `inistring` into a nested object.\n\n### parse(inistring)\nAlias for `decode(inistring)`\n\n### encode(object, [section])\nEncode the object `object` into an ini-style formatted string. If the optional parameter `section` is given, then all top-level properties of the object are put into this section and the `section`-string is prepended to all sub-sections, see the usage example above.\n\n### stringify(object, [section])\nAlias for `encode(object, [section])`\n\n### safe(val)\nEscapes the string `val` such that it is safe to be used as a key or value in an ini-file. Basically escapes quotes. For example\n\n ini.safe('\"unsafe string\"')\n\nwould result in\n\n \"\\\"unsafe string\\\"\"\n\n### unsafe(val)\nUnescapes the string `val`\n",
- "readmeFilename": "README.md",
- "_id": "ini@1.1.0",
- "_from": "ini@latest"
+ "bugs": {
+ "url": "https://github.com/isaacs/ini/issues"
+ },
+ "homepage": "https://github.com/isaacs/ini",
+ "_id": "ini@1.2.0",
+ "_shasum": "2cc36789605809930722e793ae13ac835e623ac6",
+ "_from": "ini@latest",
+ "_npmVersion": "1.4.10",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "2cc36789605809930722e793ae13ac835e623ac6",
+ "tarball": "http://registry.npmjs.org/ini/-/ini-1.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/ini/-/ini-1.2.0.tgz"
}
diff --git a/deps/npm/node_modules/ini/test/fixtures/foo.ini b/deps/npm/node_modules/ini/test/fixtures/foo.ini
index 1d81378fd..27555e9d8 100644
--- a/deps/npm/node_modules/ini/test/fixtures/foo.ini
+++ b/deps/npm/node_modules/ini/test/fixtures/foo.ini
@@ -8,6 +8,16 @@ o = p
; wrap in quotes to get a key with a bracket, not a section.
"[disturbing]" = hey you never know
+; Test single quotes
+s = 'something'
+
+; Test mixing quotes
+
+s1 = "something'
+
+; Test double quotes
+s2 = "something else"
+
; Test arrays
zr[] = deedee
ar[] = one
@@ -45,3 +55,9 @@ a.b.c = abc
; this next one is not a comment! it's escaped!
nocomment = this\; this is not a comment
+
+# Support the use of the number sign (#) as an alternative to the semicolon for indicating comments.
+# http://en.wikipedia.org/wiki/INI_file#Comments
+
+# this next one is not a comment! it's escaped!
+noHashComment = this\# this is not a comment
diff --git a/deps/npm/node_modules/ini/test/foo.js b/deps/npm/node_modules/ini/test/foo.js
index 3a05eaf32..e1499cbe3 100644
--- a/deps/npm/node_modules/ini/test/foo.js
+++ b/deps/npm/node_modules/ini/test/foo.js
@@ -10,6 +10,9 @@ var i = require("../")
+ 'a with spaces = b c\n'
+ '" xa n p " = "\\"\\r\\nyoyoyo\\r\\r\\n"\n'
+ '"[disturbing]" = hey you never know\n'
+ + 's = something\n'
+ + 's1 = \"something\'\n'
+ + 's2 = something else\n'
+ 'zr[] = deedee\n'
+ 'ar[] = one\n'
+ 'ar[] = three\n'
@@ -28,11 +31,15 @@ var i = require("../")
+ 'j = 2\n\n[x\\.y\\.z]\nx.y.z = xyz\n\n'
+ '[x\\.y\\.z.a\\.b\\.c]\na.b.c = abc\n'
+ 'nocomment = this\\; this is not a comment\n'
+ + 'noHashComment = this\\# this is not a comment\n'
, expectD =
{ o: 'p',
'a with spaces': 'b c',
" xa n p ":'"\r\nyoyoyo\r\r\n',
'[disturbing]': 'hey you never know',
+ 's': 'something',
+ 's1' : '\"something\'',
+ 's2': 'something else',
'zr': ['deedee'],
'ar': ['one', 'three', 'this is included'],
'br': 'warm',
@@ -47,7 +54,8 @@ var i = require("../")
'x.y.z': 'xyz',
'a.b.c': {
'a.b.c': 'abc',
- 'nocomment': 'this\; this is not a comment'
+ 'nocomment': 'this\; this is not a comment',
+ noHashComment: 'this\# this is not a comment'
}
}
}
diff --git a/deps/npm/node_modules/init-package-json/default-input.js b/deps/npm/node_modules/init-package-json/default-input.js
index 4390e708b..0cbd85b81 100644
--- a/deps/npm/node_modules/init-package-json/default-input.js
+++ b/deps/npm/node_modules/init-package-json/default-input.js
@@ -150,7 +150,7 @@ if (!package.repository) {
else u = u.replace(/^\s*url = /, '')
}
if (u && u.match(/^git@github.com:/))
- u = u.replace(/^git@github.com:/, 'git://github.com/')
+ u = u.replace(/^git@github.com:/, 'https://github.com/')
return cb(null, prompt('git repository', u))
})
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
index 1d713bc69..1f1bfc6d4 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
@@ -6,7 +6,7 @@
},
"name": "promzard",
"description": "prompting wizardly",
- "version": "0.2.1",
+ "version": "0.2.2",
"repository": {
"url": "git://github.com/isaacs/promzard"
},
@@ -21,14 +21,28 @@
"test": "tap test/*.js"
},
"license": "ISC",
- "readme": "# promzard\n\nA prompting wizard for building files from specialized PromZard modules.\nUsed by `npm init`.\n\nA reimplementation of @SubStack's\n[prompter](https://github.com/substack/node-prompter), which does not\nuse AST traversal.\n\nFrom another point of view, it's a reimplementation of\n[@Marak](https://github.com/marak)'s\n[wizard](https://github.com/Marak/wizard) which doesn't use schemas.\n\nThe goal is a nice drop-in enhancement for `npm init`.\n\n## Usage\n\n```javascript\nvar promzard = require('promzard')\npromzard(inputFile, optionalContextAdditions, function (er, data) {\n // .. you know what you doing ..\n})\n```\n\nIn the `inputFile` you can have something like this:\n\n```javascript\nvar fs = require('fs')\nmodule.exports = {\n \"greeting\": prompt(\"Who shall you greet?\", \"world\", function (who) {\n return \"Hello, \" + who\n }),\n \"filename\": __filename,\n \"directory\": function (cb) {\n fs.readdir(__dirname, cb)\n }\n}\n```\n\nWhen run, promzard will display the prompts and resolve the async\nfunctions in order, and then either give you an error, or the resolved\ndata, ready to be dropped into a JSON file or some other place.\n\n\n### promzard(inputFile, ctx, callback)\n\nThe inputFile is just a node module. You can require() things, set\nmodule.exports, etc. Whatever that module exports is the result, and it\nis walked over to call any functions as described below.\n\nThe only caveat is that you must give PromZard the full absolute path\nto the module (you can get this via Node's `require.resolve`.) Also,\nthe `prompt` function is injected into the context object, so watch out.\n\nWhatever you put in that `ctx` will of course also be available in the\nmodule. You can get quite fancy with this, passing in existing configs\nand so on.\n\n### Class: promzard.PromZard(file, ctx)\n\nJust like the `promzard` function, but the EventEmitter that makes it\nall happen. Emits either a `data` event with the data, or a `error`\nevent if it blows up.\n\nIf `error` is emitted, then `data` never will be.\n\n### prompt(...)\n\nIn the promzard input module, you can call the `prompt` function.\nThis prompts the user to input some data. The arguments are interpreted\nbased on type:\n\n1. `string` The first string encountered is the prompt. The second is\n the default value.\n2. `function` A transformer function which receives the data and returns\n something else. More than meets the eye.\n3. `object` The `prompt` member is the prompt, the `default` member is\n the default value, and the `transform` is the transformer.\n\nWhatever the final value is, that's what will be put on the resulting\nobject.\n\n### Functions\n\nIf there are any functions on the promzard input module's exports, then\npromzard will call each of them with a callback. This way, your module\ncan do asynchronous actions if necessary to validate or ascertain\nwhatever needs verification.\n\nThe functions are called in the context of the ctx object, and are given\na single argument, which is a callback that should be called with either\nan error, or the result to assign to that spot.\n\nIn the async function, you can also call prompt() and return the result\nof the prompt in the callback.\n\nFor example, this works fine in a promzard module:\n\n```\nexports.asyncPrompt = function (cb) {\n fs.stat(someFile, function (er, st) {\n // if there's an error, no prompt, just error\n // otherwise prompt and use the actual file size as the default\n cb(er, prompt('file size', st.size))\n })\n}\n```\n\nYou can also return other async functions in the async function\ncallback. Though that's a bit silly, it could be a handy way to reuse\nfunctionality in some cases.\n\n### Sync vs Async\n\nThe `prompt()` function is not synchronous, though it appears that way.\nIt just returns a token that is swapped out when the data object is\nwalked over asynchronously later, and returns a token.\n\nFor that reason, prompt() calls whose results don't end up on the data\nobject are never shown to the user. For example, this will only prompt\nonce:\n\n```\nexports.promptThreeTimes = prompt('prompt me once', 'shame on you')\nexports.promptThreeTimes = prompt('prompt me twice', 'um....')\nexports.promptThreeTimes = prompt('you cant prompt me again')\n```\n\n### Isn't this exactly the sort of 'looks sync' that you said was bad about other libraries?\n\nYeah, sorta. I wouldn't use promzard for anything more complicated than\na wizard that spits out prompts to set up a config file or something.\nMaybe there are other use cases I haven't considered.\n",
- "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/promzard/issues"
},
"homepage": "https://github.com/isaacs/promzard",
- "_id": "promzard@0.2.1",
- "_shasum": "c4c7cbe5182465c13b43540be9daf47098b4e75b",
+ "_id": "promzard@0.2.2",
+ "_shasum": "918b9f2b29458cb001781a8856502e4a79b016e0",
"_from": "promzard@~0.2.0",
- "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.1.tgz"
+ "_npmVersion": "1.4.10",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "918b9f2b29458cb001781a8856502e4a79b016e0",
+ "tarball": "http://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
}
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/promzard.js b/deps/npm/node_modules/init-package-json/node_modules/promzard/promzard.js
index ef41ff7ec..3afb567f7 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/promzard.js
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/promzard.js
@@ -121,7 +121,7 @@ PromZard.prototype.makePrompt = function () {
else if (a && typeof a === 'object') {
p = a.prompt || p
d = a.default || d
- t = a.tranform || t
+ t = a.transform || t
}
}
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/test/basic.js b/deps/npm/node_modules/init-package-json/node_modules/promzard/test/basic.js
index af99df41c..ad1c92df9 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/test/basic.js
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/test/basic.js
@@ -70,10 +70,18 @@ tap.test('run the example', function (t) {
}
if (output.match(/keywords: $/)) {
c.stdin.write('fugazi function waiting room\n')
+ // "read" module is weird on node >= 0.10 when not a TTY
+ // requires explicit ending for reasons.
+ // could dig in, but really just wanna make tests pass, whatever.
+ c.stdin.end()
return
}
}
+ c.on('exit', function () {
+ console.error('exit event')
+ })
+
c.on('close', function () {
console.error('actual', actual)
actual = JSON.parse(actual)
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/test/exports.js b/deps/npm/node_modules/init-package-json/node_modules/promzard/test/exports.js
index a5f72d8bd..c17993a4e 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/test/exports.js
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/test/exports.js
@@ -20,7 +20,7 @@ test('exports', function (t) {
child.stdin.write('\n');
}, 100)
setTimeout(function () {
- child.stdin.write('55\n');
+ child.stdin.end('55\n');
}, 200)
child.on('close', function () {
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/test/fn.js b/deps/npm/node_modules/init-package-json/node_modules/promzard/test/fn.js
index 4ce803e73..899ebedbd 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/test/fn.js
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/test/fn.js
@@ -43,7 +43,7 @@ test('prompt callback param', function (t) {
child.stdin.write('55\n')
}, 150)
setTimeout(function () {
- child.stdin.write('async prompt\n')
+ child.stdin.end('async prompt\n')
}, 200)
})
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index 9ca7721cd..84d3814f8 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "init-package-json",
- "version": "0.0.16",
+ "version": "0.0.17",
"main": "init-package-json.js",
"scripts": {
"test": "tap test/*.js"
@@ -37,13 +37,29 @@
"prompt",
"start"
],
- "readme": "# init-package-json\n\nA node module to get your node module started.\n\n## Usage\n\n```javascript\nvar init = require('init-package-json')\nvar path = require('path')\n\n// a path to a promzard module. In the event that this file is\n// not found, one will be provided for you.\nvar initFile = path.resolve(process.env.HOME, '.npm-init')\n\n// the dir where we're doin stuff.\nvar dir = process.cwd()\n\n// extra stuff that gets put into the PromZard module's context.\n// In npm, this is the resolved config object. Exposed as 'config'\n// Optional.\nvar configData = { some: 'extra stuff' }\n\n// Any existing stuff from the package.json file is also exposed in the\n// PromZard module as the `package` object. There will also be free\n// vars for:\n// * `filename` path to the package.json file\n// * `basename` the tip of the package dir\n// * `dirname` the parent of the package dir\n\ninit(dir, initFile, configData, function (er, data) {\n // the data's already been written to {dir}/package.json\n // now you can do stuff with it\n})\n```\n\nOr from the command line:\n\n```\n$ npm-init\n```\n\nSee [PromZard](https://github.com/isaacs/promzard) for details about\nwhat can go in the config file.\n",
- "readmeFilename": "README.md",
+ "gitHead": "cbc53fbedd4246d62ec99ea3a61a113a07d21629",
"bugs": {
"url": "https://github.com/isaacs/init-package-json/issues"
},
"homepage": "https://github.com/isaacs/init-package-json",
- "_id": "init-package-json@0.0.16",
- "_shasum": "f7bb96fcb0a2c8061d15a2c3180323b17a65aa16",
- "_from": "init-package-json@latest"
+ "_id": "init-package-json@0.0.17",
+ "_shasum": "395f2cb8d1c5af93ba6ec19dafa64717047f90c3",
+ "_from": "init-package-json@latest",
+ "_npmVersion": "1.4.10",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "395f2cb8d1c5af93ba6ec19dafa64717047f90c3",
+ "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-0.0.17.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-0.0.17.tgz"
}
diff --git a/deps/npm/node_modules/minimatch/README.md b/deps/npm/node_modules/minimatch/README.md
index 978268e27..5b3967ea9 100644
--- a/deps/npm/node_modules/minimatch/README.md
+++ b/deps/npm/node_modules/minimatch/README.md
@@ -157,8 +157,8 @@ Perform a case-insensitive match.
### nonull
When a match is not found by `minimatch.match`, return a list containing
-the pattern itself. When set, an empty list is returned if there are
-no matches.
+the pattern itself if this option is set. When not set, an empty list
+is returned if there are no matches.
### matchBase
diff --git a/deps/npm/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/minimatch/minimatch.js
index c633f89fa..453967894 100644
--- a/deps/npm/node_modules/minimatch/minimatch.js
+++ b/deps/npm/node_modules/minimatch/minimatch.js
@@ -813,11 +813,12 @@ function makeRe () {
}
minimatch.match = function (list, pattern, options) {
+ options = options || {}
var mm = new Minimatch(pattern, options)
list = list.filter(function (f) {
return mm.match(f)
})
- if (options.nonull && !list.length) {
+ if (mm.options.nonull && !list.length) {
list.push(pattern)
}
return list
@@ -853,12 +854,17 @@ function match (f, partial) {
var set = this.set
this.debug(this.pattern, "set", set)
- var splitFile = path.basename(f.join("/")).split("/")
+ // Find the basename of the path by looking for the last non-empty segment
+ var filename;
+ for (var i = f.length - 1; i >= 0; i--) {
+ filename = f[i]
+ if (filename) break
+ }
for (var i = 0, l = set.length; i < l; i ++) {
var pattern = set[i], file = f
if (options.matchBase && pattern.length === 1) {
- file = splitFile
+ file = [filename]
}
var hit = this.matchOne(file, pattern, partial)
if (hit) {
@@ -975,7 +981,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) {
}
// no match was found.
// However, in partial mode, we can't say this is necessarily over.
- // If there's more *pattern* left, then
+ // If there's more *pattern* left, then
if (partial) {
// ran out of file
this.debug("\n>>> no match, partial?", file, fr, pattern, pr)
diff --git a/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json b/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
index cb7e2bd4b..6d0305d0d 100644
--- a/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
+++ b/deps/npm/node_modules/minimatch/node_modules/sigmund/package.json
@@ -32,11 +32,23 @@
},
"license": "BSD",
"readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/isaacs/sigmund/issues"
- },
- "homepage": "https://github.com/isaacs/sigmund",
"_id": "sigmund@1.0.0",
- "_from": "sigmund@~1.0.0"
+ "dist": {
+ "shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
+ "tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+ },
+ "_npmVersion": "1.1.48",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "_shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
+ "_from": "sigmund@~1.0.0",
+ "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
}
diff --git a/deps/npm/node_modules/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json
index 9dedca512..36d7df35d 100644
--- a/deps/npm/node_modules/minimatch/package.json
+++ b/deps/npm/node_modules/minimatch/package.json
@@ -6,7 +6,7 @@
},
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "0.2.14",
+ "version": "0.3.0",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
@@ -29,12 +29,28 @@
"type": "MIT",
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
},
- "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself. When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n",
- "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
"homepage": "https://github.com/isaacs/minimatch",
- "_id": "minimatch@0.2.14",
- "_from": "minimatch@latest"
+ "_id": "minimatch@0.3.0",
+ "_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
+ "_from": "minimatch@latest",
+ "_npmVersion": "1.4.10",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
}
diff --git a/deps/npm/node_modules/minimatch/test/defaults.js b/deps/npm/node_modules/minimatch/test/defaults.js
index 25f1f601c..75e05712d 100644
--- a/deps/npm/node_modules/minimatch/test/defaults.js
+++ b/deps/npm/node_modules/minimatch/test/defaults.js
@@ -237,7 +237,7 @@ tap.test("basic tests", function (t) {
var pattern = c[0]
, expect = c[1].sort(alpha)
- , options = c[2] || {}
+ , options = c[2]
, f = c[3] || files
, tapOpts = c[4] || {}
diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md
index ffe429c32..cba646e71 100644
--- a/deps/npm/node_modules/node-gyp/README.md
+++ b/deps/npm/node_modules/node-gyp/README.md
@@ -45,6 +45,21 @@ You will also need to install:
* Windows 7/8:
* Microsoft Visual Studio C++ 2012 for Windows Desktop ([Express][msvc2012] version works well)
+If you have multiple Python versions installed, you can identify which Python
+version `node-gyp` uses by setting the '--python' variable:
+
+``` bash
+$ node-gyp --python /path/to/python2.7
+```
+
+If `node-gyp` is called by way of `npm` *and* you have multiple versions of
+Python installed, then you can set `npm`'s 'python' config key to the appropriate
+value:
+
+``` bash
+$ npm config set python /path/to/executable/python2.7
+```
+
Note that OS X is just a flavour of Unix and so needs `python`, `make`, and C/C++.
An easy way to obtain these is to install XCode from Apple,
and then use it to install the command line tools (under Preferences -> Downloads).
diff --git a/deps/npm/node_modules/node-gyp/lib/configure.js b/deps/npm/node_modules/node-gyp/lib/configure.js
index 268c33625..68f26d6e1 100644
--- a/deps/npm/node_modules/node-gyp/lib/configure.js
+++ b/deps/npm/node_modules/node-gyp/lib/configure.js
@@ -327,6 +327,9 @@ function configure (gyp, argv, callback) {
// execute `gyp` from the current target nodedir
argv.unshift(gyp_script)
+ // make sure python uses files that came with this particular node package
+ process.env.PYTHONPATH = path.resolve(__dirname, '..', 'gyp', 'pylib')
+
var cp = gyp.spawn(python, argv)
cp.on('exit', onCpExit)
}
diff --git a/deps/npm/node_modules/node-gyp/lib/node-gyp.js b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
index 2ae08904b..df7ce8555 100644
--- a/deps/npm/node_modules/node-gyp/lib/node-gyp.js
+++ b/deps/npm/node_modules/node-gyp/lib/node-gyp.js
@@ -203,9 +203,6 @@ proto.usage = function usage () {
return ' - ' + c + ' - ' + require('./' + c).usage
}).join('\n')
, ''
- , ' for specific command usage and options try:'
- , ' $ node-gyp <command> --help'
- , ''
, 'node-gyp@' + this.version + ' ' + path.resolve(__dirname, '..')
, 'node@' + process.versions.node
].join('\n')
diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json
index c9dbae5a8..223e87b4b 100644
--- a/deps/npm/node_modules/node-gyp/package.json
+++ b/deps/npm/node_modules/node-gyp/package.json
@@ -10,7 +10,7 @@
"bindings",
"gyp"
],
- "version": "0.13.0",
+ "version": "0.13.1",
"installVersion": 9,
"author": {
"name": "Nathan Rajlich",
@@ -37,23 +37,40 @@
"osenv": "0",
"request": "2",
"rimraf": "2",
- "semver": "~2.2.1",
+ "semver": "2",
"tar": "0",
"which": "1"
},
"engines": {
"node": ">= 0.8.0"
},
- "readme": "node-gyp\n=========\n### Node.js native addon build tool\n\n`node-gyp` is a cross-platform command-line tool written in Node.js for compiling\nnative addon modules for Node.js, which takes away the pain of dealing with the\nvarious differences in build platforms. It is the replacement to the `node-waf`\nprogram which is removed for node `v0.8`. If you have a native addon for node that\nstill has a `wscript` file, then you should definitely add a `binding.gyp` file\nto support the latest versions of node.\n\nMultiple target versions of node are supported (i.e. `0.8`, `0.9`, `0.10`, ..., `1.0`,\netc.), regardless of what version of node is actually installed on your system\n(`node-gyp` downloads the necessary development files for the target version).\n\n#### Features:\n\n * Easy to use, consistent interface\n * Same commands to build your module on every platform\n * Supports multiple target versions of Node\n\n\nInstallation\n------------\n\nYou can install with `npm`:\n\n``` bash\n$ npm install -g node-gyp\n```\n\nYou will also need to install:\n\n * On Unix:\n * `python` (`v2.7` recommended, `v3.x.x` is __*not*__ supported)\n * `make`\n * A proper C/C++ compiler toolchain, like GCC\n * On Windows:\n * [Python][windows-python] ([`v2.7.3`][windows-python-v2.7.3] recommended, `v3.x.x` is __*not*__ supported)\n * Windows XP/Vista/7:\n * Microsoft Visual Studio C++ 2010 ([Express][msvc2010] version works well)\n * For 64-bit builds of node and native modules you will _**also**_ need the [Windows 7 64-bit SDK][win7sdk]\n * If the install fails, try uninstalling any C++ 2010 x64&x86 Redistributable that you have installed first.\n * If you get errors that the 64-bit compilers are not installed you may also need the [compiler update for the Windows SDK 7.1]\n * Windows 7/8:\n * Microsoft Visual Studio C++ 2012 for Windows Desktop ([Express][msvc2012] version works well)\n\nNote that OS X is just a flavour of Unix and so needs `python`, `make`, and C/C++.\nAn easy way to obtain these is to install XCode from Apple,\nand then use it to install the command line tools (under Preferences -> Downloads).\n\nHow to Use\n----------\n\nTo compile your native addon, first go to its root directory:\n\n``` bash\n$ cd my_node_addon\n```\n\nThe next step is to generate the appropriate project build files for the current\nplatform. Use `configure` for that:\n\n``` bash\n$ node-gyp configure\n```\n\n__Note__: The `configure` step looks for the `binding.gyp` file in the current\ndirectory to processs. See below for instructions on creating the `binding.gyp` file.\n\nNow you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file\n(on Windows) in the `build/` directory. Next invoke the `build` command:\n\n``` bash\n$ node-gyp build\n```\n\nNow you have your compiled `.node` bindings file! The compiled bindings end up\nin `build/Debug/` or `build/Release/`, depending on the build mode. At this point\nyou can require the `.node` file with Node and run your tests!\n\n__Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or\n`-d`) switch when running the either `configure` or `build` command.\n\n\nThe \"binding.gyp\" file\n----------------------\n\nPreviously when node had `node-waf` you had to write a `wscript` file. The\nreplacement for that is the `binding.gyp` file, which describes the configuration\nto build your module in a JSON-like format. This file gets placed in the root of\nyour package, alongside the `package.json` file.\n\nA barebones `gyp` file appropriate for building a node addon looks like:\n\n``` python\n{\n \"targets\": [\n {\n \"target_name\": \"binding\",\n \"sources\": [ \"src/binding.cc\" ]\n }\n ]\n}\n```\n\nSome additional resources for writing `gyp` files:\n\n * [\"Hello World\" node addon example](https://github.com/joyent/node/tree/master/test/addons/hello-world)\n * [gyp user documentation](http://code.google.com/p/gyp/wiki/GypUserDocumentation)\n * [gyp input format reference](http://code.google.com/p/gyp/wiki/InputFormatReference)\n * [*\"binding.gyp\" files out in the wild* wiki page](https://github.com/TooTallNate/node-gyp/wiki/%22binding.gyp%22-files-out-in-the-wild)\n\n\nCommands\n--------\n\n`node-gyp` responds to the following commands:\n\n| **Command** | **Description**\n|:--------------|:---------------------------------------------------------------\n| `build` | Invokes `make`/`msbuild.exe` and builds the native addon\n| `clean` | Removes any the `build` dir if it exists\n| `configure` | Generates project build files for the current platform\n| `rebuild` | Runs \"clean\", \"configure\" and \"build\" all in a row\n| `install` | Installs node development header files for the given version\n| `list` | Lists the currently installed node development file versions\n| `remove` | Removes the node development header files for the given version\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n[windows-python]: http://www.python.org/getit/windows\n[windows-python-v2.7.3]: http://www.python.org/download/releases/2.7.3#download\n[msvc2010]: http://go.microsoft.com/?linkid=9709949\n[msvc2012]: http://go.microsoft.com/?linkid=9816758\n[win7sdk]: http://www.microsoft.com/en-us/download/details.aspx?id=8279\n[compiler update for the Windows SDK 7.1]: http://www.microsoft.com/en-us/download/details.aspx?id=4422\n",
- "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/TooTallNate/node-gyp/issues"
},
"homepage": "https://github.com/TooTallNate/node-gyp",
- "_id": "node-gyp@0.13.0",
+ "_id": "node-gyp@0.13.1",
+ "_shasum": "5a484dd2dc13d5b894a8fe781a250c07eae7bffa",
+ "_from": "node-gyp@~0.13.0",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "tootallnate",
+ "email": "nathan@tootallnate.net"
+ },
+ "maintainers": [
+ {
+ "name": "TooTallNate",
+ "email": "nathan@tootallnate.net"
+ },
+ {
+ "name": "tootallnate",
+ "email": "nathan@tootallnate.net"
+ }
+ ],
"dist": {
- "shasum": "97765303203579f1445358d4d25d03645811d87d"
+ "shasum": "5a484dd2dc13d5b894a8fe781a250c07eae7bffa",
+ "tarball": "http://registry.npmjs.org/node-gyp/-/node-gyp-0.13.1.tgz"
},
- "_from": "node-gyp@latest",
- "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-0.13.0.tgz"
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-0.13.1.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/npm-cache-filename/LICENSE b/deps/npm/node_modules/npm-cache-filename/LICENSE
new file mode 100644
index 000000000..20a476254
--- /dev/null
+++ b/deps/npm/node_modules/npm-cache-filename/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) npm, Inc. and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/npm-cache-filename/README.md b/deps/npm/node_modules/npm-cache-filename/README.md
new file mode 100644
index 000000000..47bd08a49
--- /dev/null
+++ b/deps/npm/node_modules/npm-cache-filename/README.md
@@ -0,0 +1,21 @@
+# npm-cache-filename
+
+Given a cache folder and url, return the appropriate cache folder.
+
+## USAGE
+
+```javascript
+var cf = require('npm-cache-filename');
+console.log(cf('/tmp/cache', 'https://registry.npmjs.org:1234/foo/bar'));
+// outputs: /tmp/cache/registry.npmjs.org_1234/foo/bar
+```
+
+As a bonus, you can also bind it to a specific root path:
+
+```javascript
+var cf = require('npm-cache-filename');
+var getFile = cf('/tmp/cache');
+
+console.log(getFile('https://registry.npmjs.org:1234/foo/bar'));
+// outputs: /tmp/cache/registry.npmjs.org_1234/foo/bar
+```
diff --git a/deps/npm/node_modules/npm-cache-filename/index.js b/deps/npm/node_modules/npm-cache-filename/index.js
new file mode 100644
index 000000000..9fd2488d4
--- /dev/null
+++ b/deps/npm/node_modules/npm-cache-filename/index.js
@@ -0,0 +1,20 @@
+var url = require('url');;
+var path = require('path');;
+
+module.exports = cf;;
+
+function cf(root, u) {
+ if (!u)
+ return cf.bind(null, root);;
+
+ u = url.parse(u);;
+ var h = u.host.replace(/:/g, '_');;
+ // Strip off any /-rev/... or ?rev=... bits
+ var revre = /(\?rev=|\?.*?&rev=|\/-rev\/).*$/
+ var parts = u.path.replace(revre, '').split('/').slice(1)
+ var p = [root, h].concat(parts.map(function(part) {
+ return encodeURIComponent(part).replace(/%/g, '_');;
+ }));;
+
+ return path.join.apply(path, p);;
+}
diff --git a/deps/npm/node_modules/npm-cache-filename/package.json b/deps/npm/node_modules/npm-cache-filename/package.json
new file mode 100644
index 000000000..979450bc6
--- /dev/null
+++ b/deps/npm/node_modules/npm-cache-filename/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "npm-cache-filename",
+ "version": "1.0.1",
+ "description": "Given a cache folder and url, return the appropriate cache folder.",
+ "main": "index.js",
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "^0.4.10"
+ },
+ "scripts": {
+ "test": "tap test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/npm/npm-cache-filename"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/npm-cache-filename/issues"
+ },
+ "homepage": "https://github.com/npm/npm-cache-filename",
+ "readme": "# npm-cache-filename\n\nGiven a cache folder and url, return the appropriate cache folder.\n\n## USAGE\n\n```javascript\nvar cf = require('npm-cache-filename');\nconsole.log(cf('/tmp/cache', 'https://registry.npmjs.org:1234/foo/bar'));\n// outputs: /tmp/cache/registry.npmjs.org_1234/foo/bar\n```\n\nAs a bonus, you can also bind it to a specific root path:\n\n```javascript\nvar cf = require('npm-cache-filename');\nvar getFile = cf('/tmp/cache');\n\nconsole.log(getFile('https://registry.npmjs.org:1234/foo/bar'));\n// outputs: /tmp/cache/registry.npmjs.org_1234/foo/bar\n```\n",
+ "readmeFilename": "README.md",
+ "_id": "npm-cache-filename@1.0.1",
+ "_shasum": "9b640f0c1a5ba1145659685372a9ff71f70c4323",
+ "_from": "npm-cache-filename@latest",
+ "_resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.1.tgz"
+}
diff --git a/deps/npm/node_modules/npm-cache-filename/test.js b/deps/npm/node_modules/npm-cache-filename/test.js
new file mode 100644
index 000000000..5faecceb4
--- /dev/null
+++ b/deps/npm/node_modules/npm-cache-filename/test.js
@@ -0,0 +1,21 @@
+var test = require('tap').test;;
+test('it does the thing it says it does', function(t) {
+ var cf = require('./');;
+
+ t.equal(cf('/tmp/cache', 'https://foo:134/xyz?adf=foo:bar/baz'),
+ '/tmp/cache/foo_134/xyz_3Fadf_3Dfoo_3Abar/baz');;
+
+ var getFile = cf('/tmp/cache');;
+ t.equal(getFile('https://foo:134/xyz?adf=foo:bar/baz'),
+ '/tmp/cache/foo_134/xyz_3Fadf_3Dfoo_3Abar/baz');;
+
+ t.equal(cf("/tmp", "https://foo:134/xyz/-rev/baz"),
+ '/tmp/foo_134/xyz')
+ t.equal(cf("/tmp", "https://foo:134/xyz/?rev=baz"),
+ '/tmp/foo_134/xyz')
+ t.equal(cf("/tmp", "https://foo:134/xyz/?foo&rev=baz"),
+ '/tmp/foo_134/xyz')
+ t.equal(cf("/tmp", "https://foo:134/xyz-rev/baz"),
+ '/tmp/foo_134/xyz-rev/baz')
+ t.end();
+});;
diff --git a/deps/npm/node_modules/npm-install-checks/LICENSE b/deps/npm/node_modules/npm-install-checks/LICENSE
index 1a8fdb735..3bed8320c 100644
--- a/deps/npm/node_modules/npm-install-checks/LICENSE
+++ b/deps/npm/node_modules/npm-install-checks/LICENSE
@@ -1,7 +1,6 @@
-Copyright (c) Robert Kowalski ("Author")
+Copyright (c) Robert Kowalski and Isaac Z. Schlueter ("Authors")
All rights reserved.
-
The BSD License
Redistribution and use in source and binary forms, with or without
@@ -15,10 +14,10 @@ are met:
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
@@ -26,209 +25,3 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-This uses parts of npm, (c) Isaac Z. Schlueter, under the following license:
-
-
-The Artistic License 2.0
-
-Copyright (c) 2000-2006, The Perl Foundation.
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-Preamble
-
-This license establishes the terms under which a given free software
-Package may be copied, modified, distributed, and/or redistributed.
-The intent is that the Copyright Holder maintains some artistic
-control over the development of that Package while still keeping the
-Package available as open source and free software.
-
-You are always permitted to make arrangements wholly outside of this
-license directly with the Copyright Holder of a given Package. If the
-terms of this license do not permit the full use that you propose to
-make of the Package, you should contact the Copyright Holder and seek
-a different licensing arrangement.
-
-Definitions
-
- "Copyright Holder" means the individual(s) or organization(s)
- named in the copyright notice for the entire Package.
-
- "Contributor" means any party that has contributed code or other
- material to the Package, in accordance with the Copyright Holder's
- procedures.
-
- "You" and "your" means any person who would like to copy,
- distribute, or modify the Package.
-
- "Package" means the collection of files distributed by the
- Copyright Holder, and derivatives of that collection and/or of
- those files. A given Package may consist of either the Standard
- Version, or a Modified Version.
-
- "Distribute" means providing a copy of the Package or making it
- accessible to anyone else, or in the case of a company or
- organization, to others outside of your company or organization.
-
- "Distributor Fee" means any fee that you charge for Distributing
- this Package or providing support for this Package to another
- party. It does not mean licensing fees.
-
- "Standard Version" refers to the Package if it has not been
- modified, or has been modified only in ways explicitly requested
- by the Copyright Holder.
-
- "Modified Version" means the Package, if it has been changed, and
- such changes were not explicitly requested by the Copyright
- Holder.
-
- "Original License" means this Artistic License as Distributed with
- the Standard Version of the Package, in its current version or as
- it may be modified by The Perl Foundation in the future.
-
- "Source" form means the source code, documentation source, and
- configuration files for the Package.
-
- "Compiled" form means the compiled bytecode, object code, binary,
- or any other form resulting from mechanical transformation or
- translation of the Source form.
-
-
-Permission for Use and Modification Without Distribution
-
-(1) You are permitted to use the Standard Version and create and use
-Modified Versions for any purpose without restriction, provided that
-you do not Distribute the Modified Version.
-
-
-Permissions for Redistribution of the Standard Version
-
-(2) You may Distribute verbatim copies of the Source form of the
-Standard Version of this Package in any medium without restriction,
-either gratis or for a Distributor Fee, provided that you duplicate
-all of the original copyright notices and associated disclaimers. At
-your discretion, such verbatim copies may or may not include a
-Compiled form of the Package.
-
-(3) You may apply any bug fixes, portability changes, and other
-modifications made available from the Copyright Holder. The resulting
-Package will still be considered the Standard Version, and as such
-will be subject to the Original License.
-
-
-Distribution of Modified Versions of the Package as Source
-
-(4) You may Distribute your Modified Version as Source (either gratis
-or for a Distributor Fee, and with or without a Compiled form of the
-Modified Version) provided that you clearly document how it differs
-from the Standard Version, including, but not limited to, documenting
-any non-standard features, executables, or modules, and provided that
-you do at least ONE of the following:
-
- (a) make the Modified Version available to the Copyright Holder
- of the Standard Version, under the Original License, so that the
- Copyright Holder may include your modifications in the Standard
- Version.
-
- (b) ensure that installation of your Modified Version does not
- prevent the user installing or running the Standard Version. In
- addition, the Modified Version must bear a name that is different
- from the name of the Standard Version.
-
- (c) allow anyone who receives a copy of the Modified Version to
- make the Source form of the Modified Version available to others
- under
-
- (i) the Original License or
-
- (ii) a license that permits the licensee to freely copy,
- modify and redistribute the Modified Version using the same
- licensing terms that apply to the copy that the licensee
- received, and requires that the Source form of the Modified
- Version, and of any works derived from it, be made freely
- available in that license fees are prohibited but Distributor
- Fees are allowed.
-
-
-Distribution of Compiled Forms of the Standard Version
-or Modified Versions without the Source
-
-(5) You may Distribute Compiled forms of the Standard Version without
-the Source, provided that you include complete instructions on how to
-get the Source of the Standard Version. Such instructions must be
-valid at the time of your distribution. If these instructions, at any
-time while you are carrying out such distribution, become invalid, you
-must provide new instructions on demand or cease further distribution.
-If you provide valid instructions or cease distribution within thirty
-days after you become aware that the instructions are invalid, then
-you do not forfeit any of your rights under this license.
-
-(6) You may Distribute a Modified Version in Compiled form without
-the Source, provided that you comply with Section 4 with respect to
-the Source of the Modified Version.
-
-
-Aggregating or Linking the Package
-
-(7) You may aggregate the Package (either the Standard Version or
-Modified Version) with other packages and Distribute the resulting
-aggregation provided that you do not charge a licensing fee for the
-Package. Distributor Fees are permitted, and licensing fees for other
-components in the aggregation are permitted. The terms of this license
-apply to the use and Distribution of the Standard or Modified Versions
-as included in the aggregation.
-
-(8) You are permitted to link Modified and Standard Versions with
-other works, to embed the Package in a larger work of your own, or to
-build stand-alone binary or bytecode versions of applications that
-include the Package, and Distribute the result without restriction,
-provided the result does not expose a direct interface to the Package.
-
-
-Items That are Not Considered Part of a Modified Version
-
-(9) Works (including, but not limited to, modules and scripts) that
-merely extend or make use of the Package, do not, by themselves, cause
-the Package to be a Modified Version. In addition, such works are not
-considered parts of the Package itself, and are not subject to the
-terms of this license.
-
-
-General Provisions
-
-(10) Any use, modification, and distribution of the Standard or
-Modified Versions is governed by this Artistic License. By using,
-modifying or distributing the Package, you accept this license. Do not
-use, modify, or distribute the Package, if you do not accept this
-license.
-
-(11) If your Modified Version has been derived from a Modified
-Version made by someone other than you, you are nevertheless required
-to ensure that your Modified Version complies with the requirements of
-this license.
-
-(12) This license does not grant you the right to use any trademark,
-service mark, tradename, or logo of the Copyright Holder.
-
-(13) This license includes the non-exclusive, worldwide,
-free-of-charge patent license to make, have made, use, offer to sell,
-sell, import and otherwise transfer the Package with respect to any
-patent claims licensable by the Copyright Holder that are necessarily
-infringed by the Package. If you institute patent litigation
-(including a cross-claim or counterclaim) against any party alleging
-that the Package constitutes direct or contributory patent
-infringement, then this Artistic License to you shall terminate on the
-date that such litigation is filed.
-
-(14) Disclaimer of Warranty:
-THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
-IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
-NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
-LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/npm-install-checks/package.json b/deps/npm/node_modules/npm-install-checks/package.json
index 39b7adf99..a4e8695ca 100644
--- a/deps/npm/node_modules/npm-install-checks/package.json
+++ b/deps/npm/node_modules/npm-install-checks/package.json
@@ -1,11 +1,11 @@
{
"name": "npm-install-checks",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "checks that npm runs during the installation of a module",
"main": "index.js",
"dependencies": {
"npmlog": "0.0.6",
- "semver": "~2.2.1"
+ "semver": "^2.3.0"
},
"devDependencies": {
"tap": "~0.4.8",
@@ -17,9 +17,9 @@
},
"repository": {
"type": "git",
- "url": "git://github.com/robertkowalski/npm-install-checks.git"
+ "url": "git://github.com/npm/npm-install-checks.git"
},
- "homepage": "https://github.com/robertkowalski/npm-install-checks",
+ "homepage": "https://github.com/npm/npm-install-checks",
"keywords": [
"npm,",
"install"
@@ -30,14 +30,11 @@
},
"license": "BSD-2-Clause",
"bugs": {
- "url": "https://github.com/robertkowalski/npm-install-checks/issues"
+ "url": "https://github.com/npm/npm-install-checks/issues"
},
"readme": "# npm-install-checks\n\nA package that contains checks that npm runs during the installation.\n\n## API\n\n### .checkEngine(target, npmVer, nodeVer, force, strict, cb)\nCheck if node/npm version is supported by the package.\n\nError type: `ENOTSUP`\n\n### .checkPlatform(target, force, cb)\nCheck if OS/Arch is supported by the package.\n\nError type: `EBADPLATFORM`\n\n### .checkCycle(target, ancestors, cb)\nCheck for cyclic dependencies.\n\nError type: `ECYCLE`\n\n### .checkGit(folder, cb)\nCheck if a folder is a .git folder.\n\nError type: `EISGIT`\n",
"readmeFilename": "README.md",
- "_id": "npm-install-checks@1.0.0",
- "dist": {
- "shasum": "7e1469b5e0c693b2ae2a8830b5fc4e7bf76c88fd"
- },
- "_from": "npm-install-checks@1.0.0",
- "_resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.0.tgz"
+ "_id": "npm-install-checks@1.0.1",
+ "_shasum": "547a73dec58acfd52365012e60de9418b6405101",
+ "_from": "npm-install-checks@~1.0.0"
}
diff --git a/deps/npm/node_modules/npm-registry-client/README.md b/deps/npm/node_modules/npm-registry-client/README.md
index 6cef754df..4b3d4c3c6 100644
--- a/deps/npm/node_modules/npm-registry-client/README.md
+++ b/deps/npm/node_modules/npm-registry-client/README.md
@@ -113,11 +113,10 @@ Get the url for bugs of a package
Fetches data from the registry via a GET request, saving it in
the cache folder with the ETag.
-# client.publish(data, tarball, [readme], cb)
+# client.publish(data, tarball, cb)
* `data` {Object} Package data
* `tarball` {String | Stream} Filename or stream of the package tarball
-* `readme` {String} Contents of the README markdown file
* `cb` {Function}
Publish a package to the registry.
diff --git a/deps/npm/node_modules/npm-registry-client/index.js b/deps/npm/node_modules/npm-registry-client/index.js
index 24c33ae44..eac60d605 100644
--- a/deps/npm/node_modules/npm-registry-client/index.js
+++ b/deps/npm/node_modules/npm-registry-client/index.js
@@ -6,6 +6,7 @@ var fs = require('fs')
, url = require('url')
, path = require('path')
, npmlog
+, cacheFile = require('npm-cache-filename')
try {
npmlog = require("npmlog")
@@ -45,7 +46,10 @@ function RegClient (conf) {
registry = null
}
+ this.registry = registry
+
if (!conf.get('cache')) throw new Error("Cache dir is required")
+ this.cacheFile = cacheFile(this.conf.get('cache'))
this.log = conf.log || conf.get('log') || npmlog
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/adduser.js b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
index a4581a6c8..5a76b028c 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/adduser.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/adduser.js
@@ -1,11 +1,5 @@
module.exports = adduser
-var crypto = require('crypto')
-
-function sha (s) {
- return crypto.createHash("sha1").update(s).digest("hex")
-}
-
function adduser (username, password, email, cb) {
password = ("" + (password || "")).trim()
@@ -17,12 +11,7 @@ function adduser (username, password, email, cb) {
return cb(new Error("Please use a real email address."))
}
- if (password.indexOf(":") !== -1) return cb(new Error(
- "Sorry, ':' chars are not allowed in passwords.\n"+
- "See <https://issues.apache.org/jira/browse/COUCHDB-969> for why."))
-
- var salt = crypto.randomBytes(30).toString('hex')
- , userobj =
+ var userobj =
{ name : username
, password : password
, email : email
diff --git a/deps/npm/node_modules/npm-registry-client/lib/deprecate.js b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
index 4a2f9af24..9cbc6d88e 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/deprecate.js
@@ -12,8 +12,6 @@ function deprecate (name, ver, message, cb) {
return cb(new Error("invalid version range: "+ver))
}
- var users = {}
-
this.get(name + '?write=true', function (er, data) {
if (er) return cb(er)
// filter all the versions that match
diff --git a/deps/npm/node_modules/npm-registry-client/lib/get.js b/deps/npm/node_modules/npm-registry-client/lib/get.js
index bb6d525b8..9aab7d7b0 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/get.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/get.js
@@ -10,7 +10,6 @@ function get (uri, timeout, nofollow, staleOk, cb) {
if (typeof cb !== "function") cb = staleOk, staleOk = false
if (typeof cb !== "function") cb = nofollow, nofollow = false
if (typeof cb !== "function") cb = timeout, timeout = -1
- if (typeof cb !== "function") cb = version, version = null
timeout = Math.min(timeout, this.conf.get('cache-max') || 0)
timeout = Math.max(timeout, this.conf.get('cache-min') || -Infinity)
@@ -22,18 +21,15 @@ function get (uri, timeout, nofollow, staleOk, cb) {
&& process.env.COMP_POINT !== undefined
) timeout = Math.max(timeout, 60000)
+ var cache = this.cacheFile(this.registry + uri) + "/.cache.json"
+
// /-/all is special.
// It uses timestamp-based caching and partial updates,
// because it is a monster.
if (uri === "/-/all") {
- return requestAll.call(this, cb)
+ return requestAll.call(this, cache, cb)
}
- var cacheUri = uri
- // on windows ":" is not an allowed character in a foldername
- cacheUri = cacheUri.replace(/:/g, '_').replace(/\?write=true$/, '')
- var cache = path.join(this.conf.get('cache'), cacheUri, ".cache.json")
-
// If the GET is part of a write operation (PUT or DELETE), then
// skip past the cache entirely, but still save the results.
if (uri.match(/\?write=true$/))
@@ -50,27 +46,25 @@ function get (uri, timeout, nofollow, staleOk, cb) {
}.bind(this))
}
-function requestAll (cb) {
- var cache = path.join(this.conf.get('cache'), "/-/all", ".cache.json")
-
- mkdir(path.join(this.conf.get('cache'), "-", "all"), function (er) {
+function requestAll (cache, cb) {
+ mkdir(path.dirname(cache), function (er) {
fs.readFile(cache, function (er, data) {
- if (er) return requestAll_.call(this, 0, {}, cb)
+ if (er) return requestAll_.call(this, 0, {}, cache, cb)
try {
data = JSON.parse(data)
} catch (ex) {
fs.writeFile(cache, "{}", function (er) {
if (er) return cb(new Error("Broken cache."))
- return requestAll_.call(this, 0, {}, cb)
+ return requestAll_.call(this, 0, {}, cache, cb)
}.bind(this))
}
var t = +data._updated || 0
- requestAll_.call(this, t, data, cb)
+ requestAll_.call(this, t, data, cache, cb)
}.bind(this))
}.bind(this))
}
-function requestAll_ (c, data, cb) {
+function requestAll_ (c, data, cache, cb) {
// use the cache and update in the background if it's not too old
if (Date.now() - c < 60000) {
cb(null, data)
@@ -84,7 +78,6 @@ function requestAll_ (c, data, cb) {
uri = "/-/all"
}
- var cache = path.join(this.conf.get('cache'), "-/all", ".cache.json")
this.request('GET', uri, function (er, updates, _, res) {
if (er) return cb(er, data)
var headers = res.headers
diff --git a/deps/npm/node_modules/npm-registry-client/lib/publish.js b/deps/npm/node_modules/npm-registry-client/lib/publish.js
index d6525eb78..2a503802a 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/publish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/publish.js
@@ -1,8 +1,7 @@
module.exports = publish
-var path = require("path")
- , url = require("url")
+var url = require("url")
, semver = require("semver")
, crypto = require("crypto")
, fs = require("fs")
@@ -29,14 +28,14 @@ function publish (data, tarball, cb) {
var self = this
fs.stat(tarball, function(er, s) {
if (er) return cb(er)
- fs.readFile(tarball, 'base64', function(er, tardata) {
+ fs.readFile(tarball, function(er, tarbuffer) {
if (er) return cb(er)
- putFirst.call(self, data, tardata, s, username, email, cb)
+ putFirst.call(self, data, tarbuffer, s, username, email, cb)
})
})
}
-function putFirst (data, tardata, stat, username, email, cb) {
+function putFirst (data, tarbuffer, stat, username, email, cb) {
// optimistically try to PUT all in one single atomic thing.
// If 409, then GET and merge, try again.
// If other error, then fail.
@@ -66,14 +65,14 @@ function putFirst (data, tardata, stat, username, email, cb) {
data._id = data.name+"@"+data.version
data.dist = data.dist || {}
- data.dist.shasum = crypto.createHash("sha1").update(tardata, 'base64').digest("hex")
+ data.dist.shasum = crypto.createHash("sha1").update(tarbuffer).digest("hex")
data.dist.tarball = url.resolve(registry, tbURI)
.replace(/^https:\/\//, "http://")
root._attachments = {}
root._attachments[ tbName ] = {
content_type: 'application/octet-stream',
- data: tardata,
+ data: tarbuffer.toString('base64'),
length: stat.size
};
diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js
index 72401e60e..4af0b8ff3 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/request.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/request.js
@@ -2,13 +2,13 @@ module.exports = regRequest
var url = require("url")
, zlib = require("zlib")
- , fs = require("graceful-fs")
, rm = require("rimraf")
, asyncMap = require("slide").asyncMap
, Stream = require("stream").Stream
, request = require("request")
, retry = require("retry")
, crypto = require("crypto")
+ , pkg = require("../package.json")
function regRequest (method, where, what, etag, nofollow, cb_) {
if (typeof cb_ !== "function") cb_ = nofollow, nofollow = false
@@ -79,7 +79,7 @@ function regRequest (method, where, what, etag, nofollow, cb_) {
if (authRequired && !auth) {
return cb(new Error(
- "Cannot insert data into the registry without auth"))
+ "This request requires auth credentials. Run `npm login` and repeat the request."))
}
if (auth && authRequired) {
@@ -101,7 +101,7 @@ function regRequest (method, where, what, etag, nofollow, cb_) {
+ " at " + (new Date()).toLocaleTimeString())
makeRequest.call(self, method, remote, where, what, etag, nofollow
, function (er, parsed, raw, response) {
- if (!er || er.message.match(/^SSL Error/)) {
+ if (!er || (er.message && er.message.match(/^SSL Error/))) {
if (er)
er.code = 'ESSL'
return cb(er, parsed, raw, response)
@@ -149,6 +149,7 @@ function makeRequest (method, remote, where, what, etag, nofollow, cb_) {
}
headers['npm-session'] = this.sessionToken
+ headers.version = this.version || pkg.version
if (this.refer) {
headers.referer = this.refer
@@ -255,7 +256,7 @@ function requestDone (method, where, cb) {
, null, data, response )
}
- var er = null
+ er = null
if (parsed && response.headers.etag) {
parsed._etag = response.headers.etag
}
@@ -280,26 +281,7 @@ function requestDone (method, where, cb) {
// from thinking that it didn't work when it did.
// Note that failure is an acceptable option here, since the
// only result will be a stale cache for some helper commands.
- var path = require("path")
- , p = url.parse(where).pathname.split("/")
- , _ = "/"
- , caches = p.map(function (part) {
- part = part.replace(/:/g, "_")
- return _ = path.join(_, part)
- }).map(function (cache) {
- return path.join(this.conf.get('cache'), cache, ".cache.json")
- }, this)
-
- // if the method is DELETE, then also remove the thing itself.
- // Note that the search index is probably invalid. Whatever.
- // That's what you get for deleting stuff. Don't do that.
- if (method === "DELETE") {
- p = p.slice(0, p.indexOf("-rev"))
- p = p.join("/").replace(/:/g, "_")
- caches.push(path.join(this.conf.get('cache'), p))
- }
-
- asyncMap(caches, rm, function () {})
+ rm(this.cacheFile(where), function() {})
}
return cb(er, parsed, data, response)
}.bind(this)
diff --git a/deps/npm/node_modules/npm-registry-client/lib/star.js b/deps/npm/node_modules/npm-registry-client/lib/star.js
index 5c2375d04..23fbd9169 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/star.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/star.js
@@ -5,8 +5,6 @@ function star (package, starred, cb) {
if (!this.conf.get('username')) return cb(new Error(
"Must be logged in to star/unstar packages"))
- var users = {}
-
this.request("GET", package + '?write=true', function (er, fullData) {
if (er) return cb(er)
diff --git a/deps/npm/node_modules/npm-registry-client/lib/stars.js b/deps/npm/node_modules/npm-registry-client/lib/stars.js
index 93f0d708f..4ef57e271 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/stars.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/stars.js
@@ -1,5 +1,3 @@
-var qs = require('querystring')
-
module.exports = stars
function stars (name, cb) {
diff --git a/deps/npm/node_modules/npm-registry-client/lib/tag.js b/deps/npm/node_modules/npm-registry-client/lib/tag.js
index 96136b717..d7ebf08a6 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/tag.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/tag.js
@@ -1,6 +1,6 @@
module.exports = tag
-function tag (project, version, tag, cb) {
- this.request("PUT", project+"/"+tag, JSON.stringify(version), cb)
+function tag (project, version, tagName, cb) {
+ this.request("PUT", project+"/"+tagName, JSON.stringify(version), cb)
}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
index 4bbbb347e..1887a99e6 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/unpublish.js
@@ -29,10 +29,11 @@ function unpublish (name, ver, cb) {
var versions = data.versions || {}
, versionPublic = versions.hasOwnProperty(ver)
+ var dist
if (!versionPublic) {
this.log.info("unpublish", name+"@"+ver+" not published")
} else {
- var dist = versions[ver].dist
+ dist = versions[ver].dist
this.log.verbose("unpublish", "removing attachments", dist)
}
diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json
index f7e876eaa..c5b1cec6d 100644
--- a/deps/npm/node_modules/npm-registry-client/package.json
+++ b/deps/npm/node_modules/npm-registry-client/package.json
@@ -6,7 +6,7 @@
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "0.4.8",
+ "version": "1.0.0",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client"
},
@@ -15,14 +15,15 @@
"test": "tap test/*.js"
},
"dependencies": {
- "request": "2 >=2.25.0",
- "graceful-fs": "~2.0.0",
- "semver": "^2.2.1",
- "slide": "~1.1.3",
"chownr": "0",
+ "graceful-fs": "~2.0.0",
"mkdirp": "~0.3.3",
- "rimraf": "~2",
+ "npm-cache-filename": "^1.0.0",
+ "request": "2 >=2.25.0",
"retry": "0.6.0",
+ "rimraf": "~2",
+ "semver": "2 >=2.2.1",
+ "slide": "~1.1.3",
"npmlog": ""
},
"devDependencies": {
@@ -32,13 +33,13 @@
"npmlog": ""
},
"license": "BSD",
- "readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\n\nclient.get(\"npm\", \"latest\", 1000, function (er, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Configuration\n\nThis program is designed to work with\n[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\na plain-jane object with the appropriate configs, and it'll shim it\nfor you. Any configuration thingie that has get/set/del methods will\nalso be accepted.\n\n* `registry` **Required** {String} URL to the registry\n* `cache` **Required** {String} Path to the cache folder\n* `always-auth` {Boolean} Auth even for GET requests.\n* `auth` {String} A base64-encoded `username:password`\n* `email` {String} User's email address\n* `tag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `ca` {String} Cerficate signing authority certificates to trust.\n* `cert` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates\n* `key` {String} Private key (PEM encoded) for client certificate 'cert'\n* `strict-ssl` {Boolean} Whether or not to be strict with SSL\n certificates. Default = `true`\n* `user-agent` {String} User agent header to send. Default =\n `\"node/{process.version} {process.platform} {process.arch}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `fetch-retries` {Number} Number of times to retry on GET failures.\n Default=2\n* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\n* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\n Default=10000 (10 seconds)\n* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default=60000 (60 seconds)\n* `proxy` {URL} The url to proxy requests through.\n* `https-proxy` {URL} The url to proxy https requests through.\n Defaults to be the same as `proxy` if unset.\n* `_auth` {String} The base64-encoded authorization header.\n* `username` `_password` {String} Username/password to use to generate\n `_auth` if not supplied.\n* `_token` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login)\n\n# client.request(method, where, [what], [etag], [nofollow], cb)\n\n* `method` {String} HTTP method\n* `where` {String} Path to request on the server\n* `what` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON.\n* `etag` {String} The cached ETag\n* `nofollow` {Boolean} Prevent following 302/301 responses\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a request to the registry. All the other methods are wrappers\naround this. one.\n\n# client.adduser(username, password, email, cb)\n\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `cb` {Function}\n\nAdd a user account to the registry, or verify the credentials.\n\n# client.deprecate(name, version, message, cb)\n\n* `name` {String} The package name\n* `version` {String} Semver version range\n* `message` {String} The message to use as a deprecation warning\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n# client.bugs(name, cb)\n\n* `name` {String} the name of the package\n* `cb` {Function}\n\nGet the url for bugs of a package\n\n# client.get(url, [timeout], [nofollow], [staleOk], cb)\n\n* `url` {String} The url path to fetch\n* `timeout` {Number} Number of seconds old that a cached copy must be\n before a new request will be made.\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `staleOk` {Boolean} If there's cached data available, then return that\n to the callback quickly, and update the cache the background.\n\nFetches data from the registry via a GET request, saving it in\nthe cache folder with the ETag.\n\n# client.publish(data, tarball, [readme], cb)\n\n* `data` {Object} Package data\n* `tarball` {String | Stream} Filename or stream of the package tarball\n* `readme` {String} Contents of the README markdown file\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder. However, it\ncan accept a gzipped tar stream or a filename to a tarball.\n\n# client.star(package, starred, cb)\n\n* `package` {String} Name of the package to star\n* `starred` {Boolean} True to star the package, false to unstar it.\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or\nunstar a package, though other writes do require that the user be the\npackage owner.\n\n# client.stars(username, cb)\n\n* `username` {String} Name of user to fetch starred packages for.\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n# client.tag(project, version, tag, cb)\n\n* `project` {String} Project name\n* `version` {String} Version to tag\n* `tag` {String} Tag name to apply\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag`\nwill fetch the specified version.\n\n# client.unpublish(name, [ver], cb)\n\n* `name` {String} package name\n* `ver` {String} version to unpublish. Leave blank to unpublish all\n versions.\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When\nthe last version us unpublished, the entire document is removed from the\ndatabase.\n\n# client.upload(where, file, [etag], [nofollow], cb)\n\n* `where` {String} URL path to upload to\n* `file` {String | Stream} Either the filename or a readable stream\n* `etag` {String} Cache ETag\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `cb` {Function}\n\nUpload an attachment. Mostly used by `client.publish()`.\n",
+ "readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\n\nclient.get(\"npm\", \"latest\", 1000, function (er, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Configuration\n\nThis program is designed to work with\n[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\na plain-jane object with the appropriate configs, and it'll shim it\nfor you. Any configuration thingie that has get/set/del methods will\nalso be accepted.\n\n* `registry` **Required** {String} URL to the registry\n* `cache` **Required** {String} Path to the cache folder\n* `always-auth` {Boolean} Auth even for GET requests.\n* `auth` {String} A base64-encoded `username:password`\n* `email` {String} User's email address\n* `tag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `ca` {String} Cerficate signing authority certificates to trust.\n* `cert` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates\n* `key` {String} Private key (PEM encoded) for client certificate 'cert'\n* `strict-ssl` {Boolean} Whether or not to be strict with SSL\n certificates. Default = `true`\n* `user-agent` {String} User agent header to send. Default =\n `\"node/{process.version} {process.platform} {process.arch}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `fetch-retries` {Number} Number of times to retry on GET failures.\n Default=2\n* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\n* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\n Default=10000 (10 seconds)\n* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default=60000 (60 seconds)\n* `proxy` {URL} The url to proxy requests through.\n* `https-proxy` {URL} The url to proxy https requests through.\n Defaults to be the same as `proxy` if unset.\n* `_auth` {String} The base64-encoded authorization header.\n* `username` `_password` {String} Username/password to use to generate\n `_auth` if not supplied.\n* `_token` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login)\n\n# client.request(method, where, [what], [etag], [nofollow], cb)\n\n* `method` {String} HTTP method\n* `where` {String} Path to request on the server\n* `what` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON.\n* `etag` {String} The cached ETag\n* `nofollow` {Boolean} Prevent following 302/301 responses\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a request to the registry. All the other methods are wrappers\naround this. one.\n\n# client.adduser(username, password, email, cb)\n\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `cb` {Function}\n\nAdd a user account to the registry, or verify the credentials.\n\n# client.deprecate(name, version, message, cb)\n\n* `name` {String} The package name\n* `version` {String} Semver version range\n* `message` {String} The message to use as a deprecation warning\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n# client.bugs(name, cb)\n\n* `name` {String} the name of the package\n* `cb` {Function}\n\nGet the url for bugs of a package\n\n# client.get(url, [timeout], [nofollow], [staleOk], cb)\n\n* `url` {String} The url path to fetch\n* `timeout` {Number} Number of seconds old that a cached copy must be\n before a new request will be made.\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `staleOk` {Boolean} If there's cached data available, then return that\n to the callback quickly, and update the cache the background.\n\nFetches data from the registry via a GET request, saving it in\nthe cache folder with the ETag.\n\n# client.publish(data, tarball, cb)\n\n* `data` {Object} Package data\n* `tarball` {String | Stream} Filename or stream of the package tarball\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder. However, it\ncan accept a gzipped tar stream or a filename to a tarball.\n\n# client.star(package, starred, cb)\n\n* `package` {String} Name of the package to star\n* `starred` {Boolean} True to star the package, false to unstar it.\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or\nunstar a package, though other writes do require that the user be the\npackage owner.\n\n# client.stars(username, cb)\n\n* `username` {String} Name of user to fetch starred packages for.\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n# client.tag(project, version, tag, cb)\n\n* `project` {String} Project name\n* `version` {String} Version to tag\n* `tag` {String} Tag name to apply\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag`\nwill fetch the specified version.\n\n# client.unpublish(name, [ver], cb)\n\n* `name` {String} package name\n* `ver` {String} version to unpublish. Leave blank to unpublish all\n versions.\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When\nthe last version us unpublished, the entire document is removed from the\ndatabase.\n\n# client.upload(where, file, [etag], [nofollow], cb)\n\n* `where` {String} URL path to upload to\n* `file` {String | Stream} Either the filename or a readable stream\n* `etag` {String} Cache ETag\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `cb` {Function}\n\nUpload an attachment. Mostly used by `client.publish()`.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
"homepage": "https://github.com/isaacs/npm-registry-client",
- "_id": "npm-registry-client@0.4.8",
- "_shasum": "a6685a161033101be6064b7af887ab440e8695d0",
- "_from": "npm-registry-client@~0.4.7"
+ "_id": "npm-registry-client@1.0.0",
+ "_shasum": "2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5",
+ "_from": "npm-registry-client@1"
}
diff --git a/deps/npm/node_modules/npm-user-validate/README.md b/deps/npm/node_modules/npm-user-validate/README.md
index 5e34f0aa0..53bdae5af 100644
--- a/deps/npm/node_modules/npm-user-validate/README.md
+++ b/deps/npm/node_modules/npm-user-validate/README.md
@@ -1,6 +1,6 @@
-[![Build Status](https://travis-ci.org/robertkowalski/npm-user-validate.png?branch=master)](https://travis-ci.org/robertkowalski/npm-user-validate)
-[![devDependency Status](https://david-dm.org/robertkowalski/npm-user-validate/dev-status.png)](https://david-dm.org/robertkowalski/npm-user-validate#info=devDependencies)
+[![Build Status](https://travis-ci.org/npm/npm-user-validate.png?branch=master)](https://travis-ci.org/npm/npm-user-validate)
+[![devDependency Status](https://david-dm.org/npm/npm-user-validate/dev-status.png)](https://david-dm.org/npm/npm-user-validate#info=devDependencies)
# npm-user-validate
-Validation for the npm client and npm-www (and probably other npm projects) \ No newline at end of file
+Validation for the npm client and npm-www (and probably other npm projects)
diff --git a/deps/npm/node_modules/npm-user-validate/npm-user-validate.js b/deps/npm/node_modules/npm-user-validate/npm-user-validate.js
index 853456f52..f18e13ccf 100644
--- a/deps/npm/node_modules/npm-user-validate/npm-user-validate.js
+++ b/deps/npm/node_modules/npm-user-validate/npm-user-validate.js
@@ -8,9 +8,7 @@ var requirements = exports.requirements = {
urlSafe: 'Username may not contain non-url-safe chars',
dot: 'Username may not start with "."'
},
- password: {
- badchars: 'Password passwords cannot contain these characters: \'!:@"'
- },
+ password: {},
email: {
valid: 'Email must be an email address'
}
@@ -41,9 +39,5 @@ function email (em) {
}
function pw (pw) {
- if (pw.match(/['!:@"]/)) {
- return new Error(requirements.password.badchars)
- }
-
return null
}
diff --git a/deps/npm/node_modules/npm-user-validate/package.json b/deps/npm/node_modules/npm-user-validate/package.json
index a05b95ef1..b9377c771 100644
--- a/deps/npm/node_modules/npm-user-validate/package.json
+++ b/deps/npm/node_modules/npm-user-validate/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-user-validate",
- "version": "0.0.3",
+ "version": "0.1.0",
"description": "User validations for npm",
"main": "npm-user-validate.js",
"devDependencies": {
@@ -11,7 +11,7 @@
},
"repository": {
"type": "git",
- "url": "https://github.com/robertkowalski/npm-user-validate"
+ "url": "git://github.com/npm/npm-registry-mock.git"
},
"keywords": [
"npm",
@@ -23,15 +23,13 @@
"email": "rok@kowalski.gd"
},
"license": "BSD",
- "readme": "[![Build Status](https://travis-ci.org/robertkowalski/npm-user-validate.png?branch=master)](https://travis-ci.org/robertkowalski/npm-user-validate)\n[![devDependency Status](https://david-dm.org/robertkowalski/npm-user-validate/dev-status.png)](https://david-dm.org/robertkowalski/npm-user-validate#info=devDependencies)\n\n# npm-user-validate\n\nValidation for the npm client and npm-www (and probably other npm projects)",
+ "readme": "[![Build Status](https://travis-ci.org/npm/npm-user-validate.png?branch=master)](https://travis-ci.org/npm/npm-user-validate)\n[![devDependency Status](https://david-dm.org/npm/npm-user-validate/dev-status.png)](https://david-dm.org/npm/npm-user-validate#info=devDependencies)\n\n# npm-user-validate\n\nValidation for the npm client and npm-www (and probably other npm projects)\n",
"readmeFilename": "README.md",
"bugs": {
- "url": "https://github.com/robertkowalski/npm-user-validate/issues"
+ "url": "https://github.com/npm/npm-registry-mock/issues"
},
- "_id": "npm-user-validate@0.0.3",
- "dist": {
- "shasum": "7b147d11038083fb0ba2d60ff851dc20322aa9f6"
- },
- "_from": "npm-user-validate@0.0.3",
- "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.0.3.tgz"
+ "homepage": "https://github.com/npm/npm-registry-mock",
+ "_id": "npm-user-validate@0.1.0",
+ "_shasum": "358a5b5148ed3f79771d980388c6e34c4a61f638",
+ "_from": "npm-user-validate@latest"
}
diff --git a/deps/npm/node_modules/npm-user-validate/test/pw.test.js b/deps/npm/node_modules/npm-user-validate/test/pw.test.js
index e99c991cb..d57401da0 100644
--- a/deps/npm/node_modules/npm-user-validate/test/pw.test.js
+++ b/deps/npm/node_modules/npm-user-validate/test/pw.test.js
@@ -3,25 +3,25 @@ var v = require('../npm-user-validate.js').pw
test('pw contains a \'', function (t) {
err = v('\'')
- t.type(err, 'object')
+ t.type(err, 'null')
t.end()
})
test('pw contains a :', function (t) {
err = v(':')
- t.type(err, 'object')
+ t.type(err, 'null')
t.end()
})
test('pw contains a @', function (t) {
err = v('@')
- t.type(err, 'object')
+ t.notOk(err, 'null')
t.end()
})
test('pw contains a "', function (t) {
err = v('"')
- t.type(err, 'object')
+ t.type(err, 'null')
t.end()
})
@@ -29,4 +29,4 @@ test('pw is ok', function (t) {
err = v('duck')
t.type(err, 'null')
t.end()
-}) \ No newline at end of file
+})
diff --git a/deps/npm/node_modules/npmconf/config-defs.js b/deps/npm/node_modules/npmconf/config-defs.js
index f879a941d..7d76f8129 100644
--- a/deps/npm/node_modules/npmconf/config-defs.js
+++ b/deps/npm/node_modules/npmconf/config-defs.js
@@ -162,7 +162,7 @@ Object.defineProperty(exports, "defaults", {get: function () {
, key: null
, link: false
, "local-address" : undefined
- , loglevel : "http"
+ , loglevel : "warn"
, logstream : process.stderr
, long : false
, message : "%s"
@@ -196,6 +196,7 @@ Object.defineProperty(exports, "defaults", {get: function () {
, shell : osenv.shell()
, shrinkwrap: true
, "sign-git-tag": false
+ , spin: true
, "strict-ssl": true
, tag : "latest"
, tmp : temp
@@ -303,6 +304,7 @@ exports.types =
, shell : String
, shrinkwrap: Boolean
, "sign-git-tag": Boolean
+ , spin: ["always", Boolean]
, "strict-ssl": Boolean
, tag : String
, tmp : path
diff --git a/deps/npm/lib/utils/find-prefix.js b/deps/npm/node_modules/npmconf/lib/find-prefix.js
index a61d9e136..bb00cd6b1 100644
--- a/deps/npm/lib/utils/find-prefix.js
+++ b/deps/npm/node_modules/npmconf/lib/find-prefix.js
@@ -2,9 +2,8 @@
module.exports = findPrefix
-var fs = require("graceful-fs")
- , path = require("path")
- , npm = require("../npm.js")
+var fs = require("fs")
+var path = require("path")
function findPrefix (p, cb_) {
function cb (er, p) {
diff --git a/deps/npm/node_modules/npmconf/lib/load-prefix.js b/deps/npm/node_modules/npmconf/lib/load-prefix.js
new file mode 100644
index 000000000..c161b0649
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/lib/load-prefix.js
@@ -0,0 +1,51 @@
+module.exports = loadPrefix
+
+var findPrefix = require("./find-prefix.js")
+var mkdirp = require("mkdirp")
+var path = require('path')
+
+function loadPrefix (cb) {
+ var cli = this.list[0]
+
+ // try to guess at a good node_modules location.
+ var p
+ , gp
+
+ if (!Object.prototype.hasOwnProperty.call(cli, "prefix")) {
+ p = process.cwd()
+ } else {
+ p = this.get("prefix")
+ }
+ gp = this.get("prefix")
+
+ findPrefix(p, function (er, p) {
+ Object.defineProperty(this, "localPrefix",
+ { get : function () { return p }
+ , set : function (r) { return p = r }
+ , enumerable : true
+ })
+ // the prefix MUST exist, or else nothing works.
+ if (!this.get("global")) {
+ mkdirp(p, next.bind(this))
+ } else {
+ next.bind(this)(er)
+ }
+ }.bind(this))
+
+ gp = path.resolve(gp)
+ Object.defineProperty(this, "globalPrefix",
+ { get : function () { return gp }
+ , set : function (r) { return gp = r }
+ , enumerable : true
+ })
+ // the prefix MUST exist, or else nothing works.
+ mkdirp(gp, next.bind(this))
+
+ var i = 2
+ var errState = null
+ function next (er) {
+ if (errState) return
+ if (er) return cb(errState = er)
+ if (--i === 0) return cb()
+ }
+}
diff --git a/deps/npm/node_modules/npmconf/lib/load-uid.js b/deps/npm/node_modules/npmconf/lib/load-uid.js
new file mode 100644
index 000000000..3ca798773
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/lib/load-uid.js
@@ -0,0 +1,15 @@
+module.exports = loadUid
+
+var getUid = require("uid-number")
+
+// Call in the context of a npmconf object
+
+function loadUid (cb) {
+ // if we're not in unsafe-perm mode, then figure out who
+ // to run stuff as. Do this first, to support `npm update npm -g`
+ if (!this.get("unsafe-perm")) {
+ getUid(this.get("user"), this.get("group"), cb)
+ } else {
+ process.nextTick(cb)
+ }
+}
diff --git a/deps/npm/node_modules/npmconf/lib/set-user.js b/deps/npm/node_modules/npmconf/lib/set-user.js
new file mode 100644
index 000000000..2e7774aec
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/lib/set-user.js
@@ -0,0 +1,23 @@
+module.exports = setUser
+
+var path = require('path')
+var fs = require('fs')
+
+function setUser (cb) {
+ var defaultConf = Object.getPrototypeOf(this.root)
+
+ // If global, leave it as-is.
+ // If not global, then set the user to the owner of the prefix folder.
+ // Just set the default, so it can be overridden.
+ if (this.get("global")) return cb()
+ if (process.env.SUDO_UID) {
+ defaultConf.user = +(process.env.SUDO_UID)
+ return cb()
+ }
+
+ var prefix = path.resolve(this.get("prefix"))
+ fs.stat(prefix, function (er, st) {
+ defaultConf.user = st && st.uid
+ return cb(er)
+ })
+}
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json b/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
index a7349f06b..f96627c72 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
+++ b/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
@@ -23,12 +23,22 @@
"tap": "0"
},
"readme": "A list of objects, bound by their prototype chain.\n\nUsed in npm's config stuff.\n",
- "readmeFilename": "README.md",
- "bugs": {
- "url": "https://github.com/isaacs/proto-list/issues"
- },
- "homepage": "https://github.com/isaacs/proto-list",
"_id": "proto-list@1.2.2",
+ "dist": {
+ "shasum": "48b88798261ec2c4a785720cdfec6200d57d3326",
+ "tarball": "http://registry.npmjs.org/proto-list/-/proto-list-1.2.2.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "directories": {},
"_shasum": "48b88798261ec2c4a785720cdfec6200d57d3326",
"_from": "proto-list@~1.2.1",
"_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.2.tgz"
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json b/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
index 2f8695410..c59f5ceeb 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
+++ b/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
@@ -28,7 +28,27 @@
"url": "https://github.com/dominictarr/config-chain/issues"
},
"_id": "config-chain@1.1.8",
- "_shasum": "0943d0b7227213a20d4eaff4434f4a1c0a052cad",
+ "dist": {
+ "shasum": "0943d0b7227213a20d4eaff4434f4a1c0a052cad",
+ "tarball": "http://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz"
+ },
"_from": "config-chain@~1.1.8",
+ "_npmVersion": "1.3.6",
+ "_npmUser": {
+ "name": "dominictarr",
+ "email": "dominic.tarr@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "dominictarr",
+ "email": "dominic.tarr@gmail.com"
+ },
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "0943d0b7227213a20d4eaff4434f4a1c0a052cad",
"_resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz"
}
diff --git a/deps/npm/node_modules/npmconf/npmconf.js b/deps/npm/node_modules/npmconf/npmconf.js
index 46ff2b813..aa2c7b2e6 100644
--- a/deps/npm/node_modules/npmconf/npmconf.js
+++ b/deps/npm/node_modules/npmconf/npmconf.js
@@ -10,6 +10,7 @@ var nopt = require('nopt')
var ini = require('ini')
var Octal = configDefs.Octal
var mkdirp = require('mkdirp')
+var path = require('path')
exports.load = load
exports.Conf = Conf
@@ -17,9 +18,11 @@ exports.loaded = false
exports.rootConf = null
exports.usingBuiltin = false
exports.defs = configDefs
+
Object.defineProperty(exports, 'defaults', { get: function () {
return configDefs.defaults
}, enumerable: true })
+
Object.defineProperty(exports, 'types', { get: function () {
return configDefs.types
}, enumerable: true })
@@ -67,6 +70,7 @@ function load (cli_, builtin_, cb_) {
loadCbs.push(cb)
if (loading)
return
+
loading = true
cb = once(function (er, conf) {
@@ -81,46 +85,68 @@ function load (cli_, builtin_, cb_) {
// check for a builtin if provided.
exports.usingBuiltin = !!builtin
var rc = exports.rootConf = new Conf()
- var defaults = configDefs.defaults
if (builtin)
rc.addFile(builtin, 'builtin')
else
rc.add({}, 'builtin')
rc.on('load', function () {
- var conf = new Conf(rc)
- conf.usingBuiltin = !!builtin
- conf.add(cli, 'cli')
- conf.addEnv()
+ load_(builtin, rc, cli, cb)
+ })
+}
+
+function load_(builtin, rc, cli, cb) {
+ var defaults = configDefs.defaults
+ var conf = new Conf(rc)
+
+ conf.usingBuiltin = !!builtin
+ conf.add(cli, 'cli')
+ conf.addEnv()
+
+ conf.loadExtras(function(er) {
+ if (er)
+ return cb(er)
+
+ if (!conf.get('global')) {
+ var projectConf = path.resolve(conf.localPrefix, '.npmrc')
+ conf.addFile(projectConf, 'project')
+ conf.once('load', afterPrefix)
+ }
+ else return afterPrefix()
+ })
+
+ function afterPrefix() {
conf.addFile(conf.get('userconfig'), 'user')
conf.once('error', cb)
+ conf.once('load', afterUser)
+ }
+
+ function afterUser () {
+ // globalconfig and globalignorefile defaults
+ // need to respond to the 'prefix' setting up to this point.
+ // Eg, `npm config get globalconfig --prefix ~/local` should
+ // return `~/local/etc/npmrc`
+ // annoying humans and their expectations!
+ if (conf.get('prefix')) {
+ var etc = path.resolve(conf.get('prefix'), 'etc')
+ defaults.globalconfig = path.resolve(etc, 'npmrc')
+ defaults.globalignorefile = path.resolve(etc, 'npmignore')
+ }
+
+ conf.addFile(conf.get('globalconfig'), 'global')
+
+ // move the builtin into the conf stack now.
+ conf.root = defaults
+ conf.add(rc.shift(), 'builtin')
conf.once('load', function () {
- // globalconfig and globalignorefile defaults
- // need to respond to the "prefix" setting up to this point.
- // Eg, `npm config get globalconfig --prefix ~/local` should
- // return `~/local/etc/npmrc`
- // annoying humans and their expectations!
- if (conf.get('prefix')) {
- var etc = path.resolve(conf.get("prefix"), "etc")
- defaults.globalconfig = path.resolve(etc, "npmrc")
- defaults.globalignorefile = path.resolve(etc, "npmignore")
- }
- conf.addFile(conf.get('globalconfig'), 'global')
-
- // move the builtin into the conf stack now.
- conf.root = defaults
- conf.add(rc.shift(), 'builtin')
- conf.once('load', function () {
- // warn about invalid bits.
- validate(conf)
- exports.loaded = conf
- cb(null, conf)
- })
+ // warn about invalid bits.
+ validate(conf)
+ exports.loaded = conf
+ cb(null, conf)
})
- })
+ }
}
-
// Basically the same as CC, but:
// 1. Always ini
// 2. Parses environment variable names in field values
@@ -142,6 +168,23 @@ function Conf (base) {
this.root = configDefs.defaults
}
+Conf.prototype.loadPrefix = require('./lib/load-prefix.js')
+Conf.prototype.loadUid = require('./lib/load-uid.js')
+Conf.prototype.setUser = require('./lib/set-user.js')
+Conf.prototype.findPrefix = require('./lib/find-prefix.js')
+
+Conf.prototype.loadExtras = function(cb) {
+ this.loadPrefix(function(er) {
+ if (er)
+ return cb(er)
+ this.setUser(function(er) {
+ if (er)
+ return cb(er)
+ this.loadUid(cb)
+ }.bind(this))
+ }.bind(this))
+}
+
Conf.prototype.save = function (where, cb) {
var target = this.sources[where]
if (!target || !(target.path || target.source) || !target.data) {
@@ -316,7 +359,7 @@ function parseField (f, k, emptyIsFalse) {
}
function envReplace (f) {
- if (typeof f !== "string" || !f) return f
+ if (typeof f !== 'string' || !f) return f
// replace any ${ENV} values with the appropriate environ.
var envExpr = /(\\*)\$\{([^}]+)\}/g
@@ -325,7 +368,7 @@ function envReplace (f) {
if (esc)
return orig
if (undefined === process.env[name])
- throw new Error("Failed to replace env in config: "+orig)
+ throw new Error('Failed to replace env in config: '+orig)
return process.env[name]
})
}
diff --git a/deps/npm/node_modules/npmconf/package.json b/deps/npm/node_modules/npmconf/package.json
index 3e3c76e6b..f6727d98f 100644
--- a/deps/npm/node_modules/npmconf/package.json
+++ b/deps/npm/node_modules/npmconf/package.json
@@ -1,6 +1,6 @@
{
"name": "npmconf",
- "version": "0.1.15",
+ "version": "1.0.1",
"description": "The config thing npm uses",
"main": "npmconf.js",
"directories": {
@@ -9,12 +9,13 @@
"dependencies": {
"config-chain": "~1.1.8",
"inherits": "~2.0.0",
- "once": "~1.3.0",
+ "ini": "^1.2.0",
"mkdirp": "~0.3.3",
- "osenv": "0.0.3",
"nopt": "2",
+ "once": "~1.3.0",
+ "osenv": "0.0.3",
"semver": "2",
- "ini": "~1.1.0"
+ "uid-number": "0.0.5"
},
"devDependencies": {
"tap": "~0.4.0"
@@ -41,11 +42,12 @@
"license": "BSD",
"readme": "# npmconf\n\nThe config thing npm uses\n\nIf you are interested in interacting with the config settings that npm\nuses, then use this module.\n\nHowever, if you are writing a new Node.js program, and want\nconfiguration functionality similar to what npm has, but for your\nown thing, then I'd recommend using [rc](https://github.com/dominictarr/rc),\nwhich is probably what you want.\n\nIf I were to do it all over again, that's what I'd do for npm. But,\nalas, there are many systems depending on many of the particulars of\nnpm's configuration setup, so it's not worth the cost of changing.\n\n## USAGE\n\n```javascript\nvar npmconf = require('npmconf')\n\n// pass in the cli options that you read from the cli\n// or whatever top-level configs you want npm to use for now.\nnpmconf.load({some:'configs'}, function (er, conf) {\n // do stuff with conf\n conf.get('some', 'cli') // 'configs'\n conf.get('username') // 'joebobwhatevers'\n conf.set('foo', 'bar', 'user')\n conf.save('user', function (er) {\n // foo = bar is now saved to ~/.npmrc or wherever\n })\n})\n```\n",
"readmeFilename": "README.md",
+ "gitHead": "7da0322e33d6116378f6a2206d8b8fa113c06e4b",
"bugs": {
"url": "https://github.com/isaacs/npmconf/issues"
},
"homepage": "https://github.com/isaacs/npmconf",
- "_id": "npmconf@0.1.15",
- "_shasum": "9df0f0545d04d121330c32a5be9d351b4a8df029",
+ "_id": "npmconf@1.0.1",
+ "_shasum": "3503d12c6585395b0d8378d76e2d4a2453a23328",
"_from": "npmconf@latest"
}
diff --git a/deps/npm/node_modules/npmconf/test/basic.js b/deps/npm/node_modules/npmconf/test/basic.js
index 83832c2ef..f17f0fb8e 100644
--- a/deps/npm/node_modules/npmconf/test/basic.js
+++ b/deps/npm/node_modules/npmconf/test/basic.js
@@ -1,6 +1,9 @@
var test = require('tap').test
var npmconf = require('../npmconf.js')
var common = require('./00-setup.js')
+var path = require('path')
+
+var projectData = {}
var ucData =
{ globalconfig: common.globalconfig,
@@ -29,6 +32,7 @@ var ucData =
httponly: true } }
var envData = { userconfig: common.userconfig, 'other-env-thing': '1000' }
+var envDataFix = { userconfig: common.userconfig, 'other-env-thing': 1000 }
var gcData = { 'package-config:foo': 'boo' }
@@ -38,7 +42,8 @@ var cli = { foo: 'bar', umask: 022 }
var expectList =
[ cli,
- envData,
+ envDataFix,
+ projectData,
ucData,
gcData,
biData ]
@@ -46,9 +51,13 @@ var expectList =
var expectSources =
{ cli: { data: cli },
env:
- { data: envData,
+ { data: envDataFix,
source: envData,
prefix: '' },
+ project:
+ { path: path.resolve(__dirname, '..', '.npmrc'),
+ type: 'ini',
+ data: projectData },
user:
{ path: common.userconfig,
type: 'ini',
diff --git a/deps/npm/node_modules/npmconf/test/builtin.js b/deps/npm/node_modules/npmconf/test/builtin.js
index c5216ed90..0a305d2a6 100644
--- a/deps/npm/node_modules/npmconf/test/builtin.js
+++ b/deps/npm/node_modules/npmconf/test/builtin.js
@@ -1,6 +1,7 @@
var test = require('tap').test
var npmconf = require('../npmconf.js')
var common = require('./00-setup.js')
+var path = require('path')
var ucData =
{ globalconfig: common.globalconfig,
@@ -29,6 +30,7 @@ var ucData =
httponly: true } }
var envData = { userconfig: common.userconfig, 'other-env-thing': '1000' }
+var envDataFix = { userconfig: common.userconfig, 'other-env-thing': 1000 }
var gcData = { 'package-config:foo': 'boo' }
@@ -36,9 +38,12 @@ var biData = { 'builtin-config': true }
var cli = { foo: 'bar', heading: 'foo', 'git-tag-version': false }
+var projectData = {}
+
var expectList =
[ cli,
- envData,
+ envDataFix,
+ projectData,
ucData,
gcData,
biData ]
@@ -46,9 +51,13 @@ var expectList =
var expectSources =
{ cli: { data: cli },
env:
- { data: envData,
+ { data: envDataFix,
source: envData,
prefix: '' },
+ project:
+ { path: path.resolve(__dirname, '..', '.npmrc'),
+ type: 'ini',
+ data: projectData },
user:
{ path: common.userconfig,
type: 'ini',
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/.npmrc b/deps/npm/node_modules/npmconf/test/fixtures/.npmrc
new file mode 100644
index 000000000..7d59bd8be
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/test/fixtures/.npmrc
@@ -0,0 +1 @@
+just = testing
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/package.json b/deps/npm/node_modules/npmconf/test/fixtures/package.json
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/test/fixtures/package.json
diff --git a/deps/npm/node_modules/npmconf/test/project.js b/deps/npm/node_modules/npmconf/test/project.js
new file mode 100644
index 000000000..04e063855
--- /dev/null
+++ b/deps/npm/node_modules/npmconf/test/project.js
@@ -0,0 +1,85 @@
+var test = require('tap').test
+var npmconf = require('../npmconf.js')
+var common = require('./00-setup.js')
+var path = require('path')
+var fix = path.resolve(__dirname, 'fixtures')
+var projectRc = path.resolve(fix, '.npmrc')
+
+var projectData = { just: 'testing' }
+
+var ucData =
+ { globalconfig: common.globalconfig,
+ email: 'i@izs.me',
+ 'env-thing': 'asdf',
+ 'init.author.name': 'Isaac Z. Schlueter',
+ 'init.author.email': 'i@izs.me',
+ 'init.author.url': 'http://blog.izs.me/',
+ 'proprietary-attribs': false,
+ 'npm:publishtest': true,
+ '_npmjs.org:couch': 'https://admin:password@localhost:5984/registry',
+ _auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',
+ 'npm-www:nocache': '1',
+ nodedir: '/Users/isaacs/dev/js/node-v0.8',
+ 'sign-git-tag': true,
+ message: 'v%s',
+ 'strict-ssl': false,
+ 'tmp': process.env.HOME + '/.tmp',
+ username : "username",
+ _password : "password",
+ _token:
+ { AuthSession: 'yabba-dabba-doodle',
+ version: '1',
+ expires: '1345001053415',
+ path: '/',
+ httponly: true } }
+
+var envData = { userconfig: common.userconfig, 'other-env-thing': '1000' }
+var envDataFix = { userconfig: common.userconfig, 'other-env-thing': 1000 }
+
+var gcData = { 'package-config:foo': 'boo' }
+
+var biData = {}
+
+var cli = { foo: 'bar', umask: 022, prefix: fix }
+
+var expectList =
+[ cli,
+ envDataFix,
+ projectData,
+ ucData,
+ gcData,
+ biData ]
+
+var expectSources =
+{ cli: { data: cli },
+ env:
+ { data: envDataFix,
+ source: envData,
+ prefix: '' },
+ project:
+ { path: projectRc,
+ type: 'ini',
+ data: projectData },
+ user:
+ { path: common.userconfig,
+ type: 'ini',
+ data: ucData },
+ global:
+ { path: common.globalconfig,
+ type: 'ini',
+ data: gcData },
+ builtin: { data: biData } }
+
+test('no builtin', function (t) {
+ npmconf.load(cli, function (er, conf) {
+ if (er) throw er
+ t.same(conf.list, expectList)
+ t.same(conf.sources, expectSources)
+ t.same(npmconf.rootConf.list, [])
+ t.equal(npmconf.rootConf.root, npmconf.defs.defaults)
+ t.equal(conf.root, npmconf.defs.defaults)
+ t.equal(conf.get('umask'), 022)
+ t.equal(conf.get('heading'), 'npm')
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/npmlog/package.json b/deps/npm/node_modules/npmlog/package.json
index 28b444cca..5bb392553 100644
--- a/deps/npm/node_modules/npmlog/package.json
+++ b/deps/npm/node_modules/npmlog/package.json
@@ -28,5 +28,23 @@
"url": "https://github.com/isaacs/npmlog/issues"
},
"_id": "npmlog@0.0.6",
- "_from": "npmlog@latest"
+ "dist": {
+ "shasum": "685043fe71aa1665d6e3b2acef180640caf40873",
+ "tarball": "http://registry.npmjs.org/npmlog/-/npmlog-0.0.6.tgz"
+ },
+ "_from": "npmlog@latest",
+ "_npmVersion": "1.3.11",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "685043fe71aa1665d6e3b2acef180640caf40873",
+ "_resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.0.6.tgz"
}
diff --git a/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json b/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
index f45c5c94f..a1f2911ad 100644
--- a/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
+++ b/deps/npm/node_modules/read-installed/node_modules/util-extend/package.json
@@ -17,7 +17,25 @@
"bugs": {
"url": "https://github.com/isaacs/util-extend/issues"
},
- "homepage": "https://github.com/isaacs/util-extend",
"_id": "util-extend@1.0.1",
- "_from": "util-extend@^1.0.1"
+ "dist": {
+ "shasum": "bb703b79480293ddcdcfb3c6a9fea20f483415bc",
+ "tarball": "http://registry.npmjs.org/util-extend/-/util-extend-1.0.1.tgz"
+ },
+ "_from": "util-extend@^1.0.1",
+ "_npmVersion": "1.3.4",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "bb703b79480293ddcdcfb3c6a9fea20f483415bc",
+ "_resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.1.tgz",
+ "homepage": "https://github.com/isaacs/util-extend"
}
diff --git a/deps/npm/node_modules/read-installed/package.json b/deps/npm/node_modules/read-installed/package.json
index 41a980f76..46b0036fc 100644
--- a/deps/npm/node_modules/read-installed/package.json
+++ b/deps/npm/node_modules/read-installed/package.json
@@ -1,7 +1,7 @@
{
"name": "read-installed",
"description": "Read all the installed packages in a folder, and return a tree structure with all the data.",
- "version": "2.0.2",
+ "version": "2.0.4",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/read-installed"
@@ -31,10 +31,12 @@
},
"readme": "# read-installed\n\nRead all the installed packages in a folder, and return a tree\nstructure with all the data.\n\nnpm uses this.\n\n## 2.0.0\n\nBreaking changes in `2.0.0`:\n\nThe second argument is now an `Object` that contains the following keys:\n\n * `depth` optional, defaults to Infinity\n * `log` optional log Function\n * `dev` optional, default false, set to true to include devDependencies\n\n## Usage\n\n```javascript\nvar readInstalled = require(\"read-installed\")\n// optional options\nvar options = { dev: false, log: fn, depth: 2 }\nreadInstalled(folder, options, function (er, data) {\n ...\n})\n```\n",
"readmeFilename": "README.md",
+ "gitHead": "86c1d4444724b82855a6879d443b6fa184f2f9dd",
"bugs": {
"url": "https://github.com/isaacs/read-installed/issues"
},
"homepage": "https://github.com/isaacs/read-installed",
- "_id": "read-installed@2.0.2",
+ "_id": "read-installed@2.0.4",
+ "_shasum": "3a1e12b977a93132b93c5a6a8663fbd62c812671",
"_from": "read-installed@latest"
}
diff --git a/deps/npm/node_modules/read-installed/read-installed.js b/deps/npm/node_modules/read-installed/read-installed.js
index a33758b17..9b5a47962 100644
--- a/deps/npm/node_modules/read-installed/read-installed.js
+++ b/deps/npm/node_modules/read-installed/read-installed.js
@@ -217,23 +217,9 @@ function readInstalled_ (folder, parent, name, reqver, depth, opts, cb) {
if (!rv && obj.devDependencies && opts.dev)
rv = obj.devDependencies[pkg]
- if (depth >= opts.depth) {
- // just try to get the version number
- var pkgfolder = path.resolve(folder, "node_modules", pkg)
- , jsonFile = path.resolve(pkgfolder, "package.json")
- return readJson(jsonFile, function (er, depData) {
- // already out of our depth, ignore errors
- if (er || !depData || !depData.version) return cb(null, obj)
- if (depth === opts.depth) {
- // edge case, ignore dependencies
- depData.dependencies = {}
- depData.peerDependencies = {}
- obj.dependencies[pkg] = depData
- } else {
- obj.dependencies[pkg] = depData.version
- }
- cb(null, obj)
- })
+ if (depth > opts.depth) {
+ obj.dependencies = {}
+ return cb(null, obj)
}
readInstalled_( path.resolve(folder, "node_modules/"+pkg)
@@ -331,7 +317,11 @@ function findUnmet (obj, opts) {
obj.dependencies[d] = peerDeps[d]
}
} else {
- dependency = obj.parent.dependencies && obj.parent.dependencies[d]
+ var r = obj.parent
+ while (r && !dependency) {
+ dependency = r.dependencies && r.dependencies[d]
+ r = r.link ? null : r.parent
+ }
}
if (!dependency) {
diff --git a/deps/npm/node_modules/read-installed/test/depth-0.js b/deps/npm/node_modules/read-installed/test/depth-0.js
index 16dc6c525..459df8a72 100644
--- a/deps/npm/node_modules/read-installed/test/depth-0.js
+++ b/deps/npm/node_modules/read-installed/test/depth-0.js
@@ -16,6 +16,8 @@ test("make sure that it works with depth=0", function (t) {
// Exclude self from dependencies when depth = 0
delete map.dependencies[json.name]
var subdeps = Object.keys(map.dependencies).reduce(function(acc, dep) {
+ // Exclude self from dependencies when depth = current depth
+ delete map.dependencies[dep].dependencies[dep]
acc += Object.keys(map.dependencies[dep].dependencies).length;
return acc;
}, 0);
diff --git a/deps/npm/node_modules/read-installed/test/fixtures/grandparent-peer/package.json b/deps/npm/node_modules/read-installed/test/fixtures/grandparent-peer/package.json
new file mode 100644
index 000000000..51c12935f
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/fixtures/grandparent-peer/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "example",
+ "version": "0.0.0",
+ "dependencies": {
+ "plugin-wrapper": "0.0.0",
+ "framework": "0.0.0"
+ }
+}
diff --git a/deps/npm/node_modules/read-installed/test/grandparent-peer.js b/deps/npm/node_modules/read-installed/test/grandparent-peer.js
new file mode 100644
index 000000000..8b51a0985
--- /dev/null
+++ b/deps/npm/node_modules/read-installed/test/grandparent-peer.js
@@ -0,0 +1,24 @@
+var readInstalled = require('../read-installed.js')
+var test = require('tap').test
+var path = require('path');
+
+function allValid(t, map) {
+ var deps = Object.keys(map.dependencies || {})
+ deps.forEach(function (dep) {
+ t.notOk(map.dependencies[dep].invalid, 'dependency ' + dep + ' of ' + map.name + ' is not invalid')
+ t.notOk(typeof map.dependencies[dep] === 'string', 'dependency ' + dep + ' of ' + map.name + ' is not missing')
+ })
+ deps.forEach(function (dep) {
+ allValid(t, map.dependencies[dep])
+ })
+}
+
+test('grandparent can satisfy peer dependencies', function(t) {
+ readInstalled(
+ path.join(__dirname, 'fixtures/grandparent-peer'),
+ { log: console.error },
+ function(err, map) {
+ allValid(t, map)
+ t.end()
+ })
+})
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index ef0465981..4e95b8465 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -34,7 +34,7 @@ As a command-line utility:
## Versions
-A "version" is described by the v2.0.0 specification found at
+A "version" is described by the `v2.0.0` specification found at
<http://semver.org/>.
A leading `"="` or `"v"` character is stripped off and ignored.
@@ -43,9 +43,10 @@ A leading `"="` or `"v"` character is stripped off and ignored.
The following range styles are supported:
-* `1.2.3` A specific version. When nothing else will do. Note that
- build metadata is still ignored, so `1.2.3+build2012` will satisfy
- this range.
+* `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
@@ -56,26 +57,33 @@ The following range styles are supported:
* `<=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
+* `~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
+* `^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
+* `^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` := `>=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"
+* `^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
@@ -90,42 +98,50 @@ The resulting output will always be 100% strict, of course.
Strict-mode Comparators and Ranges will be strict about the SemVer
strings that they parse.
-* valid(v): Return the parsed version, or null if it's not valid.
-* inc(v, release): Return the version incremented by the release type
- (major, minor, patch, or prerelease), or null if it's not valid.
+* `valid(v)`: Return the parsed version, or null if it's not valid.
+* `inc(v, release)`: Return the version incremented by the release
+ type (`major`, `premajor`, `minor`, `preminor`, `patch`,
+ `prepatch`, or `prerelease`), or null if it's not valid
+ * `premajor` in one call will bump the version up to the next major
+ version and down to a prerelease of that major version.
+ `preminor`, and `prepatch` work the same way.
+ * If called from a non-prerelease version, the `prerelease` will work the
+ same as `prepatch`. It increments the patch version, then makes a
+ prerelease. If the input version is already a prerelease it simply
+ increments it.
### Comparison
-* gt(v1, v2): `v1 > v2`
-* gte(v1, v2): `v1 >= v2`
-* lt(v1, v2): `v1 < v2`
-* lte(v1, v2): `v1 <= v2`
-* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,
+* `gt(v1, v2)`: `v1 > v2`
+* `gte(v1, v2)`: `v1 >= v2`
+* `lt(v1, v2)`: `v1 < v2`
+* `lte(v1, v2)`: `v1 <= v2`
+* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
even if they're not the exact same string. You already know how to
compare strings.
-* neq(v1, v2): `v1 != v2` The opposite of eq.
-* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call
+* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
+* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
the corresponding function above. `"==="` and `"!=="` do simple
string comparison, but are included for completeness. Throws if an
invalid comparison string is provided.
-* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
- v2 is greater. Sorts in ascending order if passed to Array.sort().
-* rcompare(v1, v2): The reverse of compare. Sorts an array of versions
- in descending order when passed to Array.sort().
+* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
+ `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
+* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions
+ in descending order when passed to `Array.sort()`.
### Ranges
-* validRange(range): Return the valid range or null if it's not valid
-* satisfies(version, range): Return true if the version satisfies the
+* `validRange(range)`: Return the valid range or null if it's not valid
+* `satisfies(version, range)`: Return true if the version satisfies the
range.
-* maxSatisfying(versions, range): Return the highest version in the list
- that satisfies the range, or null if none of them do.
-* gtr(version, range): Return true if version is greater than all the
+* `maxSatisfying(versions, range)`: Return the highest version in the list
+ that satisfies the range, or `null` if none of them do.
+* `gtr(version, range)`: Return `true` if version is greater than all the
versions possible in the range.
-* ltr(version, range): Return true if version is less than all the
+* `ltr(version, range)`: Return `true` if version is less than all the
versions possible in the range.
-* outside(version, range, hilo): Return true if the version is outside
+* `outside(version, range, hilo)`: Return true if the version is outside
the bounds of the range in either the high or low direction. The
`hilo` argument must be either the string `'>'` or `'<'`. (This is
the function called by `gtr` and `ltr`.)
@@ -134,8 +150,8 @@ Note that, since ranges may be non-contiguous, a version might not be
greater than a range, less than a range, *or* satisfy a range! For
example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
until `2.0.0`, so the version `1.2.10` would not be greater than the
-range (because 2.0.1 satisfies, which is higher), nor less than the
-range (since 1.2.8 satisfies, which is lower), and it also does not
+range (because `2.0.1` satisfies, which is higher), nor less than the
+range (since `1.2.8` satisfies, which is lower), and it also does not
satisfy the range.
If you want to know if a version satisfies or does not satisfy a
diff --git a/deps/npm/node_modules/semver/bin/semver b/deps/npm/node_modules/semver/bin/semver
index 88b4c7d31..848420630 100755
--- a/deps/npm/node_modules/semver/bin/semver
+++ b/deps/npm/node_modules/semver/bin/semver
@@ -39,6 +39,7 @@ function main () {
case "-i": case "--inc": case "--increment":
switch (argv[0]) {
case "major": case "minor": case "patch": case "prerelease":
+ case "premajor": case "preminor": case "prepatch":
inc = argv.shift()
break
default:
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index 023f01bc8..b65d866c3 100644
--- a/deps/npm/node_modules/semver/package.json
+++ b/deps/npm/node_modules/semver/package.json
@@ -1,6 +1,6 @@
{
"name": "semver",
- "version": "2.2.1",
+ "version": "2.3.0",
"description": "The semantic version parser used by npm.",
"main": "semver.js",
"browser": "semver.browser.js",
@@ -21,12 +21,13 @@
"bin": {
"semver": "./bin/semver"
},
- "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // '1.2.3'\n semver.valid('a.b.c') // null\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]\n Test if version(s) satisfy the supplied range(s), and sort them.\n\n Multiple versions or ranges may be supplied, unless increment\n or decrement options are specified. In that case, only a single\n version may be used, and it is incremented by the specified level\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA \"version\" is described by the v2.0.0 specification found at\n<http://semver.org/>.\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `1.2.3` A specific version. When nothing else will do. Note that\n build metadata is still ignored, so `1.2.3+build2012` will satisfy\n this range.\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than a specific version. If there is no prerelease\n tag on the version range, then no prerelease version will be allowed\n either, even though these are technically \"less than\".\n* `>=1.2.3` Greater than or equal to. Note that prerelease versions\n are NOT equal to their \"normal\" equivalents, so `1.2.3-beta` will\n not satisfy this range, but `2.3.0-beta` will.\n* `<=1.2.3` Less than or equal to. In this case, prerelease versions\n ARE allowed, so `1.2.3-beta` would satisfy.\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` \"Reasonably close to 1.2.3\". When\n using tilde operators, prerelease versions are supported as well,\n but a prerelease of the next significant digit will NOT be\n satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.\n* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` \"Compatible with 1.2.3\". When\n using caret operators, anything from the specified version (including\n prerelease) will be supported up to, but not including, the next\n major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,\n while `1.2.2` and `2.0.0-beta` will not.\n* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` \"Compatible with 0.1.3\". 0.x.x versions are\n special: the first non-zero component indicates potentially breaking changes,\n meaning the caret operator matches any version with the same first non-zero\n component starting at the specified version.\n* `^0.0.2` := `=0.0.2` \"Only the version 0.0.2 is considered compatible\"\n* `~1.2` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with 1.2\"\n* `^1.2` := `>=1.2.0-0 <2.0.0-0` \"Any version compatible with 1.2\"\n* `1.2.x` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with 1.2\"\n* `~1` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with 1\"\n* `^1` := `>=1.0.0-0 <2.0.0-0` \"Any version compatible with 1\"\n* `1.x` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with 1\"\n\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\nAll methods and classes take a final `loose` boolean argument that, if\ntrue, will be more forgiving about not-quite-valid semver strings.\nThe resulting output will always be 100% strict, of course.\n\nStrict-mode Comparators and Ranges will be strict about the SemVer\nstrings that they parse.\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n (major, minor, patch, or prerelease), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n v2 is greater. Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare. Sorts an array of versions\n in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n range.\n* maxSatisfying(versions, range): Return the highest version in the list\n that satisfies the range, or null if none of them do.\n* gtr(version, range): Return true if version is greater than all the\n versions possible in the range.\n* ltr(version, range): Return true if version is less than all the\n versions possible in the range.\n* outside(version, range, hilo): Return true if the version is outside\n the bounds of the range in either the high or low direction. The\n `hilo` argument must be either the string `'>'` or `'<'`. (This is\n the function called by `gtr` and `ltr`.)\n\nNote that, since ranges may be non-contiguous, a version might not be\ngreater than a range, less than a range, *or* satisfy a range! For\nexample, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`\nuntil `2.0.0`, so the version `1.2.10` would not be greater than the\nrange (because 2.0.1 satisfies, which is higher), nor less than the\nrange (since 1.2.8 satisfies, which is lower), and it also does not\nsatisfy the range.\n\nIf you want to know if a version satisfies or does not satisfy a\nrange, use the `satisfies(version, range)` function.\n",
+ "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // '1.2.3'\n semver.valid('a.b.c') // null\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | -d <dec>]\n Test if version(s) satisfy the supplied range(s), and sort them.\n\n Multiple versions or ranges may be supplied, unless increment\n or decrement options are specified. In that case, only a single\n version may be used, and it is incremented by the specified level\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA \"version\" is described by the `v2.0.0` specification found at\n<http://semver.org/>.\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `1.2.3` A specific version. When nothing else will do. Must be a full\n version number, with major, minor, and patch versions specified.\n Note that build metadata is still ignored, so `1.2.3+build2012` will\n satisfy this range.\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than a specific version. If there is no prerelease\n tag on the version range, then no prerelease version will be allowed\n either, even though these are technically \"less than\".\n* `>=1.2.3` Greater than or equal to. Note that prerelease versions\n are NOT equal to their \"normal\" equivalents, so `1.2.3-beta` will\n not satisfy this range, but `2.3.0-beta` will.\n* `<=1.2.3` Less than or equal to. In this case, prerelease versions\n ARE allowed, so `1.2.3-beta` would satisfy.\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` \"Reasonably close to `1.2.3`\". When\n using tilde operators, prerelease versions are supported as well,\n but a prerelease of the next significant digit will NOT be\n satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.\n* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` \"Compatible with `1.2.3`\". When\n using caret operators, anything from the specified version (including\n prerelease) will be supported up to, but not including, the next\n major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,\n while `1.2.2` and `2.0.0-beta` will not.\n* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` \"Compatible with `0.1.3`\". `0.x.x` versions are\n special: the first non-zero component indicates potentially breaking changes,\n meaning the caret operator matches any version with the same first non-zero\n component starting at the specified version.\n* `^0.0.2` := `=0.0.2` \"Only the version `0.0.2` is considered compatible\"\n* `~1.2` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with `1.2`\"\n* `^1.2` := `>=1.2.0-0 <2.0.0-0` \"Any version compatible with `1.2`\"\n* `1.2.x` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with `1.2`\"\n* `1.2.*` Same as `1.2.x`.\n* `1.2` Same as `1.2.x`.\n* `~1` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with `1`\"\n* `^1` := `>=1.0.0-0 <2.0.0-0` \"Any version compatible with `1`\"\n* `1.x` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with `1`\"\n* `1.*` Same as `1.x`.\n* `1` Same as `1.x`.\n* `*` Any version whatsoever.\n* `x` Same as `*`.\n* `\"\"` (just an empty string) Same as `*`.\n\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\nAll methods and classes take a final `loose` boolean argument that, if\ntrue, will be more forgiving about not-quite-valid semver strings.\nThe resulting output will always be 100% strict, of course.\n\nStrict-mode Comparators and Ranges will be strict about the SemVer\nstrings that they parse.\n\n* `valid(v)`: Return the parsed version, or null if it's not valid.\n* `inc(v, release)`: Return the version incremented by the release\n type (`major`, `premajor`, `minor`, `preminor`, `patch`,\n `prepatch`, or `prerelease`), or null if it's not valid\n * `premajor` in one call will bump the version up to the next major\n version and down to a prerelease of that major version.\n `preminor`, and `prepatch` work the same way.\n * If called from a non-prerelease version, the `prerelease` will work the\n same as `prepatch`. It increments the patch version, then makes a\n prerelease. If the input version is already a prerelease it simply\n increments it.\n\n### Comparison\n\n* `gt(v1, v2)`: `v1 > v2`\n* `gte(v1, v2)`: `v1 >= v2`\n* `lt(v1, v2)`: `v1 < v2`\n* `lte(v1, v2)`: `v1 <= v2`\n* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.\n* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if\n `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.\n* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions\n in descending order when passed to `Array.sort()`.\n\n\n### Ranges\n\n* `validRange(range)`: Return the valid range or null if it's not valid\n* `satisfies(version, range)`: Return true if the version satisfies the\n range.\n* `maxSatisfying(versions, range)`: Return the highest version in the list\n that satisfies the range, or `null` if none of them do.\n* `gtr(version, range)`: Return `true` if version is greater than all the\n versions possible in the range.\n* `ltr(version, range)`: Return `true` if version is less than all the\n versions possible in the range.\n* `outside(version, range, hilo)`: Return true if the version is outside\n the bounds of the range in either the high or low direction. The\n `hilo` argument must be either the string `'>'` or `'<'`. (This is\n the function called by `gtr` and `ltr`.)\n\nNote that, since ranges may be non-contiguous, a version might not be\ngreater than a range, less than a range, *or* satisfy a range! For\nexample, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`\nuntil `2.0.0`, so the version `1.2.10` would not be greater than the\nrange (because `2.0.1` satisfies, which is higher), nor less than the\nrange (since `1.2.8` satisfies, which is lower), and it also does not\nsatisfy the range.\n\nIf you want to know if a version satisfies or does not satisfy a\nrange, use the `satisfies(version, range)` function.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/node-semver/issues"
},
"homepage": "https://github.com/isaacs/node-semver",
- "_id": "semver@2.2.1",
+ "_id": "semver@2.3.0",
+ "_shasum": "d31b2903ebe2a1806c05b8e763916a7183108a15",
"_from": "semver@latest"
}
diff --git a/deps/npm/node_modules/semver/semver.browser.js b/deps/npm/node_modules/semver/semver.browser.js
index e05ecc19c..0f414c3d8 100644
--- a/deps/npm/node_modules/semver/semver.browser.js
+++ b/deps/npm/node_modules/semver/semver.browser.js
@@ -248,6 +248,8 @@ function SemVer(version, loose) {
return version;
else
version = version.version;
+ } else if (typeof version !== 'string') {
+ throw new TypeError('Invalid Version: ' + version);
}
if (!(this instanceof SemVer))
@@ -320,7 +322,7 @@ SemVer.prototype.comparePre = function(other) {
return -1;
else if (!this.prerelease.length && other.prerelease.length)
return 1;
- else if (!this.prerelease.lenth && !other.prerelease.length)
+ else if (!this.prerelease.length && !other.prerelease.length)
return 0;
var i = 0;
@@ -341,19 +343,49 @@ SemVer.prototype.comparePre = function(other) {
} while (++i);
};
+// preminor will bump the version up to the next minor release, and immediately
+// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function(release) {
switch (release) {
+ case 'premajor':
+ this.inc('major');
+ this.inc('pre');
+ break;
+ case 'preminor':
+ this.inc('minor');
+ this.inc('pre');
+ break;
+ case 'prepatch':
+ this.inc('patch');
+ this.inc('pre');
+ break;
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case 'prerelease':
+ if (this.prerelease.length === 0)
+ this.inc('patch');
+ this.inc('pre');
+ break;
case 'major':
this.major++;
this.minor = -1;
case 'minor':
this.minor++;
- this.patch = -1;
+ this.patch = 0;
+ this.prerelease = [];
+ break;
case 'patch':
- this.patch++;
+ // If this is not a pre-release version, it will increment the patch.
+ // If it is a pre-release it will bump up to the same patch version.
+ // 1.2.0-5 patches to 1.2.0
+ // 1.2.0 patches to 1.2.1
+ if (this.prerelease.length === 0)
+ this.patch++;
this.prerelease = [];
break;
- case 'prerelease':
+ // This probably shouldn't be used publically.
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+ case 'pre':
if (this.prerelease.length === 0)
this.prerelease = [0];
else {
diff --git a/deps/npm/node_modules/semver/semver.browser.js.gz b/deps/npm/node_modules/semver/semver.browser.js.gz
index b9549f809..2b07bae51 100644
--- a/deps/npm/node_modules/semver/semver.browser.js.gz
+++ b/deps/npm/node_modules/semver/semver.browser.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/semver.js b/deps/npm/node_modules/semver/semver.js
index 9e9470d86..a7385b41c 100644
--- a/deps/npm/node_modules/semver/semver.js
+++ b/deps/npm/node_modules/semver/semver.js
@@ -258,6 +258,8 @@ function SemVer(version, loose) {
return version;
else
version = version.version;
+ } else if (typeof version !== 'string') {
+ throw new TypeError('Invalid Version: ' + version);
}
if (!(this instanceof SemVer))
@@ -330,7 +332,7 @@ SemVer.prototype.comparePre = function(other) {
return -1;
else if (!this.prerelease.length && other.prerelease.length)
return 1;
- else if (!this.prerelease.lenth && !other.prerelease.length)
+ else if (!this.prerelease.length && !other.prerelease.length)
return 0;
var i = 0;
@@ -351,19 +353,49 @@ SemVer.prototype.comparePre = function(other) {
} while (++i);
};
+// preminor will bump the version up to the next minor release, and immediately
+// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function(release) {
switch (release) {
+ case 'premajor':
+ this.inc('major');
+ this.inc('pre');
+ break;
+ case 'preminor':
+ this.inc('minor');
+ this.inc('pre');
+ break;
+ case 'prepatch':
+ this.inc('patch');
+ this.inc('pre');
+ break;
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case 'prerelease':
+ if (this.prerelease.length === 0)
+ this.inc('patch');
+ this.inc('pre');
+ break;
case 'major':
this.major++;
this.minor = -1;
case 'minor':
this.minor++;
- this.patch = -1;
+ this.patch = 0;
+ this.prerelease = [];
+ break;
case 'patch':
- this.patch++;
+ // If this is not a pre-release version, it will increment the patch.
+ // If it is a pre-release it will bump up to the same patch version.
+ // 1.2.0-5 patches to 1.2.0
+ // 1.2.0 patches to 1.2.1
+ if (this.prerelease.length === 0)
+ this.patch++;
this.prerelease = [];
break;
- case 'prerelease':
+ // This probably shouldn't be used publically.
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+ case 'pre':
if (this.prerelease.length === 0)
this.prerelease = [0];
else {
diff --git a/deps/npm/node_modules/semver/semver.min.js b/deps/npm/node_modules/semver/semver.min.js
index c2164c33e..66e13b863 100644
--- a/deps/npm/node_modules/semver/semver.min.js
+++ b/deps/npm/node_modules/semver/semver.min.js
@@ -1 +1 @@
-(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var o=n++;t[o]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var a=n++;t[a]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[o]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[o]+")";var c=n++;t[c]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var p=n++;t[p]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[a]+t[c]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[p]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var $=n++;t[$]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var b=n++;t[b]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:("+t[c]+")"+")?)?)?";var E=n++;t[E]="[v=\\s]*("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:("+t[p]+")"+")?)?)?";var k=n++;t[k]="^"+t[y]+"\\s*"+t[b]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[E]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[b]+"$";var A=n++;t[A]="^"+t[R]+t[E]+"$";var C=n++;t[C]="(?:\\^)";var T=n++;t[T]="(\\s*)"+t[C]+"\\s+";r[T]=new RegExp(t[T],"g");var M="$1^";var z=n++;t[z]="^"+t[C]+t[b]+"$";var P=n++;t[P]="^"+t[C]+t[E]+"$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+w+")$|^$";var q=n++;t[q]="^"+t[y]+"\\s*("+g+")$|^$";var L=n++;t[L]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[b]+")";r[L]=new RegExp(t[L],"g");var X="$1$2$3";var _=n++;t[_]="^\\s*("+t[b]+")"+"\\s+-\\s+"+"("+t[b]+")"+"\\s*$";var N=n++;t[N]="^\\s*("+t[E]+")"+"\\s+-\\s+"+"("+t[E]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e,r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.lenth&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e){switch(e){case"major":this.major++;this.minor=-1;case"minor":this.minor++;this.patch=-1;case"patch":this.patch++;this.prerelease=[];break;case"prerelease":if(this.prerelease.length===0)this.prerelease=[0];else{var r=this.prerelease.length;while(--r>=0){if(typeof this.prerelease[r]==="number"){this.prerelease[r]++;r=-2}}if(r===-1)this.prerelease.push(0)}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t){try{return new H(e,t).inc(r).version}catch(n){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=or;function or(e,r,t){return W(e,r,t)!==0}e.gte=ar;function ar(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":i=e===t;break;case"!==":i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=or(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=ar(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===cr)this.value="";else this.value=this.operator+this.semver.version}var cr={};lr.prototype.parse=function(e){var t=this.loose?r[Z]:r[q];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(!n[2])this.semver=cr;else{this.semver=new H(n[2],this.loose);if(this.operator==="<"&&!this.semver.prerelease.length){this.semver.prerelease=["0"];this.semver.format()}}};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){return this.semver===cr?true:ur(e,this.operator,this.semver,this.loose)};e.Range=pr;function pr(e,r){if(e instanceof pr&&e.loose===r)return e;if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}pr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};pr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};pr.prototype.toString=function(){return this.range};pr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[N]:r[_];e=e.replace(n,Er);e=e.replace(r[L],X);e=e.replace(r[S],V);e=e.replace(r[T],M);e=e.split(/\s+/).join(" ");var i=t?r[Z]:r[q];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new pr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=$r(e,r);e=br(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[A]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n))s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[P]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else s=">="+r+"."+t+".0-0 <"+(+r+1)+".0.0-0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n+i;else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0-0"}else{if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n;else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+(+r+1)+".0.0-0"}return s})}function $r(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[k];return e.replace(n,function(e,r,t,n,i,s){var o=mr(t);var a=o||mr(n);var f=a||mr(i);var u=f;if(r==="="&&u)r="";if(r&&u){if(o)t=0;if(a)n=0;if(f)i=0;if(r===">"){r=">=";if(o){}else if(a){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}e=r+t+"."+n+"."+i+"-0"}else if(o){e="*"}else if(a){e=">="+t+".0.0-0 <"+(+t+1)+".0.0-0"}else if(f){e=">="+t+"."+n+".0-0 <"+t+"."+(+n+1)+".0-0"}return e})}function br(e,t){return e.trim().replace(r[O],"")}function Er(e,r,t,n,i,s,o,a,f,u,l,c,p){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0-0";else if(mr(i))r=">="+t+"."+n+".0-0";else r=">="+r;if(mr(f))a="";else if(mr(u))a="<"+(+f+1)+".0.0-0";else if(mr(l))a="<"+f+"."+(+u+1)+".0-0";else if(c)a="<="+f+"."+u+"."+l+"-"+c;else a="<="+a;return(r+" "+a).trim()}pr.prototype.test=function(e){if(!e)return false;for(var r=0;r<this.set.length;r++){if(kr(this.set[r],e))return true}return false};function kr(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new pr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new pr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Ar(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Ar(e,r,">",t)}e.outside=Ar;function Ar(e,r,t,n){e=new H(e,n);r=new pr(r,n);var i,s,o,a,f;switch(t){case">":i=nr;s=fr;o=ir;a=">";f=">=";break;case"<":i=ir;s=ar;o=nr;a="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var c=null;var p=null;l.forEach(function(e){c=c||e;p=p||e;if(i(e.semver,c.semver,n)){c=e}else if(o(e.semver,p.semver,n)){p=e}});if(c.operator===a||c.operator===f){return false}if((!p.operator||p.operator===a)&&s(e,p.semver)){return false}else if(p.operator===f&&o(e,p.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
+(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[a]+")";var c=n++;t[c]="(?:"+t[s]+"|"+t[a]+")";var l=n++;t[l]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var p=n++;t[p]="(?:-?("+t[c]+"(?:\\."+t[c]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[o]+t[l]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[p]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var b=n++;t[b]=t[s]+"|x|X|\\*";var $=n++;t[$]=t[i]+"|x|X|\\*";var j=n++;t[j]="[v=\\s]*("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:("+t[l]+")"+")?)?)?";var k=n++;t[k]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:("+t[p]+")"+")?)?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[j]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[j]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[j]+"$";var P=n++;t[P]="^"+t[A]+t[k]+"$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+w+")$|^$";var q=n++;t[q]="^"+t[y]+"\\s*("+g+")$|^$";var L=n++;t[L]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[j]+")";r[L]=new RegExp(t[L],"g");var X="$1$2$3";var _=n++;t[_]="^\\s*("+t[j]+")"+"\\s+-\\s+"+"("+t[j]+")"+"\\s*$";var N=n++;t[N]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e,r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e){switch(e){case"premajor":this.inc("major");this.inc("pre");break;case"preminor":this.inc("minor");this.inc("pre");break;case"prepatch":this.inc("patch");this.inc("pre");break;case"prerelease":if(this.prerelease.length===0)this.inc("patch");this.inc("pre");break;case"major":this.major++;this.minor=-1;case"minor":this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var r=this.prerelease.length;while(--r>=0){if(typeof this.prerelease[r]==="number"){this.prerelease[r]++;r=-2}}if(r===-1)this.prerelease.push(0)}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t){try{return new H(e,t).inc(r).version}catch(n){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=ar;function ar(e,r,t){return W(e,r,t)!==0}e.gte=or;function or(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":i=e===t;break;case"!==":i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=ar(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=or(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=cr;function cr(e,r){if(e instanceof cr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof cr))return new cr(e,r);this.loose=r;this.parse(e);if(this.semver===lr)this.value="";else this.value=this.operator+this.semver.version}var lr={};cr.prototype.parse=function(e){var t=this.loose?r[Z]:r[q];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(!n[2])this.semver=lr;else{this.semver=new H(n[2],this.loose);if(this.operator==="<"&&!this.semver.prerelease.length){this.semver.prerelease=["0"];this.semver.format()}}};cr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};cr.prototype.toString=function(){return this.value};cr.prototype.test=function(e){return this.semver===lr?true:ur(e,this.operator,this.semver,this.loose)};e.Range=pr;function pr(e,r){if(e instanceof pr&&e.loose===r)return e;if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}pr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};pr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};pr.prototype.toString=function(){return this.range};pr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[N]:r[_];e=e.replace(n,kr);e=e.replace(r[L],X);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[Z]:r[q];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new cr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new pr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=br(e,r);e=jr(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n))s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[P]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else s=">="+r+"."+t+".0-0 <"+(+r+1)+".0.0-0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n+i;else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0-0"}else{if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n;else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+(+r+1)+".0.0-0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return $r(e,r)}).join(" ")}function $r(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=mr(t);var o=a||mr(n);var f=o||mr(i);var u=f;if(r==="="&&u)r="";if(r&&u){if(a)t=0;if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(a){}else if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}e=r+t+"."+n+"."+i+"-0"}else if(a){e="*"}else if(o){e=">="+t+".0.0-0 <"+(+t+1)+".0.0-0"}else if(f){e=">="+t+"."+n+".0-0 <"+t+"."+(+n+1)+".0-0"}return e})}function jr(e,t){return e.trim().replace(r[O],"")}function kr(e,r,t,n,i,s,a,o,f,u,c,l,p){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0-0";else if(mr(i))r=">="+t+"."+n+".0-0";else r=">="+r;if(mr(f))o="";else if(mr(u))o="<"+(+f+1)+".0.0-0";else if(mr(c))o="<"+f+"."+(+u+1)+".0-0";else if(l)o="<="+f+"."+u+"."+c+"-"+l;else o="<="+o;return(r+" "+o).trim()}pr.prototype.test=function(e){if(!e)return false;for(var r=0;r<this.set.length;r++){if(Er(this.set[r],e))return true}return false};function Er(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new pr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new pr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Tr(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Tr(e,r,">",t)}e.outside=Tr;function Tr(e,r,t,n){e=new H(e,n);r=new pr(r,n);var i,s,a,o,f;switch(t){case">":i=nr;s=fr;a=ir;o=">";f=">=";break;case"<":i=ir;s=or;a=nr;o="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var c=r.set[u];var l=null;var p=null;c.forEach(function(e){l=l||e;p=p||e;if(i(e.semver,l.semver,n)){l=e}else if(a(e.semver,p.semver,n)){p=e}});if(l.operator===o||l.operator===f){return false}if((!p.operator||p.operator===o)&&s(e,p.semver)){return false}else if(p.operator===f&&a(e,p.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
diff --git a/deps/npm/node_modules/semver/semver.min.js.gz b/deps/npm/node_modules/semver/semver.min.js.gz
index e82da41e3..cc05248ff 100644
--- a/deps/npm/node_modules/semver/semver.min.js.gz
+++ b/deps/npm/node_modules/semver/semver.min.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/test/index.js b/deps/npm/node_modules/semver/test/index.js
index e6c9cefb0..6285b693f 100644
--- a/deps/npm/node_modules/semver/test/index.js
+++ b/deps/npm/node_modules/semver/test/index.js
@@ -302,8 +302,15 @@ test('\nincrement versions test', function(t) {
['1.2.3tag', 'major', '2.0.0', true],
['1.2.3-tag', 'major', '2.0.0'],
['1.2.3', 'fake', null],
+ ['1.2.0-0', 'patch', '1.2.0'],
['fake', 'major', null],
- ['1.2.3', 'prerelease', '1.2.3-0'],
+ ['1.2.3-4', 'major', '2.0.0'],
+ ['1.2.3-4', 'minor', '1.3.0'],
+ ['1.2.3-4', 'patch', '1.2.3'],
+ ['1.2.3-alpha.0.beta', 'major', '2.0.0'],
+ ['1.2.3-alpha.0.beta', 'minor', '1.3.0'],
+ ['1.2.3-alpha.0.beta', 'patch', '1.2.3'],
+ ['1.2.4', 'prerelease', '1.2.5-0'],
['1.2.3-0', 'prerelease', '1.2.3-1'],
['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'],
['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'],
@@ -319,7 +326,13 @@ test('\nincrement versions test', function(t) {
['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'],
['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'],
['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'],
- ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta']
+ ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'],
+ ['1.2.0', 'preminor', '1.3.0-0'],
+ ['1.2.0', 'premajor', '2.0.0-0'],
+ ['1.2.0', 'preminor', '1.3.0-0'],
+ ['1.2.0', 'premajor', '2.0.0-0']
+
+
].forEach(function(v) {
var pre = v[0];
var what = v[1];
@@ -500,6 +513,21 @@ test('\ncomparators test', function(t) {
t.end();
});
+test('\ninvalid version numbers', function(t) {
+ ['1.2.3.4',
+ 'NOT VALID',
+ 1.2,
+ null,
+ 'Infinity.NaN.Infinity'
+ ].forEach(function(v) {
+ t.throws(function() {
+ new SemVer(v);
+ }, {name:'TypeError', message:'Invalid Version: ' + v});
+ });
+
+ t.end();
+});
+
test('\nstrict vs loose version numbers', function(t) {
[['=1.2.3', '1.2.3'],
['01.02.03', '1.2.3'],
diff --git a/deps/npm/node_modules/uid-number/LICENCE b/deps/npm/node_modules/uid-number/LICENCE
deleted file mode 100644
index 74489e2e2..000000000
--- a/deps/npm/node_modules/uid-number/LICENCE
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) Isaac Z. Schlueter
-All rights reserved.
-
-The BSD License
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/uid-number/package.json b/deps/npm/node_modules/uid-number/package.json
index 0b10753b1..643c36b46 100644
--- a/deps/npm/node_modules/uid-number/package.json
+++ b/deps/npm/node_modules/uid-number/package.json
@@ -19,12 +19,29 @@
"node": "*"
},
"license": "ISC",
- "readme": "Use this module to convert a username/groupname to a uid/gid number.\n\nUsage:\n\n```\nnpm install uid-number\n```\n\nThen, in your node program:\n\n```javascript\nvar uidNumber = require(\"uid-number\")\nuidNumber(\"isaacs\", function (er, uid, gid) {\n // gid is null because we didn't ask for a group name\n // uid === 24561 because that's my number.\n})\n```\n",
- "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/uid-number/issues"
},
"homepage": "https://github.com/isaacs/uid-number",
"_id": "uid-number@0.0.5",
- "_from": "uid-number@latest"
+ "dist": {
+ "shasum": "5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e",
+ "tarball": "http://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz"
+ },
+ "_from": "uid-number@latest",
+ "_npmVersion": "1.4.3",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e",
+ "_resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/package.json b/deps/npm/package.json
index a2b0667ab..e496acddc 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,9 +1,6 @@
{
- "version": "1.4.10",
+ "version": "1.4.14",
"name": "npm",
- "publishConfig": {
- "proprietary-attribs": false
- },
"description": "A package manager for node",
"keywords": [
"package manager",
@@ -34,48 +31,51 @@
"main": "./lib/npm.js",
"bin": "./bin/npm-cli.js",
"dependencies": {
- "abbrev": "~1.0.4",
+ "abbrev": "~1.0.5",
"ansi": "~0.2.1",
"ansicolors": "~0.3.2",
"ansistyles": "~0.1.3",
"archy": "0",
"block-stream": "0.0.7",
+ "char-spinner": "~1.0.1",
"child-process-close": "~0.1.1",
"chmodr": "~0.1.0",
"chownr": "0",
"cmd-shim": "~1.1.1",
- "columnify": "0.1.2",
+ "columnify": "~0.1.2",
"editor": "0.0.5",
"fstream": "~0.1.25",
- "fstream-npm": "~0.1.6",
+ "fstream-npm": "~0.1.7",
"github-url-from-git": "1.1.1",
"github-url-from-username-repo": "~0.1.0",
- "glob": "~3.2.9",
+ "glob": "~3.2.10",
"graceful-fs": "~2.0.2",
- "ini": "~1.1.0",
- "init-package-json": "0.0.16",
+ "inflight": "~1.0.1",
+ "ini": "~1.2.0",
+ "init-package-json": "0.0.17",
"lockfile": "~0.4.0",
"lru-cache": "~2.5.0",
- "minimatch": "~0.2.14",
+ "minimatch": "~0.3.0",
"mkdirp": "~0.3.5",
"node-gyp": "~0.13.0",
"nopt": "~2.2.1",
+ "npm-cache-filename": "~1.0.1",
"npm-install-checks": "~1.0.0",
- "npm-registry-client": "~0.4.8",
- "npm-user-validate": "0.0.3",
- "npmconf": "~0.1.15",
+ "npm-registry-client": "~1.0.0",
+ "npm-user-validate": "~0.1.0",
+ "npmconf": "~1.0.1",
"npmlog": "0.0.6",
"once": "~1.3.0",
"opener": "~1.3.0",
"osenv": "0",
"path-is-inside": "~1.0.0",
"read": "~1.0.4",
- "read-installed": "~2.0.1",
+ "read-installed": "~2.0.4",
"read-package-json": "~1.1.9",
"request": "~2.30.0",
"retry": "~0.6.0",
"rimraf": "~2.2.5",
- "semver": "~2.2.1",
+ "semver": "~2.3.0",
"sha": "~1.2.1",
"slide": "~1.1.5",
"sorted-object": "~1.0.0",
@@ -91,6 +91,7 @@
"ansistyles",
"archy",
"block-stream",
+ "char-spinner",
"child-process-close",
"chmodr",
"chownr",
@@ -103,6 +104,7 @@
"github-url-from-username-repo",
"glob",
"graceful-fs",
+ "inflight",
"inherits",
"ini",
"init-package-json",
@@ -112,7 +114,7 @@
"mkdirp",
"node-gyp",
"nopt",
- "normalize-package-data",
+ "npm-cache-filename",
"npm-install-checks",
"npm-registry-client",
"npm-user-validate",
diff --git a/deps/npm/test/tap/00-verify-bundle-deps.js b/deps/npm/test/tap/00-verify-bundle-deps.js
new file mode 100644
index 000000000..00291a6c4
--- /dev/null
+++ b/deps/npm/test/tap/00-verify-bundle-deps.js
@@ -0,0 +1,27 @@
+var fs = require("fs")
+var path = require("path")
+var test = require("tap").test
+
+var manifest = require("../../package.json")
+var deps = Object.keys(manifest.dependencies)
+var dev = Object.keys(manifest.devDependencies)
+var bundled = manifest.bundleDependencies
+
+test("all deps are bundled deps or dev deps", function (t) {
+ deps.forEach(function (name) {
+ t.assert(
+ bundled.indexOf(name) !== -1,
+ name + " is in bundledDependencies"
+ )
+ })
+
+ t.same(
+ fs.readdirSync(path.resolve(__dirname, '../../node_modules')).filter(function (name) {
+ return (dev.indexOf(name) === -1) && (name !== ".bin")
+ }).sort(),
+ bundled.sort(),
+ "bundleDependencies matches what's in node_modules"
+ )
+
+ t.end()
+})
diff --git a/deps/npm/test/tap/cache-shasum.js b/deps/npm/test/tap/cache-shasum.js
index 460f2ee3f..2139d8fb7 100644
--- a/deps/npm/test/tap/cache-shasum.js
+++ b/deps/npm/test/tap/cache-shasum.js
@@ -43,7 +43,7 @@ test("npm cache add request", function(t) {
test("compare", function(t) {
var d = path.resolve(__dirname, "cache-shasum/request")
var p = path.resolve(d, "2.27.0/package.tgz")
- var r = require(path.resolve(d, ".cache.json"))
+ var r = require("./cache-shasum/localhost_1337/request/.cache.json")
var rshasum = r.versions['2.27.0'].dist.shasum
sha.get(p, function (er, pshasum) {
if (er)
diff --git a/deps/npm/test/tap/config-meta.js b/deps/npm/test/tap/config-meta.js
index 63cdd61c4..75a66604c 100644
--- a/deps/npm/test/tap/config-meta.js
+++ b/deps/npm/test/tap/config-meta.js
@@ -31,7 +31,12 @@ test("get files", function (t) {
return path.resolve(lib, f)
})
files.forEach(function (f) {
- if (fs.statSync(f).isDirectory())
+ try {
+ var s = fs.statSync(f)
+ } catch (er) {
+ return
+ }
+ if (s.isDirectory())
walk(f)
else if (f.match(/\.js$/))
FILES.push(f)
diff --git a/deps/npm/test/tap/install-save-prefix.js b/deps/npm/test/tap/install-save-prefix.js
index 753150924..bbdeddf3f 100644
--- a/deps/npm/test/tap/install-save-prefix.js
+++ b/deps/npm/test/tap/install-save-prefix.js
@@ -22,6 +22,7 @@ test('"npm install --save with default save-prefix should install local pkg vers
npm.load({
cache: pkg + "/cache",
loglevel: 'silent',
+ 'save-prefix': '^',
registry: common.registry }, function(err) {
t.ifError(err)
npm.config.set('save', true)
@@ -47,6 +48,7 @@ test('"npm install --save-dev with default save-prefix should install local pkg
npm.load({
cache: pkg + "/cache",
loglevel: 'silent',
+ 'save-prefix': '^',
registry: common.registry }, function(err) {
t.ifError(err)
npm.config.set('save-dev', true)
diff --git a/deps/npm/test/tap/ls-depth-unmet.js b/deps/npm/test/tap/ls-depth-unmet.js
new file mode 100644
index 000000000..1ac85efc9
--- /dev/null
+++ b/deps/npm/test/tap/ls-depth-unmet.js
@@ -0,0 +1,97 @@
+var common = require('../common-tap')
+ , test = require('tap').test
+ , path = require('path')
+ , rimraf = require('rimraf')
+ , osenv = require('osenv')
+ , mkdirp = require('mkdirp')
+ , pkg = __dirname + '/ls-depth-unmet'
+ , cache = pkg + '/cache'
+ , tmp = pkg + '/tmp'
+ , node = process.execPath
+ , npm = path.resolve(__dirname, '../../cli.js')
+ , mr = require('npm-registry-mock')
+ , opts = {cwd: pkg}
+
+
+function cleanup () {
+ process.chdir(osenv.tmpdir())
+ rimraf.sync(pkg + '/cache')
+ rimraf.sync(pkg + '/tmp')
+ rimraf.sync(pkg + '/node_modules')
+}
+
+test('setup', function (t) {
+ cleanup()
+ mkdirp.sync(pkg + '/cache')
+ mkdirp.sync(pkg + '/tmp')
+ mr(common.port, function (s) {
+ var cmd = ['install', 'underscore@1.3.1', 'mkdirp', 'test-package-with-one-dep', '--registry=' + common.registry]
+ common.npm(cmd, opts, function (er, c) {
+ if (er) throw er
+ t.equal(c, 0)
+ s.close()
+ t.end()
+ })
+ })
+})
+
+test('npm ls --depth=0', function (t) {
+ common.npm(['ls', '--depth=0'], opts, function (er, c, out) {
+ if (er) throw er
+ t.equal(c, 1)
+ t.has(out, /UNMET DEPENDENCY optimist@0\.6\.0/
+ , "output contains optimist@0.6.0 and labeled as unmet dependency")
+ t.has(out, /mkdirp@0\.3\.5 extraneous/
+ , "output contains mkdirp@0.3.5 and labeled as extraneous")
+ t.has(out, /underscore@1\.3\.1 invalid/
+ , "output contains underscore@1.3.1 and labeled as invalid")
+ t.has(out, /test-package-with-one-dep@0\.0\.0\n/
+ , "output contains test-package-with-one-dep@0.0.0 and has no labels")
+ t.doesNotHave(out, /test-package@0\.0\.0/
+ , "output does not contain test-package@0.0.0 which is at depth=1")
+ t.end()
+ })
+})
+
+test('npm ls --depth=1', function (t) {
+ common.npm(['ls', '--depth=1'], opts, function (er, c, out) {
+ if (er) throw er
+ t.equal(c, 1)
+ t.has(out, /UNMET DEPENDENCY optimist@0\.6\.0/
+ , "output contains optimist@0.6.0 and labeled as unmet dependency")
+ t.has(out, /mkdirp@0\.3\.5 extraneous/
+ , "output contains mkdirp@0.3.5 and labeled as extraneous")
+ t.has(out, /underscore@1\.3\.1 invalid/
+ , "output contains underscore@1.3.1 and labeled as invalid")
+ t.has(out, /test-package-with-one-dep@0\.0\.0\n/
+ , "output contains test-package-with-one-dep@0.0.0 and has no labels")
+ t.has(out, /test-package@0\.0\.0/
+ , "output contains test-package@0.0.0 which is at depth=1")
+ t.end()
+ })
+})
+
+test('npm ls --depth=Infinity', function (t) {
+ // travis has a preconfigured depth=0, in general we can not depend
+ // on the default value in all environments, so explictly set it here
+ common.npm(['ls', '--depth=Infinity'], opts, function (er, c, out) {
+ if (er) throw er
+ t.equal(c, 1)
+ t.has(out, /UNMET DEPENDENCY optimist@0\.6\.0/
+ , "output contains optimist@0.6.0 and labeled as unmet dependency")
+ t.has(out, /mkdirp@0\.3\.5 extraneous/
+ , "output contains mkdirp@0.3.5 and labeled as extraneous")
+ t.has(out, /underscore@1\.3\.1 invalid/
+ , "output contains underscore@1.3.1 and labeled as invalid")
+ t.has(out, /test-package-with-one-dep@0\.0\.0\n/
+ , "output contains test-package-with-one-dep@0.0.0 and has no labels")
+ t.has(out, /test-package@0\.0\.0/
+ , "output contains test-package@0.0.0 which is at depth=1")
+ t.end()
+ })
+})
+
+test('cleanup', function (t) {
+ cleanup()
+ t.end()
+})
diff --git a/deps/npm/test/tap/ls-depth-unmet/package.json b/deps/npm/test/tap/ls-depth-unmet/package.json
new file mode 100644
index 000000000..391fa8d5b
--- /dev/null
+++ b/deps/npm/test/tap/ls-depth-unmet/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "ls-depth-umnet",
+ "author": "Evan You",
+ "version": "0.0.0",
+ "dependencies": {
+ "test-package-with-one-dep": "0.0.0",
+ "underscore": "1.5.1",
+ "optimist": "0.6.0"
+ }
+} \ No newline at end of file
diff --git a/deps/npm/test/tap/maybe-github.js b/deps/npm/test/tap/maybe-github.js
new file mode 100644
index 000000000..8b7105e6e
--- /dev/null
+++ b/deps/npm/test/tap/maybe-github.js
@@ -0,0 +1,76 @@
+require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../lib/npm.js")
+
+// this is the narrowest way to replace a function in the module cache
+var found = true
+var remoteGitPath = require.resolve('../../lib/cache/add-remote-git.js')
+require("module")._cache[remoteGitPath] = {
+ id: remoteGitPath,
+ exports: function stub(_, error, __, cb) {
+ if (found) {
+ cb(null, {})
+ }
+ else {
+ cb(error)
+ }
+ }
+}
+
+// only load maybeGithub now, so it gets the stub from cache
+var maybeGithub = require("../../lib/cache/maybe-github.js")
+
+test("should throw with no parameters", function (t) {
+ t.plan(1)
+
+ t.throws(function () {
+ maybeGithub();
+ }, "throws when called without parameters")
+})
+
+test("should throw with wrong parameter types", function (t) {
+ t.plan(3)
+
+ t.throws(function () {
+ maybeGithub({}, new Error(), function () {})
+ }, "expects only a package name")
+
+ t.throws(function () {
+ maybeGithub("npm/xxx-noexist", null, function () {})
+ }, "expects to be called after a previous check already failed")
+
+ t.throws(function () {
+ maybeGithub("npm/xxx-noexist", new Error(), "ham")
+ }, "is always async")
+})
+
+test("should find an existing package on Github", function (t) {
+ found = true
+ npm.load({}, function (error) {
+ t.notOk(error, "bootstrapping succeeds")
+ t.doesNotThrow(function () {
+ maybeGithub("npm/npm", new Error("not on filesystem"), function (error, data) {
+ t.notOk(error, "no issues in looking things up")
+ t.ok(data, "received metadata from Github")
+ t.end()
+ })
+ })
+ })
+})
+
+test("shouldn't find a nonexistent package on Github", function (t) {
+ found = false
+ npm.load({}, function () {
+ t.doesNotThrow(function () {
+ maybeGithub("npm/xxx-noexist", new Error("not on filesystem"), function (error, data) {
+ t.equal(
+ error.message,
+ "not on filesystem",
+ "passed through original error message"
+ )
+ t.notOk(data, "didn't pass any metadata")
+ t.end()
+ })
+ })
+ })
+})
diff --git a/deps/npm/test/tap/noargs-install-config-save.js b/deps/npm/test/tap/noargs-install-config-save.js
index ceff77bd4..c821000c2 100644
--- a/deps/npm/test/tap/noargs-install-config-save.js
+++ b/deps/npm/test/tap/noargs-install-config-save.js
@@ -1,7 +1,6 @@
var common = require("../common-tap.js")
var test = require("tap").test
var npm = require.resolve("../../bin/npm-cli.js")
-var osenv = require("osenv")
var path = require("path")
var fs = require("fs")
var rimraf = require("rimraf")
@@ -9,7 +8,6 @@ var mkdirp = require("mkdirp")
var mr = require("npm-registry-mock")
-var child
var spawn = require("child_process").spawn
var node = process.execPath
@@ -56,7 +54,7 @@ test("does not update the package.json with empty arguments", function (t) {
mr(common.port, function (s) {
var child = createChild([npm, "install"])
- child.on("close", function (m) {
+ child.on("close", function () {
var text = JSON.stringify(fs.readFileSync(pkg + "/package.json", "utf8"))
t.ok(text.indexOf('"dependencies') === -1)
s.close()
@@ -71,7 +69,7 @@ test("updates the package.json (adds dependencies) with an argument", function (
mr(common.port, function (s) {
var child = createChild([npm, "install", "underscore"])
- child.on("close", function (m) {
+ child.on("close", function () {
var text = JSON.stringify(fs.readFileSync(pkg + "/package.json", "utf8"))
t.ok(text.indexOf('"dependencies') !== -1)
s.close()
diff --git a/deps/npm/test/tap/repo.js b/deps/npm/test/tap/repo.js
index 44671e7d5..bf7b574f8 100644
--- a/deps/npm/test/tap/repo.js
+++ b/deps/npm/test/tap/repo.js
@@ -12,6 +12,10 @@ var node = process.execPath
var rimraf = require("rimraf")
var spawn = require("child_process").spawn
var fs = require("fs")
+var path = require('path')
+var outFile = path.join(__dirname, '/_output')
+
+var opts = { cwd: __dirname }
test("setup", function (t) {
var s = "#!/usr/bin/env bash\n" +
@@ -24,21 +28,105 @@ test("setup", function (t) {
test("npm repo underscore", function (t) {
mr(common.port, function (s) {
- var c = spawn(node, [
- npm, "repo", "underscore",
- "--registry=" + common.registry,
- "--loglevel=silent",
- "--browser=" + __dirname + "/_script.sh",
- ])
- c.stdout.on("data", function(d) {
- t.fail("Should not get data on stdout: " + d)
- })
- c.stderr.pipe(process.stderr)
- c.on("close", function(code) {
- t.equal(code, 0, "exit ok")
- var res = fs.readFileSync(__dirname + "/_output", "ascii")
+ common.npm([
+ 'repo', 'underscore',
+ '--registry=' + common.registry,
+ '--loglevel=silent',
+ '--browser=' + __dirname + '/_script.sh'
+ ], opts, function(err, code, stdout, stderr) {
+ t.equal(code, 0, 'exit ok')
+ var res = fs.readFileSync(outFile, 'ascii')
s.close()
t.equal(res, "https://github.com/jashkenas/underscore\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+
+test('npm repo optimist - github (https://)', function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ 'repo', 'optimist',
+ '--registry=' + common.registry,
+ '--loglevel=silent',
+ '--browser=' + __dirname + '/_script.sh'
+ ], opts, function(err, code, stdout, stderr) {
+ t.equal(code, 0, 'exit ok')
+ var res = fs.readFileSync(outFile, 'ascii')
+ s.close()
+ t.equal(res, "https://github.com/substack/node-optimist\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm repo npm-test-peer-deps - no repo", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ 'repo', 'npm-test-peer-deps',
+ '--registry=' + common.registry,
+ '--loglevel=silent',
+ '--browser=' + __dirname + '/_script.sh'
+ ], opts, function(err, code, stdout, stderr) {
+ t.equal(code, 1, 'exit not ok')
+ s.close()
+ t.end()
+ })
+ })
+})
+
+test("npm repo test-repo-url-http - non-github (http://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ 'repo', 'test-repo-url-http',
+ '--registry=' + common.registry,
+ '--loglevel=silent',
+ '--browser=' + __dirname + '/_script.sh'
+ ], opts, function(err, code, stdout, stderr) {
+ t.equal(code, 0, 'exit ok')
+ var res = fs.readFileSync(outFile, 'ascii')
+ s.close()
+ t.equal(res, "http://gitlab.com/evanlucas/test-repo-url-http\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm repo test-repo-url-https - non-github (https://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ 'repo', 'test-repo-url-https',
+ '--registry=' + common.registry,
+ '--loglevel=silent',
+ '--browser=' + __dirname + '/_script.sh'
+ ], opts, function(err, code, stdout, stderr) {
+ t.equal(code, 0, 'exit ok')
+ var res = fs.readFileSync(outFile, 'ascii')
+ s.close()
+ t.equal(res, "https://gitlab.com/evanlucas/test-repo-url-https\n")
+ rimraf.sync(outFile)
+ t.end()
+ })
+ })
+})
+
+test("npm repo test-repo-url-ssh - non-github (ssh://)", function (t) {
+ mr(common.port, function (s) {
+ common.npm([
+ 'repo', 'test-repo-url-ssh',
+ '--registry=' + common.registry,
+ '--loglevel=silent',
+ '--browser=' + __dirname + '/_script.sh'
+ ], opts, function(err, code, stdout, stderr) {
+ t.equal(code, 0, 'exit ok')
+ var res = fs.readFileSync(outFile, 'ascii')
+ s.close()
+ t.equal(res, "http://gitlab.com/evanlucas/test-repo-url-ssh\n")
+ rimraf.sync(outFile)
t.end()
})
})
@@ -46,7 +134,6 @@ test("npm repo underscore", function (t) {
test("cleanup", function (t) {
fs.unlinkSync(__dirname + "/_script.sh")
- fs.unlinkSync(__dirname + "/_output")
t.pass("cleaned up")
t.end()
})
diff --git a/deps/npm/test/tap/update-save.js b/deps/npm/test/tap/update-save.js
new file mode 100644
index 000000000..6323ef851
--- /dev/null
+++ b/deps/npm/test/tap/update-save.js
@@ -0,0 +1,160 @@
+var common = require("../common-tap.js")
+var test = require("tap").test
+var npm = require("../../")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var fs = require('fs')
+var path = require('path')
+var mr = require("npm-registry-mock")
+
+var PKG_DIR = path.resolve(__dirname, "update-save")
+var PKG = path.resolve(PKG_DIR, "package.json")
+var CACHE_DIR = path.resolve(PKG_DIR, "cache")
+var MODULES_DIR = path.resolve(PKG_DIR, "node_modules")
+
+var EXEC_OPTS = {
+ cwd: PKG_DIR,
+ stdio: 'ignore',
+ env: {
+ npm_config_registry: common.registry,
+ npm_config_loglevel: 'verbose'
+ }
+}
+
+var DEFAULT_PKG = {
+ "name": "update-save-example",
+ "version": "1.2.3",
+ "dependencies": {
+ "mkdirp": "~0.3.0"
+ },
+ "devDependencies": {
+ "underscore": "~1.3.1"
+ }
+}
+
+var s = undefined // mock server reference
+
+test('setup', function (t) {
+ resetPackage()
+
+ mr(common.port, function (server) {
+ npm.load({cache: CACHE_DIR, registry: common.registry}, function (err) {
+ t.ifError(err)
+ s = server
+ t.end()
+ })
+ })
+})
+
+test("update regular dependencies only", function (t) {
+ resetPackage()
+
+ common.npm(['update', '--save'], EXEC_OPTS, function (err, code) {
+ t.ifError(err)
+ t.equal(code, 0)
+
+ var pkgdata = JSON.parse(fs.readFileSync(PKG, 'utf8'))
+ t.deepEqual(pkgdata.dependencies, {mkdirp: '^0.3.5'}, 'only dependencies updated')
+ t.deepEqual(pkgdata.devDependencies, DEFAULT_PKG.devDependencies, 'dev dependencies should be untouched')
+ t.deepEqual(pkgdata.optionalDependencies, DEFAULT_PKG.optionalDependencies, 'optional dependencies should be untouched')
+ t.end()
+ })
+})
+
+test("update devDependencies only", function (t) {
+ resetPackage()
+
+ common.npm(['update', '--save-dev'], EXEC_OPTS, function (err, code, stdout, stderr) {
+ t.ifError(err)
+ t.equal(code, 0)
+
+ var pkgdata = JSON.parse(fs.readFileSync(PKG, 'utf8'))
+ t.deepEqual(pkgdata.dependencies, DEFAULT_PKG.dependencies, 'dependencies should be untouched')
+ t.deepEqual(pkgdata.devDependencies, {underscore: '^1.3.3'}, 'dev dependencies should be updated')
+ t.deepEqual(pkgdata.optionalDependencies, DEFAULT_PKG.optionalDependencies, 'optional dependencies should be untouched')
+ t.end()
+ })
+})
+
+test("update optionalDependencies only", function (t) {
+ resetPackage({
+ "optionalDependencies": {
+ "underscore": "~1.3.1"
+ }
+ })
+
+ common.npm(['update', '--save-optional'], EXEC_OPTS, function (err, code) {
+ t.ifError(err)
+ t.equal(code, 0)
+
+ var pkgdata = JSON.parse(fs.readFileSync(PKG, 'utf8'))
+ t.deepEqual(pkgdata.dependencies, DEFAULT_PKG.dependencies, 'dependencies should be untouched')
+ t.deepEqual(pkgdata.devDependencies, DEFAULT_PKG.devDependencies, 'dev dependencies should be untouched')
+ t.deepEqual(pkgdata.optionalDependencies, {underscore: '^1.3.3'}, 'optional dependencies should be updated')
+ t.end()
+ })
+})
+
+test("optionalDependencies are merged into dependencies during --save", function (t) {
+ var pkg = resetPackage({
+ "optionalDependencies": {
+ "underscore": "~1.3.1"
+ }
+ })
+
+ common.npm(['update', '--save'], EXEC_OPTS, function (err, code) {
+ t.ifError(err)
+ t.equal(code, 0)
+
+ var pkgdata = JSON.parse(fs.readFileSync(PKG, 'utf8'))
+ t.deepEqual(pkgdata.dependencies, {mkdirp: '^0.3.5'}, 'dependencies should not include optional dependencies')
+ t.deepEqual(pkgdata.devDependencies, pkg.devDependencies, 'dev dependencies should be untouched')
+ t.deepEqual(pkgdata.optionalDependencies, pkg.optionalDependencies, 'optional dependencies should be untouched')
+ t.end()
+ })
+})
+
+test("semver prefix is replaced with configured save-prefix", function (t) {
+ resetPackage()
+
+ common.npm(['update', '--save', '--save-prefix', '~'], EXEC_OPTS, function (err, code) {
+ t.ifError(err)
+ t.equal(code, 0)
+
+ var pkgdata = JSON.parse(fs.readFileSync(PKG, 'utf8'))
+ t.deepEqual(pkgdata.dependencies, {
+ mkdirp: '~0.3.5'
+ }, 'dependencies should be updated')
+ t.deepEqual(pkgdata.devDependencies, DEFAULT_PKG.devDependencies, 'dev dependencies should be untouched')
+ t.deepEqual(pkgdata.optionalDependencies, DEFAULT_PKG.optionalDependencies, 'optional dependencies should be updated')
+ t.end()
+ })
+})
+
+function resetPackage(extendWith) {
+ rimraf.sync(CACHE_DIR)
+ rimraf.sync(MODULES_DIR)
+ mkdirp.sync(CACHE_DIR)
+ var pkg = clone(DEFAULT_PKG)
+ extend(pkg, extendWith)
+ for (key in extend) { pkg[key] = extend[key]}
+ fs.writeFileSync(PKG, JSON.stringify(pkg, null, 2), 'ascii')
+ return pkg
+}
+
+test("cleanup", function (t) {
+ s.close()
+ resetPackage() // restore package.json
+ rimraf.sync(CACHE_DIR)
+ rimraf.sync(MODULES_DIR)
+ t.end()
+})
+
+function clone(a) {
+ return extend({}, a)
+}
+
+function extend(a, b) {
+ for (key in b) { a[key] = b[key]}
+ return a
+}
diff --git a/deps/npm/test/tap/update-save/README.md b/deps/npm/test/tap/update-save/README.md
new file mode 100644
index 000000000..aca67ff17
--- /dev/null
+++ b/deps/npm/test/tap/update-save/README.md
@@ -0,0 +1 @@
+# just a test
diff --git a/deps/npm/test/tap/update-save/index.js b/deps/npm/test/tap/update-save/index.js
new file mode 100644
index 000000000..33c1891f8
--- /dev/null
+++ b/deps/npm/test/tap/update-save/index.js
@@ -0,0 +1 @@
+module.exports = true
diff --git a/deps/npm/test/tap/update-save/package.json b/deps/npm/test/tap/update-save/package.json
new file mode 100644
index 000000000..cb41e88cf
--- /dev/null
+++ b/deps/npm/test/tap/update-save/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "update-save-example",
+ "version": "1.2.3",
+ "dependencies": {
+ "mkdirp": "~0.3.0"
+ },
+ "devDependencies": {
+ "underscore": "~1.3.1"
+ }
+} \ No newline at end of file
diff --git a/deps/npm/test/tap/url-dependencies.js b/deps/npm/test/tap/url-dependencies.js
index c3e1fa2a3..7f8cc7864 100644
--- a/deps/npm/test/tap/url-dependencies.js
+++ b/deps/npm/test/tap/url-dependencies.js
@@ -56,6 +56,7 @@ function performInstall (cb) {
npm_config_registry: common.registry,
npm_config_cache_lock_stale: 1000,
npm_config_cache_lock_wait: 1000,
+ npm_config_loglevel: "http",
HOME: process.env.HOME,
Path: process.env.PATH,
PATH: process.env.PATH