From 55c3f804c4a077873a438846931fd0fcea0caba2 Mon Sep 17 00:00:00 2001 From: Forrest L Norvell Date: Tue, 29 Mar 2016 22:43:40 -0700 Subject: [PATCH] deps: upgrade npm in LTS to 2.15.1 PR-URL: https://github.com/npm/node/pull/5 Reviewed-By: Myles Borins --- deps/npm/.npmignore | 1 + deps/npm/.travis.yml | 2 +- deps/npm/AUTHORS | 8 + deps/npm/CHANGELOG.md | 166 +++ deps/npm/bin/npm | 7 + deps/npm/doc/cli/npm-adduser.md | 10 +- deps/npm/doc/cli/npm-bugs.md | 2 + deps/npm/doc/cli/npm-config.md | 2 + deps/npm/doc/cli/npm-dedupe.md | 2 + deps/npm/doc/cli/npm-dist-tag.md | 2 + deps/npm/doc/cli/npm-install.md | 9 +- deps/npm/doc/cli/npm-link.md | 11 +- deps/npm/doc/cli/npm-owner.md | 2 + deps/npm/doc/cli/npm-search.md | 15 +- deps/npm/doc/cli/npm-test.md | 3 +- deps/npm/doc/cli/npm-update.md | 17 +- deps/npm/doc/cli/npm.md | 8 +- deps/npm/doc/files/package.json.md | 23 +- deps/npm/doc/misc/npm-config.md | 8 + deps/npm/doc/misc/npm-scope.md | 3 +- deps/npm/html/doc/README.html | 2 +- deps/npm/html/doc/api/npm-bin.html | 2 +- deps/npm/html/doc/api/npm-bugs.html | 2 +- deps/npm/html/doc/api/npm-cache.html | 2 +- deps/npm/html/doc/api/npm-commands.html | 2 +- deps/npm/html/doc/api/npm-config.html | 2 +- deps/npm/html/doc/api/npm-deprecate.html | 2 +- deps/npm/html/doc/api/npm-docs.html | 2 +- deps/npm/html/doc/api/npm-edit.html | 2 +- deps/npm/html/doc/api/npm-explore.html | 2 +- deps/npm/html/doc/api/npm-help-search.html | 2 +- deps/npm/html/doc/api/npm-init.html | 2 +- deps/npm/html/doc/api/npm-install.html | 2 +- deps/npm/html/doc/api/npm-link.html | 2 +- deps/npm/html/doc/api/npm-load.html | 2 +- deps/npm/html/doc/api/npm-ls.html | 2 +- deps/npm/html/doc/api/npm-outdated.html | 2 +- deps/npm/html/doc/api/npm-owner.html | 2 +- deps/npm/html/doc/api/npm-pack.html | 2 +- deps/npm/html/doc/api/npm-ping.html | 2 +- deps/npm/html/doc/api/npm-prefix.html | 2 +- deps/npm/html/doc/api/npm-prune.html | 2 +- deps/npm/html/doc/api/npm-publish.html | 2 +- deps/npm/html/doc/api/npm-rebuild.html | 2 +- deps/npm/html/doc/api/npm-repo.html | 2 +- deps/npm/html/doc/api/npm-restart.html | 2 +- deps/npm/html/doc/api/npm-root.html | 2 +- deps/npm/html/doc/api/npm-run-script.html | 2 +- deps/npm/html/doc/api/npm-search.html | 2 +- deps/npm/html/doc/api/npm-shrinkwrap.html | 2 +- deps/npm/html/doc/api/npm-start.html | 2 +- deps/npm/html/doc/api/npm-stop.html | 2 +- deps/npm/html/doc/api/npm-tag.html | 2 +- deps/npm/html/doc/api/npm-test.html | 2 +- deps/npm/html/doc/api/npm-uninstall.html | 2 +- deps/npm/html/doc/api/npm-unpublish.html | 2 +- deps/npm/html/doc/api/npm-update.html | 2 +- deps/npm/html/doc/api/npm-version.html | 2 +- deps/npm/html/doc/api/npm-view.html | 2 +- deps/npm/html/doc/api/npm-whoami.html | 2 +- deps/npm/html/doc/api/npm.html | 4 +- deps/npm/html/doc/cli/npm-access.html | 2 +- deps/npm/html/doc/cli/npm-adduser.html | 12 +- deps/npm/html/doc/cli/npm-bin.html | 2 +- deps/npm/html/doc/cli/npm-bugs.html | 4 +- deps/npm/html/doc/cli/npm-build.html | 2 +- deps/npm/html/doc/cli/npm-bundle.html | 2 +- deps/npm/html/doc/cli/npm-cache.html | 2 +- deps/npm/html/doc/cli/npm-completion.html | 2 +- deps/npm/html/doc/cli/npm-config.html | 4 +- deps/npm/html/doc/cli/npm-dedupe.html | 4 +- deps/npm/html/doc/cli/npm-deprecate.html | 2 +- deps/npm/html/doc/cli/npm-dist-tag.html | 4 +- deps/npm/html/doc/cli/npm-docs.html | 2 +- deps/npm/html/doc/cli/npm-edit.html | 2 +- deps/npm/html/doc/cli/npm-explore.html | 2 +- deps/npm/html/doc/cli/npm-help-search.html | 2 +- deps/npm/html/doc/cli/npm-help.html | 2 +- deps/npm/html/doc/cli/npm-init.html | 2 +- deps/npm/html/doc/cli/npm-install-test.html | 45 - deps/npm/html/doc/cli/npm-install.html | 12 +- deps/npm/html/doc/cli/npm-link.html | 13 +- deps/npm/html/doc/cli/npm-logout.html | 2 +- deps/npm/html/doc/cli/npm-ls.html | 4 +- deps/npm/html/doc/cli/npm-outdated.html | 2 +- deps/npm/html/doc/cli/npm-owner.html | 4 +- deps/npm/html/doc/cli/npm-pack.html | 2 +- deps/npm/html/doc/cli/npm-ping.html | 2 +- deps/npm/html/doc/cli/npm-prefix.html | 2 +- deps/npm/html/doc/cli/npm-prune.html | 2 +- deps/npm/html/doc/cli/npm-publish.html | 2 +- deps/npm/html/doc/cli/npm-rebuild.html | 2 +- deps/npm/html/doc/cli/npm-repo.html | 2 +- deps/npm/html/doc/cli/npm-restart.html | 2 +- deps/npm/html/doc/cli/npm-rm.html | 2 +- deps/npm/html/doc/cli/npm-root.html | 2 +- deps/npm/html/doc/cli/npm-run-script.html | 2 +- deps/npm/html/doc/cli/npm-search.html | 16 +- deps/npm/html/doc/cli/npm-shrinkwrap.html | 2 +- deps/npm/html/doc/cli/npm-star.html | 2 +- deps/npm/html/doc/cli/npm-stars.html | 2 +- deps/npm/html/doc/cli/npm-start.html | 2 +- deps/npm/html/doc/cli/npm-stop.html | 2 +- deps/npm/html/doc/cli/npm-tag.html | 2 +- deps/npm/html/doc/cli/npm-team.html | 2 +- deps/npm/html/doc/cli/npm-test.html | 5 +- deps/npm/html/doc/cli/npm-uninstall.html | 2 +- deps/npm/html/doc/cli/npm-unpublish.html | 2 +- deps/npm/html/doc/cli/npm-update.html | 17 +- deps/npm/html/doc/cli/npm-version.html | 2 +- deps/npm/html/doc/cli/npm-view.html | 2 +- deps/npm/html/doc/cli/npm-whoami.html | 2 +- deps/npm/html/doc/cli/npm.html | 14 +- deps/npm/html/doc/files/npm-folders.html | 2 +- deps/npm/html/doc/files/npm-global.html | 2 +- deps/npm/html/doc/files/npm-json.html | 18 +- deps/npm/html/doc/files/npmrc.html | 2 +- deps/npm/html/doc/files/package.json.html | 18 +- deps/npm/html/doc/index.html | 2 +- deps/npm/html/doc/misc/npm-coding-style.html | 2 +- deps/npm/html/doc/misc/npm-config.html | 9 +- deps/npm/html/doc/misc/npm-developers.html | 2 +- deps/npm/html/doc/misc/npm-disputes.html | 8 +- deps/npm/html/doc/misc/npm-index.html | 2 +- deps/npm/html/doc/misc/npm-orgs.html | 2 +- deps/npm/html/doc/misc/npm-registry.html | 2 +- deps/npm/html/doc/misc/npm-scope.html | 5 +- deps/npm/html/doc/misc/npm-scripts.html | 2 +- deps/npm/html/doc/misc/removing-npm.html | 2 +- deps/npm/html/doc/misc/semver.html | 2 +- deps/npm/lib/cache.js | 2 +- deps/npm/lib/cache/caching-client.js | 3 +- deps/npm/lib/config/defaults.js | 2 + deps/npm/lib/config/get-credentials-by-uri.js | 19 +- deps/npm/lib/npm.js | 2 +- deps/npm/lib/utils/lifecycle.js | 3 + deps/npm/lib/utils/map-to-registry.js | 52 +- deps/npm/man/man1/npm-adduser.1 | 10 +- deps/npm/man/man1/npm-bugs.1 | 2 + deps/npm/man/man1/npm-config.1 | 2 + deps/npm/man/man1/npm-dedupe.1 | 2 + deps/npm/man/man1/npm-dist-tag.1 | 2 + deps/npm/man/man1/npm-install-test.1 | 32 - deps/npm/man/man1/npm-install.1 | 10 +- deps/npm/man/man1/npm-link.1 | 11 +- deps/npm/man/man1/npm-ls.1 | 2 +- deps/npm/man/man1/npm-owner.1 | 2 + deps/npm/man/man1/npm-search.1 | 18 +- deps/npm/man/man1/npm-test.1 | 3 +- deps/npm/man/man1/npm-update.1 | 19 +- deps/npm/man/man1/npm.1 | 13 +- deps/npm/man/man3/npm.3 | 2 +- deps/npm/man/man5/npm-json.5 | 25 +- deps/npm/man/man5/package.json.5 | 25 +- deps/npm/man/man7/npm-config.7 | 11 + deps/npm/man/man7/npm-scope.7 | 3 +- deps/npm/node_modules/glob/README.md | 82 +- deps/npm/node_modules/glob/changelog.md | 67 + deps/npm/node_modules/glob/common.js | 48 +- deps/npm/node_modules/glob/glob.js | 38 +- deps/npm/node_modules/glob/package.json | 29 +- deps/npm/node_modules/glob/sync.js | 9 +- .../gyp/pylib/gyp/generator/android.py | 4 +- .../node-gyp/node_modules/glob/package.json | 3 +- .../debug/node_modules/ms/package.json | 3 +- .../node_modules/array-index/package.json | 3 +- .../node_modules/path-array/package.json | 3 +- deps/npm/node_modules/node-gyp/package.json | 28 +- .../npm-registry-client/README.md | 6 +- .../node_modules/npm-registry-client/index.js | 1 + .../npm-registry-client/lib/initialize.js | 33 +- .../readable-stream/doc/stream.markdown | 1182 +++++++++-------- .../readable-stream/lib/_stream_readable.js | 6 +- .../readable-stream/lib/_stream_writable.js | 6 +- .../node_modules/core-util-is/package.json | 23 +- .../process-nextick-args/package.json | 2 +- .../node_modules/string_decoder/package.json | 26 +- .../node_modules/util-deprecate/package.json | 23 +- .../node_modules/readable-stream/package.json | 45 +- .../node_modules/typedarray/package.json | 21 +- .../node_modules/concat-stream/package.json | 23 +- .../npm-registry-client/package.json | 29 +- .../@npm/npm-registry-client/cache.json | 1 + .../test/fixtures/underscore/1.3.3/cache.json | 1 + .../fixtures/underscore/1.3.3/package.tgz | Bin 0 -> 58692 bytes .../test/fixtures/underscore/cache.json | 1 + .../npm-registry-client/test/initialize.js | 34 + deps/npm/node_modules/request/.eslintrc | 45 + deps/npm/node_modules/strip-ansi/package.json | 39 +- deps/npm/node_modules/strip-ansi/readme.md | 10 +- deps/npm/package.json | 12 +- .../test/fixtures/config/userconfig-with-gc | 2 +- .../npm-test-files/1.2.5/package.tgz | Bin 241 -> 0 bytes .../npm-test-files/1.2.5/package/package.json | 1 - .../test/packages/npm-test-array-bin/README | 1 - .../packages/npm-test-array-bin/bin/array-bin | 2 - .../packages/npm-test-array-bin/package.json | 4 - deps/npm/test/packages/npm-test-blerg/README | 1 - .../test/packages/npm-test-blerg/package.json | 5 - deps/npm/test/packages/npm-test-blerg3/README | 1 - .../packages/npm-test-blerg3/package.json | 5 - .../test/packages/npm-test-bundled-git/README | 1 - .../npm-test-bundled-git/package.json | 5 - .../npm/test/packages/npm-test-dir-bin/README | 1 - .../packages/npm-test-dir-bin/bin/dir-bin | 2 - .../packages/npm-test-dir-bin/package.json | 4 - .../test/packages/npm-test-env-reader/README | 1 - .../packages/npm-test-env-reader/package.json | 14 - .../test/packages/npm-test-env-reader/test.js | 9 - .../test/packages/npm-test-files/.npmignore | 7 - .../npm/test/packages/npm-test-files/include4 | 0 .../test/packages/npm-test-files/package.json | 10 - .../test/packages/npm-test-files/sub/include | 0 .../test/packages/npm-test-files/sub/include2 | 0 .../test/packages/npm-test-files/sub/include4 | 1 - deps/npm/test/packages/npm-test-files/test.sh | 27 - .../packages/npm-test-ignore-nested-nm/README | 1 - .../lib/node_modules/foo | 1 - .../npm-test-ignore-nested-nm/package.json | 3 - .../test/packages/npm-test-ignore/.npmignore | 7 - deps/npm/test/packages/npm-test-ignore/README | 1 - .../test/packages/npm-test-ignore/include4 | 0 .../packages/npm-test-ignore/package.json | 3 - .../test/packages/npm-test-ignore/sub/include | 0 .../packages/npm-test-ignore/sub/include2 | 0 .../packages/npm-test-ignore/sub/include4 | 1 - .../npm/test/packages/npm-test-ignore/test.sh | 29 - .../packages/npm-test-missing-bindir/README | 1 - .../npm-test-missing-bindir/package.json | 4 - .../packages/npm-test-optional-deps/README | 1 - .../npm-test-optional-deps/package.json | 11 - .../packages/npm-test-platform-all/README | 1 - .../npm-test-platform-all/package.json | 5 - .../test/packages/npm-test-platform/README | 1 - .../packages/npm-test-platform/package.json | 5 - .../npm/test/packages/npm-test-private/README | 1 - .../packages/npm-test-private/package.json | 4 - .../test/packages/npm-test-shrinkwrap/README | 1 - .../packages/npm-test-shrinkwrap/package.json | 13 - .../packages/npm-test-test-package/README | 1 - .../npm-test-test-package/package.json | 5 - .../npm/test/packages/npm-test-url-dep/README | 1 - .../packages/npm-test-url-dep/package.json | 7 - deps/npm/test/tap/bearer-token-check.js | 119 ++ deps/npm/test/tap/config-credentials.js | 14 +- deps/npm/test/tap/files-and-ignores.js | 558 ++++++++ deps/npm/test/tap/legacy-array-bin.js | 80 ++ deps/npm/test/tap/legacy-bundled-git.js | 103 ++ deps/npm/test/tap/legacy-dir-bin.js | 79 ++ deps/npm/test/tap/legacy-ignore-nested-nm.js | 64 + deps/npm/test/tap/legacy-missing-bindir.js | 82 ++ deps/npm/test/tap/legacy-no-auth-leak.js | 75 ++ deps/npm/test/tap/legacy-npm-self-install.js | 107 ++ deps/npm/test/tap/legacy-optional-deps.js | 80 ++ deps/npm/test/tap/legacy-platform-all.js | 73 + deps/npm/test/tap/legacy-platform.js | 64 + deps/npm/test/tap/legacy-private.js | 58 + deps/npm/test/tap/legacy-shrinkwrap.js | 132 ++ deps/npm/test/tap/legacy-test-package.js | 76 ++ deps/npm/test/tap/legacy-url-dep.js | 61 + deps/npm/test/tap/lifecycle-path.js | 3 +- deps/npm/test/tap/map-to-registry.js | 81 +- deps/npm/test/tap/peer-deps-invalid.js | 106 +- deps/npm/test/tap/run-script.js | 67 +- 264 files changed, 3778 insertions(+), 1380 deletions(-) delete mode 100644 deps/npm/html/doc/cli/npm-install-test.html delete mode 100644 deps/npm/man/man1/npm-install-test.1 create mode 100644 deps/npm/node_modules/glob/changelog.md create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json create mode 100644 deps/npm/node_modules/request/.eslintrc delete mode 100644 deps/npm/test/npm_cache/npm-test-files/1.2.5/package.tgz delete mode 100644 deps/npm/test/npm_cache/npm-test-files/1.2.5/package/package.json delete mode 100644 deps/npm/test/packages/npm-test-array-bin/README delete mode 100644 deps/npm/test/packages/npm-test-array-bin/bin/array-bin delete mode 100644 deps/npm/test/packages/npm-test-array-bin/package.json delete mode 100644 deps/npm/test/packages/npm-test-blerg/README delete mode 100644 deps/npm/test/packages/npm-test-blerg/package.json delete mode 100644 deps/npm/test/packages/npm-test-blerg3/README delete mode 100644 deps/npm/test/packages/npm-test-blerg3/package.json delete mode 100644 deps/npm/test/packages/npm-test-bundled-git/README delete mode 100644 deps/npm/test/packages/npm-test-bundled-git/package.json delete mode 100644 deps/npm/test/packages/npm-test-dir-bin/README delete mode 100644 deps/npm/test/packages/npm-test-dir-bin/bin/dir-bin delete mode 100644 deps/npm/test/packages/npm-test-dir-bin/package.json delete mode 100644 deps/npm/test/packages/npm-test-env-reader/README delete mode 100644 deps/npm/test/packages/npm-test-env-reader/package.json delete mode 100755 deps/npm/test/packages/npm-test-env-reader/test.js delete mode 100644 deps/npm/test/packages/npm-test-files/.npmignore delete mode 100644 deps/npm/test/packages/npm-test-files/include4 delete mode 100644 deps/npm/test/packages/npm-test-files/package.json delete mode 100644 deps/npm/test/packages/npm-test-files/sub/include delete mode 100644 deps/npm/test/packages/npm-test-files/sub/include2 delete mode 100644 deps/npm/test/packages/npm-test-files/sub/include4 delete mode 100644 deps/npm/test/packages/npm-test-files/test.sh delete mode 100644 deps/npm/test/packages/npm-test-ignore-nested-nm/README delete mode 100644 deps/npm/test/packages/npm-test-ignore-nested-nm/lib/node_modules/foo delete mode 100644 deps/npm/test/packages/npm-test-ignore-nested-nm/package.json delete mode 100644 deps/npm/test/packages/npm-test-ignore/.npmignore delete mode 100644 deps/npm/test/packages/npm-test-ignore/README delete mode 100644 deps/npm/test/packages/npm-test-ignore/include4 delete mode 100644 deps/npm/test/packages/npm-test-ignore/package.json delete mode 100644 deps/npm/test/packages/npm-test-ignore/sub/include delete mode 100644 deps/npm/test/packages/npm-test-ignore/sub/include2 delete mode 100644 deps/npm/test/packages/npm-test-ignore/sub/include4 delete mode 100644 deps/npm/test/packages/npm-test-ignore/test.sh delete mode 100644 deps/npm/test/packages/npm-test-missing-bindir/README delete mode 100644 deps/npm/test/packages/npm-test-missing-bindir/package.json delete mode 100644 deps/npm/test/packages/npm-test-optional-deps/README delete mode 100644 deps/npm/test/packages/npm-test-optional-deps/package.json delete mode 100644 deps/npm/test/packages/npm-test-platform-all/README delete mode 100644 deps/npm/test/packages/npm-test-platform-all/package.json delete mode 100644 deps/npm/test/packages/npm-test-platform/README delete mode 100644 deps/npm/test/packages/npm-test-platform/package.json delete mode 100644 deps/npm/test/packages/npm-test-private/README delete mode 100644 deps/npm/test/packages/npm-test-private/package.json delete mode 100644 deps/npm/test/packages/npm-test-shrinkwrap/README delete mode 100644 deps/npm/test/packages/npm-test-shrinkwrap/package.json delete mode 100644 deps/npm/test/packages/npm-test-test-package/README delete mode 100644 deps/npm/test/packages/npm-test-test-package/package.json delete mode 100644 deps/npm/test/packages/npm-test-url-dep/README delete mode 100644 deps/npm/test/packages/npm-test-url-dep/package.json create mode 100644 deps/npm/test/tap/bearer-token-check.js create mode 100644 deps/npm/test/tap/files-and-ignores.js create mode 100644 deps/npm/test/tap/legacy-array-bin.js create mode 100644 deps/npm/test/tap/legacy-bundled-git.js create mode 100644 deps/npm/test/tap/legacy-dir-bin.js create mode 100644 deps/npm/test/tap/legacy-ignore-nested-nm.js create mode 100644 deps/npm/test/tap/legacy-missing-bindir.js create mode 100644 deps/npm/test/tap/legacy-no-auth-leak.js create mode 100644 deps/npm/test/tap/legacy-npm-self-install.js create mode 100644 deps/npm/test/tap/legacy-optional-deps.js create mode 100644 deps/npm/test/tap/legacy-platform-all.js create mode 100644 deps/npm/test/tap/legacy-platform.js create mode 100644 deps/npm/test/tap/legacy-private.js create mode 100644 deps/npm/test/tap/legacy-shrinkwrap.js create mode 100644 deps/npm/test/tap/legacy-test-package.js create mode 100644 deps/npm/test/tap/legacy-url-dep.js diff --git a/deps/npm/.npmignore b/deps/npm/.npmignore index a128c9b604b34d..6f97b5dc0dcb48 100644 --- a/deps/npm/.npmignore +++ b/deps/npm/.npmignore @@ -7,6 +7,7 @@ npm-debug.log /test/packages/npm-test-depends-on-spark/which-spark.log /test/packages/test-package/random-data.txt /test/root +/test/npm_cache node_modules/marked node_modules/ronn node_modules/tap diff --git a/deps/npm/.travis.yml b/deps/npm/.travis.yml index eff4750f3efb95..bea2fec243ef18 100644 --- a/deps/npm/.travis.yml +++ b/deps/npm/.travis.yml @@ -13,6 +13,6 @@ before_install: - "npm config set spin false" - "npm install -g npm/npm#2.x" - "mkdir -p /var/run/couchdb" -script: "npm run-script test-all" +script: "npm test" notifications: slack: npm-inc:kRqQjto7YbINqHPb1X6nS3g8 diff --git a/deps/npm/AUTHORS b/deps/npm/AUTHORS index fcfe1b696a4420..e4fd0f37c9db50 100644 --- a/deps/npm/AUTHORS +++ b/deps/npm/AUTHORS @@ -344,3 +344,11 @@ Vedat Mahir YILMAZ Jan Schär Xcat Liu Neil Kistner +Hutson Betts +Sergey Simonchik +Lewis Cowper +Arturo Coronel +Scott Plumlee +gnerkus +Robert Ludwig +Adam Byrne diff --git a/deps/npm/CHANGELOG.md b/deps/npm/CHANGELOG.md index f09094b85584d1..ac02e7436923a3 100644 --- a/deps/npm/CHANGELOG.md +++ b/deps/npm/CHANGELOG.md @@ -1,3 +1,169 @@ +### v2.15.1 (2016-03-17): + +It's another one of those releases again! Docs and tests, it turns out, have a +pretty easy time getting into LTS releases, and boring is exactly how LTS should +be. 💁 + +#### DOCS + +* [`981c89c`](https://github.com/npm/npm/commit/981c89c8e398ca22ab6bf466123b25728ef6f543) + [#11820](https://github.com/npm/npm/pull/11820) + The basic explanation for how `npm link` works was a bit confusing, and + somewhat incorrect. It should be clearer now. + ([@rhgb](https://github.com/rhgb)) +* [`35b2b45`](https://github.com/npm/npm/commit/35b2b45f181dcbfb297f53b577dc1f26efcf3aba) + [#11787](https://github.com/npm/npm/pull/11787) + The `verison` alias for `npm version` no longer shows up in the command list + when you do `npm -h`. + ([@doug-wade](https://github.com/doug-wade)) +* [`1c9d00f`](https://github.com/npm/npm/commit/1c9d00f788298a81a8a7293d7dcf430f01bdd7fd) + [#11786](https://github.com/npm/npm/pull/11786) + Add a comment to the `npm-scope.md` docs about `npm@>=2` being required in + order to use scoped packaged. + ([@doug-wade](https://github.com/doug-wade)) +* [`7d64fb1`](https://github.com/npm/npm/commit/7d64fb1452d360aa736f31c85d6776ce570b2365) + [#11762](https://github.com/npm/npm/pull/11762) + Roll back patch that previously advised people to use `--depth Infinity` + instead of `--depth 9999`. Just keep using `--depth 9999`. + ([@GriffinSchneider](https://github.com/GriffinSchneider)) + +#### TESTS + +* [`98a9ee4`](https://github.com/npm/npm/commit/98a9ee4773f83994b8eb63c0ff75a9283408ba1a) + [#11912](https://github.com/npm/npm/pull/11912) + Did you know npm can install itself? `npm install -g npm` is the way to + upgrade! Turns out that one of the tests that verified this functionality got + rewritten as part of our recent push for better tests, and in the process + omitted a detail about *how* the test ran. We're testing that corner case + again, now, by moving the install folder to `/tmp`, where the original legacy + test ran. + ([@iarna](https://github.com/iarna)) + +### v2.15.0 (2016-03-10): + +#### WHY IS THIS SEMVER-MINOR I THOUGHT THIS WAS LTS + +A brief note about LTS this week! + +npm, as you may know if you're using this `2.x` branch, has an LTS process for +releases. We also try and play nice with [Node.js' own LTS release +process](https://github.com/nodejs/LTS#lts-plan). That means we generally try to +avoid things like minor version bumps on our `2.x` branch (which is also tagged +`lts` in the `dist-tag`s). + +That said, we had a minor-bump update recently for `npm@3.8.0` which added a +`maxsockets` option to allow users to configure the number of concurrent sockets +that npm would keep open at a time -- a setting that has the potential to help a +bunch for people with fussy routers or internet connections that aren't very +happy with Node.js applications' usual concurrency storm. This change was done +to `npm-registry-client`, which we don't have a parallel LTS-tracking branch +for. + +After talking it over, we ended up deciding that this was a reasonable enough +addition to LTS, even though it's *technically* a `semver-minor` bump, taking +into account both its potential for bugfixing (specially on `2.x`!) and the +general hassle it would be to maintain another branch for `npm-registry-client`. + + +* [`6dd61e7`](https://github.com/npm/npm/commit/6dd61e781c145480dc255a3e6a748729868443fd) + Expose `maxsockets` config setting from new `npm-registry-client`. + ([@misterbyrne](https://github.com/misterbyrne)) +* [`8a021c3`](https://github.com/npm/npm/commit/8a021c35184e665bd1f3f70ae2f478af812ab614) + `npm-registry-client@7.1.0`: + Adds support for configuring the max number of concurrent sockets, defaulting + to `50`. + ([@iarna](https://github.com/iarna)) + +#### DOC PATCH IS HERE TOO + +* [`0ae9f74`](https://github.com/npm/npm/commit/0ae9f740001a1bdf5920bc464cf9e284d5d139f0) + [#11748](https://github.com/npm/npm/pull/11748) + Add command aliases as a separate section in documentation for npm + subcommands. + ([@watilde](https://github.com/watilde)) + +#### DEP UPDATES + +* [`bfc3888`](https://github.com/npm/npm/commit/bfc38887f832f701c16b7ee410c4e0220a90399f) + `strip-ansi@3.0.1` + ([@jbnicolai](https://github.com/jbnicolai)) +* [`d5f4d51`](https://github.com/npm/npm/commit/d5f4d51a1b7ea78d7431c7ed4fed30200b2622f8) + `node-gyp@3.3.1`: Fixes Android generator + ([@bnoordhuis](https://github.com/bnoordhuis)) +* [`4119df8`](https://github.com/npm/npm/commit/4119df8aecd2ae57b0492ad8c9a480d900833008) + `glob@7.0.3`: Some path-related fixes for Windows. + ([@isaacs](https://github.com/isaacs)) + +### v2.14.22 (2016-03-03): + +This week is all documentation improvements. In case you hadn't noticed, we +*love* doc patches. We love them so much, we give socks away if you submit +documentation PRs! + +These folks are all getting socks if they ask for them. The socks are +super-sweet. Do you have yours yet? 👣 + +* [`3f3c7d0`](https://github.com/npm/npm/commit/3f3c7d080f052a5db91ff6091f8b1b13f26b53d6) + [#11441](https://github.com/npm/npm/pull/11441) + Add a link to the [Contribution + Guidelines](https://github.com/npm/npm/wiki/Contributing-Guidelines) to the + main npm docs. + ([@watilde](https://github.com/watilde)) +* [`9f87bb1`](https://github.com/npm/npm/commit/9f87bb1934acb33b678c17b7827165b17c071a82) + [#11441](https://github.com/npm/npm/pull/11441) + Remove Google Group email from npm docs about contributing. + ([@watilde](https://github.com/watilde)) +* [`93eaab3`](https://github.com/npm/npm/commit/93eaab3ee5ad16c7d90d1a4b38a95403fcf3f0f6) + [#11474](https://github.com/npm/npm/pull/11474) + Fix an invalid JSON error overlooked in + [#11196](https://github.com/npm/npm/pull/11196). + ([@robludwig](https://github.com/robludwig)) +* [`a407ca2`](https://github.com/npm/npm/commit/a407ca2bcf6a05117e55cf2ab69376e09094995e) + [#11483](https://github.com/npm/npm/pull/11483) + Add more details and an example to the documentation for bundledDependencies. + ([@gnerkus](https://github.com/gnerkus)) +* [`2c851a2`](https://github.com/npm/npm/commit/2c851a231afd874baa77c42ea5ba539c454ac79c) + [#11490](https://github.com/npm/npm/pull/11490) + Document the `--registry` flag for `npm search`. + ([@plumlee](https://github.com/plumlee)) + +### v2.14.21 (2016-02-25): + +Good news, everyone! There's a new LTS release with a few shinies here and there! + +#### USE THIS ONE INSTEAD + +We had some cases where the versions of npm and node used in some scripting situations were different than the ideal, or what folks actually expected. These should be particularly helpful to our Windows friends! <3 + +* [`02813c5`](https://github.com/npm/npm/commit/02813c55782a9def23f7f1e614edc38c6c88aed3) [#9253](https://github.com/npm/npm/issues/9253) Fix a bug where, when running lifecycle scripts, if the Node.js binary you ran `npm` with wasn't in your `PATH`, `npm` wouldn't use it to run your scripts. ([@segrey](https://github.com/segrey) and [@narqo](https://github.com/narqo)) +* [`a985dd5`](https://github.com/npm/npm/commit/a985dd50e06ee51ba5544577f977c7440c227ba2) [#11526](https://github.com/npm/npm/pull/11526) Prefer locally installed npm in Git Bash -- previous behavior was to use the global one. This was done previously for other shells, but not for Git Bash. ([@destroyerofbuilds](https://github.com/destroyerofbuilds)) + +#### SOCKS FOR THE SOCK GOD + +* [`f961092`](https://github.com/npm/npm/commit/f9610920079d8b88ae464b30007a92c594bd85a8) + [#11636.](https://github.com/npm/npm/issues/11636.) + Document the `--save-bundle` option for `npm install`. + ([@datyayu](https://github.com/datyayu)) +* [`7c908b6`](https://github.com/npm/npm/commit/7c908b618f7123f0a3b860c71eb779e33df35964) + [#11644](https://github.com/npm/npm/pull/11644) + Add documentation for the `test` directory for packages. + ([@lewiscowper](https://github.com/lewiscowper)) + +#### INTERNAL TEST IMPROVEMENTS + +The npm CLI team's time recently has been sunk into npm's many years of tech debt. Specifically, we've been working on improving the test suite. This isn't user visible, but in future should mean a more stable, easier to contribute to npm. Ordinarily we don't report these kinds of changes in the change log, but I thought I might share this week as this chunk is bigger than usual. + +These patches were previously released for `npm@3`, and then ported back to `npm@2` LTS. + +* [`437c537`](https://github.com/npm/npm/commit/437c537e2be5923c6d2c2753154564ba13db8fd9) [#11613](https://github.com/npm/npm/pull/11613) Fix up one of the tests after rebasing the legacy test rewrite to `npm@2`. ([@zkat](https://github.com/zkat)) +* [`55abd0c`](https://github.com/npm/npm/commit/55abd0cc20e87a144d33ce2d459f65e7506da576) [#11613](https://github.com/npm/npm/pull/11613) Test that the `package.json` `files` section and `.npmignore` do what they're supposed to. ([@zkat](https://github.com/zkat)) +* [`a2b99b6`](https://github.com/npm/npm/commit/a2b99b6273ada14b2121ebc0acb7933e630edd9d) [#11613](https://github.com/npm/npm/pull/11613) Test that npm's distribution binary is complete and can be installed and used. ([@iarna](https://github.com/iarna)) +* [`8a8c36c`](https://github.com/npm/npm/commit/8a8c36ce51166006022e5c5d4f8655bbc458d651) [#11613](https://github.com/npm/npm/pull/11613) Test that environment variables are properly passed into scripts. + ([@iarna](https://github.com/zkat)) +* [`a95b550`](https://github.com/npm/npm/commit/a95b5507616bd51e83d7eab5f2337b1aff6480b1) [#11613](https://github.com/npm/npm/pull/11613) Test that we don't leak auth info into the environment. ([@iarna](https://github.com/iarna)) +* [`a1c1c52`](https://github.com/npm/npm/commit/a1c1c52efeab24f6dba154d054f85d9efc833486) [#11613](https://github.com/npm/npm/pull/11613) Remove all the relatively cryptic legacy tests and creates new tap tests that check the same functionality. The *legacy* tests were tests that were originally a shell script that was ported to javascript early in `npm`'s history. ([@iarna](https:\\github.com/iarna) and [@zkat](https://github.com/zkat)) +* [`9d89581`](https://github.com/npm/npm/commit/9d895811d3ee70c2e672f3d8fa06574495b5b488) [#11613](https://github.com/npm/npm/pull/11613) `tacks@1.0.9`: Add a package that provides a tool to generate fixtures from folders and, relatedly, a module that an create and tear down filesystem fixtures easily. ([@iarna](https://github.com/iarna)) + ### v2.14.20 (2016-02-18): Hope y'all are having a nice week! As usual, it's a fairly limited release. The diff --git a/deps/npm/bin/npm b/deps/npm/bin/npm index 45e8e41031cd27..5acd6fb61a7985 100755 --- a/deps/npm/bin/npm +++ b/deps/npm/bin/npm @@ -15,6 +15,13 @@ fi NPM_CLI_JS="$basedir/node_modules/npm/bin/npm-cli.js" case `uname` in + *MINGW*) + NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g` + NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js" + if [ -f "$NPM_PREFIX_NPM_CLI_JS" ]; then + NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS" + fi + ;; *CYGWIN*) NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g` NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js" diff --git a/deps/npm/doc/cli/npm-adduser.md b/deps/npm/doc/cli/npm-adduser.md index 24d3611e61c604..9afece598faf95 100644 --- a/deps/npm/doc/cli/npm-adduser.md +++ b/deps/npm/doc/cli/npm-adduser.md @@ -5,6 +5,8 @@ npm-adduser(1) -- Add a registry user account npm adduser [--registry=url] [--scope=@orgname] [--always-auth] + aliases: login, add-user + ## DESCRIPTION Create or verify a user named `` in the specified registry, and @@ -57,9 +59,11 @@ registries. Can be used with `--registry` and / or `--scope`, e.g. npm adduser --registry=http://private-registry.example.com --always-auth This will ensure that all requests to that registry (including for tarballs) -include an authorization header. See `always-auth` in `npm-config(7)` for more -details on always-auth. Registry-specific configuration of `always-auth` takes -precedence over any global configuration. +include an authorization header. This setting may be necessary for use with +private registries where metadata and package tarballs are stored on hosts with +different hostnames. See `always-auth` in `npm-config(7)` for more details on +always-auth. Registry-specific configuration of `always-auth` takes precedence +over any global configuration. ## SEE ALSO diff --git a/deps/npm/doc/cli/npm-bugs.md b/deps/npm/doc/cli/npm-bugs.md index 002d9f7556f31a..0278e2975a980d 100644 --- a/deps/npm/doc/cli/npm-bugs.md +++ b/deps/npm/doc/cli/npm-bugs.md @@ -6,6 +6,8 @@ npm-bugs(1) -- Bugs for a package in a web browser maybe npm bugs npm bugs (with no args in a package dir) + aliases: issues + ## DESCRIPTION This command tries to guess at the likely location of a package's diff --git a/deps/npm/doc/cli/npm-config.md b/deps/npm/doc/cli/npm-config.md index 1d978c9dea0b45..cd6e5949b5c056 100644 --- a/deps/npm/doc/cli/npm-config.md +++ b/deps/npm/doc/cli/npm-config.md @@ -12,6 +12,8 @@ npm-config(1) -- Manage the npm configuration files npm get npm set [--global] + aliases: c + ## DESCRIPTION npm gets its config settings from the command line, environment diff --git a/deps/npm/doc/cli/npm-dedupe.md b/deps/npm/doc/cli/npm-dedupe.md index d3be01050c7f5b..610ea6b38a853f 100644 --- a/deps/npm/doc/cli/npm-dedupe.md +++ b/deps/npm/doc/cli/npm-dedupe.md @@ -6,6 +6,8 @@ npm-dedupe(1) -- Reduce duplication npm dedupe [package names...] npm ddp [package names...] + aliases: find-dupes, ddp + ## DESCRIPTION Searches the local package tree and attempts to simplify the overall diff --git a/deps/npm/doc/cli/npm-dist-tag.md b/deps/npm/doc/cli/npm-dist-tag.md index 06721bbae6ab3b..a88fc35a5e8e7a 100644 --- a/deps/npm/doc/cli/npm-dist-tag.md +++ b/deps/npm/doc/cli/npm-dist-tag.md @@ -7,6 +7,8 @@ npm-dist-tag(1) -- Modify package distribution tags npm dist-tag rm npm dist-tag ls [] + aliases: dist-tags + ## DESCRIPTION Add, remove, and enumerate distribution tags on a package: diff --git a/deps/npm/doc/cli/npm-install.md b/deps/npm/doc/cli/npm-install.md index 3ae1f0aae381ed..f0cca201e44f64 100644 --- a/deps/npm/doc/cli/npm-install.md +++ b/deps/npm/doc/cli/npm-install.md @@ -7,7 +7,7 @@ npm-install(1) -- Install a package npm install npm install npm install - npm install [@/] [--save|--save-dev|--save-optional] [--save-exact] + npm install [@/] [--save|--save-dev|--save-optional] [--save-exact] [--save-bundle] npm install [@/]@ npm install [@/]@ npm install [@/]@ @@ -95,15 +95,13 @@ after packing it up into a tarball (b). * `--save-optional`: Package will appear in your `optionalDependencies`. When using any of the above options to save dependencies to your - package.json, there is an additional, optional flag: + package.json, there are two additional, optional flags: * `--save-exact`: Saved dependencies will be configured with an exact version rather than using npm's default semver range operator. - `` is optional. The package will be downloaded from the registry - associated with the specified scope. If no registry is associated with - the given scope the default registry is assumed. See `npm-scope(7)`. + * `-B, --save-bundle`: Saved dependencies will also be added to your `bundleDependencies` list. Note: if you do not include the @-symbol on your scope name, npm will interpret this as a GitHub repository instead, see below. Scopes names @@ -117,6 +115,7 @@ after packing it up into a tarball (b). npm install node-tap --save-dev npm install dtrace-provider --save-optional npm install readable-stream --save --save-exact + npm install ansi-regex --save --save-bundle **Note**: If there is a file or folder named `` in the current diff --git a/deps/npm/doc/cli/npm-link.md b/deps/npm/doc/cli/npm-link.md index b6d0c143ad4c15..1f3d63a0d924af 100644 --- a/deps/npm/doc/cli/npm-link.md +++ b/deps/npm/doc/cli/npm-link.md @@ -11,12 +11,13 @@ npm-link(1) -- Symlink a package folder Package linking is a two-step process. -First, `npm link` in a package folder will create a globally-installed -symbolic link from `prefix/package-name` to the current folder (see -`npm-config(7)` for the value of `prefix`). +First, `npm link` in a package folder will create a symlink in the global folder +`{prefix}/lib/node_modules/` that links to the package where the `npm +link` command was executed. (see `npm-config(7)` for the value of `prefix`). Next, in some other location, `npm link package-name` will create a -symlink from the local `node_modules` folder to the global symlink. +symbolic link from globally-installed `package-name` to `node_modules/` +of the current folder. Note that `package-name` is taken from `package.json`, not from directory name. @@ -39,7 +40,7 @@ For example: Now, any changes to ~/projects/node-redis will be reflected in ~/projects/node-bloggy/node_modules/node-redis/. Note that the link should -be to the package name, not the directory name for that package. +be to the package name, not the directory name for that package. You may also shortcut the two steps in one. For example, to do the above use-case in a shorter way: diff --git a/deps/npm/doc/cli/npm-owner.md b/deps/npm/doc/cli/npm-owner.md index b400f76378f531..0741d83a400654 100644 --- a/deps/npm/doc/cli/npm-owner.md +++ b/deps/npm/doc/cli/npm-owner.md @@ -7,6 +7,8 @@ npm-owner(1) -- Manage package owners npm owner add npm owner rm + aliases: author + ## DESCRIPTION Manage ownership of published packages. diff --git a/deps/npm/doc/cli/npm-search.md b/deps/npm/doc/cli/npm-search.md index 4757ad3202941e..78967f14eb019f 100644 --- a/deps/npm/doc/cli/npm-search.md +++ b/deps/npm/doc/cli/npm-search.md @@ -3,9 +3,9 @@ npm-search(1) -- Search for packages ## SYNOPSIS - npm search [--long] [search terms ...] - npm s [search terms ...] - npm se [search terms ...] + npm search [-l|--long] [search terms ...] + + aliases: s, se, find ## DESCRIPTION @@ -27,6 +27,15 @@ lines. When disabled (default) search results are truncated to fit neatly on a single line. Modules with extremely long names will fall on multiple lines. +### registry + + * Default: https://registry.npmjs.org/ + * Type : url + +Search the specified registry for modules. If you have configured npm to point to a different default registry, +such as your internal private module repository, `npm search` will default to that registry when searching. +Pass a different registry url such as the default above in order to override this setting. + ## SEE ALSO * npm-registry(7) diff --git a/deps/npm/doc/cli/npm-test.md b/deps/npm/doc/cli/npm-test.md index c2267082dfbe98..fe746cc73f17ff 100644 --- a/deps/npm/doc/cli/npm-test.md +++ b/deps/npm/doc/cli/npm-test.md @@ -4,7 +4,8 @@ npm-test(1) -- Test a package ## SYNOPSIS npm test [-- ] - npm tst [-- ] + + aliases: t, tst ## DESCRIPTION diff --git a/deps/npm/doc/cli/npm-update.md b/deps/npm/doc/cli/npm-update.md index 035cbff2939d05..775342f31c1b64 100644 --- a/deps/npm/doc/cli/npm-update.md +++ b/deps/npm/doc/cli/npm-update.md @@ -5,6 +5,8 @@ npm-update(1) -- Update a package npm update [-g] [ [ ...]] + aliases: up, upgrade + ## DESCRIPTION This command will update all the packages listed to the latest version @@ -22,16 +24,7 @@ or local) will be updated. As of `npm@2.6.1`, the `npm update` will only inspect top-level packages. Prior versions of `npm` would also recursively inspect all dependencies. -To get the old behavior, use `npm --depth Infinity update`, but be warned that -simultaneous asynchronous update of all packages, including `npm` itself -and packages that `npm` depends on, often causes problems up to and including -the uninstallation of `npm` itself. - -To restore a missing `npm`, use the command: - -``` -curl -L https://npmjs.com/install.sh | sh -``` +To get the old behavior, use `npm --depth 9999 update`. ## EXAMPLES @@ -45,7 +38,7 @@ on dependencies, `dep1` (`dep2`, .. etc.). The published versions of `dep1` are ``` { "dist-tags": { "latest": "1.2.2" }, - "versions": { + "versions": [ "1.2.2", "1.2.1", "1.2.0", @@ -55,7 +48,7 @@ on dependencies, `dep1` (`dep2`, .. etc.). The published versions of `dep1` are "0.4.1", "0.4.0", "0.2.0" - } + ] } ``` diff --git a/deps/npm/doc/cli/npm.md b/deps/npm/doc/cli/npm.md index ae3a41d84bb3de..e23354ac86f147 100644 --- a/deps/npm/doc/cli/npm.md +++ b/deps/npm/doc/cli/npm.md @@ -127,11 +127,11 @@ Patches welcome! Contributors are listed in npm's `package.json` file. You can view them easily by doing `npm view npm contributors`. -If you would like to contribute, but don't know what to work on, check -the issues list or ask on the mailing list. +If you would like to contribute, but don't know what to work on, read +the contributing guidelines and check the issues list. +* https://github.com/npm/npm/wiki/Contributing-Guidelines * -* ## BUGS @@ -139,8 +139,6 @@ When you find issues, please report them: * web: -* email: - Be sure to include *all* of the output from the npm command that didn't work as expected. The `npm-debug.log` file is also helpful to provide. diff --git a/deps/npm/doc/files/package.json.md b/deps/npm/doc/files/package.json.md index ccbc6715acb7ed..f8c30068592a63 100644 --- a/deps/npm/doc/files/package.json.md +++ b/deps/npm/doc/files/package.json.md @@ -327,6 +327,11 @@ maybe, someday. Put example scripts in here. Someday, it might be exposed in some clever way. +### directories.test + +Put your tests in here. It is currently not exposed, but it might be in the +future. + ## repository Specify the place where your code lives. This is helpful for people who @@ -571,7 +576,23 @@ this. If you depend on features introduced in 1.5.2, use `">= 1.5.2 < 2"`. ## bundledDependencies -Array of package names that will be bundled when publishing the package. +This defines an array of package names that will be bundled when publishing the package. + +In cases where you need to preserve npm packages locally or have them available through a single file download, you can bundle the packages in a tarball file by specifying the package names in the `bundledDependencies` array and executing `npm pack`. + +For example: +If we define a package.json like this: + +``` +{ + "name": "awesome-web-framework", + "version": "1.0.0", + "bundledDependencies": [ + 'renderized', 'super-streams' + ] +} +``` +we can obtain `awesome-web-framework-1.0.0.tgz` file by running `npm pack`. This file contains the dependencies `renderized` and `super-streams` which can be installed in a new project by executing `npm install awesome-web-framework-1.0.0.tgz`. If this is spelled `"bundleDependencies"`, then that is also honored. diff --git a/deps/npm/doc/misc/npm-config.md b/deps/npm/doc/misc/npm-config.md index 76471601c162d9..a59767791d427c 100644 --- a/deps/npm/doc/misc/npm-config.md +++ b/deps/npm/doc/misc/npm-config.md @@ -530,6 +530,14 @@ colored output if it is a TTY. Show extended information in `npm ls` and `npm search`. +### maxsockets + +* Default: 50 +* Type: Number + +The maximum number of connections to use per origin (protocol/host/port +combination). Passed to the `http` `Agent` used to make the request. + ### message * Default: "%s" diff --git a/deps/npm/doc/misc/npm-scope.md b/deps/npm/doc/misc/npm-scope.md index f1e4da1f1fab0a..aae27cabbd67ed 100644 --- a/deps/npm/doc/misc/npm-scope.md +++ b/deps/npm/doc/misc/npm-scope.md @@ -54,7 +54,8 @@ just specifying to require the module `mypackage` in the folder called `@myorg`. Scoped packages can be published to any registry that supports them, including the public npm registry. -(As of 2015-04-19, the public npm registry **does** support scoped packages) +(As of 2015-04-19, and with npm 2.0 or newer, the public npm registry **does** +support scoped packages) If you wish, you may associate a scope with a registry; see below. diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html index 288ea802b45263..692b8a5261400b 100644 --- a/deps/npm/html/doc/README.html +++ b/deps/npm/html/doc/README.html @@ -127,5 +127,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html index 94b82c9188a680..c79fe10422d594 100644 --- a/deps/npm/html/doc/api/npm-bin.html +++ b/deps/npm/html/doc/api/npm-bin.html @@ -28,5 +28,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html index 62242b26af58f6..09e2bc09450faf 100644 --- a/deps/npm/html/doc/api/npm-bugs.html +++ b/deps/npm/html/doc/api/npm-bugs.html @@ -33,5 +33,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-cache.html b/deps/npm/html/doc/api/npm-cache.html index 785a1aa043c540..0fd8c4d68212b7 100644 --- a/deps/npm/html/doc/api/npm-cache.html +++ b/deps/npm/html/doc/api/npm-cache.html @@ -42,5 +42,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html index 9979e3df71d406..3b5eccdd427ef1 100644 --- a/deps/npm/html/doc/api/npm-commands.html +++ b/deps/npm/html/doc/api/npm-commands.html @@ -36,5 +36,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html index b4a6763674ec18..34caf47bac8b8b 100644 --- a/deps/npm/html/doc/api/npm-config.html +++ b/deps/npm/html/doc/api/npm-config.html @@ -57,5 +57,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html index 54aadac5f1cce4..134e3a0940a141 100644 --- a/deps/npm/html/doc/api/npm-deprecate.html +++ b/deps/npm/html/doc/api/npm-deprecate.html @@ -47,5 +47,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html index 1142796c3104d9..606abc68590250 100644 --- a/deps/npm/html/doc/api/npm-docs.html +++ b/deps/npm/html/doc/api/npm-docs.html @@ -33,5 +33,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html index 679de772dfdede..0d06ec8b5c3dec 100644 --- a/deps/npm/html/doc/api/npm-edit.html +++ b/deps/npm/html/doc/api/npm-edit.html @@ -36,5 +36,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html index bd655478058b9c..c2b00dee7f317b 100644 --- a/deps/npm/html/doc/api/npm-explore.html +++ b/deps/npm/html/doc/api/npm-explore.html @@ -31,5 +31,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html index bc0075f8f4db32..5aaa0d749d934f 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 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html index 35ad354f0c35db..16656cfa83ac33 100644 --- a/deps/npm/html/doc/api/npm-init.html +++ b/deps/npm/html/doc/api/npm-init.html @@ -39,5 +39,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html index eca8b80cf2a65c..ff44ed9b80b69c 100644 --- a/deps/npm/html/doc/api/npm-install.html +++ b/deps/npm/html/doc/api/npm-install.html @@ -32,5 +32,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html index dc764f89244c94..4370dfa82016a4 100644 --- a/deps/npm/html/doc/api/npm-link.html +++ b/deps/npm/html/doc/api/npm-link.html @@ -42,5 +42,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html index 30a2036bd7ca15..4ff8e4dd1fa708 100644 --- a/deps/npm/html/doc/api/npm-load.html +++ b/deps/npm/html/doc/api/npm-load.html @@ -37,5 +37,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html index fd75ccac3d6403..395cd8c0d7cda1 100644 --- a/deps/npm/html/doc/api/npm-ls.html +++ b/deps/npm/html/doc/api/npm-ls.html @@ -63,5 +63,5 @@

global

       - + diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html index aaa194ed35deed..f88bf6ded1acbd 100644 --- a/deps/npm/html/doc/api/npm-outdated.html +++ b/deps/npm/html/doc/api/npm-outdated.html @@ -28,5 +28,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html index 5d925969733a57..9352adce3c0eae 100644 --- a/deps/npm/html/doc/api/npm-owner.html +++ b/deps/npm/html/doc/api/npm-owner.html @@ -47,5 +47,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html index 14c367a89e4e8d..f85a094d53dde5 100644 --- a/deps/npm/html/doc/api/npm-pack.html +++ b/deps/npm/html/doc/api/npm-pack.html @@ -33,5 +33,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-ping.html b/deps/npm/html/doc/api/npm-ping.html index 4dabc345acafde..9a0461ee11d735 100644 --- a/deps/npm/html/doc/api/npm-ping.html +++ b/deps/npm/html/doc/api/npm-ping.html @@ -29,4 +29,4 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html index 0921bed4b1f691..7003be312db0b7 100644 --- a/deps/npm/html/doc/api/npm-prefix.html +++ b/deps/npm/html/doc/api/npm-prefix.html @@ -29,5 +29,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html index 6ff302c3c87645..d49bfc87b99386 100644 --- a/deps/npm/html/doc/api/npm-prune.html +++ b/deps/npm/html/doc/api/npm-prune.html @@ -30,5 +30,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html index 9d0b68b5759f13..c19aadd53fc9ee 100644 --- a/deps/npm/html/doc/api/npm-publish.html +++ b/deps/npm/html/doc/api/npm-publish.html @@ -46,5 +46,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html index bc3e98e646f066..da78b38906037d 100644 --- a/deps/npm/html/doc/api/npm-rebuild.html +++ b/deps/npm/html/doc/api/npm-rebuild.html @@ -30,5 +30,5 @@

CONFIGURATION

       - + diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html index e9146d84af2c37..7469d73e07364f 100644 --- a/deps/npm/html/doc/api/npm-repo.html +++ b/deps/npm/html/doc/api/npm-repo.html @@ -33,5 +33,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html index bf019a5011d4b4..bd4d54b13ddb64 100644 --- a/deps/npm/html/doc/api/npm-restart.html +++ b/deps/npm/html/doc/api/npm-restart.html @@ -52,5 +52,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html index c835d4e6b6af9e..830b5c723698b2 100644 --- a/deps/npm/html/doc/api/npm-root.html +++ b/deps/npm/html/doc/api/npm-root.html @@ -29,5 +29,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html index f694dcc645d21d..568a49f5686c73 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 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html index 3292d838a4c458..e6f4d166e92d7e 100644 --- a/deps/npm/html/doc/api/npm-search.html +++ b/deps/npm/html/doc/api/npm-search.html @@ -53,5 +53,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html index 75d51dd630943a..453cc82fc27ae4 100644 --- a/deps/npm/html/doc/api/npm-shrinkwrap.html +++ b/deps/npm/html/doc/api/npm-shrinkwrap.html @@ -33,5 +33,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html index 715a7bba82f85c..5477a143121612 100644 --- a/deps/npm/html/doc/api/npm-start.html +++ b/deps/npm/html/doc/api/npm-start.html @@ -28,5 +28,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html index eca26362b4d90a..3bf0851434a666 100644 --- a/deps/npm/html/doc/api/npm-stop.html +++ b/deps/npm/html/doc/api/npm-stop.html @@ -28,5 +28,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html index ddb92596c9170f..a97fee612b18fc 100644 --- a/deps/npm/html/doc/api/npm-tag.html +++ b/deps/npm/html/doc/api/npm-tag.html @@ -36,5 +36,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html index 830585438a452b..9a32f5fb3c8441 100644 --- a/deps/npm/html/doc/api/npm-test.html +++ b/deps/npm/html/doc/api/npm-test.html @@ -30,5 +30,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html index 7458d7e735c8a4..ab13f65071acf3 100644 --- a/deps/npm/html/doc/api/npm-uninstall.html +++ b/deps/npm/html/doc/api/npm-uninstall.html @@ -30,5 +30,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html index 3f7f76c883c491..517ef69d7a958d 100644 --- a/deps/npm/html/doc/api/npm-unpublish.html +++ b/deps/npm/html/doc/api/npm-unpublish.html @@ -33,5 +33,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html index 87455a9ae0aadd..9bdda1f22beb6d 100644 --- a/deps/npm/html/doc/api/npm-update.html +++ b/deps/npm/html/doc/api/npm-update.html @@ -33,5 +33,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html index e0e8b2761def3d..43ecf02668d774 100644 --- a/deps/npm/html/doc/api/npm-version.html +++ b/deps/npm/html/doc/api/npm-version.html @@ -32,5 +32,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html index 3dd80d9c32730d..cf9a61b59a7b97 100644 --- a/deps/npm/html/doc/api/npm-view.html +++ b/deps/npm/html/doc/api/npm-view.html @@ -81,5 +81,5 @@

RETURN VALUE

       - + diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html index 55233284d1a39c..095e750349e8ed 100644 --- a/deps/npm/html/doc/api/npm-whoami.html +++ b/deps/npm/html/doc/api/npm-whoami.html @@ -29,5 +29,5 @@

SYNOPSIS

       - + diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html index df4ce202bb43cc..51a0eb3b641278 100644 --- a/deps/npm/html/doc/api/npm.html +++ b/deps/npm/html/doc/api/npm.html @@ -23,7 +23,7 @@

SYNOPSIS

npm.commands.install(["package"], cb) })

VERSION

-

2.14.20

+

2.15.0

DESCRIPTION

This is the API documentation for npm. To find documentation of the command line @@ -109,5 +109,5 @@

ABBREVS

       - + diff --git a/deps/npm/html/doc/cli/npm-access.html b/deps/npm/html/doc/cli/npm-access.html index 20f2717c42118d..03e8250cbedb9e 100644 --- a/deps/npm/html/doc/cli/npm-access.html +++ b/deps/npm/html/doc/cli/npm-access.html @@ -84,5 +84,5 @@

SEE ALSO

       - + diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html index 2152a6a8cec187..54ae6e4118f3d2 100644 --- a/deps/npm/html/doc/cli/npm-adduser.html +++ b/deps/npm/html/doc/cli/npm-adduser.html @@ -12,6 +12,8 @@

npm-adduser

Add a registry user account

SYNOPSIS

npm adduser [--registry=url] [--scope=@orgname] [--always-auth]
+
+aliases: login, add-user
 

DESCRIPTION

Create or verify a user named <username> in the specified registry, and save the credentials to the .npmrc file. If no registry is specified, @@ -44,9 +46,11 @@

always-auth

registries. Can be used with --registry and / or --scope, e.g.

npm adduser --registry=http://private-registry.example.com --always-auth
 

This will ensure that all requests to that registry (including for tarballs) -include an authorization header. See always-auth in npm-config(7) for more -details on always-auth. Registry-specific configuration of always-auth takes -precedence over any global configuration.

+include an authorization header. This setting may be necessary for use with +private registries where metadata and package tarballs are stored on hosts with +different hostnames. See always-auth in npm-config(7) for more details on +always-auth. Registry-specific configuration of always-auth takes precedence +over any global configuration.

SEE ALSO

  • npm-registry(7)
  • @@ -68,5 +72,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html index 38226fffabc72b..a9def2a9015475 100644 --- a/deps/npm/html/doc/cli/npm-bin.html +++ b/deps/npm/html/doc/cli/npm-bin.html @@ -35,5 +35,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html index 99e5c63153d88b..ae6c1f4d7280ce 100644 --- a/deps/npm/html/doc/cli/npm-bugs.html +++ b/deps/npm/html/doc/cli/npm-bugs.html @@ -13,6 +13,8 @@

    npm-bugs

    Bugs for a package in a

    SYNOPSIS

    npm bugs <pkgname>
     npm bugs (with no args in a package dir)
    +
    +aliases: issues
     

    DESCRIPTION

    This command tries to guess at the likely location of a package's bug tracker URL, and then tries to open it using the --browser @@ -54,5 +56,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html index 9ed02b341891d1..f768c932063d65 100644 --- a/deps/npm/html/doc/cli/npm-build.html +++ b/deps/npm/html/doc/cli/npm-build.html @@ -40,5 +40,5 @@

    DESCRIPTION

           - + diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html index 7cd12975f82d40..8c700377190488 100644 --- a/deps/npm/html/doc/cli/npm-bundle.html +++ b/deps/npm/html/doc/cli/npm-bundle.html @@ -31,5 +31,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html index 578d3d7afe60a9..613261b1201c04 100644 --- a/deps/npm/html/doc/cli/npm-cache.html +++ b/deps/npm/html/doc/cli/npm-cache.html @@ -81,5 +81,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html index 8ecbe512f17d50..e3896b87156037 100644 --- a/deps/npm/html/doc/cli/npm-completion.html +++ b/deps/npm/html/doc/cli/npm-completion.html @@ -42,5 +42,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html index bce6e121e5f1f7..8535edcaf0ee97 100644 --- a/deps/npm/html/doc/cli/npm-config.html +++ b/deps/npm/html/doc/cli/npm-config.html @@ -19,6 +19,8 @@

    SYNOPSIS

    npm c [set|get|delete|list] npm get <key> npm set <key> <value> [--global] + +aliases: c

    DESCRIPTION

    npm gets its config settings from the command line, environment variables, npmrc files, and in some cases, the package.json file.

    @@ -66,5 +68,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html index 756959fa7fa141..0cc2b1408444c6 100644 --- a/deps/npm/html/doc/cli/npm-dedupe.html +++ b/deps/npm/html/doc/cli/npm-dedupe.html @@ -13,6 +13,8 @@

    npm-dedupe

    Reduce duplicationSYNOPSIS

    npm dedupe [package names...]
     npm ddp [package names...]
    +
    +aliases: find-dupes, ddp
     

    DESCRIPTION

    Searches the local package tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can @@ -63,5 +65,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html index b68571a64eb1dc..c96a0db369ee9c 100644 --- a/deps/npm/html/doc/cli/npm-deprecate.html +++ b/deps/npm/html/doc/cli/npm-deprecate.html @@ -38,5 +38,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-dist-tag.html b/deps/npm/html/doc/cli/npm-dist-tag.html index 71354a368c0a0a..43e3924efa564b 100644 --- a/deps/npm/html/doc/cli/npm-dist-tag.html +++ b/deps/npm/html/doc/cli/npm-dist-tag.html @@ -14,6 +14,8 @@

    SYNOPSIS

    npm dist-tag add <pkg>@<version> [<tag>]
     npm dist-tag rm <pkg> <tag>
     npm dist-tag ls [<pkg>]
    +
    +aliases: dist-tags
     

    DESCRIPTION

    Add, remove, and enumerate distribution tags on a package:

      @@ -85,5 +87,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html index 6e09bf2d9813c4..f64494ef7d14ce 100644 --- a/deps/npm/html/doc/cli/npm-docs.html +++ b/deps/npm/html/doc/cli/npm-docs.html @@ -56,5 +56,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html index cd8c8b68fc8462..4c513c1928938c 100644 --- a/deps/npm/html/doc/cli/npm-edit.html +++ b/deps/npm/html/doc/cli/npm-edit.html @@ -49,5 +49,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html index d4f2e44b4a6760..dc29b16d08c3a1 100644 --- a/deps/npm/html/doc/cli/npm-explore.html +++ b/deps/npm/html/doc/cli/npm-explore.html @@ -49,5 +49,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html index 857d7e6625eff3..0cc0b0d489b91c 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 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html index aa1a531c1a12bc..52d2c6ac7efd63 100644 --- a/deps/npm/html/doc/cli/npm-help.html +++ b/deps/npm/html/doc/cli/npm-help.html @@ -52,5 +52,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html index d99443cc5621c7..07734cd05f0f5b 100644 --- a/deps/npm/html/doc/cli/npm-init.html +++ b/deps/npm/html/doc/cli/npm-init.html @@ -48,5 +48,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-install-test.html b/deps/npm/html/doc/cli/npm-install-test.html deleted file mode 100644 index 8bc6a2bebab114..00000000000000 --- a/deps/npm/html/doc/cli/npm-install-test.html +++ /dev/null @@ -1,45 +0,0 @@ - - - npm-install-test - - - - - - -
      - -

      npm install-test

      Install package(s) and run tests

      -

      SYNOPSIS

      -
      npm install-test (with no args, in package dir)
      -npm install-test [<@scope>/]<name>
      -npm install-test [<@scope>/]<name>@<tag>
      -npm install-test [<@scope>/]<name>@<version>
      -npm install-test [<@scope>/]<name>@<version range>
      -npm install-test <tarball file>
      -npm install-test <tarball url>
      -npm install-test <folder>
      -
      -alias: npm it
      -common options: [--save|--save-dev|--save-optional] [--save-exact] [--dry-run]
      -

      DESCRIPTION

      -

      This command runs an npm install followed immediately by an npm test. It -takes exactly the same arguments as npm install.

      -

      SEE ALSO

      - - -
      - - - - - - - - - - - diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html index 6ea5f73a8d74da..9f3a0429cbae82 100644 --- a/deps/npm/html/doc/cli/npm-install.html +++ b/deps/npm/html/doc/cli/npm-install.html @@ -15,7 +15,7 @@

      SYNOPSIS

      npm install <tarball file> npm install <tarball url> npm install <folder> -npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact] +npm install [@<scope>/]<name> [--save|--save-dev|--save-optional] [--save-exact] [--save-bundle] npm install [@<scope>/]<name>@<tag> npm install [@<scope>/]<name>@<version> npm install [@<scope>/]<name>@<version range> @@ -82,14 +82,13 @@

      SYNOPSIS

    • --save-optional: Package will appear in your optionalDependencies.

      When using any of the above options to save dependencies to your -package.json, there is an additional, optional flag:

      +package.json, there are two additional, optional flags:

    • --save-exact: Saved dependencies will be configured with an exact version rather than using npm's default semver range operator.

      -

      <scope> is optional. The package will be downloaded from the registry -associated with the specified scope. If no registry is associated with -the given scope the default registry is assumed. See npm-scope(7).

      +
    • +
    • -B, --save-bundle: Saved dependencies will also be added to your bundleDependencies list.

      Note: if you do not include the @-symbol on your scope name, npm will interpret this as a GitHub repository instead, see below. Scopes names must also be followed by a slash.

      @@ -100,6 +99,7 @@

      SYNOPSIS

      npm install node-tap --save-dev npm install dtrace-provider --save-optional npm install readable-stream --save --save-exact +npm install ansi-regex --save --save-bundle
    @@ -279,5 +279,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html index d57c65f6f19667..87c8ae81c5e1a7 100644 --- a/deps/npm/html/doc/cli/npm-link.html +++ b/deps/npm/html/doc/cli/npm-link.html @@ -16,11 +16,12 @@

    SYNOPSIS

    npm ln (with any of the previous argument usage)

    DESCRIPTION

    Package linking is a two-step process.

    -

    First, npm link in a package folder will create a globally-installed -symbolic link from prefix/package-name to the current folder (see -npm-config(7) for the value of prefix).

    +

    First, npm link in a package folder will create a symlink in the global folder +{prefix}/lib/node_modules/<package> that links to the package where the npm +link command was executed. (see npm-config(7) for the value of prefix).

    Next, in some other location, npm link package-name will create a -symlink from the local node_modules folder to the global symlink.

    +symbolic link from globally-installed package-name to node_modules/ +of the current folder.

    Note that package-name is taken from package.json, not from directory name.

    The package name can be optionally prefixed with a scope. See npm-scope(7). @@ -36,7 +37,7 @@

    SYNOPSIS

    npm link redis # link-install the package

    Now, any changes to ~/projects/node-redis will be reflected in ~/projects/node-bloggy/node_modules/node-redis/. Note that the link should -be to the package name, not the directory name for that package.

    +be to the package name, not the directory name for that package.

    You may also shortcut the two steps in one. For example, to do the above use-case in a shorter way:

    cd ~/projects/node-bloggy  # go into the dir of your main project
    @@ -72,5 +73,5 @@ 

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/cli/npm-logout.html b/deps/npm/html/doc/cli/npm-logout.html index ea01bb43aab6e7..c82727f5c4595c 100644 --- a/deps/npm/html/doc/cli/npm-logout.html +++ b/deps/npm/html/doc/cli/npm-logout.html @@ -51,5 +51,5 @@

    scope

           - + diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html index 4aafcb8373db3c..5af7135a678efa 100644 --- a/deps/npm/html/doc/cli/npm-ls.html +++ b/deps/npm/html/doc/cli/npm-ls.html @@ -22,7 +22,7 @@

    SYNOPSIS

    limit the results to only the paths to the packages named. Note that nested packages will also show the paths to the specified packages. For example, running npm ls promzard in npm's source tree will show:

    -
    npm@2.14.20 /path/to/npm
    +
    npm@2.15.0 /path/to/npm
     └─┬ init-package-json@0.0.4
       └── promzard@0.1.5
     

    It will print out extraneous, missing, and invalid packages.

    @@ -97,5 +97,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html index adb2d79e2522de..5bb081e90cb29c 100644 --- a/deps/npm/html/doc/cli/npm-outdated.html +++ b/deps/npm/html/doc/cli/npm-outdated.html @@ -116,5 +116,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html index e513e85f33f00d..85ab5703df6abb 100644 --- a/deps/npm/html/doc/cli/npm-owner.html +++ b/deps/npm/html/doc/cli/npm-owner.html @@ -14,6 +14,8 @@

    SYNOPSIS

    npm owner ls <package name>
     npm owner add <user> <package name>
     npm owner rm <user> <package name>
    +
    +aliases: author
     

    DESCRIPTION

    Manage ownership of published packages.

      @@ -49,5 +51,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html index 61d7df6189398a..c247a4d4b95741 100644 --- a/deps/npm/html/doc/cli/npm-pack.html +++ b/deps/npm/html/doc/cli/npm-pack.html @@ -41,5 +41,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-ping.html b/deps/npm/html/doc/cli/npm-ping.html index 72888e9cc31e0f..20524fd5dd703b 100644 --- a/deps/npm/html/doc/cli/npm-ping.html +++ b/deps/npm/html/doc/cli/npm-ping.html @@ -32,4 +32,4 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html index 7139defece1220..2f217bcfab403f 100644 --- a/deps/npm/html/doc/cli/npm-prefix.html +++ b/deps/npm/html/doc/cli/npm-prefix.html @@ -38,5 +38,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html index c1843ab2d9574a..e1fb7cd73ee8a5 100644 --- a/deps/npm/html/doc/cli/npm-prune.html +++ b/deps/npm/html/doc/cli/npm-prune.html @@ -41,5 +41,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html index 61b3076d84ace2..8ca91d7aaccbb0 100644 --- a/deps/npm/html/doc/cli/npm-publish.html +++ b/deps/npm/html/doc/cli/npm-publish.html @@ -69,5 +69,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html index ca28dc0db333f3..46e3975d7fbb4d 100644 --- a/deps/npm/html/doc/cli/npm-rebuild.html +++ b/deps/npm/html/doc/cli/npm-rebuild.html @@ -38,5 +38,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html index 79b35adcfc5754..bfdcbff1f707a7 100644 --- a/deps/npm/html/doc/cli/npm-repo.html +++ b/deps/npm/html/doc/cli/npm-repo.html @@ -42,5 +42,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html index 0fc1103cd4e47f..5d38582f641c7c 100644 --- a/deps/npm/html/doc/cli/npm-restart.html +++ b/deps/npm/html/doc/cli/npm-restart.html @@ -53,5 +53,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html index 268fba49b623b9..2a36d6104987ce 100644 --- a/deps/npm/html/doc/cli/npm-rm.html +++ b/deps/npm/html/doc/cli/npm-rm.html @@ -39,5 +39,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html index 67e26743c65254..b4c3969b597714 100644 --- a/deps/npm/html/doc/cli/npm-root.html +++ b/deps/npm/html/doc/cli/npm-root.html @@ -35,5 +35,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html index bfc11f785013cb..7b97792a2126bc 100644 --- a/deps/npm/html/doc/cli/npm-run-script.html +++ b/deps/npm/html/doc/cli/npm-run-script.html @@ -57,5 +57,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html index 653c605248cef2..6f4cbe3cfb5c79 100644 --- a/deps/npm/html/doc/cli/npm-search.html +++ b/deps/npm/html/doc/cli/npm-search.html @@ -11,9 +11,9 @@

      npm-search

      Search for packages

      SYNOPSIS

      -
      npm search [--long] [search terms ...]
      -npm s [search terms ...]
      -npm se [search terms ...]
      +
      npm search [-l|--long] [search terms ...]
      +
      +aliases: s, se, find
       

      DESCRIPTION

      Search the registry for packages matching the search terms.

      If a term starts with /, then it's interpreted as a regular expression. @@ -29,6 +29,14 @@

      long

      lines. When disabled (default) search results are truncated to fit neatly on a single line. Modules with extremely long names will fall on multiple lines.

      +

      registry

      + +

      Search the specified registry for modules. If you have configured npm to point to a different default registry, +such as your internal private module repository, npm search will default to that registry when searching. +Pass a different registry url such as the default above in order to override this setting.

      SEE ALSO

      • npm-registry(7)
      • @@ -49,5 +57,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html index 06c944a2eeaf26..bb36cfd775f438 100644 --- a/deps/npm/html/doc/cli/npm-shrinkwrap.html +++ b/deps/npm/html/doc/cli/npm-shrinkwrap.html @@ -168,5 +168,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html index ee50f7d7ad358e..4375e29e4fa637 100644 --- a/deps/npm/html/doc/cli/npm-star.html +++ b/deps/npm/html/doc/cli/npm-star.html @@ -36,5 +36,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html index 8cf87457a4137c..f679ba62b95c7b 100644 --- a/deps/npm/html/doc/cli/npm-stars.html +++ b/deps/npm/html/doc/cli/npm-stars.html @@ -37,5 +37,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html index 433b721cef5caa..300500eba4796e 100644 --- a/deps/npm/html/doc/cli/npm-start.html +++ b/deps/npm/html/doc/cli/npm-start.html @@ -39,5 +39,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html index b1b3ec665adb1f..353fb43592ce71 100644 --- a/deps/npm/html/doc/cli/npm-stop.html +++ b/deps/npm/html/doc/cli/npm-stop.html @@ -34,5 +34,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html index e8a6594d4a85a9..3d00cda5121575 100644 --- a/deps/npm/html/doc/cli/npm-tag.html +++ b/deps/npm/html/doc/cli/npm-tag.html @@ -62,5 +62,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-team.html b/deps/npm/html/doc/cli/npm-team.html index 64fbcf0b3a44ff..d2bd12d6c8f5c5 100644 --- a/deps/npm/html/doc/cli/npm-team.html +++ b/deps/npm/html/doc/cli/npm-team.html @@ -67,4 +67,4 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html index 42154335910b22..e961d231b2512f 100644 --- a/deps/npm/html/doc/cli/npm-test.html +++ b/deps/npm/html/doc/cli/npm-test.html @@ -12,7 +12,8 @@

        npm-test

        Test a package

        SYNOPSIS

          npm test [-- <args>]
        -  npm tst [-- <args>]
        +
        +  aliases: t, tst
         

        DESCRIPTION

        This runs a package's "test" script, if one was provided.

        To run tests as a condition of installation, set the npat config to @@ -37,5 +38,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html index f70c5546b0e604..871e514398605f 100644 --- a/deps/npm/html/doc/cli/npm-uninstall.html +++ b/deps/npm/html/doc/cli/npm-uninstall.html @@ -57,5 +57,5 @@

        SYNOPSIS

               - + diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html index a3770b6fd06011..65fc3f13e835ed 100644 --- a/deps/npm/html/doc/cli/npm-unpublish.html +++ b/deps/npm/html/doc/cli/npm-unpublish.html @@ -47,5 +47,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html index 61e356377df4a3..a131392a352b4d 100644 --- a/deps/npm/html/doc/cli/npm-update.html +++ b/deps/npm/html/doc/cli/npm-update.html @@ -12,6 +12,8 @@

        npm-update

        Update a package

        SYNOPSIS

        npm update [-g] [<name> [<name> ...]]
        +
        +aliases: up, upgrade
         

        DESCRIPTION

        This command will update all the packages listed to the latest version (specified by the tag config), respecting semver.

        @@ -24,13 +26,8 @@

        SYNOPSIS

        or local) will be updated.

        As of npm@2.6.1, the npm update will only inspect top-level packages. Prior versions of npm would also recursively inspect all dependencies. -To get the old behavior, use npm --depth Infinity update, but be warned that -simultaneous asynchronous update of all packages, including npm itself -and packages that npm depends on, often causes problems up to and including -the uninstallation of npm itself.

        -

        To restore a missing npm, use the command:

        -
        curl -L https://npmjs.com/install.sh | sh
        -

        EXAMPLES

        +To get the old behavior, use npm --depth 9999 update.

        +

        EXAMPLES

        IMPORTANT VERSION NOTE: these examples assume npm@2.6.1 or later. For older versions of npm, you must specify --depth 0 to get the behavior described below.

        @@ -38,7 +35,7 @@

        SYNOPSIS

        on dependencies, dep1 (dep2, .. etc.). The published versions of dep1 are:

        {
           "dist-tags": { "latest": "1.2.2" },
        -  "versions": {
        +  "versions": [
             "1.2.2",
             "1.2.1",
             "1.2.0",
        @@ -48,7 +45,7 @@ 

        SYNOPSIS

        "0.4.1", "0.4.0", "0.2.0" - } + ] }

        Caret Dependencies

        If app's package.json contains:

        @@ -120,5 +117,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html index f679effa7c9559..2cb44bb4ab2b31 100644 --- a/deps/npm/html/doc/cli/npm-version.html +++ b/deps/npm/html/doc/cli/npm-version.html @@ -95,5 +95,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html index 2fa22d98cb41c6..7d15486d88772b 100644 --- a/deps/npm/html/doc/cli/npm-view.html +++ b/deps/npm/html/doc/cli/npm-view.html @@ -85,5 +85,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html index 56dc846bd55d83..e133032a40dcaf 100644 --- a/deps/npm/html/doc/cli/npm-whoami.html +++ b/deps/npm/html/doc/cli/npm-whoami.html @@ -33,5 +33,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html index f55051f479b24b..64071e9abf5bc4 100644 --- a/deps/npm/html/doc/cli/npm.html +++ b/deps/npm/html/doc/cli/npm.html @@ -13,7 +13,7 @@

        npm

        javascript package manager

        SYNOPSIS

        npm <command> [args]
         

        VERSION

        -

        2.14.20

        +

        2.15.0

        DESCRIPTION

        npm is the package manager for the Node JavaScript platform. It puts modules in place so that node can find them, and manages dependency @@ -106,19 +106,17 @@

        CONTRIBUTIONS

      Contributors are listed in npm's package.json file. You can view them easily by doing npm view npm contributors.

      -

      If you would like to contribute, but don't know what to work on, check -the issues list or ask on the mailing list.

      +

      If you would like to contribute, but don't know what to work on, read +the contributing guidelines and check the issues list.

      BUGS

      When you find issues, please report them:

      Be sure to include all of the output from the npm command that didn't work as expected. The npm-debug.log file is also helpful to provide.

      @@ -128,7 +126,7 @@

      AUTHOR

      Isaac Z. Schlueter :: isaacs :: @izs :: -i@izs.me

      +i@izs.me

      SEE ALSO

      • npm-help(1)
      • @@ -154,5 +152,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html index cc6c4849d3377c..8421d2147ad14e 100644 --- a/deps/npm/html/doc/files/npm-folders.html +++ b/deps/npm/html/doc/files/npm-folders.html @@ -183,5 +183,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html index cc6c4849d3377c..8421d2147ad14e 100644 --- a/deps/npm/html/doc/files/npm-global.html +++ b/deps/npm/html/doc/files/npm-global.html @@ -183,5 +183,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html index 18be731280ead6..aa6d69fc28204e 100644 --- a/deps/npm/html/doc/files/npm-json.html +++ b/deps/npm/html/doc/files/npm-json.html @@ -244,6 +244,9 @@

        directories.doc

        maybe, someday.

        directories.example

        Put example scripts in here. Someday, it might be exposed in some clever way.

        +

        directories.test

        +

        Put your tests in here. It is currently not exposed, but it might be in the +future.

        repository

        Specify the place where your code lives. This is helpful for people who want to contribute. If the git repo is on GitHub, then the npm docs @@ -434,7 +437,18 @@

        peerDependencies

        with every 1.x version of the host package, use "^1.0" or "1.x" to express this. If you depend on features introduced in 1.5.2, use ">= 1.5.2 < 2".

        bundledDependencies

        -

        Array of package names that will be bundled when publishing the package.

        +

        This defines an array of package names that will be bundled when publishing the package.

        +

        In cases where you need to preserve npm packages locally or have them available through a single file download, you can bundle the packages in a tarball file by specifying the package names in the bundledDependencies array and executing npm pack.

        +

        For example: +If we define a package.json like this:

        +
        {
        +  "name": "awesome-web-framework",
        +  "version": "1.0.0",
        +  "bundledDependencies": [
        +    'renderized', 'super-streams'
        +  ]
        +}
        +

        we can obtain awesome-web-framework-1.0.0.tgz file by running npm pack. This file contains the dependencies renderized and super-streams which can be installed in a new project by executing npm install awesome-web-framework-1.0.0.tgz.

        If this is spelled "bundleDependencies", then that is also honored.

        optionalDependencies

        If a dependency can be used, but you would like npm to proceed if it cannot be @@ -567,5 +581,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html index 805be3ca4c9140..a76191cae9a40d 100644 --- a/deps/npm/html/doc/files/npmrc.html +++ b/deps/npm/html/doc/files/npmrc.html @@ -83,5 +83,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html index 18be731280ead6..aa6d69fc28204e 100644 --- a/deps/npm/html/doc/files/package.json.html +++ b/deps/npm/html/doc/files/package.json.html @@ -244,6 +244,9 @@

        directories.doc

        maybe, someday.

        directories.example

        Put example scripts in here. Someday, it might be exposed in some clever way.

        +

        directories.test

        +

        Put your tests in here. It is currently not exposed, but it might be in the +future.

        repository

        Specify the place where your code lives. This is helpful for people who want to contribute. If the git repo is on GitHub, then the npm docs @@ -434,7 +437,18 @@

        peerDependencies

        with every 1.x version of the host package, use "^1.0" or "1.x" to express this. If you depend on features introduced in 1.5.2, use ">= 1.5.2 < 2".

        bundledDependencies

        -

        Array of package names that will be bundled when publishing the package.

        +

        This defines an array of package names that will be bundled when publishing the package.

        +

        In cases where you need to preserve npm packages locally or have them available through a single file download, you can bundle the packages in a tarball file by specifying the package names in the bundledDependencies array and executing npm pack.

        +

        For example: +If we define a package.json like this:

        +
        {
        +  "name": "awesome-web-framework",
        +  "version": "1.0.0",
        +  "bundledDependencies": [
        +    'renderized', 'super-streams'
        +  ]
        +}
        +

        we can obtain awesome-web-framework-1.0.0.tgz file by running npm pack. This file contains the dependencies renderized and super-streams which can be installed in a new project by executing npm install awesome-web-framework-1.0.0.tgz.

        If this is spelled "bundleDependencies", then that is also honored.

        optionalDependencies

        If a dependency can be used, but you would like npm to proceed if it cannot be @@ -567,5 +581,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html index 72caf441a7d004..4d3f849ad1fab4 100644 --- a/deps/npm/html/doc/index.html +++ b/deps/npm/html/doc/index.html @@ -242,5 +242,5 @@

        semver(7)

               - + diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html index d2768eed7ef2c3..4e934a2d1006f7 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 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html index 417a8db9bfd642..e5703ab77773d0 100644 --- a/deps/npm/html/doc/misc/npm-config.html +++ b/deps/npm/html/doc/misc/npm-config.html @@ -457,6 +457,13 @@

        long

      • Type: Boolean

      Show extended information in npm ls and npm search.

      +

      maxsockets

      +
        +
      • Default: 50
      • +
      • Type: Number
      • +
      +

      The maximum number of connections to use per origin (protocol/host/port +combination). Passed to the http Agent used to make the request.

      message

      • Default: "%s"
      • @@ -799,5 +806,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html index 01906ac153a8ba..b5095f6e4762a6 100644 --- a/deps/npm/html/doc/misc/npm-developers.html +++ b/deps/npm/html/doc/misc/npm-developers.html @@ -195,5 +195,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html index 7a8aca3414ecbf..31f8e439234546 100644 --- a/deps/npm/html/doc/misc/npm-disputes.html +++ b/deps/npm/html/doc/misc/npm-disputes.html @@ -13,7 +13,7 @@

        npm-disputes

        Handling Module

        SYNOPSIS

        1. Get the author email with npm owner ls <pkgname>
        2. -
        3. Email the author, CC support@npmjs.com
        4. +
        5. Email the author, CC support@npmjs.com
        6. After a few weeks, if there's no resolution, we'll sort it out.

        Don't squat on package names. Publish code or move out of the way.

        @@ -51,12 +51,12 @@

        DESCRIPTION

        owner (Bob).
      • Joe emails Bob, explaining the situation as respectfully as possible, and what he would like to do with the module name. He -adds the npm support staff support@npmjs.com to the CC list of +adds the npm support staff support@npmjs.com to the CC list of the email. Mention in the email that Bob can run npm owner add joe foo to add Joe as an owner of the foo package.
      • After a reasonable amount of time, if Bob has not responded, or if Bob and Joe can't come to any sort of resolution, email support -support@npmjs.com and we'll sort it out. ("Reasonable" is +support@npmjs.com and we'll sort it out. ("Reasonable" is usually at least 4 weeks, but extra time is allowed around common holidays.)
      • @@ -112,5 +112,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html index 3f491423912d99..841d2f882414b1 100644 --- a/deps/npm/html/doc/misc/npm-index.html +++ b/deps/npm/html/doc/misc/npm-index.html @@ -242,5 +242,5 @@

        semver(7)

               - + diff --git a/deps/npm/html/doc/misc/npm-orgs.html b/deps/npm/html/doc/misc/npm-orgs.html index 25b626e7dbfcda..63bf8dd20e0773 100644 --- a/deps/npm/html/doc/misc/npm-orgs.html +++ b/deps/npm/html/doc/misc/npm-orgs.html @@ -86,4 +86,4 @@

        Team Admins create teams

               - + diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html index 965cc0878e756f..bc90aa9e60d710 100644 --- a/deps/npm/html/doc/misc/npm-registry.html +++ b/deps/npm/html/doc/misc/npm-registry.html @@ -70,5 +70,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html index 7511fcfdb7a851..8e787b24915adf 100644 --- a/deps/npm/html/doc/misc/npm-scope.html +++ b/deps/npm/html/doc/misc/npm-scope.html @@ -45,7 +45,8 @@

        Requiring scoped packages

        Publishing scoped packages

        Scoped packages can be published to any registry that supports them, including the public npm registry.

        -

        (As of 2015-04-19, the public npm registry does support scoped packages)

        +

        (As of 2015-04-19, and with npm 2.0 or newer, the public npm registry does +support scoped packages)

        If you wish, you may associate a scope with a registry; see below.

        Publishing public scoped packages to the public npm registry

        To publish a public scoped package, you must specify --access public with @@ -91,5 +92,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html index 72f8a86bacf63e..e11f7bcfa6cc77 100644 --- a/deps/npm/html/doc/misc/npm-scripts.html +++ b/deps/npm/html/doc/misc/npm-scripts.html @@ -207,5 +207,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html index ea35c20539d81d..ebdd3610fbbd9c 100644 --- a/deps/npm/html/doc/misc/removing-npm.html +++ b/deps/npm/html/doc/misc/removing-npm.html @@ -57,5 +57,5 @@

        SEE ALSO

               - + diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html index 72aaa36aa6ee3f..ad6dd783786753 100644 --- a/deps/npm/html/doc/misc/semver.html +++ b/deps/npm/html/doc/misc/semver.html @@ -302,5 +302,5 @@

        Ranges

               - + diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js index 851636c3c17ae9..3a1249b073d0b2 100644 --- a/deps/npm/lib/cache.js +++ b/deps/npm/lib/cache.js @@ -288,7 +288,7 @@ function add (args, where, cb) { break case "remote": // get auth, if possible - mapToRegistry(spec, npm.config, function (err, uri, auth) { + mapToRegistry(p.raw, npm.config, function (err, uri, auth) { if (err) return cb(err) addRemoteTarball(p.spec, {name : p.name}, null, auth, cb) diff --git a/deps/npm/lib/cache/caching-client.js b/deps/npm/lib/cache/caching-client.js index ec8eb8e16ce083..a2c7c5f6fa4fc6 100644 --- a/deps/npm/lib/cache/caching-client.js +++ b/deps/npm/lib/cache/caching-client.js @@ -212,6 +212,7 @@ function adaptConfig (config) { userAgent : config.get("user-agent"), log : log, defaultTag : config.get("tag"), - couchToken : config.get("_token") + couchToken : config.get("_token"), + maxSockets : config.get('maxsockets') } } diff --git a/deps/npm/lib/config/defaults.js b/deps/npm/lib/config/defaults.js index a90d4c22b0a87e..3abc81ed5f6354 100644 --- a/deps/npm/lib/config/defaults.js +++ b/deps/npm/lib/config/defaults.js @@ -162,6 +162,7 @@ Object.defineProperty(exports, "defaults", {get: function () { , loglevel : "warn" , logstream : process.stderr , long : false + , maxsockets : 50 , message : "%s" , "node-version" : process.version , npat : false @@ -268,6 +269,7 @@ exports.types = , loglevel : ["silent", "error", "warn", "http", "info", "verbose", "silly"] , logstream : Stream , long : Boolean + , maxsockets : Number , message: String , "node-version" : [null, semver] , npat : Boolean diff --git a/deps/npm/lib/config/get-credentials-by-uri.js b/deps/npm/lib/config/get-credentials-by-uri.js index 26a7f4317c6a3a..4122f4ce49fdf8 100644 --- a/deps/npm/lib/config/get-credentials-by-uri.js +++ b/deps/npm/lib/config/get-credentials-by-uri.js @@ -20,8 +20,16 @@ function getCredentialsByURI (uri) { alwaysAuth : undefined } - if (this.get(nerfed + ":_authToken")) { - c.token = this.get(nerfed + ":_authToken") + // used to override scope matching for tokens as well as legacy auth + if (this.get(nerfed + ':always-auth') !== undefined) { + var val = this.get(nerfed + ':always-auth') + c.alwaysAuth = val === 'false' ? false : !!val + } else if (this.get('always-auth') !== undefined) { + c.alwaysAuth = this.get('always-auth') + } + + if (this.get(nerfed + ':_authToken')) { + c.token = this.get(nerfed + ':_authToken') // the bearer token is enough, don't confuse things return c } @@ -58,13 +66,6 @@ function getCredentialsByURI (uri) { c.email = this.get("email") } - if (this.get(nerfed + ":always-auth") !== undefined) { - var val = this.get(nerfed + ":always-auth") - c.alwaysAuth = val === "false" ? false : !!val - } else if (this.get("always-auth") !== undefined) { - c.alwaysAuth = this.get("always-auth") - } - if (c.username && c.password) { c.auth = new Buffer(c.username + ":" + c.password).toString("base64") } diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js index cbd6893470ba2d..d349303a15d850 100644 --- a/deps/npm/lib/npm.js +++ b/deps/npm/lib/npm.js @@ -150,7 +150,7 @@ var commandCache = {} , "substack" , "visnup" ] - , littleGuys = [ "isntall" ] + , littleGuys = [ "isntall", "verison" ] , fullList = cmdList.concat(aliasNames).filter(function (c) { return plumbing.indexOf(c) === -1 }) diff --git a/deps/npm/lib/utils/lifecycle.js b/deps/npm/lib/utils/lifecycle.js index 9805a1c0c1dc45..a1b8ebcb81f13d 100644 --- a/deps/npm/lib/utils/lifecycle.js +++ b/deps/npm/lib/utils/lifecycle.js @@ -83,6 +83,9 @@ function lifecycle_ (pkg, stage, wd, env, unsafe, failOk, cb) { // the bundled one will be used for installing things. pathArr.unshift(path.join(__dirname, "..", "..", "bin", "node-gyp-bin")) + // prefer current node interpreter in child scripts + pathArr.push(path.dirname(process.execPath)) + if (env[PATH]) pathArr.push(env[PATH]) env[PATH] = pathArr.join(process.platform === "win32" ? ";" : ":") diff --git a/deps/npm/lib/utils/map-to-registry.js b/deps/npm/lib/utils/map-to-registry.js index bd68a26d42ef8e..3f4d5ed3f02fae 100644 --- a/deps/npm/lib/utils/map-to-registry.js +++ b/deps/npm/lib/utils/map-to-registry.js @@ -48,9 +48,53 @@ function mapToRegistry(name, config, cb) { var auth = config.getCredentialsByURI(registry) // normalize registry URL so resolution doesn't drop a piece of registry URL - var normalized = registry.slice(-1) !== "/" ? registry+"/" : registry - var uri = url.resolve(normalized, name) - log.silly("mapToRegistry", "uri", uri) + var normalized = registry.slice(-1) !== '/' ? registry + '/' : registry + var uri + log.silly('mapToRegistry', 'data', data) + if (data.type === 'remote') { + uri = data.spec + } else { + uri = url.resolve(normalized, name) + } + + log.silly('mapToRegistry', 'uri', uri) + + cb(null, uri, scopeAuth(uri, registry, auth), normalized) +} + +function scopeAuth (uri, registry, auth) { + var cleaned = { + scope: auth.scope, + email: auth.email, + alwaysAuth: auth.alwaysAuth, + token: undefined, + username: undefined, + password: undefined, + auth: undefined + } + + var requestHost + var registryHost + + if (auth.token || auth.auth || (auth.username && auth.password)) { + requestHost = url.parse(uri).hostname + registryHost = url.parse(registry).hostname + + if (requestHost === registryHost) { + cleaned.token = auth.token + cleaned.auth = auth.auth + cleaned.username = auth.username + cleaned.password = auth.password + } else if (auth.alwaysAuth) { + log.verbose('scopeAuth', 'alwaysAuth set for', registry) + cleaned.token = auth.token + cleaned.auth = auth.auth + cleaned.username = auth.username + cleaned.password = auth.password + } else { + log.silly('scopeAuth', uri, "doesn't share host with registry", registry) + } + } - cb(null, uri, auth, normalized) + return cleaned } diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1 index 9b7b02fe0ee0d4..677f371b3d25b0 100644 --- a/deps/npm/man/man1/npm-adduser.1 +++ b/deps/npm/man/man1/npm-adduser.1 @@ -6,6 +6,8 @@ .RS 2 .nf npm adduser [\-\-registry=url] [\-\-scope=@orgname] [\-\-always\-auth] + +aliases: login, add\-user .fi .RE .SH DESCRIPTION @@ -64,9 +66,11 @@ npm adduser \-\-registry=http://private\-registry\.example\.com \-\-always\-auth .RE .P This will ensure that all requests to that registry (including for tarballs) -include an authorization header\. See \fBalways\-auth\fP in npm help 7 \fBnpm\-config\fP for more -details on always\-auth\. Registry\-specific configuration of \fBalways\-auth\fP takes -precedence over any global configuration\. +include an authorization header\. This setting may be necessary for use with +private registries where metadata and package tarballs are stored on hosts with +different hostnames\. See \fBalways\-auth\fP in npm help 7 \fBnpm\-config\fP for more details on +always\-auth\. Registry\-specific configuration of \fBalways\-auth\fP takes precedence +over any global configuration\. .SH SEE ALSO .RS 0 .IP \(bu 2 diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1 index 6326dcaffcf33b..0d57757211c012 100644 --- a/deps/npm/man/man1/npm-bugs.1 +++ b/deps/npm/man/man1/npm-bugs.1 @@ -7,6 +7,8 @@ .nf npm bugs npm bugs (with no args in a package dir) + +aliases: issues .fi .RE .SH DESCRIPTION diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1 index 0f39f09eb473c9..3a2d485c88ccf0 100644 --- a/deps/npm/man/man1/npm-config.1 +++ b/deps/npm/man/man1/npm-config.1 @@ -13,6 +13,8 @@ npm config edit npm c [set|get|delete|list] npm get npm set [\-\-global] + +aliases: c .fi .RE .SH DESCRIPTION diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1 index af6344135010d1..a00d1beedec927 100644 --- a/deps/npm/man/man1/npm-dedupe.1 +++ b/deps/npm/man/man1/npm-dedupe.1 @@ -7,6 +7,8 @@ .nf npm dedupe [package names\.\.\.] npm ddp [package names\.\.\.] + +aliases: find\-dupes, ddp .fi .RE .SH DESCRIPTION diff --git a/deps/npm/man/man1/npm-dist-tag.1 b/deps/npm/man/man1/npm-dist-tag.1 index 056a5cd77d08aa..931278fec90d32 100644 --- a/deps/npm/man/man1/npm-dist-tag.1 +++ b/deps/npm/man/man1/npm-dist-tag.1 @@ -8,6 +8,8 @@ npm dist\-tag add @ [] npm dist\-tag rm npm dist\-tag ls [] + +aliases: dist\-tags .fi .RE .SH DESCRIPTION diff --git a/deps/npm/man/man1/npm-install-test.1 b/deps/npm/man/man1/npm-install-test.1 deleted file mode 100644 index 8b99c9af98ac92..00000000000000 --- a/deps/npm/man/man1/npm-install-test.1 +++ /dev/null @@ -1,32 +0,0 @@ -.TH "NPM" "" "February 2016" "" "" -.SH "NAME" -\fBnpm\fR -.SH SYNOPSIS -.P -.RS 2 -.nf -npm install\-test (with no args, in package dir) -npm install\-test [<@scope>/] -npm install\-test [<@scope>/]@ -npm install\-test [<@scope>/]@ -npm install\-test [<@scope>/]@ -npm install\-test -npm install\-test -npm install\-test - -alias: npm it -common options: [\-\-save|\-\-save\-dev|\-\-save\-optional] [\-\-save\-exact] [\-\-dry\-run] -.fi -.RE -.SH DESCRIPTION -.P -This command runs an \fBnpm install\fP followed immediately by an \fBnpm test\fP\|\. It -takes exactly the same arguments as \fBnpm install\fP\|\. -.SH SEE ALSO -.RS 0 -.IP \(bu 2 -npm help install -.IP \(bu 2 -npm help test - -.RE diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1 index 8555ffea5a2cd4..f2b12d2c089be3 100644 --- a/deps/npm/man/man1/npm-install.1 +++ b/deps/npm/man/man1/npm-install.1 @@ -9,7 +9,7 @@ npm install (with no args in a package dir) npm install npm install npm install -npm install [@/] [\-\-save|\-\-save\-dev|\-\-save\-optional] [\-\-save\-exact] +npm install [@/] [\-\-save|\-\-save\-dev|\-\-save\-optional] [\-\-save\-exact] [\-\-save\-bundle] npm install [@/]@ npm install [@/]@ npm install [@/]@ @@ -106,14 +106,13 @@ after packing it up into a tarball (b)\. .IP \(bu 2 \fB\-\-save\-optional\fP: Package will appear in your \fBoptionalDependencies\fP\|\. When using any of the above options to save dependencies to your -package\.json, there is an additional, optional flag: +package\.json, there are two additional, optional flags: .IP \(bu 2 \fB\-\-save\-exact\fP: Saved dependencies will be configured with an exact version rather than using npm's default semver range operator\. -\fB\fP is optional\. The package will be downloaded from the registry -associated with the specified scope\. If no registry is associated with -the given scope the default registry is assumed\. See npm help 7 \fBnpm\-scope\fP\|\. +.IP \(bu 2 +\fB\-B, \-\-save\-bundle\fP: Saved dependencies will also be added to your \fBbundleDependencies\fP list\. Note: if you do not include the @\-symbol on your scope name, npm will interpret this as a GitHub repository instead, see below\. Scopes names must also be followed by a slash\. @@ -127,6 +126,7 @@ npm install @myorg/privatepackage npm install node\-tap \-\-save\-dev npm install dtrace\-provider \-\-save\-optional npm install readable\-stream \-\-save \-\-save\-exact +npm install ansi\-regex \-\-save \-\-save\-bundle .fi .RE diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1 index f5c2e3f949144e..73e2a52859f0ad 100644 --- a/deps/npm/man/man1/npm-link.1 +++ b/deps/npm/man/man1/npm-link.1 @@ -14,12 +14,13 @@ npm ln (with any of the previous argument usage) .P Package linking is a two\-step process\. .P -First, \fBnpm link\fP in a package folder will create a globally\-installed -symbolic link from \fBprefix/package\-name\fP to the current folder (see -npm help 7 \fBnpm\-config\fP for the value of \fBprefix\fP)\. +First, \fBnpm link\fP in a package folder will create a symlink in the global folder +\fB{prefix}/lib/node_modules/\fP that links to the package where the \fBnpm +link\fP command was executed\. (see npm help 7 \fBnpm\-config\fP for the value of \fBprefix\fP)\. .P Next, in some other location, \fBnpm link package\-name\fP will create a -symlink from the local \fBnode_modules\fP folder to the global symlink\. +symbolic link from globally\-installed \fBpackage\-name\fP to \fBnode_modules/\fP +of the current folder\. .P Note that \fBpackage\-name\fP is taken from \fBpackage\.json\fP, not from directory name\. @@ -46,7 +47,7 @@ npm link redis # link\-install the package .P Now, any changes to ~/projects/node\-redis will be reflected in ~/projects/node\-bloggy/node_modules/node\-redis/\. Note that the link should -be to the package name, not the directory name for that package\. +be to the package name, not the directory name for that package\. .P You may also shortcut the two steps in one\. For example, to do the above use\-case in a shorter way: diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1 index 583be070b1864f..ca07364796dc41 100644 --- a/deps/npm/man/man1/npm-ls.1 +++ b/deps/npm/man/man1/npm-ls.1 @@ -23,7 +23,7 @@ For example, running \fBnpm ls promzard\fP in npm's source tree will show: .P .RS 2 .nf -npm@2.14.20 /path/to/npm +npm@2.15.0 /path/to/npm └─┬ init\-package\-json@0\.0\.4 └── promzard@0\.1\.5 .fi diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1 index fa70604268ae51..85d924f68af499 100644 --- a/deps/npm/man/man1/npm-owner.1 +++ b/deps/npm/man/man1/npm-owner.1 @@ -8,6 +8,8 @@ npm owner ls npm owner add npm owner rm + +aliases: author .fi .RE .SH DESCRIPTION diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1 index f7c1b2af112d71..7afbbc28f9c31b 100644 --- a/deps/npm/man/man1/npm-search.1 +++ b/deps/npm/man/man1/npm-search.1 @@ -5,9 +5,9 @@ .P .RS 2 .nf -npm search [\-\-long] [search terms \.\.\.] -npm s [search terms \.\.\.] -npm se [search terms \.\.\.] +npm search [\-l|\-\-long] [search terms \.\.\.] + +aliases: s, se, find .fi .RE .SH DESCRIPTION @@ -31,6 +31,18 @@ Display full package descriptions and other long text across multiple lines\. When disabled (default) search results are truncated to fit neatly on a single line\. Modules with extremely long names will fall on multiple lines\. +.SS registry +.RS 0 +.IP \(bu 2 +Default: https://registry\.npmjs\.org/ +.IP \(bu 2 +Type : url + +.RE +.P +Search the specified registry for modules\. If you have configured npm to point to a different default registry, +such as your internal private module repository, \fBnpm search\fP will default to that registry when searching\. +Pass a different registry url such as the default above in order to override this setting\. .SH SEE ALSO .RS 0 .IP \(bu 2 diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1 index b72ed3a1e5518e..6e35b5f540d2c7 100644 --- a/deps/npm/man/man1/npm-test.1 +++ b/deps/npm/man/man1/npm-test.1 @@ -6,7 +6,8 @@ .RS 2 .nf npm test [\-\- ] - npm tst [\-\- ] + + aliases: t, tst .fi .RE .SH DESCRIPTION diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1 index 70887dda7fa4d0..966488dfb99eab 100644 --- a/deps/npm/man/man1/npm-update.1 +++ b/deps/npm/man/man1/npm-update.1 @@ -6,6 +6,8 @@ .RS 2 .nf npm update [\-g] [ [ \.\.\.]] + +aliases: up, upgrade .fi .RE .SH DESCRIPTION @@ -25,18 +27,7 @@ or local) will be updated\. .P As of \fBnpm@2\.6\.1\fP, the \fBnpm update\fP will only inspect top\-level packages\. Prior versions of \fBnpm\fP would also recursively inspect all dependencies\. -To get the old behavior, use \fBnpm \-\-depth Infinity update\fP, but be warned that -simultaneous asynchronous update of all packages, including \fBnpm\fP itself -and packages that \fBnpm\fP depends on, often causes problems up to and including -the uninstallation of \fBnpm\fP itself\. -.P -To restore a missing \fBnpm\fP, use the command: -.P -.RS 2 -.nf -curl \-L https://npmjs\.com/install\.sh | sh -.fi -.RE +To get the old behavior, use \fBnpm \-\-depth 9999 update\fP\|\. .SH EXAMPLES .P IMPORTANT VERSION NOTE: these examples assume \fBnpm@2\.6\.1\fP or later\. For @@ -50,7 +41,7 @@ on dependencies, \fBdep1\fP (\fBdep2\fP, \.\. etc\.)\. The published versions o .nf { "dist\-tags": { "latest": "1\.2\.2" }, - "versions": { + "versions": [ "1\.2\.2", "1\.2\.1", "1\.2\.0", @@ -60,7 +51,7 @@ on dependencies, \fBdep1\fP (\fBdep2\fP, \.\. etc\.)\. The published versions o "0\.4\.1", "0\.4\.0", "0\.2\.0" - } + ] } .fi .RE diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1 index faa648a1c178d1..887dbe2f43220e 100644 --- a/deps/npm/man/man1/npm.1 +++ b/deps/npm/man/man1/npm.1 @@ -10,7 +10,7 @@ npm [args] .RE .SH VERSION .P -2.14.20 +2.15.0 .SH DESCRIPTION .P npm is the package manager for the Node JavaScript platform\. It puts @@ -152,13 +152,13 @@ file in the "doc" folder\. (Don't worry about generating the man page\.) Contributors are listed in npm's \fBpackage\.json\fP file\. You can view them easily by doing \fBnpm view npm contributors\fP\|\. .P -If you would like to contribute, but don't know what to work on, check -the issues list or ask on the mailing list\. +If you would like to contribute, but don't know what to work on, read +the contributing guidelines and check the issues list\. .RS 0 .IP \(bu 2 -https://github\.com/npm/npm/issues +https://github\.com/npm/npm/wiki/Contributing\-Guidelines .IP \(bu 2 -npm\-@googlegroups\.com +https://github\.com/npm/npm/issues .RE .SH BUGS @@ -168,9 +168,6 @@ When you find issues, please report them: .IP \(bu 2 web: https://github\.com/npm/npm/issues -.IP \(bu 2 -email: -npm\-@googlegroups\.com .RE .P diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3 index 7fa67dbcb2ad67..9142d46a32d9ca 100644 --- a/deps/npm/man/man3/npm.3 +++ b/deps/npm/man/man3/npm.3 @@ -20,7 +20,7 @@ npm\.load([configObject, ]function (er, npm) { .RE .SH VERSION .P -2.14.20 +2.15.0 .SH DESCRIPTION .P This is the API documentation for npm\. diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5 index 2cfab7b03e119f..5d00c21b561145 100644 --- a/deps/npm/man/man5/npm-json.5 +++ b/deps/npm/man/man5/npm-json.5 @@ -399,6 +399,10 @@ maybe, someday\. .SS directories\.example .P Put example scripts in here\. Someday, it might be exposed in some clever way\. +.SS directories\.test +.P +Put your tests in here\. It is currently not exposed, but it might be in the +future\. .SH repository .P Specify the place where your code lives\. This is helpful for people who @@ -696,7 +700,26 @@ with every 1\.x version of the host package, use \fB"^1\.0"\fP or \fB"1\.x"\fP t this\. If you depend on features introduced in 1\.5\.2, use \fB">= 1\.5\.2 < 2"\fP\|\. .SH bundledDependencies .P -Array of package names that will be bundled when publishing the package\. +This defines an array of package names that will be bundled when publishing the package\. +.P +In cases where you need to preserve npm packages locally or have them available through a single file download, you can bundle the packages in a tarball file by specifying the package names in the \fBbundledDependencies\fP array and executing \fBnpm pack\fP\|\. +.P +For example: +If we define a package\.json like this: +.P +.RS 2 +.nf +{ + "name": "awesome\-web\-framework", + "version": "1\.0\.0", + "bundledDependencies": [ + 'renderized', 'super\-streams' + ] +} +.fi +.RE +.P +we can obtain \fBawesome\-web\-framework\-1\.0\.0\.tgz\fP file by running \fBnpm pack\fP\|\. This file contains the dependencies \fBrenderized\fP and \fBsuper\-streams\fP which can be installed in a new project by executing \fBnpm install awesome\-web\-framework\-1\.0\.0\.tgz\fP\|\. .P If this is spelled \fB"bundleDependencies"\fP, then that is also honored\. .SH optionalDependencies diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5 index 2cfab7b03e119f..5d00c21b561145 100644 --- a/deps/npm/man/man5/package.json.5 +++ b/deps/npm/man/man5/package.json.5 @@ -399,6 +399,10 @@ maybe, someday\. .SS directories\.example .P Put example scripts in here\. Someday, it might be exposed in some clever way\. +.SS directories\.test +.P +Put your tests in here\. It is currently not exposed, but it might be in the +future\. .SH repository .P Specify the place where your code lives\. This is helpful for people who @@ -696,7 +700,26 @@ with every 1\.x version of the host package, use \fB"^1\.0"\fP or \fB"1\.x"\fP t this\. If you depend on features introduced in 1\.5\.2, use \fB">= 1\.5\.2 < 2"\fP\|\. .SH bundledDependencies .P -Array of package names that will be bundled when publishing the package\. +This defines an array of package names that will be bundled when publishing the package\. +.P +In cases where you need to preserve npm packages locally or have them available through a single file download, you can bundle the packages in a tarball file by specifying the package names in the \fBbundledDependencies\fP array and executing \fBnpm pack\fP\|\. +.P +For example: +If we define a package\.json like this: +.P +.RS 2 +.nf +{ + "name": "awesome\-web\-framework", + "version": "1\.0\.0", + "bundledDependencies": [ + 'renderized', 'super\-streams' + ] +} +.fi +.RE +.P +we can obtain \fBawesome\-web\-framework\-1\.0\.0\.tgz\fP file by running \fBnpm pack\fP\|\. This file contains the dependencies \fBrenderized\fP and \fBsuper\-streams\fP which can be installed in a new project by executing \fBnpm install awesome\-web\-framework\-1\.0\.0\.tgz\fP\|\. .P If this is spelled \fB"bundleDependencies"\fP, then that is also honored\. .SH optionalDependencies diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7 index c60d8d94415638..77ca38136c4f6b 100644 --- a/deps/npm/man/man7/npm-config.7 +++ b/deps/npm/man/man7/npm-config.7 @@ -735,6 +735,17 @@ Type: Boolean .RE .P Show extended information in \fBnpm ls\fP and \fBnpm search\fP\|\. +.SS maxsockets +.RS 0 +.IP \(bu 2 +Default: 50 +.IP \(bu 2 +Type: Number + +.RE +.P +The maximum number of connections to use per origin (protocol/host/port +combination)\. Passed to the \fBhttp\fP \fBAgent\fP used to make the request\. .SS message .RS 0 .IP \(bu 2 diff --git a/deps/npm/man/man7/npm-scope.7 b/deps/npm/man/man7/npm-scope.7 index 4a97a8536ba64d..1255f57d65b49c 100644 --- a/deps/npm/man/man7/npm-scope.7 +++ b/deps/npm/man/man7/npm-scope.7 @@ -67,7 +67,8 @@ just specifying to require the module \fBmypackage\fP in the folder called \fB@m Scoped packages can be published to any registry that supports them, including the public npm registry\. .P -(As of 2015\-04\-19, the public npm registry \fBdoes\fR support scoped packages) +(As of 2015\-04\-19, and with npm 2\.0 or newer, the public npm registry \fBdoes\fR +support scoped packages) .P If you wish, you may associate a scope with a registry; see below\. .SS Publishing public scoped packages to the public npm registry diff --git a/deps/npm/node_modules/glob/README.md b/deps/npm/node_modules/glob/README.md index 063cf950ac0c29..9dd9384fa143c3 100644 --- a/deps/npm/node_modules/glob/README.md +++ b/deps/npm/node_modules/glob/README.md @@ -1,9 +1,9 @@ -[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies) - # Glob Match files using the patterns the shell uses, like stars and stuff. +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + This is a glob implementation in JavaScript. It uses the `minimatch` library to do its matching. @@ -11,6 +11,12 @@ library to do its matching. ## Usage +Install with npm + +``` +npm i glob +``` + ```javascript var glob = require("glob") @@ -74,14 +80,6 @@ slashes in it, then it will seek for any file anywhere in the tree with a matching basename. For example, `*.js` would match `test/simple/basic.js`. -### Negation - -The intent for negation would be for a pattern starting with `!` to -match everything that *doesn't* match the supplied pattern. However, -the implementation is weird, and for the time being, this should be -avoided. The behavior is deprecated in version 5, and will be removed -entirely in version 6. - ### Empty Sets If no matching files are found, then an empty array is returned. This @@ -114,19 +112,19 @@ options. ## glob(pattern, [options], cb) -* `pattern` {String} Pattern to be matched -* `options` {Object} -* `cb` {Function} - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern Perform an asynchronous glob search. ## glob.sync(pattern, [options]) -* `pattern` {String} Pattern to be matched -* `options` {Object} -* return: {Array} filenames found matching the pattern +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern Perform a synchronous glob search. @@ -144,11 +142,11 @@ immediately. ### new glob.Glob(pattern, [options], [cb]) -* `pattern` {String} pattern to search for -* `options` {Object} -* `cb` {Function} Called when an error occurs, or matches are found - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern Note that if the `sync` flag is set in the options, then matches will be immediately available on the `g.found` member. @@ -164,8 +162,8 @@ be immediately available on the `g.found` member. values: * `false` - Path does not exist * `true` - Path exists - * `'DIR'` - Path exists, and is not a directory - * `'FILE'` - Path exists, and is a directory + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory * `[file, entries, ...]` - Path exists, is a directory, and the array value is the results of `fs.readdir` * `statCache` Cache of `fs.stat` results, to prevent statting the same @@ -182,7 +180,8 @@ be immediately available on the `g.found` member. matches found. If the `nonull` option is set, and no match was found, then the `matches` list contains the original pattern. The matches are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the matched. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. * `error` Emitted when an unexpected error is encountered, or whenever any fs error occurs if `options.strict` is set. * `abort` When `abort()` is called, this event is raised. @@ -264,7 +263,9 @@ the filesystem. equivalent to `**/*.js`, matching all js files in all directories. * `nodir` Do not match directories, only files. (Note: to match *only* directories, simply put a `/` at the end of the pattern.) -* `ignore` Add a pattern or an array of patterns to exclude matches. +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. * `follow` Follow symlinked directories when expanding `**` patterns. Note that this can result in a lot of duplicate references in the presence of cyclic links. @@ -272,10 +273,6 @@ the filesystem. In the case of a symlink that cannot be resolved, the full absolute path to the matched entry is returned (though it will usually be a broken symlink) -* `nonegate` Suppress deprecated `negate` behavior. (See below.) - Default=true -* `nocomment` Suppress deprecated `comment` behavior. (See below.) - Default=true ## Comparisons to other fnmatch/glob implementations @@ -308,22 +305,13 @@ checked for validity. Since those two are valid, matching proceeds. ### Comments and Negation -**Note**: In version 5 of this module, negation and comments are -**disabled** by default. You can explicitly set `nonegate:false` or -`nocomment:false` to re-enable them. They are going away entirely in -version 6. - -The intent for negation would be for a pattern starting with `!` to -match everything that *doesn't* match the supplied pattern. However, -the implementation is weird. It is better to use the `ignore` option -to set a pattern or set of patterns to exclude from matches. If you -want the "everything except *x*" type of behavior, you can use `**` as -the main pattern, and set an `ignore` for the things to exclude. - -The comments feature is added in minimatch, primarily to more easily -support use cases like ignore files, where a `#` at the start of a -line makes the pattern "empty". However, in the context of a -straightforward filesystem globber, "comments" don't make much sense. +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. ## Windows diff --git a/deps/npm/node_modules/glob/changelog.md b/deps/npm/node_modules/glob/changelog.md new file mode 100644 index 00000000000000..41636771e3a7cd --- /dev/null +++ b/deps/npm/node_modules/glob/changelog.md @@ -0,0 +1,67 @@ +## 7.0 + +- Raise error if `options.cwd` is specified, and not a directory + +## 6.0 + +- Remove comment and negation pattern support +- Ignore patterns are always in `dot:true` mode + +## 5.0 + +- Deprecate comment and negation patterns +- Fix regression in `mark` and `nodir` options from making all cache + keys absolute path. +- Abort if `fs.readdir` returns an error that's unexpected +- Don't emit `match` events for ignored items +- Treat ENOTSUP like ENOTDIR in readdir + +## 4.5 + +- Add `options.follow` to always follow directory symlinks in globstar +- Add `options.realpath` to call `fs.realpath` on all results +- Always cache based on absolute path + +## 4.4 + +- Add `options.ignore` +- Fix handling of broken symlinks + +## 4.3 + +- Bump minimatch to 2.x +- Pass all tests on Windows + +## 4.2 + +- Add `glob.hasMagic` function +- Add `options.nodir` flag + +## 4.1 + +- Refactor sync and async implementations for performance +- Throw if callback provided to sync glob function +- Treat symbolic links in globstar results the same as Bash 4.3 + +## 4.0 + +- Use `^` for dependency versions (bumped major because this breaks + older npm versions) +- Ensure callbacks are only ever called once +- switch to ISC license + +## 3.x + +- Rewrite in JavaScript +- Add support for setting root, cwd, and windows support +- Cache many fs calls +- Add globstar support +- emit match events + +## 2.x + +- Use `glob.h` and `fnmatch.h` from NetBSD + +## 1.x + +- `glob.h` static binding. diff --git a/deps/npm/node_modules/glob/common.js b/deps/npm/node_modules/glob/common.js index e36a631cab20c4..58dc41e6632160 100644 --- a/deps/npm/node_modules/glob/common.js +++ b/deps/npm/node_modules/glob/common.js @@ -36,15 +36,16 @@ function setupIgnores (self, options) { } } +// ignore patterns are always in dot:true mode. function ignoreMap (pattern) { var gmatcher = null if (pattern.slice(-3) === '/**') { var gpattern = pattern.replace(/(\/\*\*)+$/, '') - gmatcher = new Minimatch(gpattern) + gmatcher = new Minimatch(gpattern, { dot: true }) } return { - matcher: new Minimatch(pattern), + matcher: new Minimatch(pattern, { dot: true }), gmatcher: gmatcher } } @@ -92,8 +93,8 @@ function setopts (self, pattern, options) { if (!ownProp(options, "cwd")) self.cwd = cwd else { - self.cwd = options.cwd - self.changedCwd = path.resolve(options.cwd) !== cwd + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd } self.root = options.root || path.resolve(self.cwd, "/") @@ -101,37 +102,18 @@ function setopts (self, pattern, options) { if (process.platform === "win32") self.root = self.root.replace(/\\/g, "/") + self.cwdAbs = makeAbs(self, self.cwd) self.nomount = !!options.nomount - // disable comments and negation unless the user explicitly - // passes in false as the option. - options.nonegate = options.nonegate === false ? false : true - options.nocomment = options.nocomment === false ? false : true - deprecationWarning(options) + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true self.minimatch = new Minimatch(pattern, options) self.options = self.minimatch.options } -// TODO(isaacs): remove entirely in v6 -// exported to reset in tests -exports.deprecationWarned -function deprecationWarning(options) { - if (!options.nonegate || !options.nocomment) { - if (process.noDeprecation !== true && !exports.deprecationWarned) { - var msg = 'glob WARNING: comments and negation will be disabled in v6' - if (process.throwDeprecation) - throw new Error(msg) - else if (process.traceDeprecation) - console.trace(msg) - else - console.error(msg) - - exports.deprecationWarned = true - } - } -} - function finish (self) { var nou = self.nounique var all = nou ? [] : Object.create(null) @@ -172,7 +154,11 @@ function finish (self) { } if (self.nodir) { all = all.filter(function (e) { - return !(/\/$/.test(e)) + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir }) } } @@ -220,6 +206,10 @@ function makeAbs (self, f) { } else { abs = path.resolve(f) } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + return abs } diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js index 022d2ac8c6e58b..4dba04adec43c4 100644 --- a/deps/npm/node_modules/glob/glob.js +++ b/deps/npm/node_modules/glob/glob.js @@ -80,8 +80,21 @@ var GlobSync = glob.GlobSync = globSync.GlobSync // old api surface glob.glob = glob +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + glob.hasMagic = function (pattern, options_) { - var options = util._extend({}, options_) + var options = extend({}, options_) options.noprocess = true var g = new Glob(pattern, options) @@ -149,14 +162,23 @@ function Glob (pattern, options, cb) { if (n === 0) return done() + var sync = true for (var i = 0; i < n; i ++) { this._process(this.minimatch.set[i], i, false, done) } + sync = false function done () { --self._processing - if (self._processing <= 0) - self._finish() + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } } } @@ -558,7 +580,15 @@ Glob.prototype._readdirError = function (f, er, cb) { switch (er.code) { case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 case 'ENOTDIR': // totally normal. means it *does* exist. - this.cache[this._makeAbs(f)] = 'FILE' + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } break case 'ENOENT': // not terribly unusual diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json index 2949b83be0637f..4d5d7f791d6eab 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": "5.0.15", + "version": "7.0.3", "repository": { "type": "git", "url": "git://github.com/isaacs/node-glob.git" @@ -30,7 +30,7 @@ "devDependencies": { "mkdirp": "0", "rimraf": "^2.2.8", - "tap": "^1.1.4", + "tap": "^5.7.0", "tick": "0.0.6" }, "scripts": { @@ -43,23 +43,23 @@ "benchclean": "node benchclean.js" }, "license": "ISC", - "gitHead": "3a7e71d453dd80e75b196fd262dd23ed54beeceb", + "gitHead": "2fc2278ab857c7df117213a2fb431de090be6353", "bugs": { "url": "https://github.com/isaacs/node-glob/issues" }, "homepage": "https://github.com/isaacs/node-glob#readme", - "_id": "glob@5.0.15", - "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1", - "_from": "glob@5.0.15", - "_npmVersion": "3.3.2", - "_nodeVersion": "4.0.0", + "_id": "glob@7.0.3", + "_shasum": "0aa235931a4a96ac13d60ffac2fb877bd6ed4f58", + "_from": "glob@7.0.3", + "_npmVersion": "3.7.3", + "_nodeVersion": "5.6.0", "_npmUser": { "name": "isaacs", - "email": "isaacs@npmjs.com" + "email": "i@izs.me" }, "dist": { - "shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1", - "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + "shasum": "0aa235931a4a96ac13d60ffac2fb877bd6ed4f58", + "tarball": "http://registry.npmjs.org/glob/-/glob-7.0.3.tgz" }, "maintainers": [ { @@ -67,7 +67,10 @@ "email": "i@izs.me" } ], + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/glob-7.0.3.tgz_1457166529288_0.7840580905321985" + }, "directories": {}, - "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "readme": "ERROR: No README data found!" + "_resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz" } diff --git a/deps/npm/node_modules/glob/sync.js b/deps/npm/node_modules/glob/sync.js index 09883d2ce0c9de..301577ab5f228f 100644 --- a/deps/npm/node_modules/glob/sync.js +++ b/deps/npm/node_modules/glob/sync.js @@ -305,7 +305,14 @@ GlobSync.prototype._readdirError = function (f, er) { switch (er.code) { case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 case 'ENOTDIR': // totally normal. means it *does* exist. - this.cache[this._makeAbs(f)] = 'FILE' + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } break case 'ENOENT': // not terribly unusual diff --git a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py index ad6eff6d17b17d..bb9eb5f4b96775 100644 --- a/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +++ b/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py @@ -164,7 +164,7 @@ def Write(self, qualified_target, relative_target, base_path, output_filename, if self.toolset == 'host': self.WriteLn('LOCAL_IS_HOST_MODULE := true') self.WriteLn('LOCAL_MULTILIB := $(GYP_HOST_MULTILIB)') - else: + elif sdk_version > 0: self.WriteLn('LOCAL_MODULE_TARGET_ARCH := ' '$(TARGET_$(GYP_VAR_PREFIX)ARCH)') self.WriteLn('LOCAL_SDK_VERSION := %s' % sdk_version) @@ -965,7 +965,7 @@ def GenerateOutput(target_list, target_dicts, data, params): builddir_name = generator_flags.get('output_dir', 'out') limit_to_target_all = generator_flags.get('limit_to_target_all', False) write_alias_targets = generator_flags.get('write_alias_targets', True) - sdk_version = generator_flags.get('aosp_sdk_version', 19) + sdk_version = generator_flags.get('aosp_sdk_version', 0) android_top_dir = os.environ.get('ANDROID_BUILD_TOP') assert android_top_dir, '$ANDROID_BUILD_TOP not set; you need to run lunch.' diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json index ad70fb110ce271..434e4696f8fb15 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json @@ -67,5 +67,6 @@ "tarball": "http://registry.npmjs.org/glob/-/glob-4.5.3.tgz" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz" + "_resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/debug/node_modules/ms/package.json b/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/debug/node_modules/ms/package.json index b12c4a074f739b..253335e6234907 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/debug/node_modules/ms/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/debug/node_modules/ms/package.json @@ -43,5 +43,6 @@ "tarball": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/package.json b/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/package.json index 6d7c5e1048be04..2d403b6b2f2f12 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/package.json @@ -55,5 +55,6 @@ "tarball": "http://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz" + "_resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/node-gyp/node_modules/path-array/package.json b/deps/npm/node_modules/node-gyp/node_modules/path-array/package.json index a9604065674615..974703c2eafbca 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/path-array/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/path-array/package.json @@ -52,5 +52,6 @@ "tarball": "http://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz" + "_resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json index 2c285300a89fe3..aedb6ce63dbf42 100644 --- a/deps/npm/node_modules/node-gyp/package.json +++ b/deps/npm/node_modules/node-gyp/package.json @@ -11,7 +11,7 @@ "bindings", "gyp" ], - "version": "3.3.0", + "version": "3.3.1", "installVersion": 9, "author": { "name": "Nathan Rajlich", @@ -52,19 +52,19 @@ "scripts": { "test": "tape test/test-*" }, - "gitHead": "7b10467b57dc632d358917decbeea94fd1172282", + "gitHead": "1dcf356ca7b658789447108b29a985c00ffcf0f5", "bugs": { "url": "https://github.com/nodejs/node-gyp/issues" }, - "homepage": "https://github.com/nodejs/node-gyp", - "_id": "node-gyp@3.3.0", - "_shasum": "7cc676b72d0be31dc977fb3c93539cab7adeff1e", - "_from": "node-gyp@3.3.0", + "homepage": "https://github.com/nodejs/node-gyp#readme", + "_id": "node-gyp@3.3.1", + "_shasum": "80f7b6d7c2f9c0495ba42c518a670c99bdf6e4a0", + "_from": "node-gyp@3.3.1", "_npmVersion": "3.3.12", - "_nodeVersion": "5.3.0", + "_nodeVersion": "6.0.0-pre", "_npmUser": { - "name": "rvagg", - "email": "rod@vagg.org" + "name": "bnoordhuis", + "email": "info@bnoordhuis.nl" }, "maintainers": [ { @@ -93,13 +93,13 @@ } ], "dist": { - "shasum": "7cc676b72d0be31dc977fb3c93539cab7adeff1e", - "tarball": "http://registry.npmjs.org/node-gyp/-/node-gyp-3.3.0.tgz" + "shasum": "80f7b6d7c2f9c0495ba42c518a670c99bdf6e4a0", + "tarball": "http://registry.npmjs.org/node-gyp/-/node-gyp-3.3.1.tgz" }, "_npmOperationalInternal": { - "host": "packages-6-west.internal.npmjs.com", - "tmp": "tmp/node-gyp-3.3.0.tgz_1455598883163_0.7978834484238178" + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/node-gyp-3.3.1.tgz_1457115144174_0.4018901875242591" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.3.0.tgz" + "_resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.3.1.tgz" } diff --git a/deps/npm/node_modules/npm-registry-client/README.md b/deps/npm/node_modules/npm-registry-client/README.md index fb3226cf401b5b..2caa3643708f80 100644 --- a/deps/npm/node_modules/npm-registry-client/README.md +++ b/deps/npm/node_modules/npm-registry-client/README.md @@ -310,5 +310,9 @@ any): Default = `"latest"` * `couchToken` {Object} A token for use with [couch-login](https://npmjs.org/package/couch-login). -* `sessionToken` {string} A random identifier for this set of client requests. +* `sessionToken` {String} A random identifier for this set of client requests. Default = 8 random hexadecimal bytes. +* `maxSockets` {Number} The maximum number of connections that will be open per + origin (unique combination of protocol:host:port). Passed to the + [httpAgent](https://nodejs.org/api/http.html#http_agent_maxsockets). + Default = 50 diff --git a/deps/npm/node_modules/npm-registry-client/index.js b/deps/npm/node_modules/npm-registry-client/index.js index 9b99a23738f103..a199801f98da99 100644 --- a/deps/npm/node_modules/npm-registry-client/index.js +++ b/deps/npm/node_modules/npm-registry-client/index.js @@ -39,6 +39,7 @@ function RegClient (config) { if (typeof this.config.retry.factor !== 'number') this.config.retry.factor = 10 if (typeof this.config.retry.minTimeout !== 'number') this.config.retry.minTimeout = 10000 if (typeof this.config.retry.maxTimeout !== 'number') this.config.retry.maxTimeout = 60000 + if (typeof this.config.maxSockets !== 'number') this.config.maxSockets = 50 this.config.userAgent = this.config.userAgent || 'node/' + process.version this.config.defaultTag = this.config.defaultTag || 'latest' diff --git a/deps/npm/node_modules/npm-registry-client/lib/initialize.js b/deps/npm/node_modules/npm-registry-client/lib/initialize.js index 4a2160fbbdad8a..3c12697f03cba6 100644 --- a/deps/npm/node_modules/npm-registry-client/lib/initialize.js +++ b/deps/npm/node_modules/npm-registry-client/lib/initialize.js @@ -4,9 +4,6 @@ var HttpsAgent = require('https').Agent var pkg = require('../package.json') -var httpAgent -var httpsAgent - module.exports = initialize function initialize (uri, method, accept, headers) { @@ -24,7 +21,7 @@ function initialize (uri, method, accept, headers) { cert: this.config.ssl.certificate, key: this.config.ssl.key, ca: this.config.ssl.ca, - agent: getAgent(uri.protocol, this.config) + agent: getAgent.call(this, uri.protocol) } // allow explicit disabling of proxy in environment via CLI @@ -55,28 +52,30 @@ function initialize (uri, method, accept, headers) { return opts } -function getAgent (protocol, config) { +function getAgent (protocol) { if (protocol === 'https:') { - if (!httpsAgent) { - httpsAgent = new HttpsAgent({ + if (!this.httpsAgent) { + this.httpsAgent = new HttpsAgent({ keepAlive: true, - localAddress: config.proxy.localAddress, - rejectUnauthorized: config.ssl.strict, - ca: config.ssl.ca, - cert: config.ssl.certificate, - key: config.ssl.key + maxSockets: this.config.maxSockets, + localAddress: this.config.proxy.localAddress, + rejectUnauthorized: this.config.ssl.strict, + ca: this.config.ssl.ca, + cert: this.config.ssl.certificate, + key: this.config.ssl.key }) } - return httpsAgent + return this.httpsAgent } else { - if (!httpAgent) { - httpAgent = new HttpAgent({ + if (!this.httpAgent) { + this.httpAgent = new HttpAgent({ keepAlive: true, - localAddress: config.proxy.localAddress + maxSockets: this.config.maxSockets, + localAddress: this.config.proxy.localAddress }) } - return httpAgent + return this.httpAgent } } diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/doc/stream.markdown b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/doc/stream.markdown index bf544f9f2565f3..3988c0cbd0d9c9 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/doc/stream.markdown +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/doc/stream.markdown @@ -3,8 +3,7 @@ Stability: 2 - Stable A stream is an abstract interface implemented by various objects in -Node.js. For example a [request to an HTTP -server](https://iojs.org/dist/v5.0.0/doc/api/http.html#http_http_incomingmessage) is a stream, as is +Node.js. For example a [request to an HTTP server][] is a stream, as is [stdout][]. Streams are readable, writable, or both. All streams are instances of [EventEmitter][] @@ -93,6 +92,17 @@ server.listen(1337); // error: Unexpected token o ``` +### Class: stream.Duplex + +Duplex streams are streams that implement both the [Readable][] and +[Writable][] interfaces. See above for usage. + +Examples of Duplex streams include: + +* [tcp sockets][] +* [zlib streams][] +* [crypto streams][] + ### Class: stream.Readable @@ -136,61 +146,22 @@ destinations drain and ask for more data. Examples of readable streams include: -* [http responses, on the client](https://iojs.org/dist/v5.0.0/doc/api/http.html#http_http_incomingmessage) -* [http requests, on the server](https://iojs.org/dist/v5.0.0/doc/api/http.html#http_http_incomingmessage) -* [fs read streams](https://iojs.org/dist/v5.0.0/doc/api/fs.html#fs_class_fs_readstream) +* [http responses, on the client][] +* [http requests, on the server][] +* [fs read streams][] * [zlib streams][] * [crypto streams][] * [tcp sockets][] * [child process stdout and stderr][] * [process.stdin][] -#### Event: 'readable' - -When a chunk of data can be read from the stream, it will emit a -`'readable'` event. - -In some cases, listening for a `'readable'` event will cause some data -to be read into the internal buffer from the underlying system, if it -hadn't already. - -```javascript -var readable = getReadableStreamSomehow(); -readable.on('readable', function() { - // there is some data to read now -}); -``` - -Once the internal buffer is drained, a `readable` event will fire -again when more data is available. - -The `readable` event is not emitted in the "flowing" mode with the -sole exception of the last one, on end-of-stream. - -The 'readable' event indicates that the stream has new information: -either new data is available or the end of the stream has been reached. -In the former case, `.read()` will return that data. In the latter case, -`.read()` will return null. For instance, in the following example, `foo.txt` -is an empty file: - -```javascript -var fs = require('fs'); -var rr = fs.createReadStream('foo.txt'); -rr.on('readable', function() { - console.log('readable:', rr.read()); -}); -rr.on('end', function() { - console.log('end'); -}); -``` +#### Event: 'close' -The output of running this script is: +Emitted when the stream and any of its underlying resources (a file +descriptor, for example) have been closed. The event indicates that +no more events will be emitted, and no further computation will occur. -``` -bash-3.2$ node test.js -readable: null -end -``` +Not all streams will emit the 'close' event. #### Event: 'data' @@ -228,101 +199,75 @@ readable.on('end', function() { }); ``` -#### Event: 'close' - -Emitted when the stream and any of its underlying resources (a file -descriptor, for example) have been closed. The event indicates that -no more events will be emitted, and no further computation will occur. - -Not all streams will emit the 'close' event. - #### Event: 'error' * {Error Object} Emitted if there was an error receiving data. -#### readable.read([size]) - -* `size` {Number} Optional argument to specify how much data to read. -* Return {String | Buffer | null} - -The `read()` method pulls some data out of the internal buffer and -returns it. If there is no data available, then it will return -`null`. - -If you pass in a `size` argument, then it will return that many -bytes. If `size` bytes are not available, then it will return `null`, -unless we've ended, in which case it will return the data remaining -in the buffer. +#### Event: 'readable' -If you do not specify a `size` argument, then it will return all the -data in the internal buffer. +When a chunk of data can be read from the stream, it will emit a +`'readable'` event. -This method should only be called in paused mode. In flowing mode, -this method is called automatically until the internal buffer is -drained. +In some cases, listening for a `'readable'` event will cause some data +to be read into the internal buffer from the underlying system, if it +hadn't already. ```javascript var readable = getReadableStreamSomehow(); readable.on('readable', function() { - var chunk; - while (null !== (chunk = readable.read())) { - console.log('got %d bytes of data', chunk.length); - } + // there is some data to read now }); ``` -If this method returns a data chunk, then it will also trigger the -emission of a [`'data'` event][]. - -Note that calling `readable.read([size])` after the `end` event has been -triggered will return `null`. No runtime error will be raised. - -#### readable.setEncoding(encoding) - -* `encoding` {String} The encoding to use. -* Return: `this` +Once the internal buffer is drained, a `readable` event will fire +again when more data is available. -Call this function to cause the stream to return strings of the -specified encoding instead of Buffer objects. For example, if you do -`readable.setEncoding('utf8')`, then the output data will be -interpreted as UTF-8 data, and returned as strings. If you do -`readable.setEncoding('hex')`, then the data will be encoded in -hexadecimal string format. +The `readable` event is not emitted in the "flowing" mode with the +sole exception of the last one, on end-of-stream. -This properly handles multi-byte characters that would otherwise be -potentially mangled if you simply pulled the Buffers directly and -called `buf.toString(encoding)` on them. If you want to read the data -as strings, always use this method. +The 'readable' event indicates that the stream has new information: +either new data is available or the end of the stream has been reached. +In the former case, `.read()` will return that data. In the latter case, +`.read()` will return null. For instance, in the following example, `foo.txt` +is an empty file: ```javascript -var readable = getReadableStreamSomehow(); -readable.setEncoding('utf8'); -readable.on('data', function(chunk) { - assert.equal(typeof chunk, 'string'); - console.log('got %d characters of string data', chunk.length); +var fs = require('fs'); +var rr = fs.createReadStream('foo.txt'); +rr.on('readable', function() { + console.log('readable:', rr.read()); +}); +rr.on('end', function() { + console.log('end'); }); ``` -#### readable.resume() +The output of running this script is: -* Return: `this` +``` +bash-3.2$ node test.js +readable: null +end +``` -This method will cause the readable stream to resume emitting `data` -events. +#### readable.isPaused() -This method will switch the stream into flowing mode. If you do *not* -want to consume the data from a stream, but you *do* want to get to -its `end` event, you can call [`readable.resume()`][] to open the flow of -data. +* Return: `Boolean` + +This method returns whether or not the `readable` has been **explicitly** +paused by client code (using `readable.pause()` without a corresponding +`readable.resume()`). ```javascript -var readable = getReadableStreamSomehow(); -readable.resume(); -readable.on('end', function() { - console.log('got to the end, but did not read anything'); -}); +var readable = new stream.Readable + +readable.isPaused() // === false +readable.pause() +readable.isPaused() // === true +readable.resume() +readable.isPaused() // === false ``` #### readable.pause() @@ -346,24 +291,6 @@ readable.on('data', function(chunk) { }); ``` -#### readable.isPaused() - -* Return: `Boolean` - -This method returns whether or not the `readable` has been **explicitly** -paused by client code (using `readable.pause()` without a corresponding -`readable.resume()`). - -```javascript -var readable = new stream.Readable - -readable.isPaused() // === false -readable.pause() -readable.isPaused() // === true -readable.resume() -readable.isPaused() // === false -``` - #### readable.pipe(destination[, options]) * `destination` {[Writable][] Stream} The destination for writing data @@ -416,54 +343,137 @@ reader.on('end', function() { Note that `process.stderr` and `process.stdout` are never closed until the process exits, regardless of the specified options. -#### readable.unpipe([destination]) +#### readable.read([size]) -* `destination` {[Writable][] Stream} Optional specific stream to unpipe +* `size` {Number} Optional argument to specify how much data to read. +* Return {String | Buffer | null} -This method will remove the hooks set up for a previous `pipe()` call. +The `read()` method pulls some data out of the internal buffer and +returns it. If there is no data available, then it will return +`null`. -If the destination is not specified, then all pipes are removed. +If you pass in a `size` argument, then it will return that many +bytes. If `size` bytes are not available, then it will return `null`, +unless we've ended, in which case it will return the data remaining +in the buffer. -If the destination is specified, but no pipe is set up for it, then -this is a no-op. +If you do not specify a `size` argument, then it will return all the +data in the internal buffer. + +This method should only be called in paused mode. In flowing mode, +this method is called automatically until the internal buffer is +drained. ```javascript var readable = getReadableStreamSomehow(); -var writable = fs.createWriteStream('file.txt'); -// All the data from readable goes into 'file.txt', -// but only for the first second -readable.pipe(writable); -setTimeout(function() { - console.log('stop writing to file.txt'); - readable.unpipe(writable); - console.log('manually close the file stream'); - writable.end(); -}, 1000); +readable.on('readable', function() { + var chunk; + while (null !== (chunk = readable.read())) { + console.log('got %d bytes of data', chunk.length); + } +}); ``` -#### readable.unshift(chunk) +If this method returns a data chunk, then it will also trigger the +emission of a [`'data'` event][]. -* `chunk` {Buffer | String} Chunk of data to unshift onto the read queue +Note that calling `readable.read([size])` after the `end` event has been +triggered will return `null`. No runtime error will be raised. -This is useful in certain cases where a stream is being consumed by a -parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source, so that the stream can be -passed on to some other party. +#### readable.resume() -Note that `stream.unshift(chunk)` cannot be called after the `end` event -has been triggered; a runtime error will be raised. +* Return: `this` -If you find that you must often call `stream.unshift(chunk)` in your -programs, consider implementing a [Transform][] stream instead. (See API -for Stream Implementors, below.) +This method will cause the readable stream to resume emitting `data` +events. + +This method will switch the stream into flowing mode. If you do *not* +want to consume the data from a stream, but you *do* want to get to +its `end` event, you can call [`readable.resume()`][] to open the flow of +data. ```javascript -// Pull off a header delimited by \n\n -// use unshift() if we get too much -// Call the callback with (error, header, stream) -var StringDecoder = require('string_decoder').StringDecoder; -function parseHeader(stream, callback) { - stream.on('error', callback); +var readable = getReadableStreamSomehow(); +readable.resume(); +readable.on('end', function() { + console.log('got to the end, but did not read anything'); +}); +``` + +#### readable.setEncoding(encoding) + +* `encoding` {String} The encoding to use. +* Return: `this` + +Call this function to cause the stream to return strings of the +specified encoding instead of Buffer objects. For example, if you do +`readable.setEncoding('utf8')`, then the output data will be +interpreted as UTF-8 data, and returned as strings. If you do +`readable.setEncoding('hex')`, then the data will be encoded in +hexadecimal string format. + +This properly handles multi-byte characters that would otherwise be +potentially mangled if you simply pulled the Buffers directly and +called `buf.toString(encoding)` on them. If you want to read the data +as strings, always use this method. + +```javascript +var readable = getReadableStreamSomehow(); +readable.setEncoding('utf8'); +readable.on('data', function(chunk) { + assert.equal(typeof chunk, 'string'); + console.log('got %d characters of string data', chunk.length); +}); +``` + +#### readable.unpipe([destination]) + +* `destination` {[Writable][] Stream} Optional specific stream to unpipe + +This method will remove the hooks set up for a previous `pipe()` call. + +If the destination is not specified, then all pipes are removed. + +If the destination is specified, but no pipe is set up for it, then +this is a no-op. + +```javascript +var readable = getReadableStreamSomehow(); +var writable = fs.createWriteStream('file.txt'); +// All the data from readable goes into 'file.txt', +// but only for the first second +readable.pipe(writable); +setTimeout(function() { + console.log('stop writing to file.txt'); + readable.unpipe(writable); + console.log('manually close the file stream'); + writable.end(); +}, 1000); +``` + +#### readable.unshift(chunk) + +* `chunk` {Buffer | String} Chunk of data to unshift onto the read queue + +This is useful in certain cases where a stream is being consumed by a +parser, which needs to "un-consume" some data that it has +optimistically pulled out of the source, so that the stream can be +passed on to some other party. + +Note that `stream.unshift(chunk)` cannot be called after the `end` event +has been triggered; a runtime error will be raised. + +If you find that you must often call `stream.unshift(chunk)` in your +programs, consider implementing a [Transform][] stream instead. (See API +for Stream Implementors, below.) + +```javascript +// Pull off a header delimited by \n\n +// use unshift() if we get too much +// Call the callback with (error, header, stream) +var StringDecoder = require('string_decoder').StringDecoder; +function parseHeader(stream, callback) { + stream.on('error', callback); stream.on('readable', onReadable); var decoder = new StringDecoder('utf8'); var header = ''; @@ -528,6 +538,16 @@ myReader.on('readable', function() { }); ``` +### Class: stream.Transform + +Transform streams are [Duplex][] streams where the output is in some way +computed from the input. They implement both the [Readable][] and +[Writable][] interfaces. See above for usage. + +Examples of Transform streams include: + +* [zlib streams][] +* [crypto streams][] ### Class: stream.Writable @@ -538,34 +558,15 @@ that you are writing data *to*. Examples of writable streams include: -* [http requests, on the client](https://iojs.org/dist/v5.0.0/doc/api/http.html#http_class_http_clientrequest) -* [http responses, on the server](https://iojs.org/dist/v5.0.0/doc/api/http.html#http_class_http_serverresponse) -* [fs write streams](https://iojs.org/dist/v5.0.0/doc/api/fs.html#fs_class_fs_writestream) +* [http requests, on the client][] +* [http responses, on the server][] +* [fs write streams][] * [zlib streams][] * [crypto streams][] * [tcp sockets][] -* [child process stdin](https://iojs.org/dist/v5.0.0/doc/api/child_process.html#child_process_child_stdin) +* [child process stdin][] * [process.stdout][], [process.stderr][] -#### writable.write(chunk[, encoding][, callback]) - -* `chunk` {String | Buffer} The data to write -* `encoding` {String} The encoding, if `chunk` is a String -* `callback` {Function} Callback for when this chunk of data is flushed -* Returns: {Boolean} True if the data was handled completely. - -This method writes some data to the underlying system, and calls the -supplied callback once the data has been fully handled. - -The return value indicates if you should continue writing right now. -If the data had to be buffered internally, then it will return -`false`. Otherwise, it will return `true`. - -This return value is strictly advisory. You MAY continue to write, -even if it returns `false`. However, writes will be buffered in -memory, so it is best not to do this excessively. Instead, wait for -the `drain` event before writing more data. - #### Event: 'drain' If a [`writable.write(chunk)`][] call returns false, then the `drain` @@ -600,40 +601,11 @@ function writeOneMillionTimes(writer, data, encoding, callback) { } ``` -#### writable.cork() - -Forces buffering of all writes. - -Buffered data will be flushed either at `.uncork()` or at `.end()` call. - -#### writable.uncork() - -Flush all data, buffered since `.cork()` call. - -#### writable.setDefaultEncoding(encoding) - -* `encoding` {String} The new default encoding - -Sets the default encoding for a writable stream. - -#### writable.end([chunk][, encoding][, callback]) - -* `chunk` {String | Buffer} Optional data to write -* `encoding` {String} The encoding, if `chunk` is a String -* `callback` {Function} Optional callback for when the stream is finished - -Call this method when no more data will be written to the stream. If -supplied, the callback is attached as a listener on the `finish` event. +#### Event: 'error' -Calling [`write()`][] after calling [`end()`][] will raise an error. +* {Error object} -```javascript -// write 'hello, ' and then end with 'world!' -var file = fs.createWriteStream('example.txt'); -file.write('hello, '); -file.end('world!'); -// writing more now is not allowed! -``` +Emitted if there was an error when writing or piping data. #### Event: 'finish' @@ -686,34 +658,59 @@ reader.pipe(writer); reader.unpipe(writer); ``` -#### Event: 'error' +#### writable.cork() -* {Error object} +Forces buffering of all writes. -Emitted if there was an error when writing or piping data. +Buffered data will be flushed either at `.uncork()` or at `.end()` call. -### Class: stream.Duplex +#### writable.end([chunk][, encoding][, callback]) -Duplex streams are streams that implement both the [Readable][] and -[Writable][] interfaces. See above for usage. +* `chunk` {String | Buffer} Optional data to write +* `encoding` {String} The encoding, if `chunk` is a String +* `callback` {Function} Optional callback for when the stream is finished -Examples of Duplex streams include: +Call this method when no more data will be written to the stream. If +supplied, the callback is attached as a listener on the `finish` event. -* [tcp sockets][] -* [zlib streams][] -* [crypto streams][] +Calling [`write()`][] after calling [`end()`][] will raise an error. +```javascript +// write 'hello, ' and then end with 'world!' +var file = fs.createWriteStream('example.txt'); +file.write('hello, '); +file.end('world!'); +// writing more now is not allowed! +``` -### Class: stream.Transform +#### writable.setDefaultEncoding(encoding) -Transform streams are [Duplex][] streams where the output is in some way -computed from the input. They implement both the [Readable][] and -[Writable][] interfaces. See above for usage. +* `encoding` {String} The new default encoding -Examples of Transform streams include: +Sets the default encoding for a writable stream. -* [zlib streams][] -* [crypto streams][] +#### writable.uncork() + +Flush all data, buffered since `.cork()` call. + +#### writable.write(chunk[, encoding][, callback]) + +* `chunk` {String | Buffer} The data to write +* `encoding` {String} The encoding, if `chunk` is a String +* `callback` {Function} Callback for when this chunk of data is flushed +* Returns: {Boolean} True if the data was handled completely. + +This method writes some data to the underlying system, and calls the +supplied callback once the data has been fully handled. + +The return value indicates if you should continue writing right now. +If the data had to be buffered internally, then it will return +`false`. Otherwise, it will return `true`. + +This return value is strictly advisory. You MAY continue to write, +even if it returns `false`. However, writes will be buffered in +memory, so it is best not to do this excessively. Instead, wait for +the `drain` event before writing more data. ## API for Stream Implementors @@ -796,6 +793,49 @@ methods described in [API for Stream Consumers][] above. Otherwise, you can potentially cause adverse side effects in programs that consume your streaming interfaces. +### Class: stream.Duplex + + + +A "duplex" stream is one that is both Readable and Writable, such as a +TCP socket connection. + +Note that `stream.Duplex` is an abstract class designed to be extended +with an underlying implementation of the `_read(size)` and +[`_write(chunk, encoding, callback)`][] methods as you would with a +Readable or Writable stream class. + +Since JavaScript doesn't have multiple prototypal inheritance, this +class prototypally inherits from Readable, and then parasitically from +Writable. It is thus up to the user to implement both the lowlevel +`_read(n)` method as well as the lowlevel +[`_write(chunk, encoding, callback)`][] method on extension duplex classes. + +#### new stream.Duplex(options) + +* `options` {Object} Passed to both Writable and Readable + constructors. Also has the following fields: + * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then + the stream will automatically end the readable side when the + writable side ends and vice versa. + * `readableObjectMode` {Boolean} Default=false. Sets `objectMode` + for readable side of the stream. Has no effect if `objectMode` + is `true`. + * `writableObjectMode` {Boolean} Default=false. Sets `objectMode` + for writable side of the stream. Has no effect if `objectMode` + is `true`. + +In classes that extend the Duplex class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +### Class: stream.PassThrough + +This is a trivial implementation of a [Transform][] stream that simply +passes the input bytes across to the output. Its purpose is mainly +for examples and testing, but there are occasionally use cases where +it can come in handy as a building block for novel sorts of streams. + ### Class: stream.Readable @@ -807,15 +847,115 @@ Please see above under [API for Stream Consumers][] for how to consume streams in your programs. What follows is an explanation of how to implement Readable streams in your programs. -#### Example: A Counting Stream - - - -This is a basic example of a Readable stream. It emits the numerals -from 1 to 1,000,000 in ascending order, and then ends. +#### new stream.Readable([options]) -```javascript -var Readable = require('stream').Readable; +* `options` {Object} + * `highWaterMark` {Number} The maximum number of bytes to store in + the internal buffer before ceasing to read from the underlying + resource. Default=16kb, or 16 for `objectMode` streams + * `encoding` {String} If specified, then buffers will be decoded to + strings using the specified encoding. Default=null + * `objectMode` {Boolean} Whether this stream should behave + as a stream of objects. Meaning that stream.read(n) returns + a single value instead of a Buffer of size n. Default=false + +In classes that extend the Readable class, make sure to call the +Readable constructor so that the buffering settings can be properly +initialized. + +#### readable.\_read(size) + +* `size` {Number} Number of bytes to read asynchronously + +Note: **Implement this method, but do NOT call it directly.** + +This method is prefixed with an underscore because it is internal to the +class that defines it and should only be called by the internal Readable +class methods. All Readable stream implementations must provide a _read +method to fetch data from the underlying resource. + +When _read is called, if data is available from the resource, `_read` should +start pushing that data into the read queue by calling `this.push(dataChunk)`. +`_read` should continue reading from the resource and pushing data until push +returns false, at which point it should stop reading from the resource. Only +when _read is called again after it has stopped should it start reading +more data from the resource and pushing that data onto the queue. + +Note: once the `_read()` method is called, it will not be called again until +the `push` method is called. + +The `size` argument is advisory. Implementations where a "read" is a +single call that returns data can use this to know how much data to +fetch. Implementations where that is not relevant, such as TCP or +TLS, may ignore this argument, and simply provide data whenever it +becomes available. There is no need, for example to "wait" until +`size` bytes are available before calling [`stream.push(chunk)`][]. + +#### readable.push(chunk[, encoding]) + +* `chunk` {Buffer | null | String} Chunk of data to push into the read queue +* `encoding` {String} Encoding of String chunks. Must be a valid + Buffer encoding, such as `'utf8'` or `'ascii'` +* return {Boolean} Whether or not more pushes should be performed + +Note: **This method should be called by Readable implementors, NOT +by consumers of Readable streams.** + +If a value other than null is passed, The `push()` method adds a chunk of data +into the queue for subsequent stream processors to consume. If `null` is +passed, it signals the end of the stream (EOF), after which no more data +can be written. + +The data added with `push` can be pulled out by calling the `read()` method +when the `'readable'`event fires. + +This API is designed to be as flexible as possible. For example, +you may be wrapping a lower-level source which has some sort of +pause/resume mechanism, and a data callback. In those cases, you +could wrap the low-level source object by doing something like this: + +```javascript +// source is an object with readStop() and readStart() methods, +// and an `ondata` member that gets called when it has data, and +// an `onend` member that gets called when the data is over. + +util.inherits(SourceWrapper, Readable); + +function SourceWrapper(options) { + Readable.call(this, options); + + this._source = getLowlevelSourceObject(); + var self = this; + + // Every time there's data, we push it into the internal buffer. + this._source.ondata = function(chunk) { + // if push() returns false, then we need to stop reading from source + if (!self.push(chunk)) + self._source.readStop(); + }; + + // When the source ends, we push the EOF-signaling `null` chunk + this._source.onend = function() { + self.push(null); + }; +} + +// _read will be called when the stream wants to pull more data in +// the advisory size argument is ignored in this case. +SourceWrapper.prototype._read = function(size) { + this._source.readStart(); +}; +``` + +#### Example: A Counting Stream + + + +This is a basic example of a Readable stream. It emits the numerals +from 1 to 1,000,000 in ascending order, and then ends. + +```javascript +var Readable = require('stream').Readable; var util = require('util'); util.inherits(Counter, Readable); @@ -951,220 +1091,6 @@ SimpleProtocol.prototype._read = function(n) { // with the parsed header data. ``` - -#### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb, or 16 for `objectMode` streams - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n. Default=false - -In classes that extend the Readable class, make sure to call the -Readable constructor so that the buffering settings can be properly -initialized. - -#### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **Implement this method, but do NOT call it directly.** - -This method is prefixed with an underscore because it is internal to the -class that defines it and should only be called by the internal Readable -class methods. All Readable stream implementations must provide a _read -method to fetch data from the underlying resource. - -When _read is called, if data is available from the resource, `_read` should -start pushing that data into the read queue by calling `this.push(dataChunk)`. -`_read` should continue reading from the resource and pushing data until push -returns false, at which point it should stop reading from the resource. Only -when _read is called again after it has stopped should it start reading -more data from the resource and pushing that data onto the queue. - -Note: once the `_read()` method is called, it will not be called again until -the `push` method is called. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling [`stream.push(chunk)`][]. - -#### readable.push(chunk[, encoding]) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* `encoding` {String} Encoding of String chunks. Must be a valid - Buffer encoding, such as `'utf8'` or `'ascii'` -* return {Boolean} Whether or not more pushes should be performed - -Note: **This method should be called by Readable implementors, NOT -by consumers of Readable streams.** - -If a value other than null is passed, The `push()` method adds a chunk of data -into the queue for subsequent stream processors to consume. If `null` is -passed, it signals the end of the stream (EOF), after which no more data -can be written. - -The data added with `push` can be pulled out by calling the `read()` method -when the `'readable'`event fires. - -This API is designed to be as flexible as possible. For example, -you may be wrapping a lower-level source which has some sort of -pause/resume mechanism, and a data callback. In those cases, you -could wrap the low-level source object by doing something like this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -util.inherits(SourceWrapper, Readable); - -function SourceWrapper(options) { - Readable.call(this, options); - - this._source = getLowlevelSourceObject(); - var self = this; - - // Every time there's data, we push it into the internal buffer. - this._source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!self.push(chunk)) - self._source.readStop(); - }; - - // When the source ends, we push the EOF-signaling `null` chunk - this._source.onend = function() { - self.push(null); - }; -} - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -SourceWrapper.prototype._read = function(size) { - this._source.readStart(); -}; -``` - - -### Class: stream.Writable - - - -`stream.Writable` is an abstract class designed to be extended with an -underlying implementation of the [`_write(chunk, encoding, callback)`][] method. - -Please see above under [API for Stream Consumers][] for how to consume -writable streams in your programs. What follows is an explanation of -how to implement Writable streams in your programs. - -#### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when [`write()`][] starts - returning false. Default=16kb, or 16 for `objectMode` streams - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to [`_write()`][]. Default=true - * `objectMode` {Boolean} Whether or not the `write(anyObj)` is - a valid operation. If set you can write arbitrary data instead - of only `Buffer` / `String` data. Default=false - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -#### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will **always** - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. If chunk is a buffer, then this is the special - value - 'buffer', ignore it in this case. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a [`_write()`][] -method to send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -#### writable.\_writev(chunks, callback) - -* `chunks` {Array} The chunks to be written. Each chunk has following - format: `{ chunk: ..., encoding: ... }`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunks. - -Note: **This function MUST NOT be called directly.** It may be -implemented by child classes, and called by the internal Writable -class methods only. - -This function is completely optional to implement. In most cases it is -unnecessary. If implemented, it will be called with all the chunks -that are buffered in the write queue. - - -### Class: stream.Duplex - - - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be extended -with an underlying implementation of the `_read(size)` and -[`_write(chunk, encoding, callback)`][] methods as you would with a -Readable or Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel -[`_write(chunk, encoding, callback)`][] method on extension duplex classes. - -#### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - * `readableObjectMode` {Boolean} Default=false. Sets `objectMode` - for readable side of the stream. Has no effect if `objectMode` - is `true`. - * `writableObjectMode` {Boolean} Default=false. Sets `objectMode` - for writable side of the stream. Has no effect if `objectMode` - is `true`. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - - ### Class: stream.Transform A "transform" stream is a duplex stream where the output is causally @@ -1183,12 +1109,47 @@ also implement the `_flush()` method. (See below.) #### new stream.Transform([options]) -* `options` {Object} Passed to both Writable and Readable - constructors. +* `options` {Object} Passed to both Writable and Readable + constructors. + +In classes that extend the Transform class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +#### Events: 'finish' and 'end' + +The [`finish`][] and [`end`][] events are from the parent Writable +and Readable classes respectively. The `finish` event is fired after +`.end()` is called and all chunks have been processed by `_transform`, +`end` is fired after all data has been output which is after the callback +in `_flush` has been called. + +#### transform.\_flush(callback) + +* `callback` {Function} Call this function (optionally with an error + argument) when you are done flushing any remaining data. + +Note: **This function MUST NOT be called directly.** It MAY be implemented +by child classes, and if so, will be called by the internal Transform +class methods only. + +In some cases, your transform operation may need to emit a bit more +data at the end of the stream. For example, a `Zlib` compression +stream will store up some internal state so that it can optimally +compress the output. At the end, however, it needs to do the best it +can with what is left, so that the data will be complete. + +In those cases, you can implement a `_flush` method, which will be +called at the very end, after all the written data is consumed, but +before emitting `end` to signal the end of the readable side. Just +like with `_transform`, call `transform.push(chunk)` zero or more +times, as appropriate, and call `callback` when the flush operation is +complete. -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. #### transform.\_transform(chunk, encoding, callback) @@ -1238,41 +1199,6 @@ the class that defines it, and should not be called directly by user programs. However, you **are** expected to override this method in your own extension classes. -#### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -#### Events: 'finish' and 'end' - -The [`finish`][] and [`end`][] events are from the parent Writable -and Readable classes respectively. The `finish` event is fired after -`.end()` is called and all chunks have been processed by `_transform`, -`end` is fired after all data has been output which is after the callback -in `_flush` has been called. - #### Example: `SimpleProtocol` parser v2 The example above of a simple protocol parser can be implemented @@ -1351,13 +1277,79 @@ SimpleProtocol.prototype._transform = function(chunk, encoding, done) { // with the parsed header data. ``` +### Class: stream.Writable -### Class: stream.PassThrough + -This is a trivial implementation of a [Transform][] stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy as a building block for novel sorts of streams. +`stream.Writable` is an abstract class designed to be extended with an +underlying implementation of the [`_write(chunk, encoding, callback)`][] method. + +Please see above under [API for Stream Consumers][] for how to consume +writable streams in your programs. What follows is an explanation of +how to implement Writable streams in your programs. + +#### new stream.Writable([options]) + +* `options` {Object} + * `highWaterMark` {Number} Buffer level when [`write()`][] starts + returning false. Default=16kb, or 16 for `objectMode` streams + * `decodeStrings` {Boolean} Whether or not to decode strings into + Buffers before passing them to [`_write()`][]. Default=true + * `objectMode` {Boolean} Whether or not the `write(anyObj)` is + a valid operation. If set you can write arbitrary data instead + of only `Buffer` / `String` data. Default=false + +In classes that extend the Writable class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +#### writable.\_write(chunk, encoding, callback) + +* `chunk` {Buffer | String} The chunk to be written. Will **always** + be a buffer unless the `decodeStrings` option was set to `false`. +* `encoding` {String} If the chunk is a string, then this is the + encoding type. If chunk is a buffer, then this is the special + value - 'buffer', ignore it in this case. +* `callback` {Function} Call this function (optionally with an error + argument) when you are done processing the supplied chunk. + +All Writable stream implementations must provide a [`_write()`][] +method to send data to the underlying resource. + +Note: **This function MUST NOT be called directly.** It should be +implemented by child classes, and called by the internal Writable +class methods only. + +Call the callback using the standard `callback(error)` pattern to +signal that the write completed successfully or with an error. + +If the `decodeStrings` flag is set in the constructor options, then +`chunk` may be a string rather than a Buffer, and `encoding` will +indicate the sort of string that it is. This is to support +implementations that have an optimized handling for certain string +data encodings. If you do not explicitly set the `decodeStrings` +option to `false`, then you can safely ignore the `encoding` argument, +and assume that `chunk` will always be a Buffer. + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### writable.\_writev(chunks, callback) + +* `chunks` {Array} The chunks to be written. Each chunk has following + format: `{ chunk: ..., encoding: ... }`. +* `callback` {Function} Call this function (optionally with an error + argument) when you are done processing the supplied chunks. + +Note: **This function MUST NOT be called directly.** It may be +implemented by child classes, and called by the internal Writable +class methods only. + +This function is completely optional to implement. In most cases it is +unnecessary. If implemented, it will be called with all the chunks +that are buffered in the write queue. ## Simplified Constructor API @@ -1370,51 +1362,52 @@ This can be done by passing the appropriate methods as constructor options: Examples: -### Readable +### Duplex ```javascript -var readable = new stream.Readable({ +var duplex = new stream.Duplex({ read: function(n) { // sets this._read under the hood - } -}); -``` -### Writable -```javascript -var writable = new stream.Writable({ + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + }, write: function(chunk, encoding, next) { // sets this._write under the hood + + // An optional error can be passed as the first argument + next() } }); // or -var writable = new stream.Writable({ +var duplex = new stream.Duplex({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + }, writev: function(chunks, next) { // sets this._writev under the hood + + // An optional error can be passed as the first argument + next() } }); ``` -### Duplex +### Readable ```javascript -var duplex = new stream.Duplex({ +var readable = new stream.Readable({ read: function(n) { // sets this._read under the hood - }, - write: function(chunk, encoding, next) { - // sets this._write under the hood - } -}); - -// or -var duplex = new stream.Duplex({ - read: function(n) { - // sets this._read under the hood - }, - writev: function(chunks, next) { - // sets this._writev under the hood + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); } }); ``` @@ -1424,9 +1417,43 @@ var duplex = new stream.Duplex({ var transform = new stream.Transform({ transform: function(chunk, encoding, next) { // sets this._transform under the hood + + // generate output as many times as needed + // this.push(chunk); + + // call when the current chunk is consumed + next(); }, flush: function(done) { // sets this._flush under the hood + + // generate output as many times as needed + // this.push(chunk); + + done(); + } +}); +``` + +### Writable +```javascript +var writable = new stream.Writable({ + write: function(chunk, encoding, next) { + // sets this._write under the hood + + // An optional error can be passed as the first argument + next() + } +}); + +// or + +var writable = new stream.Writable({ + writev: function(chunks, next) { + // sets this._writev under the hood + + // An optional error can be passed as the first argument + next() } }); ``` @@ -1458,40 +1485,6 @@ The purpose of streams, especially with the `pipe()` method, is to limit the buffering of data to acceptable levels, so that sources and destinations of varying speed will not overwhelm the available memory. -### `stream.read(0)` - -There are some cases where you want to trigger a refresh of the -underlying readable stream mechanisms, without actually consuming any -data. In that case, you can call `stream.read(0)`, which will always -return null. - -If the internal read buffer is below the `highWaterMark`, and the -stream is not currently reading, then calling `read(0)` will trigger -a low-level `_read` call. - -There is almost never a need to do this. However, you will see some -cases in Node.js's internals where this is done, particularly in the -Readable stream class internals. - -### `stream.push('')` - -Pushing a zero-byte string or Buffer (when not in [Object mode][]) has an -interesting side effect. Because it *is* a call to -[`stream.push()`][], it will end the `reading` process. However, it -does *not* add any data to the readable buffer, so there's nothing for -a user to consume. - -Very rarely, there are cases where you have no data to provide now, -but the consumer of your stream (or, perhaps, another bit of your own -code) will know when to check again, by calling `stream.read(0)`. In -those cases, you *may* call `stream.push('')`. - -So far, the only use case for this functionality is in the -[tls.CryptoStream][] class, which is deprecated in Node.js/io.js v1.0. If you -find that you have to use `stream.push('')`, please consider another -approach, because it almost certainly indicates that something is -horribly wrong. - ### Compatibility with Older Node.js Versions @@ -1649,25 +1642,66 @@ JSONParseStream.prototype._flush = function(cb) { }; ``` +### `stream.read(0)` + +There are some cases where you want to trigger a refresh of the +underlying readable stream mechanisms, without actually consuming any +data. In that case, you can call `stream.read(0)`, which will always +return null. + +If the internal read buffer is below the `highWaterMark`, and the +stream is not currently reading, then calling `read(0)` will trigger +a low-level `_read` call. + +There is almost never a need to do this. However, you will see some +cases in Node.js's internals where this is done, particularly in the +Readable stream class internals. + +### `stream.push('')` + +Pushing a zero-byte string or Buffer (when not in [Object mode][]) has an +interesting side effect. Because it *is* a call to +[`stream.push()`][], it will end the `reading` process. However, it +does *not* add any data to the readable buffer, so there's nothing for +a user to consume. + +Very rarely, there are cases where you have no data to provide now, +but the consumer of your stream (or, perhaps, another bit of your own +code) will know when to check again, by calling `stream.read(0)`. In +those cases, you *may* call `stream.push('')`. + +So far, the only use case for this functionality is in the +[tls.CryptoStream][] class, which is deprecated in Node.js/io.js v1.0. If you +find that you have to use `stream.push('')`, please consider another +approach, because it almost certainly indicates that something is +horribly wrong. -[EventEmitter]: https://iojs.org/dist/v5.0.0/doc/api/events.html#events_class_events_eventemitter +[request to an HTTP server]: https://nodejs.org/docs/v5.1.0/api/http.html#http_http_incomingmessage +[EventEmitter]: https://nodejs.org/docs/v5.1.0/api/events.html#events_class_events_eventemitter [Object mode]: #stream_object_mode [`stream.push(chunk)`]: #stream_readable_push_chunk_encoding [`stream.push(null)`]: #stream_readable_push_chunk_encoding [`stream.push()`]: #stream_readable_push_chunk_encoding [`unpipe()`]: #stream_readable_unpipe_destination [unpiped]: #stream_readable_unpipe_destination -[tcp sockets]: https://iojs.org/dist/v5.0.0/doc/api/net.html#net_class_net_socket +[tcp sockets]: https://nodejs.org/docs/v5.1.0/api/net.html#net_class_net_socket +[http responses, on the client]: https://nodejs.org/docs/v5.1.0/api/http.html#http_http_incomingmessage +[http requests, on the server]: https://nodejs.org/docs/v5.1.0/api/http.html#http_http_incomingmessage +[http requests, on the client]: https://nodejs.org/docs/v5.1.0/api/http.html#http_class_http_clientrequest +[http responses, on the server]: https://nodejs.org/docs/v5.1.0/api/http.html#http_class_http_serverresponse +[fs read streams]: https://nodejs.org/docs/v5.1.0/api/fs.html#fs_class_fs_readstream +[fs write streams]: https://nodejs.org/docs/v5.1.0/api/fs.html#fs_class_fs_writestream [zlib streams]: zlib.html [zlib]: zlib.html [crypto streams]: crypto.html [crypto]: crypto.html -[tls.CryptoStream]: https://iojs.org/dist/v5.0.0/doc/api/tls.html#tls_class_cryptostream -[process.stdin]: https://iojs.org/dist/v5.0.0/doc/api/process.html#process_process_stdin -[stdout]: https://iojs.org/dist/v5.0.0/doc/api/process.html#process_process_stdout -[process.stdout]: https://iojs.org/dist/v5.0.0/doc/api/process.html#process_process_stdout -[process.stderr]: https://iojs.org/dist/v5.0.0/doc/api/process.html#process_process_stderr -[child process stdout and stderr]: https://iojs.org/dist/v5.0.0/doc/api/child_process.html#child_process_child_stdout +[tls.CryptoStream]: https://nodejs.org/docs/v5.1.0/api/tls.html#tls_class_cryptostream +[process.stdin]: https://nodejs.org/docs/v5.1.0/api/process.html#process_process_stdin +[stdout]: https://nodejs.org/docs/v5.1.0/api/process.html#process_process_stdout +[process.stdout]: https://nodejs.org/docs/v5.1.0/api/process.html#process_process_stdout +[process.stderr]: https://nodejs.org/docs/v5.1.0/api/process.html#process_process_stderr +[child process stdout and stderr]: https://nodejs.org/docs/v5.1.0/api/child_process.html#child_process_child_stdout +[child process stdin]: https://nodejs.org/docs/v5.1.0/api/child_process.html#child_process_child_stdin [API for Stream Consumers]: #stream_api_for_stream_consumers [API for Stream Implementors]: #stream_api_for_stream_implementors [Readable]: #stream_class_stream_readable @@ -1686,7 +1720,7 @@ JSONParseStream.prototype._flush = function(cb) { [`_write(chunk, encoding, callback)`]: #stream_writable_write_chunk_encoding_callback_1 [`_write()`]: #stream_writable_write_chunk_encoding_callback_1 [_write]: #stream_writable_write_chunk_encoding_callback_1 -[`util.inherits`]: https://iojs.org/dist/v5.0.0/doc/api/util.html#util_util_inherits_constructor_superconstructor +[`util.inherits`]: https://nodejs.org/docs/v5.1.0/api/util.html#util_util_inherits_constructor_superconstructor [`end()`]: #stream_writable_end_chunk_encoding_callback [`'data'` event]: #stream_event_data [`resume()`]: #stream_readable_resume diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js index 90068ea249d998..50852aee7e6e02 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js @@ -61,8 +61,9 @@ var StringDecoder; util.inherits(Readable, Stream); +var Duplex; function ReadableState(options, stream) { - var Duplex = require('./_stream_duplex'); + Duplex = Duplex || require('./_stream_duplex'); options = options || {}; @@ -128,8 +129,9 @@ function ReadableState(options, stream) { } } +var Duplex; function Readable(options) { - var Duplex = require('./_stream_duplex'); + Duplex = Duplex || require('./_stream_duplex'); if (!(this instanceof Readable)) return new Readable(options); diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js index 23a2ba295df2f1..1fa5eb695adde6 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js @@ -55,8 +55,9 @@ function WriteReq(chunk, encoding, cb) { this.next = null; } +var Duplex; function WritableState(options, stream) { - var Duplex = require('./_stream_duplex'); + Duplex = Duplex || require('./_stream_duplex'); options = options || {}; @@ -164,8 +165,9 @@ Object.defineProperty(WritableState.prototype, 'buffer', { }catch(_){}}()); +var Duplex; function Writable(options) { - var Duplex = require('./_stream_duplex'); + Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, though they're not // instanceof Writable, they're instanceof Readable. diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json index 83e519e7b464a5..ddd227e64f99f4 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/core-util-is/package.json @@ -33,11 +33,28 @@ "devDependencies": { "tap": "^2.3.0" }, - "readme": "# core-util-is\n\nThe `util.is*` functions introduced in Node v0.12.\n", - "readmeFilename": "README.md", + "gitHead": "a177da234df5638b363ddc15fa324619a38577c8", "homepage": "https://github.com/isaacs/core-util-is#readme", "_id": "core-util-is@1.0.2", "_shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7", + "_from": "core-util-is@>=1.0.0 <1.1.0", + "_npmVersion": "3.3.2", + "_nodeVersion": "4.0.0", + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "dist": { + "shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7", + "tarball": "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "directories": {}, "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "_from": "core-util-is@>=1.0.0 <1.1.0" + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/process-nextick-args/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/process-nextick-args/package.json index 4019a28addcd88..0ccf22578d2caa 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/process-nextick-args/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/process-nextick-args/package.json @@ -22,7 +22,7 @@ "gitHead": "e85787b05a8c3c1adb714f332d822e9162699c78", "_id": "process-nextick-args@1.0.6", "_shasum": "0f96b001cea90b12592ce566edb97ec11e69bd05", - "_from": "process-nextick-args@>=1.0.0 <1.1.0", + "_from": "process-nextick-args@>=1.0.6 <1.1.0", "_npmVersion": "2.14.4", "_nodeVersion": "4.1.1", "_npmUser": { diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json index ee70702359198d..0364d54ba46af6 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/string_decoder/package.json @@ -22,13 +22,33 @@ "browserify" ], "license": "MIT", - "readme": "**string_decoder.js** (`require('string_decoder')`) from Node.js core\n\nCopyright Joyent, Inc. and other Node contributors. See LICENCE file for details.\n\nVersion numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.**\n\nThe *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version.", - "readmeFilename": "README.md", + "gitHead": "d46d4fd87cf1d06e031c23f1ba170ca7d4ade9a0", "bugs": { "url": "https://github.com/rvagg/string_decoder/issues" }, "_id": "string_decoder@0.10.31", "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", + "_from": "string_decoder@>=0.10.0 <0.11.0", + "_npmVersion": "1.4.23", + "_npmUser": { + "name": "rvagg", + "email": "rod@vagg.org" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + }, + { + "name": "rvagg", + "email": "rod@vagg.org" + } + ], + "dist": { + "shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", + "tarball": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + }, + "directories": {}, "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "_from": "string_decoder@>=0.10.0 <0.11.0" + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/util-deprecate/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/util-deprecate/package.json index f68d8bb958657f..ae0c70f6c633f1 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/util-deprecate/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/node_modules/util-deprecate/package.json @@ -28,10 +28,27 @@ "url": "https://github.com/TooTallNate/util-deprecate/issues" }, "homepage": "https://github.com/TooTallNate/util-deprecate", - "readme": "util-deprecate\n==============\n### The Node.js `util.deprecate()` function with browser support\n\nIn Node.js, this module simply re-exports the `util.deprecate()` function.\n\nIn the web browser (i.e. via browserify), a browser-specific implementation\nof the `util.deprecate()` function is used.\n\n\n## API\n\nA `deprecate()` function is the only thing exposed by this module.\n\n``` javascript\n// setup:\nexports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead');\n\n\n// users see:\nfoo();\n// foo() is deprecated, use bar() instead\nfoo();\nfoo();\n```\n\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014 Nathan Rajlich \n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\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\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "README.md", + "gitHead": "475fb6857cd23fafff20c1be846c1350abf8e6d4", "_id": "util-deprecate@1.0.2", "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "_from": "util-deprecate@>=1.0.1 <1.1.0", + "_npmVersion": "2.14.4", + "_nodeVersion": "4.1.2", + "_npmUser": { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + "maintainers": [ + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + } + ], + "dist": { + "shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "tarball": "http://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + }, + "directories": {}, "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "_from": "util-deprecate@>=1.0.1 <1.1.0" + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json index c0698efcb36108..7590ac88879acf 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/readable-stream/package.json @@ -1,13 +1,13 @@ { "name": "readable-stream", - "version": "2.0.4", + "version": "2.0.5", "description": "Streams3, a user-land copy of the stream library from iojs v2.x", "main": "readable.js", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", - "process-nextick-args": "~1.0.0", + "process-nextick-args": "~1.0.6", "string_decoder": "~0.10.x", "util-deprecate": "~1.0.1" }, @@ -34,14 +34,43 @@ "util": false }, "license": "MIT", - "readme": "# readable-stream\n\n***Node-core streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream)\n\n\n[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/)\n[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/)\n\n\n[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream)\n\n```bash\nnpm install --save readable-stream\n```\n\n***Node-core streams for userland***\n\nThis package is a mirror of the Streams2 and Streams3 implementations in\nNode-core, including [documentation](doc/stream.markdown).\n\nIf you want to guarantee a stable streams base, regardless of what version of\nNode you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *\"stream\"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html).\n\nAs of version 2.0.0 **readable-stream** uses semantic versioning. \n\n# Streams WG Team Members\n\n* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com>\n - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B\n* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com>\n - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242\n* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org>\n - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D\n* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com>\n* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com>\n* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me>\n", - "readmeFilename": "README.md", + "gitHead": "a4f23d8e451267684a8160679ce16e16149fe72b", "bugs": { "url": "https://github.com/nodejs/readable-stream/issues" }, "homepage": "https://github.com/nodejs/readable-stream#readme", - "_id": "readable-stream@2.0.4", - "_shasum": "2523ef27ffa339d7ba9da8603f2d0599d06edbd8", - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.4.tgz", - "_from": "readable-stream@>=2.0.0 <2.1.0" + "_id": "readable-stream@2.0.5", + "_shasum": "a2426f8dcd4551c77a33f96edf2886a23c829669", + "_from": "readable-stream@>=2.0.0 <2.1.0", + "_npmVersion": "3.3.12", + "_nodeVersion": "5.1.1", + "_npmUser": { + "name": "cwmma", + "email": "calvin.metcalf@gmail.com" + }, + "dist": { + "shasum": "a2426f8dcd4551c77a33f96edf2886a23c829669", + "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz" + }, + "maintainers": [ + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + { + "name": "rvagg", + "email": "rod@vagg.org" + }, + { + "name": "cwmma", + "email": "calvin.metcalf@gmail.com" + } + ], + "directories": {}, + "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz", + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json index f946a953af73c6..b8b59f5c303991 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/node_modules/typedarray/package.json @@ -52,13 +52,28 @@ "android-browser/4.2..latest" ] }, - "readme": "# typedarray\n\nTypedArray polyfill ripped from [this\nmodule](https://raw.github.com/inexorabletash/polyfill).\n\n[![build status](https://secure.travis-ci.org/substack/typedarray.png)](http://travis-ci.org/substack/typedarray)\n\n[![testling badge](https://ci.testling.com/substack/typedarray.png)](https://ci.testling.com/substack/typedarray)\n\n# example\n\n``` js\nvar Uint8Array = require('typedarray').Uint8Array;\nvar ua = new Uint8Array(5);\nua[1] = 256 + 55;\nconsole.log(ua[1]);\n```\n\noutput:\n\n```\n55\n```\n\n# methods\n\n``` js\nvar TA = require('typedarray')\n```\n\nThe `TA` object has the following constructors:\n\n* TA.ArrayBuffer\n* TA.DataView\n* TA.Float32Array\n* TA.Float64Array\n* TA.Int8Array\n* TA.Int16Array\n* TA.Int32Array\n* TA.Uint8Array\n* TA.Uint8ClampedArray\n* TA.Uint16Array\n* TA.Uint32Array\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install typedarray\n```\n\nTo use this module in the browser, compile with\n[browserify](http://browserify.org)\nor download a UMD build from browserify CDN:\n\nhttp://wzrd.in/standalone/typedarray@latest\n\n# license\n\nMIT\n", - "readmeFilename": "readme.markdown", "bugs": { "url": "https://github.com/substack/typedarray/issues" }, "_id": "typedarray@0.0.6", + "dist": { + "shasum": "867ac74e3864187b1d3d47d996a78ec5c8830777", + "tarball": "http://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + }, + "_from": "typedarray@>=0.0.5 <0.1.0", + "_npmVersion": "1.4.3", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "directories": {}, "_shasum": "867ac74e3864187b1d3d47d996a78ec5c8830777", "_resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "_from": "typedarray@>=0.0.5 <0.1.0" + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json index 53820bc0b2ce94..5a3f8b401e4449 100644 --- a/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json +++ b/deps/npm/node_modules/npm-registry-client/node_modules/concat-stream/package.json @@ -54,11 +54,28 @@ "android-browser/4.2..latest" ] }, - "readme": "# concat-stream\n\nWritable stream that concatenates all the data from a stream and calls a callback with the result. Use this when you want to collect all the data from a stream into a single buffer.\n\n[![Build Status](https://travis-ci.org/maxogden/concat-stream.svg?branch=master)](https://travis-ci.org/maxogden/concat-stream)\n\n[![NPM](https://nodei.co/npm/concat-stream.png)](https://nodei.co/npm/concat-stream/)\n\n### description\n\nStreams emit many buffers. If you want to collect all of the buffers, and when the stream ends concatenate all of the buffers together and receive a single buffer then this is the module for you.\n\nOnly use this if you know you can fit all of the output of your stream into a single Buffer (e.g. in RAM).\n\nThere are also `objectMode` streams that emit things other than Buffers, and you can concatenate these too. See below for details.\n\n## Related\n\n`stream-each` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.\n\n### examples\n\n#### Buffers\n\n```js\nvar fs = require('fs')\nvar concat = require('concat-stream')\n\nvar readStream = fs.createReadStream('cat.png')\nvar concatStream = concat(gotPicture)\n\nreadStream.on('error', handleError)\nreadStream.pipe(concatStream)\n\nfunction gotPicture(imageBuffer) {\n // imageBuffer is all of `cat.png` as a node.js Buffer\n}\n\nfunction handleError(err) {\n // handle your error appropriately here, e.g.:\n console.error(err) // print the error to STDERR\n process.exit(1) // exit program with non-zero exit code\n}\n\n```\n\n#### Arrays\n\n```js\nvar write = concat(function(data) {})\nwrite.write([1,2,3])\nwrite.write([4,5,6])\nwrite.end()\n// data will be [1,2,3,4,5,6] in the above callback\n```\n\n#### Uint8Arrays\n\n```js\nvar write = concat(function(data) {})\nvar a = new Uint8Array(3)\na[0] = 97; a[1] = 98; a[2] = 99\nwrite.write(a)\nwrite.write('!')\nwrite.end(Buffer('!!1'))\n```\n\nSee `test/` for more examples\n\n# methods\n\n```js\nvar concat = require('concat-stream')\n```\n\n## var writable = concat(opts={}, cb)\n\nReturn a `writable` stream that will fire `cb(data)` with all of the data that\nwas written to the stream. Data can be written to `writable` as strings,\nBuffers, arrays of byte integers, and Uint8Arrays. \n\nBy default `concat-stream` will give you back the same data type as the type of the first buffer written to the stream. Use `opts.encoding` to set what format `data` should be returned as, e.g. if you if you don't want to rely on the built-in type checking or for some other reason.\n\n* `string` - get a string\n* `buffer` - get back a Buffer\n* `array` - get an array of byte integers\n* `uint8array`, `u8`, `uint8` - get back a Uint8Array\n* `object`, get back an array of Objects\n\nIf you don't specify an encoding, and the types can't be inferred (e.g. you write things that aren't in the list above), it will try to convert concat them into a `Buffer`.\n\n# error handling\n\n`concat-stream` does not handle errors for you, so you must handle errors on whatever streams you pipe into `concat-stream`. This is a general rule when programming with node.js streams: always handle errors on each and every stream. Since `concat-stream` is not itself a stream it does not emit errors.\n\nWe recommend using [`end-of-stream`](https://npmjs.org/end-of-stream) or [`pump`](https://npmjs.org/pump) for writing error tolerant stream code.\n\n# license\n\nMIT LICENSE\n", - "readmeFilename": "readme.md", + "gitHead": "522adc12d82f57c691a5f946fbc8ba08718dcdcb", "homepage": "https://github.com/maxogden/concat-stream#readme", "_id": "concat-stream@1.5.1", "_shasum": "f3b80acf9e1f48e3875c0688b41b6c31602eea1c", + "_from": "concat-stream@>=1.4.6 <2.0.0", + "_npmVersion": "2.14.2", + "_nodeVersion": "4.0.0", + "_npmUser": { + "name": "maxogden", + "email": "max@maxogden.com" + }, + "dist": { + "shasum": "f3b80acf9e1f48e3875c0688b41b6c31602eea1c", + "tarball": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz" + }, + "maintainers": [ + { + "name": "maxogden", + "email": "max@maxogden.com" + } + ], + "directories": {}, "_resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz", - "_from": "concat-stream@>=1.4.6 <2.0.0" + "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json index 7ead37785b2d14..362862cfc5f886 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": "7.0.9", + "version": "7.1.0", "repository": { "url": "git+https://github.com/npm/npm-registry-client.git" }, @@ -40,23 +40,23 @@ "npmlog": "~2.0.0" }, "license": "ISC", - "gitHead": "2c0c83149edb270829582a234703404b2ba1c410", + "gitHead": "d077cb652152a8c265369d9d169cba8a52239fb4", "bugs": { "url": "https://github.com/npm/npm-registry-client/issues" }, "homepage": "https://github.com/npm/npm-registry-client#readme", - "_id": "npm-registry-client@7.0.9", - "_shasum": "1baf86ee5285c4e6d38d4556208ded56049231bb", - "_from": "npm-registry-client@>=7.0.9 <7.1.0", - "_npmVersion": "3.4.1", - "_nodeVersion": "5.1.0", + "_id": "npm-registry-client@7.1.0", + "_shasum": "e3be14ab279fe5123e15ab5c8a650445415664a5", + "_from": "npm-registry-client@7.1.0", + "_npmVersion": "3.7.5", + "_nodeVersion": "5.4.0", "_npmUser": { - "name": "othiym23", - "email": "ogd@aoaioxxysz.net" + "name": "iarna", + "email": "me@re-becca.org" }, "dist": { - "shasum": "1baf86ee5285c4e6d38d4556208ded56049231bb", - "tarball": "http://registry.npmjs.org/npm-registry-client/-/npm-registry-client-7.0.9.tgz" + "shasum": "e3be14ab279fe5123e15ab5c8a650445415664a5", + "tarball": "http://registry.npmjs.org/npm-registry-client/-/npm-registry-client-7.1.0.tgz" }, "maintainers": [ { @@ -76,7 +76,10 @@ "email": "kat@sykosomatic.org" } ], + "_npmOperationalInternal": { + "host": "packages-5-east.internal.npmjs.com", + "tmp": "tmp/npm-registry-client-7.1.0.tgz_1456435497334_0.35472381697036326" + }, "directories": {}, - "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-7.0.9.tgz", - "readme": "ERROR: No README data found!" + "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-7.1.0.tgz" } diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json new file mode 100644 index 00000000000000..4561db502b18e5 --- /dev/null +++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json @@ -0,0 +1 @@ +{"_id":"@npm%2fnpm-registry-client","_rev":"213-0a1049cf56172b7d9a1184742c6477b9","name":"@npm/npm-registry-client","description":"Client for the npm registry","dist-tags":{"latest":"2.0.4","v2.0":"2.0.3"},"versions":{"0.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"693a08f6d2faea22bbd2bf412508a63d3e6229a7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.2","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"b48c0ec5563c6a6fdc253454fc56d2c60c5a26f4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.3","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"ccc0254c2d59e3ea9b9050e2b16edef78df1a1e8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.4","_engineSupported":true,"_npmVersion":"1.1.25","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"faabd25ef477521c74ac21e0f4cf3a2f66d18fb3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.4.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.5","dist":{"shasum":"85219810c9d89ae8d28ea766e7cf74efbd9f1e52","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.5.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.6","dist":{"shasum":"cc6533b3b41df65e6e9db2601fbbf1a509a7e94c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.6.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.7","dist":{"shasum":"0cee1d1c61f1c8e483774fe1f7bbb81c4f394a3a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.7.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.8","dist":{"shasum":"1b7411c3f7310ec2a96b055b00e7ca606e47bd07","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.8.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.9","dist":{"shasum":"6d5bfde431559ac9e2e52a7db85f5839b874f022","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.9.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.10","dist":{"shasum":"0c8b6a4615bce82aa6cc04a0d1f7dc89921f7a38","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.10.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.11","dist":{"shasum":"afab40be5bed1faa946d8e1827844698f2ec1db7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.11.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.0","dist":{"shasum":"1077d6bbb5e432450239dc6622a59474953ffbea","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.0.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.1","dist":{"shasum":"759765361d09b715270f59cf50f10908e4e9c5fc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.2","dist":{"shasum":"541ce93abb3d35f5c325545c718dd3bbeaaa9ff0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.3","dist":{"shasum":"e9a40d7031e8f809af5fd85aa9aac979e17efc97","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.4","dist":{"shasum":"b211485b046191a1085362376530316f0cab0420","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.4.tgz"},"_npmVersion":"1.1.48","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.0","dist":{"shasum":"6508a4b4d96f31057d5200ca5779531bafd2b840","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.0.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.1","dist":{"shasum":"1bc8c4576c368cd88253d8a52daf40c55b89bb1a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.1.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.5","dist":{"shasum":"2f55d675dfb977403b1ad0d96874c1d30e8058d7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.5.tgz"},"_npmVersion":"1.1.51","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.6","dist":{"shasum":"f05df6695360360ad220e6e13a6a7bace7165fbe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.6.tgz"},"_npmVersion":"1.1.56","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.7","dist":{"shasum":"867bad8854cae82ed89ee3b7f1d391af59491671","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.7.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.8","dist":{"shasum":"ef194cdb70f1ea03a576cff2c97392fa96e36563","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.8.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.9","dist":{"shasum":"3cec10431dfed1594adaf99c50f482ee56ecf9e4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.9.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.10","dist":{"shasum":"1e69726dae0944e78562fd77243f839c6a2ced1e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.10.tgz"},"_npmVersion":"1.1.64","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.11","dist":{"shasum":"d92f33c297eb1bbd57fd597c3d8f5f7e9340a0b5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.11.tgz"},"_npmVersion":"1.1.70","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.12","dist":{"shasum":"3bfb6fc0e4b131d665580cd1481c341fe521bfd3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.12.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.13":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.13","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.13","dist":{"shasum":"e03f2a4340065511b7184a3e2862cd5d459ef027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.13.tgz"},"_from":".","_npmVersion":"1.2.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.14":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.14","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.14","dist":{"shasum":"186874a7790417a340d582b1cd4a7c338087ee12","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.14.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.15":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.15","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.15","dist":{"shasum":"f71f32b7185855f1f8b7a5ef49e49d2357c2c552","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.15.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.16":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.16","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.16","dist":{"shasum":"3331323b5050fc5afdf77c3a35913c16f3e43964","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.16.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.17":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.17","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.17","dist":{"shasum":"1df2bbecac6751f5d9600fb43722aef96d956773","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.17.tgz"},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.18":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.18","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.18","dist":{"shasum":"198c8d15ed9b1ed546faf6e431eb63a6b18193ad","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.18.tgz"},"_from":".","_npmVersion":"1.2.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.19":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.19","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.19","dist":{"shasum":"106da826f0d2007f6e081f2b68fb6f26fa951b20","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.19.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.20":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.20","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.20","dist":{"shasum":"3fff194331e26660be2cf8ebf45ddf7d36add5f6","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.20.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.21":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.21","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.21","dist":{"shasum":"d85dd32525f193925c46ff9eb0e0f529dfd1b254","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.21.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.22":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.22","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.22","dist":{"shasum":"caa22ff40a1ccd632a660b8b80c333c8f92d5a17","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.22.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.23":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.23","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.23","dist":{"shasum":"a320ab2b1d048b4f7b88e40bd86974ca322b4c24","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.23.tgz"},"_from":".","_npmVersion":"1.2.19","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.24":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.24","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.24","dist":{"shasum":"e12f644338619319ee7f233363a1714a87f3c72d","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.24.tgz"},"_from":".","_npmVersion":"1.2.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.25":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.25","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.25","dist":{"shasum":"c2caeb1dcf937d6fcc4a187765d401f5e2f54027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.25.tgz"},"_from":".","_npmVersion":"1.2.32","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.26":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.26","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.26","dist":{"shasum":"4c5a2b3de946e383032f10fa497d0c15ee5f4c60","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.26.tgz"},"_from":".","_npmVersion":"1.3.1","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.27":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.27","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~2.0.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.27","dist":{"shasum":"8f338189d32769267886a07ad7b7fd2267446adf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.27.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.28":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.28","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"~2.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.28","dist":{"shasum":"959141fc0180d7b1ad089e87015a8a2142a8bffc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.28.tgz"},"_from":".","_npmVersion":"1.3.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.29":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.29","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.29","dist":{"shasum":"66ff2766f0c61d41e8a6139d3692d8833002c686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.29.tgz"},"_from":".","_npmVersion":"1.3.12","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.30":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.30","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.30","dist":{"shasum":"f01cae5c51aa0a1c5dc2516cbad3ebde068d3eaa","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.30.tgz"},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.31":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.31","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.31","dist":{"shasum":"24a23e24e43246677cb485f8391829e9536563d4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.31.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.0","dist":{"shasum":"66eab02a69be67f232ac14023eddfb8308c2eccd","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.0.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.1","dist":{"shasum":"16dba07cc304442edcece378218672d0a1258ef8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.1.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.2","dist":{"shasum":"ea3060bd0a87fb1d97b87433b50f38f7272b1686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.2.tgz"},"_from":".","_npmVersion":"1.3.20","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.3","dist":{"shasum":"da08bb681fb24aa5c988ca71f8c10f27f09daf4a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.3.tgz"},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.4","dist":{"shasum":"25d771771590b1ca39277aea4506af234c5f4342","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.4.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.5","dist":{"shasum":"98ba1ac851a3939a3fb9917c28fa8da522dc635f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.5.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.6","dist":{"shasum":"c48a2a03643769acc49672860f7920ec6bffac6e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.6.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.0","dist":{"shasum":"30d0c178b7f2e54183a6a3fc9fe4071eb10290bf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.0.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.1","dist":{"shasum":"9c49b3e44558e2072158fb085be8a083c5f83537","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.1.tgz"},"_from":".","_npmVersion":"1.4.0","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.2","dist":{"shasum":"d9568a9413bee14951201ce73f3b3992ec6658c0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.2.tgz"},"_from":".","_npmVersion":"1.4.1","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.3","dist":{"shasum":"aa188fc5067158e991a57f4697c54994108f5389","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.3.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.4","dist":{"shasum":"f9dbc383a49069d8c7f67755a3ff6e424aff584f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.4.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.5","dist":{"shasum":"7d6fdca46139470715f9477ddb5ad3e770d4de7b","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.5.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.6","_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"657f69a79543fc4cc264c3b2de958bd15f7140fe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.6.tgz"},"directories":{}},"0.4.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.7","dist":{"shasum":"f4369b59890da7882527eb7c427dd95d43707afb","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.7.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.8","_shasum":"a6685a161033101be6064b7af887ab440e8695d0","_from":".","_npmVersion":"1.4.8","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"a6685a161033101be6064b7af887ab440e8695d0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.8.tgz"},"directories":{}},"0.4.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.9","_shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.9.tgz"},"directories":{}},"0.4.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.10","_shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.10.tgz"},"directories":{}},"0.4.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.11","_shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.11.tgz"},"directories":{}},"0.4.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.12","_shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.12.tgz"},"directories":{}},"1.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.0","_shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.0.tgz"},"directories":{}},"1.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"98b1278c230cf6c159f189e2f8c69daffa727ab8","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.1","_shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.1.tgz"},"directories":{}},"2.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"47a98069b6a34e751cbd5b84ce92858cae5abe70","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.0","_shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.0.tgz"},"directories":{}},"2.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"123e40131f83f7265f66ecd2a558cce44a3aea86","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.1","_shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.1.tgz"},"directories":{}},"2.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6ecc311c9dd4890f2d9b6bae60447070a3321e12","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.2","_shasum":"a82b000354c7f830114fb18444764bc477d5740f","_from":".","_npmVersion":"1.4.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"a82b000354c7f830114fb18444764bc477d5740f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.2.tgz"},"directories":{}},"3.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6bb1aec1e85fa82ee075bd997d6fb9f2dbb7f643","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.0","_shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","_from":".","_npmVersion":"1.5.0-pre","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.0.tgz"},"directories":{}},"3.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"fe8382dde609ea1e3580fcdc5bc3d0bba119cfc6","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.1","_shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.1.tgz"},"directories":{}},"2.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"2578fb9a807d77417554ba235ba8fac39405e832","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.3","_shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.3.tgz"},"directories":{}},"3.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"15343019160ace0b9874cf0ec186b3425dbc7301","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.2","_shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","_from":".","_npmVersion":"1.5.0-alpha-2","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.2.tgz"},"directories":{}},"3.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"b18a780d1185f27c06c27812147b83aba0d4a2f5","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.3","_shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.3.tgz"},"directories":{}},"3.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.5.0","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"54900fe4b2eb5b99ee6dfe173f145732fdfae80e","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.4","_shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.4.tgz"},"directories":{}},"3.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"0.5","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"635db1654346bc86473df7b39626601425f46177","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.5","_shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.5.tgz"},"directories":{}},"3.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"eba30fadd724ed5cad1aec95ac3ee907a59b7317","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.6","_shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.6.tgz"},"directories":{}},"2.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"a10f621d9cdc813b9d3092a14b661f65bfa6d40d","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.4","_shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.4.tgz"},"directories":{}}},"readme":"# npm-registry-client\u000a\u000aThe code that npm uses to talk to the registry.\u000a\u000aIt handles all the caching and HTTP calls.\u000a\u000a## Usage\u000a\u000a```javascript\u000avar RegClient = require('npm-registry-client')\u000avar client = new RegClient(config)\u000avar uri = \"npm://registry.npmjs.org/npm\"\u000avar options = {timeout: 1000}\u000a\u000aclient.get(uri, options, function (error, data, raw, res) {\u000a // error is an error if there was a problem.\u000a // data is the parsed data object\u000a // raw is the json string\u000a // res is the response from couch\u000a})\u000a```\u000a\u000a# Registry URLs\u000a\u000aThe registry calls take either a full URL pointing to a resource in the\u000aregistry, or a base URL for the registry as a whole (for the base URL, any path\u000awill be ignored). In addition to `http` and `https`, `npm` URLs are allowed.\u000a`npm` URLs are `https` URLs with the additional restrictions that they will\u000aalways include authorization credentials, and the response is always registry\u000ametadata (and not tarballs or other attachments).\u000a\u000a# Configuration\u000a\u000aThis program is designed to work with\u000a[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\u000aa plain-jane object with the appropriate configs, and it'll shim it\u000afor you. Any configuration thingie that has get/set/del methods will\u000aalso be accepted.\u000a\u000a* `cache` **Required** {String} Path to the cache folder\u000a* `always-auth` {Boolean} Auth even for GET requests.\u000a* `auth` {String} A base64-encoded `username:password`\u000a* `email` {String} User's email address\u000a* `tag` {String} The default tag to use when publishing new packages.\u000a Default = `\"latest\"`\u000a* `ca` {String} Cerficate signing authority certificates to trust.\u000a* `cert` {String} Client certificate (PEM encoded). Enable access\u000a to servers that require client certificates\u000a* `key` {String} Private key (PEM encoded) for client certificate 'cert'\u000a* `strict-ssl` {Boolean} Whether or not to be strict with SSL\u000a certificates. Default = `true`\u000a* `user-agent` {String} User agent header to send. Default =\u000a `\"node/{process.version} {process.platform} {process.arch}\"`\u000a* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\u000a that works, otherwise logs are disabled.\u000a* `fetch-retries` {Number} Number of times to retry on GET failures.\u000a Default=2\u000a* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\u000a* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\u000a Default=10000 (10 seconds)\u000a* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\u000a Default=60000 (60 seconds)\u000a* `proxy` {URL} The url to proxy requests through.\u000a* `https-proxy` {URL} The url to proxy https requests through.\u000a Defaults to be the same as `proxy` if unset.\u000a* `_auth` {String} The base64-encoded authorization header.\u000a* `username` `_password` {String} Username/password to use to generate\u000a `_auth` if not supplied.\u000a* `_token` {Object} A token for use with\u000a [couch-login](https://npmjs.org/package/couch-login)\u000a\u000a# client.request(method, uri, options, cb)\u000a\u000a* `method` {String} HTTP method\u000a* `uri` {String} URI pointing to the resource to request\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `what` {Stream | Buffer | String | Object} The request body. Objects\u000a that are not Buffers or Streams are encoded as JSON.\u000a * `etag` {String} The cached ETag\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a* `cb` {Function}\u000a * `error` {Error | null}\u000a * `data` {Object} the parsed data object\u000a * `raw` {String} the json\u000a * `res` {Response Object} response from couch\u000a\u000aMake a request to the registry. All the other methods are wrappers around\u000a`request`.\u000a\u000a# client.adduser(base, username, password, email, cb)\u000a\u000a* `base` {String} Base registry URL\u000a* `username` {String}\u000a* `password` {String}\u000a* `email` {String}\u000a* `cb` {Function}\u000a\u000aAdd a user account to the registry, or verify the credentials.\u000a\u000a# client.deprecate(uri, version, message, cb)\u000a\u000a* `uri` {String} Full registry URI for the deprecated package\u000a* `version` {String} Semver version range\u000a* `message` {String} The message to use as a deprecation warning\u000a* `cb` {Function}\u000a\u000aDeprecate a version of a package in the registry.\u000a\u000a# client.bugs(uri, cb)\u000a\u000a* `uri` {String} Full registry URI for the package\u000a* `cb` {Function}\u000a\u000aGet the url for bugs of a package\u000a\u000a# client.get(uri, options, cb)\u000a\u000a* `uri` {String} The complete registry URI to fetch\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `timeout` {Number} Duration before the request times out.\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a * `staleOk` {Boolean} If there's cached data available, then return that\u000a to the callback quickly, and update the cache the background.\u000a\u000aFetches data from the registry via a GET request, saving it in the cache folder\u000awith the ETag.\u000a\u000a# client.publish(uri, data, tarball, cb)\u000a\u000a* `uri` {String} The registry URI to publish to\u000a* `data` {Object} Package data\u000a* `tarball` {String | Stream} Filename or stream of the package tarball\u000a* `cb` {Function}\u000a\u000aPublish a package to the registry.\u000a\u000aNote that this does not create the tarball from a folder. However, it can\u000aaccept a gzipped tar stream or a filename to a tarball.\u000a\u000a# client.star(uri, starred, cb)\u000a\u000a* `uri` {String} The complete registry URI to star\u000a* `starred` {Boolean} True to star the package, false to unstar it.\u000a* `cb` {Function}\u000a\u000aStar or unstar a package.\u000a\u000aNote that the user does not have to be the package owner to star or unstar a\u000apackage, though other writes do require that the user be the package owner.\u000a\u000a# client.stars(base, username, cb)\u000a\u000a* `base` {String} The base URL for the registry\u000a* `username` {String} Name of user to fetch starred packages for.\u000a* `cb` {Function}\u000a\u000aView your own or another user's starred packages.\u000a\u000a# client.tag(uri, version, tag, cb)\u000a\u000a* `uri` {String} The complete registry URI to tag\u000a* `version` {String} Version to tag\u000a* `tag` {String} Tag name to apply\u000a* `cb` {Function}\u000a\u000aMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\u000aspecified version.\u000a\u000a# client.unpublish(uri, [ver], cb)\u000a\u000a* `uri` {String} The complete registry URI to unpublish\u000a* `ver` {String} version to unpublish. Leave blank to unpublish all\u000a versions.\u000a* `cb` {Function}\u000a\u000aRemove a version of a package (or all versions) from the registry. When the\u000alast version us unpublished, the entire document is removed from the database.\u000a\u000a# client.upload(uri, file, [etag], [nofollow], cb)\u000a\u000a* `uri` {String} The complete registry URI to upload to\u000a* `file` {String | Stream} Either the filename or a readable stream\u000a* `etag` {String} Cache ETag\u000a* `nofollow` {Boolean} Do not follow 301/302 responses\u000a* `cb` {Function}\u000a\u000aUpload an attachment. Mostly used by `client.publish()`.\u000a","maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"time":{"modified":"2014-07-31T21:59:52.896Z","created":"2012-06-07T04:43:36.581Z","0.0.1":"2012-06-07T04:43:38.123Z","0.0.2":"2012-06-07T05:35:05.937Z","0.0.3":"2012-06-09T00:55:25.861Z","0.0.4":"2012-06-11T03:53:26.548Z","0.0.5":"2012-06-11T23:48:11.235Z","0.0.6":"2012-06-17T06:23:27.320Z","0.0.7":"2012-06-18T19:19:38.315Z","0.0.8":"2012-06-28T20:40:20.563Z","0.0.9":"2012-07-10T03:28:04.651Z","0.0.10":"2012-07-11T17:03:45.151Z","0.0.11":"2012-07-17T14:06:37.489Z","0.1.0":"2012-07-23T18:17:38.007Z","0.1.1":"2012-07-23T21:21:28.196Z","0.1.2":"2012-07-24T06:14:12.831Z","0.1.3":"2012-08-07T02:02:20.564Z","0.1.4":"2012-08-15T03:04:52.822Z","0.1.5":"2012-08-17T21:59:33.310Z","0.2.0":"2012-08-17T22:00:18.081Z","0.2.1":"2012-08-17T22:07:28.827Z","0.2.2":"2012-08-17T22:37:24.352Z","0.2.3":"2012-08-19T19:16:44.808Z","0.2.4":"2012-08-19T19:18:51.792Z","0.2.5":"2012-08-20T16:54:50.794Z","0.2.6":"2012-08-22T00:25:04.766Z","0.2.7":"2012-08-27T19:07:34.829Z","0.2.8":"2012-10-02T19:53:50.661Z","0.2.9":"2012-10-03T22:09:50.766Z","0.2.10":"2012-10-25T14:55:54.216Z","0.2.11":"2012-12-21T16:26:38.094Z","0.2.12":"2013-01-18T22:22:41.668Z","0.2.13":"2013-02-06T00:16:35.939Z","0.2.14":"2013-02-10T02:44:02.764Z","0.2.15":"2013-02-11T19:18:55.678Z","0.2.16":"2013-02-15T17:09:03.249Z","0.2.17":"2013-02-16T03:47:13.898Z","0.2.18":"2013-03-06T22:09:23.536Z","0.2.19":"2013-03-20T06:27:39.128Z","0.2.20":"2013-03-28T00:43:07.558Z","0.2.21":"2013-04-29T15:46:54.094Z","0.2.22":"2013-04-29T15:51:02.178Z","0.2.23":"2013-05-11T00:28:14.198Z","0.2.24":"2013-05-24T21:27:50.693Z","0.2.25":"2013-06-20T15:36:46.277Z","0.2.26":"2013-07-06T17:12:54.670Z","0.2.27":"2013-07-11T07:14:45.740Z","0.2.28":"2013-08-02T20:27:41.732Z","0.2.29":"2013-10-28T18:23:24.477Z","0.2.30":"2013-11-18T23:12:00.540Z","0.2.31":"2013-12-16T08:36:43.044Z","0.3.0":"2013-12-17T07:03:10.699Z","0.3.1":"2013-12-17T16:53:27.867Z","0.3.2":"2013-12-17T22:25:14.882Z","0.3.3":"2013-12-21T16:07:06.773Z","0.3.4":"2014-01-29T15:24:05.163Z","0.3.5":"2014-01-31T01:53:19.656Z","0.3.6":"2014-02-07T00:17:21.362Z","0.4.0":"2014-02-13T01:17:18.973Z","0.4.1":"2014-02-13T23:47:37.892Z","0.4.2":"2014-02-14T00:29:13.086Z","0.4.3":"2014-02-16T03:40:54.640Z","0.4.4":"2014-02-16T03:41:48.856Z","0.4.5":"2014-03-12T05:09:17.474Z","0.4.6":"2014-03-29T19:44:15.041Z","0.4.7":"2014-04-02T19:41:07.149Z","0.4.8":"2014-05-01T22:24:54.980Z","0.4.9":"2014-05-12T21:52:55.127Z","0.4.10":"2014-05-13T16:44:29.801Z","0.4.11":"2014-05-13T20:33:04.738Z","0.4.12":"2014-05-14T06:14:22.842Z","1.0.0":"2014-05-14T23:04:37.188Z","1.0.1":"2014-06-03T00:55:54.448Z","2.0.0":"2014-06-06T04:23:46.579Z","2.0.1":"2014-06-06T06:25:14.419Z","2.0.2":"2014-06-14T00:33:10.205Z","3.0.0":"2014-07-02T00:30:29.154Z","3.0.1":"2014-07-14T23:29:05.057Z","2.0.3":"2014-07-15T00:09:36.043Z","3.0.2":"2014-07-17T06:30:02.659Z","3.0.3":"2014-07-23T21:20:42.406Z","3.0.4":"2014-07-25T00:27:26.007Z","3.0.5":"2014-07-25T00:28:48.007Z","3.0.6":"2014-07-31T21:57:49.043Z","2.0.4":"2014-07-31T21:59:52.896Z"},"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"repository":{"url":"git://github.com/isaacs/npm-registry-client"},"users":{"fgribreau":true,"fengmk2":true},"readmeFilename":"README.md","homepage":"https://github.com/isaacs/npm-registry-client","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"license":"ISC","_attachments":{}} diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json new file mode 100644 index 00000000000000..01da3002763731 --- /dev/null +++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json @@ -0,0 +1 @@ +{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}} \ No newline at end of file diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz new file mode 100644 index 0000000000000000000000000000000000000000..19da9baa7fb191637b058d52d7f1c94a67e2196e GIT binary patch literal 58692 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Ã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 RfB#SZ{s)0Zq*MTO1pt4+z1;u+ literal 0 HcmV?d00001 diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json new file mode 100644 index 00000000000000..d899f11922a405 --- /dev/null +++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json @@ -0,0 +1 @@ +{"_id":"underscore","_rev":"72-47f2986bfd8e8b55068b204588bbf484","name":"underscore","description":"JavaScript's functional programming helper library.","dist-tags":{"latest":"1.3.3","stable":"1.3.3"},"versions":{"1.0.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.3","_id":"underscore@1.0.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.0.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.4","_id":"underscore@1.0.4","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.4.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.0":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.0","_id":"underscore@1.1.0","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.0.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.1":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.1","_id":"underscore@1.1.1","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.1.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.2":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.2","_id":"underscore@1.1.2","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.2.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.3","_id":"underscore@1.1.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.8-1","_nodeVersion":"v0.2.5","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore.js","version":"1.1.4","_id":"underscore@1.1.4","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.9","_nodeVersion":"v0.5.0-pre","dist":{"shasum":"9e82274902865625b3a6d4c315a38ffd80047dae","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.4.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.1.5":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.5","_id":"underscore@1.1.5","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.16","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"23601d62c75619998b2f0db24938102793336a56","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.5.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.6":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.6","_id":"underscore@1.1.6","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"6868da1bdd72d75285be0b4e50f228e70d001a2c","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.6.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.7":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.7","devDependencies":{},"_id":"underscore@1.1.7","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.3","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"40bab84bad19d230096e8d6ef628bff055d83db0","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz"},"scripts":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.0","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.0","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"b32ce32c8c118caa8031c10b54c7f65ab3b557fd","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.0.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.1","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.1","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"fc5c6b0765673d92a2d4ac8b4dc0aa88702e2bd4","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.2","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"74dd40e9face84e724eb2edae945b8aedc233ba3","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.2.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.3","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"11b874da70f4683d7d48bba2b44be1e600d2f6cf","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.3.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.4":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.4","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.4","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"e8da6241aa06f64df2473bb2590b8c17c84c3c7e","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.0","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.0","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"253b2d79b7bb67943ced0fc744eb18267963ede8","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.0.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.1","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.1","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"6cb8aad0e77eb5dbbfb54b22bcd8697309cf9641","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.1.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.2","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"1b4e455089ab1d1d38ab6794ffe6cf08f764394a","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.2.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}}},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"time":{"1.0.3":"2011-12-07T15:12:18.045Z","1.0.4":"2011-12-07T15:12:18.045Z","1.1.0":"2011-12-07T15:12:18.045Z","1.1.1":"2011-12-07T15:12:18.045Z","1.1.2":"2011-12-07T15:12:18.045Z","1.1.3":"2011-12-07T15:12:18.045Z","1.1.4":"2011-12-07T15:12:18.045Z","1.1.5":"2011-12-07T15:12:18.045Z","1.1.6":"2011-12-07T15:12:18.045Z","1.1.7":"2011-12-07T15:12:18.045Z","1.2.0":"2011-12-07T15:12:18.045Z","1.2.1":"2011-12-07T15:12:18.045Z","1.2.2":"2011-11-14T20:28:47.115Z","1.2.3":"2011-12-07T15:12:18.045Z","1.2.4":"2012-01-09T17:23:14.818Z","1.3.0":"2012-01-11T16:41:38.459Z","1.3.1":"2012-01-23T22:57:36.474Z","1.3.2":"2012-04-09T18:38:14.345Z","1.3.3":"2012-04-10T14:43:48.089Z"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"users":{"vesln":true,"mvolkmann":true,"lancehunt":true,"mikl":true,"linus":true,"vasc":true,"bat":true,"dmalam":true,"mbrevoort":true,"danielr":true,"rsimoes":true,"thlorenz":true}} \ No newline at end of file diff --git a/deps/npm/node_modules/npm-registry-client/test/initialize.js b/deps/npm/node_modules/npm-registry-client/test/initialize.js index aefbe626fce210..3856b67b45e0f8 100644 --- a/deps/npm/node_modules/npm-registry-client/test/initialize.js +++ b/deps/npm/node_modules/npm-registry-client/test/initialize.js @@ -1,4 +1,5 @@ var test = require('tap').test +var url = require('url') // var server = require('./lib/server.js') var Client = require('../') @@ -29,6 +30,39 @@ test('defaulted initialization', function (t) { var HttpAgent = require('http').Agent t.ok(options.agent instanceof HttpAgent, 'got an HTTP agent for an HTTP URL') + t.equal(options.agent.maxSockets, 50, 'maxSockets set to a reasonable default') + + t.end() +}) + +test('intializing with maxSockets set works for http', function (t) { + var client = new Client({ maxSockets: Infinity }) + var options = client.initialize( + url.parse('http://localhost:1337/'), + 'GET', + 'application/json', + {} + ) + + var HttpAgent = require('http').Agent + t.ok(options.agent instanceof HttpAgent, 'got an HTTP agent for an HTTP URL') + t.equal(options.agent.maxSockets, Infinity, 'request uses configured value for maxSockets') + + t.end() +}) + +test('intializing with maxSockets set works for https', function (t) { + var client = new Client({ maxSockets: Infinity }) + var options = client.initialize( + url.parse('https://localhost:1337/'), + 'GET', + 'application/json', + {} + ) + + var HttpsAgent = require('https').Agent + t.ok(options.agent instanceof HttpsAgent, 'got an HTTPS agent for an HTTPS URL') + t.equal(options.agent.maxSockets, Infinity, 'request uses configured value for maxSockets') t.end() }) diff --git a/deps/npm/node_modules/request/.eslintrc b/deps/npm/node_modules/request/.eslintrc new file mode 100644 index 00000000000000..6ebc53601d7ba5 --- /dev/null +++ b/deps/npm/node_modules/request/.eslintrc @@ -0,0 +1,45 @@ +{ + "env": { + "node": true + }, + "rules": { + // 2-space indentation + "indent": [2, 2, {"SwitchCase": 1}], + // Disallow semi-colons, unless needed to disambiguate statement + "semi": [2, "never"], + // Require strings to use single quotes + "quotes": [2, "single"], + // Require curly braces for all control statements + "curly": 2, + // Disallow using variables and functions before they've been defined + "no-use-before-define": 2, + // Allow any case for variable naming + "camelcase": 0, + // Disallow unused variables, except as function arguments + "no-unused-vars": [2, {"args":"none"}], + // Allow leading underscores for method names + // REASON: we use underscores to denote private methods + "no-underscore-dangle": 0, + // Allow multi spaces around operators since they are + // used for alignment. This is not consistent in the + // code. + "no-multi-spaces": 0, + // Style rule is: most objects use { beforeColon: false, afterColon: true }, unless aligning which uses: + // + // { + // beforeColon : true, + // afterColon : true + // } + // + // eslint can't handle this, so the check is disabled. + "key-spacing": 0, + // Allow shadowing vars in outer scope (needs discussion) + "no-shadow": 0, + // Use if () { } + // ^ space + "space-after-keywords": [2, "always"], + // Use if () { } + // ^ space + "space-before-blocks": [2, "always"] + } +} diff --git a/deps/npm/node_modules/strip-ansi/package.json b/deps/npm/node_modules/strip-ansi/package.json index f9809beee8dc3f..32e04f05858668 100644 --- a/deps/npm/node_modules/strip-ansi/package.json +++ b/deps/npm/node_modules/strip-ansi/package.json @@ -1,11 +1,11 @@ { "name": "strip-ansi", - "version": "3.0.0", + "version": "3.0.1", "description": "Strip ANSI escape codes", "license": "MIT", "repository": { "type": "git", - "url": "git+https://github.com/sindresorhus/strip-ansi.git" + "url": "git+https://github.com/chalk/strip-ansi.git" }, "author": { "name": "Sindre Sorhus", @@ -26,7 +26,7 @@ "node": ">=0.10.0" }, "scripts": { - "test": "node test.js" + "test": "xo && ava" }, "files": [ "index.js" @@ -59,27 +59,32 @@ "ansi-regex": "^2.0.0" }, "devDependencies": { - "ava": "0.0.4" + "ava": "*", + "xo": "*" }, - "gitHead": "3f05b9810e1438f946e2eb84ee854cc00b972e9e", + "gitHead": "8270705c704956da865623e564eba4875c3ea17f", "bugs": { - "url": "https://github.com/sindresorhus/strip-ansi/issues" + "url": "https://github.com/chalk/strip-ansi/issues" }, - "homepage": "https://github.com/sindresorhus/strip-ansi", - "_id": "strip-ansi@3.0.0", - "_shasum": "7510b665567ca914ccb5d7e072763ac968be3724", - "_from": "strip-ansi@3.0.0", - "_npmVersion": "2.11.2", - "_nodeVersion": "0.12.5", + "homepage": "https://github.com/chalk/strip-ansi", + "_id": "strip-ansi@3.0.1", + "_shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", + "_from": "strip-ansi@*", + "_npmVersion": "2.11.3", + "_nodeVersion": "0.12.7", "_npmUser": { - "name": "sindresorhus", - "email": "sindresorhus@gmail.com" + "name": "jbnicolai", + "email": "jappelman@xebia.com" }, "dist": { - "shasum": "7510b665567ca914ccb5d7e072763ac968be3724", - "tarball": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz" + "shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf", + "tarball": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + }, + "_npmOperationalInternal": { + "host": "packages-9-west.internal.npmjs.com", + "tmp": "tmp/strip-ansi-3.0.1.tgz_1456057278183_0.28958667791448534" }, "directories": {}, - "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz", + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "readme": "ERROR: No README data found!" } diff --git a/deps/npm/node_modules/strip-ansi/readme.md b/deps/npm/node_modules/strip-ansi/readme.md index 76091512df5e46..cb7d9ff7ee403d 100644 --- a/deps/npm/node_modules/strip-ansi/readme.md +++ b/deps/npm/node_modules/strip-ansi/readme.md @@ -1,4 +1,4 @@ -# strip-ansi [![Build Status](https://travis-ci.org/sindresorhus/strip-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-ansi) +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) > Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) @@ -22,10 +22,10 @@ stripAnsi('\u001b[4mcake\u001b[0m'); ## Related -- [strip-ansi-cli](https://github.com/sindresorhus/strip-ansi-cli) - CLI for this module -- [has-ansi](https://github.com/sindresorhus/has-ansi) - Check if a string has ANSI escape codes -- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right ## License diff --git a/deps/npm/package.json b/deps/npm/package.json index 660b192626db85..be2988afefc2eb 100644 --- a/deps/npm/package.json +++ b/deps/npm/package.json @@ -1,5 +1,5 @@ { - "version": "2.14.20", + "version": "2.15.0", "name": "npm", "description": "a package manager for JavaScript", "keywords": [ @@ -51,7 +51,7 @@ "fstream-npm": "~1.0.7", "github-url-from-git": "~1.4.0", "github-url-from-username-repo": "~1.0.2", - "glob": "~5.0.15", + "glob": "~7.0.3", "graceful-fs": "~4.1.3", "hosted-git-info": "~2.1.4", "inflight": "~1.0.4", @@ -62,14 +62,14 @@ "lru-cache": "~3.2.0", "minimatch": "~3.0.0", "mkdirp": "~0.5.1", - "node-gyp": "~3.3.0", + "node-gyp": "~3.3.1", "nopt": "~3.0.6", "normalize-git-url": "~3.0.1", "normalize-package-data": "~2.3.5", "npm-cache-filename": "~1.0.2", "npm-install-checks": "~1.0.7", "npm-package-arg": "~4.1.0", - "npm-registry-client": "~7.0.9", + "npm-registry-client": "~7.1.0", "npm-user-validate": "~0.1.2", "npmlog": "~2.0.2", "once": "~1.3.3", @@ -89,6 +89,7 @@ "slide": "~1.1.6", "sorted-object": "~1.0.0", "spdx-license-ids": "~1.2.0", + "strip-ansi": "~3.0.1", "tar": "~2.2.1", "text-table": "~0.2.0", "uid-number": "0.0.6", @@ -180,6 +181,7 @@ "npm-registry-mock": "~1.0.0", "require-inject": "~1.3.0", "sprintf-js": "~1.0.2", + "tacks": "~1.0.9", "tap": "~2.3.1" }, "scripts": { @@ -188,8 +190,6 @@ "preversion": "bash scripts/update-authors.sh && git add AUTHORS && git commit -m \"update AUTHORS\" || true", "tap": "tap --timeout 240", "test": "npm run test-tap", - "test-all": "npm run test-legacy && npm run test-tap", - "test-legacy": "node ./test/run.js", "test-tap": "npm run tap -- \"test/tap/*.js\"" }, "license": "Artistic-2.0" diff --git a/deps/npm/test/fixtures/config/userconfig-with-gc b/deps/npm/test/fixtures/config/userconfig-with-gc index 62ad80be113e5e..7268fcb3c611f9 100644 --- a/deps/npm/test/fixtures/config/userconfig-with-gc +++ b/deps/npm/test/fixtures/config/userconfig-with-gc @@ -1,4 +1,4 @@ -globalconfig=/Users/zkat/Documents/code/npm/test/fixtures/config/globalconfig +globalconfig=/Users/ogd/Documents/projects/npm/npm/test/fixtures/config/globalconfig email=i@izs.me env-thing=asdf init.author.name=Isaac Z. Schlueter diff --git a/deps/npm/test/npm_cache/npm-test-files/1.2.5/package.tgz b/deps/npm/test/npm_cache/npm-test-files/1.2.5/package.tgz deleted file mode 100644 index b24f7944c5958427545ff80ab9f8d0827ed5b69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmV(aBMF7U5J7gj4Qozk?M=)bpRMMM$U zGJ^A5oWnlY2QN>ZEwS z?LOBJc}A<7Y-gVG={enB{9FGM4oqdGWGPd1Ic}tG#;d%LnvK|A?sQ%$v%~`o5;N1S zq*JEbIS)-SbEYDj9e@1|q9+&c!)v5rt`su`<7n$lm7%k5MSj4#N3h901yBGR*ZES diff --git a/deps/npm/test/npm_cache/npm-test-files/1.2.5/package/package.json b/deps/npm/test/npm_cache/npm-test-files/1.2.5/package/package.json deleted file mode 100644 index 717149c176cc69..00000000000000 --- a/deps/npm/test/npm_cache/npm-test-files/1.2.5/package/package.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"npm-test-files","version":"1.2.5","files":["sub1/sub","sub2"],"readme":"ERROR: No README data found!","_id":"npm-test-files@1.2.5","scripts":{},"_shasum":"3f516561e52d6958b818db2a4fbc1b40707e68e3","_from":"npm-test-files","_resolved":"file:npm-test-files"} \ No newline at end of file diff --git a/deps/npm/test/packages/npm-test-array-bin/README b/deps/npm/test/packages/npm-test-array-bin/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-array-bin/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-array-bin/bin/array-bin b/deps/npm/test/packages/npm-test-array-bin/bin/array-bin deleted file mode 100644 index 9558516aad0c79..00000000000000 --- a/deps/npm/test/packages/npm-test-array-bin/bin/array-bin +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.log('ok') diff --git a/deps/npm/test/packages/npm-test-array-bin/package.json b/deps/npm/test/packages/npm-test-array-bin/package.json deleted file mode 100644 index 45e22efc41c9e0..00000000000000 --- a/deps/npm/test/packages/npm-test-array-bin/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-array-bin" -, "version":"1.2.5" -, "bin": [ "bin/array-bin" ] -, "scripts": { "test": "node test.js" } } diff --git a/deps/npm/test/packages/npm-test-blerg/README b/deps/npm/test/packages/npm-test-blerg/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-blerg/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-blerg/package.json b/deps/npm/test/packages/npm-test-blerg/package.json deleted file mode 100644 index 04e3338918716f..00000000000000 --- a/deps/npm/test/packages/npm-test-blerg/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name":"npm-test-blerg" -, "version" : "0.0.2" -, "scripts" : { "test" : "node test.js" } -, "publishConfig": {"tag": "foo"} -} diff --git a/deps/npm/test/packages/npm-test-blerg3/README b/deps/npm/test/packages/npm-test-blerg3/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-blerg3/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-blerg3/package.json b/deps/npm/test/packages/npm-test-blerg3/package.json deleted file mode 100644 index 87b5bbb96e54ec..00000000000000 --- a/deps/npm/test/packages/npm-test-blerg3/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name":"npm-test-blerg3" -, "homepage": "https://github.com/npm/npm/issues/2658" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -} diff --git a/deps/npm/test/packages/npm-test-bundled-git/README b/deps/npm/test/packages/npm-test-bundled-git/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-bundled-git/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-bundled-git/package.json b/deps/npm/test/packages/npm-test-bundled-git/package.json deleted file mode 100644 index 69e0eb7a8b2d0f..00000000000000 --- a/deps/npm/test/packages/npm-test-bundled-git/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{"name":"npm-test-bundled-git" -,"scripts":{"test":"node test.js"} -,"version":"1.2.5" -,"dependencies":{"glob":"git://github.com/isaacs/node-glob.git#npm-test"} -,"bundledDependencies":["glob"]} diff --git a/deps/npm/test/packages/npm-test-dir-bin/README b/deps/npm/test/packages/npm-test-dir-bin/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-dir-bin/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-dir-bin/bin/dir-bin b/deps/npm/test/packages/npm-test-dir-bin/bin/dir-bin deleted file mode 100644 index 9558516aad0c79..00000000000000 --- a/deps/npm/test/packages/npm-test-dir-bin/bin/dir-bin +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.log('ok') diff --git a/deps/npm/test/packages/npm-test-dir-bin/package.json b/deps/npm/test/packages/npm-test-dir-bin/package.json deleted file mode 100644 index 1ea26323fdbd3f..00000000000000 --- a/deps/npm/test/packages/npm-test-dir-bin/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-dir-bin" -, "version":"1.2.5" -, "directories": { "bin": "./bin" } -, "scripts": { "test": "node test.js" } } diff --git a/deps/npm/test/packages/npm-test-env-reader/README b/deps/npm/test/packages/npm-test-env-reader/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-env-reader/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-env-reader/package.json b/deps/npm/test/packages/npm-test-env-reader/package.json deleted file mode 100644 index 99d7fc93070284..00000000000000 --- a/deps/npm/test/packages/npm-test-env-reader/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "name":"npm-test-env-reader" -, "version" : "1.2.3" -, "scripts" : - { "install" : "node test.js" - , "preinstall" : "node test.js" - , "preuninstall" : "node test.js" - , "postuninstall" : "node test.js" - , "test" : "node test.js" - , "stop" : "node test.js" - , "start" : "node test.js" - , "restart" : "node test.js" - , "foo" : "node test.js" - } -} diff --git a/deps/npm/test/packages/npm-test-env-reader/test.js b/deps/npm/test/packages/npm-test-env-reader/test.js deleted file mode 100755 index d6cb7893a70f7a..00000000000000 --- a/deps/npm/test/packages/npm-test-env-reader/test.js +++ /dev/null @@ -1,9 +0,0 @@ -var envs = [] -for (var e in process.env) { - if (e.match(/npm|^path$/i)) envs.push(e + '=' + process.env[e]) -} -envs.sort(function (a, b) { - return a === b ? 0 : a > b ? -1 : 1 -}).forEach(function (e) { - console.log(e) -}) diff --git a/deps/npm/test/packages/npm-test-files/.npmignore b/deps/npm/test/packages/npm-test-files/.npmignore deleted file mode 100644 index c7d927d0a2fd51..00000000000000 --- a/deps/npm/test/packages/npm-test-files/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -/sub/ignore1 -./sub/include2 -ignore3 -./include4 -ignoredir1 -ignoredir2/ -*.tgz diff --git a/deps/npm/test/packages/npm-test-files/include4 b/deps/npm/test/packages/npm-test-files/include4 deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/deps/npm/test/packages/npm-test-files/package.json b/deps/npm/test/packages/npm-test-files/package.json deleted file mode 100644 index 2afa12dc560fc0..00000000000000 --- a/deps/npm/test/packages/npm-test-files/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "name":"npm-test-files" -, "version":"1.2.5" -, "files": - [ "include4" - , "sub/include" - , "sub/include2" - , "sub/include4" - , "test.sh" - , ".npmignore" ] -, "scripts":{"test":"bash test.sh"}} diff --git a/deps/npm/test/packages/npm-test-files/sub/include b/deps/npm/test/packages/npm-test-files/sub/include deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/deps/npm/test/packages/npm-test-files/sub/include2 b/deps/npm/test/packages/npm-test-files/sub/include2 deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/deps/npm/test/packages/npm-test-files/sub/include4 b/deps/npm/test/packages/npm-test-files/sub/include4 deleted file mode 100644 index d16969cd189673..00000000000000 --- a/deps/npm/test/packages/npm-test-files/sub/include4 +++ /dev/null @@ -1 +0,0 @@ -This file should be in the package. diff --git a/deps/npm/test/packages/npm-test-files/test.sh b/deps/npm/test/packages/npm-test-files/test.sh deleted file mode 100644 index cdf47f211a86b8..00000000000000 --- a/deps/npm/test/packages/npm-test-files/test.sh +++ /dev/null @@ -1,27 +0,0 @@ -x=`find . | grep ignore | grep -v npmignore` -if [ "$x" != "" ]; then - echo "ignored files included: $x" - exit 1 -fi - -x=`find . | grep -v ignore | sort` -y=". -./include4 -./package.json -./sub -./sub/include -./sub/include2 -./sub/include4 -./test.sh" -if [ "$x" != "$y" ]; then - echo "missing included files" - echo "got:" - echo "===" - echo "$x" - echo "===" - echo "wanted:" - echo "===" - echo "$y" - echo "===" - exit 1 -fi diff --git a/deps/npm/test/packages/npm-test-ignore-nested-nm/README b/deps/npm/test/packages/npm-test-ignore-nested-nm/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore-nested-nm/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-ignore-nested-nm/lib/node_modules/foo b/deps/npm/test/packages/npm-test-ignore-nested-nm/lib/node_modules/foo deleted file mode 100644 index 2c9d06aff6f62c..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore-nested-nm/lib/node_modules/foo +++ /dev/null @@ -1 +0,0 @@ -I WILL NOT BE IGNORED! diff --git a/deps/npm/test/packages/npm-test-ignore-nested-nm/package.json b/deps/npm/test/packages/npm-test-ignore-nested-nm/package.json deleted file mode 100644 index 177dbfb01d61b7..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore-nested-nm/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name":"npm-test-ignore-nested-nm" -,"version":"1.2.5" -,"scripts":{"test":"node test.js"}} diff --git a/deps/npm/test/packages/npm-test-ignore/.npmignore b/deps/npm/test/packages/npm-test-ignore/.npmignore deleted file mode 100644 index c7d927d0a2fd51..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -/sub/ignore1 -./sub/include2 -ignore3 -./include4 -ignoredir1 -ignoredir2/ -*.tgz diff --git a/deps/npm/test/packages/npm-test-ignore/README b/deps/npm/test/packages/npm-test-ignore/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-ignore/include4 b/deps/npm/test/packages/npm-test-ignore/include4 deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/deps/npm/test/packages/npm-test-ignore/package.json b/deps/npm/test/packages/npm-test-ignore/package.json deleted file mode 100644 index 6d492de78063ae..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ "name":"npm-test-ignore" -, "version":"1.2.5" -, "scripts":{"test":"bash test.sh"}} diff --git a/deps/npm/test/packages/npm-test-ignore/sub/include b/deps/npm/test/packages/npm-test-ignore/sub/include deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/deps/npm/test/packages/npm-test-ignore/sub/include2 b/deps/npm/test/packages/npm-test-ignore/sub/include2 deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/deps/npm/test/packages/npm-test-ignore/sub/include4 b/deps/npm/test/packages/npm-test-ignore/sub/include4 deleted file mode 100644 index d16969cd189673..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore/sub/include4 +++ /dev/null @@ -1 +0,0 @@ -This file should be in the package. diff --git a/deps/npm/test/packages/npm-test-ignore/test.sh b/deps/npm/test/packages/npm-test-ignore/test.sh deleted file mode 100644 index 05fbaf169973bf..00000000000000 --- a/deps/npm/test/packages/npm-test-ignore/test.sh +++ /dev/null @@ -1,29 +0,0 @@ -x=`find . | grep ignore | grep -v npmignore` -if [ "$x" != "" ]; then - echo "ignored files included: $x" - exit 1 -fi - -x=`find . | grep -v ignore | sort` -y=". -./include4 -./package.json -./README -./sub -./sub/include -./sub/include2 -./sub/include4 -./test.sh" -y="`echo "$y" | sort`" -if [ "$x" != "$y" ]; then - echo "missing included files" - echo "got:" - echo "===" - echo "$x" - echo "===" - echo "wanted:" - echo "===" - echo "$y" - echo "===" - exit 1 -fi diff --git a/deps/npm/test/packages/npm-test-missing-bindir/README b/deps/npm/test/packages/npm-test-missing-bindir/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-missing-bindir/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-missing-bindir/package.json b/deps/npm/test/packages/npm-test-missing-bindir/package.json deleted file mode 100644 index 49e26742df58f0..00000000000000 --- a/deps/npm/test/packages/npm-test-missing-bindir/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ "name":"npm-test-missing-bindir" -, "version" : "0.0.0" -, "scripts" : { "test" : "node test.js" } -, "directories": { "bin" : "./not-found" } } diff --git a/deps/npm/test/packages/npm-test-optional-deps/README b/deps/npm/test/packages/npm-test-optional-deps/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-optional-deps/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-optional-deps/package.json b/deps/npm/test/packages/npm-test-optional-deps/package.json deleted file mode 100644 index 67545ca9da1391..00000000000000 --- a/deps/npm/test/packages/npm-test-optional-deps/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ "name": "npm-test-optional-deps" -, "version": "1.2.5" -, "scripts": { "test": "node test.js" } -, "optionalDependencies": - { "npm-test-foobarzaaakakaka": "http://example.com/" - , "dnode": "10.999.14234" - , "sax": "0.3.5" - , "glob": "some invalid version 99 #! $$ x y z" - , "npm-test-failer":"*" - } -} diff --git a/deps/npm/test/packages/npm-test-platform-all/README b/deps/npm/test/packages/npm-test-platform-all/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-platform-all/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-platform-all/package.json b/deps/npm/test/packages/npm-test-platform-all/package.json deleted file mode 100644 index 07624363e6e996..00000000000000 --- a/deps/npm/test/packages/npm-test-platform-all/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{"name":"npm-test-platform-all" -,"version":"9.9.9-9" -,"homepage":"http://www.zombo.com/" -,"os":["darwin","linux","win32","solaris","haiku","sunos","freebsd","openbsd","netbsd"] -,"cpu":["arm","mips","ia32","x64","sparc"]} diff --git a/deps/npm/test/packages/npm-test-platform/README b/deps/npm/test/packages/npm-test-platform/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-platform/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-platform/package.json b/deps/npm/test/packages/npm-test-platform/package.json deleted file mode 100644 index d6c3e09e1d9091..00000000000000 --- a/deps/npm/test/packages/npm-test-platform/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{"name":"npm-test-platform" -,"version":"9.9.9-9" -,"homepage":"http://www.youtube.com/watch?v=dQw4w9WgXcQ" -,"os":["!this_is_not_a_real_os", "!neither_is_this"] -,"cpu":["!this_is_not_a_real_cpu","!this_isnt_either"]} diff --git a/deps/npm/test/packages/npm-test-private/README b/deps/npm/test/packages/npm-test-private/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-private/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-private/package.json b/deps/npm/test/packages/npm-test-private/package.json deleted file mode 100644 index 3d95a37af14b45..00000000000000 --- a/deps/npm/test/packages/npm-test-private/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{"name":"npm-test-private" -,"version":"9.9.9-9" -,"homepage":"http://www.youtube.com/watch?v=1MLry6Cn_D4" -,"private":"true"} diff --git a/deps/npm/test/packages/npm-test-shrinkwrap/README b/deps/npm/test/packages/npm-test-shrinkwrap/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-shrinkwrap/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-shrinkwrap/package.json b/deps/npm/test/packages/npm-test-shrinkwrap/package.json deleted file mode 100644 index a5d446e2d11681..00000000000000 --- a/deps/npm/test/packages/npm-test-shrinkwrap/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "name": "npm-test-shrinkwrap", - "version": "0.0.0", - "dependencies": { - "npm-test-single-file": "https://gist.github.com/isaacs/1837112/raw/9ef57a59fc22aeb1d1ca346b68826dcb638b8416/index.js", - "glob": "git://github.com/isaacs/node-glob.git#npm-test", - "minimatch": "~0.1.0" - }, - "scripts": { - "test": "node test.js" - } -} diff --git a/deps/npm/test/packages/npm-test-test-package/README b/deps/npm/test/packages/npm-test-test-package/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-test-package/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-test-package/package.json b/deps/npm/test/packages/npm-test-test-package/package.json deleted file mode 100644 index c5c5aeabc1e56f..00000000000000 --- a/deps/npm/test/packages/npm-test-test-package/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "name":"npm-test-test-package" -, "author" : "Testy McMock" -, "version" : "1.2.3-99-b" -, "description" : "This is a test package used for debugging. It has some random data and that's all." -} diff --git a/deps/npm/test/packages/npm-test-url-dep/README b/deps/npm/test/packages/npm-test-url-dep/README deleted file mode 100644 index 8848f0786872f2..00000000000000 --- a/deps/npm/test/packages/npm-test-url-dep/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-url-dep/package.json b/deps/npm/test/packages/npm-test-url-dep/package.json deleted file mode 100644 index f1949d8388154c..00000000000000 --- a/deps/npm/test/packages/npm-test-url-dep/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "name":"npm-test-url-dep" -, "version" : "1.2.3" -, "dependencies" : - { "jsonify" : "https://github.com/substack/jsonify/tarball/master" - , "sax": "isaacs/sax-js" - , "canonical-host": "git://github.com/isaacs/canonical-host" - } } diff --git a/deps/npm/test/tap/bearer-token-check.js b/deps/npm/test/tap/bearer-token-check.js new file mode 100644 index 00000000000000..6db2b832067541 --- /dev/null +++ b/deps/npm/test/tap/bearer-token-check.js @@ -0,0 +1,119 @@ +var resolve = require('path').resolve +var writeFileSync = require('graceful-fs').writeFileSync + +var mkdirp = require('mkdirp') +var mr = require('npm-registry-mock') +var osenv = require('osenv') +var rimraf = require('rimraf') +var test = require('tap').test + +var common = require('../common-tap.js') +var toNerfDart = require('../../lib/config/nerf-dart.js') + +var pkg = resolve(__dirname, 'install-bearer-check') +var outfile = resolve(pkg, '_npmrc') +var modules = resolve(pkg, 'node_modules') +var tarballPath = '/scoped-underscore/-/scoped-underscore-1.3.1.tgz' +// needs to be a different hostname to verify tokens (not) being sent correctly +var tarballURL = 'http://lvh.me:' + common.port + tarballPath +var tarball = resolve(__dirname, '../fixtures/scoped-underscore-1.3.1.tgz') + +var server + +var EXEC_OPTS = { cwd: pkg } + +function mocks (server) { + var auth = 'Bearer 0xabad1dea' + server.get(tarballPath, { authorization: auth }).reply(403, { + error: 'token leakage', + reason: 'This token should not be sent.' + }) + server.get(tarballPath).replyWithFile(200, tarball) +} + +test('setup', function (t) { + mr({ port: common.port, plugin: mocks }, function (er, s) { + server = s + t.ok(s, 'set up mock registry') + setup() + t.end() + }) +}) + +test('authed npm install with tarball not on registry', function (t) { + common.npm( + [ + 'install', + '--loglevel', 'silent', + '--json', + '--fetch-retries', 0, + '--userconfig', outfile + ], + EXEC_OPTS, + function (err, code, stdout, stderr) { + t.ifError(err, 'test runner executed without error') + t.equal(code, 0, 'npm install exited OK') + t.notOk(stderr, 'no output on stderr') + try { + var results = JSON.parse(stdout) + } catch (ex) { + console.error('#', ex) + t.ifError(ex, 'stdout was valid JSON') + } + + if (results) { + var installedversion = { + 'name': '@scoped/underscore', + 'version': '1.3.1', + 'from': 'http://lvh.me:1337/scoped-underscore/-/scoped-underscore-1.3.1.tgz', + 'dependencies': {} + } + t.isDeeply(results[0], installedversion, '@scoped/underscore installed') + } + + t.end() + } + ) +}) + +test('cleanup', function (t) { + server.close() + cleanup() + t.end() +}) + +var contents = '@scoped:registry=' + common.registry + '\n' + + toNerfDart(common.registry) + ':_authToken=0xabad1dea\n' + +var json = { + name: 'test-package-install', + version: '1.0.0' +} + +var shrinkwrap = { + name: 'test-package-install', + version: '1.0.0', + dependencies: { + '@scoped/underscore': { + resolved: tarballURL, + from: '>=1.3.1 <2', + version: '1.3.1' + } + } +} + +function setup () { + cleanup() + mkdirp.sync(modules) + writeFileSync(resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') + writeFileSync(outfile, contents) + writeFileSync( + resolve(pkg, 'npm-shrinkwrap.json'), + JSON.stringify(shrinkwrap, null, 2) + '\n' + ) +} + +function cleanup () { + process.chdir(osenv.tmpdir()) + rimraf.sync(pkg) +} diff --git a/deps/npm/test/tap/config-credentials.js b/deps/npm/test/tap/config-credentials.js index 1cb2a7eb410c59..c23be12f6e0abb 100644 --- a/deps/npm/test/tap/config-credentials.js +++ b/deps/npm/test/tap/config-credentials.js @@ -73,13 +73,13 @@ test("set with token", function (t) { }, "needs only token") var expected = { - scope : "//registry.lvh.me:8661/", - token : "simple-token", - username : undefined, - password : undefined, - email : undefined, - auth : undefined, - alwaysAuth : undefined + scope: '//registry.lvh.me:8661/', + token: 'simple-token', + username: undefined, + password: undefined, + email: undefined, + auth: undefined, + alwaysAuth: false } t.same(conf.getCredentialsByURI(URI), expected, "got bearer token and scope") diff --git a/deps/npm/test/tap/files-and-ignores.js b/deps/npm/test/tap/files-and-ignores.js new file mode 100644 index 00000000000000..02371cfe3eab78 --- /dev/null +++ b/deps/npm/test/tap/files-and-ignores.js @@ -0,0 +1,558 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var fs = require('graceful-fs') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-files') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-files') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +test('basic file inclusion', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + 'include', + 'sub/include' + ] + }), + include: File(''), + sub: Dir({ include: File('') }), + notincluded: File('') + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('include'), 'toplevel file included') + t.ok(fileExists('sub/include'), 'nested file included') + t.notOk(fileExists('notincluded'), 'unspecified file not included') + done() + }) +}) + +test('basic file exclusion', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.npmignore': File( + 'ignore\n' + + 'sub/ignore\n' + ), + include: File(''), + ignore: File(''), + sub: Dir({ ignore: File('') }) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('ignore'), 'toplevel file excluded') + t.notOk(fileExists('sub/ignore'), 'nested file excluded') + t.ok(fileExists('include'), 'unignored file included') + done() + }) +}) + +test('toplevel-only and blanket ignores', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.npmignore': File( + './shallow1\n' + + '/shallow2\n' + + '/sub/onelevel\n' + + 'deep\n' + + '' + ), + shallow1: File(''), + shallow2: File(''), + deep: File(''), + sub: Dir({ + shallow1: File(''), + shallow2: File(''), + onelevel: File(''), + deep: File(''), + sub: Dir({ + deep: File(''), + onelevel: File('') + }) + }) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('shallow2'), '/ file excluded') + t.ok(fileExists('sub/shallow1'), 'nested ./ file included') + t.ok(fileExists('sub/shallow2'), 'nested / file included') + t.ok(fileExists('sub/sub/onelevel'), 'double-nested file included') + t.notOk(fileExists('sub/onelevel'), 'nested / file excluded') + t.notOk(fileExists('deep'), 'deep file excluded') + t.notOk(fileExists('sub/deep'), 'nested deep file excluded') + t.notOk(fileExists('sub/sub/deep'), 'double-nested deep file excluded') + t.ok(fileExists('shallow1'), './ file included') + done() + }) +}) + +test('.npmignore works for nested directories recursively', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.npmignore': File( + '/ignore\n' + + 'deep\n' + ), + include: File(''), + ignore: File(''), + deep: File(''), + sub: Dir({ + ignore: File(''), + include: File(''), + deep: File(''), + sub: Dir({ + '.npmignore': File( + '/ignore\n' + ), + ignore: File(''), + include: File(''), + deep: File('') + }) + }) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('ignore'), 'toplevel file excluded') + t.ok(fileExists('include'), 'unignored file included') + t.ok(fileExists('sub/ignore'), 'same-name file in nested dir included') + t.ok(fileExists('sub/include'), 'unignored nested dir file included') + t.notOk(fileExists('sub/sub/ignore'), 'sub-sub-directory file excluded') + t.ok(fileExists('sub/sub/include'), 'sub-sube-directory file included') + t.notOk(fileExists('deep'), 'deep file excluded') + t.notOk(fileExists('sub/deep'), 'sub-dir deep file excluded') + t.notOk(fileExists('sub/sub/deep'), 'sub-sub-dir deep file excluded') + done() + }) +}) + +test('.gitignore should have identical semantics', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.gitignore': File( + './shallow1\n' + + '/shallow2\n' + + '/sub/onelevel\n' + + 'deep\n' + + '' + ), + shallow1: File(''), + shallow2: File(''), + deep: File(''), + sub: Dir({ + shallow1: File(''), + shallow2: File(''), + onelevel: File(''), + deep: File(''), + sub: Dir({ + deep: File(''), + onelevel: File('') + }) + }) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('shallow2'), '/ file excluded') + t.ok(fileExists('sub/shallow1'), 'nested ./ file included') + t.ok(fileExists('sub/shallow2'), 'nested / file included') + t.ok(fileExists('sub/sub/onelevel'), 'double-nested file included') + t.notOk(fileExists('sub/onelevel'), 'nested / file excluded') + t.notOk(fileExists('deep'), 'deep file excluded') + t.notOk(fileExists('sub/deep'), 'nested deep file excluded') + t.notOk(fileExists('sub/sub/deep'), 'double-nested deep file excluded') + t.ok(fileExists('shallow1'), './ file included') + done() + }) +}) + +test('.npmignore should always be overridden by files array', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + 'include', + 'sub' + ] + }), + '.npmignore': File( + 'include\n' + + 'ignore\n' + + 'sub/included\n' + ), + include: File(''), + ignore: File(''), + sub: Dir({ + include: File('') + }) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('ignore'), 'toplevel file excluded') + t.ok(fileExists('include'), 'unignored file included') + t.ok(fileExists('sub/include'), 'nested file included') + done() + }) +}) + +test('.gitignore supported for ignores', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.gitignore': File( + 'ignore\n' + + 'sub/ignore\n' + ), + include: File(''), + ignore: File(''), + sub: Dir({ ignore: File('') }) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('ignore'), 'toplevel file excluded') + t.notOk(fileExists('sub/ignore'), 'nested file excluded') + t.ok(fileExists('include'), 'unignored file included') + done() + }) +}) + +test('.npmignore completely overrides .gitignore', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.npmignore': File( + 'ignore\n' + + 'sub/ignore\n' + ), + '.gitignore': File( + 'include\n' + + 'sub/include\n' + + 'extra\n' + ), + include: File(''), + sub: Dir({ include: File('') }), + extra: File('') + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('include'), 'gitignored toplevel file included') + t.ok(fileExists('extra'), 'gitignored extra toplevel file included') + t.ok(fileExists('sub/include'), 'gitignored nested file included') + t.notOk(fileExists('ignore'), 'toplevel file excluded') + t.notOk(fileExists('sub/ignore'), 'nested file excluded') + done() + }) +}) + +test('files array overrides .npmignore', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + 'include', + 'sub/include' + ] + }), + '.npmignore': File( + 'include\n' + + 'sub/include\n' + ), + include: File(''), + sub: Dir({ include: File('') }) + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('include'), 'toplevel file included') + t.ok(fileExists('sub/include'), 'nested file included') + done() + }) +}) + +test('includes files regardless of emptiness', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + 'full', + 'empty' + ] + }), + full: File('This file has contents~'), + empty: File('') + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('full'), 'contentful file included') + t.ok(fileExists('empty'), 'empty file included') + done() + }) +}) + +test('.npmignore itself gets included', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + '.npmignore' + ] + }), + '.npmignore': File('') + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('.npmignore'), '.npmignore included') + done() + }) +}) + +test('include default files when missing files spec', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + 'index.js': File(''), + foo: File(''), + node_modules: Dir({foo: Dir({bar: File('')})}) + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('index.js'), 'index.js included') + t.ok(fileExists('foo'), 'foo included') + t.notOk(fileExists('node_modules'), 'node_modules not included') + done() + }) +}) + +test('include main file', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + main: 'foo.js', + files: [] + }), + 'index.js': File(''), + 'foo.js': File('') + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('foo.js'), 'foo.js included because of main') + t.notOk(fileExists('index.js'), 'index.js not included') + done() + }) +}) + +test('certain files ignored unconditionally', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + '.git', + '.svn', + 'CVS', + '.hg', + '.lock-wscript', + '.wafpickle-0', + '.wafpickle-5', + '.wafpickle-50', + 'build/config.gypi', + 'npm-debug.log', + '.npmrc', + '.foo.swp', + '.DS_Store', + '._ohno' + ] + }), + '.git': Dir({foo: File('')}), + '.svn': Dir({foo: File('')}), + 'CVS': Dir({foo: File('')}), + '.hg': Dir({foo: File('')}), + '.lock-wscript': File(''), + '.wafpickle-0': File(''), + '.wafpickle-5': File(''), + '.wafpickle-50': File(''), + 'build': Dir({'config.gypi': File('')}), + 'npm-debug.log': File(''), + '.npmrc': File(''), + '.foo.swp': File(''), + '.DS_Store': Dir({foo: File('')}), + '._ohno': File(''), + '._ohnoes': Dir({noes: File('')}) + }) + ) + withFixture(t, fixture, function (done) { + t.notOk(fileExists('.git'), '.git not included') + t.notOk(fileExists('.svn'), '.svn not included') + t.notOk(fileExists('CVS'), 'CVS not included') + t.notOk(fileExists('.hg'), '.hg not included') + t.notOk(fileExists('.lock-wscript'), '.lock-wscript not included') + t.notOk(fileExists('.wafpickle-0'), '.wafpickle-0 not included') + t.notOk(fileExists('.wafpickle-5'), '.wafpickle-5 not included') + t.notOk(fileExists('.wafpickle-50'), '.wafpickle-50 not included') + t.notOk(fileExists('build/config.gypi'), 'build/config.gypi not included') + t.notOk(fileExists('npm-debug.log'), 'npm-debug.log not included') + t.notOk(fileExists('.npmrc'), '.npmrc not included') + t.notOk(fileExists('.foo.swp'), '.foo.swp not included') + t.notOk(fileExists('.DS_Store'), '.DS_Store not included') + t.notOk(fileExists('._ohno'), '._ohno not included') + t.notOk(fileExists('._ohnoes'), '._ohnoes not included') + done() + }) +}) + +test('certain files included unconditionally', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5' + }), + '.npmignore': File( + 'package.json', + 'README', + 'Readme', + 'readme.md', + 'readme.randomext', + 'changelog', + 'CHAngelog', + 'ChangeLOG.txt', + 'license', + 'licence', + 'LICENSE', + 'LICENCE' + ), + 'README': File(''), + 'Readme': File(''), + 'readme.md': File(''), + 'readme.randomext': File(''), + 'changelog': File(''), + 'CHAngelog': File(''), + 'ChangeLOG.txt': File(''), + 'license': File(''), + 'licence': File(''), + 'LICENSE': File(''), + 'LICENCE': File('') + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('package.json'), 'package.json included') + t.ok(fileExists('README'), 'README included') + t.ok(fileExists('Readme'), 'Readme included') + t.ok(fileExists('readme.md'), 'readme.md included') + t.ok(fileExists('readme.randomext'), 'readme.randomext included') + t.ok(fileExists('changelog'), 'changelog included') + t.ok(fileExists('CHAngelog'), 'CHAngelog included') + t.ok(fileExists('ChangeLOG.txt'), 'ChangeLOG.txt included') + t.ok(fileExists('license'), 'license included') + t.ok(fileExists('licence'), 'licence included') + t.ok(fileExists('LICENSE'), 'LICENSE included') + t.ok(fileExists('LICENCE'), 'LICENCE included') + done() + }) +}) + +test('folder-based inclusion works', function (t) { + var fixture = new Tacks( + Dir({ + 'package.json': File({ + name: 'npm-test-files', + version: '1.2.5', + files: [ + 'sub1/sub', + 'sub2' + ] + }), + sub1: Dir({ + sub: Dir({ + include1: File(''), + include2: File('') + }), + ignored: File('') + }), + sub2: Dir({ + include1: File(''), + include2: File(''), + empty: Dir({}) + }) + }) + ) + withFixture(t, fixture, function (done) { + t.ok(fileExists('sub1/sub/include1'), 'nested dir included') + t.ok(fileExists('sub1/sub/include2'), 'nested dir included') + t.notOk(fileExists('sub1/ignored'), 'unspecified file not included') + + t.ok(fileExists('sub2/include1'), 'dir contents included') + t.ok(fileExists('sub2/include2'), 'dir contents included') + t.notOk(fileExists('sub2/empty'), 'empty dir not included') + + done() + }) +}) + +function fileExists (file) { + try { + return !!fs.statSync(path.resolve(installedpath, file)) + } catch (_) { + return false + } +} + +function withFixture (t, fixture, tester) { + fixture.create(fixturepath) + mkdirp.sync(modulepath) + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code) { + if (err) throw err + t.is(code, 0, 'install went ok') + tester(removeAndDone) + } + function removeAndDone (err) { + if (err) throw err + fixture.remove(fixturepath) + rimraf.sync(basepath) + t.done() + } +} diff --git a/deps/npm/test/tap/legacy-array-bin.js b/deps/npm/test/tap/legacy-array-bin.js new file mode 100644 index 00000000000000..3e421ee23e3ff0 --- /dev/null +++ b/deps/npm/test/tap/legacy-array-bin.js @@ -0,0 +1,80 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-array-bin') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-array-bin') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir +var fixture = new Tacks( + Dir({ + bin: Dir({ + 'array-bin': File( + '#!/usr/bin/env node\n' + + "console.log('test ran ok')\n" + ) + }), + 'package.json': File({ + name: 'npm-test-array-bin', + version: '1.2.5', + bin: [ + 'bin/array-bin' + ], + scripts: { + test: 'node test.js' + } + }), + 'test.js': File( + "require('child_process').exec('array-bin', { env: process.env },\n" + + ' function (err, stdout, stderr) {\n' + + " if (err && err.code) throw new Error('exited badly with code = ' + err.code)\n" + + ' console.log(stdout)\n' + + ' console.error(stderr)\n' + + ' }\n' + + ')\n' + ) + }) +) +test('setup', function (t) { + setup() + t.done() +}) +test('array-bin', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'install went ok') + t.equal(stderr, '', 'no error output') + common.npm(['test'], {cwd: installedpath}, testCheckAndRemove) + } + function testCheckAndRemove (err, code, stdout, stderr) { + t.ifError(err, 'npm test on array bin') + t.equal(code, 0, 'exited OK') + t.equal(stderr.trim(), '', 'no error output') + t.match(stdout, /test ran ok/, 'child script ran properly') + common.npm(['rm', fixturepath], {cwd: basepath}, removeCheckAndDone) + } + function removeCheckAndDone (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'remove went ok') + t.done() + } +}) +test('cleanup', function (t) { + cleanup() + t.done() +}) +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-bundled-git.js b/deps/npm/test/tap/legacy-bundled-git.js new file mode 100644 index 00000000000000..355f9467c151fb --- /dev/null +++ b/deps/npm/test/tap/legacy-bundled-git.js @@ -0,0 +1,103 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-bundled-git') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-bundled-git') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var minimatchExpected = { + name: 'minimatch', + description: 'a glob matcher in javascript', + version: '0.2.1', + repository: { + type: 'git', + url: 'git://github.com/isaacs/minimatch.git' + }, + main: 'minimatch.js', + scripts: { + test: 'tap test' + }, + engines: { + node: '*' + }, + dependencies: { + 'lru-cache': '~1.0.5' + }, + devDependencies: { + tap: '~0.1.3' + }, + licenses: [ + { + type: 'MIT', + url: 'http://github.com/isaacs/minimatch/raw/master/LICENSE' + } + ] +} + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-bundled-git', + scripts: { + test: 'node test.js' + }, + version: '1.2.5', + dependencies: { + glob: 'git://github.com/isaacs/node-glob.git#npm-test' + }, + bundledDependencies: [ + 'glob' + ] + }) + }) +) +test('setup', function (t) { + setup() + t.done() +}) +test('bundled-git', function (t) { + common.npm(['install', '--global-style', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'install went ok') + + var actual = require(path.resolve(installedpath, 'node_modules/glob/node_modules/minimatch/package.json')) + Object.keys(minimatchExpected).forEach(function (key) { + t.isDeeply(actual[key], minimatchExpected[key], key + ' set to the right value') + }) + + common.npm(['rm', fixturepath], {cwd: basepath}, removeCheckAndDone) + } + function removeCheckAndDone (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'remove went ok') + t.done() + } +}) +test('cleanup', function (t) { + cleanup() + t.done() +}) +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-dir-bin.js b/deps/npm/test/tap/legacy-dir-bin.js new file mode 100644 index 00000000000000..e9e6bdfe1320f6 --- /dev/null +++ b/deps/npm/test/tap/legacy-dir-bin.js @@ -0,0 +1,79 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-dir-bin') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-dir-bin') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir +var fixture = new Tacks( + Dir({ + bin: Dir({ + 'dir-bin': File( + '#!/usr/bin/env node\n' + + "console.log('test ran ok')\n" + ) + }), + 'package.json': File({ + name: 'npm-test-dir-bin', + version: '1.2.5', + directories: { + bin: './bin' + }, + scripts: { + test: 'node test.js' + } + }), + 'test.js': File( + "require('child_process').exec('dir-bin', { env: process.env },\n" + + ' function (err, stdout, stderr) {\n' + + " if (err && err.code) throw new Error('exited badly with code = ' + err.code)\n" + + ' console.log(stdout)\n' + + ' console.error(stderr)\n' + + ' }\n' + + ')\n' + ) + }) +) +test('setup', function (t) { + setup() + t.done() +}) +test('dir-bin', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'install went ok') + common.npm(['test'], {cwd: installedpath}, testCheckAndRemove) + } + function testCheckAndRemove (err, code, stdout, stderr) { + t.ifError(err, 'npm test on array bin') + t.equal(code, 0, 'exited OK') + t.equal(stderr.trim(), '', 'no error output') + t.match(stdout, /test ran ok/, 'child script ran properly') + common.npm(['rm', fixturepath], {cwd: basepath}, removeCheckAndDone) + } + function removeCheckAndDone (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'remove went ok') + t.done() + } +}) +test('cleanup', function (t) { + cleanup() + t.done() +}) +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-ignore-nested-nm.js b/deps/npm/test/tap/legacy-ignore-nested-nm.js new file mode 100644 index 00000000000000..095c41efa146ba --- /dev/null +++ b/deps/npm/test/tap/legacy-ignore-nested-nm.js @@ -0,0 +1,64 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-ignore-nested-nm') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-ignore-nested-nm') +var fs = require('graceful-fs') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fileData = 'I WILL NOT BE IGNORED!\n' +var fixture = new Tacks( + Dir({ + lib: Dir({ + node_modules: Dir({ + foo: File(fileData) + }) + }), + 'package.json': File({ + name: 'npm-test-ignore-nested-nm', + version: '1.2.5' + }) + }) +) +test('setup', function (t) { + setup() + t.done() +}) +test('ignore-nested-nm', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'install went ok') + var foopath = path.resolve(installedpath, 'lib/node_modules/foo') + fs.readFile(foopath, function (err, data) { + t.ifError(err, 'file read successfully') + t.equal(data.toString(), fileData) + common.npm(['rm', fixturepath], {cwd: basepath}, removeCheckAndDone) + }) + } + function removeCheckAndDone (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'remove went ok') + t.done() + } +}) +test('cleanup', function (t) { + cleanup() + t.done() +}) +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-missing-bindir.js b/deps/npm/test/tap/legacy-missing-bindir.js new file mode 100644 index 00000000000000..a55703bebdb7cc --- /dev/null +++ b/deps/npm/test/tap/legacy-missing-bindir.js @@ -0,0 +1,82 @@ +'use strict' +var path = require('path') +var fs = require('fs') +var test = require('tap').test +var common = require('../common-tap.js') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-missing-bindir') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-missing-bindir') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-missing-bindir', + version: '0.0.0', + directories: { + bin: './not-found' + } + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +function installedExists (filename) { + try { + fs.statSync(path.resolve(installedpath, filename)) + return true + } catch (ex) { + console.log(ex) + return false + } +} + +test('missing-bindir', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + if (stderr) console.error(stderr) + console.log(stdout) + t.is(code, 0, 'install went ok') + t.is(installedExists('README'), true, 'README') + t.is(installedExists('package.json'), true, 'package.json') + common.npm(['rm', fixturepath], {cwd: basepath}, removeCheckAndDone) + } + + function removeCheckAndDone (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'remove went ok') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} + +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-no-auth-leak.js b/deps/npm/test/tap/legacy-no-auth-leak.js new file mode 100644 index 00000000000000..f837239250222b --- /dev/null +++ b/deps/npm/test/tap/legacy-no-auth-leak.js @@ -0,0 +1,75 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-no-auth-leak', + version: '0.0.0', + scripts: { + test: 'node test.js' + } + }), + '.npmrc': File( + 'auth=abc', + 'authCrypt=def', + 'password=xyz', + '//registry.npmjs.org/:_authToken=nopenope' + ), + 'test.js': File( + 'var authTokenKeys = Object.keys(process.env)\n' + + ' .filter(function (key) { return /authToken/.test(key) })\n' + + 'console.log(JSON.stringify({\n' + + ' password: process.env.npm_config__password || null,\n' + + ' auth: process.env.npm_config__auth || null,\n' + + ' authCrypt: process.env.npm_config__authCrypt || null ,\n' + + ' authToken: authTokenKeys && process.env[authTokenKeys[0]] || null\n' + + '}))' + ) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('no-auth-leak', function (t) { + common.npm(['test'], {cwd: basepath}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'test ran ok') + if (stderr) console.log(stderr) + var matchResult = /^[^{]*(\{(?:.|\n)*\})[^}]*$/ + t.like(stdout, matchResult, 'got results with a JSON chunk in them') + var stripped = stdout.replace(matchResult, '$1') + var result = JSON.parse(stripped) + t.is(result.password, null, 'password') + t.is(result.auth, null, 'auth') + t.is(result.authCrypt, null, 'authCrypt') + t.is(result.authToken, null, 'authToken') + t.end() + }) +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(basepath) +} + +function cleanup () { + fixture.remove(basepath) +} diff --git a/deps/npm/test/tap/legacy-npm-self-install.js b/deps/npm/test/tap/legacy-npm-self-install.js new file mode 100644 index 00000000000000..313c0594935a0d --- /dev/null +++ b/deps/npm/test/tap/legacy-npm-self-install.js @@ -0,0 +1,107 @@ +'use strict' +var test = require('tap').test +var fs = require('graceful-fs') +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var osenv = require('osenv') +var npmpath = path.resolve(__dirname, '../..') +var basepath = path.resolve(osenv.tmpdir(), path.basename(__filename, '.js')) +var globalpath = path.resolve(basepath, 'global') +var extend = Object.assign || require('util')._extend +var isWin32 = process.platform === 'win32' + +test('setup', function (t) { + setup() + t.done() +}) + +var tarball + +test('build-tarball', function (t) { + common.npm(['pack'], {cwd: npmpath, stdio: ['ignore', 'pipe', process.stderr]}, function (err, code, stdout) { + if (err) throw err + t.is(code, 0, 'pack went ok') + tarball = path.resolve(npmpath, stdout.trim().replace(/^(?:.|\n)*(?:^|\n)(.*?[.]tgz)$/, '$1')) + t.match(tarball, /[.]tgz$/, 'got a tarball') + t.done() + }) +}) + +function exists () { + try { + fs.statSync(path.resolve.apply(null, arguments)) + return true + } catch (ex) { + return false + } +} + +test('npm-self-install', function (t) { + if (!tarball) return t.done() + + var env = extend({}, process.env) + var pathsep = isWin32 ? ';' : ':' + env.npm_config_prefix = globalpath + env.npm_config_global = 'true' + env.npm_config_npat = 'false' + env.NODE_PATH = null + env.npm_config_user_agent = null + env.npm_config_color = 'always' + env.npm_config_progress = 'always' + var PATH = env.PATH.split(pathsep) + var binpath = isWin32 ? globalpath : path.join(globalpath, 'bin') + var cmdname = isWin32 ? 'npm.cmd' : 'npm' + PATH.unshift(binpath) + env.PATH = PATH.join(pathsep) + + var opts = {cwd: basepath, env: env, stdio: ['ignore', 'ignore', process.stderr]} + + common.npm(['install', '--ignore-scripts', tarball], opts, installCheckAndTest) + function installCheckAndTest (err, code) { + if (err) throw err + t.is(code, 0, 'install went ok') + t.is(exists(binpath, cmdname), true, 'binary was installed') + t.is(exists(globalpath, 'lib', 'node_modules', 'npm'), true, 'module path exists') + common.npm(['ls', '--json', '--depth=0'], {cwd: basepath, env: env}, lsCheckAndRemove) + } + function lsCheckAndRemove (err, code, stdout, stderr) { + t.ifError(err, 'npm test on array bin') + t.equal(code, 0, 'exited OK') + t.equal(stderr.trim(), '', 'no error output') + var installed = JSON.parse(stdout.trim()) + t.is(Object.keys(installed.dependencies).length, 1, 'one thing installed') + t.is(path.resolve(globalpath, installed.dependencies.npm.from), tarball, 'and it was our npm tarball') + common.npm(['rm', 'npm'], {cwd: basepath, env: env, stdio: 'inherit'}, removeCheck) + } + function removeCheck (err, code) { + if (err) throw err + t.is(code, 0, 'remove went ok') + common.npm(['ls', '--json', '--depth=0'], {cwd: basepath, env: env}, andDone) + } + function andDone (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'remove went ok') + t.equal(stderr.trim(), '', 'no error output') + var installed = JSON.parse(stdout.trim()) + t.ok(!installed.dependencies || installed.dependencies.length === 0, 'nothing left') + t.is(exists(binpath, cmdname), false, 'binary was removed') + t.is(exists(globalpath, 'lib', 'node_modules', 'npm'), false, 'module was entirely removed') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + mkdirp.sync(globalpath) +} + +function cleanup () { + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-optional-deps.js b/deps/npm/test/tap/legacy-optional-deps.js new file mode 100644 index 00000000000000..54d0c75aabd0ed --- /dev/null +++ b/deps/npm/test/tap/legacy-optional-deps.js @@ -0,0 +1,80 @@ +'use strict' +var path = require('path') +var fs = require('fs') +var test = require('tap').test +var common = require('../common-tap.js') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var mr = require('npm-registry-mock') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-optional-deps') +var modulepath = path.resolve(basepath, 'node_modules') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-optional-deps', + version: '1.2.5', + optionalDependencies: { + 'npm-test-foobarzaaakakaka': 'http://example.com/', + async: '10.999.14234', + mkdirp: '0.3.5', + optimist: 'some invalid version 99 #! $$ x y z', + 'npm-test-failer': '*' + } + }) + }) +) + +var server + +test('setup', function (t) { + setup() + mr({port: common.port}, function (err, s) { + if (err) throw err + server = s + t.done() + }) +}) + +test('optional-deps', function (t) { + server.get('/npm-test-failer').reply(404, {error: 'nope'}) + + var opts = ['--registry=' + common.registry, '--timeout=100'] + common.npm(opts.concat(['install', fixturepath]), {cwd: basepath}, installCheckAndTest) + + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + if (stderr) console.error(stderr) + server.done() + t.is(code, 0, 'install went ok') + var subpath = modulepath + '/npm-test-optional-deps/node_modules/' + var dir = fs.readdirSync(subpath) + t.isDeeply(dir, ['mkdirp'], 'only one optional dep should be there') + t.is(require(path.resolve(subpath, 'mkdirp', 'package.json')).version, '0.3.5', 'mkdirp version right') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + server.close() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} + +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-platform-all.js b/deps/npm/test/tap/legacy-platform-all.js new file mode 100644 index 00000000000000..2bfb19a45782bd --- /dev/null +++ b/deps/npm/test/tap/legacy-platform-all.js @@ -0,0 +1,73 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-platform-all') +var modulepath = path.resolve(basepath, 'node_modules') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-platform-all', + version: '9.9.9-9', + homepage: 'http://www.zombo.com/', + os: [ + 'darwin', + 'linux', + 'win32', + 'solaris', + 'haiku', + 'sunos', + 'freebsd', + 'openbsd', + 'netbsd' + ], + cpu: [ + 'arm', + 'mips', + 'ia32', + 'x64', + 'sparc' + ] + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('platform-all', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + t.is(stderr, '', 'no error messages') + t.is(code, 0, 'install went ok') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-platform.js b/deps/npm/test/tap/legacy-platform.js new file mode 100644 index 00000000000000..4e94148b213097 --- /dev/null +++ b/deps/npm/test/tap/legacy-platform.js @@ -0,0 +1,64 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-platform') +var modulepath = path.resolve(basepath, 'node_modules') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-platform', + version: '9.9.9-9', + homepage: 'http://www.youtube.com/watch?v=dQw4w9WgXcQ', + os: [ + '!this_is_not_a_real_os', + '!neither_is_this' + ], + cpu: [ + '!this_is_not_a_real_cpu', + '!this_isnt_either' + ] + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('platform', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + t.is(code, 0, 'install went ok') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} + +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-private.js b/deps/npm/test/tap/legacy-private.js new file mode 100644 index 00000000000000..5e7817bf6a13a7 --- /dev/null +++ b/deps/npm/test/tap/legacy-private.js @@ -0,0 +1,58 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-private') +var modulepath = path.resolve(basepath, 'node_modules') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-private', + version: '9.9.9-9', + homepage: 'http://www.youtube.com/watch?v=1MLry6Cn_D4', + private: 'true' + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('private', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'install went ok') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} + +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-shrinkwrap.js b/deps/npm/test/tap/legacy-shrinkwrap.js new file mode 100644 index 00000000000000..6f5303037707a0 --- /dev/null +++ b/deps/npm/test/tap/legacy-shrinkwrap.js @@ -0,0 +1,132 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'npm-shrinkwrap.json': File({ + name: 'npm-test-shrinkwrap', + version: '0.0.0', + dependencies: { + glob: { + version: '3.1.5', + from: 'git://github.com/isaacs/node-glob.git#npm-test', + resolved: 'git://github.com/isaacs/node-glob.git#67bda227fd7a559cca5620307c7d30a6732a792f', + dependencies: { + 'graceful-fs': { + version: '1.1.5', + resolved: 'https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.1.5.tgz', + dependencies: { + 'fast-list': { + version: '1.0.2', + resolved: 'https://registry.npmjs.org/fast-list/-/fast-list-1.0.2.tgz' + } + } + }, + inherits: { + version: '1.0.0', + resolved: 'https://registry.npmjs.org/inherits/-/inherits-1.0.0.tgz' + }, + minimatch: { + version: '0.2.1', + dependencies: { + 'lru-cache': { + version: '1.0.5' + } + } + } + } + }, + minimatch: { + version: '0.1.5', + resolved: 'https://registry.npmjs.org/minimatch/-/minimatch-0.1.5.tgz', + dependencies: { + 'lru-cache': { + version: '1.0.5', + resolved: 'https://registry.npmjs.org/lru-cache/-/lru-cache-1.0.5.tgz' + } + } + }, + 'npm-test-single-file': { + version: '1.2.3', + resolved: 'https://gist.github.com/isaacs/1837112/raw/9ef57a59fc22aeb1d1ca346b68826dcb638b8416/index.js' + } + } + }), + 'package.json': File({ + author: 'Isaac Z. Schlueter (http://blog.izs.me/)', + name: 'npm-test-shrinkwrap', + version: '0.0.0', + dependencies: { + 'npm-test-single-file': 'https://gist.github.com/isaacs/1837112/raw/9ef57a59fc22aeb1d1ca346b68826dcb638b8416/index.js', + glob: 'git://github.com/isaacs/node-glob.git#npm-test', + minimatch: '~0.1.0' + }, + scripts: { + test: 'node test.js' + } + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('shrinkwrap', function (t) { + common.npm(['install'], {cwd: basepath}, installCheckAndTest) + + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + t.is(code, 0, 'install went ok') + + common.npm(['ls', '--json'], {cwd: basepath}, verifyLsMatchesShrinkwrap) + } + + function verifyLsMatchesShrinkwrap (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + t.is(code, 0, 'ls went ok') + var actual = JSON.parse(stdout) + var expected = require(path.resolve(basepath, 'npm-shrinkwrap.json')) + // from is expected to vary + t.isDeeply(rmFrom(actual), rmFrom(expected)) + t.done() + } + + function rmFrom (obj) { + for (var i in obj) { + if (i === 'from') { + delete obj[i] + } else if (i === 'dependencies') { + for (var j in obj[i]) { + rmFrom(obj[i][j]) + } + } + } + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(basepath) +} + +function cleanup () { + fixture.remove(basepath) +} diff --git a/deps/npm/test/tap/legacy-test-package.js b/deps/npm/test/tap/legacy-test-package.js new file mode 100644 index 00000000000000..b0cbaa01a5cb62 --- /dev/null +++ b/deps/npm/test/tap/legacy-test-package.js @@ -0,0 +1,76 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-test-package') +var modulepath = path.resolve(basepath, 'node_modules') +var installedpath = path.resolve(modulepath, 'npm-test-test-package') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-test-package', + author: 'Testy McMock', + version: '1.2.3-99-b', + description: "This is a test package used for debugging. It has some random data and that's all." + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('test-package', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'install went ok') + common.npm(['test'], {cwd: installedpath}, testCheckAndRemove) + } + + function testCheckAndRemove (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'npm test w/o test is ok') + common.npm(['rm', fixturepath], {cwd: basepath}, removeCheckAndDone) + } + + function removeCheckAndDone (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'remove went ok') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} + +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/legacy-url-dep.js b/deps/npm/test/tap/legacy-url-dep.js new file mode 100644 index 00000000000000..9807d6916a4e44 --- /dev/null +++ b/deps/npm/test/tap/legacy-url-dep.js @@ -0,0 +1,61 @@ +'use strict' +var test = require('tap').test +var common = require('../common-tap.js') +var path = require('path') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var basepath = path.resolve(__dirname, path.basename(__filename, '.js')) +var fixturepath = path.resolve(basepath, 'npm-test-url-dep') +var modulepath = path.resolve(basepath, 'node_modules') +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir + +var fixture = new Tacks( + Dir({ + README: File( + 'just an npm test\n' + ), + 'package.json': File({ + name: 'npm-test-url-dep', + version: '1.2.3', + dependencies: { + jsonify: 'https://github.com/substack/jsonify/tarball/master', + sax: 'isaacs/sax-js', + 'canonical-host': 'git://github.com/isaacs/canonical-host' + } + }) + }) +) + +test('setup', function (t) { + setup() + t.done() +}) + +test('url-dep', function (t) { + common.npm(['install', fixturepath], {cwd: basepath}, installCheckAndTest) + function installCheckAndTest (err, code, stdout, stderr) { + if (err) throw err + console.error(stderr) + console.log(stdout) + t.is(code, 0, 'install went ok') + t.done() + } +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) + +function setup () { + cleanup() + fixture.create(fixturepath) + mkdirp.sync(modulepath) +} + +function cleanup () { + fixture.remove(fixturepath) + rimraf.sync(basepath) +} diff --git a/deps/npm/test/tap/lifecycle-path.js b/deps/npm/test/tap/lifecycle-path.js index fae6fcc83f71e3..39761b48d7533e 100644 --- a/deps/npm/test/tap/lifecycle-path.js +++ b/deps/npm/test/tap/lifecycle-path.js @@ -67,7 +67,8 @@ test('make sure the path is correct', function (t) { // get the ones we tacked on, then the system-specific requirements var expect = [ '{{ROOT}}/bin/node-gyp-bin', - '{{ROOT}}/test/tap/lifecycle-path/node_modules/.bin' + '{{ROOT}}/test/tap/lifecycle-path/node_modules/.bin', + path.dirname(process.execPath) ].concat(PATH.split(pathSplit).map(function (p) { return p.replace(/\\/g, '/') })) diff --git a/deps/npm/test/tap/map-to-registry.js b/deps/npm/test/tap/map-to-registry.js index 9f6673b92c0d6c..d9677bd7e0fceb 100644 --- a/deps/npm/test/tap/map-to-registry.js +++ b/deps/npm/test/tap/map-to-registry.js @@ -48,7 +48,7 @@ test('mapRegistryToURI', function (t) { password: undefined, email: undefined, auth: undefined, - alwaysAuth: undefined + alwaysAuth: false }) t.equal(registry, 'http://reg.npm/design/-/rewrite/') }) @@ -66,7 +66,7 @@ test('mapRegistryToURI', function (t) { password: undefined, email: undefined, auth: undefined, - alwaysAuth: undefined + alwaysAuth: false }) t.equal(registry, 'http://reg.npm/-/rewrite/') }) @@ -84,8 +84,83 @@ test('mapRegistryToURI', function (t) { password: undefined, email: undefined, auth: undefined, - alwaysAuth: undefined + alwaysAuth: false }) t.equal(registry, 'http://reg.npm/design/-/rewrite/relative/') }) }) + +test('mapToRegistry token scoping', function (t) { + npm.config.set('scope', '') + npm.config.set('registry', 'https://reg.npm/') + npm.config.set('//reg.npm/:_authToken', 'r-token') + + t.test('pass token to registry host', function (t) { + mapRegistry( + 'https://reg.npm/packages/e/easy-1.0.0.tgz', + npm.config, + function (er, uri, auth, registry) { + t.ifError(er, 'mapRegistryToURI worked') + t.equal(uri, 'https://reg.npm/packages/e/easy-1.0.0.tgz') + t.deepEqual(auth, { + scope: '//reg.npm/', + token: 'r-token', + username: undefined, + password: undefined, + email: undefined, + auth: undefined, + alwaysAuth: false + }) + t.equal(registry, 'https://reg.npm/') + } + ) + t.end() + }) + + t.test("don't pass token to non-registry host", function (t) { + mapRegistry( + 'https://butts.lol/packages/e/easy-1.0.0.tgz', + npm.config, + function (er, uri, auth, registry) { + t.ifError(er, 'mapRegistryToURI worked') + t.equal(uri, 'https://butts.lol/packages/e/easy-1.0.0.tgz') + t.deepEqual(auth, { + scope: '//reg.npm/', + token: undefined, + username: undefined, + password: undefined, + email: undefined, + auth: undefined, + alwaysAuth: false + }) + t.equal(registry, 'https://reg.npm/') + } + ) + t.end() + }) + + t.test('pass token to non-registry host with always-auth', function (t) { + npm.config.set('always-auth', true) + mapRegistry( + 'https://butts.lol/packages/e/easy-1.0.0.tgz', + npm.config, + function (er, uri, auth, registry) { + t.ifError(er, 'mapRegistryToURI worked') + t.equal(uri, 'https://butts.lol/packages/e/easy-1.0.0.tgz') + t.deepEqual(auth, { + scope: '//reg.npm/', + token: 'r-token', + username: undefined, + password: undefined, + email: undefined, + auth: undefined, + alwaysAuth: true + }) + t.equal(registry, 'https://reg.npm/') + } + ) + t.end() + }) + + t.end() +}) diff --git a/deps/npm/test/tap/peer-deps-invalid.js b/deps/npm/test/tap/peer-deps-invalid.js index 453f9617f38e34..3f51dbfc8e349e 100644 --- a/deps/npm/test/tap/peer-deps-invalid.js +++ b/deps/npm/test/tap/peer-deps-invalid.js @@ -6,73 +6,66 @@ var mr = require('npm-registry-mock') var osenv = require('osenv') var rimraf = require('rimraf') var test = require('tap').test +var Tacks = require('tacks') +var Dir = Tacks.Dir +var File = Tacks.File var npm = require('../../') var common = require('../common-tap') -var pkg = path.resolve(__dirname, 'peer-deps-invalid') -var cache = path.resolve(pkg, 'cache') +var testdir = path.resolve(__dirname, path.basename(__filename, '.js')) +var cachedir = path.resolve(testdir, 'cache') -var json = { - author: 'Domenic Denicola (http://domenicdenicola.com/)', - name: 'peer-deps-invalid', - version: '0.0.0', - dependencies: { - 'npm-test-peer-deps-file': 'http://localhost:1337/ok.js', - 'npm-test-peer-deps-file-invalid': 'http://localhost:1337/invalid.js' - } -} - -var fileFail = function () { -/**package -* { "name": "npm-test-peer-deps-file-invalid" -* , "main": "index.js" -* , "version": "1.2.3" -* , "description":"This one should conflict with the other one" -* , "peerDependencies": { "underscore": "1.3.3" } -* } -**/ - module.exports = 'I\'m just a lonely index, naked as the day I was born.' -}.toString().split('\n').slice(1, -1).join('\n') - -var fileOK = function () { -/**package -* { "name": "npm-test-peer-deps-file" -* , "main": "index.js" -* , "version": "1.2.3" -* , "description":"No package.json in sight!" -* , "peerDependencies": { "underscore": "1.3.1" } -* , "dependencies": { "mkdirp": "0.3.5" } -* } -**/ - module.exports = 'I\'m just a lonely index, naked as the day I was born.' -}.toString().split('\n').slice(1, -1).join('\n') +var fixtures = new Tacks(Dir({ + cache: Dir({}), + 'package.json': File({ + author: 'Domenic Denicola (http://domenicdenicola.com/)', + name: 'peer-deps-invalid', + version: '0.0.0', + dependencies: { + 'npm-test-peer-deps-file': 'file-ok/', + 'npm-test-peer-deps-file-invalid': 'file-fail/' + } + }), + 'file-ok': Dir({ + 'package.json': File({ + name: 'npm-test-peer-deps-file', + main: 'index.js', + version: '1.2.3', + description:'This one should conflict with the other one', + peerDependencies: { underscore: '1.3.1' }, + dependencies: { mkdirp: '0.3.5' } + }), + 'index.js': File( + "module.exports = 'I\'m just a lonely index, naked as the day I was born.'" + ), + }), + 'file-fail': Dir({ + 'package.json': File({ + name: 'npm-test-peer-deps-file-invalid', + main: 'index.js', + version: '1.2.3', + description:'This one should conflict with the other one', + peerDependencies: { underscore: '1.3.3' } + }), + 'index.js': File( + "module.exports = 'I\'m just a lonely index, naked as the day I was born.'" + ), + }), +})) test('setup', function (t) { cleanup() - mkdirp.sync(cache) - fs.writeFileSync( - path.join(pkg, 'package.json'), - JSON.stringify(json, null, 2) - ) - fs.writeFileSync(path.join(pkg, 'file-ok.js'), fileOK) - fs.writeFileSync(path.join(pkg, 'file-fail.js'), fileFail) - - process.chdir(pkg) + fixtures.create(testdir) + process.chdir(testdir) t.end() }) test('installing dependencies that have conflicting peerDependencies', function (t) { - var customMocks = { - 'get': { - '/ok.js': [200, path.join(pkg, 'file-ok.js')], - '/invalid.js': [200, path.join(pkg, 'file-fail.js')] - } - } - mr({port: common.port, mocks: customMocks}, function (err, s) { // create mock registry. + mr({port: common.port}, function (err, s) { // create mock registry. t.ifError(err, 'mock registry started') npm.load({ - cache: pkg + "/cache", + cache: cachedir, registry: common.registry }, function () { npm.commands.install([], function (err) { @@ -81,8 +74,8 @@ test('installing dependencies that have conflicting peerDependencies', function } else { t.equal(err.code, "EPEERINVALID") t.equal(err.packageName, "underscore") - t.equal(err.packageVersion, "1.3.3") - t.equal(err.message, "The package underscore@1.3.3 does not satisfy its siblings' peerDependencies requirements!") + t.match(err.packageVersion, /^1\.3\.[13]$/) + t.match(err.message, /^The package underscore@1\.3\.[13] does not satisfy its siblings' peerDependencies requirements!$/) } s.close() // shutdown mock registry. t.end() @@ -97,6 +90,5 @@ test('cleanup', function (t) { }) function cleanup () { - process.chdir(osenv.tmpdir()) - rimraf.sync(pkg) + fixtures.remove(testdir) } diff --git a/deps/npm/test/tap/run-script.js b/deps/npm/test/tap/run-script.js index 5d414d8e9249f9..f95f7028b261bc 100644 --- a/deps/npm/test/tap/run-script.js +++ b/deps/npm/test/tap/run-script.js @@ -25,8 +25,13 @@ var fullyPopulated = { 'prewith-both': 'node -e "console.log(process.argv[1] || \'pre\')"', 'with-both': 'node -e "console.log(process.argv[1] || \'main\')"', 'postwith-both': 'node -e "console.log(process.argv[1] || \'post\')"', - 'stop': 'node -e "console.log(process.argv[1] || \'stop\')"' - } + 'stop': 'node -e "console.log(process.argv[1] || \'stop\')"', + 'env-vars': 'node -e "console.log(process.env.run_script_foo_var)"', + 'npm-env-vars': 'node -e "console.log(process.env.npm_run_script_foo_var)"', + 'package-env-vars': 'node -e "console.log(process.env.run_script_foo_var)"', + 'prefixed-package-env-vars': 'node -e "console.log(process.env.npm_package_run_script_foo_var)"' + }, + 'run_script_foo_var': 'run_script_test_foo_val' } var lifecycleOnly = { @@ -181,6 +186,64 @@ test('npm run-script nonexistent-script with --if-present flag', function (t) { }) }) +test('npm run-script env vars accessible', function (t) { + process.env.run_script_foo_var = 'run_script_test_foo_val' + common.npm(['run-script', 'env-vars'], { + cwd: pkg + }, function (err, code, stdout, stderr) { + t.ifError(err, 'ran run-script without crashing') + t.equal(code, 0, 'exited normally') + t.equal(stderr, '', 'no error output') + t.match(stdout, + new RegExp(process.env.run_script_foo_var), + 'script had env access') + t.end() + }) +}) + +test('npm run-script package.json vars injected', function (t) { + common.npm(['run-script', 'package-env-vars'], { + cwd: pkg + }, function (err, code, stdout, stderr) { + t.ifError(err, 'ran run-script without crashing') + t.equal(code, 0, 'exited normally') + t.equal(stderr, '', 'no error output') + t.match(stdout, + new RegExp(fullyPopulated.run_script_foo_var), + 'script injected package.json value') + t.end() + }) +}) + +test('npm run-script package.json vars injected with prefix', function (t) { + common.npm(['run-script', 'prefixed-package-env-vars'], { + cwd: pkg + }, function (err, code, stdout, stderr) { + t.ifError(err, 'ran run-script without crashing') + t.equal(code, 0, 'exited normally') + t.equal(stderr, '', 'no error output') + t.match(stdout, + new RegExp(fullyPopulated.run_script_foo_var), + 'script injected npm_package-prefixed package.json value') + t.end() + }) +}) + +test('npm run-script env vars stripped npm-prefixed', function (t) { + process.env.npm_run_script_foo_var = 'run_script_test_foo_val' + common.npm(['run-script', 'npm-env-vars'], { + cwd: pkg + }, function (err, code, stdout, stderr) { + t.ifError(err, 'ran run-script without crashing') + t.equal(code, 0, 'exited normally') + t.equal(stderr, '', 'no error output') + t.notMatch(stdout, + new RegExp(process.env.npm_run_script_foo_var), + 'script stripped npm-prefixed env var') + t.end() + }) +}) + test('npm run-script no-params (lifecycle only)', function (t) { var expected = [ 'Lifecycle scripts included in scripted:',