summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules')
-rw-r--r--deps/npm/node_modules/archy/LICENSE18
-rw-r--r--deps/npm/node_modules/archy/README.markdown22
-rw-r--r--deps/npm/node_modules/archy/examples/beep.js24
-rw-r--r--deps/npm/node_modules/archy/examples/multi_line.js25
-rw-r--r--deps/npm/node_modules/archy/package.json77
-rw-r--r--deps/npm/node_modules/archy/test/beep.js40
-rw-r--r--deps/npm/node_modules/archy/test/multi_line.js45
-rw-r--r--deps/npm/node_modules/archy/test/non_unicode.js40
-rw-r--r--deps/npm/node_modules/config-chain/.npmignore (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/.npmignore)0
-rw-r--r--deps/npm/node_modules/config-chain/LICENCE (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/LICENCE)0
-rwxr-xr-xdeps/npm/node_modules/config-chain/index.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/index.js)0
-rw-r--r--deps/npm/node_modules/config-chain/node_modules/proto-list/LICENSE (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/LICENSE)0
-rw-r--r--deps/npm/node_modules/config-chain/node_modules/proto-list/README.md (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/README.md)0
-rw-r--r--deps/npm/node_modules/config-chain/node_modules/proto-list/package.json (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json)5
-rw-r--r--deps/npm/node_modules/config-chain/node_modules/proto-list/proto-list.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/proto-list.js)0
-rw-r--r--deps/npm/node_modules/config-chain/node_modules/proto-list/test/basic.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/test/basic.js)0
-rw-r--r--deps/npm/node_modules/config-chain/package.json (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/package.json)2
-rw-r--r--deps/npm/node_modules/config-chain/readme.markdown (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/readme.markdown)0
-rw-r--r--deps/npm/node_modules/config-chain/test/broken.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/broken.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/broken.json (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/broken.json)0
-rw-r--r--deps/npm/node_modules/config-chain/test/chain-class.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/chain-class.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/env.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/env.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/find-file.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/find-file.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/get.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/ignore-unfound-file.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/ignore-unfound-file.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/ini.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/ini.js)0
-rw-r--r--deps/npm/node_modules/config-chain/test/save.js (renamed from deps/npm/node_modules/npmconf/node_modules/config-chain/test/save.js)0
-rw-r--r--deps/npm/node_modules/dezalgo/dezalgo.js3
-rw-r--r--deps/npm/node_modules/dezalgo/node_modules/asap/package.json2
-rw-r--r--deps/npm/node_modules/dezalgo/package.json23
-rw-r--r--deps/npm/node_modules/dezalgo/test/basic.js12
-rw-r--r--deps/npm/node_modules/fs-write-stream-atomic/LICENSE15
-rw-r--r--deps/npm/node_modules/fs-write-stream-atomic/README.md35
-rw-r--r--deps/npm/node_modules/fs-write-stream-atomic/index.js96
-rw-r--r--deps/npm/node_modules/fs-write-stream-atomic/package.json53
-rw-r--r--deps/npm/node_modules/fs-write-stream-atomic/test/basic.js89
-rw-r--r--deps/npm/node_modules/fstream-npm/fstream-npm.js6
-rw-r--r--deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json22
-rw-r--r--deps/npm/node_modules/fstream-npm/package.json30
-rw-r--r--deps/npm/node_modules/glob/README.md11
-rw-r--r--deps/npm/node_modules/glob/glob.js6
-rw-r--r--deps/npm/node_modules/glob/oh-my-glob.gifbin0 -> 510360 bytes
-rw-r--r--deps/npm/node_modules/glob/package.json27
-rw-r--r--deps/npm/node_modules/glob/test/negation-test.js16
-rw-r--r--deps/npm/node_modules/graceful-fs/package.json24
-rw-r--r--deps/npm/node_modules/graceful-fs/test/max-open.js69
-rw-r--r--deps/npm/node_modules/graceful-fs/test/readdir-sort.js1
-rw-r--r--deps/npm/node_modules/graceful-fs/test/write-then-read.js45
-rw-r--r--deps/npm/node_modules/inflight/.eslintrc17
-rw-r--r--deps/npm/node_modules/inflight/inflight.js39
-rw-r--r--deps/npm/node_modules/inflight/package.json32
-rw-r--r--deps/npm/node_modules/inflight/test.js64
-rw-r--r--deps/npm/node_modules/inherits/package.json21
-rw-r--r--deps/npm/node_modules/ini/README.md59
-rw-r--r--deps/npm/node_modules/ini/ini.js28
-rw-r--r--deps/npm/node_modules/ini/package.json19
-rw-r--r--deps/npm/node_modules/ini/test/foo.js26
-rw-r--r--deps/npm/node_modules/init-package-json/.npmignore2
-rw-r--r--deps/npm/node_modules/init-package-json/default-input.js59
-rw-r--r--deps/npm/node_modules/init-package-json/init-package-json.js23
-rw-r--r--deps/npm/node_modules/init-package-json/node_modules/promzard/package.json5
-rw-r--r--deps/npm/node_modules/init-package-json/package.json34
-rw-r--r--deps/npm/node_modules/init-package-json/test/npm-defaults.js49
-rw-r--r--deps/npm/node_modules/normalize-package-data/README.md6
-rw-r--r--deps/npm/node_modules/normalize-package-data/lib/fixer.js7
-rw-r--r--deps/npm/node_modules/normalize-package-data/lib/warning_messages.json3
-rw-r--r--deps/npm/node_modules/normalize-package-data/package.json19
-rw-r--r--deps/npm/node_modules/normalize-package-data/test/dependencies.js3
-rw-r--r--deps/npm/node_modules/npm-package-arg/package.json12
-rw-r--r--deps/npm/node_modules/npm-package-arg/test/basic.js2
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/fetch.js6
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/request.js5
-rw-r--r--deps/npm/node_modules/npm-registry-client/package.json13
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-authed.js56
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js52
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json1
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json1
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgzbin0 -> 58692 bytes
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json1
-rw-r--r--deps/npm/node_modules/npm-registry-client/test/lib/common.js4
-rw-r--r--deps/npm/node_modules/npm-user-validate/package.json39
-rw-r--r--deps/npm/node_modules/npmconf/.npmignore3
-rw-r--r--deps/npm/node_modules/npmconf/README.md33
-rw-r--r--deps/npm/node_modules/npmconf/config-defs.js381
-rw-r--r--deps/npm/node_modules/npmconf/lib/find-prefix.js56
-rw-r--r--deps/npm/node_modules/npmconf/lib/get-credentials-by-uri.js57
-rw-r--r--deps/npm/node_modules/npmconf/lib/load-cafile.js31
-rw-r--r--deps/npm/node_modules/npmconf/lib/load-prefix.js49
-rw-r--r--deps/npm/node_modules/npmconf/lib/load-uid.js15
-rw-r--r--deps/npm/node_modules/npmconf/lib/nerf-dart.js21
-rw-r--r--deps/npm/node_modules/npmconf/lib/set-credentials-by-uri.js34
-rw-r--r--deps/npm/node_modules/npmconf/lib/set-user.js26
-rw-r--r--deps/npm/node_modules/npmconf/npmconf.js414
-rw-r--r--deps/npm/node_modules/npmconf/package.json71
-rw-r--r--deps/npm/node_modules/npmconf/test/00-setup.js67
-rw-r--r--deps/npm/node_modules/npmconf/test/basic.js58
-rw-r--r--deps/npm/node_modules/npmconf/test/builtin.js59
-rw-r--r--deps/npm/node_modules/npmconf/test/certfile.js17
-rw-r--r--deps/npm/node_modules/npmconf/test/credentials.js166
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/.npmrc1
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/builtin1
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/globalconfig1
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/multi-ca32
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/package.json0
-rw-r--r--deps/npm/node_modules/npmconf/test/fixtures/userconfig23
-rw-r--r--deps/npm/node_modules/npmconf/test/project.js60
-rw-r--r--deps/npm/node_modules/npmconf/test/save.js84
-rw-r--r--deps/npm/node_modules/npmconf/test/semver-tag.js65
-rw-r--r--deps/npm/node_modules/once/once.js3
-rw-r--r--deps/npm/node_modules/once/package.json33
-rw-r--r--deps/npm/node_modules/once/test/once.js7
-rw-r--r--deps/npm/node_modules/opener/LICENSE.txt33
-rw-r--r--deps/npm/node_modules/opener/README.md101
-rwxr-xr-xdeps/npm/node_modules/opener/opener.js2
-rw-r--r--deps/npm/node_modules/opener/package.json30
-rw-r--r--deps/npm/node_modules/readable-stream/.npmignore (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/.npmignore)0
-rw-r--r--deps/npm/node_modules/readable-stream/LICENSE (renamed from deps/npm/node_modules/npmconf/LICENSE)0
-rw-r--r--deps/npm/node_modules/readable-stream/README.md (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/README.md)0
-rw-r--r--deps/npm/node_modules/readable-stream/duplex.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/duplex.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/lib/_stream_duplex.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/lib/_stream_passthrough.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/lib/_stream_readable.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/lib/_stream_transform.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/lib/_stream_writable.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/core-util-is/README.md (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/README.md)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/core-util-is/float.patch (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/float.patch)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/core-util-is/lib/util.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/lib/util.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/core-util-is/package.json (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json)5
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/core-util-is/util.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/util.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/isarray/README.md (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/README.md)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/isarray/build/build.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/build/build.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/isarray/component.json (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/component.json)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/isarray/index.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/index.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/isarray/package.json (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/package.json)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/string_decoder/.npmignore (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/.npmignore)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/string_decoder/LICENSE (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/LICENSE)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/string_decoder/README.md (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/README.md)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/string_decoder/index.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/index.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/node_modules/string_decoder/package.json (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/package.json)2
-rw-r--r--deps/npm/node_modules/readable-stream/package.json (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/package.json)18
-rw-r--r--deps/npm/node_modules/readable-stream/passthrough.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/passthrough.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/readable.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/readable.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/transform.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/transform.js)0
-rw-r--r--deps/npm/node_modules/readable-stream/writable.js (renamed from deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/writable.js)0
-rw-r--r--deps/npm/node_modules/realize-package-specifier/.npmignore3
-rw-r--r--deps/npm/node_modules/realize-package-specifier/README.md58
-rw-r--r--deps/npm/node_modules/realize-package-specifier/index.js38
-rw-r--r--deps/npm/node_modules/realize-package-specifier/package.json53
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/basic.js121
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/npa-basic.js207
-rw-r--r--deps/npm/node_modules/realize-package-specifier/test/npa-windows.js42
-rw-r--r--deps/npm/node_modules/request/.eslintrc22
-rw-r--r--deps/npm/node_modules/request/.travis.yml13
-rw-r--r--deps/npm/node_modules/request/CONTRIBUTING.md25
-rw-r--r--deps/npm/node_modules/request/README.md243
-rwxr-xr-xdeps/npm/node_modules/request/index.js56
-rw-r--r--deps/npm/node_modules/request/lib/cookies.js48
-rw-r--r--deps/npm/node_modules/request/lib/copy.js4
-rw-r--r--deps/npm/node_modules/request/lib/debug.js4
-rw-r--r--deps/npm/node_modules/request/lib/helpers.js57
-rw-r--r--deps/npm/node_modules/request/lib/optional.js13
-rw-r--r--deps/npm/node_modules/request/node_modules/aws-sign2/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/.jshintrc59
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/LICENSE39
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/LICENSE.md13
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/README.md7
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/LICENSE27
-rw-r--r--deps/npm/node_modules/request/node_modules/bl/package.json21
-rw-r--r--deps/npm/node_modules/request/node_modules/caseless/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/forever-agent/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/form-data/package.json2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json2
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/http-signature/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/mime-types/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/node-uuid/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/oauth-sign/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/qs/.jshintrc10
-rwxr-xr-xdeps/npm/node_modules/request/node_modules/qs/package.json2
-rw-r--r--deps/npm/node_modules/request/node_modules/stringstream/package.json5
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt2
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/README.md6
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json32
-rw-r--r--deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js12
-rw-r--r--deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc5
-rw-r--r--deps/npm/node_modules/request/node_modules/tunnel-agent/package.json5
-rwxr-xr-xdeps/npm/node_modules/request/package.json52
-rwxr-xr-xdeps/npm/node_modules/request/release.sh3
-rw-r--r--deps/npm/node_modules/request/request.js1491
-rw-r--r--deps/npm/node_modules/retry/Readme.md8
-rw-r--r--deps/npm/node_modules/retry/package.json28
-rw-r--r--deps/npm/node_modules/semver/README.md2
-rwxr-xr-xdeps/npm/node_modules/semver/bin/semver10
-rw-r--r--deps/npm/node_modules/semver/package.json23
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js62
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js.gzbin7391 -> 7595 bytes
-rw-r--r--deps/npm/node_modules/semver/semver.js62
-rw-r--r--deps/npm/node_modules/semver/semver.min.js2
-rw-r--r--deps/npm/node_modules/semver/semver.min.js.gzbin3397 -> 3472 bytes
-rw-r--r--deps/npm/node_modules/semver/test/clean.js6
-rw-r--r--deps/npm/node_modules/semver/test/gtr.js2
-rw-r--r--deps/npm/node_modules/semver/test/index.js66
-rw-r--r--deps/npm/node_modules/sha/.npmignore6
-rw-r--r--deps/npm/node_modules/sha/LICENSE90
-rw-r--r--deps/npm/node_modules/sha/README.md96
-rw-r--r--deps/npm/node_modules/sha/index.js238
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE41
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/README.md4
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/float.patch923
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js377
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js11
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js181
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/core-util-is/package.json3
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/package.json5
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/string_decoder/package.json3
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/package.json20
-rw-r--r--deps/npm/node_modules/sha/node_modules/readable-stream/readable.js1
-rw-r--r--deps/npm/node_modules/sha/package.json27
-rw-r--r--deps/npm/node_modules/wrappy/LICENSE15
-rw-r--r--deps/npm/node_modules/wrappy/README.md36
-rw-r--r--deps/npm/node_modules/wrappy/package.json52
-rw-r--r--deps/npm/node_modules/wrappy/test/basic.js51
-rw-r--r--deps/npm/node_modules/wrappy/wrappy.js33
-rw-r--r--deps/npm/node_modules/write-file-atomic/.npmignore4
-rw-r--r--deps/npm/node_modules/write-file-atomic/README.md44
-rw-r--r--deps/npm/node_modules/write-file-atomic/index.js45
-rw-r--r--deps/npm/node_modules/write-file-atomic/package.json56
-rw-r--r--deps/npm/node_modules/write-file-atomic/test/basic.js97
238 files changed, 5567 insertions, 3671 deletions
diff --git a/deps/npm/node_modules/archy/LICENSE b/deps/npm/node_modules/archy/LICENSE
new file mode 100644
index 0000000000..ee27ba4b44
--- /dev/null
+++ b/deps/npm/node_modules/archy/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/archy/README.markdown b/deps/npm/node_modules/archy/README.markdown
index deaba0fd1c..ef7a5cf34b 100644
--- a/deps/npm/node_modules/archy/README.markdown
+++ b/deps/npm/node_modules/archy/README.markdown
@@ -1,12 +1,12 @@
-archy
-=====
+# archy
Render nested hierarchies `npm ls` style with unicode pipes.
+[![browser support](http://ci.testling.com/substack/node-archy.png)](http://ci.testling.com/substack/node-archy)
+
[![build status](https://secure.travis-ci.org/substack/node-archy.png)](http://travis-ci.org/substack/node-archy)
-example
-=======
+# example
``` js
var archy = require('archy');
@@ -50,13 +50,11 @@ beep
time!
```
-methods
-=======
+# methods
var archy = require('archy')
-archy(obj, prefix='', opts={})
-------------------------------
+## archy(obj, prefix='', opts={})
Return a string representation of `obj` with unicode pipe characters like how
`npm ls` looks.
@@ -77,8 +75,7 @@ with the current prefix.
To disable unicode results in favor of all-ansi output set `opts.unicode` to
`false`.
-install
-=======
+# install
With [npm](http://npmjs.org) do:
@@ -86,7 +83,6 @@ With [npm](http://npmjs.org) do:
npm install archy
```
-license
-=======
+# license
-MIT/X11
+MIT
diff --git a/deps/npm/node_modules/archy/examples/beep.js b/deps/npm/node_modules/archy/examples/beep.js
new file mode 100644
index 0000000000..9c0704797c
--- /dev/null
+++ b/deps/npm/node_modules/archy/examples/beep.js
@@ -0,0 +1,24 @@
+var archy = require('../');
+var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
diff --git a/deps/npm/node_modules/archy/examples/multi_line.js b/deps/npm/node_modules/archy/examples/multi_line.js
new file mode 100644
index 0000000000..8afdfada91
--- /dev/null
+++ b/deps/npm/node_modules/archy/examples/multi_line.js
@@ -0,0 +1,25 @@
+var archy = require('../');
+
+var s = archy({
+ label : 'beep\none\ntwo',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O\nwheee',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny\nmeat' ]
+ },
+ 'creature'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
diff --git a/deps/npm/node_modules/archy/package.json b/deps/npm/node_modules/archy/package.json
index 81c3e2669d..4b3da66372 100644
--- a/deps/npm/node_modules/archy/package.json
+++ b/deps/npm/node_modules/archy/package.json
@@ -1,22 +1,42 @@
{
"name": "archy",
- "version": "0.0.2",
+ "version": "1.0.0",
"description": "render nested hierarchies `npm ls` style with unicode pipes",
"main": "index.js",
- "directories": {
- "lib": ".",
- "example": "example",
- "test": "test"
- },
"devDependencies": {
- "tap": "~0.2.3"
+ "tap": "~0.3.3",
+ "tape": "~0.1.1"
},
"scripts": {
"test": "tap test"
},
+ "testling": {
+ "files": "test/*.js",
+ "browsers": {
+ "iexplore": [
+ "6.0",
+ "7.0",
+ "8.0",
+ "9.0"
+ ],
+ "chrome": [
+ "20.0"
+ ],
+ "firefox": [
+ "10.0",
+ "15.0"
+ ],
+ "safari": [
+ "5.1"
+ ],
+ "opera": [
+ "12.0"
+ ]
+ }
+ },
"repository": {
"type": "git",
- "url": "git://github.com/substack/node-archy.git"
+ "url": "http://github.com/substack/node-archy.git"
},
"keywords": [
"hierarchy",
@@ -30,23 +50,30 @@
"email": "mail@substack.net",
"url": "http://substack.net"
},
- "license": "MIT/X11",
- "engine": {
- "node": ">=0.4"
+ "license": "MIT",
+ "gitHead": "30223c16191e877bf027b15b12daf077b9b55b84",
+ "bugs": {
+ "url": "https://github.com/substack/node-archy/issues"
},
+ "homepage": "https://github.com/substack/node-archy",
+ "_id": "archy@1.0.0",
+ "_shasum": "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40",
+ "_from": "archy@>=1.0.0 <2.0.0",
+ "_npmVersion": "1.4.25",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "_id": "archy@0.0.2",
- "dependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
- },
- "_engineSupported": true,
- "_npmVersion": "1.1.13",
- "_nodeVersion": "v0.7.7-pre",
- "_defaultsLoaded": true,
- "_from": "archy@0.0.2"
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "dist": {
+ "shasum": "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40",
+ "tarball": "http://registry.npmjs.org/archy/-/archy-1.0.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz"
}
diff --git a/deps/npm/node_modules/archy/test/beep.js b/deps/npm/node_modules/archy/test/beep.js
new file mode 100644
index 0000000000..4ea74f9cee
--- /dev/null
+++ b/deps/npm/node_modules/archy/test/beep.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+ var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party!'
+ ]
+ }
+ ]
+ });
+ t.equal(s, [
+ 'beep',
+ '├── ity',
+ '└─┬ boop',
+ ' ├─┬ o_O',
+ ' │ ├─┬ oh',
+ ' │ │ ├── hello',
+ ' │ │ └── puny',
+ ' │ └── human',
+ ' └── party!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/deps/npm/node_modules/archy/test/multi_line.js b/deps/npm/node_modules/archy/test/multi_line.js
new file mode 100644
index 0000000000..2cf2154d8a
--- /dev/null
+++ b/deps/npm/node_modules/archy/test/multi_line.js
@@ -0,0 +1,45 @@
+var test = require('tape');
+var archy = require('../');
+
+test('multi-line', function (t) {
+ var s = archy({
+ label : 'beep\none\ntwo',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O\nwheee',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny\nmeat' ]
+ },
+ 'creature'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+ });
+ t.equal(s, [
+ 'beep',
+ '│ one',
+ '│ two',
+ '├── ity',
+ '└─┬ boop',
+ ' ├─┬ o_O',
+ ' │ │ wheee',
+ ' │ ├─┬ oh',
+ ' │ │ ├── hello',
+ ' │ │ └── puny',
+ ' │ │ meat',
+ ' │ └── creature',
+ ' └── party',
+ ' time!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/deps/npm/node_modules/archy/test/non_unicode.js b/deps/npm/node_modules/archy/test/non_unicode.js
new file mode 100644
index 0000000000..7204d33271
--- /dev/null
+++ b/deps/npm/node_modules/archy/test/non_unicode.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+ var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party!'
+ ]
+ }
+ ]
+ }, '', { unicode : false });
+ t.equal(s, [
+ 'beep',
+ '+-- ity',
+ '`-- boop',
+ ' +-- o_O',
+ ' | +-- oh',
+ ' | | +-- hello',
+ ' | | `-- puny',
+ ' | `-- human',
+ ' `-- party!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/.npmignore b/deps/npm/node_modules/config-chain/.npmignore
index 13abef4f58..13abef4f58 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/.npmignore
+++ b/deps/npm/node_modules/config-chain/.npmignore
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/LICENCE b/deps/npm/node_modules/config-chain/LICENCE
index 171dd97005..171dd97005 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/LICENCE
+++ b/deps/npm/node_modules/config-chain/LICENCE
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/index.js b/deps/npm/node_modules/config-chain/index.js
index 0ef3a91f73..0ef3a91f73 100755
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/index.js
+++ b/deps/npm/node_modules/config-chain/index.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/LICENSE b/deps/npm/node_modules/config-chain/node_modules/proto-list/LICENSE
index 05a4010949..05a4010949 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/LICENSE
+++ b/deps/npm/node_modules/config-chain/node_modules/proto-list/LICENSE
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/README.md b/deps/npm/node_modules/config-chain/node_modules/proto-list/README.md
index 43cfa35893..43cfa35893 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/README.md
+++ b/deps/npm/node_modules/config-chain/node_modules/proto-list/README.md
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json b/deps/npm/node_modules/config-chain/node_modules/proto-list/package.json
index 391d876d2f..2dff2917c0 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
+++ b/deps/npm/node_modules/config-chain/node_modules/proto-list/package.json
@@ -29,7 +29,7 @@
"homepage": "https://github.com/isaacs/proto-list",
"_id": "proto-list@1.2.3",
"_shasum": "6235554a1bca1f0d15e3ca12ca7329d5def42bd9",
- "_from": "proto-list@>=1.2.1-0 <1.3.0-0",
+ "_from": "proto-list@~1.2.1",
"_npmVersion": "1.4.14",
"_npmUser": {
"name": "isaacs",
@@ -46,5 +46,6 @@
"tarball": "http://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz"
+ "_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/proto-list.js b/deps/npm/node_modules/config-chain/node_modules/proto-list/proto-list.js
index b55c25c052..b55c25c052 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/proto-list.js
+++ b/deps/npm/node_modules/config-chain/node_modules/proto-list/proto-list.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/test/basic.js b/deps/npm/node_modules/config-chain/node_modules/proto-list/test/basic.js
index 5cd66bef15..5cd66bef15 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/test/basic.js
+++ b/deps/npm/node_modules/config-chain/node_modules/proto-list/test/basic.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json b/deps/npm/node_modules/config-chain/package.json
index bec4626e6d..a07f2f4143 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
+++ b/deps/npm/node_modules/config-chain/package.json
@@ -32,7 +32,7 @@
"shasum": "0943d0b7227213a20d4eaff4434f4a1c0a052cad",
"tarball": "http://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz"
},
- "_from": "config-chain@>=1.1.8-0 <1.2.0-0",
+ "_from": "config-chain@^1.1.8",
"_npmVersion": "1.3.6",
"_npmUser": {
"name": "dominictarr",
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/readme.markdown b/deps/npm/node_modules/config-chain/readme.markdown
index c83a43067b..c83a43067b 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/readme.markdown
+++ b/deps/npm/node_modules/config-chain/readme.markdown
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/broken.js b/deps/npm/node_modules/config-chain/test/broken.js
index 101a3e4f5c..101a3e4f5c 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/broken.js
+++ b/deps/npm/node_modules/config-chain/test/broken.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/broken.json b/deps/npm/node_modules/config-chain/test/broken.json
index 2107ac18d9..2107ac18d9 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/broken.json
+++ b/deps/npm/node_modules/config-chain/test/broken.json
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/chain-class.js b/deps/npm/node_modules/config-chain/test/chain-class.js
index bbc0d4cb2d..bbc0d4cb2d 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/chain-class.js
+++ b/deps/npm/node_modules/config-chain/test/chain-class.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/env.js b/deps/npm/node_modules/config-chain/test/env.js
index fb718f32b7..fb718f32b7 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/env.js
+++ b/deps/npm/node_modules/config-chain/test/env.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/find-file.js b/deps/npm/node_modules/config-chain/test/find-file.js
index 23cde52ea9..23cde52ea9 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/find-file.js
+++ b/deps/npm/node_modules/config-chain/test/find-file.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js b/deps/npm/node_modules/config-chain/test/get.js
index d6fd79f74b..d6fd79f74b 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/get.js
+++ b/deps/npm/node_modules/config-chain/test/get.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/ignore-unfound-file.js b/deps/npm/node_modules/config-chain/test/ignore-unfound-file.js
index d742b82ba7..d742b82ba7 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/ignore-unfound-file.js
+++ b/deps/npm/node_modules/config-chain/test/ignore-unfound-file.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/ini.js b/deps/npm/node_modules/config-chain/test/ini.js
index 5572a6ed6f..5572a6ed6f 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/ini.js
+++ b/deps/npm/node_modules/config-chain/test/ini.js
diff --git a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/save.js b/deps/npm/node_modules/config-chain/test/save.js
index 783461317c..783461317c 100644
--- a/deps/npm/node_modules/npmconf/node_modules/config-chain/test/save.js
+++ b/deps/npm/node_modules/config-chain/test/save.js
diff --git a/deps/npm/node_modules/dezalgo/dezalgo.js b/deps/npm/node_modules/dezalgo/dezalgo.js
index cdc48aec8c..04fd3ba781 100644
--- a/deps/npm/node_modules/dezalgo/dezalgo.js
+++ b/deps/npm/node_modules/dezalgo/dezalgo.js
@@ -1,4 +1,5 @@
-module.exports = dezalgo
+var wrappy = require('wrappy')
+module.exports = wrappy(dezalgo)
var asap = require('asap')
diff --git a/deps/npm/node_modules/dezalgo/node_modules/asap/package.json b/deps/npm/node_modules/dezalgo/node_modules/asap/package.json
index 1237784d41..311f9fc0c7 100644
--- a/deps/npm/node_modules/dezalgo/node_modules/asap/package.json
+++ b/deps/npm/node_modules/dezalgo/node_modules/asap/package.json
@@ -21,7 +21,7 @@
"shasum": "b2a45da5fdfa20b0496fc3768cc27c12fa916a7d",
"tarball": "http://registry.npmjs.org/asap/-/asap-1.0.0.tgz"
},
- "_from": "asap@>=1.0.0-0 <2.0.0-0",
+ "_from": "asap@>=1.0.0 <2.0.0",
"_npmVersion": "1.2.15",
"_npmUser": {
"name": "kriskowal",
diff --git a/deps/npm/node_modules/dezalgo/package.json b/deps/npm/node_modules/dezalgo/package.json
index 072e2ad6f4..1f63e83a18 100644
--- a/deps/npm/node_modules/dezalgo/package.json
+++ b/deps/npm/node_modules/dezalgo/package.json
@@ -1,13 +1,14 @@
{
"name": "dezalgo",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "Contain async insanity so that the dark pony lord doesn't eat souls",
"main": "dezalgo.js",
"directories": {
"test": "test"
},
"dependencies": {
- "asap": "^1.0.0"
+ "asap": "^1.0.0",
+ "wrappy": "1"
},
"devDependencies": {
"tap": "^0.4.11"
@@ -42,11 +43,12 @@
"url": "https://github.com/npm/dezalgo/issues"
},
"homepage": "https://github.com/npm/dezalgo",
- "gitHead": "b10ea8ae0096d0e60c1acaa88d5334a9b372e4b0",
- "_id": "dezalgo@1.0.0",
- "_shasum": "050bb723f18b5617b309f26c2dc8fe6f2573b6fc",
- "_from": "dezalgo@1.0.0",
- "_npmVersion": "1.4.18",
+ "gitHead": "0a5eee75c179611f8b67f663015d68bb517e57d2",
+ "_id": "dezalgo@1.0.1",
+ "_shasum": "12bde135060807900d5a7aebb607c2abb7c76937",
+ "_from": "dezalgo@latest",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -58,9 +60,8 @@
}
],
"dist": {
- "shasum": "050bb723f18b5617b309f26c2dc8fe6f2573b6fc",
- "tarball": "http://registry.npmjs.org/dezalgo/-/dezalgo-1.0.0.tgz"
+ "shasum": "12bde135060807900d5a7aebb607c2abb7c76937",
+ "tarball": "http://registry.npmjs.org/dezalgo/-/dezalgo-1.0.1.tgz"
},
- "_resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.0.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.1.tgz"
}
diff --git a/deps/npm/node_modules/dezalgo/test/basic.js b/deps/npm/node_modules/dezalgo/test/basic.js
index cc10336e03..da09e724da 100644
--- a/deps/npm/node_modules/dezalgo/test/basic.js
+++ b/deps/npm/node_modules/dezalgo/test/basic.js
@@ -4,15 +4,19 @@ var dz = require('../dezalgo.js')
test('the dark pony', function(t) {
var n = 0
- function foo(cb) {
+ function foo(i, cb) {
cb = dz(cb)
- if (++n % 2) cb()
- else process.nextTick(cb)
+ if (++n % 2) cb(true, i)
+ else process.nextTick(cb.bind(null, false, i))
}
var called = 0
+ var order = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
+ var o = 0
for (var i = 0; i < 10; i++) {
- foo(function() {
+ foo(i, function(cached, i) {
+ t.equal(i, order[o++])
+ t.equal(i % 2, cached ? 0 : 1)
called++
})
t.equal(called, 0)
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/LICENSE b/deps/npm/node_modules/fs-write-stream-atomic/LICENSE
new file mode 100644
index 0000000000..19129e315f
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/README.md b/deps/npm/node_modules/fs-write-stream-atomic/README.md
new file mode 100644
index 0000000000..9a15d05676
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/README.md
@@ -0,0 +1,35 @@
+# fs-write-stream-atomic
+
+Like `fs.createWriteStream(...)`, but atomic.
+
+Writes to a tmp file and does an atomic `fs.rename` to move it into
+place when it's done.
+
+First rule of debugging: **It's always a race condition.**
+
+## USAGE
+
+```javascript
+var fsWriteStreamAtomic = require('fs-write-stream-atomic')
+// options are optional.
+var write = fsWriteStreamAtomic('output.txt', options)
+var read = fs.createReadStream('input.txt')
+read.pipe(write)
+
+// When the write stream emits a 'finish' or 'close' event,
+// you can be sure that it is moved into place, and contains
+// all the bytes that were written to it, even if something else
+// was writing to `output.txt` at the same time.
+```
+
+### `fsWriteStreamAtomic(filename, [options])`
+
+* `filename` {String} The file we want to write to
+* `options` {Object}
+ * `chown` {Object} User and group to set ownership after write
+ * `uid` {Number}
+ * `gid` {Number}
+ * `encoding` {String} default = 'utf8'
+ * `mode` {Number} default = `0666`
+ * `flags` {String} default = `'w'`
+
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/index.js b/deps/npm/node_modules/fs-write-stream-atomic/index.js
new file mode 100644
index 0000000000..42a9a8825e
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/index.js
@@ -0,0 +1,96 @@
+var fs = require('graceful-fs')
+var util = require('util')
+var crypto = require('crypto')
+
+function md5hex () {
+ var hash = crypto.createHash('md5')
+ for (var ii=0; ii<arguments.length; ++ii) {
+ hash.update(''+arguments[ii])
+ }
+ return hash.digest('hex')
+}
+
+var invocations = 0;
+function getTmpname (filename) {
+ return filename + "." + md5hex(__filename, process.pid, ++invocations)
+}
+
+module.exports = WriteStream
+
+util.inherits(WriteStream, fs.WriteStream)
+function WriteStream (path, options) {
+ if (!options)
+ options = {}
+
+ if (!(this instanceof WriteStream))
+ return new WriteStream(path, options)
+
+ this.__atomicTarget = path
+ this.__atomicChown = options.chown
+ this.__atomicDidStuff = false
+ this.__atomicTmp = getTmpname(path)
+
+ fs.WriteStream.call(this, this.__atomicTmp, options)
+}
+
+function cleanup (er) {
+ fs.unlink(this.__atomicTmp, function () {
+ fs.WriteStream.prototype.emit.call(this, 'error', er)
+ }.bind(this))
+}
+
+function cleanupSync (er) {
+ try {
+ fs.unlinkSync(this.__atomicTmp)
+ } finally {
+ return fs.WriteStream.prototype.emit.call(this, 'error', er)
+ }
+}
+
+// When we *would* emit 'close' or 'finish', instead do our stuff
+WriteStream.prototype.emit = function (ev) {
+ if (ev === 'error')
+ return cleanupSync(this)
+
+ if (ev !== 'close' && ev !== 'finish')
+ return fs.WriteStream.prototype.emit.apply(this, arguments)
+
+ // We handle emitting finish and close after the rename.
+ if (ev === 'close' || ev === 'finish') {
+ if (!this.__atomicDidStuff) {
+ atomicDoStuff.call(this, function (er) {
+ if (er)
+ cleanup.call(this, er)
+ }.bind(this))
+ }
+ }
+}
+
+function atomicDoStuff(cb) {
+ if (this.__atomicDidStuff)
+ throw new Error('Already did atomic move-into-place')
+
+ this.__atomicDidStuff = true
+ if (this.__atomicChown) {
+ var uid = this.__atomicChown.uid
+ var gid = this.__atomicChown.gid
+ return fs.chown(this.__atomicTmp, uid, gid, function (er) {
+ if (er) return cb(er)
+ moveIntoPlace.call(this, cb)
+ }.bind(this))
+ } else {
+ moveIntoPlace.call(this, cb)
+ }
+}
+
+function moveIntoPlace (cb) {
+ fs.rename(this.__atomicTmp, this.__atomicTarget, function (er) {
+ cb(er)
+ // emit finish, and then close on the next tick
+ // This makes finish/close consistent across Node versions also.
+ fs.WriteStream.prototype.emit.call(this, 'finish')
+ process.nextTick(function() {
+ fs.WriteStream.prototype.emit.call(this, 'close')
+ }.bind(this))
+ }.bind(this))
+}
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/package.json b/deps/npm/node_modules/fs-write-stream-atomic/package.json
new file mode 100644
index 0000000000..5cdd1a2e0d
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "fs-write-stream-atomic",
+ "version": "1.0.2",
+ "description": "Like `fs.createWriteStream(...)`, but atomic.",
+ "main": "index.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {
+ "graceful-fs": "^3.0.2"
+ },
+ "devDependencies": {
+ "tap": "^0.4.12"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/fs-write-stream-atomic"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/fs-write-stream-atomic/issues"
+ },
+ "homepage": "https://github.com/npm/fs-write-stream-atomic",
+ "gitHead": "86b111ed1d5db84e8a9680986ef7917036b9c97b",
+ "_id": "fs-write-stream-atomic@1.0.2",
+ "_shasum": "fe0c6cec75256072b2fef8180d97e309fe3f5efb",
+ "_from": "fs-write-stream-atomic@>=1.0.2 <1.1.0",
+ "_npmVersion": "2.1.0",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "fe0c6cec75256072b2fef8180d97e309fe3f5efb",
+ "tarball": "http://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.2.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.2.tgz"
+}
diff --git a/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js b/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js
new file mode 100644
index 0000000000..159c596ab0
--- /dev/null
+++ b/deps/npm/node_modules/fs-write-stream-atomic/test/basic.js
@@ -0,0 +1,89 @@
+var test = require('tap').test
+var writeStream = require('../index.js')
+var fs = require('fs')
+var path = require('path')
+
+test('basic', function (t) {
+ // open 10 write streams to the same file.
+ // then write to each of them, and to the target
+ // and verify at the end that each of them does their thing
+ var target = path.resolve(__dirname, 'test.txt')
+ var n = 10
+
+ var streams = []
+ for (var i = 0; i < n; i++) {
+ var s = writeStream(target)
+ s.on('finish', verifier('finish'))
+ s.on('close', verifier('close'))
+ streams.push(s)
+ }
+
+ var verifierCalled = 0
+ function verifier (ev) { return function () {
+ if (ev === 'close')
+ t.equal(this.__emittedFinish, true)
+ else {
+ this.__emittedFinish = true
+ t.equal(ev, 'finish')
+ }
+
+ // make sure that one of the atomic streams won.
+ var res = fs.readFileSync(target, 'utf8')
+ var lines = res.trim().split(/\n/)
+ lines.forEach(function (line) {
+ var first = lines[0].match(/\d+$/)[0]
+ var cur = line.match(/\d+$/)[0]
+ t.equal(cur, first)
+ })
+
+ var resExpr = /^first write \d+\nsecond write \d+\nthird write \d+\nfinal write \d+\n$/
+ t.similar(res, resExpr)
+
+ // should be called once for each close, and each finish
+ if (++verifierCalled === n * 2) {
+ t.end()
+ }
+ }}
+
+ // now write something to each stream.
+ streams.forEach(function (stream, i) {
+ stream.write('first write ' + i + '\n')
+ })
+
+ // wait a sec for those writes to go out.
+ setTimeout(function () {
+ // write something else to the target.
+ fs.writeFileSync(target, 'brutality!\n')
+
+ // write some more stuff.
+ streams.forEach(function (stream, i) {
+ stream.write('second write ' + i + '\n')
+ })
+
+ setTimeout(function () {
+ // Oops! Deleted the file!
+ fs.unlinkSync(target)
+
+ // write some more stuff.
+ streams.forEach(function (stream, i) {
+ stream.write('third write ' + i + '\n')
+ })
+
+ setTimeout(function () {
+ fs.writeFileSync(target, 'brutality TWO!\n')
+ streams.forEach(function (stream, i) {
+ stream.end('final write ' + i + '\n')
+ })
+ }, 50)
+ }, 50)
+ }, 50)
+})
+
+test('cleanup', function (t) {
+ fs.readdirSync(__dirname).filter(function (f) {
+ return f.match(/^test.txt/)
+ }).forEach(function (file) {
+ fs.unlinkSync(path.resolve(__dirname, file))
+ })
+ t.end()
+})
diff --git a/deps/npm/node_modules/fstream-npm/fstream-npm.js b/deps/npm/node_modules/fstream-npm/fstream-npm.js
index ca05880a67..863f588454 100644
--- a/deps/npm/node_modules/fstream-npm/fstream-npm.js
+++ b/deps/npm/node_modules/fstream-npm/fstream-npm.js
@@ -93,6 +93,12 @@ Packer.prototype.applyIgnores = function (entry, partial, entryObj) {
// readme files should never be ignored.
if (entry.match(/^readme(\.[^\.]*)$/i)) return true
+ // license files should never be ignored.
+ if (entry.match(/^(license|licence)(\.[^\.]*)?$/i)) return true
+
+ // changelogs should never be ignored.
+ if (entry.match(/^(changes|changelog|history)(\.[^\.]*)?$/i)) return true
+
// special rules. see below.
if (entry === "node_modules" && this.packageRoot) return true
diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
index 558d3dc909..29e508673a 100644
--- a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
+++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
@@ -26,8 +26,6 @@
"mkdirp": ""
},
"license": "ISC",
- "readme": "# fstream-ignore\n\nA fstream DirReader that filters out files that match globs in `.ignore`\nfiles throughout the tree, like how git ignores files based on a\n`.gitignore` file.\n\nHere's an example:\n\n```javascript\nvar Ignore = require(\"fstream-ignore\")\nIgnore({ path: __dirname\n , ignoreFiles: [\".ignore\", \".gitignore\"]\n })\n .on(\"child\", function (c) {\n console.error(c.path.substr(c.root.path.length + 1))\n })\n .pipe(tar.Pack())\n .pipe(fs.createWriteStream(\"foo.tar\"))\n```\n\nThis will tar up the files in __dirname into `foo.tar`, ignoring\nanything matched by the globs in any .iginore or .gitignore file.\n",
- "readmeFilename": "README.md",
"gitHead": "290f2b621fa4f8fe3eec97307d22527fa2065375",
"bugs": {
"url": "https://github.com/isaacs/fstream-ignore/issues"
@@ -35,5 +33,23 @@
"homepage": "https://github.com/isaacs/fstream-ignore",
"_id": "fstream-ignore@1.0.1",
"_shasum": "153df36c4fa2cb006fb915dc71ac9d75f6a17c82",
- "_from": "fstream-ignore@^1.0.0"
+ "_from": "fstream-ignore@>=1.0.0 <2.0.0",
+ "_npmVersion": "1.4.22",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "153df36c4fa2cb006fb915dc71ac9d75f6a17c82",
+ "tarball": "http://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json
index 31a5af5d36..e7de77086a 100644
--- a/deps/npm/node_modules/fstream-npm/package.json
+++ b/deps/npm/node_modules/fstream-npm/package.json
@@ -6,7 +6,7 @@
},
"name": "fstream-npm",
"description": "fstream class for creating npm packages",
- "version": "1.0.0",
+ "version": "1.0.1",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream-npm.git"
@@ -17,15 +17,31 @@
"inherits": "2"
},
"license": "ISC",
- "readme": "# fstream-npm\n\nThis is an fstream DirReader class that will read a directory and filter\nthings according to the semantics of what goes in an npm package.\n\nFor example:\n\n```javascript\n// This will print out all the files that would be included\n// by 'npm publish' or 'npm install' of this directory.\n\nvar FN = require(\"fstream-npm\")\nFN({ path: \"./\" })\n .on(\"child\", function (e) {\n console.error(e.path.substr(e.root.path.length + 1))\n })\n```\n\n",
- "readmeFilename": "README.md",
- "gitHead": "807e0a8653ab793dc2e1b3b798e6256d09f972e7",
+ "gitHead": "4a95e1903f93dc122320349bb55e367ddd08ad6b",
"bugs": {
"url": "https://github.com/isaacs/fstream-npm/issues"
},
"homepage": "https://github.com/isaacs/fstream-npm",
- "_id": "fstream-npm@1.0.0",
+ "_id": "fstream-npm@1.0.1",
"scripts": {},
- "_shasum": "0262c95c771d393e7cf59fcfeabce621703f3d27",
- "_from": "fstream-npm@latest"
+ "_shasum": "1e35c77f0fa24f5d6367e6d447ae7d6ddb482db2",
+ "_from": "fstream-npm@>=1.0.1 <1.1.0",
+ "_npmVersion": "2.1.3",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "1e35c77f0fa24f5d6367e6d447ae7d6ddb482db2",
+ "tarball": "http://registry.npmjs.org/fstream-npm/-/fstream-npm-1.0.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/fstream-npm/-/fstream-npm-1.0.1.tgz"
}
diff --git a/deps/npm/node_modules/glob/README.md b/deps/npm/node_modules/glob/README.md
index cc69164510..82b7ef6d61 100644
--- a/deps/npm/node_modules/glob/README.md
+++ b/deps/npm/node_modules/glob/README.md
@@ -5,16 +5,7 @@ Match files using the patterns the shell uses, like stars and stuff.
This is a glob implementation in JavaScript. It uses the `minimatch`
library to do its matching.
-## Attention: node-glob users!
-
-The API has changed dramatically between 2.x and 3.x. This library is
-now 100% JavaScript, and the integer flags have been replaced with an
-options object.
-
-Also, there's an event emitter class, proper tests, and all the other
-things you've come to expect from node modules.
-
-And best of all, no compilation!
+![](oh-my-glob.gif)
## Usage
diff --git a/deps/npm/node_modules/glob/glob.js b/deps/npm/node_modules/glob/glob.js
index 6941fc7cf1..564f3b1217 100644
--- a/deps/npm/node_modules/glob/glob.js
+++ b/deps/npm/node_modules/glob/glob.js
@@ -36,10 +36,8 @@
module.exports = glob
-var fs
-try { fs = require("graceful-fs") } catch (e) { fs = require("fs") }
-
-var minimatch = require("minimatch")
+var fs = require("graceful-fs")
+, minimatch = require("minimatch")
, Minimatch = minimatch.Minimatch
, inherits = require("inherits")
, EE = require("events").EventEmitter
diff --git a/deps/npm/node_modules/glob/oh-my-glob.gif b/deps/npm/node_modules/glob/oh-my-glob.gif
new file mode 100644
index 0000000000..a1568c13ca
--- /dev/null
+++ b/deps/npm/node_modules/glob/oh-my-glob.gif
Binary files differ
diff --git a/deps/npm/node_modules/glob/package.json b/deps/npm/node_modules/glob/package.json
index 5905b40cd4..6bf85e8dfe 100644
--- a/deps/npm/node_modules/glob/package.json
+++ b/deps/npm/node_modules/glob/package.json
@@ -6,7 +6,7 @@
},
"name": "glob",
"description": "a little globber",
- "version": "4.0.5",
+ "version": "4.0.6",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
@@ -15,14 +15,11 @@
"engines": {
"node": "*"
},
- "optionalDependencies": {
- "graceful-fs": "^3.0.2"
- },
"dependencies": {
+ "graceful-fs": "^3.0.2",
"inherits": "2",
"minimatch": "^1.0.0",
- "once": "^1.3.0",
- "graceful-fs": "^3.0.2"
+ "once": "^1.3.0"
},
"devDependencies": {
"tap": "~0.4.0",
@@ -34,15 +31,16 @@
"test-regen": "TEST_REGEN=1 node test/00-setup.js"
},
"license": "ISC",
- "gitHead": "a7d85acf4e89fa26d17396ab022ef98fbe1f8a4b",
+ "gitHead": "6825c425e738eaffa315d8cdb1a4c3255ededcb3",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
"homepage": "https://github.com/isaacs/node-glob",
- "_id": "glob@4.0.5",
- "_shasum": "95e42c9efdb3ab1f4788fd7793dfded4a3378063",
- "_from": "glob@latest",
- "_npmVersion": "1.4.21",
+ "_id": "glob@4.0.6",
+ "_shasum": "695c50bdd4e2fb5c5d370b091f388d3707e291a7",
+ "_from": "glob@>=4.0.6 <5.0.0",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -54,9 +52,10 @@
}
],
"dist": {
- "shasum": "95e42c9efdb3ab1f4788fd7793dfded4a3378063",
- "tarball": "http://registry.npmjs.org/glob/-/glob-4.0.5.tgz"
+ "shasum": "695c50bdd4e2fb5c5d370b091f388d3707e291a7",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-4.0.6.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/glob/-/glob-4.0.5.tgz"
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-4.0.6.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/glob/test/negation-test.js b/deps/npm/node_modules/glob/test/negation-test.js
new file mode 100644
index 0000000000..fc679e2cf8
--- /dev/null
+++ b/deps/npm/node_modules/glob/test/negation-test.js
@@ -0,0 +1,16 @@
+// Negation test
+// Show that glob respect's minimatch's negate flag
+
+var glob = require('../glob.js')
+var test = require('tap').test
+
+test('glob respects minimatch negate flag when activated with leading !', function(t) {
+ var expect = ["abcdef/g", "abcfed/g", "c/d", "cb/e", "symlink/a"]
+ var results = glob("!b**/*", {cwd: 'a'}, function (er, results) {
+ if (er)
+ throw er
+
+ t.same(results, expect)
+ t.end()
+ });
+});
diff --git a/deps/npm/node_modules/graceful-fs/package.json b/deps/npm/node_modules/graceful-fs/package.json
index a77f90c7dc..57ce64885a 100644
--- a/deps/npm/node_modules/graceful-fs/package.json
+++ b/deps/npm/node_modules/graceful-fs/package.json
@@ -6,7 +6,7 @@
},
"name": "graceful-fs",
"description": "A drop-in replacement for fs, making various improvements.",
- "version": "3.0.2",
+ "version": "3.0.4",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-graceful-fs.git"
@@ -38,15 +38,20 @@
"EACCESS"
],
"license": "BSD",
- "gitHead": "0caa11544c0c9001db78bf593cf0c5805d149a41",
+ "devDependencies": {
+ "mkdirp": "^0.5.0",
+ "rimraf": "^2.2.8",
+ "tap": "^0.4.13"
+ },
+ "gitHead": "d3fd03247ccc4fa8a3eee399307fd266c70efb06",
"bugs": {
"url": "https://github.com/isaacs/node-graceful-fs/issues"
},
"homepage": "https://github.com/isaacs/node-graceful-fs",
- "_id": "graceful-fs@3.0.2",
- "_shasum": "2cb5bf7f742bea8ad47c754caeee032b7e71a577",
- "_from": "graceful-fs@~3.0.0",
- "_npmVersion": "1.4.14",
+ "_id": "graceful-fs@3.0.4",
+ "_shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3",
+ "_from": "graceful-fs@>=3.0.4 <4.0.0",
+ "_npmVersion": "1.4.28",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -58,8 +63,9 @@
}
],
"dist": {
- "shasum": "2cb5bf7f742bea8ad47c754caeee032b7e71a577",
- "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz"
+ "shasum": "a0306d9b0940e0fc512d33b5df1014e88e0637a3",
+ "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz"
},
- "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz"
+ "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/graceful-fs/test/max-open.js b/deps/npm/node_modules/graceful-fs/test/max-open.js
new file mode 100644
index 0000000000..44d52679b9
--- /dev/null
+++ b/deps/npm/node_modules/graceful-fs/test/max-open.js
@@ -0,0 +1,69 @@
+var test = require('tap').test
+var fs = require('../')
+
+test('open lots of stuff', function (t) {
+ // Get around EBADF from libuv by making sure that stderr is opened
+ // Otherwise Darwin will refuse to give us a FD for stderr!
+ process.stderr.write('')
+
+ // How many parallel open()'s to do
+ var n = 1024
+ var opens = 0
+ var fds = []
+ var going = true
+ var closing = false
+ var doneCalled = 0
+
+ for (var i = 0; i < n; i++) {
+ go()
+ }
+
+ function go() {
+ opens++
+ fs.open(__filename, 'r', function (er, fd) {
+ if (er) throw er
+ fds.push(fd)
+ if (going) go()
+ })
+ }
+
+ // should hit ulimit pretty fast
+ setTimeout(function () {
+ going = false
+ t.equal(opens - fds.length, n)
+ done()
+ }, 100)
+
+
+ function done () {
+ if (closing) return
+ doneCalled++
+
+ if (fds.length === 0) {
+ //console.error('done called %d times', doneCalled)
+ // First because of the timeout
+ // Then to close the fd's opened afterwards
+ // Then this time, to complete.
+ // Might take multiple passes, depending on CPU speed
+ // and ulimit, but at least 3 in every case.
+ t.ok(doneCalled >= 3)
+ return t.end()
+ }
+
+ closing = true
+ setTimeout(function () {
+ // console.error('do closing again')
+ closing = false
+ done()
+ }, 100)
+
+ // console.error('closing time')
+ var closes = fds.slice(0)
+ fds.length = 0
+ closes.forEach(function (fd) {
+ fs.close(fd, function (er) {
+ if (er) throw er
+ })
+ })
+ }
+})
diff --git a/deps/npm/node_modules/graceful-fs/test/readdir-sort.js b/deps/npm/node_modules/graceful-fs/test/readdir-sort.js
index fe005aa7a2..cb63a6846e 100644
--- a/deps/npm/node_modules/graceful-fs/test/readdir-sort.js
+++ b/deps/npm/node_modules/graceful-fs/test/readdir-sort.js
@@ -14,7 +14,6 @@ test("readdir reorder", function (t) {
g.readdir("whatevers", function (er, files) {
if (er)
throw er
- console.error(files)
t.same(files, [ "a", "b", "z" ])
t.end()
})
diff --git a/deps/npm/node_modules/graceful-fs/test/write-then-read.js b/deps/npm/node_modules/graceful-fs/test/write-then-read.js
new file mode 100644
index 0000000000..3a3db54b0c
--- /dev/null
+++ b/deps/npm/node_modules/graceful-fs/test/write-then-read.js
@@ -0,0 +1,45 @@
+var fs = require('../');
+var rimraf = require('rimraf');
+var mkdirp = require('mkdirp');
+var test = require('tap').test;
+var p = require('path').resolve(__dirname, 'files');
+
+// Make sure to reserve the stderr fd
+process.stderr.write('');
+
+var num = 4097;
+var paths = new Array(num);
+
+test('make files', function (t) {
+ rimraf.sync(p);
+ mkdirp.sync(p);
+
+ for (var i = 0; i < num; ++i) {
+ paths[i] = 'files/file-' + i;
+ fs.writeFileSync(paths[i], 'content');
+ }
+
+ t.end();
+})
+
+test('read files', function (t) {
+ // now read them
+ var done = 0;
+ for (var i = 0; i < num; ++i) {
+ fs.readFile(paths[i], function(err, data) {
+ if (err)
+ throw err;
+
+ ++done;
+ if (done === num) {
+ t.pass('success');
+ t.end()
+ }
+ });
+ }
+});
+
+test('cleanup', function (t) {
+ rimraf.sync(p);
+ t.end();
+});
diff --git a/deps/npm/node_modules/inflight/.eslintrc b/deps/npm/node_modules/inflight/.eslintrc
new file mode 100644
index 0000000000..b7a1550efc
--- /dev/null
+++ b/deps/npm/node_modules/inflight/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "env" : {
+ "node" : true
+ },
+ "rules" : {
+ "semi": [2, "never"],
+ "strict": 0,
+ "quotes": [1, "single", "avoid-escape"],
+ "no-use-before-define": 0,
+ "curly": 0,
+ "no-underscore-dangle": 0,
+ "no-lonely-if": 1,
+ "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
+ "no-mixed-requires": 0,
+ "space-infix-ops": 0
+ }
+}
diff --git a/deps/npm/node_modules/inflight/inflight.js b/deps/npm/node_modules/inflight/inflight.js
index 1fe279f9ad..8bc96cbd37 100644
--- a/deps/npm/node_modules/inflight/inflight.js
+++ b/deps/npm/node_modules/inflight/inflight.js
@@ -1,8 +1,9 @@
-module.exports = inflight
-
+var wrappy = require('wrappy')
var reqs = Object.create(null)
var once = require('once')
+module.exports = wrappy(inflight)
+
function inflight (key, cb) {
if (reqs[key]) {
reqs[key].push(cb)
@@ -13,13 +14,31 @@ function inflight (key, cb) {
}
}
-function makeres(key) {
- return once(res)
- function res(error, data) {
+function makeres (key) {
+ return once(function RES () {
var cbs = reqs[key]
- delete reqs[key]
- cbs.forEach(function(cb) {
- cb(error, data)
- })
- }
+ var len = cbs.length
+ var args = slice(arguments)
+ for (var i = 0; i < len; i++) {
+ cbs[i].apply(null, args)
+ }
+ if (cbs.length > len) {
+ // added more in the interim.
+ // de-zalgo, just in case, but don't call again.
+ cbs.splice(0, len)
+ process.nextTick(function () {
+ RES.apply(null, args)
+ })
+ } else {
+ delete reqs[key]
+ }
+ })
+}
+
+function slice (args) {
+ var length = args.length
+ var array = []
+
+ for (var i = 0; i < length; i++) array[i] = args[i]
+ return array
}
diff --git a/deps/npm/node_modules/inflight/package.json b/deps/npm/node_modules/inflight/package.json
index f4e294aadf..e0b63729cc 100644
--- a/deps/npm/node_modules/inflight/package.json
+++ b/deps/npm/node_modules/inflight/package.json
@@ -1,10 +1,11 @@
{
"name": "inflight",
- "version": "1.0.1",
+ "version": "1.0.4",
"description": "Add callbacks to requests in flight to avoid async duplication",
"main": "inflight.js",
"dependencies": {
- "once": "^1.3.0"
+ "once": "^1.3.0",
+ "wrappy": "1"
},
"devDependencies": {
"tap": "^0.4.10"
@@ -26,25 +27,10 @@
},
"homepage": "https://github.com/isaacs/inflight",
"license": "ISC",
- "_id": "inflight@1.0.1",
- "_shasum": "01f6911821535243c790ac0f998f54e9023ffb6f",
- "_from": "inflight@~1.0.1",
- "_npmVersion": "1.4.9",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "dist": {
- "shasum": "01f6911821535243c790ac0f998f54e9023ffb6f",
- "tarball": "http://registry.npmjs.org/inflight/-/inflight-1.0.1.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.1.tgz",
- "readme": "ERROR: No README data found!"
+ "readme": "# inflight\n\nAdd callbacks to requests in flight to avoid async duplication\n\n## USAGE\n\n```javascript\nvar inflight = require('inflight')\n\n// some request that does some stuff\nfunction req(key, callback) {\n // key is any random string. like a url or filename or whatever.\n //\n // will return either a falsey value, indicating that the\n // request for this key is already in flight, or a new callback\n // which when called will call all callbacks passed to inflightk\n // with the same key\n callback = inflight(key, callback)\n\n // If we got a falsey value back, then there's already a req going\n if (!callback) return\n\n // this is where you'd fetch the url or whatever\n // callback is also once()-ified, so it can safely be assigned\n // to multiple events etc. First call wins.\n setTimeout(function() {\n callback(null, key)\n }, 100)\n}\n\n// only assigns a single setTimeout\n// when it dings, all cbs get called\nreq('foo', cb1)\nreq('foo', cb2)\nreq('foo', cb3)\nreq('foo', cb4)\n```\n",
+ "readmeFilename": "README.md",
+ "gitHead": "c7b5531d572a867064d4a1da9e013e8910b7d1ba",
+ "_id": "inflight@1.0.4",
+ "_shasum": "6cbb4521ebd51ce0ec0a936bfd7657ef7e9b172a",
+ "_from": "inflight@>=1.0.4 <1.1.0"
}
diff --git a/deps/npm/node_modules/inflight/test.js b/deps/npm/node_modules/inflight/test.js
index 28fc145034..2bb75b3881 100644
--- a/deps/npm/node_modules/inflight/test.js
+++ b/deps/npm/node_modules/inflight/test.js
@@ -31,3 +31,67 @@ test('basic', function (t) {
t.notOk(b, 'second should get falsey inflight response')
})
+
+test('timing', function (t) {
+ var expect = [
+ 'method one',
+ 'start one',
+ 'end one',
+ 'two',
+ 'tick',
+ 'three'
+ ]
+ var i = 0
+
+ function log (m) {
+ t.equal(m, expect[i], m + ' === ' + expect[i])
+ ++i
+ if (i === expect.length)
+ t.end()
+ }
+
+ function method (name, cb) {
+ log('method ' + name)
+ process.nextTick(cb)
+ }
+
+ var one = inf('foo', function () {
+ log('start one')
+ var three = inf('foo', function () {
+ log('three')
+ })
+ if (three) method('three', three)
+ log('end one')
+ })
+
+ method('one', one)
+
+ var two = inf('foo', function () {
+ log('two')
+ })
+ if (two) method('one', two)
+
+ process.nextTick(log.bind(null, 'tick'))
+})
+
+test('parameters', function (t) {
+ t.plan(8)
+
+ var a = inf('key', function (first, second, third) {
+ t.equal(first, 1)
+ t.equal(second, 2)
+ t.equal(third, 3)
+ })
+ t.ok(a, 'first returned cb function')
+
+ var b = inf('key', function (first, second, third) {
+ t.equal(first, 1)
+ t.equal(second, 2)
+ t.equal(third, 3)
+ })
+ t.notOk(b, 'second should get falsey inflight response')
+
+ setTimeout(function () {
+ a(1, 2, 3)
+ })
+})
diff --git a/deps/npm/node_modules/inherits/package.json b/deps/npm/node_modules/inherits/package.json
index 3b4843a6d6..a0cd426836 100644
--- a/deps/npm/node_modules/inherits/package.json
+++ b/deps/npm/node_modules/inherits/package.json
@@ -28,5 +28,24 @@
"url": "https://github.com/isaacs/inherits/issues"
},
"_id": "inherits@2.0.1",
- "_from": "inherits@"
+ "dist": {
+ "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
+ "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ },
+ "_from": "inherits@latest",
+ "_npmVersion": "1.3.8",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
+ "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "homepage": "https://github.com/isaacs/inherits"
}
diff --git a/deps/npm/node_modules/ini/README.md b/deps/npm/node_modules/ini/README.md
index acbe8ec895..33df258297 100644
--- a/deps/npm/node_modules/ini/README.md
+++ b/deps/npm/node_modules/ini/README.md
@@ -1,7 +1,7 @@
An ini format parser and serializer for node.
-Sections are treated as nested objects. Items before the first heading
-are saved on the object directly.
+Sections are treated as nested objects. Items before the first
+heading are saved on the object directly.
## Usage
@@ -34,40 +34,62 @@ You can read, manipulate and write the ini-file like so:
delete config.paths.default.datadir
config.paths.default.array.push('fourth value')
- fs.writeFileSync('./config_modified.ini', ini.stringify(config, 'section'))
+ fs.writeFileSync('./config_modified.ini', ini.stringify(config, { section: 'section' }))
-This will result in a file called `config_modified.ini` being written to the filesystem with the following content:
+This will result in a file called `config_modified.ini` being written
+to the filesystem with the following content:
[section]
- scope = local
+ scope=local
[section.database]
- user = dbuser
- password = dbpassword
- database = use_another_database
+ user=dbuser
+ password=dbpassword
+ database=use_another_database
[section.paths.default]
- tmpdir = /tmp
- array[] = first value
- array[] = second value
- array[] = third value
- array[] = fourth value
+ tmpdir=/tmp
+ array[]=first value
+ array[]=second value
+ array[]=third value
+ array[]=fourth value
## API
### decode(inistring)
+
Decode the ini-style formatted `inistring` into a nested object.
### parse(inistring)
+
Alias for `decode(inistring)`
-### encode(object, [section])
-Encode the object `object` into an ini-style formatted string. If the optional parameter `section` is given, then all top-level properties of the object are put into this section and the `section`-string is prepended to all sub-sections, see the usage example above.
+### encode(object, [options])
-### stringify(object, [section])
-Alias for `encode(object, [section])`
+Encode the object `object` into an ini-style formatted string. If the
+optional parameter `section` is given, then all top-level properties
+of the object are put into this section and the `section`-string is
+prepended to all sub-sections, see the usage example above.
+
+The `options` object may contain the following:
+
+* `section` A string which will be the first `section` in the encoded
+ ini data. Defaults to none.
+* `whitespace` Boolean to specify whether to put whitespace around the
+ `=` character. By default, whitespace is omitted, to be friendly to
+ some persnickety old parsers that don't tolerate it well. But some
+ find that it's more human-readable and pretty with the whitespace.
+
+For backwards compatibility reasons, if a `string` options is passed
+in, then it is assumed to be the `section` value.
+
+### stringify(object, [options])
+
+Alias for `encode(object, [options])`
### safe(val)
-Escapes the string `val` such that it is safe to be used as a key or value in an ini-file. Basically escapes quotes. For example
+
+Escapes the string `val` such that it is safe to be used as a key or
+value in an ini-file. Basically escapes quotes. For example
ini.safe('"unsafe string"')
@@ -76,4 +98,5 @@ would result in
"\"unsafe string\""
### unsafe(val)
+
Unescapes the string `val`
diff --git a/deps/npm/node_modules/ini/ini.js b/deps/npm/node_modules/ini/ini.js
index f5e4441186..1e232e7438 100644
--- a/deps/npm/node_modules/ini/ini.js
+++ b/deps/npm/node_modules/ini/ini.js
@@ -7,31 +7,47 @@ exports.unsafe = unsafe
var eol = process.platform === "win32" ? "\r\n" : "\n"
-function encode (obj, section) {
+function encode (obj, opt) {
var children = []
, out = ""
+ if (typeof opt === "string") {
+ opt = {
+ section: opt,
+ whitespace: false
+ }
+ } else {
+ opt = opt || {}
+ opt.whitespace = opt.whitespace === true
+ }
+
+ var separator = opt.whitespace ? " = " : "="
+
Object.keys(obj).forEach(function (k, _, __) {
var val = obj[k]
if (val && Array.isArray(val)) {
val.forEach(function(item) {
- out += safe(k + "[]") + "=" + safe(item) + "\n"
+ out += safe(k + "[]") + separator + safe(item) + "\n"
})
}
else if (val && typeof val === "object") {
children.push(k)
} else {
- out += safe(k) + "=" + safe(val) + eol
+ out += safe(k) + separator + safe(val) + eol
}
})
- if (section && out.length) {
- out = "[" + safe(section) + "]" + eol + out
+ if (opt.section && out.length) {
+ out = "[" + safe(opt.section) + "]" + eol + out
}
children.forEach(function (k, _, __) {
var nk = dotSplit(k).join('\\.')
- var child = encode(obj[k], (section ? section + "." : "") + nk)
+ var section = (opt.section ? opt.section + "." : "") + nk
+ var child = encode(obj[k], {
+ section: section,
+ whitespace: opt.whitespace
+ })
if (out.length && child.length) {
out += eol
}
diff --git a/deps/npm/node_modules/ini/package.json b/deps/npm/node_modules/ini/package.json
index 5212afb063..3042c40627 100644
--- a/deps/npm/node_modules/ini/package.json
+++ b/deps/npm/node_modules/ini/package.json
@@ -6,7 +6,7 @@
},
"name": "ini",
"description": "An ini encoder/decoder for node",
- "version": "1.2.1",
+ "version": "1.3.0",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/ini.git"
@@ -22,15 +22,15 @@
"devDependencies": {
"tap": "~0.4.0"
},
- "gitHead": "13498ce1ba5a6a20cd77ed2b55de0e714786f70c",
+ "gitHead": "6c314944d0201f3199e1189aeb5687d0aaf1c575",
"bugs": {
"url": "https://github.com/isaacs/ini/issues"
},
"homepage": "https://github.com/isaacs/ini",
- "_id": "ini@1.2.1",
- "_shasum": "7f774e2f22752cd1dacbf9c63323df2a164ebca3",
- "_from": "ini@latest",
- "_npmVersion": "1.4.11",
+ "_id": "ini@1.3.0",
+ "_shasum": "625483e56c643a7721014c76604d3353f44bd429",
+ "_from": "ini@>=1.3.0 <2.0.0",
+ "_npmVersion": "2.0.0",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -42,9 +42,10 @@
}
],
"dist": {
- "shasum": "7f774e2f22752cd1dacbf9c63323df2a164ebca3",
- "tarball": "http://registry.npmjs.org/ini/-/ini-1.2.1.tgz"
+ "shasum": "625483e56c643a7721014c76604d3353f44bd429",
+ "tarball": "http://registry.npmjs.org/ini/-/ini-1.3.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/ini/-/ini-1.2.1.tgz"
+ "_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.0.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/ini/test/foo.js b/deps/npm/node_modules/ini/test/foo.js
index 5c59890e8b..9d34aa6fda 100644
--- a/deps/npm/node_modules/ini/test/foo.js
+++ b/deps/npm/node_modules/ini/test/foo.js
@@ -59,6 +59,16 @@ var i = require("../")
}
}
}
+ , expectF = '[prefix.log]\n'
+ + 'type=file\n\n'
+ + '[prefix.log.level]\n'
+ + 'label=debug\n'
+ + 'value=10\n'
+ , expectG = '[log]\n'
+ + 'type = file\n\n'
+ + '[log.level]\n'
+ + 'label = debug\n'
+ + 'value = 10\n'
test("decode from file", function (t) {
var d = i.decode(data)
@@ -77,3 +87,19 @@ test("encode from data", function (t) {
t.end()
})
+
+test("encode with option", function (t) {
+ var obj = {log: { type:'file', level: {label:'debug', value:10} } }
+ e = i.encode(obj, {section: 'prefix'})
+
+ t.equal(e, expectF)
+ t.end()
+})
+
+test("encode with whitespace", function (t) {
+ var obj = {log: { type:'file', level: {label:'debug', value:10} } }
+ e = i.encode(obj, {whitespace: true})
+
+ t.equal(e, expectG)
+ t.end()
+})
diff --git a/deps/npm/node_modules/init-package-json/.npmignore b/deps/npm/node_modules/init-package-json/.npmignore
new file mode 100644
index 0000000000..44a3be18e8
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/.npmignore
@@ -0,0 +1,2 @@
+node_modules/
+.eslintrc
diff --git a/deps/npm/node_modules/init-package-json/default-input.js b/deps/npm/node_modules/init-package-json/default-input.js
index 8b335f9674..c86894b26a 100644
--- a/deps/npm/node_modules/init-package-json/default-input.js
+++ b/deps/npm/node_modules/init-package-json/default-input.js
@@ -38,11 +38,14 @@ function readDeps (test) { return function (cb) {
})
}}
+var name = package.name || basename
+exports.name = yes ? name : prompt('name', name)
+
+var version = package.version || config.get('init-version') || '1.0.0'
+exports.version = yes ? version : prompt('version', version)
-exports.name = prompt('name', package.name || basename)
-exports.version = prompt('version', package.version || config.get('init.version') || '1.0.0')
if (!package.description) {
- exports.description = prompt('description')
+ exports.description = yes ? '' : prompt('description')
}
if (!package.main) {
@@ -63,7 +66,8 @@ if (!package.main) {
else
f = f[0]
- return cb(null, prompt('entry point', f || 'index.js'))
+ var index = f || 'index.js'
+ return cb(null, yes ? index : prompt('entry point', index))
})
}
}
@@ -121,26 +125,32 @@ function setupScripts (d, cb) {
function tx (test) {
return test || notest
}
-
if (!s.test || s.test === notest) {
- if (d.indexOf('tap') !== -1)
- s.test = prompt('test command', 'tap test/*.js', tx)
- else if (d.indexOf('expresso') !== -1)
- s.test = prompt('test command', 'expresso test', tx)
- else if (d.indexOf('mocha') !== -1)
- s.test = prompt('test command', 'mocha', tx)
- else
- s.test = prompt('test command', tx)
+ var commands = {
+ 'tap':'tap test/*.js'
+ , 'expresso':'expresso test'
+ , 'mocha':'mocha'
+ }
+ var command
+ Object.keys(commands).forEach(function (k) {
+ if (d.indexOf(k) !== -1) command = commands[k]
+ })
+ var ps = 'test command'
+ if (yes) {
+ s.test = command || notest
+ } else {
+ s.test = command ? prompt(ps, command, tx) : prompt(ps, tx)
+ }
}
-
return cb(null, s)
}
if (!package.repository) {
exports.repository = function (cb) {
fs.readFile('.git/config', 'utf8', function (er, gconf) {
- if (er || !gconf) return cb(null, prompt('git repository'))
-
+ if (er || !gconf) {
+ return cb(null, yes ? '' : prompt('git repository'))
+ }
gconf = gconf.split(/\r?\n/)
var i = gconf.indexOf('[remote "origin"]')
if (i !== -1) {
@@ -152,13 +162,13 @@ if (!package.repository) {
if (u && u.match(/^git@github.com:/))
u = u.replace(/^git@github.com:/, 'https://github.com/')
- return cb(null, prompt('git repository', u))
+ return cb(null, yes ? u : prompt('git repository', u))
})
}
}
if (!package.keywords) {
- exports.keywords = prompt('keywords', function (s) {
+ exports.keywords = yes ? '' : prompt('keywords', function (s) {
if (!s) return undefined
if (Array.isArray(s)) s = s.join(' ')
if (typeof s !== 'string') return s
@@ -167,15 +177,14 @@ if (!package.keywords) {
}
if (!package.author) {
- exports.author = config.get('init.author.name')
+ exports.author = config.get('init-author-name')
? {
- "name" : config.get('init.author.name'),
- "email" : config.get('init.author.email'),
- "url" : config.get('init.author.url')
+ "name" : config.get('init-author-name'),
+ "email" : config.get('init-author-email'),
+ "url" : config.get('init-author-url')
}
: prompt('author')
}
-exports.license = prompt('license', package.license ||
- config.get('init.license') ||
- 'ISC')
+var license = package.license || config.get('init-license') || 'ISC'
+exports.license = yes ? license : prompt('license', license)
diff --git a/deps/npm/node_modules/init-package-json/init-package-json.js b/deps/npm/node_modules/init-package-json/init-package-json.js
index 2600e77b0a..cac761c39e 100644
--- a/deps/npm/node_modules/init-package-json/init-package-json.js
+++ b/deps/npm/node_modules/init-package-json/init-package-json.js
@@ -1,5 +1,6 @@
module.exports = init
+module.exports.yes = yes
var PZ = require('promzard').PromZard
var path = require('path')
@@ -14,6 +15,13 @@ var read = require('read')
// readJson.extras(file, data, cb)
var readJson = require('read-package-json')
+function yes (conf) {
+ return !!(
+ conf.get('yes') || conf.get('y') ||
+ conf.get('force') || conf.get('f')
+ )
+}
+
function init (dir, input, config, cb) {
if (typeof config === 'function')
cb = config, config = {}
@@ -35,7 +43,7 @@ function init (dir, input, config, cb) {
var package = path.resolve(dir, 'package.json')
input = path.resolve(input)
var pkg
- var ctx = {}
+ var ctx = { yes: yes(config) }
var es = readJson.extraSet
readJson.extraSet = es.filter(function (fn) {
@@ -91,14 +99,21 @@ function init (dir, input, config, cb) {
delete pkg.repository
var d = JSON.stringify(pkg, null, 2) + '\n'
+ function write (yes) {
+ fs.writeFile(package, d, 'utf8', function (er) {
+ if (!er && yes) console.log('Wrote to %s:\n\n%s\n', package, d)
+ return cb(er, pkg)
+ })
+ }
+ if (ctx.yes) {
+ return write(true)
+ }
console.log('About to write to %s:\n\n%s\n', package, d)
read({prompt:'Is this ok? ', default: 'yes'}, function (er, ok) {
if (!ok || ok.toLowerCase().charAt(0) !== 'y') {
console.log('Aborted.')
} else {
- fs.writeFile(package, d, 'utf8', function (er) {
- return cb(er, pkg)
- })
+ return write()
}
})
})
diff --git a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
index 703b34ac42..f66857539f 100644
--- a/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
+++ b/deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
@@ -27,7 +27,7 @@
"homepage": "https://github.com/isaacs/promzard",
"_id": "promzard@0.2.2",
"_shasum": "918b9f2b29458cb001781a8856502e4a79b016e0",
- "_from": "promzard@>=0.2.0-0 <0.3.0-0",
+ "_from": "promzard@>=0.2.0 <0.3.0",
"_npmVersion": "1.4.10",
"_npmUser": {
"name": "isaacs",
@@ -44,5 +44,6 @@
"tarball": "http://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
+ "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/init-package-json/package.json b/deps/npm/node_modules/init-package-json/package.json
index c716cd6e87..54aa7cbdf3 100644
--- a/deps/npm/node_modules/init-package-json/package.json
+++ b/deps/npm/node_modules/init-package-json/package.json
@@ -1,6 +1,6 @@
{
"name": "init-package-json",
- "version": "1.0.1",
+ "version": "1.1.1",
"main": "init-package-json.js",
"scripts": {
"test": "tap test/*.js"
@@ -24,8 +24,9 @@
"semver": "2.x || 3.x || 4"
},
"devDependencies": {
- "tap": "~0.2.5",
- "rimraf": "~2.0.2"
+ "npm": "^2.1.4",
+ "rimraf": "^2.1.4",
+ "tap": "^0.4.13"
},
"keywords": [
"init",
@@ -37,29 +38,14 @@
"prompt",
"start"
],
- "gitHead": "e1a5917ba1723ab5dcedacbffb5b10208d203e2f",
+ "readme": "# init-package-json\n\nA node module to get your node module started.\n\n## Usage\n\n```javascript\nvar init = require('init-package-json')\nvar path = require('path')\n\n// a path to a promzard module. In the event that this file is\n// not found, one will be provided for you.\nvar initFile = path.resolve(process.env.HOME, '.npm-init')\n\n// the dir where we're doin stuff.\nvar dir = process.cwd()\n\n// extra stuff that gets put into the PromZard module's context.\n// In npm, this is the resolved config object. Exposed as 'config'\n// Optional.\nvar configData = { some: 'extra stuff' }\n\n// Any existing stuff from the package.json file is also exposed in the\n// PromZard module as the `package` object. There will also be free\n// vars for:\n// * `filename` path to the package.json file\n// * `basename` the tip of the package dir\n// * `dirname` the parent of the package dir\n\ninit(dir, initFile, configData, function (er, data) {\n // the data's already been written to {dir}/package.json\n // now you can do stuff with it\n})\n```\n\nOr from the command line:\n\n```\n$ npm-init\n```\n\nSee [PromZard](https://github.com/isaacs/promzard) for details about\nwhat can go in the config file.\n",
+ "readmeFilename": "README.md",
+ "gitHead": "a4df4e57f9b6a2bf906ad50612dbed7dcb2f2c2b",
"bugs": {
"url": "https://github.com/isaacs/init-package-json/issues"
},
"homepage": "https://github.com/isaacs/init-package-json",
- "_id": "init-package-json@1.0.1",
- "_shasum": "c01b08cc90504ebc448d57b468e66fc08293e8a8",
- "_from": "init-package-json@>=1.0.0-0 <1.1.0-0",
- "_npmVersion": "2.0.0-beta.3",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "dist": {
- "shasum": "c01b08cc90504ebc448d57b468e66fc08293e8a8",
- "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-1.0.1.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.0.1.tgz"
+ "_id": "init-package-json@1.1.1",
+ "_shasum": "e09e9f1fb541e0fddc9175c5ce1736fd45ff4bf8",
+ "_from": "init-package-json@>=1.1.1 <2.0.0"
}
diff --git a/deps/npm/node_modules/init-package-json/test/npm-defaults.js b/deps/npm/node_modules/init-package-json/test/npm-defaults.js
new file mode 100644
index 0000000000..8229c84a00
--- /dev/null
+++ b/deps/npm/node_modules/init-package-json/test/npm-defaults.js
@@ -0,0 +1,49 @@
+var test = require("tap").test
+var rimraf = require("rimraf")
+var resolve = require("path").resolve
+
+var npm = require("npm")
+var init = require("../")
+
+var EXPECTED = {
+ name : "test",
+ version : "3.1.4",
+ description : "",
+ main : "basic.js",
+ scripts : {
+ test : 'echo "Error: no test specified" && exit 1'
+ },
+ keywords : [],
+ author : "npmbot <n@p.m> (http://npm.im)",
+ license : "WTFPL"
+}
+
+test("npm configuration values pulled from environment", function (t) {
+ /*eslint camelcase:0 */
+ process.env.npm_config_yes = "yes"
+
+ process.env.npm_config_init_author_name = "npmbot"
+ process.env.npm_config_init_author_email = "n@p.m"
+ process.env.npm_config_init_author_url = "http://npm.im"
+
+ process.env.npm_config_init_license = EXPECTED.license
+ process.env.npm_config_init_version = EXPECTED.version
+
+ npm.load({}, function (err) {
+ t.ifError(err, "npm loaded successfully")
+
+ process.chdir(resolve(__dirname))
+ init(__dirname, __dirname, npm.config, function (er, data) {
+ t.ifError(err, "init ran successfully")
+
+ t.same(data, EXPECTED, "got the package data from the environment")
+ t.end()
+ })
+ })
+})
+
+test("cleanup", function (t) {
+ rimraf.sync(resolve(__dirname, "package.json"))
+ t.pass("cleaned up")
+ t.end()
+})
diff --git a/deps/npm/node_modules/normalize-package-data/README.md b/deps/npm/node_modules/normalize-package-data/README.md
index bdcc8b04db..1429e40420 100644
--- a/deps/npm/node_modules/normalize-package-data/README.md
+++ b/deps/npm/node_modules/normalize-package-data/README.md
@@ -16,7 +16,7 @@ Basic usage is really simple. You call the function that normalize-package-data
```javascript
normalizeData = require('normalize-package-data')
-packageData = fs.readfileSync("package.json")
+packageData = fs.readFileSync("package.json")
normalizeData(packageData)
// packageData is now normalized
```
@@ -27,7 +27,7 @@ You may activate strict validation by passing true as the second argument.
```javascript
normalizeData = require('normalize-package-data')
-packageData = fs.readfileSync("package.json")
+packageData = fs.readFileSync("package.json")
warnFn = function(msg) { console.error(msg) }
normalizeData(packageData, true)
// packageData is now normalized
@@ -41,7 +41,7 @@ Optionally, you may pass a "warning" function. It gets called whenever the `norm
```javascript
normalizeData = require('normalize-package-data')
-packageData = fs.readfileSync("package.json")
+packageData = fs.readFileSync("package.json")
warnFn = function(msg) { console.error(msg) }
normalizeData(packageData, warnFn)
// packageData is now normalized. Any number of warnings may have been logged.
diff --git a/deps/npm/node_modules/normalize-package-data/lib/fixer.js b/deps/npm/node_modules/normalize-package-data/lib/fixer.js
index 72836002fe..14c0abc8e9 100644
--- a/deps/npm/node_modules/normalize-package-data/lib/fixer.js
+++ b/deps/npm/node_modules/normalize-package-data/lib/fixer.js
@@ -111,6 +111,13 @@ var fixer = module.exports = {
this.warn("nonStringBundleDependency", bd)
return false
} else {
+ if (!data.dependencies) {
+ data.dependencies = {}
+ }
+ if (!data.dependencies.hasOwnProperty(bd)) {
+ this.warn("nonDependencyBundleDependency", bd)
+ data.dependencies[bd] = "*"
+ }
return true
}
}, this)
diff --git a/deps/npm/node_modules/normalize-package-data/lib/warning_messages.json b/deps/npm/node_modules/normalize-package-data/lib/warning_messages.json
index 9605f5cc64..1877fe5de3 100644
--- a/deps/npm/node_modules/normalize-package-data/lib/warning_messages.json
+++ b/deps/npm/node_modules/normalize-package-data/lib/warning_messages.json
@@ -8,6 +8,7 @@
,"invalidFilename": "Invalid filename in 'files' list: %s"
,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names"
,"nonStringBundleDependency": "Invalid bundleDependencies member: %s"
+ ,"nonDependencyBundleDependency": "Non-dependency in bundleDependencies: %s"
,"nonObjectDependencies": "%s field must be an object"
,"nonStringDependency": "Invalid dependency: %s %s"
,"deprecatedArrayDependencies": "specifying %s as array is deprecated"
@@ -25,4 +26,4 @@
,"nonUrlHomepage": "homepage field must be a string url. Deleted."
,"missingProtocolHomepage": "homepage field must start with a protocol."
,"typo": "%s should probably be %s."
-} \ No newline at end of file
+}
diff --git a/deps/npm/node_modules/normalize-package-data/package.json b/deps/npm/node_modules/normalize-package-data/package.json
index 0471bcd6e0..6da54694c2 100644
--- a/deps/npm/node_modules/normalize-package-data/package.json
+++ b/deps/npm/node_modules/normalize-package-data/package.json
@@ -1,6 +1,6 @@
{
"name": "normalize-package-data",
- "version": "1.0.2",
+ "version": "1.0.3",
"author": {
"name": "Meryn Stol",
"email": "merynstol@gmail.com"
@@ -38,15 +38,16 @@
"email": "rok@kowalski.gd"
}
],
- "gitHead": "05fafb91466ac634fa7d591d0796d64b0b432dc0",
+ "gitHead": "8c30091c83b1a41e113757148c4543ef61ff863d",
"bugs": {
"url": "https://github.com/meryn/normalize-package-data/issues"
},
"homepage": "https://github.com/meryn/normalize-package-data",
- "_id": "normalize-package-data@1.0.2",
- "_shasum": "32a902ad3cad3286f1106b9b9550062f44ee2118",
- "_from": "normalize-package-data@>=1.0.1-0 <1.1.0-0",
- "_npmVersion": "2.0.0-beta.3",
+ "_id": "normalize-package-data@1.0.3",
+ "_shasum": "8be955b8907af975f1a4584ea8bb9b41492312f5",
+ "_from": "normalize-package-data@>=1.0.3 <1.1.0",
+ "_npmVersion": "2.1.0",
+ "_nodeVersion": "0.10.31",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -66,9 +67,9 @@
}
],
"dist": {
- "shasum": "32a902ad3cad3286f1106b9b9550062f44ee2118",
- "tarball": "http://registry.npmjs.org/normalize-package-data/-/normalize-package-data-1.0.2.tgz"
+ "shasum": "8be955b8907af975f1a4584ea8bb9b41492312f5",
+ "tarball": "http://registry.npmjs.org/normalize-package-data/-/normalize-package-data-1.0.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-1.0.2.tgz"
+ "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-1.0.3.tgz"
}
diff --git a/deps/npm/node_modules/normalize-package-data/test/dependencies.js b/deps/npm/node_modules/normalize-package-data/test/dependencies.js
index dda24dc4f9..3e493ab023 100644
--- a/deps/npm/node_modules/normalize-package-data/test/dependencies.js
+++ b/deps/npm/node_modules/normalize-package-data/test/dependencies.js
@@ -37,7 +37,8 @@ tap.test("warn if bundleDependencies array contains anything else but strings",
var wanted1 = safeFormat(warningMessages.nonStringBundleDependency, 123)
var wanted2 = safeFormat(warningMessages.nonStringBundleDependency, {foo:"bar"})
+ var wanted2 = safeFormat(warningMessages.nonDependencyBundleDependency, "abc")
t.ok(~warnings.indexOf(wanted1), wanted1)
t.ok(~warnings.indexOf(wanted2), wanted2)
t.end()
-}) \ No newline at end of file
+})
diff --git a/deps/npm/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-package-arg/package.json
index 45604cb086..babbd7312a 100644
--- a/deps/npm/node_modules/npm-package-arg/package.json
+++ b/deps/npm/node_modules/npm-package-arg/package.json
@@ -1,13 +1,13 @@
{
"name": "npm-package-arg",
- "version": "2.1.2",
+ "version": "2.1.3",
"description": "Parse the things that can be arguments to `npm install`",
"main": "npa.js",
"directories": {
"test": "test"
},
"dependencies": {
- "semver": "^2.3.0 || 3.x || 4"
+ "semver": "4"
},
"devDependencies": {
"tap": "^0.4.9"
@@ -31,8 +31,8 @@
"homepage": "https://github.com/npm/npm-package-arg",
"readme": "# npm-package-arg\n\nParse the things that can be arguments to `npm install`\n\nTakes an argument like `foo@1.2`, or `foo@user/foo`, or\n`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`, and\nfigures out what type of thing it is.\n\n## USAGE\n\n```javascript\nvar assert = require(\"assert\")\nvar npa = require(\"npm-package-arg\")\n\n// Pass in the descriptor, and it'll return an object\nvar parsed = npa(\"foo@1.2\")\n\n// Returns an object like:\n// {\n// name: \"foo\", // The bit in front of the @\n// type: \"range\", // the type of descriptor this is\n// spec: \"1.2\" // the specifier for this descriptor\n// }\n\n// Completely unreasonable invalid garbage throws an error\n// Make sure you wrap this in a try/catch if you have not\n// already sanitized the inputs!\nassert.throws(function() {\n npa(\"this is not \\0 a valid package name or url\")\n})\n```\n\nFor more examples, see the test file.\n\n## Result Objects\n\nThe objects that are returned by npm-package-arg contain the following\nfields:\n\n* `name` - If known, the `name` field expected in the resulting pkg.\n* `type` - One of the following strings:\n * `git` - A git repo\n * `github` - A github shorthand, like `user/project`\n * `tag` - A tagged version, like `\"foo@latest\"`\n * `version` - A specific version number, like `\"foo@1.2.3\"`\n * `range` - A version range, like `\"foo@2.x\"`\n * `local` - A local file or folder path\n * `remote` - An http url (presumably to a tgz)\n* `spec` - The \"thing\". URL, the range, git repo, etc.\n* `raw` - The original un-modified string that was provided.\n* `rawSpec` - The part after the `name@...`, as it was originally\n provided.\n* `scope` - If a name is something like `@org/module` then the `scope`\n field will be set to `org`. If it doesn't have a scoped name, then\n scope is `null`.\n",
"readmeFilename": "README.md",
- "gitHead": "ebb3c5ee4c362aca5722cf805adf871f86b5c4f2",
- "_id": "npm-package-arg@2.1.2",
- "_shasum": "14f9be32e203a77977dd8120cf749d0db8c93761",
- "_from": "npm-package-arg@>=2.1.2 <2.2.0"
+ "gitHead": "9aaabc2aae746371a05f54cdb57a5f9ada003d8f",
+ "_id": "npm-package-arg@2.1.3",
+ "_shasum": "dfba34bd82dd327c10cb43a65c8db6ef0b812bf7",
+ "_from": "npm-package-arg@~2.1.3"
}
diff --git a/deps/npm/node_modules/npm-package-arg/test/basic.js b/deps/npm/node_modules/npm-package-arg/test/basic.js
index 3bc984e9d7..98206db205 100644
--- a/deps/npm/node_modules/npm-package-arg/test/basic.js
+++ b/deps/npm/node_modules/npm-package-arg/test/basic.js
@@ -8,7 +8,7 @@ require("tap").test("basic", function (t) {
"foo@1.2": {
name: "foo",
type: "range",
- spec: ">=1.2.0-0 <1.3.0-0",
+ spec: ">=1.2.0 <1.3.0",
raw: "foo@1.2",
rawSpec: "1.2"
},
diff --git a/deps/npm/node_modules/npm-registry-client/lib/fetch.js b/deps/npm/node_modules/npm-registry-client/lib/fetch.js
index 8dd6b28b07..75c52de3ae 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/fetch.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/fetch.js
@@ -69,7 +69,11 @@ function makeRequest (remote, headers, cb) {
var parsed = url.parse(remote)
this.log.http("fetch", "GET", parsed.href)
- var er = this.authify(this.conf.get("always-auth"), parsed, headers)
+ var er = this.authify(
+ this.conf.getCredentialsByURI(remote).alwaysAuth,
+ parsed,
+ headers
+ )
if (er) return cb(er)
var opts = this.initialize(
diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js
index 498b326f28..910fe01314 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/request.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/request.js
@@ -44,7 +44,8 @@ function regRequest (method, uri, options, cb_) {
, isUserChange = where.match(adduserChange)
, adduserNew = /^\/?-\/user\/org\.couchdb\.user:([^\/]+)$/
, isNewUser = where.match(adduserNew)
- , alwaysAuth = this.conf.get("always-auth")
+ , registry = url.format(parsed)
+ , alwaysAuth = this.conf.getCredentialsByURI(registry).alwaysAuth
, isDelete = method === "DELETE"
, isWrite = what || isDelete
@@ -70,9 +71,7 @@ function regRequest (method, uri, options, cb_) {
}).join("/")
if (q) where += "?" + q
- var registry = url.format(parsed)
this.log.verbose("request", "resolving registry", [registry, where])
-
where = url.resolve(registry, where)
this.log.verbose("request", "after pass 2, where is", where)
}
diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json
index 5de4bd2aa3..f9c447ee2b 100644
--- a/deps/npm/node_modules/npm-registry-client/package.json
+++ b/deps/npm/node_modules/npm-registry-client/package.json
@@ -6,7 +6,7 @@
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "3.2.1",
+ "version": "3.2.4",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client"
},
@@ -22,7 +22,7 @@
"npm-cache-filename": "^1.0.0",
"once": "^1.3.0",
"request": "2 >=2.25.0",
- "retry": "0.6.0",
+ "retry": "^0.6.1",
"rimraf": "2",
"semver": "2 >=2.2.1 || 3.x || 4",
"slide": "^1.1.3",
@@ -30,6 +30,7 @@
},
"devDependencies": {
"concat-stream": "^1.4.6",
+ "npmconf": "^2.1.0",
"tap": ""
},
"optionalDependencies": {
@@ -38,12 +39,12 @@
"license": "ISC",
"readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\nvar uri = \"npm://registry.npmjs.org/npm\"\nvar options = {timeout: 1000}\n\nclient.get(uri, options, function (error, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Registry URLs\n\nThe registry calls take either a full URL pointing to a resource in the\nregistry, or a base URL for the registry as a whole (for the base URL, any path\nwill be ignored). In addition to `http` and `https`, `npm` URLs are allowed.\n`npm` URLs are `https` URLs with the additional restrictions that they will\nalways include authorization credentials, and the response is always registry\nmetadata (and not tarballs or other attachments).\n\n# Configuration\n\nThis program is designed to work with\n[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\na plain-jane object with the appropriate configs, and it'll shim it\nfor you. Any configuration thingie that has get/set/del methods will\nalso be accepted.\n\n* `cache` **Required** {String} Path to the cache folder\n* `always-auth` {Boolean} Auth even for GET requests.\n* `auth` {String} A base64-encoded `username:password`\n* `email` {String} User's email address\n* `tag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `ca` {String} Cerficate signing authority certificates to trust.\n* `cert` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates\n* `key` {String} Private key (PEM encoded) for client certificate 'cert'\n* `strict-ssl` {Boolean} Whether or not to be strict with SSL\n certificates. Default = `true`\n* `user-agent` {String} User agent header to send. Default =\n `\"node/{process.version} {process.platform} {process.arch}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `fetch-retries` {Number} Number of times to retry on GET failures.\n Default=2\n* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\n* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\n Default=10000 (10 seconds)\n* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default=60000 (60 seconds)\n* `proxy` {URL} The url to proxy requests through.\n* `https-proxy` {URL} The url to proxy https requests through.\n Defaults to be the same as `proxy` if unset.\n* `_auth` {String} The base64-encoded authorization header.\n* `username` `_password` {String} Username/password to use to generate\n `_auth` if not supplied.\n* `_token` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login)\n\n# client.request(method, uri, options, cb)\n\n* `method` {String} HTTP method\n* `uri` {String} URI pointing to the resource to request\n* `options` {Object} Object containing optional per-request properties.\n * `what` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON.\n * `etag` {String} The cached ETag\n * `follow` {Boolean} Follow 302/301 responses (defaults to true)\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a request to the registry. All the other methods are wrappers around\n`request`.\n\n# client.adduser(base, username, password, email, cb)\n\n* `base` {String} Base registry URL\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `cb` {Function}\n\nAdd a user account to the registry, or verify the credentials.\n\n# client.deprecate(uri, version, message, cb)\n\n* `uri` {String} Full registry URI for the deprecated package\n* `version` {String} Semver version range\n* `message` {String} The message to use as a deprecation warning\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n# client.bugs(uri, cb)\n\n* `uri` {String} Full registry URI for the package\n* `cb` {Function}\n\nGet the url for bugs of a package\n\n# client.get(uri, options, cb)\n\n* `uri` {String} The complete registry URI to fetch\n* `options` {Object} Object containing optional per-request properties.\n * `timeout` {Number} Duration before the request times out.\n * `follow` {Boolean} Follow 302/301 responses (defaults to true)\n * `staleOk` {Boolean} If there's cached data available, then return that\n to the callback quickly, and update the cache the background.\n\nFetches data from the registry via a GET request, saving it in the cache folder\nwith the ETag.\n\n# client.publish(uri, data, tarball, cb)\n\n* `uri` {String} The registry URI to publish to\n* `data` {Object} Package data\n* `tarball` {String | Stream} Filename or stream of the package tarball\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder. However, it can\naccept a gzipped tar stream or a filename to a tarball.\n\n# client.star(uri, starred, cb)\n\n* `uri` {String} The complete registry URI to star\n* `starred` {Boolean} True to star the package, false to unstar it.\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or unstar a\npackage, though other writes do require that the user be the package owner.\n\n# client.stars(base, username, cb)\n\n* `base` {String} The base URL for the registry\n* `username` {String} Name of user to fetch starred packages for.\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n# client.tag(uri, version, tag, cb)\n\n* `uri` {String} The complete registry URI to tag\n* `version` {String} Version to tag\n* `tag` {String} Tag name to apply\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\nspecified version.\n\n# client.unpublish(uri, [ver], cb)\n\n* `uri` {String} The complete registry URI to unpublish\n* `ver` {String} version to unpublish. Leave blank to unpublish all\n versions.\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When the\nlast version us unpublished, the entire document is removed from the database.\n\n# client.upload(uri, file, [etag], [nofollow], cb)\n\n* `uri` {String} The complete registry URI to upload to\n* `file` {String | Stream} Either the filename or a readable stream\n* `etag` {String} Cache ETag\n* `nofollow` {Boolean} Do not follow 301/302 responses\n* `cb` {Function}\n\nUpload an attachment. Mostly used by `client.publish()`.\n",
"readmeFilename": "README.md",
- "gitHead": "c60d91b1e8dceba21e33ec40eeaf1b0d02cac8c6",
+ "gitHead": "ddafd4913bdca30a1f9111660767f71653604b57",
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
"homepage": "https://github.com/isaacs/npm-registry-client",
- "_id": "npm-registry-client@3.2.1",
- "_shasum": "a502a818de273085e8e1a931ff7beac6e3fe2a7a",
- "_from": "npm-registry-client@>=3.2.1-0 <3.3.0-0"
+ "_id": "npm-registry-client@3.2.4",
+ "_shasum": "8659b3449e1c9a9f8181dad142cadb048bfe521f",
+ "_from": "npm-registry-client@>=3.2.4 <3.3.0"
}
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js b/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js
new file mode 100644
index 0000000000..da359296c4
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-authed.js
@@ -0,0 +1,56 @@
+var resolve = require("path").resolve
+var createReadStream = require("graceful-fs").createReadStream
+var readFileSync = require("graceful-fs").readFileSync
+
+var tap = require("tap")
+var cat = require("concat-stream")
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+
+var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+
+tap.test("basic fetch with scoped always-auth enabled", function (t) {
+ server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
+ t.equal(req.method, "GET", "got expected method")
+ t.equal(
+ req.headers.authorization,
+ "Basic dXNlcm5hbWU6JTEyMzRAYXNkZiU=",
+ "got expected auth header"
+ )
+
+ res.writeHead(200, {
+ "content-type" : "application/x-tar",
+ "content-encoding" : "gzip"
+ })
+
+ createReadStream(tgz).pipe(res)
+ })
+
+ var nerfed = "//localhost:" + server.port + "/:"
+ var configuration = {}
+ configuration[nerfed + "username"] = "username"
+ configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
+ configuration[nerfed + "email"] = "i@izs.me"
+ configuration[nerfed + "always-auth"] = true
+
+ var client = common.freshClient(configuration)
+ client.fetch(
+ "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ null,
+ function (er, res) {
+ t.ifError(er, "loaded successfully")
+
+ var sink = cat(function (data) {
+ t.deepEqual(data, readFileSync(tgz))
+ t.end()
+ })
+
+ res.on("error", function (error) {
+ t.ifError(error, "no errors on stream")
+ })
+
+ res.pipe(sink)
+ }
+ )
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js b/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js
new file mode 100644
index 0000000000..0275dc2b96
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fetch-not-authed.js
@@ -0,0 +1,52 @@
+var resolve = require("path").resolve
+var createReadStream = require("graceful-fs").createReadStream
+var readFileSync = require("graceful-fs").readFileSync
+
+var tap = require("tap")
+var cat = require("concat-stream")
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+
+var tgz = resolve(__dirname, "./fixtures/underscore/1.3.3/package.tgz")
+
+tap.test("basic fetch with scoped always-auth disabled", function (t) {
+ server.expect("/underscore/-/underscore-1.3.3.tgz", function (req, res) {
+ t.equal(req.method, "GET", "got expected method")
+ t.notOk(req.headers.authorization, "received no auth header")
+
+ res.writeHead(200, {
+ "content-type" : "application/x-tar",
+ "content-encoding" : "gzip"
+ })
+
+ createReadStream(tgz).pipe(res)
+ })
+
+ var nerfed = "//localhost:" + server.port + "/:"
+ var configuration = {}
+ configuration[nerfed + "username"] = "username"
+ configuration[nerfed + "_password"] = new Buffer("%1234@asdf%").toString("base64")
+ configuration[nerfed + "email"] = "i@izs.me"
+ configuration[nerfed + "always-auth"] = false
+
+ var client = common.freshClient(configuration)
+ client.fetch(
+ "http://localhost:1337/underscore/-/underscore-1.3.3.tgz",
+ null,
+ function (er, res) {
+ t.ifError(er, "loaded successfully")
+
+ var sink = cat(function (data) {
+ t.deepEqual(data, readFileSync(tgz))
+ t.end()
+ })
+
+ res.on("error", function (error) {
+ t.ifError(error, "no errors on stream")
+ })
+
+ res.pipe(sink)
+ }
+ )
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json
new file mode 100644
index 0000000000..4561db502b
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json
@@ -0,0 +1 @@
+{"_id":"@npm%2fnpm-registry-client","_rev":"213-0a1049cf56172b7d9a1184742c6477b9","name":"@npm/npm-registry-client","description":"Client for the npm registry","dist-tags":{"latest":"2.0.4","v2.0":"2.0.3"},"versions":{"0.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"693a08f6d2faea22bbd2bf412508a63d3e6229a7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.2","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"b48c0ec5563c6a6fdc253454fc56d2c60c5a26f4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.3","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"ccc0254c2d59e3ea9b9050e2b16edef78df1a1e8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.4","_engineSupported":true,"_npmVersion":"1.1.25","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"faabd25ef477521c74ac21e0f4cf3a2f66d18fb3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.4.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.5","dist":{"shasum":"85219810c9d89ae8d28ea766e7cf74efbd9f1e52","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.5.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.6","dist":{"shasum":"cc6533b3b41df65e6e9db2601fbbf1a509a7e94c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.6.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.7","dist":{"shasum":"0cee1d1c61f1c8e483774fe1f7bbb81c4f394a3a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.7.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.8","dist":{"shasum":"1b7411c3f7310ec2a96b055b00e7ca606e47bd07","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.8.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.9","dist":{"shasum":"6d5bfde431559ac9e2e52a7db85f5839b874f022","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.9.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.10","dist":{"shasum":"0c8b6a4615bce82aa6cc04a0d1f7dc89921f7a38","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.10.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.11","dist":{"shasum":"afab40be5bed1faa946d8e1827844698f2ec1db7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.11.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.0","dist":{"shasum":"1077d6bbb5e432450239dc6622a59474953ffbea","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.0.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.1","dist":{"shasum":"759765361d09b715270f59cf50f10908e4e9c5fc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.2","dist":{"shasum":"541ce93abb3d35f5c325545c718dd3bbeaaa9ff0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.3","dist":{"shasum":"e9a40d7031e8f809af5fd85aa9aac979e17efc97","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.4","dist":{"shasum":"b211485b046191a1085362376530316f0cab0420","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.4.tgz"},"_npmVersion":"1.1.48","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.0","dist":{"shasum":"6508a4b4d96f31057d5200ca5779531bafd2b840","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.0.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.1","dist":{"shasum":"1bc8c4576c368cd88253d8a52daf40c55b89bb1a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.1.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.5","dist":{"shasum":"2f55d675dfb977403b1ad0d96874c1d30e8058d7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.5.tgz"},"_npmVersion":"1.1.51","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.6","dist":{"shasum":"f05df6695360360ad220e6e13a6a7bace7165fbe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.6.tgz"},"_npmVersion":"1.1.56","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.7","dist":{"shasum":"867bad8854cae82ed89ee3b7f1d391af59491671","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.7.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.8","dist":{"shasum":"ef194cdb70f1ea03a576cff2c97392fa96e36563","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.8.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.9","dist":{"shasum":"3cec10431dfed1594adaf99c50f482ee56ecf9e4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.9.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.10","dist":{"shasum":"1e69726dae0944e78562fd77243f839c6a2ced1e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.10.tgz"},"_npmVersion":"1.1.64","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.11","dist":{"shasum":"d92f33c297eb1bbd57fd597c3d8f5f7e9340a0b5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.11.tgz"},"_npmVersion":"1.1.70","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.12","dist":{"shasum":"3bfb6fc0e4b131d665580cd1481c341fe521bfd3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.12.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.13":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.13","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.13","dist":{"shasum":"e03f2a4340065511b7184a3e2862cd5d459ef027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.13.tgz"},"_from":".","_npmVersion":"1.2.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.14":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.14","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.14","dist":{"shasum":"186874a7790417a340d582b1cd4a7c338087ee12","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.14.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.15":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.15","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.15","dist":{"shasum":"f71f32b7185855f1f8b7a5ef49e49d2357c2c552","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.15.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.16":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.16","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.16","dist":{"shasum":"3331323b5050fc5afdf77c3a35913c16f3e43964","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.16.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.17":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.17","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.17","dist":{"shasum":"1df2bbecac6751f5d9600fb43722aef96d956773","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.17.tgz"},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.18":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.18","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.18","dist":{"shasum":"198c8d15ed9b1ed546faf6e431eb63a6b18193ad","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.18.tgz"},"_from":".","_npmVersion":"1.2.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.19":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.19","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.19","dist":{"shasum":"106da826f0d2007f6e081f2b68fb6f26fa951b20","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.19.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.20":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.20","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.20","dist":{"shasum":"3fff194331e26660be2cf8ebf45ddf7d36add5f6","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.20.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.21":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.21","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.21","dist":{"shasum":"d85dd32525f193925c46ff9eb0e0f529dfd1b254","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.21.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.22":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.22","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.22","dist":{"shasum":"caa22ff40a1ccd632a660b8b80c333c8f92d5a17","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.22.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.23":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.23","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.23","dist":{"shasum":"a320ab2b1d048b4f7b88e40bd86974ca322b4c24","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.23.tgz"},"_from":".","_npmVersion":"1.2.19","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.24":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.24","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.24","dist":{"shasum":"e12f644338619319ee7f233363a1714a87f3c72d","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.24.tgz"},"_from":".","_npmVersion":"1.2.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.25":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.25","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.25","dist":{"shasum":"c2caeb1dcf937d6fcc4a187765d401f5e2f54027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.25.tgz"},"_from":".","_npmVersion":"1.2.32","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.26":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.26","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.26","dist":{"shasum":"4c5a2b3de946e383032f10fa497d0c15ee5f4c60","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.26.tgz"},"_from":".","_npmVersion":"1.3.1","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.27":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.27","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~2.0.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.27","dist":{"shasum":"8f338189d32769267886a07ad7b7fd2267446adf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.27.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.28":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.28","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"~2.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.28","dist":{"shasum":"959141fc0180d7b1ad089e87015a8a2142a8bffc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.28.tgz"},"_from":".","_npmVersion":"1.3.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.29":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.29","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.29","dist":{"shasum":"66ff2766f0c61d41e8a6139d3692d8833002c686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.29.tgz"},"_from":".","_npmVersion":"1.3.12","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.30":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.30","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.30","dist":{"shasum":"f01cae5c51aa0a1c5dc2516cbad3ebde068d3eaa","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.30.tgz"},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.31":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.31","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.31","dist":{"shasum":"24a23e24e43246677cb485f8391829e9536563d4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.31.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.0","dist":{"shasum":"66eab02a69be67f232ac14023eddfb8308c2eccd","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.0.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.1","dist":{"shasum":"16dba07cc304442edcece378218672d0a1258ef8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.1.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.2","dist":{"shasum":"ea3060bd0a87fb1d97b87433b50f38f7272b1686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.2.tgz"},"_from":".","_npmVersion":"1.3.20","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.3","dist":{"shasum":"da08bb681fb24aa5c988ca71f8c10f27f09daf4a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.3.tgz"},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.4","dist":{"shasum":"25d771771590b1ca39277aea4506af234c5f4342","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.4.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.5","dist":{"shasum":"98ba1ac851a3939a3fb9917c28fa8da522dc635f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.5.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.6","dist":{"shasum":"c48a2a03643769acc49672860f7920ec6bffac6e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.6.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.0","dist":{"shasum":"30d0c178b7f2e54183a6a3fc9fe4071eb10290bf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.0.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.1","dist":{"shasum":"9c49b3e44558e2072158fb085be8a083c5f83537","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.1.tgz"},"_from":".","_npmVersion":"1.4.0","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.2","dist":{"shasum":"d9568a9413bee14951201ce73f3b3992ec6658c0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.2.tgz"},"_from":".","_npmVersion":"1.4.1","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.3","dist":{"shasum":"aa188fc5067158e991a57f4697c54994108f5389","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.3.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.4","dist":{"shasum":"f9dbc383a49069d8c7f67755a3ff6e424aff584f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.4.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.5","dist":{"shasum":"7d6fdca46139470715f9477ddb5ad3e770d4de7b","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.5.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.6","_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"657f69a79543fc4cc264c3b2de958bd15f7140fe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.6.tgz"},"directories":{}},"0.4.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.7","dist":{"shasum":"f4369b59890da7882527eb7c427dd95d43707afb","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.7.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.8","_shasum":"a6685a161033101be6064b7af887ab440e8695d0","_from":".","_npmVersion":"1.4.8","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"a6685a161033101be6064b7af887ab440e8695d0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.8.tgz"},"directories":{}},"0.4.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.9","_shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.9.tgz"},"directories":{}},"0.4.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.10","_shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.10.tgz"},"directories":{}},"0.4.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.11","_shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.11.tgz"},"directories":{}},"0.4.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.12","_shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.12.tgz"},"directories":{}},"1.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.0","_shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.0.tgz"},"directories":{}},"1.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"98b1278c230cf6c159f189e2f8c69daffa727ab8","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.1","_shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.1.tgz"},"directories":{}},"2.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"47a98069b6a34e751cbd5b84ce92858cae5abe70","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.0","_shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.0.tgz"},"directories":{}},"2.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"123e40131f83f7265f66ecd2a558cce44a3aea86","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.1","_shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.1.tgz"},"directories":{}},"2.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6ecc311c9dd4890f2d9b6bae60447070a3321e12","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.2","_shasum":"a82b000354c7f830114fb18444764bc477d5740f","_from":".","_npmVersion":"1.4.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"a82b000354c7f830114fb18444764bc477d5740f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.2.tgz"},"directories":{}},"3.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6bb1aec1e85fa82ee075bd997d6fb9f2dbb7f643","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.0","_shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","_from":".","_npmVersion":"1.5.0-pre","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.0.tgz"},"directories":{}},"3.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"fe8382dde609ea1e3580fcdc5bc3d0bba119cfc6","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.1","_shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.1.tgz"},"directories":{}},"2.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"2578fb9a807d77417554ba235ba8fac39405e832","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.3","_shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.3.tgz"},"directories":{}},"3.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"15343019160ace0b9874cf0ec186b3425dbc7301","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.2","_shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","_from":".","_npmVersion":"1.5.0-alpha-2","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.2.tgz"},"directories":{}},"3.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"b18a780d1185f27c06c27812147b83aba0d4a2f5","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.3","_shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.3.tgz"},"directories":{}},"3.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.5.0","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"54900fe4b2eb5b99ee6dfe173f145732fdfae80e","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.4","_shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.4.tgz"},"directories":{}},"3.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"0.5","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"635db1654346bc86473df7b39626601425f46177","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.5","_shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.5.tgz"},"directories":{}},"3.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"eba30fadd724ed5cad1aec95ac3ee907a59b7317","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.6","_shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.6.tgz"},"directories":{}},"2.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"a10f621d9cdc813b9d3092a14b661f65bfa6d40d","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.4","_shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.4.tgz"},"directories":{}}},"readme":"# npm-registry-client\u000a\u000aThe code that npm uses to talk to the registry.\u000a\u000aIt handles all the caching and HTTP calls.\u000a\u000a## Usage\u000a\u000a```javascript\u000avar RegClient = require('npm-registry-client')\u000avar client = new RegClient(config)\u000avar uri = \"npm://registry.npmjs.org/npm\"\u000avar options = {timeout: 1000}\u000a\u000aclient.get(uri, options, function (error, data, raw, res) {\u000a // error is an error if there was a problem.\u000a // data is the parsed data object\u000a // raw is the json string\u000a // res is the response from couch\u000a})\u000a```\u000a\u000a# Registry URLs\u000a\u000aThe registry calls take either a full URL pointing to a resource in the\u000aregistry, or a base URL for the registry as a whole (for the base URL, any path\u000awill be ignored). In addition to `http` and `https`, `npm` URLs are allowed.\u000a`npm` URLs are `https` URLs with the additional restrictions that they will\u000aalways include authorization credentials, and the response is always registry\u000ametadata (and not tarballs or other attachments).\u000a\u000a# Configuration\u000a\u000aThis program is designed to work with\u000a[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\u000aa plain-jane object with the appropriate configs, and it'll shim it\u000afor you. Any configuration thingie that has get/set/del methods will\u000aalso be accepted.\u000a\u000a* `cache` **Required** {String} Path to the cache folder\u000a* `always-auth` {Boolean} Auth even for GET requests.\u000a* `auth` {String} A base64-encoded `username:password`\u000a* `email` {String} User's email address\u000a* `tag` {String} The default tag to use when publishing new packages.\u000a Default = `\"latest\"`\u000a* `ca` {String} Cerficate signing authority certificates to trust.\u000a* `cert` {String} Client certificate (PEM encoded). Enable access\u000a to servers that require client certificates\u000a* `key` {String} Private key (PEM encoded) for client certificate 'cert'\u000a* `strict-ssl` {Boolean} Whether or not to be strict with SSL\u000a certificates. Default = `true`\u000a* `user-agent` {String} User agent header to send. Default =\u000a `\"node/{process.version} {process.platform} {process.arch}\"`\u000a* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\u000a that works, otherwise logs are disabled.\u000a* `fetch-retries` {Number} Number of times to retry on GET failures.\u000a Default=2\u000a* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\u000a* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\u000a Default=10000 (10 seconds)\u000a* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\u000a Default=60000 (60 seconds)\u000a* `proxy` {URL} The url to proxy requests through.\u000a* `https-proxy` {URL} The url to proxy https requests through.\u000a Defaults to be the same as `proxy` if unset.\u000a* `_auth` {String} The base64-encoded authorization header.\u000a* `username` `_password` {String} Username/password to use to generate\u000a `_auth` if not supplied.\u000a* `_token` {Object} A token for use with\u000a [couch-login](https://npmjs.org/package/couch-login)\u000a\u000a# client.request(method, uri, options, cb)\u000a\u000a* `method` {String} HTTP method\u000a* `uri` {String} URI pointing to the resource to request\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `what` {Stream | Buffer | String | Object} The request body. Objects\u000a that are not Buffers or Streams are encoded as JSON.\u000a * `etag` {String} The cached ETag\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a* `cb` {Function}\u000a * `error` {Error | null}\u000a * `data` {Object} the parsed data object\u000a * `raw` {String} the json\u000a * `res` {Response Object} response from couch\u000a\u000aMake a request to the registry. All the other methods are wrappers around\u000a`request`.\u000a\u000a# client.adduser(base, username, password, email, cb)\u000a\u000a* `base` {String} Base registry URL\u000a* `username` {String}\u000a* `password` {String}\u000a* `email` {String}\u000a* `cb` {Function}\u000a\u000aAdd a user account to the registry, or verify the credentials.\u000a\u000a# client.deprecate(uri, version, message, cb)\u000a\u000a* `uri` {String} Full registry URI for the deprecated package\u000a* `version` {String} Semver version range\u000a* `message` {String} The message to use as a deprecation warning\u000a* `cb` {Function}\u000a\u000aDeprecate a version of a package in the registry.\u000a\u000a# client.bugs(uri, cb)\u000a\u000a* `uri` {String} Full registry URI for the package\u000a* `cb` {Function}\u000a\u000aGet the url for bugs of a package\u000a\u000a# client.get(uri, options, cb)\u000a\u000a* `uri` {String} The complete registry URI to fetch\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `timeout` {Number} Duration before the request times out.\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a * `staleOk` {Boolean} If there's cached data available, then return that\u000a to the callback quickly, and update the cache the background.\u000a\u000aFetches data from the registry via a GET request, saving it in the cache folder\u000awith the ETag.\u000a\u000a# client.publish(uri, data, tarball, cb)\u000a\u000a* `uri` {String} The registry URI to publish to\u000a* `data` {Object} Package data\u000a* `tarball` {String | Stream} Filename or stream of the package tarball\u000a* `cb` {Function}\u000a\u000aPublish a package to the registry.\u000a\u000aNote that this does not create the tarball from a folder. However, it can\u000aaccept a gzipped tar stream or a filename to a tarball.\u000a\u000a# client.star(uri, starred, cb)\u000a\u000a* `uri` {String} The complete registry URI to star\u000a* `starred` {Boolean} True to star the package, false to unstar it.\u000a* `cb` {Function}\u000a\u000aStar or unstar a package.\u000a\u000aNote that the user does not have to be the package owner to star or unstar a\u000apackage, though other writes do require that the user be the package owner.\u000a\u000a# client.stars(base, username, cb)\u000a\u000a* `base` {String} The base URL for the registry\u000a* `username` {String} Name of user to fetch starred packages for.\u000a* `cb` {Function}\u000a\u000aView your own or another user's starred packages.\u000a\u000a# client.tag(uri, version, tag, cb)\u000a\u000a* `uri` {String} The complete registry URI to tag\u000a* `version` {String} Version to tag\u000a* `tag` {String} Tag name to apply\u000a* `cb` {Function}\u000a\u000aMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\u000aspecified version.\u000a\u000a# client.unpublish(uri, [ver], cb)\u000a\u000a* `uri` {String} The complete registry URI to unpublish\u000a* `ver` {String} version to unpublish. Leave blank to unpublish all\u000a versions.\u000a* `cb` {Function}\u000a\u000aRemove a version of a package (or all versions) from the registry. When the\u000alast version us unpublished, the entire document is removed from the database.\u000a\u000a# client.upload(uri, file, [etag], [nofollow], cb)\u000a\u000a* `uri` {String} The complete registry URI to upload to\u000a* `file` {String | Stream} Either the filename or a readable stream\u000a* `etag` {String} Cache ETag\u000a* `nofollow` {Boolean} Do not follow 301/302 responses\u000a* `cb` {Function}\u000a\u000aUpload an attachment. Mostly used by `client.publish()`.\u000a","maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"time":{"modified":"2014-07-31T21:59:52.896Z","created":"2012-06-07T04:43:36.581Z","0.0.1":"2012-06-07T04:43:38.123Z","0.0.2":"2012-06-07T05:35:05.937Z","0.0.3":"2012-06-09T00:55:25.861Z","0.0.4":"2012-06-11T03:53:26.548Z","0.0.5":"2012-06-11T23:48:11.235Z","0.0.6":"2012-06-17T06:23:27.320Z","0.0.7":"2012-06-18T19:19:38.315Z","0.0.8":"2012-06-28T20:40:20.563Z","0.0.9":"2012-07-10T03:28:04.651Z","0.0.10":"2012-07-11T17:03:45.151Z","0.0.11":"2012-07-17T14:06:37.489Z","0.1.0":"2012-07-23T18:17:38.007Z","0.1.1":"2012-07-23T21:21:28.196Z","0.1.2":"2012-07-24T06:14:12.831Z","0.1.3":"2012-08-07T02:02:20.564Z","0.1.4":"2012-08-15T03:04:52.822Z","0.1.5":"2012-08-17T21:59:33.310Z","0.2.0":"2012-08-17T22:00:18.081Z","0.2.1":"2012-08-17T22:07:28.827Z","0.2.2":"2012-08-17T22:37:24.352Z","0.2.3":"2012-08-19T19:16:44.808Z","0.2.4":"2012-08-19T19:18:51.792Z","0.2.5":"2012-08-20T16:54:50.794Z","0.2.6":"2012-08-22T00:25:04.766Z","0.2.7":"2012-08-27T19:07:34.829Z","0.2.8":"2012-10-02T19:53:50.661Z","0.2.9":"2012-10-03T22:09:50.766Z","0.2.10":"2012-10-25T14:55:54.216Z","0.2.11":"2012-12-21T16:26:38.094Z","0.2.12":"2013-01-18T22:22:41.668Z","0.2.13":"2013-02-06T00:16:35.939Z","0.2.14":"2013-02-10T02:44:02.764Z","0.2.15":"2013-02-11T19:18:55.678Z","0.2.16":"2013-02-15T17:09:03.249Z","0.2.17":"2013-02-16T03:47:13.898Z","0.2.18":"2013-03-06T22:09:23.536Z","0.2.19":"2013-03-20T06:27:39.128Z","0.2.20":"2013-03-28T00:43:07.558Z","0.2.21":"2013-04-29T15:46:54.094Z","0.2.22":"2013-04-29T15:51:02.178Z","0.2.23":"2013-05-11T00:28:14.198Z","0.2.24":"2013-05-24T21:27:50.693Z","0.2.25":"2013-06-20T15:36:46.277Z","0.2.26":"2013-07-06T17:12:54.670Z","0.2.27":"2013-07-11T07:14:45.740Z","0.2.28":"2013-08-02T20:27:41.732Z","0.2.29":"2013-10-28T18:23:24.477Z","0.2.30":"2013-11-18T23:12:00.540Z","0.2.31":"2013-12-16T08:36:43.044Z","0.3.0":"2013-12-17T07:03:10.699Z","0.3.1":"2013-12-17T16:53:27.867Z","0.3.2":"2013-12-17T22:25:14.882Z","0.3.3":"2013-12-21T16:07:06.773Z","0.3.4":"2014-01-29T15:24:05.163Z","0.3.5":"2014-01-31T01:53:19.656Z","0.3.6":"2014-02-07T00:17:21.362Z","0.4.0":"2014-02-13T01:17:18.973Z","0.4.1":"2014-02-13T23:47:37.892Z","0.4.2":"2014-02-14T00:29:13.086Z","0.4.3":"2014-02-16T03:40:54.640Z","0.4.4":"2014-02-16T03:41:48.856Z","0.4.5":"2014-03-12T05:09:17.474Z","0.4.6":"2014-03-29T19:44:15.041Z","0.4.7":"2014-04-02T19:41:07.149Z","0.4.8":"2014-05-01T22:24:54.980Z","0.4.9":"2014-05-12T21:52:55.127Z","0.4.10":"2014-05-13T16:44:29.801Z","0.4.11":"2014-05-13T20:33:04.738Z","0.4.12":"2014-05-14T06:14:22.842Z","1.0.0":"2014-05-14T23:04:37.188Z","1.0.1":"2014-06-03T00:55:54.448Z","2.0.0":"2014-06-06T04:23:46.579Z","2.0.1":"2014-06-06T06:25:14.419Z","2.0.2":"2014-06-14T00:33:10.205Z","3.0.0":"2014-07-02T00:30:29.154Z","3.0.1":"2014-07-14T23:29:05.057Z","2.0.3":"2014-07-15T00:09:36.043Z","3.0.2":"2014-07-17T06:30:02.659Z","3.0.3":"2014-07-23T21:20:42.406Z","3.0.4":"2014-07-25T00:27:26.007Z","3.0.5":"2014-07-25T00:28:48.007Z","3.0.6":"2014-07-31T21:57:49.043Z","2.0.4":"2014-07-31T21:59:52.896Z"},"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"repository":{"url":"git://github.com/isaacs/npm-registry-client"},"users":{"fgribreau":true,"fengmk2":true},"readmeFilename":"README.md","homepage":"https://github.com/isaacs/npm-registry-client","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"license":"ISC","_attachments":{}}
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json
new file mode 100644
index 0000000000..01da300276
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json
@@ -0,0 +1 @@
+{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}} \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz
new file mode 100644
index 0000000000..19da9baa7f
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz
Binary files differ
diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json
new file mode 100644
index 0000000000..d899f11922
--- /dev/null
+++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json
@@ -0,0 +1 @@
+{"_id":"underscore","_rev":"72-47f2986bfd8e8b55068b204588bbf484","name":"underscore","description":"JavaScript's functional programming helper library.","dist-tags":{"latest":"1.3.3","stable":"1.3.3"},"versions":{"1.0.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.3","_id":"underscore@1.0.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.0.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.4","_id":"underscore@1.0.4","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.4.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.0":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.0","_id":"underscore@1.1.0","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.0.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.1":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.1","_id":"underscore@1.1.1","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.1.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.2":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.2","_id":"underscore@1.1.2","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.2.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.3","_id":"underscore@1.1.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.8-1","_nodeVersion":"v0.2.5","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore.js","version":"1.1.4","_id":"underscore@1.1.4","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.9","_nodeVersion":"v0.5.0-pre","dist":{"shasum":"9e82274902865625b3a6d4c315a38ffd80047dae","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.4.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.1.5":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.5","_id":"underscore@1.1.5","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.16","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"23601d62c75619998b2f0db24938102793336a56","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.5.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.6":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.6","_id":"underscore@1.1.6","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"6868da1bdd72d75285be0b4e50f228e70d001a2c","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.6.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.7":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.7","devDependencies":{},"_id":"underscore@1.1.7","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.3","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"40bab84bad19d230096e8d6ef628bff055d83db0","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz"},"scripts":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.0","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.0","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"b32ce32c8c118caa8031c10b54c7f65ab3b557fd","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.0.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.1","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.1","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"fc5c6b0765673d92a2d4ac8b4dc0aa88702e2bd4","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.2","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"74dd40e9face84e724eb2edae945b8aedc233ba3","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.2.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.3","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"11b874da70f4683d7d48bba2b44be1e600d2f6cf","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.3.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.4":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.4","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.4","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"e8da6241aa06f64df2473bb2590b8c17c84c3c7e","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.0","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.0","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"253b2d79b7bb67943ced0fc744eb18267963ede8","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.0.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.1","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.1","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"6cb8aad0e77eb5dbbfb54b22bcd8697309cf9641","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.1.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.2","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"1b4e455089ab1d1d38ab6794ffe6cf08f764394a","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.2.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}}},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"time":{"1.0.3":"2011-12-07T15:12:18.045Z","1.0.4":"2011-12-07T15:12:18.045Z","1.1.0":"2011-12-07T15:12:18.045Z","1.1.1":"2011-12-07T15:12:18.045Z","1.1.2":"2011-12-07T15:12:18.045Z","1.1.3":"2011-12-07T15:12:18.045Z","1.1.4":"2011-12-07T15:12:18.045Z","1.1.5":"2011-12-07T15:12:18.045Z","1.1.6":"2011-12-07T15:12:18.045Z","1.1.7":"2011-12-07T15:12:18.045Z","1.2.0":"2011-12-07T15:12:18.045Z","1.2.1":"2011-12-07T15:12:18.045Z","1.2.2":"2011-11-14T20:28:47.115Z","1.2.3":"2011-12-07T15:12:18.045Z","1.2.4":"2012-01-09T17:23:14.818Z","1.3.0":"2012-01-11T16:41:38.459Z","1.3.1":"2012-01-23T22:57:36.474Z","1.3.2":"2012-04-09T18:38:14.345Z","1.3.3":"2012-04-10T14:43:48.089Z"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"users":{"vesln":true,"mvolkmann":true,"lancehunt":true,"mikl":true,"linus":true,"vasc":true,"bat":true,"dmalam":true,"mbrevoort":true,"danielr":true,"rsimoes":true,"thlorenz":true}} \ No newline at end of file
diff --git a/deps/npm/node_modules/npm-registry-client/test/lib/common.js b/deps/npm/node_modules/npm-registry-client/test/lib/common.js
index bbf55ca302..712f6632f2 100644
--- a/deps/npm/node_modules/npm-registry-client/test/lib/common.js
+++ b/deps/npm/node_modules/npm-registry-client/test/lib/common.js
@@ -39,6 +39,10 @@ module.exports = {
c.email = this.get(nerfed + ":email")
}
+ if (this.get(nerfed + ":always-auth") !== undefined) {
+ c.alwaysAuth = this.get(nerfed + ":always-auth")
+ }
+
if (c.username && c.password) {
c.auth = new Buffer(c.username + ":" + c.password).toString("base64")
}
diff --git a/deps/npm/node_modules/npm-user-validate/package.json b/deps/npm/node_modules/npm-user-validate/package.json
index b9377c7716..cf4440364b 100644
--- a/deps/npm/node_modules/npm-user-validate/package.json
+++ b/deps/npm/node_modules/npm-user-validate/package.json
@@ -1,6 +1,6 @@
{
"name": "npm-user-validate",
- "version": "0.1.0",
+ "version": "0.1.1",
"description": "User validations for npm",
"main": "npm-user-validate.js",
"devDependencies": {
@@ -11,7 +11,7 @@
},
"repository": {
"type": "git",
- "url": "git://github.com/npm/npm-registry-mock.git"
+ "url": "git://github.com/npm/npm-user-validate.git"
},
"keywords": [
"npm",
@@ -23,13 +23,34 @@
"email": "rok@kowalski.gd"
},
"license": "BSD",
- "readme": "[![Build Status](https://travis-ci.org/npm/npm-user-validate.png?branch=master)](https://travis-ci.org/npm/npm-user-validate)\n[![devDependency Status](https://david-dm.org/npm/npm-user-validate/dev-status.png)](https://david-dm.org/npm/npm-user-validate#info=devDependencies)\n\n# npm-user-validate\n\nValidation for the npm client and npm-www (and probably other npm projects)\n",
- "readmeFilename": "README.md",
+ "gitHead": "64c9bd4ded742c41afdb3a8414fbbfdbfdcdf6b7",
"bugs": {
- "url": "https://github.com/npm/npm-registry-mock/issues"
+ "url": "https://github.com/npm/npm-user-validate/issues"
},
- "homepage": "https://github.com/npm/npm-registry-mock",
- "_id": "npm-user-validate@0.1.0",
- "_shasum": "358a5b5148ed3f79771d980388c6e34c4a61f638",
- "_from": "npm-user-validate@latest"
+ "homepage": "https://github.com/npm/npm-user-validate",
+ "_id": "npm-user-validate@0.1.1",
+ "_shasum": "ea7774636c3c8fe6d01e174bd9f2ee0e22eeed57",
+ "_from": "npm-user-validate@>=0.1.1 <0.2.0",
+ "_npmVersion": "2.1.3",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "robertkowalski",
+ "email": "rok@kowalski.gd"
+ },
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "ea7774636c3c8fe6d01e174bd9f2ee0e22eeed57",
+ "tarball": "http://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.1.tgz"
}
diff --git a/deps/npm/node_modules/npmconf/.npmignore b/deps/npm/node_modules/npmconf/.npmignore
deleted file mode 100644
index 485007791f..0000000000
--- a/deps/npm/node_modules/npmconf/.npmignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/test/fixtures/userconfig-with-gc
-.eslintrc
-.jshintrc
diff --git a/deps/npm/node_modules/npmconf/README.md b/deps/npm/node_modules/npmconf/README.md
deleted file mode 100644
index afc995d1af..0000000000
--- a/deps/npm/node_modules/npmconf/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# npmconf
-
-The config thing npm uses
-
-If you are interested in interacting with the config settings that npm
-uses, then use this module.
-
-However, if you are writing a new Node.js program, and want
-configuration functionality similar to what npm has, but for your
-own thing, then I'd recommend using [rc](https://github.com/dominictarr/rc),
-which is probably what you want.
-
-If I were to do it all over again, that's what I'd do for npm. But,
-alas, there are many systems depending on many of the particulars of
-npm's configuration setup, so it's not worth the cost of changing.
-
-## USAGE
-
-```javascript
-var npmconf = require('npmconf')
-
-// pass in the cli options that you read from the cli
-// or whatever top-level configs you want npm to use for now.
-npmconf.load({some:'configs'}, function (er, conf) {
- // do stuff with conf
- conf.get('some', 'cli') // 'configs'
- conf.get('username') // 'joebobwhatevers'
- conf.set('foo', 'bar', 'user')
- conf.save('user', function (er) {
- // foo = bar is now saved to ~/.npmrc or wherever
- })
-})
-```
diff --git a/deps/npm/node_modules/npmconf/config-defs.js b/deps/npm/node_modules/npmconf/config-defs.js
deleted file mode 100644
index b0b4acf22d..0000000000
--- a/deps/npm/node_modules/npmconf/config-defs.js
+++ /dev/null
@@ -1,381 +0,0 @@
-// defaults, types, and shorthands.
-
-
-var path = require("path")
- , url = require("url")
- , Stream = require("stream").Stream
- , semver = require("semver")
- , stableFamily = semver.parse(process.version)
- , nopt = require("nopt")
- , os = require("os")
- , osenv = require("osenv")
-
-var log
-try {
- log = require("npmlog")
-} catch (er) {
- var util = require("util")
- log = { warn: function (m) {
- console.warn(m + ' ' + util.format.apply(util, [].slice.call(arguments, 1)))
- } }
-}
-
-exports.Octal = Octal
-function Octal () {}
-function validateOctal (data, k, val) {
- // must be either an integer or an octal string.
- if (typeof val === "number") {
- data[k] = val
- return true
- }
-
- if (typeof val === "string") {
- if (val.charAt(0) !== "0" || isNaN(val)) return false
- data[k] = parseInt(val, 8).toString(8)
- }
-}
-
-function validateSemver (data, k, val) {
- if (!semver.valid(val)) return false
- data[k] = semver.valid(val)
-}
-
-function validateTag (data, k, val) {
- val = ('' + val).trim()
- if (!val || semver.validRange(val)) return false
- data[k] = val
-}
-
-function validateStream (data, k, val) {
- if (!(val instanceof Stream)) return false
- data[k] = val
-}
-
-nopt.typeDefs.semver = { type: semver, validate: validateSemver }
-nopt.typeDefs.Octal = { type: Octal, validate: validateOctal }
-nopt.typeDefs.Stream = { type: Stream, validate: validateStream }
-
-// Don't let --tag=1.2.3 ever be a thing
-var tag = {}
-nopt.typeDefs.tag = { type: tag, validate: validateTag }
-
-nopt.invalidHandler = function (k, val, type) {
- log.warn("invalid config", k + "=" + JSON.stringify(val))
-
- if (Array.isArray(type)) {
- if (type.indexOf(url) !== -1) type = url
- else if (type.indexOf(path) !== -1) type = path
- }
-
- switch (type) {
- case tag:
- log.warn("invalid config", "Tag must not be a SemVer range")
- break
- case Octal:
- log.warn("invalid config", "Must be octal number, starting with 0")
- break
- case url:
- log.warn("invalid config", "Must be a full url with 'http://'")
- break
- case path:
- log.warn("invalid config", "Must be a valid filesystem path")
- break
- case Number:
- log.warn("invalid config", "Must be a numeric value")
- break
- case Stream:
- log.warn("invalid config", "Must be an instance of the Stream class")
- break
- }
-}
-
-if (!stableFamily || (+stableFamily.minor % 2)) stableFamily = null
-else stableFamily = stableFamily.major + "." + stableFamily.minor
-
-var defaults
-
-var temp = osenv.tmpdir()
-var home = osenv.home()
-
-var uidOrPid = process.getuid ? process.getuid() : process.pid
-
-if (home) process.env.HOME = home
-else home = path.resolve(temp, "npm-" + uidOrPid)
-
-var cacheExtra = process.platform === "win32" ? "npm-cache" : ".npm"
-var cacheRoot = process.platform === "win32" && process.env.APPDATA || home
-var cache = path.resolve(cacheRoot, cacheExtra)
-
-
-var globalPrefix
-Object.defineProperty(exports, "defaults", {get: function () {
- if (defaults) return defaults
-
- if (process.env.PREFIX) {
- globalPrefix = process.env.PREFIX
- } else if (process.platform === "win32") {
- // c:\node\node.exe --> prefix=c:\node\
- globalPrefix = path.dirname(process.execPath)
- } else {
- // /usr/local/bin/node --> prefix=/usr/local
- globalPrefix = path.dirname(path.dirname(process.execPath))
-
- // destdir only is respected on Unix
- if (process.env.DESTDIR) {
- globalPrefix = path.join(process.env.DESTDIR, globalPrefix)
- }
- }
-
- return defaults =
- { "always-auth" : false
- , "bin-links" : true
- , browser : null
-
- , ca: null
- , cafile: null
-
- , cache : cache
-
- , "cache-lock-stale": 60000
- , "cache-lock-retries": 10
- , "cache-lock-wait": 10000
-
- , "cache-max": Infinity
- , "cache-min": 10
-
- , cert: null
-
- , color : true
- , depth: Infinity
- , description : true
- , dev : false
- , editor : osenv.editor()
- , "engine-strict": false
- , force : false
-
- , "fetch-retries": 2
- , "fetch-retry-factor": 10
- , "fetch-retry-mintimeout": 10000
- , "fetch-retry-maxtimeout": 60000
-
- , git: "git"
- , "git-tag-version": true
-
- , global : false
- , globalconfig : path.resolve(globalPrefix, "etc", "npmrc")
- , group : process.platform === "win32" ? 0
- : process.env.SUDO_GID || (process.getgid && process.getgid())
- , heading: "npm"
- , "ignore-scripts": false
- , "init-module": path.resolve(home, ".npm-init.js")
- , "init.author.name" : ""
- , "init.author.email" : ""
- , "init.author.url" : ""
- , "init.version": "1.0.0"
- , "init.license": "ISC"
- , json: false
- , key: null
- , link: false
- , "local-address" : undefined
- , loglevel : "warn"
- , logstream : process.stderr
- , long : false
- , message : "%s"
- , "node-version" : process.version
- , npat : false
- , "onload-script" : false
- , optional: true
- , parseable : false
- , prefix : globalPrefix
- , production: process.env.NODE_ENV === "production"
- , "proprietary-attribs": true
- , proxy : process.env.HTTP_PROXY || process.env.http_proxy || null
- , "https-proxy" : process.env.HTTPS_PROXY || process.env.https_proxy ||
- process.env.HTTP_PROXY || process.env.http_proxy || null
- , "user-agent" : "npm/{npm-version} "
- + "node/{node-version} "
- + "{platform} "
- + "{arch}"
- , "rebuild-bundle" : true
- , registry : "https://registry.npmjs.org/"
- , rollback : true
- , save : false
- , "save-bundle": false
- , "save-dev" : false
- , "save-exact" : false
- , "save-optional" : false
- , "save-prefix": "^"
- , scope : ""
- , searchopts: ""
- , searchexclude: null
- , searchsort: "name"
- , shell : osenv.shell()
- , shrinkwrap: true
- , "sign-git-tag": false
- , spin: true
- , "strict-ssl": true
- , tag : "latest"
- , tmp : temp
- , unicode : true
- , "unsafe-perm" : process.platform === "win32"
- || process.platform === "cygwin"
- || !( process.getuid && process.setuid
- && process.getgid && process.setgid )
- || process.getuid() !== 0
- , usage : false
- , user : process.platform === "win32" ? 0 : "nobody"
- , userconfig : path.resolve(home, ".npmrc")
- , umask: process.umask ? process.umask() : parseInt("022", 8)
- , version : false
- , versions : false
- , viewer: process.platform === "win32" ? "browser" : "man"
-
- , _exit : true
- }
-}})
-
-exports.types =
- { "always-auth" : Boolean
- , "bin-links": Boolean
- , browser : [null, String]
- , ca: [null, String, Array]
- , cafile : path
- , cache : path
- , "cache-lock-stale": Number
- , "cache-lock-retries": Number
- , "cache-lock-wait": Number
- , "cache-max": Number
- , "cache-min": Number
- , cert: [null, String]
- , color : ["always", Boolean]
- , depth : Number
- , description : Boolean
- , dev : Boolean
- , editor : String
- , "engine-strict": Boolean
- , force : Boolean
- , "fetch-retries": Number
- , "fetch-retry-factor": Number
- , "fetch-retry-mintimeout": Number
- , "fetch-retry-maxtimeout": Number
- , git: String
- , "git-tag-version": Boolean
- , global : Boolean
- , globalconfig : path
- , group : [Number, String]
- , "https-proxy" : [null, url]
- , "user-agent" : String
- , "heading": String
- , "ignore-scripts": Boolean
- , "init-module": path
- , "init.author.name" : String
- , "init.author.email" : String
- , "init.author.url" : ["", url]
- , "init.license": String
- , "init.version": semver
- , json: Boolean
- , key: [null, String]
- , link: Boolean
- // local-address must be listed as an IP for a local network interface
- // must be IPv4 due to node bug
- , "local-address" : getLocalAddresses()
- , loglevel : ["silent","error","warn","http","info","verbose","silly"]
- , logstream : Stream
- , long : Boolean
- , message: String
- , "node-version" : [null, semver]
- , npat : Boolean
- , "onload-script" : [null, String]
- , optional: Boolean
- , parseable : Boolean
- , prefix: path
- , production: Boolean
- , "proprietary-attribs": Boolean
- , proxy : [null, url]
- , "rebuild-bundle" : Boolean
- , registry : [null, url]
- , rollback : Boolean
- , save : Boolean
- , "save-bundle": Boolean
- , "save-dev" : Boolean
- , "save-exact" : Boolean
- , "save-optional" : Boolean
- , "save-prefix": String
- , scope : String
- , searchopts : String
- , searchexclude: [null, String]
- , searchsort: [ "name", "-name"
- , "description", "-description"
- , "author", "-author"
- , "date", "-date"
- , "keywords", "-keywords" ]
- , shell : String
- , shrinkwrap: Boolean
- , "sign-git-tag": Boolean
- , spin: ["always", Boolean]
- , "strict-ssl": Boolean
- , tag : tag
- , tmp : path
- , unicode : Boolean
- , "unsafe-perm" : Boolean
- , usage : Boolean
- , user : [Number, String]
- , userconfig : path
- , umask: Octal
- , version : Boolean
- , versions : Boolean
- , viewer: String
- , _exit : Boolean
- }
-
-function getLocalAddresses() {
- Object.keys(os.networkInterfaces()).map(function (nic) {
- return os.networkInterfaces()[nic].filter(function (addr) {
- return addr.family === "IPv4"
- })
- .map(function (addr) {
- return addr.address
- })
- }).reduce(function (curr, next) {
- return curr.concat(next)
- }, []).concat(undefined)
-}
-
-exports.shorthands =
- { s : ["--loglevel", "silent"]
- , d : ["--loglevel", "info"]
- , dd : ["--loglevel", "verbose"]
- , ddd : ["--loglevel", "silly"]
- , noreg : ["--no-registry"]
- , N : ["--no-registry"]
- , reg : ["--registry"]
- , "no-reg" : ["--no-registry"]
- , silent : ["--loglevel", "silent"]
- , verbose : ["--loglevel", "verbose"]
- , quiet: ["--loglevel", "warn"]
- , q: ["--loglevel", "warn"]
- , h : ["--usage"]
- , H : ["--usage"]
- , "?" : ["--usage"]
- , help : ["--usage"]
- , v : ["--version"]
- , f : ["--force"]
- , gangster : ["--force"]
- , gangsta : ["--force"]
- , desc : ["--description"]
- , "no-desc" : ["--no-description"]
- , "local" : ["--no-global"]
- , l : ["--long"]
- , m : ["--message"]
- , p : ["--parseable"]
- , porcelain : ["--parseable"]
- , g : ["--global"]
- , S : ["--save"]
- , D : ["--save-dev"]
- , E : ["--save-exact"]
- , O : ["--save-optional"]
- , y : ["--yes"]
- , n : ["--no-yes"]
- , B : ["--save-bundle"]
- , C : ["--prefix"]
- }
diff --git a/deps/npm/node_modules/npmconf/lib/find-prefix.js b/deps/npm/node_modules/npmconf/lib/find-prefix.js
deleted file mode 100644
index bb00cd6b10..0000000000
--- a/deps/npm/node_modules/npmconf/lib/find-prefix.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// try to find the most reasonable prefix to use
-
-module.exports = findPrefix
-
-var fs = require("fs")
-var path = require("path")
-
-function findPrefix (p, cb_) {
- function cb (er, p) {
- process.nextTick(function () {
- cb_(er, p)
- })
- }
-
- p = path.resolve(p)
- // if there's no node_modules folder, then
- // walk up until we hopefully find one.
- // if none anywhere, then use cwd.
- var walkedUp = false
- while (path.basename(p) === "node_modules") {
- p = path.dirname(p)
- walkedUp = true
- }
- if (walkedUp) return cb(null, p)
-
- findPrefix_(p, p, cb)
-}
-
-function findPrefix_ (p, original, cb) {
- if (p === "/"
- || (process.platform === "win32" && p.match(/^[a-zA-Z]:(\\|\/)?$/))) {
- return cb(null, original)
- }
- fs.readdir(p, function (er, files) {
- // an error right away is a bad sign.
- // unless the prefix was simply a non
- // existent directory.
- if (er && p === original) {
- if (er.code === "ENOENT") return cb(null, original);
- return cb(er)
- }
-
- // walked up too high or something.
- if (er) return cb(null, original)
-
- if (files.indexOf("node_modules") !== -1
- || files.indexOf("package.json") !== -1) {
- return cb(null, p)
- }
-
- var d = path.dirname(p)
- if (d === p) return cb(null, original)
-
- return findPrefix_(d, original, cb)
- })
-}
diff --git a/deps/npm/node_modules/npmconf/lib/get-credentials-by-uri.js b/deps/npm/node_modules/npmconf/lib/get-credentials-by-uri.js
deleted file mode 100644
index 6fb8f31707..0000000000
--- a/deps/npm/node_modules/npmconf/lib/get-credentials-by-uri.js
+++ /dev/null
@@ -1,57 +0,0 @@
-var assert = require("assert")
-
-var toNerfDart = require("./nerf-dart.js")
-
-module.exports = getCredentialsByURI
-
-function getCredentialsByURI (uri) {
- assert(uri && typeof uri === "string", "registry URL is required")
- var nerfed = toNerfDart(uri)
- var defnerf = toNerfDart(this.get("registry"))
-
- var c = {scope : nerfed}
-
- if (this.get(nerfed + ":_authToken")) {
- c.token = this.get(nerfed + ":_authToken")
- // the bearer token is enough, don't confuse things
- return c
- }
-
- // Handle the old-style _auth=<base64> style for the default
- // registry, if set.
- //
- // XXX(isaacs): Remove when npm 1.4 is no longer relevant
- var authDef = this.get("_auth")
- var userDef = this.get("username")
- var passDef = this.get("_password")
- if (authDef && !(userDef && passDef)) {
- authDef = new Buffer(authDef, "base64").toString()
- authDef = authDef.split(":")
- userDef = authDef.shift()
- passDef = authDef.join(":")
- }
-
- if (this.get(nerfed + ":_password")) {
- c.password = new Buffer(this.get(nerfed + ":_password"), "base64").toString("utf8")
- } else if (nerfed === defnerf && passDef) {
- c.password = passDef
- }
-
- if (this.get(nerfed + ":username")) {
- c.username = this.get(nerfed + ":username")
- } else if (nerfed === defnerf && userDef) {
- c.username = userDef
- }
-
- if (this.get(nerfed + ":email")) {
- c.email = this.get(nerfed + ":email")
- } else if (this.get("email")) {
- c.email = this.get("email")
- }
-
- if (c.username && c.password) {
- c.auth = new Buffer(c.username + ":" + c.password).toString("base64")
- }
-
- return c
-}
diff --git a/deps/npm/node_modules/npmconf/lib/load-cafile.js b/deps/npm/node_modules/npmconf/lib/load-cafile.js
deleted file mode 100644
index b8c9fff233..0000000000
--- a/deps/npm/node_modules/npmconf/lib/load-cafile.js
+++ /dev/null
@@ -1,31 +0,0 @@
-module.exports = loadCAFile
-
-var fs = require('fs')
-
-function loadCAFile(cafilePath, cb) {
- if (!cafilePath)
- return process.nextTick(cb)
-
- fs.readFile(cafilePath, 'utf8', afterCARead.bind(this))
-
- function afterCARead(er, cadata) {
- if (er)
- return cb(er)
-
- var delim = '-----END CERTIFICATE-----'
- var output
-
- output = cadata
- .split(delim)
- .filter(function(xs) {
- return !!xs.trim()
- })
- .map(function(xs) {
- return xs.trimLeft() + delim
- })
-
- this.set('ca', output)
- cb(null)
- }
-
-}
diff --git a/deps/npm/node_modules/npmconf/lib/load-prefix.js b/deps/npm/node_modules/npmconf/lib/load-prefix.js
deleted file mode 100644
index bb39d9c98d..0000000000
--- a/deps/npm/node_modules/npmconf/lib/load-prefix.js
+++ /dev/null
@@ -1,49 +0,0 @@
-module.exports = loadPrefix
-
-var findPrefix = require("./find-prefix.js")
-var path = require('path')
-
-function loadPrefix (cb) {
- var cli = this.list[0]
-
- Object.defineProperty(this, "prefix",
- { set : function (prefix) {
- var g = this.get("global")
- this[g ? 'globalPrefix' : 'localPrefix'] = prefix
- }.bind(this)
- , get : function () {
- var g = this.get("global")
- return g ? this.globalPrefix : this.localPrefix
- }.bind(this)
- , enumerable : true
- })
-
- Object.defineProperty(this, "globalPrefix",
- { set : function (prefix) {
- this.set('prefix', prefix)
- }.bind(this)
- , get : function () {
- return path.resolve(this.get("prefix"))
- }.bind(this)
- , enumerable : true
- })
-
- var p
- Object.defineProperty(this, "localPrefix",
- { set : function (prefix) { p = prefix },
- get : function () { return p }
- , enumerable: true })
-
- // try to guess at a good node_modules location.
- // If we are *explicitly* given a prefix on the cli, then
- // always use that. otherwise, infer local prefix from cwd.
- if (Object.prototype.hasOwnProperty.call(cli, "prefix")) {
- p = path.resolve(cli.prefix)
- process.nextTick(cb)
- } else {
- findPrefix(process.cwd(), function (er, found) {
- p = found
- cb(er)
- }.bind(this))
- }
-}
diff --git a/deps/npm/node_modules/npmconf/lib/load-uid.js b/deps/npm/node_modules/npmconf/lib/load-uid.js
deleted file mode 100644
index 3ca7987735..0000000000
--- a/deps/npm/node_modules/npmconf/lib/load-uid.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = loadUid
-
-var getUid = require("uid-number")
-
-// Call in the context of a npmconf object
-
-function loadUid (cb) {
- // if we're not in unsafe-perm mode, then figure out who
- // to run stuff as. Do this first, to support `npm update npm -g`
- if (!this.get("unsafe-perm")) {
- getUid(this.get("user"), this.get("group"), cb)
- } else {
- process.nextTick(cb)
- }
-}
diff --git a/deps/npm/node_modules/npmconf/lib/nerf-dart.js b/deps/npm/node_modules/npmconf/lib/nerf-dart.js
deleted file mode 100644
index 3b26a56c65..0000000000
--- a/deps/npm/node_modules/npmconf/lib/nerf-dart.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var url = require("url")
-
-module.exports = toNerfDart
-
-/**
- * Maps a URL to an identifier.
- *
- * Name courtesy schiffertronix media LLC, a New Jersey corporation
- *
- * @param {String} uri The URL to be nerfed.
- *
- * @returns {String} A nerfed URL.
- */
-function toNerfDart(uri) {
- var parsed = url.parse(uri)
- parsed.pathname = "/"
- delete parsed.protocol
- delete parsed.auth
-
- return url.format(parsed)
-}
diff --git a/deps/npm/node_modules/npmconf/lib/set-credentials-by-uri.js b/deps/npm/node_modules/npmconf/lib/set-credentials-by-uri.js
deleted file mode 100644
index 2fa0d19e36..0000000000
--- a/deps/npm/node_modules/npmconf/lib/set-credentials-by-uri.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var assert = require("assert")
-
-var toNerfDart = require("./nerf-dart.js")
-
-module.exports = setCredentialsByURI
-
-function setCredentialsByURI (uri, c) {
- assert(uri && typeof uri === "string", "registry URL is required")
- assert(c && typeof c === "object", "credentials are required")
-
- var nerfed = toNerfDart(uri)
-
- if (c.token) {
- this.set(nerfed + ":_authToken", c.token, "user")
- this.del(nerfed + ":_password", "user")
- this.del(nerfed + ":username", "user")
- this.del(nerfed + ":email", "user")
- }
- else if (c.username || c.password || c.email) {
- assert(c.username, "must include username")
- assert(c.password, "must include password")
- assert(c.email, "must include email address")
-
- this.del(nerfed + ":_authToken", "user")
-
- var encoded = new Buffer(c.password, "utf8").toString("base64")
- this.set(nerfed + ":_password", encoded, "user")
- this.set(nerfed + ":username", c.username, "user")
- this.set(nerfed + ":email", c.email, "user")
- }
- else {
- throw new Error("No credentials to set.")
- }
-}
diff --git a/deps/npm/node_modules/npmconf/lib/set-user.js b/deps/npm/node_modules/npmconf/lib/set-user.js
deleted file mode 100644
index cf29b1ace2..0000000000
--- a/deps/npm/node_modules/npmconf/lib/set-user.js
+++ /dev/null
@@ -1,26 +0,0 @@
-module.exports = setUser
-
-var Conf = require('../npmconf.js').Conf
-var assert = require('assert')
-var path = require('path')
-var fs = require('fs')
-
-function setUser (cb) {
- var defaultConf = this.root
- assert(defaultConf !== Object.prototype)
-
- // If global, leave it as-is.
- // If not global, then set the user to the owner of the prefix folder.
- // Just set the default, so it can be overridden.
- if (this.get("global")) return cb()
- if (process.env.SUDO_UID) {
- defaultConf.user = +(process.env.SUDO_UID)
- return cb()
- }
-
- var prefix = path.resolve(this.get("prefix"))
- fs.stat(prefix, function (er, st) {
- defaultConf.user = st && st.uid
- return cb(er)
- })
-}
diff --git a/deps/npm/node_modules/npmconf/npmconf.js b/deps/npm/node_modules/npmconf/npmconf.js
deleted file mode 100644
index 7607b50f82..0000000000
--- a/deps/npm/node_modules/npmconf/npmconf.js
+++ /dev/null
@@ -1,414 +0,0 @@
-
-var CC = require('config-chain').ConfigChain
-var inherits = require('inherits')
-var configDefs = require('./config-defs.js')
-var types = configDefs.types
-var once = require('once')
-var fs = require('fs')
-var path = require('path')
-var nopt = require('nopt')
-var ini = require('ini')
-var Octal = configDefs.Octal
-var mkdirp = require('mkdirp')
-
-exports.load = load
-exports.Conf = Conf
-exports.loaded = false
-exports.rootConf = null
-exports.usingBuiltin = false
-exports.defs = configDefs
-
-Object.defineProperty(exports, 'defaults', { get: function () {
- return configDefs.defaults
-}, enumerable: true })
-
-Object.defineProperty(exports, 'types', { get: function () {
- return configDefs.types
-}, enumerable: true })
-
-exports.validate = validate
-
-var myUid = process.env.SUDO_UID !== undefined
- ? process.env.SUDO_UID : (process.getuid && process.getuid())
-var myGid = process.env.SUDO_GID !== undefined
- ? process.env.SUDO_GID : (process.getgid && process.getgid())
-
-
-var loading = false
-var loadCbs = []
-function load (cli_, builtin_, cb_) {
- var cli, builtin, cb
- for (var i = 0; i < arguments.length; i++)
- switch (typeof arguments[i]) {
- case 'string': builtin = arguments[i]; break
- case 'object': cli = arguments[i]; break
- case 'function': cb = arguments[i]; break
- }
-
- if (!cb)
- cb = function () {}
-
- if (exports.loaded) {
- var ret = exports.loaded
- if (cli) {
- ret = new Conf(ret)
- ret.unshift(cli)
- }
- return process.nextTick(cb.bind(null, null, ret))
- }
-
- // either a fresh object, or a clone of the passed in obj
- if (!cli)
- cli = {}
- else
- cli = Object.keys(cli).reduce(function (c, k) {
- c[k] = cli[k]
- return c
- }, {})
-
- loadCbs.push(cb)
- if (loading)
- return
-
- loading = true
-
- cb = once(function (er, conf) {
- if (!er)
- exports.loaded = conf
- loadCbs.forEach(function (fn) {
- fn(er, conf)
- })
- loadCbs.length = 0
- })
-
- // check for a builtin if provided.
- exports.usingBuiltin = !!builtin
- var rc = exports.rootConf = new Conf()
- if (builtin)
- rc.addFile(builtin, 'builtin')
- else
- rc.add({}, 'builtin')
-
- rc.on('load', function () {
- load_(builtin, rc, cli, cb)
- })
-}
-
-function load_(builtin, rc, cli, cb) {
- var defaults = configDefs.defaults
- var conf = new Conf(rc)
-
- conf.usingBuiltin = !!builtin
- conf.add(cli, 'cli')
- conf.addEnv()
-
- conf.loadPrefix(function(er) {
- if (er)
- return cb(er)
-
- // If you're doing `npm --userconfig=~/foo.npmrc` then you'd expect
- // that ~/.npmrc won't override the stuff in ~/foo.npmrc (or, indeed
- // be used at all).
- //
- // However, if the cwd is ~, then ~/.npmrc is the home for the project
- // config, and will override the userconfig.
- //
- // If you're not setting the userconfig explicitly, then it will be loaded
- // twice, which is harmless but excessive. If you *are* setting the
- // userconfig explicitly then it will override your explicit intent, and
- // that IS harmful and unexpected.
- //
- // Solution: Do not load project config file that is the same as either
- // the default or resolved userconfig value. npm will log a "verbose"
- // message about this when it happens, but it is a rare enough edge case
- // that we don't have to be super concerned about it.
- var projectConf = path.resolve(conf.localPrefix, '.npmrc')
- var defaultUserConfig = rc.get('userconfig')
- var resolvedUserConfig = conf.get('userconfig')
- if (!conf.get('global') &&
- projectConf !== defaultUserConfig &&
- projectConf !== resolvedUserConfig) {
- conf.addFile(projectConf, 'project')
- conf.once('load', afterPrefix)
- } else {
- conf.add({}, 'project')
- afterPrefix()
- }
- })
-
- function afterPrefix() {
- conf.addFile(conf.get('userconfig'), 'user')
- conf.once('error', cb)
- conf.once('load', afterUser)
- }
-
- function afterUser () {
- // globalconfig and globalignorefile defaults
- // need to respond to the 'prefix' setting up to this point.
- // Eg, `npm config get globalconfig --prefix ~/local` should
- // return `~/local/etc/npmrc`
- // annoying humans and their expectations!
- if (conf.get('prefix')) {
- var etc = path.resolve(conf.get('prefix'), 'etc')
- defaults.globalconfig = path.resolve(etc, 'npmrc')
- defaults.globalignorefile = path.resolve(etc, 'npmignore')
- }
-
- conf.addFile(conf.get('globalconfig'), 'global')
-
- // move the builtin into the conf stack now.
- conf.root = defaults
- conf.add(rc.shift(), 'builtin')
- conf.once('load', function () {
- conf.loadExtras(afterExtras)
- })
- }
-
- function afterExtras(er) {
- if (er)
- return cb(er)
-
- // warn about invalid bits.
- validate(conf)
-
- var cafile = conf.get('cafile')
-
- if (cafile) {
- return conf.loadCAFile(cafile, finalize)
- }
-
- finalize()
- }
-
- function finalize(er) {
- if (er) {
- return cb(er)
- }
-
- exports.loaded = conf
- cb(er, conf)
- }
-}
-
-// Basically the same as CC, but:
-// 1. Always ini
-// 2. Parses environment variable names in field values
-// 3. Field values that start with ~/ are replaced with process.env.HOME
-// 4. Can inherit from another Conf object, using it as the base.
-inherits(Conf, CC)
-function Conf (base) {
- if (!(this instanceof Conf))
- return new Conf(base)
-
- CC.apply(this)
-
- if (base)
- if (base instanceof Conf)
- this.root = base.list[0] || base.root
- else
- this.root = base
- else
- this.root = configDefs.defaults
-}
-
-Conf.prototype.loadPrefix = require('./lib/load-prefix.js')
-Conf.prototype.loadCAFile = require('./lib/load-cafile.js')
-Conf.prototype.loadUid = require('./lib/load-uid.js')
-Conf.prototype.setUser = require('./lib/set-user.js')
-Conf.prototype.findPrefix = require('./lib/find-prefix.js')
-Conf.prototype.getCredentialsByURI = require('./lib/get-credentials-by-uri.js')
-Conf.prototype.setCredentialsByURI = require('./lib/set-credentials-by-uri.js')
-
-Conf.prototype.loadExtras = function(cb) {
- this.setUser(function(er) {
- if (er)
- return cb(er)
- this.loadUid(function(er) {
- if (er)
- return cb(er)
- // Without prefix, nothing will ever work
- mkdirp(this.prefix, cb)
- }.bind(this))
- }.bind(this))
-}
-
-Conf.prototype.save = function (where, cb) {
- var target = this.sources[where]
- if (!target || !(target.path || target.source) || !target.data) {
- if (where !== 'builtin')
- var er = new Error('bad save target: ' + where)
- if (cb) {
- process.nextTick(cb.bind(null, er))
- return this
- }
- return this.emit('error', er)
- }
-
- if (target.source) {
- var pref = target.prefix || ''
- Object.keys(target.data).forEach(function (k) {
- target.source[pref + k] = target.data[k]
- })
- if (cb) process.nextTick(cb)
- return this
- }
-
- var data = ini.stringify(target.data)
-
- then = then.bind(this)
- done = done.bind(this)
- this._saving ++
-
- var mode = where === 'user' ? "0600" : "0666"
- if (!data.trim()) {
- fs.unlink(target.path, function (er) {
- // ignore the possible error (e.g. the file doesn't exist)
- done(null)
- })
- } else {
- mkdirp(path.dirname(target.path), function (er) {
- if (er)
- return then(er)
- fs.writeFile(target.path, data, 'utf8', function (er) {
- if (er)
- return then(er)
- if (where === 'user' && myUid && myGid)
- fs.chown(target.path, +myUid, +myGid, then)
- else
- then()
- })
- })
- }
-
- function then (er) {
- if (er)
- return done(er)
- fs.chmod(target.path, mode, done)
- }
-
- function done (er) {
- if (er) {
- if (cb) return cb(er)
- else return this.emit('error', er)
- }
- this._saving --
- if (this._saving === 0) {
- if (cb) cb()
- this.emit('save')
- }
- }
-
- return this
-}
-
-Conf.prototype.addFile = function (file, name) {
- name = name || file
- var marker = {__source__:name}
- this.sources[name] = { path: file, type: 'ini' }
- this.push(marker)
- this._await()
- fs.readFile(file, 'utf8', function (er, data) {
- if (er) // just ignore missing files.
- return this.add({}, marker)
- this.addString(data, file, 'ini', marker)
- }.bind(this))
- return this
-}
-
-// always ini files.
-Conf.prototype.parse = function (content, file) {
- return CC.prototype.parse.call(this, content, file, 'ini')
-}
-
-Conf.prototype.add = function (data, marker) {
- Object.keys(data).forEach(function (k) {
- data[k] = parseField(data[k], k)
- })
- return CC.prototype.add.call(this, data, marker)
-}
-
-Conf.prototype.addEnv = function (env) {
- env = env || process.env
- var conf = {}
- Object.keys(env)
- .filter(function (k) { return k.match(/^npm_config_/i) })
- .forEach(function (k) {
- if (!env[k])
- return
-
- // leave first char untouched, even if
- // it is a "_" - convert all other to "-"
- var p = k.toLowerCase()
- .replace(/^npm_config_/, '')
- .replace(/(?!^)_/g, '-')
- conf[p] = env[k]
- })
- return CC.prototype.addEnv.call(this, '', conf, 'env')
-}
-
-function parseField (f, k) {
- if (typeof f !== 'string' && !(f instanceof String))
- return f
-
- // type can be an array or single thing.
- var typeList = [].concat(types[k])
- var isPath = -1 !== typeList.indexOf(path)
- var isBool = -1 !== typeList.indexOf(Boolean)
- var isString = -1 !== typeList.indexOf(String)
- var isOctal = -1 !== typeList.indexOf(Octal)
- var isNumber = isOctal || (-1 !== typeList.indexOf(Number))
-
- f = (''+f).trim()
-
- if (f.match(/^".*"$/))
- f = JSON.parse(f)
-
- if (isBool && !isString && f === '')
- return true
-
- switch (f) {
- case 'true': return true
- case 'false': return false
- case 'null': return null
- case 'undefined': return undefined
- }
-
- f = envReplace(f)
-
- if (isPath) {
- var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\//
- if (f.match(homePattern) && process.env.HOME) {
- f = path.resolve(process.env.HOME, f.substr(2))
- }
- f = path.resolve(f)
- }
-
- if (isNumber && !isNaN(f))
- f = isOctal ? parseInt(f, 8) : +f
-
- return f
-}
-
-function envReplace (f) {
- if (typeof f !== 'string' || !f) return f
-
- // replace any ${ENV} values with the appropriate environ.
- var envExpr = /(\\*)\$\{([^}]+)\}/g
- return f.replace(envExpr, function (orig, esc, name) {
- esc = esc.length && esc.length % 2
- if (esc)
- return orig
- if (undefined === process.env[name])
- throw new Error('Failed to replace env in config: '+orig)
- return process.env[name]
- })
-}
-
-function validate (cl) {
- // warn about invalid configs at every level.
- cl.list.forEach(function (conf) {
- nopt.clean(conf, configDefs.types)
- })
-
- nopt.clean(cl.root, configDefs.types)
-}
diff --git a/deps/npm/node_modules/npmconf/package.json b/deps/npm/node_modules/npmconf/package.json
deleted file mode 100644
index 2699e90b83..0000000000
--- a/deps/npm/node_modules/npmconf/package.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "name": "npmconf",
- "version": "2.0.9",
- "description": "The config thing npm uses",
- "main": "npmconf.js",
- "directories": {
- "test": "test"
- },
- "dependencies": {
- "config-chain": "~1.1.8",
- "inherits": "~2.0.0",
- "ini": "^1.2.0",
- "mkdirp": "^0.5.0",
- "nopt": "~3.0.1",
- "once": "~1.3.0",
- "osenv": "^0.1.0",
- "semver": "2 || 3 || 4",
- "uid-number": "0.0.5"
- },
- "devDependencies": {
- "tap": "~0.4.0"
- },
- "scripts": {
- "test": "tap test/*.js"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/isaacs/npmconf"
- },
- "keywords": [
- "npm",
- "config",
- "config-chain",
- "conf",
- "ini"
- ],
- "author": {
- "name": "Isaac Z. Schlueter",
- "email": "i@izs.me",
- "url": "http://blog.izs.me"
- },
- "license": "BSD",
- "gitHead": "1f07a91b86f3bbba00967d7079dc6a456e746734",
- "bugs": {
- "url": "https://github.com/isaacs/npmconf/issues"
- },
- "homepage": "https://github.com/isaacs/npmconf",
- "_id": "npmconf@2.0.9",
- "_shasum": "5c87e5fb308104eceeca781e3d9115d216351ef2",
- "_from": "npmconf@>=2.0.8-0 <2.1.0-0",
- "_npmVersion": "2.0.0-beta.3",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- {
- "name": "othiym23",
- "email": "ogd@aoaioxxysz.net"
- }
- ],
- "dist": {
- "shasum": "5c87e5fb308104eceeca781e3d9115d216351ef2",
- "tarball": "http://registry.npmjs.org/npmconf/-/npmconf-2.0.9.tgz"
- },
- "_resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.0.9.tgz"
-}
diff --git a/deps/npm/node_modules/npmconf/test/00-setup.js b/deps/npm/node_modules/npmconf/test/00-setup.js
deleted file mode 100644
index 3f5109f043..0000000000
--- a/deps/npm/node_modules/npmconf/test/00-setup.js
+++ /dev/null
@@ -1,67 +0,0 @@
-var path = require('path')
-var userconfigSrc = path.resolve(__dirname, 'fixtures', 'userconfig')
-exports.userconfig = userconfigSrc + '-with-gc'
-exports.globalconfig = path.resolve(__dirname, 'fixtures', 'globalconfig')
-exports.builtin = path.resolve(__dirname, 'fixtures', 'builtin')
-exports.ucData =
- { globalconfig: exports.globalconfig,
- email: 'i@izs.me',
- 'env-thing': 'asdf',
- 'init.author.name': 'Isaac Z. Schlueter',
- 'init.author.email': 'i@izs.me',
- 'init.author.url': 'http://blog.izs.me/',
- 'init.version': '1.2.3',
- 'proprietary-attribs': false,
- 'npm:publishtest': true,
- '_npmjs.org:couch': 'https://admin:password@localhost:5984/registry',
- 'npm-www:nocache': '1',
- nodedir: '/Users/isaacs/dev/js/node-v0.8',
- 'sign-git-tag': true,
- message: 'v%s',
- 'strict-ssl': false,
- 'tmp': process.env.HOME + '/.tmp',
- _auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',
- _token:
- { AuthSession: 'yabba-dabba-doodle',
- version: '1',
- expires: '1345001053415',
- path: '/',
- httponly: true } }
-
-// set the userconfig in the env
-// unset anything else that npm might be trying to foist on us
-Object.keys(process.env).forEach(function (k) {
- if (k.match(/^npm_config_/i)) {
- delete process.env[k]
- }
-})
-process.env.npm_config_userconfig = exports.userconfig
-process.env.npm_config_other_env_thing = 1000
-process.env.random_env_var = 'asdf'
-process.env.npm_config__underbar_env_thing = 'underful'
-process.env.NPM_CONFIG_UPPERCASE_ENV_THING = 42
-
-exports.envData = {
- userconfig: exports.userconfig,
- '_underbar-env-thing': 'underful',
- 'uppercase-env-thing': '42',
- 'other-env-thing': '1000'
-}
-exports.envDataFix = {
- userconfig: exports.userconfig,
- '_underbar-env-thing': 'underful',
- 'uppercase-env-thing': 42,
- 'other-env-thing': 1000,
-}
-
-
-if (module === require.main) {
- // set the globalconfig in the userconfig
- var fs = require('fs')
- var uc = fs.readFileSync(userconfigSrc)
- var gcini = 'globalconfig = ' + exports.globalconfig + '\n'
- fs.writeFileSync(exports.userconfig, gcini + uc)
-
- console.log('0..1')
- console.log('ok 1 setup done')
-}
diff --git a/deps/npm/node_modules/npmconf/test/basic.js b/deps/npm/node_modules/npmconf/test/basic.js
deleted file mode 100644
index e3a684f947..0000000000
--- a/deps/npm/node_modules/npmconf/test/basic.js
+++ /dev/null
@@ -1,58 +0,0 @@
-var test = require('tap').test
-var npmconf = require('../npmconf.js')
-var common = require('./00-setup.js')
-var path = require('path')
-
-var projectData = {}
-
-var ucData = common.ucData
-var envData = common.envData
-var envDataFix = common.envDataFix
-
-var gcData = { 'package-config:foo': 'boo' }
-
-var biData = {}
-
-var cli = { foo: 'bar', umask: 022 }
-
-var expectList =
-[ cli,
- envDataFix,
- projectData,
- ucData,
- gcData,
- biData ]
-
-var expectSources =
-{ cli: { data: cli },
- env:
- { data: envDataFix,
- source: envData,
- prefix: '' },
- project:
- { path: path.resolve(__dirname, '..', '.npmrc'),
- type: 'ini',
- data: projectData },
- user:
- { path: common.userconfig,
- type: 'ini',
- data: ucData },
- global:
- { path: common.globalconfig,
- type: 'ini',
- data: gcData },
- builtin: { data: biData } }
-
-test('no builtin', function (t) {
- npmconf.load(cli, function (er, conf) {
- if (er) throw er
- t.same(conf.list, expectList)
- t.same(conf.sources, expectSources)
- t.same(npmconf.rootConf.list, [])
- t.equal(npmconf.rootConf.root, npmconf.defs.defaults)
- t.equal(conf.root, npmconf.defs.defaults)
- t.equal(conf.get('umask'), 022)
- t.equal(conf.get('heading'), 'npm')
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/npmconf/test/builtin.js b/deps/npm/node_modules/npmconf/test/builtin.js
deleted file mode 100644
index c94de8abdc..0000000000
--- a/deps/npm/node_modules/npmconf/test/builtin.js
+++ /dev/null
@@ -1,59 +0,0 @@
-var test = require('tap').test
-var npmconf = require('../npmconf.js')
-var common = require('./00-setup.js')
-var path = require('path')
-
-var ucData = common.ucData
-
-var envData = common.envData
-var envDataFix = common.envDataFix
-
-var gcData = { 'package-config:foo': 'boo' }
-
-var biData = { 'builtin-config': true }
-
-var cli = { foo: 'bar', heading: 'foo', 'git-tag-version': false }
-
-var projectData = {}
-
-var expectList =
-[ cli,
- envDataFix,
- projectData,
- ucData,
- gcData,
- biData ]
-
-var expectSources =
-{ cli: { data: cli },
- env:
- { data: envDataFix,
- source: envData,
- prefix: '' },
- project:
- { path: path.resolve(__dirname, '..', '.npmrc'),
- type: 'ini',
- data: projectData },
- user:
- { path: common.userconfig,
- type: 'ini',
- data: ucData },
- global:
- { path: common.globalconfig,
- type: 'ini',
- data: gcData },
- builtin: { data: biData } }
-
-test('with builtin', function (t) {
- npmconf.load(cli, common.builtin, function (er, conf) {
- if (er) throw er
- t.same(conf.list, expectList)
- t.same(conf.sources, expectSources)
- t.same(npmconf.rootConf.list, [])
- t.equal(npmconf.rootConf.root, npmconf.defs.defaults)
- t.equal(conf.root, npmconf.defs.defaults)
- t.equal(conf.get('heading'), 'foo')
- t.equal(conf.get('git-tag-version'), false)
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/npmconf/test/certfile.js b/deps/npm/node_modules/npmconf/test/certfile.js
deleted file mode 100644
index 3dfb6e90f9..0000000000
--- a/deps/npm/node_modules/npmconf/test/certfile.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var test = require('tap').test
-var npmconf = require('../npmconf.js')
-var common = require('./00-setup.js')
-var path = require('path')
-var fs = require('fs')
-
-test('cafile loads as ca', function (t) {
- var cafile = path.join(__dirname, 'fixtures', 'multi-ca')
-
- npmconf.load({cafile: cafile}, function (er, conf) {
- if (er) throw er
-
- t.same(conf.get('cafile'), cafile)
- t.same(conf.get('ca').join('\n'), fs.readFileSync(cafile, 'utf8').trim())
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/npmconf/test/credentials.js b/deps/npm/node_modules/npmconf/test/credentials.js
deleted file mode 100644
index 85632f9f11..0000000000
--- a/deps/npm/node_modules/npmconf/test/credentials.js
+++ /dev/null
@@ -1,166 +0,0 @@
-var test = require("tap").test
-
-var npmconf = require("../npmconf.js")
-var common = require("./00-setup.js")
-
-var URI = "https://registry.lvh.me:8661/"
-
-test("getting scope with no credentials set", function (t) {
- npmconf.load({}, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- var basic = conf.getCredentialsByURI(URI)
- t.equal(basic.scope, "//registry.lvh.me:8661/", "nerfed URL extracted")
-
- t.end()
- })
-})
-
-test("trying to set credentials with no URI", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- t.throws(function () {
- conf.setCredentialsByURI()
- }, "enforced missing URI")
-
- t.end()
- })
-})
-
-test("set with missing credentials object", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- t.throws(function () {
- conf.setCredentialsByURI(URI)
- }, "enforced missing credentials")
-
- t.end()
- })
-})
-
-test("set with empty credentials object", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- t.throws(function () {
- conf.setCredentialsByURI(URI, {})
- }, "enforced missing credentials")
-
- t.end()
- })
-})
-
-test("set with token", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- t.doesNotThrow(function () {
- conf.setCredentialsByURI(URI, {token : "simple-token"})
- }, "needs only token")
-
- var expected = {
- scope : "//registry.lvh.me:8661/",
- token : "simple-token"
- }
-
- t.same(conf.getCredentialsByURI(URI), expected, "got bearer token and scope")
-
- t.end()
- })
-})
-
-test("set with missing username", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- var credentials = {
- password : "password",
- email : "ogd@aoaioxxysz.net"
- }
-
- t.throws(function () {
- conf.setCredentialsByURI(URI, credentials)
- }, "enforced missing email")
-
- t.end()
- })
-})
-
-test("set with missing password", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- var credentials = {
- username : "username",
- email : "ogd@aoaioxxysz.net"
- }
-
- t.throws(function () {
- conf.setCredentialsByURI(URI, credentials)
- }, "enforced missing email")
-
- t.end()
- })
-})
-
-test("set with missing email", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- var credentials = {
- username : "username",
- password : "password"
- }
-
- t.throws(function () {
- conf.setCredentialsByURI(URI, credentials)
- }, "enforced missing email")
-
- t.end()
- })
-})
-
-test("set with old-style credentials", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- t.ifError(er, "configuration loaded")
-
- var credentials = {
- username : "username",
- password : "password",
- email : "ogd@aoaioxxysz.net"
- }
-
- t.doesNotThrow(function () {
- conf.setCredentialsByURI(URI, credentials)
- }, "requires all of username, password, and email")
-
- var expected = {
- scope : "//registry.lvh.me:8661/",
- username : "username",
- password : "password",
- email : "ogd@aoaioxxysz.net",
- auth : "dXNlcm5hbWU6cGFzc3dvcmQ="
- }
-
- t.same(conf.getCredentialsByURI(URI), expected, "got credentials")
-
- t.end()
- })
-})
-
-test("get old-style credentials for default registry", function (t) {
- npmconf.load(common.builtin, function (er, conf) {
- var actual = conf.getCredentialsByURI(conf.get("registry"))
- var expected = {
- scope: '//registry.npmjs.org/',
- password: 'password',
- username: 'username',
- email: 'i@izs.me',
- auth: 'dXNlcm5hbWU6cGFzc3dvcmQ='
- }
- t.same(actual, expected)
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/.npmrc b/deps/npm/node_modules/npmconf/test/fixtures/.npmrc
deleted file mode 100644
index 7d59bd8be1..0000000000
--- a/deps/npm/node_modules/npmconf/test/fixtures/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-just = testing
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/builtin b/deps/npm/node_modules/npmconf/test/fixtures/builtin
deleted file mode 100644
index dcd542c0ce..0000000000
--- a/deps/npm/node_modules/npmconf/test/fixtures/builtin
+++ /dev/null
@@ -1 +0,0 @@
-builtin-config = true
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/globalconfig b/deps/npm/node_modules/npmconf/test/fixtures/globalconfig
deleted file mode 100644
index 41c0b70c80..0000000000
--- a/deps/npm/node_modules/npmconf/test/fixtures/globalconfig
+++ /dev/null
@@ -1 +0,0 @@
-package-config:foo = boo
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/multi-ca b/deps/npm/node_modules/npmconf/test/fixtures/multi-ca
deleted file mode 100644
index 0bc922b25c..0000000000
--- a/deps/npm/node_modules/npmconf/test/fixtures/multi-ca
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICjTCCAfigAwIBAgIEMaYgRzALBgkqhkiG9w0BAQQwRTELMAkGA1UEBhMCVVMx
-NjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlz
-dHJhdGlvbjAmFxE5NjA1MjgxMzQ5MDUrMDgwMBcROTgwNTI4MTM0OTA1KzA4MDAw
-ZzELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
-ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEgMAkGA1UEBRMCMTYwEwYDVQQDEwxTdGV2
-ZSBTY2hvY2gwWDALBgkqhkiG9w0BAQEDSQAwRgJBALrAwyYdgxmzNP/ts0Uyf6Bp
-miJYktU/w4NG67ULaN4B5CnEz7k57s9o3YY3LecETgQ5iQHmkwlYDTL2fTgVfw0C
-AQOjgaswgagwZAYDVR0ZAQH/BFowWDBWMFQxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
-Ey1OYXRpAAAAACBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
-DTALBgNVBAMTBENSTDEwFwYDVR0BAQH/BA0wC4AJODMyOTcwODEwMBgGA1UdAgQR
-MA8ECTgzMjk3MDgyM4ACBSAwDQYDVR0KBAYwBAMCBkAwCwYJKoZIhvcNAQEEA4GB
-AH2y1VCEw/A4zaXzSYZJTTUi3uawbbFiS2yxHvgf28+8Js0OHXk1H1w2d6qOHH21
-X82tZXd/0JtG0g1T9usFFBDvYK8O0ebgz/P5ELJnBL2+atObEuJy1ZZ0pBDWINR3
-WkDNLCGiTkCKp0F5EWIrVDwh54NNevkCQRZita+z4IBO
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-AAAAAACCAfigAwIBAgIEMaYgRzALBgkqhkiG9w0BAQQwRTELMAkGA1UEBhMCVVMx
-NjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlz
-dHJhdGlvbjAmFxE5NjA1MjgxMzQ5MDUrMDgwMBcROTgwNTI4MTM0OTA1KzA4MDAw
-ZzELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
-ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEgMAkGA1UEBRMCMTYwEwYDVQQDEwxTdGV2
-ZSBTY2hvY2gwWDALBgkqhkiG9w0BAQEDSQAwRgJBALrAwyYdgxmzNP/ts0Uyf6Bp
-miJYktU/w4NG67ULaN4B5CnEz7k57s9o3YY3LecETgQ5iQHmkwlYDTL2fTgVfw0C
-AQOjgaswgagwZAYDVR0ZAQH/BFowWDBWMFQxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
-Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
-DTALBgNVBAMTBENSTDEwFwYDVR0BAQH/BA0wC4AJODMyOTcwODEwMBgGA1UdAgQR
-MA8ECTgzMjk3MDgyM4ACBSAwDQYDVR0KBAYwBAMCBkAwCwYJKoZIhvcNAQEEA4GB
-AH2y1VCEw/A4zaXzSYZJTTUi3uawbbFiS2yxHvgf28+8Js0OHXk1H1w2d6qOHH21
-X82tZXd/0JtG0g1T9usFFBDvYK8O0ebgz/P5ELJnBL2+atObEuJy1ZZ0pBDWINR3
-WkDNLCGiTkCKp0F5EWIrVDwh54NNevkCQRZita+z4IBO
------END CERTIFICATE-----
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/package.json b/deps/npm/node_modules/npmconf/test/fixtures/package.json
deleted file mode 100644
index e69de29bb2..0000000000
--- a/deps/npm/node_modules/npmconf/test/fixtures/package.json
+++ /dev/null
diff --git a/deps/npm/node_modules/npmconf/test/fixtures/userconfig b/deps/npm/node_modules/npmconf/test/fixtures/userconfig
deleted file mode 100644
index d600c0664e..0000000000
--- a/deps/npm/node_modules/npmconf/test/fixtures/userconfig
+++ /dev/null
@@ -1,23 +0,0 @@
-email = i@izs.me
-env-thing = ${random_env_var}
-init.author.name = Isaac Z. Schlueter
-init.author.email = i@izs.me
-init.author.url = http://blog.izs.me/
-init.version = 1.2.3
-proprietary-attribs = false
-npm:publishtest = true
-_npmjs.org:couch = https://admin:password@localhost:5984/registry
-npm-www:nocache = 1
-nodedir = /Users/isaacs/dev/js/node-v0.8
-sign-git-tag = true
-message = v%s
-strict-ssl = false
-tmp = ~/.tmp
-_auth = dXNlcm5hbWU6cGFzc3dvcmQ=
-
-[_token]
-AuthSession = yabba-dabba-doodle
-version = 1
-expires = 1345001053415
-path = /
-httponly = true
diff --git a/deps/npm/node_modules/npmconf/test/project.js b/deps/npm/node_modules/npmconf/test/project.js
deleted file mode 100644
index d9a0bdbcc5..0000000000
--- a/deps/npm/node_modules/npmconf/test/project.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var test = require('tap').test
-var npmconf = require('../npmconf.js')
-var common = require('./00-setup.js')
-var path = require('path')
-var fix = path.resolve(__dirname, 'fixtures')
-var projectRc = path.resolve(fix, '.npmrc')
-
-var projectData = { just: 'testing' }
-
-var ucData = common.ucData
-var envData = common.envData
-var envDataFix = common.envDataFix
-
-var gcData = { 'package-config:foo': 'boo' }
-
-var biData = {}
-
-var cli = { foo: 'bar', umask: 022, prefix: fix }
-
-var expectList =
-[ cli,
- envDataFix,
- projectData,
- ucData,
- gcData,
- biData ]
-
-var expectSources =
-{ cli: { data: cli },
- env:
- { data: envDataFix,
- source: envData,
- prefix: '' },
- project:
- { path: projectRc,
- type: 'ini',
- data: projectData },
- user:
- { path: common.userconfig,
- type: 'ini',
- data: ucData },
- global:
- { path: common.globalconfig,
- type: 'ini',
- data: gcData },
- builtin: { data: biData } }
-
-test('no builtin', function (t) {
- npmconf.load(cli, function (er, conf) {
- if (er) throw er
- t.same(conf.list, expectList)
- t.same(conf.sources, expectSources)
- t.same(npmconf.rootConf.list, [])
- t.equal(npmconf.rootConf.root, npmconf.defs.defaults)
- t.equal(conf.root, npmconf.defs.defaults)
- t.equal(conf.get('umask'), 022)
- t.equal(conf.get('heading'), 'npm')
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/npmconf/test/save.js b/deps/npm/node_modules/npmconf/test/save.js
deleted file mode 100644
index 0d2f1978f9..0000000000
--- a/deps/npm/node_modules/npmconf/test/save.js
+++ /dev/null
@@ -1,84 +0,0 @@
-var test = require('tap').test
-var npmconf = require('../npmconf.js')
-var common = require('./00-setup.js')
-var fs = require('fs')
-var ini = require('ini')
-var expectConf =
- [ 'globalconfig = ' + common.globalconfig,
- 'email = i@izs.me',
- 'env-thing = asdf',
- 'init.author.name = Isaac Z. Schlueter',
- 'init.author.email = i@izs.me',
- 'init.author.url = http://blog.izs.me/',
- 'init.version = 1.2.3',
- 'proprietary-attribs = false',
- 'npm:publishtest = true',
- '_npmjs.org:couch = https://admin:password@localhost:5984/registry',
- 'npm-www:nocache = 1',
- 'sign-git-tag = false',
- 'message = v%s',
- 'strict-ssl = false',
- '_auth = dXNlcm5hbWU6cGFzc3dvcmQ=',
- '',
- '[_token]',
- 'AuthSession = yabba-dabba-doodle',
- 'version = 1',
- 'expires = 1345001053415',
- 'path = /',
- 'httponly = true',
- '' ].join('\n')
-var expectFile =
- [ 'globalconfig = ' + common.globalconfig,
- 'email = i@izs.me',
- 'env-thing = asdf',
- 'init.author.name = Isaac Z. Schlueter',
- 'init.author.email = i@izs.me',
- 'init.author.url = http://blog.izs.me/',
- 'init.version = 1.2.3',
- 'proprietary-attribs = false',
- 'npm:publishtest = true',
- '_npmjs.org:couch = https://admin:password@localhost:5984/registry',
- 'npm-www:nocache = 1',
- 'sign-git-tag = false',
- 'message = v%s',
- 'strict-ssl = false',
- '_auth = dXNlcm5hbWU6cGFzc3dvcmQ=',
- '',
- '[_token]',
- 'AuthSession = yabba-dabba-doodle',
- 'version = 1',
- 'expires = 1345001053415',
- 'path = /',
- 'httponly = true',
- '' ].join('\n')
-
-test('saving configs', function (t) {
- npmconf.load(function (er, conf) {
- if (er)
- throw er
- conf.set('sign-git-tag', false, 'user')
- conf.del('nodedir')
- conf.del('tmp')
- var foundConf = ini.stringify(conf.sources.user.data)
- t.same(ini.parse(foundConf), ini.parse(expectConf))
- fs.unlinkSync(common.userconfig)
- conf.save('user', function (er) {
- if (er)
- throw er
- var uc = fs.readFileSync(conf.get('userconfig'), 'utf8')
- t.same(ini.parse(uc), ini.parse(expectFile))
- t.end()
- })
- })
-})
-
-test('setting prefix', function (t) {
- npmconf.load(function (er, conf) {
- if (er)
- throw er
-
- conf.prefix = 'newvalue'
- t.same(conf.prefix, 'newvalue');
- t.end();
- })
-})
diff --git a/deps/npm/node_modules/npmconf/test/semver-tag.js b/deps/npm/node_modules/npmconf/test/semver-tag.js
deleted file mode 100644
index b0ce27f1b3..0000000000
--- a/deps/npm/node_modules/npmconf/test/semver-tag.js
+++ /dev/null
@@ -1,65 +0,0 @@
-var test = require('tap').test
-var npmconf = require('../npmconf.js')
-var common = require('./00-setup.js')
-var path = require('path')
-
-var ucData = common.ucData
-
-var envData = common.envData
-var envDataFix = common.envDataFix
-
-var gcData = { 'package-config:foo': 'boo' }
-
-var biData = { 'builtin-config': true }
-
-var cli = { tag: 'v2.x' }
-
-var projectData = {}
-
-var expectList =
-[ cli,
- envDataFix,
- projectData,
- ucData,
- gcData,
- biData ]
-
-
-var expectSources =
-{ cli: { data: cli },
- env:
- { data: envDataFix,
- source: envData,
- prefix: '' },
- project:
- { path: path.resolve(__dirname, '..', '.npmrc'),
- type: 'ini',
- data: projectData },
- user:
- { path: common.userconfig,
- type: 'ini',
- data: ucData },
- global:
- { path: common.globalconfig,
- type: 'ini',
- data: gcData },
- builtin: { data: biData } }
-
-test('tag cannot be a SemVer', function (t) {
- var messages = []
- console.warn = function (m) {
- messages.push(m)
- }
-
- var expect = [
- 'invalid config tag="v2.x"',
- 'invalid config Tag must not be a SemVer range'
- ]
-
- npmconf.load(cli, common.builtin, function (er, conf) {
- if (er) throw er
- t.equal(conf.get('tag'), 'latest')
- t.same(messages, expect)
- t.end()
- })
-})
diff --git a/deps/npm/node_modules/once/once.js b/deps/npm/node_modules/once/once.js
index 0770a73cda..2e1e721bfe 100644
--- a/deps/npm/node_modules/once/once.js
+++ b/deps/npm/node_modules/once/once.js
@@ -1,4 +1,5 @@
-module.exports = once
+var wrappy = require('wrappy')
+module.exports = wrappy(once)
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
diff --git a/deps/npm/node_modules/once/package.json b/deps/npm/node_modules/once/package.json
index 96af3dedfe..eb8a4217a2 100644
--- a/deps/npm/node_modules/once/package.json
+++ b/deps/npm/node_modules/once/package.json
@@ -1,12 +1,14 @@
{
"name": "once",
- "version": "1.3.0",
+ "version": "1.3.1",
"description": "Run a function exactly one time",
"main": "once.js",
"directories": {
"test": "test"
},
- "dependencies": {},
+ "dependencies": {
+ "wrappy": "1"
+ },
"devDependencies": {
"tap": "~0.3.0"
},
@@ -29,11 +31,30 @@
"url": "http://blog.izs.me/"
},
"license": "BSD",
- "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n\nTo check whether you function has been called, use `fn.called`. Once the\nfunction is called for the first time the return value of the original\nfunction is saved in `fn.value` and subsequent calls will continue to\nreturn this value.\n\n```javascript\nvar once = require('once')\n\nfunction load (cb) {\n cb = once(cb)\n var stream = createStream()\n stream.once('data', cb)\n stream.once('end', function () {\n if (!cb.called) cb(new Error('not found'))\n })\n}\n```\n",
- "readmeFilename": "README.md",
+ "gitHead": "c90ac02a74f433ce47f6938869e68dd6196ffc2c",
"bugs": {
"url": "https://github.com/isaacs/once/issues"
},
- "_id": "once@1.3.0",
- "_from": "once@latest"
+ "homepage": "https://github.com/isaacs/once",
+ "_id": "once@1.3.1",
+ "_shasum": "f3f3e4da5b7d27b5c732969ee3e67e729457b31f",
+ "_from": "once@>=1.3.1 <2.0.0",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "f3f3e4da5b7d27b5c732969ee3e67e729457b31f",
+ "tarball": "http://registry.npmjs.org/once/-/once-1.3.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/once/test/once.js b/deps/npm/node_modules/once/test/once.js
index a77951f110..c618360dfa 100644
--- a/deps/npm/node_modules/once/test/once.js
+++ b/deps/npm/node_modules/once/test/once.js
@@ -3,11 +3,14 @@ var once = require('../once.js')
test('once', function (t) {
var f = 0
- var foo = once(function (g) {
+ function fn (g) {
t.equal(f, 0)
f ++
return f + g + this
- })
+ }
+ fn.ownProperty = {}
+ var foo = once(fn)
+ t.equal(fn.ownProperty, foo.ownProperty)
t.notOk(foo.called)
for (var i = 0; i < 1E3; i++) {
t.same(f, i === 0 ? 0 : 1)
diff --git a/deps/npm/node_modules/opener/LICENSE.txt b/deps/npm/node_modules/opener/LICENSE.txt
index 6000885393..0407ecda83 100644
--- a/deps/npm/node_modules/opener/LICENSE.txt
+++ b/deps/npm/node_modules/opener/LICENSE.txt
@@ -1,14 +1,19 @@
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- Version 2, December 2004
-
- Copyright (C) 2012 Domenic Denicola <domenic@domenicdenicola.com>
-
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
-
- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. You just DO WHAT THE FUCK YOU WANT TO.
-
+Copyright © 2012–2014 Domenic Denicola <domenic@domenicdenicola.com>
+
+This work is free. You can redistribute it and/or modify it under the
+terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See below for more details.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/deps/npm/node_modules/opener/README.md b/deps/npm/node_modules/opener/README.md
index fc64365445..8a803f3384 100644
--- a/deps/npm/node_modules/opener/README.md
+++ b/deps/npm/node_modules/opener/README.md
@@ -1,44 +1,57 @@
-# It Opens Stuff
-
-That is, in your desktop environment. This will make *actual windows pop up*, with stuff in them:
-
-```bash
-npm install opener -g
-
-opener http://google.com
-opener ./my-file.txt
-opener firefox
-opener npm run lint
-```
-
-Also if you want to use it programmatically you can do that too:
-
-```js
-var opener = require("opener");
-
-opener("http://google.com");
-opener("./my-file.txt");
-opener("firefox");
-opener("npm run lint");
-```
-
-## Use It for Good
-
-Like opening the user's browser with a test harness in your package's test script:
-
-```json
-{
- "scripts": {
- "test": "opener ./test/runner.html"
- },
- "devDependencies": {
- "opener": "*"
- }
-}
-```
-
-## Why
-
-Because Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least
-[according to some guy on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all
-three. Like Node.js. And Opener.
+# It Opens Stuff
+
+That is, in your desktop environment. This will make *actual windows pop up*, with stuff in them:
+
+```bash
+npm install opener -g
+
+opener http://google.com
+opener ./my-file.txt
+opener firefox
+opener npm run lint
+```
+
+Also if you want to use it programmatically you can do that too:
+
+```js
+var opener = require("opener");
+
+opener("http://google.com");
+opener("./my-file.txt");
+opener("firefox");
+opener("npm run lint");
+```
+
+Plus, it returns the child process created, so you can do things like let your script exit while the window stays open:
+
+```js
+var editor = opener("documentation.odt");
+editor.unref();
+// These other unrefs may be necessary if your OS's opener process
+// exits before the process it started is complete.
+editor.stdin.unref();
+editor.stdout.unref();
+editor.stderr.unref();
+```
+
+
+## Use It for Good
+
+Like opening the user's browser with a test harness in your package's test script:
+
+```json
+{
+ "scripts": {
+ "test": "opener ./test/runner.html"
+ },
+ "devDependencies": {
+ "opener": "*"
+ }
+}
+```
+
+## Why
+
+Because Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least
+[according to some guy on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all
+three. Like Node.js. And Opener.
diff --git a/deps/npm/node_modules/opener/opener.js b/deps/npm/node_modules/opener/opener.js
index 5477da52b6..3f95d0635a 100755
--- a/deps/npm/node_modules/opener/opener.js
+++ b/deps/npm/node_modules/opener/opener.js
@@ -38,7 +38,7 @@ function opener(args, options, callback) {
args = ["/c", "start", '""'].concat(args);
}
- childProcess.execFile(command, args, options, callback);
+ return childProcess.execFile(command, args, options, callback);
}
// Export `opener` for programmatic access.
diff --git a/deps/npm/node_modules/opener/package.json b/deps/npm/node_modules/opener/package.json
index 0d18470bd6..b62915e6ef 100644
--- a/deps/npm/node_modules/opener/package.json
+++ b/deps/npm/node_modules/opener/package.json
@@ -1,11 +1,11 @@
{
"name": "opener",
"description": "Opens stuff, like webpages and files and executables, cross-platform",
- "version": "1.3.0",
+ "version": "1.4.0",
"author": {
"name": "Domenic Denicola",
"email": "domenic@domenicdenicola.com",
- "url": "http://domenicdenicola.com"
+ "url": "http://domenic.me/"
},
"license": "WTFPL",
"repository": {
@@ -23,12 +23,28 @@
"lint": "jshint opener.js"
},
"devDependencies": {
- "jshint": ">= 0.9.0"
+ "jshint": "^2.5.4"
},
- "readme": "# It Opens Stuff\r\n\r\nThat is, in your desktop environment. This will make *actual windows pop up*, with stuff in them:\r\n\r\n```bash\r\nnpm install opener -g\r\n\r\nopener http://google.com\r\nopener ./my-file.txt\r\nopener firefox\r\nopener npm run lint\r\n```\r\n\r\nAlso if you want to use it programmatically you can do that too:\r\n\r\n```js\r\nvar opener = require(\"opener\");\r\n\r\nopener(\"http://google.com\");\r\nopener(\"./my-file.txt\");\r\nopener(\"firefox\");\r\nopener(\"npm run lint\");\r\n```\r\n\r\n## Use It for Good\r\n\r\nLike opening the user's browser with a test harness in your package's test script:\r\n\r\n```json\r\n{\r\n \"scripts\": {\r\n \"test\": \"opener ./test/runner.html\"\r\n },\r\n \"devDependencies\": {\r\n \"opener\": \"*\"\r\n }\r\n}\r\n```\r\n\r\n## Why\r\n\r\nBecause Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least\r\n[according to some guy on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all\r\nthree. Like Node.js. And Opener.\r\n",
- "_id": "opener@1.3.0",
+ "gitHead": "b9d36d4f82c26560acdadbabbb10ddba46a30dc5",
+ "homepage": "https://github.com/domenic/opener",
+ "_id": "opener@1.4.0",
+ "_shasum": "d11f86eeeb076883735c9d509f538fe82d10b941",
+ "_from": "opener@>=1.4.0 <1.5.0",
+ "_npmVersion": "1.4.23",
+ "_npmUser": {
+ "name": "domenic",
+ "email": "domenic@domenicdenicola.com"
+ },
+ "maintainers": [
+ {
+ "name": "domenic",
+ "email": "domenic@domenicdenicola.com"
+ }
+ ],
"dist": {
- "shasum": "d72b4b2e61b0a4ca7822a7554070620002fb90d9"
+ "shasum": "d11f86eeeb076883735c9d509f538fe82d10b941",
+ "tarball": "http://registry.npmjs.org/opener/-/opener-1.4.0.tgz"
},
- "_from": "opener@latest"
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/opener/-/opener-1.4.0.tgz"
}
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/.npmignore b/deps/npm/node_modules/readable-stream/.npmignore
index 38344f87a6..38344f87a6 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/.npmignore
+++ b/deps/npm/node_modules/readable-stream/.npmignore
diff --git a/deps/npm/node_modules/npmconf/LICENSE b/deps/npm/node_modules/readable-stream/LICENSE
index 0c44ae716d..0c44ae716d 100644
--- a/deps/npm/node_modules/npmconf/LICENSE
+++ b/deps/npm/node_modules/readable-stream/LICENSE
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/README.md b/deps/npm/node_modules/readable-stream/README.md
index 34c1189792..34c1189792 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/README.md
+++ b/deps/npm/node_modules/readable-stream/README.md
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/duplex.js b/deps/npm/node_modules/readable-stream/duplex.js
index ca807af876..ca807af876 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/duplex.js
+++ b/deps/npm/node_modules/readable-stream/duplex.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js b/deps/npm/node_modules/readable-stream/lib/_stream_duplex.js
index b513d61a96..b513d61a96 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js
+++ b/deps/npm/node_modules/readable-stream/lib/_stream_duplex.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js b/deps/npm/node_modules/readable-stream/lib/_stream_passthrough.js
index 895ca50a1d..895ca50a1d 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js
+++ b/deps/npm/node_modules/readable-stream/lib/_stream_passthrough.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js b/deps/npm/node_modules/readable-stream/lib/_stream_readable.js
index 630722099e..630722099e 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js
+++ b/deps/npm/node_modules/readable-stream/lib/_stream_readable.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js b/deps/npm/node_modules/readable-stream/lib/_stream_transform.js
index eb188df3e8..eb188df3e8 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js
+++ b/deps/npm/node_modules/readable-stream/lib/_stream_transform.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js b/deps/npm/node_modules/readable-stream/lib/_stream_writable.js
index 4bdaa4fa49..4bdaa4fa49 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js
+++ b/deps/npm/node_modules/readable-stream/lib/_stream_writable.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/README.md b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/README.md
index 5a76b4149c..5a76b4149c 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/README.md
+++ b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/README.md
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/float.patch b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/float.patch
index a06d5c05f7..a06d5c05f7 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/float.patch
+++ b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/float.patch
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/lib/util.js b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/lib/util.js
index 9074e8ebcb..9074e8ebcb 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/lib/util.js
+++ b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/lib/util.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/package.json
index 8e79c3a748..4eb9ce4f3c 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/package.json
+++ b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/package.json
@@ -35,7 +35,7 @@
"shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
"tarball": "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
},
- "_from": "core-util-is@>=1.0.0-0 <1.1.0-0",
+ "_from": "core-util-is@>=1.0.0 <1.1.0",
"_npmVersion": "1.3.23",
"_npmUser": {
"name": "isaacs",
@@ -49,5 +49,6 @@
],
"directories": {},
"_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
- "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/util.js b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/util.js
index 007fa10575..007fa10575 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/core-util-is/util.js
+++ b/deps/npm/node_modules/readable-stream/node_modules/core-util-is/util.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/README.md b/deps/npm/node_modules/readable-stream/node_modules/isarray/README.md
index 052a62b8d7..052a62b8d7 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/README.md
+++ b/deps/npm/node_modules/readable-stream/node_modules/isarray/README.md
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/build/build.js b/deps/npm/node_modules/readable-stream/node_modules/isarray/build/build.js
index ec58596aee..ec58596aee 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/build/build.js
+++ b/deps/npm/node_modules/readable-stream/node_modules/isarray/build/build.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/component.json b/deps/npm/node_modules/readable-stream/node_modules/isarray/component.json
index 9e31b68388..9e31b68388 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/component.json
+++ b/deps/npm/node_modules/readable-stream/node_modules/isarray/component.json
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/index.js b/deps/npm/node_modules/readable-stream/node_modules/isarray/index.js
index 5f5ad45d46..5f5ad45d46 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/index.js
+++ b/deps/npm/node_modules/readable-stream/node_modules/isarray/index.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/package.json b/deps/npm/node_modules/readable-stream/node_modules/isarray/package.json
index fc7904b67b..fc7904b67b 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/isarray/package.json
+++ b/deps/npm/node_modules/readable-stream/node_modules/isarray/package.json
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/.npmignore
index 206320cc1d..206320cc1d 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/.npmignore
+++ b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/.npmignore
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/LICENSE
index 6de584a48f..6de584a48f 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/LICENSE
+++ b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/LICENSE
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/README.md b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/README.md
index 4d2aa00150..4d2aa00150 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/README.md
+++ b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/README.md
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/index.js b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/index.js
index b00e54fb79..b00e54fb79 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/index.js
+++ b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/index.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/package.json b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/package.json
index 752eab63cc..0364d54ba4 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/node_modules/string_decoder/package.json
+++ b/deps/npm/node_modules/readable-stream/node_modules/string_decoder/package.json
@@ -28,7 +28,7 @@
},
"_id": "string_decoder@0.10.31",
"_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
- "_from": "string_decoder@>=0.10.0-0 <0.11.0-0",
+ "_from": "string_decoder@>=0.10.0 <0.11.0",
"_npmVersion": "1.4.23",
"_npmUser": {
"name": "rvagg",
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/package.json b/deps/npm/node_modules/readable-stream/package.json
index 6c73ab3765..2fbd99751f 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/package.json
+++ b/deps/npm/node_modules/readable-stream/package.json
@@ -1,6 +1,6 @@
{
"name": "readable-stream",
- "version": "1.0.31",
+ "version": "1.0.32",
"description": "Streams2, a user-land copy of the stream library from Node.js v0.10.x",
"main": "readable.js",
"dependencies": {
@@ -33,14 +33,16 @@
"url": "http://blog.izs.me/"
},
"license": "MIT",
+ "gitHead": "2024ad52b1e475465488b4ad39eb41d067ffcbb9",
"bugs": {
"url": "https://github.com/isaacs/readable-stream/issues"
},
"homepage": "https://github.com/isaacs/readable-stream",
- "_id": "readable-stream@1.0.31",
- "_shasum": "8f2502e0bc9e3b0da1b94520aabb4e2603ecafae",
- "_from": "readable-stream@>=1.0.26-0 <1.1.0-0",
- "_npmVersion": "1.4.9",
+ "_id": "readable-stream@1.0.32",
+ "_shasum": "6b44a88ba984cd0ec0834ae7d59a47c39aef48ec",
+ "_from": "readable-stream@*",
+ "_npmVersion": "2.0.2",
+ "_nodeVersion": "0.10.31",
"_npmUser": {
"name": "rvagg",
"email": "rod@vagg.org"
@@ -60,10 +62,10 @@
}
],
"dist": {
- "shasum": "8f2502e0bc9e3b0da1b94520aabb4e2603ecafae",
- "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz"
+ "shasum": "6b44a88ba984cd0ec0834ae7d59a47c39aef48ec",
+ "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.32.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz",
+ "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.32.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/passthrough.js b/deps/npm/node_modules/readable-stream/passthrough.js
index 27e8d8a551..27e8d8a551 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/passthrough.js
+++ b/deps/npm/node_modules/readable-stream/passthrough.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/readable.js b/deps/npm/node_modules/readable-stream/readable.js
index 4d1ddfc734..4d1ddfc734 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/readable.js
+++ b/deps/npm/node_modules/readable-stream/readable.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/transform.js b/deps/npm/node_modules/readable-stream/transform.js
index 5d482f0780..5d482f0780 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/transform.js
+++ b/deps/npm/node_modules/readable-stream/transform.js
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/writable.js b/deps/npm/node_modules/readable-stream/writable.js
index e1e9efdf3c..e1e9efdf3c 100644
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/writable.js
+++ b/deps/npm/node_modules/readable-stream/writable.js
diff --git a/deps/npm/node_modules/realize-package-specifier/.npmignore b/deps/npm/node_modules/realize-package-specifier/.npmignore
new file mode 100644
index 0000000000..926ddf616c
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/.npmignore
@@ -0,0 +1,3 @@
+*~
+.#*
+node_modules
diff --git a/deps/npm/node_modules/realize-package-specifier/README.md b/deps/npm/node_modules/realize-package-specifier/README.md
new file mode 100644
index 0000000000..577014a48c
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/README.md
@@ -0,0 +1,58 @@
+realize-package-specifier
+-------------------------
+
+Parse a package specifier, peeking at the disk to differentiate between
+local tarballs, directories and named modules. This implements the logic
+used by `npm install` and `npm cache` to determine where to get packages
+from.
+
+```javascript
+var realizePackageSpecifier = require("realize-package-specifier")
+realizePackageSpecifier("foo.tar.gz", ".", function (err, package) {
+ …
+})
+```
+
+* realizePackageSpecifier(*spec*, [*where*,] *callback*)
+
+Parses *spec* using `npm-package-arg` and then uses stat to check to see if
+it refers to a local tarball or package directory. Stats are done relative
+to *where*. If it does then the local module is loaded. If it doesn't then
+target is left as a remote package specifier. Package directories are
+recognized by the presence of a package.json in them.
+
+*spec* -- a package specifier, like: `foo@1.2`, or `foo@user/foo`, or
+`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`
+
+*where* (optional, default: .) -- The directory in which we should look for
+local tarballs or package directories.
+
+*callback* function(*err*, *result*) -- Called once we've determined what
+kind of specifier this is. The *result* object will be very like the one
+returned by `npm-package-arg` except with three differences: 1) There's a
+new type of `directory`. 2) The `local` type only refers to tarballs. 2)
+For all `local` and `directory` type results spec will contain the full path of
+the local package.
+
+## Result Objects
+
+The full definition of the result object is:
+
+* `name` - If known, the `name` field expected in the resulting pkg.
+* `type` - One of the following strings:
+ * `git` - A git repo
+ * `github` - A github shorthand, like `user/project`
+ * `tag` - A tagged version, like `"foo@latest"`
+ * `version` - A specific version number, like `"foo@1.2.3"`
+ * `range` - A version range, like `"foo@2.x"`
+ * `local` - A local file path
+ * `directory` - A local package directory
+ * `remote` - An http url (presumably to a tgz)
+* `spec` - The "thing". URL, the range, git repo, etc.
+* `raw` - The original un-modified string that was provided.
+* `rawSpec` - The part after the `name@...`, as it was originally
+ provided.
+* `scope` - If a name is something like `@org/module` then the `scope`
+ field will be set to `org`. If it doesn't have a scoped name, then
+ scope is `null`.
+
diff --git a/deps/npm/node_modules/realize-package-specifier/index.js b/deps/npm/node_modules/realize-package-specifier/index.js
new file mode 100644
index 0000000000..261ad66307
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/index.js
@@ -0,0 +1,38 @@
+"use strict"
+var fs = require("fs")
+var path = require("path")
+var dz = require("dezalgo")
+var npa = require("npm-package-arg")
+
+module.exports = function (spec, where, cb) {
+ if (where instanceof Function) { cb = where; where = null }
+ if (where == null) where = "."
+ cb = dz(cb)
+ try {
+ var dep = npa(spec)
+ }
+ catch (e) {
+ return cb(e)
+ }
+ var specpath = dep.type == "local"
+ ? path.resolve(where, dep.spec)
+ : path.resolve(dep.rawSpec? dep.rawSpec: dep.name)
+ fs.stat(specpath, function (er, s) {
+ if (er) return finalize()
+ if (!s.isDirectory()) return finalize("local")
+ fs.stat(path.join(specpath, "package.json"), function (er) {
+ finalize(er ? null : "directory")
+ })
+ })
+ function finalize(type) {
+ if (type != null && type != dep.type) {
+ dep.type = type
+ if (! dep.rawSpec) {
+ dep.rawSpec = dep.name
+ dep.name = null
+ }
+ }
+ if (dep.type == "local" || dep.type == "directory") dep.spec = specpath
+ cb(null, dep)
+ }
+}
diff --git a/deps/npm/node_modules/realize-package-specifier/package.json b/deps/npm/node_modules/realize-package-specifier/package.json
new file mode 100644
index 0000000000..5364576374
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "realize-package-specifier",
+ "version": "1.2.0",
+ "description": "Like npm-package-arg, but more so, producing full file paths and differentiating local tar and directory sources.",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "license": "ISC",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/realize-package-specifier.git"
+ },
+ "author": {
+ "name": "Rebecca Turner",
+ "email": "me@re-becca.org",
+ "url": "http://re-becca.org"
+ },
+ "homepage": "https://github.com/npm/realize-package-specifier",
+ "dependencies": {
+ "dezalgo": "^1.0.1",
+ "npm-package-arg": "^2.1.3"
+ },
+ "devDependencies": {
+ "require-inject": "^1.1.0",
+ "tap": "^0.4.12"
+ },
+ "gitHead": "39016343d5bd5572ab39374323e9588e54985910",
+ "bugs": {
+ "url": "https://github.com/npm/realize-package-specifier/issues"
+ },
+ "_id": "realize-package-specifier@1.2.0",
+ "_shasum": "93364e40dee38369f92e9b0c76124500342132f2",
+ "_from": "realize-package-specifier@>=1.2.0 <1.3.0",
+ "_npmVersion": "2.1.2",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "93364e40dee38369f92e9b0c76124500342132f2",
+ "tarball": "http://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-1.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-1.2.0.tgz"
+}
diff --git a/deps/npm/node_modules/realize-package-specifier/test/basic.js b/deps/npm/node_modules/realize-package-specifier/test/basic.js
new file mode 100644
index 0000000000..d5d8fc6c07
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/test/basic.js
@@ -0,0 +1,121 @@
+"use strict"
+var test = require("tap").test
+var requireInject = require("require-inject")
+var path = require("path")
+
+var re = {
+ tarball: /[\/\\]a.tar.gz$/,
+ packagedir: /[\/\\]b$/,
+ packagejson: /[\/\\]b[\/\\]package.json$/,
+ nonpackagedir: /[\/\\]c$/,
+ nopackagejson: /[\/\\]c[\/\\]package.json$/,
+ remotename: /[\/\\]d$/,
+ packagedirlikegithub: /[\/\\]e[\/\\]1$/,
+ packagejsonlikegithub: /[\/\\]e[\/\\]1[\/\\]package.json$/,
+ github: /[\/\\]e[\/\\]2$/
+}
+
+var rps = requireInject("../index", {
+ "fs": {
+ "stat": function (path, callback) {
+ if (re.tarball.test(path)) {
+ callback(null,{isDirectory:function(){ return false }})
+ }
+ else if (re.packagedir.test(path)) {
+ callback(null,{isDirectory:function(){ return true }})
+ }
+ else if (re.packagejson.test(path)) {
+ callback(null,{})
+ }
+ else if (re.nonpackagedir.test(path)) {
+ callback(null,{isDirectory:function(){ return true }})
+ }
+ else if (re.nopackagejson.test(path)) {
+ callback(new Error("EFILENOTFOUND"))
+ }
+ else if (re.remotename.test(path)) {
+ callback(new Error("EFILENOTFOUND"))
+ }
+ else if (re.packagedirlikegithub.test(path)) {
+ callback(null,{isDirectory:function(){ return true }})
+ }
+ else if (re.packagejsonlikegithub.test(path)) {
+ callback(null,{})
+ }
+ else if (re.github.test(path)) {
+ callback(new Error("EFILENOTFOUND"))
+ }
+ else {
+ throw new Error("Unknown stat fixture path: "+path)
+ }
+ }
+ }
+})
+
+test("realize-package-specifier", function (t) {
+ t.plan(10)
+ rps("a.tar.gz", function (err, result) {
+ t.is(result.type, "local", "local tarball")
+ })
+ rps("b", function (err, result) {
+ t.is(result.type, "directory", "local package directory")
+ })
+ rps("c", function (err, result) {
+ t.is(result.type, "range", "remote package, non-package local directory")
+ })
+ rps("d", function (err, result) {
+ t.is(result.type, "range", "remote package, no local directory")
+ })
+ rps("file:./a.tar.gz", function (err, result) {
+ t.is(result.type, "local", "local tarball")
+ })
+ rps("file:./b", function (err, result) {
+ t.is(result.type, "directory", "local package directory")
+ })
+ rps("file:./c", function (err, result) {
+ t.is(result.type, "local", "non-package local directory, specified with a file URL")
+ })
+ rps("file:./d", function (err, result) {
+ t.is(result.type, "local", "no local directory, specified with a file URL")
+ })
+ rps("e/1", function (err, result) {
+ t.is(result.type, "directory", "local package directory")
+ })
+ rps("e/2", function (err, result) {
+ t.is(result.type, "github", "github package dependency")
+ })
+})
+test("named realize-package-specifier", function (t) {
+ t.plan(10)
+
+ rps("a@a.tar.gz", function (err, result) {
+ t.is(result.type, "local", "named local tarball")
+ })
+ rps("b@b", function (err, result) {
+ t.is(result.type, "directory", "named local package directory")
+ })
+ rps("c@c", function (err, result) {
+ t.is(result.type, "tag", "remote package, non-package local directory")
+ })
+ rps("d@d", function (err, result) {
+ t.is(result.type, "tag", "remote package, no local directory")
+ })
+ rps("a@file:./a.tar.gz", function (err, result) {
+ t.is(result.type, "local", "local tarball")
+ })
+ rps("b@file:./b", function (err, result) {
+ t.is(result.type, "directory", "local package directory")
+ })
+ rps("c@file:./c", function (err, result) {
+ t.is(result.type, "local", "non-package local directory, specified with a file URL")
+ })
+ rps("d@file:./d", function (err, result) {
+ t.is(result.type, "local", "no local directory, specified with a file URL")
+ })
+ rps("e@e/1", function (err, result) {
+ t.is(result.type, "directory", "local package directory")
+ })
+ rps("e@e/2", function (err, result) {
+ t.is(result.type, "github", "github package dependency")
+ })
+})
diff --git a/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js b/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js
new file mode 100644
index 0000000000..be07aa56a3
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/test/npa-basic.js
@@ -0,0 +1,207 @@
+var test = require("tap").test;
+var rps = require("../index.js")
+var path = require("path")
+
+test("npa-basic", function (t) {
+ t.setMaxListeners(999)
+
+ var tests = {
+ "foo@1.2": {
+ name: "foo",
+ type: "range",
+ spec: ">=1.2.0 <1.3.0",
+ raw: "foo@1.2",
+ rawSpec: "1.2"
+ },
+
+ "@foo/bar": {
+ raw: "@foo/bar",
+ name: "@foo/bar",
+ scope: "@foo",
+ rawSpec: "",
+ spec: "*",
+ type: "range"
+ },
+
+ "@foo/bar@": {
+ raw: "@foo/bar@",
+ name: "@foo/bar",
+ scope: "@foo",
+ rawSpec: "",
+ spec: "*",
+ type: "range"
+ },
+
+ "@foo/bar@baz": {
+ raw: "@foo/bar@baz",
+ name: "@foo/bar",
+ scope: "@foo",
+ rawSpec: "baz",
+ spec: "baz",
+ type: "tag"
+ },
+
+ "@f fo o al/ a d s ;f ": {
+ raw: "@f fo o al/ a d s ;f",
+ name: null,
+ rawSpec: "@f fo o al/ a d s ;f",
+ spec: path.resolve("@f fo o al/ a d s ;f"),
+ type: "local"
+ },
+
+ "foo@1.2.3": {
+ name: "foo",
+ type: "version",
+ spec: "1.2.3",
+ raw: "foo@1.2.3"
+ },
+
+ "foo@=v1.2.3": {
+ name: "foo",
+ type: "version",
+ spec: "1.2.3",
+ raw: "foo@=v1.2.3",
+ rawSpec: "=v1.2.3"
+ },
+
+ "git+ssh://git@github.com/user/foo#1.2.3": {
+ name: null,
+ type: "git",
+ spec: "ssh://git@github.com/user/foo#1.2.3",
+ raw: "git+ssh://git@github.com/user/foo#1.2.3"
+ },
+
+ "git+file://path/to/repo#1.2.3": {
+ name: null,
+ type: "git",
+ spec: "file://path/to/repo#1.2.3",
+ raw: "git+file://path/to/repo#1.2.3"
+ },
+
+ "git://github.com/user/foo": {
+ name: null,
+ type: "git",
+ spec: "git://github.com/user/foo",
+ raw: "git://github.com/user/foo"
+ },
+
+ "@foo/bar@git+ssh://github.com/user/foo": {
+ name: "@foo/bar",
+ scope: "@foo",
+ spec: "ssh://github.com/user/foo",
+ rawSpec: "git+ssh://github.com/user/foo",
+ raw: "@foo/bar@git+ssh://github.com/user/foo"
+ },
+
+ "/path/to/foo": {
+ name: null,
+ type: "local",
+ spec: "/path/to/foo",
+ raw: "/path/to/foo"
+ },
+
+ "file:path/to/foo": {
+ name: null,
+ type: "local",
+ spec: path.resolve(__dirname,"..","path/to/foo"),
+ raw: "file:path/to/foo"
+ },
+
+ "file:~/path/to/foo": {
+ name: null,
+ type: "local",
+ spec: path.resolve(__dirname,"..","~/path/to/foo"),
+ raw: "file:~/path/to/foo"
+ },
+
+ "file:../path/to/foo": {
+ name: null,
+ type: "local",
+ spec: path.resolve(__dirname,"..","../path/to/foo"),
+ raw: "file:../path/to/foo"
+ },
+
+ "file:///path/to/foo": {
+ name: null,
+ type: "local",
+ spec: "/path/to/foo",
+ raw: "file:///path/to/foo"
+ },
+
+ "https://server.com/foo.tgz": {
+ name: null,
+ type: "remote",
+ spec: "https://server.com/foo.tgz",
+ raw: "https://server.com/foo.tgz"
+ },
+
+ "user/foo-js": {
+ name: null,
+ type: "github",
+ spec: "user/foo-js",
+ raw: "user/foo-js"
+ },
+
+ "user/foo-js#bar/baz": {
+ name: null,
+ type: "github",
+ spec: "user/foo-js#bar/baz",
+ raw: "user/foo-js#bar/baz"
+ },
+
+ "user..blerg--/..foo-js# . . . . . some . tags / / /": {
+ name: null,
+ type: "github",
+ spec: "user..blerg--/..foo-js# . . . . . some . tags / / /",
+ raw: "user..blerg--/..foo-js# . . . . . some . tags / / /"
+ },
+
+ "user/foo-js#bar/baz/bin": {
+ name: null,
+ type: "github",
+ spec: "user/foo-js#bar/baz/bin",
+ raw: "user/foo-js#bar/baz/bin"
+ },
+
+ "foo@user/foo-js": {
+ name: "foo",
+ type: "github",
+ spec: "user/foo-js",
+ raw: "foo@user/foo-js"
+ },
+
+ "foo@latest": {
+ name: "foo",
+ type: "tag",
+ spec: "latest",
+ raw: "foo@latest"
+ },
+
+ "foo": {
+ name: "foo",
+ type: "range",
+ spec: "*",
+ raw: "foo"
+ }
+ }
+
+ t.plan( 2 + Object.keys(tests).length * 3 )
+
+ Object.keys(tests).forEach(function (arg) {
+ rps(arg, path.resolve(__dirname,'..'), function(err, res) {
+ t.notOk(err, "No error")
+ t.type(res, "Result")
+ t.has(res, tests[arg])
+ })
+ })
+
+ // Completely unreasonable invalid garbage throws an error
+ rps("this is not a \0 valid package name or url", path.resolve(__dirname,'..'), function (err) {
+ t.ok(err, "error")
+ })
+
+ rps("gopher://yea right", path.resolve(__dirname,'..'), function (err) {
+ t.ok(err, "Unsupported URL Type: gopher://yea right")
+ })
+
+})
diff --git a/deps/npm/node_modules/realize-package-specifier/test/npa-windows.js b/deps/npm/node_modules/realize-package-specifier/test/npa-windows.js
new file mode 100644
index 0000000000..f6275bea9c
--- /dev/null
+++ b/deps/npm/node_modules/realize-package-specifier/test/npa-windows.js
@@ -0,0 +1,42 @@
+global.FAKE_WINDOWS = true
+
+var rps = require('../index.js')
+var test = require("tap").test
+var path = require("path")
+
+var cases = {
+ "C:\\x\\y\\z": {
+ raw: 'C:\\x\\y\\z',
+ scope: null,
+ name: null,
+ rawSpec: 'C:\\x\\y\\z',
+ spec: path.resolve('C:\\x\\y\\z'),
+ type: 'local'
+ },
+ "foo@C:\\x\\y\\z": {
+ raw: 'foo@C:\\x\\y\\z',
+ scope: null,
+ name: 'foo',
+ rawSpec: 'C:\\x\\y\\z',
+ spec: path.resolve('C:\\x\\y\\z'),
+ type: 'local'
+ },
+ "foo@/foo/bar/baz": {
+ raw: 'foo@/foo/bar/baz',
+ scope: null,
+ name: 'foo',
+ rawSpec: '/foo/bar/baz',
+ spec: path.resolve('/foo/bar/baz'),
+ type: 'local'
+ }
+}
+
+test("parse a windows path", function (t) {
+ t.plan( Object.keys(cases).length )
+ Object.keys(cases).forEach(function (c) {
+ var expect = cases[c]
+ rps(c, function(err, actual) {
+ t.same(actual, expect, c)
+ })
+ })
+})
diff --git a/deps/npm/node_modules/request/.eslintrc b/deps/npm/node_modules/request/.eslintrc
new file mode 100644
index 0000000000..9c3350d6bb
--- /dev/null
+++ b/deps/npm/node_modules/request/.eslintrc
@@ -0,0 +1,22 @@
+{
+ "env": {
+ "node": true
+ },
+ "rules": {
+ // 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
+ }
+}
diff --git a/deps/npm/node_modules/request/.travis.yml b/deps/npm/node_modules/request/.travis.yml
index 6e4887af80..742c7dfa0c 100644
--- a/deps/npm/node_modules/request/.travis.yml
+++ b/deps/npm/node_modules/request/.travis.yml
@@ -2,11 +2,8 @@ language: node_js
node_js:
- "0.8"
- "0.10"
-
-env:
- - OPTIONALS=Y
- - OPTIONALS=N
-
-install:
- - if [[ "$OPTIONALS" == "Y" ]]; then npm install; fi
- - if [[ "$OPTIONALS" == "N" ]]; then npm install --no-optional; fi
+webhooks:
+ urls: https://webhooks.gitter.im/e/237280ed4796c19cc626
+ on_success: change # options: [always|never|change] default: always
+ on_failure: always # options: [always|never|change] default: always
+ on_start: false # default: false
diff --git a/deps/npm/node_modules/request/CONTRIBUTING.md b/deps/npm/node_modules/request/CONTRIBUTING.md
index 06367a1b0c..17d383e8e3 100644
--- a/deps/npm/node_modules/request/CONTRIBUTING.md
+++ b/deps/npm/node_modules/request/CONTRIBUTING.md
@@ -4,7 +4,9 @@
## What?
-Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
+Individuals making significant and valuable contributions are given
+commit-access to the project to contribute as they see fit. This project is
+more like an open wiki than a standard guarded open source project.
## Rules
@@ -12,10 +14,21 @@ There are a few basic ground-rules for contributors:
1. **No `--force` pushes** or modifying the Git history in any way.
1. **Non-master branches** ought to be used for ongoing work.
-1. **External API changes and significant modifications** ought to be subject to an **internal pull-request** to solicit feedback from other contributors.
-1. Internal pull-requests to solicit feedback are *encouraged* for any other non-trivial contribution but left to the discretion of the contributor.
-1. For significant changes wait a full 24 hours before merging so that active contributors who are distributed throughout the world have a chance to weigh in.
+1. **External API changes and significant modifications** ought to be subject
+ to an **internal pull-request** to solicit feedback from other contributors.
+1. Internal pull-requests to solicit feedback are *encouraged* for any other
+ non-trivial contribution but left to the discretion of the contributor.
+1. For significant changes wait a full 24 hours before merging so that active
+ contributors who are distributed throughout the world have a chance to weigh
+ in.
1. Contributors should attempt to adhere to the prevailing code-style.
+1. Run `npm test` locally before submitting your PR, to catch any easy to miss
+ style & testing issues. To diagnose test failures, there are two ways to
+ run a single test file:
+ - `node_modules/.bin/taper tests/test-file.js` - run using the default
+ [`taper`](/nylen/taper) test reporter.
+ - `node tests/test-file.js` - view the raw
+ [tap](https://testanything.org/) output.
## Releases
@@ -24,6 +37,8 @@ Declaring formal releases remains the prerogative of the project maintainer.
## Changes to this arrangement
-This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change.
+This is an experiment and feedback is welcome! This document may also be
+subject to pull-requests or changes by contributors where you believe you have
+something valuable to add or change.
-----------------------------------------
diff --git a/deps/npm/node_modules/request/README.md b/deps/npm/node_modules/request/README.md
index 1878fdfbb8..5660420784 100644
--- a/deps/npm/node_modules/request/README.md
+++ b/deps/npm/node_modules/request/README.md
@@ -1,4 +1,5 @@
# Request — Simplified HTTP client
+[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/mikeal/request?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![NPM](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/)
@@ -35,6 +36,18 @@ Request can also `pipe` to itself. When doing so, `content-type` and `content-le
request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
```
+Request emits a "response" event when a response is received. The `response` argument will be an instance of [http.IncomingMessage](http://nodejs.org/api/http.html#http_http_incomingmessage).
+
+```javascript
+request
+ .get('http://google.com/img.png')
+ .on('response', function(response) {
+ console.log(response.statusCode) // 200
+ console.log(response.headers['content-type']) // 'image/png'
+ })
+ .pipe(request.put('http://mysite.com/img.png'))
+```
+
Now let’s get fancy.
```javascript
@@ -108,9 +121,8 @@ HTTP/1.1 200 OK
At this point, the connection is left open, and the client is
communicating directly with the `endpoint-server.com` machine.
-See (the wikipedia page on HTTP
-Tunneling)[http://en.wikipedia.org/wiki/HTTP_tunnel] for more
-information.
+See [the wikipedia page on HTTP Tunneling](http://en.wikipedia.org/wiki/HTTP_tunnel)
+for more information.
By default, when proxying `http` traffic, request will simply make a
standard proxied `http` request. This is done by making the `url`
@@ -169,48 +181,128 @@ header is *never* sent to the endpoint server, but only to the proxy
server. All other headers are sent as-is over the established
connection.
-## UNIX Socket
+### Controlling proxy behaviour using environment variables
+
+The following environment variables are respected by `request`:
+
+ * `HTTP_PROXY` / `http_proxy`
+ * `HTTPS_PROXY` / `https_proxy`
+ * `NO_PROXY` / `no_proxy`
+
+When `HTTP_PROXY` / `http_proxy` are set, they will be used to proxy non-SSL requests that do not have an explicit `proxy` configuration option present. Similarly, `HTTPS_PROXY` / `https_proxy` will be respected for SSL requests that do not have an explicit `proxy` configuration option. It is valid to define a proxy in one of the environment variables, but then override it for a specific request, using the `proxy` configuration option. Furthermore, the `proxy` configuration option can be explicitly set to false / null to opt out of proxying altogether for that request.
+
+`request` is also aware of the `NO_PROXY`/`no_proxy` environment variables. These variables provide a granular way to opt out of proxying, on a per-host basis. It should contain a comma separated list of hosts to opt out of proxying. It is also possible to opt of proxying when a particular destination port is used. Finally, the variable may be set to `*` to opt out of the implicit proxy configuration of the other environment variables.
+
+Here's some examples of valid `no_proxy` values:
-`request` supports the `unix://` protocol for all requests. The path is assumed to be absolute to the root of the host file system.
+ * `google.com` - don't proxy HTTP/HTTPS requests to Google.
+ * `google.com:443` - don't proxy HTTPS requests to Google, but *do* proxy HTTP requests to Google.
+ * `google.com:443, yahoo.com:80` - don't proxy HTTPS requests to Google, and don't proxy HTTP requests to Yahoo!
+ * `*` - ignore `https_proxy`/`http_proxy` environment variables altogether.
-HTTP paths are extracted from the supplied URL by testing each level of the full URL against net.connect for a socket response.
+## UNIX Socket
-Thus the following request will GET `/httppath` from the HTTP server listening on `/tmp/unix.socket`
+`request` supports making requests to [UNIX Domain Sockets](http://en.wikipedia.org/wiki/Unix_domain_socket). To make one, use the following URL scheme:
```javascript
-request.get('unix://tmp/unix.socket/httppath')
+/* Pattern */ 'http://unix:SOCKET:PATH'
+/* Example */ request.get('http://unix:/absolute/path/to/unix.socket:/request/path')
```
+Note: The `SOCKET` path is assumed to be absolute to the root of the host file system.
+
+
## Forms
`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.
+#### application/x-www-form-urlencoded (URL-Encoded Forms)
+
URL-encoded forms are simple.
```javascript
request.post('http://service.com/upload', {form:{key:'value'}})
// or
request.post('http://service.com/upload').form({key:'value'})
+// or
+request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ })
```
-For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don’t need to worry about piping the form object or setting the headers, `request` will handle that for you.
+#### multipart/form-data (Multipart Form Uploads)
+
+For `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). For the most cases, you can pass your upload form data via the `formData` option.
+
```javascript
-var r = request.post('http://service.com/upload', function optionalCallback (err, httpResponse, body) {
+var formData = {
+ // Pass a simple key-value pair
+ my_field: 'my_value',
+ // Pass data via Buffers
+ my_buffer: new Buffer([1, 2, 3]),
+ // Pass data via Streams
+ my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
+ // Pass multiple values /w an Array
+ attachments: [
+ fs.createReadStream(__dirname + '/attacment1.jpg')
+ fs.createReadStream(__dirname + '/attachment2.jpg')
+ ],
+ // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS}
+ // See the `form-data` README for more information about options: https://github.com/felixge/node-form-data
+ custom_file: {
+ value: fs.createReadStream('/dev/urandom'),
+ options: {
+ filename: 'topsecret.jpg',
+ contentType: 'image/jpg'
+ }
+ }
+};
+request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
-})
-var form = r.form()
-form.append('my_field', 'my_value')
-form.append('my_buffer', new Buffer([1, 2, 3]))
-form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')))
-form.append('remote_file', request('http://google.com/doodle.png'))
+});
+```
+
+For advanced cases, you can the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.)
+
+```javascript
+// NOTE: Advanced use-case, for normal use see 'formData' usage above
+var r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) { // ...
-// Just like always, `r` is a writable stream, and can be used as such (you have until nextTick to pipe it, etc.)
-// Alternatively, you can provide a callback (that's what this example does — see `optionalCallback` above).
+var form = r.form();
+form.append('my_field', 'my_value');
+form.append('my_buffer', new Buffer([1, 2, 3]));
+form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'});
```
+See the [form-data README](https://github.com/felixge/node-form-data) for more information & examples.
+
+#### multipart/related
+
+Some variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options.
+
+```javascript
+ request(
+ { method: 'PUT'
+ , preambleCRLF: true
+ , postambleCRLF: true
+ , uri: 'http://service.com/upload'
+ , multipart:
+ [ { 'content-type': 'application/json'
+ , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}})
+ }
+ , { body: 'I am an attachment' }
+ ]
+ }
+ , function (error, response, body) {
+ if (err) {
+ return console.error('upload failed:', err);
+ }
+ console.log('Upload successful! Server responded with:', body);
+ }
+ )
+```
+
## HTTP Authentication
@@ -238,7 +330,7 @@ If passed as an option, `auth` should be a hash containing values `user` || `use
`sendImmediately` defaults to `true`, which causes a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a `401` response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).
-Note that you can also use for basic authentication a trick using the URL itself, as specified in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt).
+Note that you can also use for basic authentication a trick using the URL itself, as specified in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt).
Simply pass the `user:password` before the host with an `@` sign.
```javascript
@@ -331,35 +423,86 @@ function callback(error, response, body) {
request(options, callback);
```
+## TLS/SSL Protocol
+
+TLS/SSL Protocol options, such as `cert`, `key` and `passphrase`, can be
+set in the `agentOptions` property of the `options` object.
+In the example below, we call an API requires client side SSL certificate
+(in PEM format) with passphrase protected private key (in PEM format) and disable the SSLv3 protocol:
+
+```javascript
+var fs = require('fs')
+ , path = require('path')
+ , certFile = path.resolve(__dirname, 'ssl/client.crt')
+ , keyFile = path.resolve(__dirname, 'ssl/client.key')
+ , request = require('request');
+
+var options = {
+ url: 'https://api.some-server.com/',
+ agentOptions: {
+ 'cert': fs.readFileSync(certFile),
+ 'key': fs.readFileSync(keyFile),
+ // Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format:
+ // 'pfx': fs.readFileSync(pfxFilePath),
+ 'passphrase': 'password',
+ 'securityOptions': 'SSL_OP_NO_SSLv3'
+ }
+};
+
+request.get(options);
+```
+
+It is able to force using SSLv3 only by specifying `secureProtocol`:
+
+```javascript
+
+request.get({
+ url: 'https://api.some-server.com/',
+ agentOptions: {
+ 'secureProtocol': 'SSLv3_method'
+ }
+});
+```
+
## request(options, callback)
The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.
* `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`
* `qs` - object containing querystring values to be appended to the `uri`
+* `useQuerystring` - If true, use `querystring` to stringify and parse
+ querystrings, otherwise use `qs` (default: `false`). Set this option to
+ `true` if you need arrays to be serialized as `foo=bar&foo=baz` instead of the
+ default `foo[0]=bar&foo[1]=baz`.
* `method` - http method (default: `"GET"`)
* `headers` - http headers (default: `{}`)
-* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`.
-* `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no options, a `FormData` instance is returned (and is piped to request).
+* `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer` or `String`, unless `json` is `true`. If `json` is `true`, then `body` must be a JSON-serializable object.
+* `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above.
+* `formData` - Data to pass for a `multipart/form-data` request. See "Forms" section above.
+* `multipart` - (experimental) Data to pass for a `multipart/related` request. See "Forms" section above
* `auth` - A hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above.
* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.
* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.
+* `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request.
+* `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request.
* `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise.
* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)
* `maxRedirects` - the maximum number of redirects to follow (default: `10`)
-* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`.
-* `pool` - A hash object containing the agents for these requests. If omitted, the request will use the global pool (which is set to node's default `maxSockets`)
-* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.
+* `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default).
+* `pool` - An object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as [your options allow for it](request.js#L747)). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool.
+ * A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`).
* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request
* `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)
* `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.
* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).
* `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.
+* `agentOptions` - Object containing user agent options. See documentation above. **Note:** [see tls API doc for TLS/SSL options](http://nodejs.org/api/tls.html#tls_tls_connect_options_callback).
+
* `jar` - If `true` and `tough-cookie` is installed, remember cookies for future use (or define your custom cookie jar; see examples section)
* `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services)
* `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.
* `localAddress` - Local interface to bind for network connections.
-* `gzip` - If `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response.
+* `gzip` - If `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response. **Note:** Automatic decoding of the response content is performed on the body data returned through `request` (both through the `request` stream and passed to the callback function) but is not performed on the `response` stream (available from the `response` event) which is the unmodified `http.IncomingMessage` object which may contain compressed data. See example below.
* `tunnel` - If `true`, then *always* use a tunneling proxy. If
`false` (default), then tunneling will only be used if the
destination is `https`, or if a previous request in the redirect
@@ -368,7 +511,7 @@ The first argument can be either a `url` or an `options` object. The only requir
tunneling proxy.
-The callback argument gets 3 arguments:
+The callback argument gets 3 arguments:
1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object)
2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object
@@ -382,7 +525,7 @@ There are also shorthand methods for different HTTP METHODs and some other conve
This method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.
-**Note:** You can call `.defaults()` on the wrapper that is returned from `request.defaults` to add/override defaults that were previously defaulted.
+**Note:** You can call `.defaults()` on the wrapper that is returned from `request.defaults` to add/override defaults that were previously defaulted.
For example:
```javascript
@@ -450,7 +593,7 @@ request.get(url)
Function that creates a new cookie.
```javascript
-request.cookie('cookie_string_here')
+request.cookie('key1=value1')
```
### request.jar
@@ -488,6 +631,37 @@ request.jar()
)
```
+For backwards-compatibility, response compression is not supported by default.
+To accept gzip-compressed responses, set the `gzip` option to `true`. Note
+that the body data passed through `request` is automatically decompressed
+while the response object is unmodified and will contain compressed data if
+the server sent a compressed response.
+
+```javascript
+ var request = require('request')
+ request(
+ { method: 'GET'
+ , uri: 'http://www.google.com'
+ , gzip: true
+ }
+ , function (error, response, body) {
+ // body is the decompressed response body
+ console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity'))
+ console.log('the decoded data is: ' + body)
+ }
+ ).on('data', function(data) {
+ // decompressed data as it is received
+ console.log('decoded chunk: ' + data)
+ })
+ .on('response', function(response) {
+ // unmodified http.IncomingMessage object
+ response.on('data', function(data) {
+ // compressed data as it is received
+ console.log('received ' + data.length + ' bytes of compressed data')
+ })
+ })
+```
+
Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`) and install `tough-cookie`.
```javascript
@@ -511,10 +685,11 @@ OR
```javascript
// `npm install --save tough-cookie` before this works
-var j = request.jar()
-var cookie = request.cookie('your_cookie_here')
-j.setCookie(cookie, uri);
-request({url: 'http://www.google.com', jar: j}, function () {
+var j = request.jar();
+var cookie = request.cookie('key1=value1');
+var url = 'http://www.google.com';
+j.setCookie(cookie, url);
+request({url: url, jar: j}, function () {
request('http://images.google.com')
})
```
@@ -522,10 +697,10 @@ request({url: 'http://www.google.com', jar: j}, function () {
To inspect your cookie jar after a request
```javascript
-var j = request.jar()
+var j = request.jar()
request({url: 'http://www.google.com', jar: j}, function () {
var cookie_string = j.getCookieString(uri); // "key1=value1; key2=value2; ..."
- var cookies = j.getCookies(uri);
+ var cookies = j.getCookies(uri);
// [{key: 'key1', value: 'value1', domain: "www.google.com", ...}, ...]
})
```
diff --git a/deps/npm/node_modules/request/index.js b/deps/npm/node_modules/request/index.js
index 8e8a133e24..033268405d 100755
--- a/deps/npm/node_modules/request/index.js
+++ b/deps/npm/node_modules/request/index.js
@@ -12,16 +12,18 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+'use strict'
+
var extend = require('util')._extend
, cookies = require('./lib/cookies')
- , copy = require('./lib/copy')
, helpers = require('./lib/helpers')
- , isFunction = helpers.isFunction
+
+var isFunction = helpers.isFunction
, constructObject = helpers.constructObject
, filterForCallback = helpers.filterForCallback
, constructOptionsFrom = helpers.constructOptionsFrom
, paramsHaveRequestBody = helpers.paramsHaveRequestBody
- ;
+
// organize params for patch, post, put, head, del
function initParams(uri, options, callback) {
@@ -36,8 +38,9 @@ function initParams(uri, options, callback) {
}
function request (uri, options, callback) {
- if (typeof uri === 'undefined')
+ if (typeof uri === 'undefined') {
throw new Error('undefined is not a valid uri or options object.')
+ }
var params = initParams(uri, options, callback)
options = params.options
@@ -48,8 +51,9 @@ function request (uri, options, callback) {
}
function requester(params) {
- if(typeof params.options._requester === 'function')
+ if(typeof params.options._requester === 'function') {
return params.options._requester
+ }
return request
}
@@ -63,8 +67,9 @@ request.head = function (uri, options, callback) {
var params = initParams(uri, options, callback)
params.options.method = 'HEAD'
- if (paramsHaveRequestBody(params))
- throw new Error("HTTP HEAD requests MUST NOT include a request body.")
+ if (paramsHaveRequestBody(params)) {
+ throw new Error('HTTP HEAD requests MUST NOT include a request body.')
+ }
return requester(params)(params.uri || null, params.options, params.callback)
}
@@ -102,7 +107,7 @@ request.cookie = function (str) {
}
request.defaults = function (options, requester) {
-
+ var self = this
var wrap = function (method) {
var headerlessOptions = function (options) {
options = extend({}, options)
@@ -119,13 +124,14 @@ request.defaults = function (options, requester) {
return function (uri, opts, callback) {
var params = initParams(uri, opts, callback)
- params.options = extend(params.options, headerlessOptions(options))
+ params.options = extend(headerlessOptions(options), params.options)
- if (options.headers)
+ if (options.headers) {
params.options.headers = getHeaders(params, options)
+ }
if (isFunction(requester)) {
- if (method === request) {
+ if (method === self) {
method = requester
} else {
params.options._requester = requester
@@ -136,23 +142,27 @@ request.defaults = function (options, requester) {
}
}
- defaults = wrap(this)
- defaults.get = wrap(this.get)
- defaults.patch = wrap(this.patch)
- defaults.post = wrap(this.post)
- defaults.put = wrap(this.put)
- defaults.head = wrap(this.head)
- defaults.del = wrap(this.del)
- defaults.cookie = wrap(this.cookie)
- defaults.jar = this.jar
- defaults.defaults = this.defaults
+ var defaults = wrap(self)
+ defaults.get = wrap(self.get)
+ defaults.patch = wrap(self.patch)
+ defaults.post = wrap(self.post)
+ defaults.put = wrap(self.put)
+ defaults.head = wrap(self.head)
+ defaults.del = wrap(self.del)
+ defaults.cookie = wrap(self.cookie)
+ defaults.jar = self.jar
+ defaults.defaults = self.defaults
return defaults
}
request.forever = function (agentOptions, optionsArg) {
var options = constructObject()
- if (optionsArg) options.extend(optionsArg)
- if (agentOptions) options.agentOptions = agentOptions
+ if (optionsArg) {
+ options.extend(optionsArg)
+ }
+ if (agentOptions) {
+ options.agentOptions = agentOptions
+ }
options.extend({forever: true})
return request.defaults(options.done())
diff --git a/deps/npm/node_modules/request/lib/cookies.js b/deps/npm/node_modules/request/lib/cookies.js
index 7e61c62bcd..017bdb467e 100644
--- a/deps/npm/node_modules/request/lib/cookies.js
+++ b/deps/npm/node_modules/request/lib/cookies.js
@@ -1,31 +1,41 @@
-var optional = require('./optional')
- , tough = optional('tough-cookie')
- , Cookie = tough && tough.Cookie
- , CookieJar = tough && tough.CookieJar
- ;
+'use strict'
+
+var tough = require('tough-cookie')
+
+var Cookie = tough.Cookie
+ , CookieJar = tough.CookieJar
+
exports.parse = function(str) {
- if (str && str.uri) str = str.uri
- if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param")
+ if (str && str.uri) {
+ str = str.uri
+ }
+ if (typeof str !== 'string') {
+ throw new Error('The cookie function only accepts STRING as param')
+ }
if (!Cookie) {
- return null;
+ return null
}
return Cookie.parse(str)
-};
+}
// Adapt the sometimes-Async api of tough.CookieJar to our requirements
function RequestJar() {
- this._jar = new CookieJar();
+ var self = this
+ self._jar = new CookieJar()
}
RequestJar.prototype.setCookie = function(cookieOrStr, uri, options) {
- return this._jar.setCookieSync(cookieOrStr, uri, options || {});
-};
+ var self = this
+ return self._jar.setCookieSync(cookieOrStr, uri, options || {})
+}
RequestJar.prototype.getCookieString = function(uri) {
- return this._jar.getCookieStringSync(uri);
-};
+ var self = this
+ return self._jar.getCookieStringSync(uri)
+}
RequestJar.prototype.getCookies = function(uri) {
- return this._jar.getCookiesSync(uri);
-};
+ var self = this
+ return self._jar.getCookiesSync(uri)
+}
exports.jar = function() {
if (!CookieJar) {
@@ -34,7 +44,7 @@ exports.jar = function() {
setCookie: function(){},
getCookieString: function(){},
getCookies: function(){}
- };
+ }
}
- return new RequestJar();
-};
+ return new RequestJar()
+}
diff --git a/deps/npm/node_modules/request/lib/copy.js b/deps/npm/node_modules/request/lib/copy.js
index 56831ff80f..ad162a5089 100644
--- a/deps/npm/node_modules/request/lib/copy.js
+++ b/deps/npm/node_modules/request/lib/copy.js
@@ -1,3 +1,5 @@
+'use strict'
+
module.exports =
function copy (obj) {
var o = {}
@@ -5,4 +7,4 @@ function copy (obj) {
o[i] = obj[i]
})
return o
-} \ No newline at end of file
+}
diff --git a/deps/npm/node_modules/request/lib/debug.js b/deps/npm/node_modules/request/lib/debug.js
index d61ec88d7f..25e3dedc7e 100644
--- a/deps/npm/node_modules/request/lib/debug.js
+++ b/deps/npm/node_modules/request/lib/debug.js
@@ -1,6 +1,8 @@
+'use strict'
+
var util = require('util')
, request = require('../index')
- ;
+
module.exports = function debug() {
if (request.debug) {
diff --git a/deps/npm/node_modules/request/lib/helpers.js b/deps/npm/node_modules/request/lib/helpers.js
index eb3f3e1f29..fa5712ffbc 100644
--- a/deps/npm/node_modules/request/lib/helpers.js
+++ b/deps/npm/node_modules/request/lib/helpers.js
@@ -1,4 +1,16 @@
+'use strict'
+
var extend = require('util')._extend
+ , jsonSafeStringify = require('json-stringify-safe')
+ , crypto = require('crypto')
+
+function deferMethod() {
+ if(typeof setImmediate === 'undefined') {
+ return process.nextTick
+ }
+
+ return setImmediate
+}
function constructObject(initialObject) {
initialObject = initialObject || {}
@@ -15,21 +27,25 @@ function constructObject(initialObject) {
function constructOptionsFrom(uri, options) {
var params = constructObject()
- if (typeof uri === 'object') params.extend(uri)
- if (typeof uri === 'string') params.extend({uri: uri})
- params.extend(options)
+ if (typeof options === 'object') {
+ params.extend(options).extend({uri: uri})
+ } else if (typeof uri === 'string') {
+ params.extend({uri: uri})
+ } else {
+ params.extend(uri)
+ }
return params.done()
}
+function isFunction(value) {
+ return typeof value === 'function'
+}
+
function filterForCallback(values) {
var callbacks = values.filter(isFunction)
return callbacks[0]
}
-function isFunction(value) {
- return typeof value === 'function'
-}
-
function paramsHaveRequestBody(params) {
return (
params.options.body ||
@@ -39,8 +55,35 @@ function paramsHaveRequestBody(params) {
)
}
+function safeStringify (obj) {
+ var ret
+ try {
+ ret = JSON.stringify(obj)
+ } catch (e) {
+ ret = jsonSafeStringify(obj)
+ }
+ return ret
+}
+
+function md5 (str) {
+ return crypto.createHash('md5').update(str).digest('hex')
+}
+
+function isReadStream (rs) {
+ return rs.readable && rs.path && rs.mode
+}
+
+function toBase64 (str) {
+ return (new Buffer(str || '', 'ascii')).toString('base64')
+}
+
exports.isFunction = isFunction
exports.constructObject = constructObject
exports.constructOptionsFrom = constructOptionsFrom
exports.filterForCallback = filterForCallback
exports.paramsHaveRequestBody = paramsHaveRequestBody
+exports.safeStringify = safeStringify
+exports.md5 = md5
+exports.isReadStream = isReadStream
+exports.toBase64 = toBase64
+exports.defer = deferMethod()
diff --git a/deps/npm/node_modules/request/lib/optional.js b/deps/npm/node_modules/request/lib/optional.js
deleted file mode 100644
index af0cc15f8c..0000000000
--- a/deps/npm/node_modules/request/lib/optional.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = function(moduleName) {
- try {
- return module.parent.require(moduleName);
- } catch (e) {
- // This could mean that we are in a browser context.
- // Add another try catch like it used to be, for backwards compability
- // and browserify reasons.
- try {
- return require(moduleName);
- }
- catch (e) {}
- }
-};
diff --git a/deps/npm/node_modules/request/node_modules/aws-sign2/package.json b/deps/npm/node_modules/request/node_modules/aws-sign2/package.json
index d04010d603..9104550c82 100644
--- a/deps/npm/node_modules/request/node_modules/aws-sign2/package.json
+++ b/deps/npm/node_modules/request/node_modules/aws-sign2/package.json
@@ -27,7 +27,7 @@
"shasum": "c57103f7a17fc037f02d7c2e64b602ea223f7d63",
"tarball": "http://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
},
- "_from": "aws-sign2@>=0.5.0-0 <0.6.0-0",
+ "_from": "aws-sign2@>=0.5.0 <0.6.0",
"_npmVersion": "1.3.2",
"_npmUser": {
"name": "mikeal",
@@ -42,5 +42,6 @@
"directories": {},
"_shasum": "c57103f7a17fc037f02d7c2e64b602ea223f7d63",
"_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
- "homepage": "https://github.com/mikeal/aws-sign"
+ "homepage": "https://github.com/mikeal/aws-sign",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/bl/.jshintrc b/deps/npm/node_modules/request/node_modules/bl/.jshintrc
new file mode 100644
index 0000000000..c8ef3ca409
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/bl/.jshintrc
@@ -0,0 +1,59 @@
+{
+ "predef": [ ]
+ , "bitwise": false
+ , "camelcase": false
+ , "curly": false
+ , "eqeqeq": false
+ , "forin": false
+ , "immed": false
+ , "latedef": false
+ , "noarg": true
+ , "noempty": true
+ , "nonew": true
+ , "plusplus": false
+ , "quotmark": true
+ , "regexp": false
+ , "undef": true
+ , "unused": true
+ , "strict": false
+ , "trailing": true
+ , "maxlen": 120
+ , "asi": true
+ , "boss": true
+ , "debug": true
+ , "eqnull": true
+ , "esnext": true
+ , "evil": true
+ , "expr": true
+ , "funcscope": false
+ , "globalstrict": false
+ , "iterator": false
+ , "lastsemic": true
+ , "laxbreak": true
+ , "laxcomma": true
+ , "loopfunc": true
+ , "multistr": false
+ , "onecase": false
+ , "proto": false
+ , "regexdash": false
+ , "scripturl": true
+ , "smarttabs": false
+ , "shadow": false
+ , "sub": true
+ , "supernew": false
+ , "validthis": true
+ , "browser": true
+ , "couch": false
+ , "devel": false
+ , "dojo": false
+ , "mootools": false
+ , "node": true
+ , "nonstandard": true
+ , "prototypejs": false
+ , "rhino": false
+ , "worker": true
+ , "wsh": false
+ , "nomen": false
+ , "onevar": false
+ , "passfail": false
+} \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/bl/LICENSE b/deps/npm/node_modules/request/node_modules/bl/LICENSE
deleted file mode 100644
index f6a0029de1..0000000000
--- a/deps/npm/node_modules/request/node_modules/bl/LICENSE
+++ /dev/null
@@ -1,39 +0,0 @@
-Copyright 2013, Rod Vagg (the "Original Author")
-All rights reserved.
-
-MIT +no-false-attribs License
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-Distributions of all or part of the Software intended to be used
-by the recipients as they would use the unmodified Software,
-containing modifications that substantially alter, remove, or
-disable functionality of the Software, outside of the documented
-configuration mechanisms provided by the Software, shall be
-modified such that the Original Author's bug reporting email
-addresses and urls are either replaced with the contact information
-of the parties responsible for the changes, or removed entirely.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-
-Except where noted, this license applies to any and all software
-programs and associated documentation files created by the
-Original Author, when distributed with the Software. \ No newline at end of file
diff --git a/deps/npm/node_modules/request/node_modules/bl/LICENSE.md b/deps/npm/node_modules/request/node_modules/bl/LICENSE.md
new file mode 100644
index 0000000000..ccb24797c8
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/bl/LICENSE.md
@@ -0,0 +1,13 @@
+The MIT License (MIT)
+=====================
+
+Copyright (c) 2014 bl contributors
+----------------------------------
+
+*bl contributors listed at <https://github.com/rvagg/bl#contributors>*
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/request/node_modules/bl/README.md b/deps/npm/node_modules/request/node_modules/bl/README.md
index 386fbd5f67..1753cc40b1 100644
--- a/deps/npm/node_modules/request/node_modules/bl/README.md
+++ b/deps/npm/node_modules/request/node_modules/bl/README.md
@@ -1,7 +1,5 @@
# bl *(BufferList)*
-[![Build Status](https://secure.travis-ci.org/rvagg/bl.png)](http://travis-ci.org/rvagg/bl)
-
**A Node.js Buffer list collector, reader and streamer thingy.**
[![NPM](https://nodei.co/npm/bl.png?downloads=true&downloadRank=true)](https://nodei.co/npm/bl/)
@@ -169,7 +167,7 @@ console.log(bl.toString())
--------------------------------------------------------
<a name="readXX"></a>
-### <code>bl.readDoubleBE()</code>, <code>bl.readDoubleLE()</code>, <code>bl.readFloatBE()</code>, <code>bl.readFloatLE()</code>, <code>bl.readInt32BE()</code>, <code>bl.readInt32LE()</code>, <code>bl.readUInt32BE()</code>, <code>bl.readUInt32LE()</code>, <code>bl.readInt16BE()</code>, <code>bl.readInt16LE()</code>, <code>bl.readUInt16BE()</code>, <code>bl.readUInt16LE()</code>, <code>bl.readInt8()</code>, <code>bl.readUInt8()</code>
+### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8()
All of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently.
@@ -188,9 +186,10 @@ See the <b><code>[Buffer](http://nodejs.org/docs/latest/api/buffer.html)</code><
* [Rod Vagg](https://github.com/rvagg)
* [Matteo Collina](https://github.com/mcollina)
+ * [Jarett Cruger](https://github.com/jcrugzz)
=======
## License
-**bl** is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.
+**bl** is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.
diff --git a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/LICENSE b/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/LICENSE
deleted file mode 100644
index 0c44ae716d..0000000000
--- a/deps/npm/node_modules/request/node_modules/bl/node_modules/readable-stream/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
-
-The BSD License
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/deps/npm/node_modules/request/node_modules/bl/package.json b/deps/npm/node_modules/request/node_modules/bl/package.json
index e94473d36c..a5692e03c7 100644
--- a/deps/npm/node_modules/request/node_modules/bl/package.json
+++ b/deps/npm/node_modules/request/node_modules/bl/package.json
@@ -1,6 +1,6 @@
{
"name": "bl",
- "version": "0.9.1",
+ "version": "0.9.3",
"description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!",
"main": "bl.js",
"scripts": {
@@ -14,7 +14,8 @@
"homepage": "https://github.com/rvagg/bl",
"authors": [
"Rod Vagg <rod@vagg.org> (https://github.com/rvagg)",
- "Matteo Collina <matteo.collina@gmail.com> (https://github.com/mcollina)"
+ "Matteo Collina <matteo.collina@gmail.com> (https://github.com/mcollina)",
+ "Jarett Cruger <jcrugzz@gmail.com> (https://github.com/jcrugzz)"
],
"keywords": [
"buffer",
@@ -32,14 +33,14 @@
"faucet": "~0.0.1",
"brtapsauce": "~0.3.0"
},
- "gitHead": "53d3d10e39be326feb049ab27437173b3ce47ec4",
+ "gitHead": "4987a76bf6bafd7616e62c7023c955e62f3a9461",
"bugs": {
"url": "https://github.com/rvagg/bl/issues"
},
- "_id": "bl@0.9.1",
- "_shasum": "d262c5b83aa5cf4386cea1d998c82b36d7ae2942",
- "_from": "bl@>=0.9.0-0 <0.10.0-0",
- "_npmVersion": "1.4.21",
+ "_id": "bl@0.9.3",
+ "_shasum": "c41eff3e7cb31bde107c8f10076d274eff7f7d44",
+ "_from": "bl@>=0.9.0 <0.10.0",
+ "_npmVersion": "1.4.27",
"_npmUser": {
"name": "rvagg",
"email": "rod@vagg.org"
@@ -51,10 +52,10 @@
}
],
"dist": {
- "shasum": "d262c5b83aa5cf4386cea1d998c82b36d7ae2942",
- "tarball": "http://registry.npmjs.org/bl/-/bl-0.9.1.tgz"
+ "shasum": "c41eff3e7cb31bde107c8f10076d274eff7f7d44",
+ "tarball": "http://registry.npmjs.org/bl/-/bl-0.9.3.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/bl/-/bl-0.9.1.tgz",
+ "_resolved": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/caseless/package.json b/deps/npm/node_modules/request/node_modules/caseless/package.json
index e3cd409c78..3725c10264 100644
--- a/deps/npm/node_modules/request/node_modules/caseless/package.json
+++ b/deps/npm/node_modules/request/node_modules/caseless/package.json
@@ -30,7 +30,7 @@
"homepage": "https://github.com/mikeal/caseless",
"_id": "caseless@0.6.0",
"_shasum": "8167c1ab8397fb5bb95f96d28e5a81c50f247ac4",
- "_from": "caseless@>=0.6.0-0 <0.7.0-0",
+ "_from": "caseless@>=0.6.0 <0.7.0",
"_npmVersion": "1.4.9",
"_npmUser": {
"name": "mikeal",
diff --git a/deps/npm/node_modules/request/node_modules/forever-agent/package.json b/deps/npm/node_modules/request/node_modules/forever-agent/package.json
index 65a6c55f26..1bb4441936 100644
--- a/deps/npm/node_modules/request/node_modules/forever-agent/package.json
+++ b/deps/npm/node_modules/request/node_modules/forever-agent/package.json
@@ -26,7 +26,7 @@
"shasum": "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130",
"tarball": "http://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
},
- "_from": "forever-agent@>=0.5.0-0 <0.6.0-0",
+ "_from": "forever-agent@>=0.5.0 <0.6.0",
"_npmVersion": "1.3.21",
"_npmUser": {
"name": "mikeal",
@@ -41,5 +41,6 @@
"directories": {},
"_shasum": "6d0e09c4921f94a27f63d3b49c5feff1ea4c5130",
"_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
- "readme": "ERROR: No README data found!"
+ "readme": "ERROR: No README data found!",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json
index 3b921537e7..e8f9ed81b6 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/async/package.json
@@ -41,7 +41,7 @@
"shasum": "ac3613b1da9bed1b47510bb4651b8931e47146c7",
"tarball": "http://registry.npmjs.org/async/-/async-0.9.0.tgz"
},
- "_from": "async@>=0.9.0-0 <0.10.0-0",
+ "_from": "async@>=0.9.0 <0.10.0",
"_npmVersion": "1.4.3",
"_npmUser": {
"name": "caolan",
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json
index cbafd00ee7..3324a13e97 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json
@@ -33,8 +33,8 @@
"scripts": {},
"directories": {},
"_shasum": "d4b1f43a93e8296dfe02694f4680bc37a313c73f",
- "_from": "delayed-stream@0.0.5",
"_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
+ "_from": "delayed-stream@0.0.5",
"bugs": {
"url": "https://github.com/felixge/node-delayed-stream/issues"
},
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json
index fd82201d20..080953f160 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json
@@ -31,7 +31,7 @@
},
"_id": "combined-stream@0.0.5",
"_shasum": "29ed76e5c9aad07c4acf9ca3d32601cce28697a2",
- "_from": "combined-stream@>=0.0.4-0 <0.1.0-0",
+ "_from": "combined-stream@>=0.0.4 <0.1.0",
"_npmVersion": "1.4.14",
"_npmUser": {
"name": "alexindigo",
diff --git a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json
index 8f4c392662..b666b72a2a 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/node_modules/mime/package.json
@@ -35,7 +35,7 @@
"shasum": "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10",
"tarball": "http://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
},
- "_from": "mime@>=1.2.11-0 <1.3.0-0",
+ "_from": "mime@>=1.2.11 <1.3.0",
"_npmVersion": "1.3.6",
"_npmUser": {
"name": "broofa",
@@ -54,5 +54,6 @@
"directories": {},
"_shasum": "58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10",
"_resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
- "homepage": "https://github.com/broofa/node-mime"
+ "homepage": "https://github.com/broofa/node-mime",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/form-data/package.json b/deps/npm/node_modules/request/node_modules/form-data/package.json
index 04d7ec69dd..7700d99929 100644
--- a/deps/npm/node_modules/request/node_modules/form-data/package.json
+++ b/deps/npm/node_modules/request/node_modules/form-data/package.json
@@ -42,7 +42,7 @@
"homepage": "https://github.com/felixge/node-form-data",
"_id": "form-data@0.1.4",
"_shasum": "91abd788aba9702b1aabfa8bc01031a2ac9e3b12",
- "_from": "form-data@>=0.1.0-0 <0.2.0-0",
+ "_from": "form-data@>=0.1.0 <0.2.0",
"_npmVersion": "1.4.14",
"_npmUser": {
"name": "alexindigo",
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json
index c95faa9e27..c7875b4cbb 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/boom/package.json
@@ -41,7 +41,7 @@
"shasum": "7a636e9ded4efcefb19cef4947a3c67dfaee911b",
"tarball": "http://registry.npmjs.org/boom/-/boom-0.4.2.tgz"
},
- "_from": "boom@>=0.4.0-0 <0.5.0-0",
+ "_from": "boom@>=0.4.0 <0.5.0",
"_npmVersion": "1.2.18",
"_npmUser": {
"name": "hueniverse",
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json
index 3ed098bea5..1248613351 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json
@@ -45,7 +45,7 @@
"shasum": "ed91ff1f17ad13d3748288594f8a48a0d26f325c",
"tarball": "http://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
},
- "_from": "cryptiles@>=0.2.0-0 <0.3.0-0",
+ "_from": "cryptiles@>=0.2.0 <0.3.0",
"_npmVersion": "1.2.24",
"_npmUser": {
"name": "hueniverse",
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json
index bbc7031133..789de2adbf 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/hoek/package.json
@@ -43,7 +43,7 @@
"shasum": "3d322462badf07716ea7eb85baf88079cddce505",
"tarball": "http://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
},
- "_from": "hoek@>=0.9.0-0 <0.10.0-0",
+ "_from": "hoek@>=0.9.0 <0.10.0",
"_npmVersion": "1.2.18",
"_npmUser": {
"name": "hueniverse",
diff --git a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json
index ff73fbc12a..0656c84e19 100755
--- a/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json
+++ b/deps/npm/node_modules/request/node_modules/hawk/node_modules/sntp/package.json
@@ -42,7 +42,7 @@
"shasum": "fb885f18b0f3aad189f824862536bceeec750900",
"tarball": "http://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz"
},
- "_from": "sntp@>=0.2.0-0 <0.3.0-0",
+ "_from": "sntp@>=0.2.0 <0.3.0",
"_npmVersion": "1.2.18",
"_npmUser": {
"name": "hueniverse",
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
index ad8294e904..8c68193cd1 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json
@@ -53,8 +53,8 @@
],
"directories": {},
"_shasum": "559be18376d08a4ec4dbe80877d27818639b2df7",
- "_from": "asn1@0.1.11",
"_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
+ "_from": "asn1@0.1.11",
"bugs": {
"url": "https://github.com/mcavage/node-asn1/issues"
},
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json
index d55a6bd65a..d06cbfd734 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json
@@ -13,7 +13,6 @@
"engines": {
"node": ">=0.6"
},
- "readme": "# node-assert-plus\n\nThis library is a super small wrapper over node's assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require('assert-plus');\n\n function fooAccount(options, callback) {\n\t assert.object(options, 'options');\n\t\tassert.number(options.id, 'options.id);\n\t\tassert.bool(options.isManager, 'options.isManager');\n\t\tassert.string(options.name, 'options.name');\n\t\tassert.arrayOfString(options.email, 'options.email');\n\t\tassert.func(callback, 'callback');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren't* part of node's core assert API are simply assumed to\ntake an argument, and then a string 'name' that's not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object.<anonymous> (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, 'foo');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, 'foo');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, 'foo');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don't want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee <https://github.com/mcavage/node-assert-plus/issues>.\n",
"_id": "assert-plus@0.1.2",
"dist": {
"shasum": "d93ffdbb67ac5507779be316a7d65146417beef8",
@@ -32,6 +31,8 @@
],
"directories": {},
"_shasum": "d93ffdbb67ac5507779be316a7d65146417beef8",
+ "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz",
"_from": "assert-plus@0.1.2",
- "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
+ "readme": "ERROR: No README data found!",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json
index 474e54daf2..5840d050c3 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json
@@ -29,7 +29,8 @@
],
"directories": {},
"_shasum": "fe8091d468a373a0b0c9ff8bbfb3425c00973a1d",
- "_from": "ctype@0.5.2",
"_resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz",
- "readme": "ERROR: No README data found!"
+ "_from": "ctype@0.5.2",
+ "readme": "ERROR: No README data found!",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/http-signature/package.json b/deps/npm/node_modules/request/node_modules/http-signature/package.json
index 270f9891bf..c6bfef9750 100644
--- a/deps/npm/node_modules/request/node_modules/http-signature/package.json
+++ b/deps/npm/node_modules/request/node_modules/http-signature/package.json
@@ -32,7 +32,7 @@
"shasum": "1494e4f5000a83c0f11bcc12d6007c530cb99582",
"tarball": "http://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz"
},
- "_from": "http-signature@>=0.10.0-0 <0.11.0-0",
+ "_from": "http-signature@>=0.10.0 <0.11.0",
"_npmVersion": "1.2.18",
"_npmUser": {
"name": "mcavage",
diff --git a/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json b/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json
index 2e415ac660..90549cb6a6 100644
--- a/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json
+++ b/deps/npm/node_modules/request/node_modules/json-stringify-safe/package.json
@@ -22,8 +22,6 @@
"url": "http://blog.izs.me"
},
"license": "BSD",
- "readmeFilename": "README.md",
- "readme": "# json-stringify-safe\n\nLike JSON.stringify, but doesn't throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require('json-stringify-safe');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n \"circularRef\": \"[Circular]\",\n \"list\": [\n \"[Circular]\",\n \"[Circular]\"\n ]\n}\n```\n\n## Details\n\n```\nstringify(obj, serializer, indent, decycler)\n```\n\nThe first three arguments are the same as to JSON.stringify. The last\nis an argument that's only used when the object has been seen already.\n\nThe default `decycler` function returns the string `'[Circular]'`.\nIf, for example, you pass in `function(k,v){}` (return nothing) then it\nwill prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`,\nthen cyclical objects will always be represented as `{\"foo\":\"bar\"}` in\nthe result.\n\n```\nstringify.getSerialize(serializer, decycler)\n```\n\nReturns a serializer that can be used elsewhere. This is the actual\nfunction that's passed to JSON.stringify.\n",
"bugs": {
"url": "https://github.com/isaacs/json-stringify-safe/issues"
},
@@ -32,7 +30,7 @@
"shasum": "4c1f228b5050837eba9d21f50c2e6e320624566e",
"tarball": "http://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
},
- "_from": "json-stringify-safe@>=5.0.0-0 <5.1.0-0",
+ "_from": "json-stringify-safe@>=5.0.0 <5.1.0",
"_npmVersion": "1.3.6",
"_npmUser": {
"name": "isaacs",
@@ -47,5 +45,6 @@
"directories": {},
"_shasum": "4c1f228b5050837eba9d21f50c2e6e320624566e",
"_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz",
+ "readme": "ERROR: No README data found!",
"homepage": "https://github.com/isaacs/json-stringify-safe"
}
diff --git a/deps/npm/node_modules/request/node_modules/mime-types/package.json b/deps/npm/node_modules/request/node_modules/mime-types/package.json
index 9d59fb8d9d..67432028b8 100644
--- a/deps/npm/node_modules/request/node_modules/mime-types/package.json
+++ b/deps/npm/node_modules/request/node_modules/mime-types/package.json
@@ -39,7 +39,7 @@
"homepage": "https://github.com/expressjs/mime-types",
"_id": "mime-types@1.0.2",
"_shasum": "995ae1392ab8affcbfcb2641dd054e943c0d5dce",
- "_from": "mime-types@>=1.0.1-0 <1.1.0-0",
+ "_from": "mime-types@>=1.0.1 <1.1.0",
"_npmVersion": "1.4.21",
"_npmUser": {
"name": "dougwilson",
diff --git a/deps/npm/node_modules/request/node_modules/node-uuid/package.json b/deps/npm/node_modules/request/node_modules/node-uuid/package.json
index 491d93ad4a..bead110cc3 100644
--- a/deps/npm/node_modules/request/node_modules/node-uuid/package.json
+++ b/deps/npm/node_modules/request/node_modules/node-uuid/package.json
@@ -34,7 +34,7 @@
"shasum": "39aef510e5889a3dca9c895b506c73aae1bac048",
"tarball": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
},
- "_from": "node-uuid@>=1.4.0-0 <1.5.0-0",
+ "_from": "node-uuid@>=1.4.0 <1.5.0",
"_npmVersion": "1.3.6",
"_npmUser": {
"name": "broofa",
@@ -49,5 +49,6 @@
"directories": {},
"_shasum": "39aef510e5889a3dca9c895b506c73aae1bac048",
"_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz",
- "homepage": "https://github.com/broofa/node-uuid"
+ "homepage": "https://github.com/broofa/node-uuid",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/oauth-sign/package.json b/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
index 16a7645861..d8765b6e9f 100644
--- a/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
+++ b/deps/npm/node_modules/request/node_modules/oauth-sign/package.json
@@ -30,7 +30,7 @@
"shasum": "f22956f31ea7151a821e5f2fb32c113cad8b9f69",
"tarball": "http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz"
},
- "_from": "oauth-sign@>=0.4.0-0 <0.5.0-0",
+ "_from": "oauth-sign@>=0.4.0 <0.5.0",
"_npmVersion": "1.3.2",
"_npmUser": {
"name": "mikeal",
diff --git a/deps/npm/node_modules/request/node_modules/qs/.jshintrc b/deps/npm/node_modules/request/node_modules/qs/.jshintrc
new file mode 100644
index 0000000000..997b3f7d45
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/qs/.jshintrc
@@ -0,0 +1,10 @@
+{
+ "node": true,
+
+ "curly": true,
+ "latedef": true,
+ "quotmark": true,
+ "undef": true,
+ "unused": true,
+ "trailing": true
+}
diff --git a/deps/npm/node_modules/request/node_modules/qs/package.json b/deps/npm/node_modules/request/node_modules/qs/package.json
index 51be52c711..d65387274f 100755
--- a/deps/npm/node_modules/request/node_modules/qs/package.json
+++ b/deps/npm/node_modules/request/node_modules/qs/package.json
@@ -35,7 +35,7 @@
},
"_id": "qs@1.2.2",
"_shasum": "19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88",
- "_from": "qs@>=1.2.0-0 <1.3.0-0",
+ "_from": "qs@>=1.2.0 <1.3.0",
"_npmVersion": "1.4.21",
"_npmUser": {
"name": "hueniverse",
diff --git a/deps/npm/node_modules/request/node_modules/stringstream/package.json b/deps/npm/node_modules/request/node_modules/stringstream/package.json
index 980932c18b..b71cf2859c 100644
--- a/deps/npm/node_modules/request/node_modules/stringstream/package.json
+++ b/deps/npm/node_modules/request/node_modules/stringstream/package.json
@@ -39,10 +39,11 @@
],
"directories": {},
"_shasum": "0f0e3423f942960b5692ac324a57dd093bc41a92",
- "_from": "stringstream@>=0.0.4-0 <0.1.0-0",
"_resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz",
+ "_from": "stringstream@>=0.0.4 <0.1.0",
"bugs": {
"url": "https://github.com/mhart/StringStream/issues"
},
- "homepage": "https://github.com/mhart/StringStream"
+ "homepage": "https://github.com/mhart/StringStream",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt
index 97067e5463..a41e0a7ef9 100644
--- a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt
@@ -1,4 +1,4 @@
-Copyright Mathias Bynens <http://mathiasbynens.be/>
+Copyright Mathias Bynens <https://mathiasbynens.be/>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/README.md b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/README.md
index 577f2c7a1a..831e6379b5 100644
--- a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/README.md
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/README.md
@@ -124,7 +124,7 @@ punycode.toASCII('джумла@джpумлатест.bрфa');
#### `punycode.ucs2.decode(string)`
-Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](http://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.
+Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.
```js
punycode.ucs2.decode('abc');
@@ -163,7 +163,7 @@ Feel free to fork if you see possible improvements!
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|---|
-| [Mathias Bynens](http://mathiasbynens.be/) |
+| [Mathias Bynens](https://mathiasbynens.be/) |
## Contributors
@@ -173,4 +173,4 @@ Feel free to fork if you see possible improvements!
## License
-Punycode.js is available under the [MIT](http://mths.be/mit) license.
+Punycode.js is available under the [MIT](https://mths.be/mit) license.
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json
index ab13fc836f..4f62713818 100644
--- a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json
@@ -1,8 +1,8 @@
{
"name": "punycode",
- "version": "1.3.1",
+ "version": "1.3.2",
"description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.",
- "homepage": "http://mths.be/punycode",
+ "homepage": "https://mths.be/punycode",
"main": "punycode.js",
"keywords": [
"punycode",
@@ -13,20 +13,15 @@
"url",
"domain"
],
- "licenses": [
- {
- "type": "MIT",
- "url": "http://mths.be/mit"
- }
- ],
+ "license": "MIT",
"author": {
"name": "Mathias Bynens",
- "url": "http://mathiasbynens.be/"
+ "url": "https://mathiasbynens.be/"
},
"contributors": [
{
"name": "Mathias Bynens",
- "url": "http://mathiasbynens.be/"
+ "url": "https://mathiasbynens.be/"
},
{
"name": "John-David Dalton",
@@ -44,9 +39,6 @@
"LICENSE-MIT.txt",
"punycode.js"
],
- "directories": {
- "test": "tests"
- },
"scripts": {
"test": "node tests/tests.js"
},
@@ -60,10 +52,11 @@
"qunitjs": "~1.11.0",
"requirejs": "^2.1.14"
},
- "_id": "punycode@1.3.1",
- "_shasum": "710afe5123c20a1530b712e3e682b9118fe8058e",
+ "gitHead": "38c8d3131a82567bfef18da09f7f4db68c84f8a3",
+ "_id": "punycode@1.3.2",
+ "_shasum": "9653a036fb7c1ee42342f2325cceefea3926c48d",
"_from": "punycode@>=0.2.0",
- "_npmVersion": "1.4.9",
+ "_npmVersion": "1.4.28",
"_npmUser": {
"name": "mathias",
"email": "mathias@qiwi.be"
@@ -79,9 +72,10 @@
}
],
"dist": {
- "shasum": "710afe5123c20a1530b712e3e682b9118fe8058e",
- "tarball": "http://registry.npmjs.org/punycode/-/punycode-1.3.1.tgz"
+ "shasum": "9653a036fb7c1ee42342f2325cceefea3926c48d",
+ "tarball": "http://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz"
},
- "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.1.tgz",
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js
index 6ab1df3a03..ac68597383 100644
--- a/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js
+++ b/deps/npm/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js
@@ -1,4 +1,4 @@
-/*! http://mths.be/punycode v1.3.1 by @mathias */
+/*! https://mths.be/punycode v1.3.2 by @mathias */
;(function(root) {
/** Detect free variables */
@@ -103,7 +103,9 @@
result = parts[0] + '@';
string = parts[1];
}
- var labels = string.split(regexSeparators);
+ // Avoid `split(regex)` for IE8 compatibility. See #17.
+ string = string.replace(regexSeparators, '\x2E');
+ var labels = string.split('.');
var encoded = map(labels, fn).join('.');
return result + encoded;
}
@@ -115,7 +117,7 @@
* UCS-2 exposes as separate characters) into a single code point,
* matching UTF-16.
* @see `punycode.ucs2.encode`
- * @see <http://mathiasbynens.be/notes/javascript-encoding>
+ * @see <https://mathiasbynens.be/notes/javascript-encoding>
* @memberOf punycode.ucs2
* @name decode
* @param {String} string The Unicode input string (UCS-2).
@@ -484,11 +486,11 @@
* @memberOf punycode
* @type String
*/
- 'version': '1.3.1',
+ 'version': '1.3.2',
/**
* An object of methods to convert from JavaScript's internal character
* representation (UCS-2) to Unicode code points, and back.
- * @see <http://mathiasbynens.be/notes/javascript-encoding>
+ * @see <https://mathiasbynens.be/notes/javascript-encoding>
* @memberOf punycode
* @type Object
*/
diff --git a/deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc b/deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc
new file mode 100644
index 0000000000..4c1c8d4972
--- /dev/null
+++ b/deps/npm/node_modules/request/node_modules/tunnel-agent/.jshintrc
@@ -0,0 +1,5 @@
+{
+ "node": true,
+ "asi": true,
+ "laxcomma": true
+}
diff --git a/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json b/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json
index 12e2407c09..5b1ebba150 100644
--- a/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json
+++ b/deps/npm/node_modules/request/node_modules/tunnel-agent/package.json
@@ -26,7 +26,7 @@
"shasum": "b1184e312ffbcf70b3b4c78e8c219de7ebb1c550",
"tarball": "http://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz"
},
- "_from": "tunnel-agent@>=0.4.0-0 <0.5.0-0",
+ "_from": "tunnel-agent@>=0.4.0 <0.5.0",
"_npmVersion": "1.3.21",
"_npmUser": {
"name": "mikeal",
@@ -41,5 +41,6 @@
"directories": {},
"_shasum": "b1184e312ffbcf70b3b4c78e8c219de7ebb1c550",
"_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz",
- "readme": "ERROR: No README data found!"
+ "readme": "ERROR: No README data found!",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/request/package.json b/deps/npm/node_modules/request/package.json
index d2db65f595..d68d512fd1 100755
--- a/deps/npm/node_modules/request/package.json
+++ b/deps/npm/node_modules/request/package.json
@@ -7,7 +7,7 @@
"util",
"utility"
],
- "version": "2.42.0",
+ "version": "2.46.0",
"author": {
"name": "Mikeal Rogers",
"email": "mikeal.rogers@gmail.com"
@@ -20,30 +20,21 @@
"url": "http://github.com/mikeal/request/issues"
},
"license": "Apache-2.0",
- "engines": [
- "node >= 0.8.0"
- ],
+ "engines": {
+ "node": ">=0.8.0"
+ },
"main": "index.js",
"dependencies": {
"bl": "~0.9.0",
"caseless": "~0.6.0",
"forever-agent": "~0.5.0",
- "qs": "~1.2.0",
+ "form-data": "~0.1.0",
"json-stringify-safe": "~5.0.0",
"mime-types": "~1.0.1",
"node-uuid": "~1.4.0",
+ "qs": "~1.2.0",
"tunnel-agent": "~0.4.0",
"tough-cookie": ">=0.12.0",
- "form-data": "~0.1.0",
- "http-signature": "~0.10.0",
- "oauth-sign": "~0.4.0",
- "hawk": "1.1.1",
- "aws-sign2": "~0.5.0",
- "stringstream": "~0.0.4"
- },
- "optionalDependencies": {
- "tough-cookie": ">=0.12.0",
- "form-data": "~0.1.0",
"http-signature": "~0.10.0",
"oauth-sign": "~0.4.0",
"hawk": "1.1.1",
@@ -51,31 +42,40 @@
"stringstream": "~0.0.4"
},
"scripts": {
- "test": "node tests/run.js"
+ "test": "npm run lint && node node_modules/.bin/taper tests/test-*.js",
+ "lint": "node node_modules/.bin/eslint lib/ *.js tests/ && echo Lint passed."
},
"devDependencies": {
- "rimraf": "~2.2.8"
+ "eslint": "0.5.1",
+ "rimraf": "~2.2.8",
+ "tape": "~3.0.0",
+ "taper": "~0.3.0"
},
+ "gitHead": "7cdd75ec184868bba3be88a780bfb6e10fe33be4",
"homepage": "https://github.com/mikeal/request",
- "_id": "request@2.42.0",
- "_shasum": "572bd0148938564040ac7ab148b96423a063304a",
- "_from": "request@>=2.42.0-0 <3.0.0-0",
- "_npmVersion": "1.4.9",
+ "_id": "request@2.46.0",
+ "_shasum": "359195d52eaf720bc69742579d04ad6d265a8274",
+ "_from": "request@>=2.46.0 <2.47.0",
+ "_npmVersion": "1.4.14",
"_npmUser": {
- "name": "mikeal",
- "email": "mikeal.rogers@gmail.com"
+ "name": "nylen",
+ "email": "jnylen@gmail.com"
},
"maintainers": [
{
"name": "mikeal",
"email": "mikeal.rogers@gmail.com"
+ },
+ {
+ "name": "nylen",
+ "email": "jnylen@gmail.com"
}
],
"dist": {
- "shasum": "572bd0148938564040ac7ab148b96423a063304a",
- "tarball": "http://registry.npmjs.org/request/-/request-2.42.0.tgz"
+ "shasum": "359195d52eaf720bc69742579d04ad6d265a8274",
+ "tarball": "http://registry.npmjs.org/request/-/request-2.46.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz",
+ "_resolved": "https://registry.npmjs.org/request/-/request-2.46.0.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/request/release.sh b/deps/npm/node_modules/request/release.sh
new file mode 100755
index 0000000000..05e7767fc1
--- /dev/null
+++ b/deps/npm/node_modules/request/release.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+npm version minor && npm publish && npm version patch && git push --tags && git push origin master
diff --git a/deps/npm/node_modules/request/request.js b/deps/npm/node_modules/request/request.js
index e528dd5ff4..466d916558 100644
--- a/deps/npm/node_modules/request/request.js
+++ b/deps/npm/node_modules/request/request.js
@@ -1,47 +1,41 @@
-var optional = require('./lib/optional')
- , http = require('http')
- , https = optional('https')
- , tls = optional('tls')
+'use strict'
+
+var http = require('http')
+ , https = require('https')
, url = require('url')
, util = require('util')
, stream = require('stream')
, qs = require('qs')
, querystring = require('querystring')
- , crypto = require('crypto')
, zlib = require('zlib')
-
+ , helpers = require('./lib/helpers')
, bl = require('bl')
- , oauth = optional('oauth-sign')
- , hawk = optional('hawk')
- , aws = optional('aws-sign2')
- , httpSignature = optional('http-signature')
+ , oauth = require('oauth-sign')
+ , hawk = require('hawk')
+ , aws = require('aws-sign2')
+ , httpSignature = require('http-signature')
, uuid = require('node-uuid')
, mime = require('mime-types')
, tunnel = require('tunnel-agent')
- , _safeStringify = require('json-stringify-safe')
- , stringstream = optional('stringstream')
+ , stringstream = require('stringstream')
, caseless = require('caseless')
-
, ForeverAgent = require('forever-agent')
- , FormData = optional('form-data')
-
+ , FormData = require('form-data')
, cookies = require('./lib/cookies')
- , globalCookieJar = cookies.jar()
-
, copy = require('./lib/copy')
, debug = require('./lib/debug')
, net = require('net')
- ;
-function safeStringify (obj) {
- var ret
- try { ret = JSON.stringify(obj) }
- catch (e) { ret = _safeStringify(obj) }
- return ret
-}
+var safeStringify = helpers.safeStringify
+ , md5 = helpers.md5
+ , isReadStream = helpers.isReadStream
+ , toBase64 = helpers.toBase64
+ , defer = helpers.defer
+ , globalCookieJar = cookies.jar()
+
var globalPool = {}
-var isUrl = /^https?:|^unix:/
+ , isUrl = /^https?:/
var defaultProxyHeaderWhiteList = [
'accept',
@@ -70,148 +64,272 @@ var defaultProxyHeaderWhiteList = [
'via'
]
-function isReadStream (rs) {
- return rs.readable && rs.path && rs.mode;
+function filterForNonReserved(reserved, options) {
+ // Filter out properties that are not reserved.
+ // Reserved values are passed in at call site.
+
+ var object = {}
+ for (var i in options) {
+ var notReserved = (reserved.indexOf(i) === -1)
+ if (notReserved) {
+ object[i] = options[i]
+ }
+ }
+ return object
+}
+
+function filterOutReservedFunctions(reserved, options) {
+ // Filter out properties that are functions and are reserved.
+ // Reserved values are passed in at call site.
+
+ var object = {}
+ for (var i in options) {
+ var isReserved = !(reserved.indexOf(i) === -1)
+ var isFunction = (typeof options[i] === 'function')
+ if (!(isReserved && isFunction)) {
+ object[i] = options[i]
+ }
+ }
+ return object
+
+}
+
+function constructProxyHost(uriObject) {
+ var port = uriObject.portA
+ , protocol = uriObject.protocol
+ , proxyHost = uriObject.hostname + ':'
+
+ if (port) {
+ proxyHost += port
+ } else if (protocol === 'https:') {
+ proxyHost += '443'
+ } else {
+ proxyHost += '80'
+ }
+
+ return proxyHost
+}
+
+function constructProxyHeaderWhiteList(headers, proxyHeaderWhiteList) {
+ return Object.keys(headers)
+ .filter(function (header) {
+ return proxyHeaderWhiteList.indexOf(header.toLowerCase()) !== -1
+ })
+ .reduce(function (set, header) {
+ set[header] = headers[header]
+ return set
+ }, {})
+}
+
+function construcTunnelOptions(request) {
+ var proxy = request.proxy
+ var proxyHeaders = request.proxyHeaders
+ var proxyAuth
+
+ if (proxy.auth) {
+ proxyAuth = proxy.auth
+ }
+
+ if (!proxy.auth && request.proxyAuthorization) {
+ proxyHeaders['Proxy-Authorization'] = request.proxyAuthorization
+ }
+
+ var tunnelOptions = {
+ proxy: {
+ host: proxy.hostname,
+ port: +proxy.port,
+ proxyAuth: proxyAuth,
+ headers: proxyHeaders
+ },
+ rejectUnauthorized: request.rejectUnauthorized,
+ headers: request.headers,
+ ca: request.ca,
+ cert: request.cert,
+ key: request.key
+ }
+
+ return tunnelOptions
}
-function toBase64 (str) {
- return (new Buffer(str || "", "ascii")).toString("base64")
+function constructTunnelFnName(uri, proxy) {
+ var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http')
+ var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http')
+ return [uriProtocol, proxyProtocol].join('Over')
}
-function md5 (str) {
- return crypto.createHash('md5').update(str).digest('hex')
+function getTunnelFn(request) {
+ var uri = request.uri
+ var proxy = request.proxy
+ var tunnelFnName = constructTunnelFnName(uri, proxy)
+ return tunnel[tunnelFnName]
+}
+
+// Decide the proper request proxy to use based on the request URI object and the
+// environmental variables (NO_PROXY, HTTP_PROXY, etc.)
+function getProxyFromURI(uri) {
+ // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html)
+ var noProxy = process.env.NO_PROXY || process.env.no_proxy || null
+
+ // easy case first - if NO_PROXY is '*'
+ if (noProxy === '*') {
+ return null
+ }
+
+ // otherwise, parse the noProxy value to see if it applies to the URL
+ if (noProxy !== null) {
+ var noProxyItem, hostname, port, noProxyItemParts, noProxyHost, noProxyPort, noProxyList
+
+ // canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
+ hostname = uri.hostname.replace(/^\.*/, '.').toLowerCase()
+ noProxyList = noProxy.split(',')
+
+ for (var i = 0, len = noProxyList.length; i < len; i++) {
+ noProxyItem = noProxyList[i].trim().toLowerCase()
+
+ // no_proxy can be granular at the port level, which complicates things a bit.
+ if (noProxyItem.indexOf(':') > -1) {
+ noProxyItemParts = noProxyItem.split(':', 2)
+ noProxyHost = noProxyItemParts[0].replace(/^\.*/, '.')
+ noProxyPort = noProxyItemParts[1]
+ port = uri.port || (uri.protocol === 'https:' ? '443' : '80')
+
+ // we've found a match - ports are same and host ends with no_proxy entry.
+ if (port === noProxyPort && hostname.indexOf(noProxyHost) === hostname.length - noProxyHost.length) {
+ return null
+ }
+ } else {
+ noProxyItem = noProxyItem.replace(/^\.*/, '.')
+ if (hostname.indexOf(noProxyItem) === hostname.length - noProxyItem.length) {
+ return null
+ }
+ }
+ }
+ }
+
+ // check for HTTP(S)_PROXY environment variables
+ if (uri.protocol === 'http:') {
+ return process.env.HTTP_PROXY || process.env.http_proxy || null
+ } else if (uri.protocol === 'https:') {
+ return process.env.HTTPS_PROXY || process.env.https_proxy || process.env.HTTP_PROXY || process.env.http_proxy || null
+ }
+
+ // return null if all else fails (What uri protocol are you using then?)
+ return null
+}
+
+// Function for properly handling a connection error
+function connectionErrorHandler(error) {
+ var socket = this
+ if (socket.res) {
+ if (socket.res.request) {
+ socket.res.request.emit('error', error)
+ } else {
+ socket.res.emit('error', error)
+ }
+ } else {
+ socket._httpMessage.emit('error', error)
+ }
}
// Return a simpler request object to allow serialization
function requestToJSON() {
+ var self = this
return {
- uri: this.uri,
- method: this.method,
- headers: this.headers
+ uri: self.uri,
+ method: self.method,
+ headers: self.headers
}
}
// Return a simpler response object to allow serialization
function responseToJSON() {
+ var self = this
return {
- statusCode: this.statusCode,
- body: this.body,
- headers: this.headers,
- request: requestToJSON.call(this.request)
+ statusCode: self.statusCode,
+ body: self.body,
+ headers: self.headers,
+ request: requestToJSON.call(self.request)
}
}
function Request (options) {
- stream.Stream.call(this)
- this.readable = true
- this.writable = true
+ // if tunnel property of options was not given default to false
+ // if given the method property in options, set property explicitMethod to true
- if (typeof options === 'string') {
- options = {uri:options}
- }
+ // extend the Request instance with any non-reserved properties
+ // remove any reserved functions from the options object
+ // set Request instance to be readable and writable
+ // call init
+ var self = this
+ stream.Stream.call(self)
var reserved = Object.keys(Request.prototype)
- for (var i in options) {
- if (reserved.indexOf(i) === -1) {
- this[i] = options[i]
- } else {
- if (typeof options[i] === 'function') {
- delete options[i]
- }
- }
- }
+ var nonReserved = filterForNonReserved(reserved, options)
+ stream.Stream.call(self)
+ util._extend(self, nonReserved)
+ options = filterOutReservedFunctions(reserved, options)
+
+ self.readable = true
+ self.writable = true
+ if (typeof options.tunnel === 'undefined') {
+ options.tunnel = false
+ }
if (options.method) {
- this.explicitMethod = true
+ self.explicitMethod = true
}
-
- // Assume that we're not going to tunnel unless we need to
- if (typeof options.tunnel === 'undefined') options.tunnel = false
-
- this.init(options)
+ self.canTunnel = options.tunnel !== false && tunnel
+ self.init(options)
}
-util.inherits(Request, stream.Stream)
+util.inherits(Request, stream.Stream)
-// Set up the tunneling agent if necessary
Request.prototype.setupTunnel = function () {
- var self = this
- if (typeof self.proxy == 'string') self.proxy = url.parse(self.proxy)
+ // Set up the tunneling agent if necessary
+ // Only send the proxy whitelisted header names.
+ // Turn on tunneling for the rest of request.
- if (!self.proxy) return false
+ var self = this
- // Don't need to use a tunneling proxy
- if (!self.tunnel && self.uri.protocol !== 'https:')
- return
+ if (typeof self.proxy === 'string') {
+ self.proxy = url.parse(self.proxy)
+ }
- // do the HTTP CONNECT dance using koichik/node-tunnel
+ if (!self.proxy) {
+ return false
+ }
- // The host to tell the proxy to CONNECT to
- var proxyHost = self.uri.hostname + ':'
- if (self.uri.port)
- proxyHost += self.uri.port
- else if (self.uri.protocol === 'https:')
- proxyHost += '443'
- else
- proxyHost += '80'
+ if (!self.tunnel && self.uri.protocol !== 'https:') {
+ return false
+ }
- if (!self.proxyHeaderWhiteList)
+ if (!self.proxyHeaderWhiteList) {
self.proxyHeaderWhiteList = defaultProxyHeaderWhiteList
+ }
- // Only send the proxy the whitelisted header names.
- var proxyHeaders = Object.keys(self.headers).filter(function (h) {
- return self.proxyHeaderWhiteList.indexOf(h.toLowerCase()) !== -1
- }).reduce(function (set, h) {
- set[h] = self.headers[h]
- return set
- }, {})
-
- proxyHeaders.host = proxyHost
-
- var tunnelFnName =
- (self.uri.protocol === 'https:' ? 'https' : 'http') +
- 'Over' +
- (self.proxy.protocol === 'https:' ? 'Https' : 'Http')
+ var proxyHost = constructProxyHost(self.uri)
+ self.proxyHeaders = constructProxyHeaderWhiteList(self.headers, self.proxyHeaderWhiteList)
+ self.proxyHeaders.host = proxyHost
- var tunnelFn = tunnel[tunnelFnName]
-
- var proxyAuth
- if (self.proxy.auth)
- proxyAuth = self.proxy.auth
- else if (self.proxyAuthorization)
- proxyHeaders['Proxy-Authorization'] = self.proxyAuthorization
-
- var tunnelOptions = { proxy: { host: self.proxy.hostname
- , port: +self.proxy.port
- , proxyAuth: proxyAuth
- , headers: proxyHeaders }
- , rejectUnauthorized: self.rejectUnauthorized
- , headers: self.headers
- , ca: self.ca
- , cert: self.cert
- , key: self.key}
+ var tunnelFn = getTunnelFn(self)
+ var tunnelOptions = construcTunnelOptions(self)
self.agent = tunnelFn(tunnelOptions)
-
- // At this point, we know that the proxy will support tunneling
- // (or fail miserably), so we're going to tunnel all proxied requests
- // from here on out.
self.tunnel = true
-
return true
}
-
-
-
Request.prototype.init = function (options) {
// init() contains all the code to setup the request object.
// the actual outgoing request is not started until start() is called
// this function is called from both the constructor and on redirect.
var self = this
- if (!options) options = {}
+ if (!options) {
+ options = {}
+ }
+ self.headers = self.headers ? copy(self.headers) : {}
- caseless.httpify(self, self.headers || {})
+ caseless.httpify(self, self.headers)
// Never send proxy-auth to the endpoint!
if (self.hasHeader('proxy-authorization')) {
@@ -219,11 +337,19 @@ Request.prototype.init = function (options) {
self.removeHeader('proxy-authorization')
}
- if (!self.method) self.method = options.method || 'GET'
+ if (!self.method) {
+ self.method = options.method || 'GET'
+ }
self.localAddress = options.localAddress
+ if (!self.qsLib) {
+ self.qsLib = (options.useQuerystring ? querystring : qs)
+ }
+
debug(options)
- if (!self.pool && self.pool !== false) self.pool = globalPool
+ if (!self.pool && self.pool !== false) {
+ self.pool = globalPool
+ }
self.dests = self.dests || []
self.__isRequestRequest = true
@@ -231,7 +357,9 @@ Request.prototype.init = function (options) {
if (!self._callback && self.callback) {
self._callback = self.callback
self.callback = function () {
- if (self._callbackCalled) return // Print a warning maybe?
+ if (self._callbackCalled) {
+ return // Print a warning maybe?
+ }
self._callbackCalled = true
self._callback.apply(self, arguments)
}
@@ -239,17 +367,40 @@ Request.prototype.init = function (options) {
self.on('complete', self.callback.bind(self, null))
}
- if (self.url && !self.uri) {
- // People use this property instead all the time so why not just support it.
+ // People use this property instead all the time, so support it
+ if (!self.uri && self.url) {
self.uri = self.url
delete self.url
}
+ // A URI is needed by this point, throw if we haven't been able to get one
if (!self.uri) {
- // this will throw if unhandled but is handleable when in a redirect
- return self.emit('error', new Error("options.uri is a required argument"))
- } else {
- if (typeof self.uri == "string") self.uri = url.parse(self.uri)
+ return self.emit('error', new Error('options.uri is a required argument'))
+ }
+
+ // If a string URI/URL was given, parse it into a URL object
+ if(typeof self.uri === 'string') {
+ self.uri = url.parse(self.uri)
+ }
+
+ // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme
+ if (self.uri.protocol === 'unix:') {
+ return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`'))
+ }
+
+ // Support Unix Sockets
+ if(self.uri.host === 'unix') {
+ // Get the socket & request paths from the URL
+ var unixParts = self.uri.path.split(':')
+ , host = unixParts[0]
+ , path = unixParts[1]
+ // Apply unix properties to request
+ self.socketPath = host
+ self.uri.pathname = path
+ self.uri.path = path
+ self.uri.host = host
+ self.uri.hostname = host
+ self.uri.isUnix = true
}
if (self.strictSSL === false) {
@@ -257,13 +408,7 @@ Request.prototype.init = function (options) {
}
if(!self.hasOwnProperty('proxy')) {
- // check for HTTP(S)_PROXY environment variables
- if(self.uri.protocol == "http:") {
- self.proxy = process.env.HTTP_PROXY || process.env.http_proxy || null;
- } else if(self.uri.protocol == "https:") {
- self.proxy = process.env.HTTPS_PROXY || process.env.https_proxy ||
- process.env.HTTP_PROXY || process.env.http_proxy || null;
- }
+ self.proxy = getProxyFromURI(self.uri)
}
// Pass in `tunnel:true` to *always* tunnel through proxies
@@ -274,8 +419,8 @@ Request.prototype.init = function (options) {
if (!self.uri.pathname) {self.uri.pathname = '/'}
- if (!self.uri.host && !self.protocol=='unix:') {
- // Invalid URI: it may generate lot of bad errors, like "TypeError: Cannot call method 'indexOf' of undefined" in CookieJar
+ if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) {
+ // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar
// Detect and reject it as soon as possible
var faultyUri = url.format(self.uri)
var message = 'Invalid URI "' + faultyUri + '"'
@@ -285,27 +430,29 @@ Request.prototype.init = function (options) {
// they should be warned that it can be caused by a redirection (can save some hair)
message += '. This can be caused by a crappy redirection.'
}
- self.emit('error', new Error(message))
- return // This error was fatal
+ // This error was fatal
+ return self.emit('error', new Error(message))
}
self._redirectsFollowed = self._redirectsFollowed || 0
self.maxRedirects = (self.maxRedirects !== undefined) ? self.maxRedirects : 10
self.allowRedirect = (typeof self.followRedirect === 'function') ? self.followRedirect : function(response) {
- return true;
- };
- self.followRedirect = (self.followRedirect !== undefined) ? !!self.followRedirect : true
+ return true
+ }
+ self.followRedirects = (self.followRedirect !== undefined) ? !!self.followRedirect : true
self.followAllRedirects = (self.followAllRedirects !== undefined) ? self.followAllRedirects : false
- if (self.followRedirect || self.followAllRedirects)
+ if (self.followRedirects || self.followAllRedirects) {
self.redirects = self.redirects || []
+ }
self.setHost = false
if (!self.hasHeader('host')) {
self.setHeader('host', self.uri.hostname)
if (self.uri.port) {
if ( !(self.uri.port === 80 && self.uri.protocol === 'http:') &&
- !(self.uri.port === 443 && self.uri.protocol === 'https:') )
- self.setHeader('host', self.getHeader('host') + (':'+self.uri.port) )
+ !(self.uri.port === 443 && self.uri.protocol === 'https:') ) {
+ self.setHeader('host', self.getHeader('host') + (':' + self.uri.port) )
+ }
}
self.setHost = true
}
@@ -313,8 +460,8 @@ Request.prototype.init = function (options) {
self.jar(self._jar || options.jar)
if (!self.uri.port) {
- if (self.uri.protocol == 'http:') {self.uri.port = 80}
- else if (self.uri.protocol == 'https:') {self.uri.port = 443}
+ if (self.uri.protocol === 'http:') {self.uri.port = 80}
+ else if (self.uri.protocol === 'https:') {self.uri.port = 443}
}
if (self.proxy && !self.tunnel) {
@@ -325,317 +472,253 @@ Request.prototype.init = function (options) {
self.host = self.uri.hostname
}
- self.clientErrorHandler = function (error) {
- if (self._aborted) return
- if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET'
- && self.agent.addRequestNoreuse) {
- self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
- self.start()
- self.req.end()
- return
- }
- if (self.timeout && self.timeoutTimer) {
- clearTimeout(self.timeoutTimer)
- self.timeoutTimer = null
- }
- self.emit('error', error)
+ if (options.form) {
+ self.form(options.form)
}
- self._parserErrorHandler = function (error) {
- if (this.res) {
- if (this.res.request) {
- this.res.request.emit('error', error)
+ if (options.formData) {
+ var formData = options.formData
+ var requestForm = self.form()
+ var appendFormValue = function (key, value) {
+ if (value.hasOwnProperty('value') && value.hasOwnProperty('options')) {
+ requestForm.append(key, value.value, value.options)
} else {
- this.res.emit('error', error)
+ requestForm.append(key, value)
+ }
+ }
+ for (var formKey in formData) {
+ if (formData.hasOwnProperty(formKey)) {
+ var formValue = formData[formKey]
+ if (formValue instanceof Array) {
+ for (var j = 0; j < formValue.length; j++) {
+ appendFormValue(formKey, formValue[j])
+ }
+ } else {
+ appendFormValue(formKey, formValue)
+ }
}
- } else {
- this._httpMessage.emit('error', error)
}
}
- self._buildRequest = function(){
- var self = this;
-
- if (options.form) {
- self.form(options.form)
- }
+ if (options.qs) {
+ self.qs(options.qs)
+ }
- if (options.qs) self.qs(options.qs)
+ if (self.uri.path) {
+ self.path = self.uri.path
+ } else {
+ self.path = self.uri.pathname + (self.uri.search || '')
+ }
- if (self.uri.path) {
- self.path = self.uri.path
- } else {
- self.path = self.uri.pathname + (self.uri.search || "")
- }
+ if (self.path.length === 0) {
+ self.path = '/'
+ }
- if (self.path.length === 0) self.path = '/'
+ // Auth must happen last in case signing is dependent on other headers
+ if (options.oauth) {
+ self.oauth(options.oauth)
+ }
+ if (options.aws) {
+ self.aws(options.aws)
+ }
- // Auth must happen last in case signing is dependent on other headers
- if (options.oauth) {
- self.oauth(options.oauth)
- }
+ if (options.hawk) {
+ self.hawk(options.hawk)
+ }
- if (options.aws) {
- self.aws(options.aws)
- }
+ if (options.httpSignature) {
+ self.httpSignature(options.httpSignature)
+ }
- if (options.hawk) {
- self.hawk(options.hawk)
+ if (options.auth) {
+ if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) {
+ options.auth.user = options.auth.username
}
-
- if (options.httpSignature) {
- self.httpSignature(options.httpSignature)
+ if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) {
+ options.auth.pass = options.auth.password
}
- if (options.auth) {
- if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) options.auth.user = options.auth.username
- if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) options.auth.pass = options.auth.password
+ self.auth(
+ options.auth.user,
+ options.auth.pass,
+ options.auth.sendImmediately,
+ options.auth.bearer
+ )
+ }
- self.auth(
- options.auth.user,
- options.auth.pass,
- options.auth.sendImmediately,
- options.auth.bearer
- )
- }
+ if (self.gzip && !self.hasHeader('accept-encoding')) {
+ self.setHeader('accept-encoding', 'gzip')
+ }
- if (self.gzip && !self.hasHeader('accept-encoding')) {
- self.setHeader('accept-encoding', 'gzip')
- }
+ if (self.uri.auth && !self.hasHeader('authorization')) {
+ var uriAuthPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) })
+ self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)
+ }
- if (self.uri.auth && !self.hasHeader('authorization')) {
- var authPieces = self.uri.auth.split(':').map(function(item){ return querystring.unescape(item) })
- self.auth(authPieces[0], authPieces.slice(1).join(':'), true)
+ if (self.proxy && !self.tunnel) {
+ if (self.proxy.auth && !self.proxyAuthorization) {
+ var proxyAuthPieces = self.proxy.auth.split(':').map(function(item){
+ return querystring.unescape(item)
+ })
+ var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
+ self.proxyAuthorization = authHeader
}
-
- if (self.proxy && !self.tunnel) {
- if (self.proxy.auth && !self.proxyAuthorization) {
- var authPieces = self.proxy.auth.split(':').map(function(item){
- return querystring.unescape(item)
- })
- var authHeader = 'Basic ' + toBase64(authPieces.join(':'))
- self.proxyAuthorization = authHeader
- }
- if (self.proxyAuthorization)
- self.setHeader('proxy-authorization', self.proxyAuthorization)
+ if (self.proxyAuthorization) {
+ self.setHeader('proxy-authorization', self.proxyAuthorization)
}
+ }
- if (self.proxy && !self.tunnel) self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
+ if (self.proxy && !self.tunnel) {
+ self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
+ }
- if (options.json) {
- self.json(options.json)
- } else if (options.multipart) {
- self.boundary = uuid()
- self.multipart(options.multipart)
- }
+ if (options.json) {
+ self.json(options.json)
+ } else if (options.multipart) {
+ self.boundary = uuid()
+ self.multipart(options.multipart)
+ }
- if (self.body) {
- var length = 0
- if (!Buffer.isBuffer(self.body)) {
- if (Array.isArray(self.body)) {
- for (var i = 0; i < self.body.length; i++) {
- length += self.body[i].length
- }
- } else {
- self.body = new Buffer(self.body)
- length = self.body.length
+ if (self.body) {
+ var length = 0
+ if (!Buffer.isBuffer(self.body)) {
+ if (Array.isArray(self.body)) {
+ for (var i = 0; i < self.body.length; i++) {
+ length += self.body[i].length
}
} else {
+ self.body = new Buffer(self.body)
length = self.body.length
}
- if (length) {
- if (!self.hasHeader('content-length')) self.setHeader('content-length', length)
- } else {
- throw new Error('Argument error, options.body.')
+ } else {
+ length = self.body.length
+ }
+ if (length) {
+ if (!self.hasHeader('content-length')) {
+ self.setHeader('content-length', length)
}
+ } else {
+ throw new Error('Argument error, options.body.')
}
+ }
- var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
- , defaultModules = {'http:':http, 'https:':https, 'unix:':http}
- , httpModules = self.httpModules || {}
- ;
- self.httpModule = httpModules[protocol] || defaultModules[protocol]
+ var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
+ , defaultModules = {'http:':http, 'https:':https}
+ , httpModules = self.httpModules || {}
- if (!self.httpModule) return this.emit('error', new Error("Invalid protocol: " + protocol))
+ self.httpModule = httpModules[protocol] || defaultModules[protocol]
- if (options.ca) self.ca = options.ca
+ if (!self.httpModule) {
+ return self.emit('error', new Error('Invalid protocol: ' + protocol))
+ }
- if (!self.agent) {
- if (options.agentOptions) self.agentOptions = options.agentOptions
+ if (options.ca) {
+ self.ca = options.ca
+ }
- if (options.agentClass) {
- self.agentClass = options.agentClass
- } else if (options.forever) {
- self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
- } else {
- self.agentClass = self.httpModule.Agent
- }
+ if (!self.agent) {
+ if (options.agentOptions) {
+ self.agentOptions = options.agentOptions
}
- if (self.pool === false) {
- self.agent = false
+ if (options.agentClass) {
+ self.agentClass = options.agentClass
+ } else if (options.forever) {
+ self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
} else {
- self.agent = self.agent || self.getAgent()
- if (self.maxSockets) {
- // Don't use our pooling if node has the refactored client
- self.agent.maxSockets = self.maxSockets
- }
- if (self.pool.maxSockets) {
- // Don't use our pooling if node has the refactored client
- self.agent.maxSockets = self.pool.maxSockets
- }
+ self.agentClass = self.httpModule.Agent
}
+ }
- self.on('pipe', function (src) {
- if (self.ntick && self._started) throw new Error("You cannot pipe to this stream after the outbound request has started.")
- self.src = src
- if (isReadStream(src)) {
- if (!self.hasHeader('content-type')) self.setHeader('content-type', mime.lookup(src.path))
- } else {
- if (src.headers) {
- for (var i in src.headers) {
- if (!self.hasHeader(i)) {
- self.setHeader(i, src.headers[i])
- }
- }
- }
- if (self._json && !self.hasHeader('content-type'))
- self.setHeader('content-type', 'application/json')
- if (src.method && !self.explicitMethod) {
- self.method = src.method
- }
- }
-
- // self.on('pipe', function () {
- // console.error("You have already piped to this stream. Pipeing twice is likely to break the request.")
- // })
- })
-
- process.nextTick(function () {
- if (self._aborted) return
+ if (self.pool === false) {
+ self.agent = false
+ } else {
+ self.agent = self.agent || self.getAgent()
+ if (self.maxSockets) {
+ // Don't use our pooling if node has the refactored client
+ self.agent.maxSockets = self.maxSockets
+ }
+ if (self.pool.maxSockets) {
+ // Don't use our pooling if node has the refactored client
+ self.agent.maxSockets = self.pool.maxSockets
+ }
+ }
- var end = function () {
- if (self._form) {
- self._form.pipe(self)
- }
- if (self.body) {
- if (Array.isArray(self.body)) {
- self.body.forEach(function (part) {
- self.write(part)
- })
- } else {
- self.write(self.body)
- }
- self.end()
- } else if (self.requestBodyStream) {
- console.warn("options.requestBodyStream is deprecated, please pass the request object to stream.pipe.")
- self.requestBodyStream.pipe(self)
- } else if (!self.src) {
- if (self.method !== 'GET' && typeof self.method !== 'undefined') {
- self.setHeader('content-length', 0)
+ self.on('pipe', function (src) {
+ if (self.ntick && self._started) {
+ throw new Error('You cannot pipe to this stream after the outbound request has started.')
+ }
+ self.src = src
+ if (isReadStream(src)) {
+ if (!self.hasHeader('content-type')) {
+ self.setHeader('content-type', mime.lookup(src.path))
+ }
+ } else {
+ if (src.headers) {
+ for (var i in src.headers) {
+ if (!self.hasHeader(i)) {
+ self.setHeader(i, src.headers[i])
}
- self.end()
}
}
-
- if (self._form && !self.hasHeader('content-length')) {
- // Before ending the request, we had to compute the length of the whole form, asyncly
- self.setHeader(self._form.getHeaders())
- self._form.getLength(function (err, length) {
- if (!err) {
- self.setHeader('content-length', length)
- }
- end()
- })
- } else {
- end()
+ if (self._json && !self.hasHeader('content-type')) {
+ self.setHeader('content-type', 'application/json')
+ }
+ if (src.method && !self.explicitMethod) {
+ self.method = src.method
}
-
- self.ntick = true
- })
-
- } // End _buildRequest
-
- self._handleUnixSocketURI = function(self){
- // Parse URI and extract a socket path (tested as a valid socket using net.connect), and a http style path suffix
- // Thus http requests can be made to a socket using the uri unix://tmp/my.socket/urlpath
- // and a request for '/urlpath' will be sent to the unix socket at /tmp/my.socket
-
- self.unixsocket = true;
-
- var full_path = self.uri.href.replace(self.uri.protocol+'/', '');
-
- var lookup = full_path.split('/');
- var error_connecting = true;
-
- var lookup_table = {};
- do { lookup_table[lookup.join('/')]={} } while(lookup.pop())
- for (r in lookup_table){
- try_next(r);
- }
-
- function try_next(table_row){
- var client = net.connect( table_row );
- client.path = table_row
- client.on('error', function(){ lookup_table[this.path].error_connecting=true; this.end(); });
- client.on('connect', function(){ lookup_table[this.path].error_connecting=false; this.end(); });
- table_row.client = client;
}
- wait_for_socket_response();
-
- response_counter = 0;
+ // self.on('pipe', function () {
+ // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.')
+ // })
+ })
- function wait_for_socket_response(){
- var detach;
- if('undefined' == typeof setImmediate ) detach = process.nextTick
- else detach = setImmediate;
- detach(function(){
- // counter to prevent infinite blocking waiting for an open socket to be found.
- response_counter++;
- var trying = false;
- for (r in lookup_table){
- if('undefined' == typeof lookup_table[r].error_connecting)
- trying = true;
- }
- if(trying && response_counter<1000)
- wait_for_socket_response()
- else
- set_socket_properties();
- })
+ defer(function () {
+ if (self._aborted) {
+ return
}
- function set_socket_properties(){
- var host;
- for (r in lookup_table){
- if(lookup_table[r].error_connecting === false){
- host = r
- }
+ var end = function () {
+ if (self._form) {
+ self._form.pipe(self)
}
- if(!host){
- self.emit('error', new Error("Failed to connect to any socket in "+full_path))
+ if (self.body) {
+ if (Array.isArray(self.body)) {
+ self.body.forEach(function (part) {
+ self.write(part)
+ })
+ } else {
+ self.write(self.body)
+ }
+ self.end()
+ } else if (self.requestBodyStream) {
+ console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.')
+ self.requestBodyStream.pipe(self)
+ } else if (!self.src) {
+ if (self.method !== 'GET' && typeof self.method !== 'undefined') {
+ self.setHeader('content-length', 0)
+ }
+ self.end()
}
- var path = full_path.replace(host, '')
+ }
- self.socketPath = host
- self.uri.pathname = path
- self.uri.href = path
- self.uri.path = path
- self.host = ''
- self.hostname = ''
- delete self.host
- delete self.hostname
- self._buildRequest();
+ if (self._form && !self.hasHeader('content-length')) {
+ // Before ending the request, we had to compute the length of the whole form, asyncly
+ self.setHeader(self._form.getHeaders())
+ self._form.getLength(function (err, length) {
+ if (!err) {
+ self.setHeader('content-length', length)
+ }
+ end()
+ })
+ } else {
+ end()
}
- }
- // Intercept UNIX protocol requests to change properties to match socket
- if(/^unix:/.test(self.uri.protocol)){
- self._handleUnixSocketURI(self);
- } else {
- self._buildRequest();
- }
+ self.ntick = true
+ })
}
@@ -650,7 +733,9 @@ Request.prototype._updateProtocol = function () {
// previously was doing http, now doing https
// if it's https, then we might need to tunnel now.
if (self.proxy) {
- if (self.setupTunnel()) return
+ if (self.setupTunnel()) {
+ return
+ }
}
self.httpModule = https
@@ -667,7 +752,9 @@ Request.prototype._updateProtocol = function () {
}
// if there's an agent, we need to get a new one.
- if (self.agent) self.agent = self.getAgent()
+ if (self.agent) {
+ self.agent = self.getAgent()
+ }
} else {
// previously was doing https, now doing http
@@ -693,85 +780,114 @@ Request.prototype._updateProtocol = function () {
}
Request.prototype.getAgent = function () {
- var Agent = this.agentClass
+ var self = this
+ var Agent = self.agentClass
var options = {}
- if (this.agentOptions) {
- for (var i in this.agentOptions) {
- options[i] = this.agentOptions[i]
+ if (self.agentOptions) {
+ for (var i in self.agentOptions) {
+ options[i] = self.agentOptions[i]
}
}
- if (this.ca) options.ca = this.ca
- if (this.ciphers) options.ciphers = this.ciphers
- if (this.secureProtocol) options.secureProtocol = this.secureProtocol
- if (this.secureOptions) options.secureOptions = this.secureOptions
- if (typeof this.rejectUnauthorized !== 'undefined') options.rejectUnauthorized = this.rejectUnauthorized
+ if (self.ca) {
+ options.ca = self.ca
+ }
+ if (self.ciphers) {
+ options.ciphers = self.ciphers
+ }
+ if (self.secureProtocol) {
+ options.secureProtocol = self.secureProtocol
+ }
+ if (self.secureOptions) {
+ options.secureOptions = self.secureOptions
+ }
+ if (typeof self.rejectUnauthorized !== 'undefined') {
+ options.rejectUnauthorized = self.rejectUnauthorized
+ }
- if (this.cert && this.key) {
- options.key = this.key
- options.cert = this.cert
+ if (self.cert && self.key) {
+ options.key = self.key
+ options.cert = self.cert
}
var poolKey = ''
// different types of agents are in different pools
- if (Agent !== this.httpModule.Agent) {
+ if (Agent !== self.httpModule.Agent) {
poolKey += Agent.name
}
- if (!this.httpModule.globalAgent) {
+ if (!self.httpModule.globalAgent) {
// node 0.4.x
- options.host = this.host
- options.port = this.port
- if (poolKey) poolKey += ':'
- poolKey += this.host + ':' + this.port
+ options.host = self.host
+ options.port = self.port
+ if (poolKey) {
+ poolKey += ':'
+ }
+ poolKey += self.host + ':' + self.port
}
// ca option is only relevant if proxy or destination are https
- var proxy = this.proxy
- if (typeof proxy === 'string') proxy = url.parse(proxy)
+ var proxy = self.proxy
+ if (typeof proxy === 'string') {
+ proxy = url.parse(proxy)
+ }
var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'
+
if (isHttps) {
if (options.ca) {
- if (poolKey) poolKey += ':'
+ if (poolKey) {
+ poolKey += ':'
+ }
poolKey += options.ca
}
if (typeof options.rejectUnauthorized !== 'undefined') {
- if (poolKey) poolKey += ':'
+ if (poolKey) {
+ poolKey += ':'
+ }
poolKey += options.rejectUnauthorized
}
- if (options.cert)
+ if (options.cert) {
poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
+ }
if (options.ciphers) {
- if (poolKey) poolKey += ':'
+ if (poolKey) {
+ poolKey += ':'
+ }
poolKey += options.ciphers
}
if (options.secureProtocol) {
- if (poolKey) poolKey += ':'
+ if (poolKey) {
+ poolKey += ':'
+ }
poolKey += options.secureProtocol
}
if (options.secureOptions) {
- if (poolKey) poolKey += ':'
+ if (poolKey) {
+ poolKey += ':'
+ }
poolKey += options.secureOptions
}
}
- if (this.pool === globalPool && !poolKey && Object.keys(options).length === 0 && this.httpModule.globalAgent) {
+ if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) {
// not doing anything special. Use the globalAgent
- return this.httpModule.globalAgent
+ return self.httpModule.globalAgent
}
// we're using a stored agent. Make sure it's protocol-specific
- poolKey = this.uri.protocol + poolKey
+ poolKey = self.uri.protocol + poolKey
- // already generated an agent for this setting
- if (this.pool[poolKey]) return this.pool[poolKey]
+ // generate a new agent for this setting if none yet exists
+ if (!self.pool[poolKey]) {
+ self.pool[poolKey] = new Agent(options)
+ }
- return this.pool[poolKey] = new Agent(options)
+ return self.pool[poolKey]
}
Request.prototype.start = function () {
@@ -779,7 +895,9 @@ Request.prototype.start = function () {
// this is usually called on the first write(), end() or on nextTick()
var self = this
- if (self._aborted) return
+ if (self._aborted) {
+ return
+ }
self._started = true
self.method = self.method || 'GET'
@@ -798,14 +916,14 @@ Request.prototype.start = function () {
delete reqOptions.auth
debug('make request', self.uri.href)
- self.req = self.httpModule.request(reqOptions, self.onResponse.bind(self))
+ self.req = self.httpModule.request(reqOptions)
if (self.timeout && !self.timeoutTimer) {
self.timeoutTimer = setTimeout(function () {
- self.req.abort()
- var e = new Error("ETIMEDOUT")
- e.code = "ETIMEDOUT"
- self.emit("error", e)
+ self.abort()
+ var e = new Error('ETIMEDOUT')
+ e.code = 'ETIMEDOUT'
+ self.emit('error', e)
}, self.timeout)
// Set additional timeout on socket - in case if remote
@@ -814,43 +932,73 @@ Request.prototype.start = function () {
self.req.setTimeout(self.timeout, function () {
if (self.req) {
self.req.abort()
- var e = new Error("ESOCKETTIMEDOUT")
- e.code = "ESOCKETTIMEDOUT"
- self.emit("error", e)
+ var e = new Error('ESOCKETTIMEDOUT')
+ e.code = 'ESOCKETTIMEDOUT'
+ self.emit('error', e)
}
})
}
}
- self.req.on('error', self.clientErrorHandler)
+ self.req.on('response', self.onRequestResponse.bind(self))
+ self.req.on('error', self.onRequestError.bind(self))
self.req.on('drain', function() {
self.emit('drain')
})
+ self.req.on('socket', function(socket) {
+ self.emit('socket', socket)
+ })
+
self.on('end', function() {
- if ( self.req.connection ) self.req.connection.removeListener('error', self._parserErrorHandler)
+ if ( self.req.connection ) {
+ self.req.connection.removeListener('error', connectionErrorHandler)
+ }
})
self.emit('request', self.req)
}
-Request.prototype.onResponse = function (response) {
+
+Request.prototype.onRequestError = function (error) {
var self = this
- debug('onResponse', self.uri.href, response.statusCode, response.headers)
+ if (self._aborted) {
+ return
+ }
+ if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET'
+ && self.agent.addRequestNoreuse) {
+ self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
+ self.start()
+ self.req.end()
+ return
+ }
+ if (self.timeout && self.timeoutTimer) {
+ clearTimeout(self.timeoutTimer)
+ self.timeoutTimer = null
+ }
+ self.emit('error', error)
+}
+
+Request.prototype.onRequestResponse = function (response) {
+ var self = this
+ debug('onRequestResponse', self.uri.href, response.statusCode, response.headers)
response.on('end', function() {
debug('response end', self.uri.href, response.statusCode, response.headers)
- });
+ })
// The check on response.connection is a workaround for browserify.
- if (response.connection && response.connection.listeners('error').indexOf(self._parserErrorHandler) === -1) {
+ if (response.connection && response.connection.listeners('error').indexOf(connectionErrorHandler) === -1) {
response.connection.setMaxListeners(0)
- response.connection.once('error', self._parserErrorHandler)
+ response.connection.once('error', connectionErrorHandler)
}
if (self._aborted) {
debug('aborted', self.uri.href)
response.resume()
return
}
- if (self._paused) response.pause()
- // Check that response.resume is defined. Workaround for browserify.
- else response.resume && response.resume()
+ if (self._paused) {
+ response.pause()
+ } else if (response.resume) {
+ // response.resume should be defined, but check anyway before calling. Workaround for browserify.
+ response.resume()
+ }
self.response = response
response.request = self
@@ -861,24 +1009,29 @@ Request.prototype.onResponse = function (response) {
self.strictSSL && (!response.hasOwnProperty('client') ||
!response.client.authorized)) {
debug('strict ssl error', self.uri.href)
- var sslErr = response.hasOwnProperty('client') ? response.client.authorizationError : self.uri.href + " does not support SSL";
- self.emit('error', new Error('SSL Error: '+ sslErr))
+ var sslErr = response.hasOwnProperty('client') ? response.client.authorizationError : self.uri.href + ' does not support SSL'
+ self.emit('error', new Error('SSL Error: ' + sslErr))
return
}
- if (self.setHost) self.removeHeader('host')
+ // Save the original host before any redirect (if it changes, we need to
+ // remove any authorization headers)
+ self.originalHost = self.headers.host
+ if (self.setHost) {
+ self.removeHeader('host')
+ }
if (self.timeout && self.timeoutTimer) {
clearTimeout(self.timeoutTimer)
self.timeoutTimer = null
}
- var targetCookieJar = (self._jar && self._jar.setCookie)?self._jar:globalCookieJar;
+ var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar
var addCookie = function (cookie) {
//set the cookie if it's domain in the href's domain.
try {
- targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true});
+ targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true})
} catch (e) {
- self.emit('error', e);
+ self.emit('error', e)
}
}
@@ -886,8 +1039,11 @@ Request.prototype.onResponse = function (response) {
if (response.caseless.has('set-cookie') && (!self._disableCookies)) {
var headerName = response.caseless.has('set-cookie')
- if (Array.isArray(response.headers[headerName])) response.headers[headerName].forEach(addCookie)
- else addCookie(response.headers[headerName])
+ if (Array.isArray(response.headers[headerName])) {
+ response.headers[headerName].forEach(addCookie)
+ } else {
+ addCookie(response.headers[headerName])
+ }
}
var redirectTo = null
@@ -897,7 +1053,7 @@ Request.prototype.onResponse = function (response) {
if (self.followAllRedirects) {
redirectTo = location
- } else if (self.followRedirect) {
+ } else if (self.followRedirects) {
switch (self.method) {
case 'PATCH':
case 'PUT':
@@ -910,7 +1066,7 @@ Request.prototype.onResponse = function (response) {
break
}
}
- } else if (response.statusCode == 401 && self._hasAuth && !self._sentAuth) {
+ } else if (response.statusCode === 401 && self._hasAuth && !self._sentAuth) {
var authHeader = response.caseless.get('www-authenticate')
var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase()
debug('reauth', authVerb)
@@ -943,8 +1099,10 @@ Request.prototype.onResponse = function (response) {
var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi
for (;;) {
var match = re.exec(authHeader)
- if (!match) break
- challenge[match[1]] = match[2] || match[3];
+ if (!match) {
+ break
+ }
+ challenge[match[1]] = match[2] || match[3]
}
var ha1 = md5(self._user + ':' + challenge.realm + ':' + self._pass)
@@ -968,12 +1126,12 @@ Request.prototype.onResponse = function (response) {
authHeader = []
for (var k in authValues) {
- if (!authValues[k]) {
- //ignore
- } else if (k === 'qop' || k === 'nc' || k === 'algorithm') {
- authHeader.push(k + '=' + authValues[k])
- } else {
- authHeader.push(k + '="' + authValues[k] + '"')
+ if (authValues[k]) {
+ if (k === 'qop' || k === 'nc' || k === 'algorithm') {
+ authHeader.push(k + '=' + authValues[k])
+ } else {
+ authHeader.push(k + '="' + authValues[k] + '"')
+ }
}
}
authHeader = 'Digest ' + authHeader.join(', ')
@@ -990,10 +1148,12 @@ Request.prototype.onResponse = function (response) {
// ignore any potential response body. it cannot possibly be useful
// to us at this point.
- if (self._paused) response.resume()
+ if (self._paused) {
+ response.resume()
+ }
if (self._redirectsFollowed >= self.maxRedirects) {
- self.emit('error', new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+self.uri.href))
+ self.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + self.uri.href))
return
}
self._redirectsFollowed += 1
@@ -1015,13 +1175,15 @@ Request.prototype.onResponse = function (response) {
, redirectUri: redirectTo
}
)
- if (self.followAllRedirects && response.statusCode != 401 && response.statusCode != 307) self.method = 'GET'
+ if (self.followAllRedirects && response.statusCode !== 401 && response.statusCode !== 307) {
+ self.method = 'GET'
+ }
// self.method = 'GET' // Force all redirects to use GET || commented out fixes #215
delete self.src
delete self.req
delete self.agent
delete self._started
- if (response.statusCode != 401 && response.statusCode != 307) {
+ if (response.statusCode !== 401 && response.statusCode !== 307) {
// Remove parameters from the previous response, unless this is the second request
// for a server that requires digest authentication.
delete self.body
@@ -1030,10 +1192,16 @@ Request.prototype.onResponse = function (response) {
self.removeHeader('host')
self.removeHeader('content-type')
self.removeHeader('content-length')
+ if (self.uri.hostname !== self.originalHost.split(':')[0]) {
+ // Remove authorization if changing hostnames (but not if just
+ // changing ports or protocols). This matches the behavior of curl:
+ // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710
+ self.removeHeader('authorization')
+ }
}
}
- self.emit('redirect');
+ self.emit('redirect')
self.init()
return // Ignore the rest of the response
@@ -1042,7 +1210,9 @@ Request.prototype.onResponse = function (response) {
// Be a good stream and emit end when the response is finished.
// Hack to emit end on close because of a core bug that never fires end
response.on('close', function () {
- if (!self._ended) self.response.emit('end')
+ if (!self._ended) {
+ self.response.emit('end')
+ }
})
response.on('end', function () {
@@ -1051,17 +1221,17 @@ Request.prototype.onResponse = function (response) {
var dataStream
if (self.gzip) {
- var contentEncoding = response.headers["content-encoding"] || "identity"
+ var contentEncoding = response.headers['content-encoding'] || 'identity'
contentEncoding = contentEncoding.trim().toLowerCase()
- if (contentEncoding === "gzip") {
+ if (contentEncoding === 'gzip') {
dataStream = zlib.createGunzip()
response.pipe(dataStream)
} else {
// Since previous versions didn't check for Content-Encoding header,
// ignore any invalid values to preserve backwards-compatibility
- if (contentEncoding !== "identity") {
- debug("ignoring unrecognized Content-Encoding " + contentEncoding)
+ if (contentEncoding !== 'identity') {
+ debug('ignoring unrecognized Content-Encoding ' + contentEncoding)
}
dataStream = response
}
@@ -1071,7 +1241,7 @@ Request.prototype.onResponse = function (response) {
if (self.encoding) {
if (self.dests.length !== 0) {
- console.error("Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.")
+ console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')
} else if (dataStream.setEncoding) {
dataStream.setEncoding(self.encoding)
} else {
@@ -1088,24 +1258,30 @@ Request.prototype.onResponse = function (response) {
self.pipeDest(dest)
})
- dataStream.on("data", function (chunk) {
+ dataStream.on('data', function (chunk) {
self._destdata = true
- self.emit("data", chunk)
+ self.emit('data', chunk)
})
- dataStream.on("end", function (chunk) {
- self.emit("end", chunk)
+ dataStream.on('end', function (chunk) {
+ self.emit('end', chunk)
})
- dataStream.on("close", function () {self.emit("close")})
+ dataStream.on('error', function (error) {
+ self.emit('error', error)
+ })
+ dataStream.on('close', function () {self.emit('close')})
if (self.callback) {
var buffer = bl()
, strings = []
- ;
- self.on("data", function (chunk) {
- if (Buffer.isBuffer(chunk)) buffer.append(chunk)
- else strings.push(chunk)
+
+ self.on('data', function (chunk) {
+ if (Buffer.isBuffer(chunk)) {
+ buffer.append(chunk)
+ } else {
+ strings.push(chunk)
+ }
})
- self.on("end", function () {
+ self.on('end', function () {
debug('end event', self.uri.href)
if (self._aborted) {
debug('aborted', self.uri.href)
@@ -1124,7 +1300,7 @@ Request.prototype.onResponse = function (response) {
} else if (strings.length) {
// The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
// Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
- if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === "\uFEFF") {
+ if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') {
strings[0] = strings[0].substring(1)
}
response.body = strings.join('')
@@ -1136,96 +1312,112 @@ Request.prototype.onResponse = function (response) {
} catch (e) {}
}
debug('emitting complete', self.uri.href)
- if(response.body == undefined && !self._json) {
- response.body = "";
+ if(typeof response.body === 'undefined' && !self._json) {
+ response.body = ''
}
self.emit('complete', response, response.body)
})
}
//if no callback
else{
- self.on("end", function () {
+ self.on('end', function () {
if (self._aborted) {
debug('aborted', self.uri.href)
return
}
- self.emit('complete', response);
- });
+ self.emit('complete', response)
+ })
}
}
debug('finish init function', self.uri.href)
}
Request.prototype.abort = function () {
- this._aborted = true
+ var self = this
+ self._aborted = true
- if (this.req) {
- this.req.abort()
+ if (self.req) {
+ self.req.abort()
}
- else if (this.response) {
- this.response.abort()
+ else if (self.response) {
+ self.response.abort()
}
- this.emit("abort")
+ self.emit('abort')
}
Request.prototype.pipeDest = function (dest) {
- var response = this.response
+ var self = this
+ var response = self.response
// Called after the response is received
if (dest.headers && !dest.headersSent) {
if (response.caseless.has('content-type')) {
var ctname = response.caseless.has('content-type')
- if (dest.setHeader) dest.setHeader(ctname, response.headers[ctname])
- else dest.headers[ctname] = response.headers[ctname]
+ if (dest.setHeader) {
+ dest.setHeader(ctname, response.headers[ctname])
+ }
+ else {
+ dest.headers[ctname] = response.headers[ctname]
+ }
}
if (response.caseless.has('content-length')) {
var clname = response.caseless.has('content-length')
- if (dest.setHeader) dest.setHeader(clname, response.headers[clname])
- else dest.headers[clname] = response.headers[clname]
+ if (dest.setHeader) {
+ dest.setHeader(clname, response.headers[clname])
+ } else {
+ dest.headers[clname] = response.headers[clname]
+ }
}
}
if (dest.setHeader && !dest.headersSent) {
for (var i in response.headers) {
// If the response content is being decoded, the Content-Encoding header
// of the response doesn't represent the piped content, so don't pass it.
- if (!this.gzip || i !== 'content-encoding') {
+ if (!self.gzip || i !== 'content-encoding') {
dest.setHeader(i, response.headers[i])
}
}
dest.statusCode = response.statusCode
}
- if (this.pipefilter) this.pipefilter(response, dest)
+ if (self.pipefilter) {
+ self.pipefilter(response, dest)
+ }
}
Request.prototype.qs = function (q, clobber) {
+ var self = this
var base
- if (!clobber && this.uri.query) base = qs.parse(this.uri.query)
- else base = {}
+ if (!clobber && self.uri.query) {
+ base = self.qsLib.parse(self.uri.query)
+ } else {
+ base = {}
+ }
for (var i in q) {
base[i] = q[i]
}
- if (qs.stringify(base) === ''){
- return this
+ if (self.qsLib.stringify(base) === ''){
+ return self
}
- this.uri = url.parse(this.uri.href.split('?')[0] + '?' + qs.stringify(base))
- this.url = this.uri
- this.path = this.uri.path
+ self.uri = url.parse(self.uri.href.split('?')[0] + '?' + self.qsLib.stringify(base))
+ self.url = self.uri
+ self.path = self.uri.path
- return this
+ return self
}
Request.prototype.form = function (form) {
+ var self = this
if (form) {
- this.setHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8')
- this.body = (typeof form === 'string') ? form.toString('utf8') : qs.stringify(form).toString('utf8')
- return this
+ self.setHeader('content-type', 'application/x-www-form-urlencoded')
+ self.body = (typeof form === 'string') ? form.toString('utf8') : self.qsLib.stringify(form).toString('utf8')
+ return self
}
// create form-data object
- this._form = new FormData()
- return this._form
+ self._form = new FormData()
+ return self._form
}
Request.prototype.multipart = function (multipart) {
var self = this
@@ -1234,11 +1426,13 @@ Request.prototype.multipart = function (multipart) {
if (!self.hasHeader('content-type')) {
self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)
} else {
- var headerName = self.hasHeader('content-type');
+ var headerName = self.hasHeader('content-type')
self.setHeader(headerName, self.headers[headerName].split(';')[0] + '; boundary=' + self.boundary)
}
- if (!multipart.forEach) throw new Error('Argument error, options.multipart.')
+ if (!multipart.forEach) {
+ throw new Error('Argument error, options.multipart.')
+ }
if (self.preambleCRLF) {
self.body.push(new Buffer('\r\n'))
@@ -1246,7 +1440,9 @@ Request.prototype.multipart = function (multipart) {
multipart.forEach(function (part) {
var body = part.body
- if(body == null) throw Error('Body attribute missing in multipart.')
+ if(typeof body === 'undefined') {
+ throw new Error('Body attribute missing in multipart.')
+ }
delete part.body
var preamble = '--' + self.boundary + '\r\n'
Object.keys(part).forEach(function (key) {
@@ -1258,85 +1454,104 @@ Request.prototype.multipart = function (multipart) {
self.body.push(new Buffer('\r\n'))
})
self.body.push(new Buffer('--' + self.boundary + '--'))
+
+ if (self.postambleCRLF) {
+ self.body.push(new Buffer('\r\n'))
+ }
+
return self
}
Request.prototype.json = function (val) {
var self = this
- if (!self.hasHeader('accept')) self.setHeader('accept', 'application/json')
+ if (!self.hasHeader('accept')) {
+ self.setHeader('accept', 'application/json')
+ }
- this._json = true
+ self._json = true
if (typeof val === 'boolean') {
- if (typeof this.body === 'object') {
- this.body = safeStringify(this.body)
- if (!self.hasHeader('content-type'))
+ if (typeof self.body === 'object') {
+ self.body = safeStringify(self.body)
+ if (!self.hasHeader('content-type')) {
self.setHeader('content-type', 'application/json')
+ }
}
} else {
- this.body = safeStringify(val)
- if (!self.hasHeader('content-type'))
+ self.body = safeStringify(val)
+ if (!self.hasHeader('content-type')) {
self.setHeader('content-type', 'application/json')
+ }
}
- return this
+ return self
}
Request.prototype.getHeader = function (name, headers) {
+ var self = this
var result, re, match
- if (!headers) headers = this.headers
+ if (!headers) {
+ headers = self.headers
+ }
Object.keys(headers).forEach(function (key) {
- if (key.length !== name.length) return
+ if (key.length !== name.length) {
+ return
+ }
re = new RegExp(name, 'i')
match = key.match(re)
- if (match) result = headers[key]
+ if (match) {
+ result = headers[key]
+ }
})
return result
}
var getHeader = Request.prototype.getHeader
Request.prototype.auth = function (user, pass, sendImmediately, bearer) {
+ var self = this
if (bearer !== undefined) {
- this._bearer = bearer
- this._hasAuth = true
- if (sendImmediately || typeof sendImmediately == 'undefined') {
+ self._bearer = bearer
+ self._hasAuth = true
+ if (sendImmediately || typeof sendImmediately === 'undefined') {
if (typeof bearer === 'function') {
bearer = bearer()
}
- this.setHeader('authorization', 'Bearer ' + bearer)
- this._sentAuth = true
+ self.setHeader('authorization', 'Bearer ' + bearer)
+ self._sentAuth = true
}
- return this
+ return self
}
if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {
throw new Error('auth() received invalid user or password')
}
- this._user = user
- this._pass = pass
- this._hasAuth = true
+ self._user = user
+ self._pass = pass
+ self._hasAuth = true
var header = typeof pass !== 'undefined' ? user + ':' + pass : user
- if (sendImmediately || typeof sendImmediately == 'undefined') {
- this.setHeader('authorization', 'Basic ' + toBase64(header))
- this._sentAuth = true
+ if (sendImmediately || typeof sendImmediately === 'undefined') {
+ self.setHeader('authorization', 'Basic ' + toBase64(header))
+ self._sentAuth = true
}
- return this
+ return self
}
Request.prototype.aws = function (opts, now) {
+ var self = this
+
if (!now) {
- this._aws = opts
- return this
+ self._aws = opts
+ return self
}
var date = new Date()
- this.setHeader('date', date.toUTCString())
+ self.setHeader('date', date.toUTCString())
var auth =
{ key: opts.key
, secret: opts.secret
- , verb: this.method.toUpperCase()
+ , verb: self.method.toUpperCase()
, date: date
- , contentType: this.getHeader('content-type') || ''
- , md5: this.getHeader('content-md5') || ''
- , amazonHeaders: aws.canonicalizeHeaders(this.headers)
+ , contentType: self.getHeader('content-type') || ''
+ , md5: self.getHeader('content-md5') || ''
+ , amazonHeaders: aws.canonicalizeHeaders(self.headers)
}
- var path = this.uri.path;
+ var path = self.uri.path
if (opts.bucket && path) {
auth.resource = '/' + opts.bucket + path
} else if (opts.bucket && !path) {
@@ -1347,50 +1562,61 @@ Request.prototype.aws = function (opts, now) {
auth.resource = '/'
}
auth.resource = aws.canonicalizeResource(auth.resource)
- this.setHeader('authorization', aws.authorization(auth))
+ self.setHeader('authorization', aws.authorization(auth))
- return this
+ return self
}
Request.prototype.httpSignature = function (opts) {
- var req = this
+ var self = this
httpSignature.signRequest({
getHeader: function(header) {
- return getHeader(header, req.headers)
+ return getHeader(header, self.headers)
},
setHeader: function(header, value) {
- req.setHeader(header, value)
+ self.setHeader(header, value)
},
- method: this.method,
- path: this.path
+ method: self.method,
+ path: self.path
}, opts)
- debug('httpSignature authorization', this.getHeader('authorization'))
+ debug('httpSignature authorization', self.getHeader('authorization'))
- return this
+ return self
}
Request.prototype.hawk = function (opts) {
- this.setHeader('Authorization', hawk.client.header(this.uri, this.method, opts).field)
+ var self = this
+ self.setHeader('Authorization', hawk.client.header(self.uri, self.method, opts).field)
}
Request.prototype.oauth = function (_oauth) {
+ var self = this
var form, query
- if (this.hasHeader('content-type') &&
- this.getHeader('content-type').slice(0, 'application/x-www-form-urlencoded'.length) ===
+ if (self.hasHeader('content-type') &&
+ self.getHeader('content-type').slice(0, 'application/x-www-form-urlencoded'.length) ===
'application/x-www-form-urlencoded'
) {
- form = this.body
+ form = self.body
}
- if (this.uri.query) {
- query = this.uri.query
+ if (self.uri.query) {
+ query = self.uri.query
}
var oa = {}
- for (var i in _oauth) oa['oauth_'+i] = _oauth[i]
- if ('oauth_realm' in oa) delete oa.oauth_realm
-
- if (!oa.oauth_version) oa.oauth_version = '1.0'
- if (!oa.oauth_timestamp) oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString()
- if (!oa.oauth_nonce) oa.oauth_nonce = uuid().replace(/-/g, '')
+ for (var i in _oauth) {
+ oa['oauth_' + i] = _oauth[i]
+ }
+ if ('oauth_realm' in oa) {
+ delete oa.oauth_realm
+ }
+ if (!oa.oauth_version) {
+ oa.oauth_version = '1.0'
+ }
+ if (!oa.oauth_timestamp) {
+ oa.oauth_timestamp = Math.floor( Date.now() / 1000 ).toString()
+ }
+ if (!oa.oauth_nonce) {
+ oa.oauth_nonce = uuid().replace(/-/g, '')
+ }
oa.oauth_signature_method = 'HMAC-SHA1'
@@ -1399,95 +1625,118 @@ Request.prototype.oauth = function (_oauth) {
var token_secret = oa.oauth_token_secret
delete oa.oauth_token_secret
- var baseurl = this.uri.protocol + '//' + this.uri.host + this.uri.pathname
- var params = qs.parse([].concat(query, form, qs.stringify(oa)).join('&'))
- var signature = oauth.hmacsign(this.method, baseurl, params, consumer_secret, token_secret)
+ var baseurl = self.uri.protocol + '//' + self.uri.host + self.uri.pathname
+ var params = self.qsLib.parse([].concat(query, form, self.qsLib.stringify(oa)).join('&'))
+ var signature = oauth.hmacsign(self.method, baseurl, params, consumer_secret, token_secret)
- var realm = _oauth.realm ? 'realm="' + _oauth.realm + '",' : '';
+ var realm = _oauth.realm ? 'realm="' + _oauth.realm + '",' : ''
var authHeader = 'OAuth ' + realm +
- Object.keys(oa).sort().map(function (i) {return i+'="'+oauth.rfc3986(oa[i])+'"'}).join(',')
+ Object.keys(oa).sort().map(function (i) {return i + '="' + oauth.rfc3986(oa[i]) + '"'}).join(',')
authHeader += ',oauth_signature="' + oauth.rfc3986(signature) + '"'
- this.setHeader('Authorization', authHeader)
- return this
+ self.setHeader('Authorization', authHeader)
+ return self
}
Request.prototype.jar = function (jar) {
+ var self = this
var cookies
- if (this._redirectsFollowed === 0) {
- this.originalCookieHeader = this.getHeader('cookie')
+ if (self._redirectsFollowed === 0) {
+ self.originalCookieHeader = self.getHeader('cookie')
}
if (!jar) {
// disable cookies
cookies = false
- this._disableCookies = true
+ self._disableCookies = true
} else {
- var targetCookieJar = (jar && jar.getCookieString)?jar:globalCookieJar;
- var urihref = this.uri.href
+ var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar
+ var urihref = self.uri.href
//fetch cookie in the Specified host
if (targetCookieJar) {
- cookies = targetCookieJar.getCookieString(urihref);
+ cookies = targetCookieJar.getCookieString(urihref)
}
}
//if need cookie and cookie is not empty
if (cookies && cookies.length) {
- if (this.originalCookieHeader) {
+ if (self.originalCookieHeader) {
// Don't overwrite existing Cookie header
- this.setHeader('cookie', this.originalCookieHeader + '; ' + cookies)
+ self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies)
} else {
- this.setHeader('cookie', cookies)
+ self.setHeader('cookie', cookies)
}
}
- this._jar = jar
- return this
+ self._jar = jar
+ return self
}
// Stream API
Request.prototype.pipe = function (dest, opts) {
- if (this.response) {
- if (this._destdata) {
- throw new Error("You cannot pipe after data has been emitted from the response.")
- } else if (this._ended) {
- throw new Error("You cannot pipe after the response has been ended.")
+ var self = this
+
+ if (self.response) {
+ if (self._destdata) {
+ throw new Error('You cannot pipe after data has been emitted from the response.')
+ } else if (self._ended) {
+ throw new Error('You cannot pipe after the response has been ended.')
} else {
- stream.Stream.prototype.pipe.call(this, dest, opts)
- this.pipeDest(dest)
+ stream.Stream.prototype.pipe.call(self, dest, opts)
+ self.pipeDest(dest)
return dest
}
} else {
- this.dests.push(dest)
- stream.Stream.prototype.pipe.call(this, dest, opts)
+ self.dests.push(dest)
+ stream.Stream.prototype.pipe.call(self, dest, opts)
return dest
}
}
Request.prototype.write = function () {
- if (!this._started) this.start()
- return this.req.write.apply(this.req, arguments)
+ var self = this
+ if (!self._started) {
+ self.start()
+ }
+ return self.req.write.apply(self.req, arguments)
}
Request.prototype.end = function (chunk) {
- if (chunk) this.write(chunk)
- if (!this._started) this.start()
- this.req.end()
+ var self = this
+ if (chunk) {
+ self.write(chunk)
+ }
+ if (!self._started) {
+ self.start()
+ }
+ self.req.end()
}
Request.prototype.pause = function () {
- if (!this.response) this._paused = true
- else this.response.pause.apply(this.response, arguments)
+ var self = this
+ if (!self.response) {
+ self._paused = true
+ } else {
+ self.response.pause.apply(self.response, arguments)
+ }
}
Request.prototype.resume = function () {
- if (!this.response) this._paused = false
- else this.response.resume.apply(this.response, arguments)
+ var self = this
+ if (!self.response) {
+ self._paused = false
+ } else {
+ self.response.resume.apply(self.response, arguments)
+ }
}
Request.prototype.destroy = function () {
- if (!this._ended) this.end()
- else if (this.response) this.response.destroy()
+ var self = this
+ if (!self._ended) {
+ self.end()
+ } else if (self.response) {
+ self.response.destroy()
+ }
}
-Request.prototype.toJSON = requestToJSON
-
Request.defaultProxyHeaderWhiteList =
defaultProxyHeaderWhiteList.slice()
+// Exports
+Request.prototype.toJSON = requestToJSON
module.exports = Request
diff --git a/deps/npm/node_modules/retry/Readme.md b/deps/npm/node_modules/retry/Readme.md
index 2bb865097d..ba6602205a 100644
--- a/deps/npm/node_modules/retry/Readme.md
+++ b/deps/npm/node_modules/retry/Readme.md
@@ -14,7 +14,7 @@ This module has been tested and is ready to be used.
The example below will retry a potentially failing `dns.resolve` operation
`10` times using an exponential backoff strategy. With the default settings, this
-means the last attempt is made after `34 minutes and 7 seconds`.
+means the last attempt is made after `17 minutes and 3 seconds`.
``` javascript
var dns = require('dns');
@@ -29,7 +29,7 @@ function faultTolerantResolve(address, cb) {
return;
}
- cb(operation.mainError(), addresses);
+ cb(err ? operation.mainError() : null, addresses);
});
});
}
@@ -69,8 +69,8 @@ milliseconds. If `options` is an array, a copy of that array is returned.
* `retries`: The maximum amount of times to retry the operation. Default is `10`.
* `factor`: The exponential factor to use. Default is `2`.
-* `minTimeout`: The amount of time before starting the first retry. Default is `1000`.
-* `maxTimeout`: The maximum amount of time between two retries. Default is `Infinity`.
+* `minTimeout`: The number of milliseconds before starting the first retry. Default is `1000`.
+* `maxTimeout`: The maximum number of milliseconds between two retries. Default is `Infinity`.
* `randomize`: Randomizes the timeouts by multiplying with a factor between `1` to `2`. Default is `false`.
The formula used to calculate the individual timeouts is:
diff --git a/deps/npm/node_modules/retry/package.json b/deps/npm/node_modules/retry/package.json
index 8f5e6d21f2..130fcae13a 100644
--- a/deps/npm/node_modules/retry/package.json
+++ b/deps/npm/node_modules/retry/package.json
@@ -6,11 +6,11 @@
},
"name": "retry",
"description": "Abstraction for exponential and custom retry strategies for failed operations.",
- "version": "0.6.0",
+ "version": "0.6.1",
"homepage": "https://github.com/tim-kos/node-retry",
"repository": {
"type": "git",
- "url": "git://github.com/felixge/node-retry.git"
+ "url": "git://github.com/tim-kos/node-retry.git"
},
"directories": {
"lib": "./lib"
@@ -24,6 +24,26 @@
"fake": "0.2.0",
"far": "0.0.1"
},
- "_id": "retry@0.6.0",
- "_from": "retry"
+ "bugs": {
+ "url": "https://github.com/tim-kos/node-retry/issues"
+ },
+ "_id": "retry@0.6.1",
+ "_shasum": "fdc90eed943fde11b893554b8cc63d0e899ba918",
+ "_from": "retry@>=0.6.1 <0.7.0",
+ "_npmVersion": "1.4.9",
+ "_npmUser": {
+ "name": "tim-kos",
+ "email": "tim@debuggable.com"
+ },
+ "maintainers": [
+ {
+ "name": "tim-kos",
+ "email": "tim@debuggable.com"
+ }
+ ],
+ "dist": {
+ "shasum": "fdc90eed943fde11b893554b8cc63d0e899ba918",
+ "tarball": "http://registry.npmjs.org/retry/-/retry-0.6.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/retry/-/retry-0.6.1.tgz"
}
diff --git a/deps/npm/node_modules/semver/README.md b/deps/npm/node_modules/semver/README.md
index 0f8a755a4c..7e1961d457 100644
--- a/deps/npm/node_modules/semver/README.md
+++ b/deps/npm/node_modules/semver/README.md
@@ -140,7 +140,7 @@ numeric values in the `[major, minor, patch]` tuple.
A partial version range is treated as an X-Range, so the special
character is in fact optional.
-* `` (empty string) := `*` := `>=0.0.0`
+* `""` (empty string) := `*` := `>=0.0.0`
* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
diff --git a/deps/npm/node_modules/semver/bin/semver b/deps/npm/node_modules/semver/bin/semver
index 41c148fb86..c5f2e857e8 100755
--- a/deps/npm/node_modules/semver/bin/semver
+++ b/deps/npm/node_modules/semver/bin/semver
@@ -12,6 +12,7 @@ var argv = process.argv.slice(2)
, inc = null
, version = require("../package.json").version
, loose = false
+ , identifier = undefined
, semver = require("../semver")
, reverse = false
@@ -47,6 +48,9 @@ function main () {
break
}
break
+ case "--preid":
+ identifier = argv.shift()
+ break
case "-r": case "--range":
range.push(argv.shift())
break
@@ -88,7 +92,7 @@ function success () {
}).map(function (v) {
return semver.clean(v, loose)
}).map(function (v) {
- return inc ? semver.inc(v, inc, loose) : v
+ return inc ? semver.inc(v, inc, loose, identifier) : v
}).forEach(function (v,i,_) { console.log(v) })
}
@@ -111,6 +115,10 @@ function help () {
," prepatch, or prerelease. Default level is 'patch'."
," Only one version may be specified."
,""
+ ,"--preid <identifier>"
+ ," Identifier to be used to prefix premajor, preminor,"
+ ," prepatch or prerelease version increments."
+ ,""
,"-l --loose"
," Interpret versions and ranges loosely"
,""
diff --git a/deps/npm/node_modules/semver/package.json b/deps/npm/node_modules/semver/package.json
index a575f0ebd4..a22dc9737f 100644
--- a/deps/npm/node_modules/semver/package.json
+++ b/deps/npm/node_modules/semver/package.json
@@ -1,6 +1,6 @@
{
"name": "semver",
- "version": "4.0.0",
+ "version": "4.1.0",
"description": "The semantic version parser used by npm.",
"main": "semver.js",
"browser": "semver.browser.js",
@@ -21,15 +21,16 @@
"bin": {
"semver": "./bin/semver"
},
- "gitHead": "f71a46b52f5d413aff1cb3afa7d2f940b23ab1a0",
+ "gitHead": "f8db569b9fd00788d14064aaf81854ed81e1337a",
"bugs": {
"url": "https://github.com/isaacs/node-semver/issues"
},
"homepage": "https://github.com/isaacs/node-semver",
- "_id": "semver@4.0.0",
- "_shasum": "7be868416a5e669923a8e3af8bafa5faf62a151a",
- "_from": "semver@>=4.0.0-0 <5.0.0-0",
- "_npmVersion": "2.0.0-beta.3",
+ "_id": "semver@4.1.0",
+ "_shasum": "bc80a9ff68532814362cc3cfda3c7b75ed9c321c",
+ "_from": "semver@>=4.1.0 <5.0.0",
+ "_npmVersion": "2.1.3",
+ "_nodeVersion": "0.10.31",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
@@ -38,13 +39,17 @@
{
"name": "isaacs",
"email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
}
],
"dist": {
- "shasum": "7be868416a5e669923a8e3af8bafa5faf62a151a",
- "tarball": "http://registry.npmjs.org/semver/-/semver-4.0.0.tgz"
+ "shasum": "bc80a9ff68532814362cc3cfda3c7b75ed9c321c",
+ "tarball": "http://registry.npmjs.org/semver/-/semver-4.1.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/semver/-/semver-4.0.0.tgz",
+ "_resolved": "https://registry.npmjs.org/semver/-/semver-4.1.0.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/semver/semver.browser.js b/deps/npm/node_modules/semver/semver.browser.js
index afb68ac0c4..712de835cb 100644
--- a/deps/npm/node_modules/semver/semver.browser.js
+++ b/deps/npm/node_modules/semver/semver.browser.js
@@ -345,35 +345,35 @@ SemVer.prototype.comparePre = function(other) {
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
-SemVer.prototype.inc = function(release) {
+SemVer.prototype.inc = function(release, identifier) {
switch (release) {
case 'premajor':
this.prerelease.length = 0;
this.patch = 0;
this.minor = 0;
this.major++;
- this.inc('pre');
+ this.inc('pre', identifier);
break;
case 'preminor':
this.prerelease.length = 0;
this.patch = 0;
this.minor++;
- this.inc('pre');
+ this.inc('pre', identifier);
break;
case 'prepatch':
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this.prerelease.length = 0;
- this.inc('patch');
- this.inc('pre');
+ this.inc('patch', identifier);
+ this.inc('pre', identifier);
break;
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease':
if (this.prerelease.length === 0)
- this.inc('patch');
- this.inc('pre');
+ this.inc('patch', identifier);
+ this.inc('pre', identifier);
break;
case 'major':
@@ -407,7 +407,7 @@ SemVer.prototype.inc = function(release) {
this.prerelease = [];
break;
// This probably shouldn't be used publicly.
- // 1.0.0 "pre" would become 1.0.0 which is the wrong direction.
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre':
if (this.prerelease.length === 0)
this.prerelease = [0];
@@ -422,6 +422,15 @@ SemVer.prototype.inc = function(release) {
if (i === -1) // didn't increment anything
this.prerelease.push(0);
}
+ if (identifier) {
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ if (this.prerelease[0] === identifier) {
+ if (isNaN(this.prerelease[1]))
+ this.prerelease = [identifier, 0];
+ } else
+ this.prerelease = [identifier, 0];
+ }
break;
default:
@@ -432,9 +441,14 @@ SemVer.prototype.inc = function(release) {
};
exports.inc = inc;
-function inc(version, release, loose) {
+function inc(version, release, loose, identifier) {
+ if (typeof(loose) === 'string') {
+ identifier = loose;
+ loose = undefined;
+ }
+
try {
- return new SemVer(version, loose).inc(release).version;
+ return new SemVer(version, loose).inc(release, identifier).version;
} catch (er) {
return null;
}
@@ -846,10 +860,16 @@ function replaceXRange(comp, loose) {
if (gtlt === '=' && anyX)
gtlt = '';
- if (gtlt && anyX) {
+ if (xM) {
+ if (gtlt === '>' || gtlt === '<') {
+ // nothing is allowed
+ ret = '<0.0.0';
+ } else {
+ // nothing is forbidden
+ ret = '*';
+ }
+ } else if (gtlt && anyX) {
// replace X with 0
- if (xM)
- M = 0;
if (xm)
m = 0;
if (xp)
@@ -860,9 +880,7 @@ function replaceXRange(comp, loose) {
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>=';
- if (xM) {
- // no change
- } else if (xm) {
+ if (xm) {
M = +M + 1;
m = 0;
p = 0;
@@ -870,13 +888,17 @@ function replaceXRange(comp, loose) {
m = +m + 1;
p = 0;
}
+ } else if (gtlt === '<=') {
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
+ gtlt = '<'
+ if (xm)
+ M = +M + 1
+ else
+ m = +m + 1
}
-
ret = gtlt + M + '.' + m + '.' + p;
- } else if (xM) {
- // allow any
- ret = '*';
} else if (xm) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
} else if (xp) {
diff --git a/deps/npm/node_modules/semver/semver.browser.js.gz b/deps/npm/node_modules/semver/semver.browser.js.gz
index 2d01ad972b..e306605550 100644
--- a/deps/npm/node_modules/semver/semver.browser.js.gz
+++ b/deps/npm/node_modules/semver/semver.browser.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/semver.js b/deps/npm/node_modules/semver/semver.js
index 8b5b93f96d..22673fdd19 100644
--- a/deps/npm/node_modules/semver/semver.js
+++ b/deps/npm/node_modules/semver/semver.js
@@ -355,35 +355,35 @@ SemVer.prototype.comparePre = function(other) {
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
-SemVer.prototype.inc = function(release) {
+SemVer.prototype.inc = function(release, identifier) {
switch (release) {
case 'premajor':
this.prerelease.length = 0;
this.patch = 0;
this.minor = 0;
this.major++;
- this.inc('pre');
+ this.inc('pre', identifier);
break;
case 'preminor':
this.prerelease.length = 0;
this.patch = 0;
this.minor++;
- this.inc('pre');
+ this.inc('pre', identifier);
break;
case 'prepatch':
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this.prerelease.length = 0;
- this.inc('patch');
- this.inc('pre');
+ this.inc('patch', identifier);
+ this.inc('pre', identifier);
break;
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease':
if (this.prerelease.length === 0)
- this.inc('patch');
- this.inc('pre');
+ this.inc('patch', identifier);
+ this.inc('pre', identifier);
break;
case 'major':
@@ -417,7 +417,7 @@ SemVer.prototype.inc = function(release) {
this.prerelease = [];
break;
// This probably shouldn't be used publicly.
- // 1.0.0 "pre" would become 1.0.0 which is the wrong direction.
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre':
if (this.prerelease.length === 0)
this.prerelease = [0];
@@ -432,6 +432,15 @@ SemVer.prototype.inc = function(release) {
if (i === -1) // didn't increment anything
this.prerelease.push(0);
}
+ if (identifier) {
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ if (this.prerelease[0] === identifier) {
+ if (isNaN(this.prerelease[1]))
+ this.prerelease = [identifier, 0];
+ } else
+ this.prerelease = [identifier, 0];
+ }
break;
default:
@@ -442,9 +451,14 @@ SemVer.prototype.inc = function(release) {
};
exports.inc = inc;
-function inc(version, release, loose) {
+function inc(version, release, loose, identifier) {
+ if (typeof(loose) === 'string') {
+ identifier = loose;
+ loose = undefined;
+ }
+
try {
- return new SemVer(version, loose).inc(release).version;
+ return new SemVer(version, loose).inc(release, identifier).version;
} catch (er) {
return null;
}
@@ -856,10 +870,16 @@ function replaceXRange(comp, loose) {
if (gtlt === '=' && anyX)
gtlt = '';
- if (gtlt && anyX) {
+ if (xM) {
+ if (gtlt === '>' || gtlt === '<') {
+ // nothing is allowed
+ ret = '<0.0.0';
+ } else {
+ // nothing is forbidden
+ ret = '*';
+ }
+ } else if (gtlt && anyX) {
// replace X with 0
- if (xM)
- M = 0;
if (xm)
m = 0;
if (xp)
@@ -870,9 +890,7 @@ function replaceXRange(comp, loose) {
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>=';
- if (xM) {
- // no change
- } else if (xm) {
+ if (xm) {
M = +M + 1;
m = 0;
p = 0;
@@ -880,13 +898,17 @@ function replaceXRange(comp, loose) {
m = +m + 1;
p = 0;
}
+ } else if (gtlt === '<=') {
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
+ gtlt = '<'
+ if (xm)
+ M = +M + 1
+ else
+ m = +m + 1
}
-
ret = gtlt + M + '.' + m + '.' + p;
- } else if (xM) {
- // allow any
- ret = '*';
} else if (xm) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
} else if (xp) {
diff --git a/deps/npm/node_modules/semver/semver.min.js b/deps/npm/node_modules/semver/semver.min.js
index 0dd841cb4e..56c9249e1c 100644
--- a/deps/npm/node_modules/semver/semver.min.js
+++ b/deps/npm/node_modules/semver/semver.min.js
@@ -1 +1 @@
-(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var o=n++;t[o]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var a=n++;t[a]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[o]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[o]+")";var c=n++;t[c]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var p=n++;t[p]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[a]+t[c]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[p]+"?"+t[v]+"?";var y=n++;t[y]="^"+w+"$";var d=n++;t[d]="((?:<|>)?=?)";var b=n++;t[b]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var $=n++;t[$]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:"+t[c]+")?"+t[v]+"?"+")?)?";var k=n++;t[k]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:"+t[p]+")?"+t[v]+"?"+")?)?";var E=n++;t[E]="^"+t[d]+"\\s*"+t[$]+"$";var x=n++;t[x]="^"+t[d]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[$]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[$]+"$";var P=n++;t[P]="^"+t[A]+t[k]+"$";var Z=n++;t[Z]="^"+t[d]+"\\s*("+w+")$|^$";var q=n++;t[q]="^"+t[d]+"\\s*("+g+")$|^$";var L=n++;t[L]="(\\s*)"+t[d]+"\\s*("+w+"|"+t[$]+")";r[L]=new RegExp(t[L],"g");var X="$1$2$3";var _=n++;t[_]="^\\s*("+t[$]+")"+"\\s+-\\s+"+"("+t[$]+")"+"\\s*$";var N=n++;t[N]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[y]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[y]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre");break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre");break;case"prepatch":this.prerelease.length=0;this.inc("patch");this.inc("pre");break;case"prerelease":if(this.prerelease.length===0)this.inc("patch");this.inc("pre");break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var r=this.prerelease.length;while(--r>=0){if(typeof this.prerelease[r]==="number"){this.prerelease[r]++;r=-2}}if(r===-1)this.prerelease.push(0)}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t){try{return new H(e,t).inc(r).version}catch(n){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=or;function or(e,r,t){return W(e,r,t)!==0}e.gte=ar;function ar(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=or(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=ar(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===cr)this.value="";else this.value=this.operator+this.semver.version}var cr={};lr.prototype.parse=function(e){var t=this.loose?r[Z]:r[q];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(this.operator==="=")this.operator="";if(!n[2])this.semver=cr;else this.semver=new H(n[2],this.loose)};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){if(this.semver===cr)return true;if(typeof e==="string")e=new H(e,this.loose);return ur(e,this.operator,this.semver,this.loose)};e.Range=pr;function pr(e,r){if(e instanceof pr&&e.loose===r)return e;if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}pr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};pr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};pr.prototype.toString=function(){return this.range};pr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[N]:r[_];e=e.replace(n,kr);e=e.replace(r[L],X);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[Z]:r[q];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new pr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=yr(e,r);e=gr(e,r);e=br(e,r);e=$r(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function yr(e,r){return e.trim().split(/\s+/).map(function(e){return dr(e,r)}).join(" ")}function dr(e,t){var n=t?r[P]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var o=mr(t);var a=o||mr(n);var f=a||mr(i);var u=f;if(r==="="&&u)r="";if(r&&u){if(o)t=0;if(a)n=0;if(f)i=0;if(r===">"){r=">=";if(o){}else if(a){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}e=r+t+"."+n+"."+i}else if(o){e="*"}else if(a){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function $r(e,t){return e.trim().replace(r[O],"")}function kr(e,r,t,n,i,s,o,a,f,u,l,c,p){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0";else if(mr(i))r=">="+t+"."+n+".0";else r=">="+r;if(mr(f))a="";else if(mr(u))a="<"+(+f+1)+".0.0";else if(mr(l))a="<"+f+"."+(+u+1)+".0";else if(c)a="<="+f+"."+u+"."+l+"-"+c;else a="<="+a;return(r+" "+a).trim()}pr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new H(e,this.loose);for(var r=0;r<this.set.length;r++){if(Er(this.set[r],e))return true}return false};function Er(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===cr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new pr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new pr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Tr(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Tr(e,r,">",t)}e.outside=Tr;function Tr(e,r,t,n){e=new H(e,n);r=new pr(r,n);var i,s,o,a,f;switch(t){case">":i=nr;s=fr;o=ir;a=">";f=">=";break;case"<":i=ir;s=ar;o=nr;a="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var c=null;var p=null;l.forEach(function(e){c=c||e;p=p||e;if(i(e.semver,c.semver,n)){c=e}else if(o(e.semver,p.semver,n)){p=e}});if(c.operator===a||c.operator===f){return false}if((!p.operator||p.operator===a)&&s(e,p.semver)){return false}else if(p.operator===f&&o(e,p.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
+(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[a]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[a]+")";var p=n++;t[p]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var c=n++;t[c]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[o]+t[p]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[c]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var b=n++;t[b]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var $=n++;t[$]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:"+t[p]+")?"+t[v]+"?"+")?)?";var k=n++;t[k]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:"+t[c]+")?"+t[v]+"?"+")?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[$]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[$]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[$]+"$";var N=n++;t[N]="^"+t[A]+t[k]+"$";var P=n++;t[P]="^"+t[y]+"\\s*("+w+")$|^$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+g+")$|^$";var q=n++;t[q]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[$]+")";r[q]=new RegExp(t[q],"g");var L="$1$2$3";var X=n++;t[X]="^\\s*("+t[$]+")"+"\\s+-\\s+"+"("+t[$]+")"+"\\s*$";var _=n++;t[_]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new H(e,t).inc(r,n).version}catch(i){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=ar;function ar(e,r,t){return W(e,r,t)!==0}e.gte=or;function or(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=ar(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=or(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===pr)this.value="";else this.value=this.operator+this.semver.version}var pr={};lr.prototype.parse=function(e){var t=this.loose?r[P]:r[Z];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(this.operator==="=")this.operator="";if(!n[2])this.semver=pr;else this.semver=new H(n[2],this.loose)};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){if(this.semver===pr)return true;if(typeof e==="string")e=new H(e,this.loose);return ur(e,this.operator,this.semver,this.loose)};e.Range=cr;function cr(e,r){if(e instanceof cr&&e.loose===r)return e;if(!(this instanceof cr))return new cr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}cr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};cr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};cr.prototype.toString=function(){return this.range};cr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[_]:r[X];e=e.replace(n,kr);e=e.replace(r[q],L);e=e.replace(r[S],V);e=e.replace(r[C],M);e=e.split(/\s+/).join(" ");var i=t?r[P]:r[Z];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new cr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=br(e,r);e=$r(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[T]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[N]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function br(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=mr(t);var o=a||mr(n);var f=o||mr(i);var u=f;if(r==="="&&u)r="";if(a){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(o)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(o){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function $r(e,t){return e.trim().replace(r[O],"")}function kr(e,r,t,n,i,s,a,o,f,u,l,p,c){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0";else if(mr(i))r=">="+t+"."+n+".0";else r=">="+r;if(mr(f))o="";else if(mr(u))o="<"+(+f+1)+".0.0";else if(mr(l))o="<"+f+"."+(+u+1)+".0";else if(p)o="<="+f+"."+u+"."+l+"-"+p;else o="<="+o;return(r+" "+o).trim()}cr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new H(e,this.loose);for(var r=0;r<this.set.length;r++){if(Er(this.set[r],e))return true}return false};function Er(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}if(r.prerelease.length){for(var t=0;t<e.length;t++){if(e[t].semver===pr)return true;if(e[t].semver.prerelease.length>0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new cr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new cr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Tr(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Tr(e,r,">",t)}e.outside=Tr;function Tr(e,r,t,n){e=new H(e,n);r=new cr(r,n);var i,s,a,o,f;switch(t){case">":i=nr;s=fr;a=ir;o=">";f=">=";break;case"<":i=ir;s=or;a=nr;o="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var p=null;var c=null;l.forEach(function(e){p=p||e;c=c||e;if(i(e.semver,p.semver,n)){p=e}else if(a(e.semver,c.semver,n)){c=e}});if(p.operator===o||p.operator===f){return false}if((!c.operator||c.operator===o)&&s(e,c.semver)){return false}else if(c.operator===f&&a(e,c.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={}); \ No newline at end of file
diff --git a/deps/npm/node_modules/semver/semver.min.js.gz b/deps/npm/node_modules/semver/semver.min.js.gz
index 2c327af0d2..2362824d12 100644
--- a/deps/npm/node_modules/semver/semver.min.js.gz
+++ b/deps/npm/node_modules/semver/semver.min.js.gz
Binary files differ
diff --git a/deps/npm/node_modules/semver/test/clean.js b/deps/npm/node_modules/semver/test/clean.js
index 1ab13e416f..9e268de950 100644
--- a/deps/npm/node_modules/semver/test/clean.js
+++ b/deps/npm/node_modules/semver/test/clean.js
@@ -14,7 +14,11 @@ test('\nclean tests', function(t) {
[' =v1.2.3 ', '1.2.3'],
['v1.2.3', '1.2.3'],
[' v1.2.3 ', '1.2.3'],
- ['\t1.2.3', '1.2.3']
+ ['\t1.2.3', '1.2.3'],
+ ['>1.2.3', null],
+ ['~1.2.3', null],
+ ['<=1.2.3', null],
+ ['1.2.x', null]
].forEach(function(tuple) {
var range = tuple[0];
var version = tuple[1];
diff --git a/deps/npm/node_modules/semver/test/gtr.js b/deps/npm/node_modules/semver/test/gtr.js
index 8537fac0be..bbb87896c6 100644
--- a/deps/npm/node_modules/semver/test/gtr.js
+++ b/deps/npm/node_modules/semver/test/gtr.js
@@ -66,7 +66,7 @@ test('\ngtr tests', function(t) {
['<1', '1.0.0beta', true],
['< 1', '1.0.0beta', true],
['=0.7.x', '0.8.2'],
- ['<=0.7.x', '0.7.2']
+ ['<0.7.x', '0.7.2']
].forEach(function(tuple) {
var range = tuple[0];
var version = tuple[1];
diff --git a/deps/npm/node_modules/semver/test/index.js b/deps/npm/node_modules/semver/test/index.js
index 9f9a36d98f..de8acaedfb 100644
--- a/deps/npm/node_modules/semver/test/index.js
+++ b/deps/npm/node_modules/semver/test/index.js
@@ -201,6 +201,7 @@ test('\nrange tests', function(t) {
['~v0.5.4-pre', '0.5.5'],
['~v0.5.4-pre', '0.5.4'],
['=0.7.x', '0.7.2'],
+ ['<=0.7.x', '0.7.2'],
['>=0.7.x', '0.7.2'],
['<=0.7.x', '0.6.2'],
['~1.2.1 >=1.2.3', '1.2.3'],
@@ -290,7 +291,7 @@ test('\nnegative range tests', function(t) {
['~v0.5.4-beta', '0.5.4-alpha'],
['=0.7.x', '0.8.2'],
['>=0.7.x', '0.6.2'],
- ['<=0.7.x', '0.7.2'],
+ ['<0.7.x', '0.7.2'],
['<1.2.3', '1.2.3-beta'],
['=1.2.3', '1.2.3-beta'],
['>1.2', '1.2.8'],
@@ -312,8 +313,8 @@ test('\nnegative range tests', function(t) {
});
test('\nincrement versions test', function(t) {
- // [version, inc, result]
- // inc(version, inc) -> result
+// [version, inc, result, identifier]
+// inc(version, inc) -> result
[['1.2.3', 'major', '2.0.0'],
['1.2.3', 'minor', '1.3.0'],
['1.2.3', 'patch', '1.2.4'],
@@ -352,14 +353,59 @@ test('\nincrement versions test', function(t) {
['1.2.0', 'premajor', '2.0.0-0'],
['1.2.3-1', 'premajor', '2.0.0-0'],
['1.2.0-1', 'minor', '1.2.0'],
- ['1.0.0-1', 'major', '1.0.0']
+ ['1.0.0-1', 'major', '1.0.0'],
+
+ ['1.2.3', 'major', '2.0.0', false, 'dev'],
+ ['1.2.3', 'minor', '1.3.0', false, 'dev'],
+ ['1.2.3', 'patch', '1.2.4', false, 'dev'],
+ ['1.2.3tag', 'major', '2.0.0', true, 'dev'],
+ ['1.2.3-tag', 'major', '2.0.0', false, 'dev'],
+ ['1.2.3', 'fake', null, false, 'dev'],
+ ['1.2.0-0', 'patch', '1.2.0', false, 'dev'],
+ ['fake', 'major', null, false, 'dev'],
+ ['1.2.3-4', 'major', '2.0.0', false, 'dev'],
+ ['1.2.3-4', 'minor', '1.3.0', false, 'dev'],
+ ['1.2.3-4', 'patch', '1.2.3', false, 'dev'],
+ ['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'],
+ ['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'],
+ ['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'],
+ ['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'],
+ ['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
+ ['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
+ ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'],
+ ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
+ ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'],
+ ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
+ ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta', false, 'alpha'],
+ ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta', false, 'alpha'],
+ ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta', false, 'alpha'],
+ ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
+ ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1', false, 'alpha'],
+ ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2', false, 'alpha'],
+ ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3', false, 'alpha'],
+ ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
+ ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'],
+ ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'],
+ ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'],
+ ['1.2.0', 'prepatch', '1.2.1-dev.0', 'dev'],
+ ['1.2.0-1', 'prepatch', '1.2.1-dev.0', 'dev'],
+ ['1.2.0', 'preminor', '1.3.0-dev.0', 'dev'],
+ ['1.2.3-1', 'preminor', '1.3.0-dev.0', 'dev'],
+ ['1.2.0', 'premajor', '2.0.0-dev.0', 'dev'],
+ ['1.2.3-1', 'premajor', '2.0.0-dev.0', 'dev'],
+ ['1.2.0-1', 'minor', '1.2.0', 'dev'],
+ ['1.0.0-1', 'major', '1.0.0', 'dev'],
+ ['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev']
+
].forEach(function(v) {
var pre = v[0];
var what = v[1];
var wanted = v[2];
var loose = v[3];
- var found = inc(pre, what, loose);
- t.equal(found, wanted, 'inc(' + pre + ', ' + what + ') === ' + wanted);
+ var id = v[4];
+ var found = inc(pre, what, loose, id);
+ var cmd = 'inc(' + pre + ', ' + what + ', ' + id + ')';
+ t.equal(found, wanted, cmd + ' === ' + wanted);
});
t.end();
@@ -371,7 +417,7 @@ test('\nvalid range test', function(t) {
// translate ranges into their canonical form
[['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'],
['1.0.0', '1.0.0'],
- ['>=*', '>=0.0.0'],
+ ['>=*', '*'],
['', '*'],
['*', '*'],
['*', '*'],
@@ -458,7 +504,7 @@ test('\ncomparators test', function(t) {
// turn range into a set of individual comparators
[['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]],
['1.0.0', [['1.0.0']]],
- ['>=*', [['>=0.0.0']]],
+ ['>=*', [['']]],
['', [['']]],
['*', [['']]],
['*', [['']]],
@@ -522,7 +568,9 @@ test('\ncomparators test', function(t) {
['1 2', [['>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0']]],
['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]],
['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]],
- ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]]
+ ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]],
+ ['>*', [['<0.0.0']]],
+ ['<*', [['<0.0.0']]]
].forEach(function(v) {
var pre = v[0];
var wanted = v[1];
diff --git a/deps/npm/node_modules/sha/.npmignore b/deps/npm/node_modules/sha/.npmignore
index ac4d7d173b..fcfd944947 100644
--- a/deps/npm/node_modules/sha/.npmignore
+++ b/deps/npm/node_modules/sha/.npmignore
@@ -1,4 +1,4 @@
-node_modules
-test
-.gitignore
+node_modules
+test
+.gitignore
.travis.yml \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/LICENSE b/deps/npm/node_modules/sha/LICENSE
index 3d8f089d21..048a6f99d2 100644
--- a/deps/npm/node_modules/sha/LICENSE
+++ b/deps/npm/node_modules/sha/LICENSE
@@ -1,46 +1,46 @@
-Copyright (c) 2013 Forbes Lindesay
-
-The BSD License
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-The MIT License (MIT)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+Copyright (c) 2013 Forbes Lindesay
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/README.md b/deps/npm/node_modules/sha/README.md
index c881194c21..a2b300cc03 100644
--- a/deps/npm/node_modules/sha/README.md
+++ b/deps/npm/node_modules/sha/README.md
@@ -1,49 +1,49 @@
-# sha
-
-Check and get file hashes (using any algorithm)
-
-[![Build Status](https://img.shields.io/travis/ForbesLindesay/sha/master.svg)](https://travis-ci.org/ForbesLindesay/sha)
-[![Dependency Status](https://img.shields.io/gemnasium/ForbesLindesay/sha.svg)](https://gemnasium.com/ForbesLindesay/sha)
-[![NPM version](https://img.shields.io/npm/v/sha.svg)](http://badge.fury.io/js/sha)
-
-## Installation
-
- $ npm install sha
-
-## API
-
-### check(fileName, expected, [options,] cb) / checkSync(filename, expected, [options])
-
-Asynchronously check that `fileName` has a "hash" of `expected`. The callback will be called with either `null` or an error (indicating that they did not match).
-
-Options:
-
-- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
-
-### get(fileName, [options,] cb) / getSync(filename, [options])
-
-Asynchronously get the "hash" of `fileName`. The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.
-
-Options:
-
-- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
-
-### stream(expected, [options])
-
-Check the hash of a stream without ever buffering it. This is a pass through stream so you can do things like:
-
-```js
-fs.createReadStream('src')
- .pipe(sha.stream('expected'))
- .pipe(fs.createWriteStream('dest'))
-```
-
-`dest` will be a complete copy of `src` and an error will be emitted if the hash did not match `'expected'`.
-
-Options:
-
-- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
-
-## License
-
+# sha
+
+Check and get file hashes (using any algorithm)
+
+[![Build Status](https://img.shields.io/travis/ForbesLindesay/sha/master.svg)](https://travis-ci.org/ForbesLindesay/sha)
+[![Dependency Status](https://img.shields.io/gemnasium/ForbesLindesay/sha.svg)](https://gemnasium.com/ForbesLindesay/sha)
+[![NPM version](https://img.shields.io/npm/v/sha.svg)](http://badge.fury.io/js/sha)
+
+## Installation
+
+ $ npm install sha
+
+## API
+
+### check(fileName, expected, [options,] cb) / checkSync(filename, expected, [options])
+
+Asynchronously check that `fileName` has a "hash" of `expected`. The callback will be called with either `null` or an error (indicating that they did not match).
+
+Options:
+
+- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
+
+### get(fileName, [options,] cb) / getSync(filename, [options])
+
+Asynchronously get the "hash" of `fileName`. The callback will be called with an optional `error` object and the (lower cased) hex digest of the hash.
+
+Options:
+
+- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
+
+### stream(expected, [options])
+
+Check the hash of a stream without ever buffering it. This is a pass through stream so you can do things like:
+
+```js
+fs.createReadStream('src')
+ .pipe(sha.stream('expected'))
+ .pipe(fs.createWriteStream('dest'))
+```
+
+`dest` will be a complete copy of `src` and an error will be emitted if the hash did not match `'expected'`.
+
+Options:
+
+- algorithm: defaults to `sha1` and can be any of the algorithms supported by `crypto.createHash`
+
+## License
+
You may use this software under the BSD or MIT. Take your pick. If you want me to release it under another license, open a pull request. \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/index.js b/deps/npm/node_modules/sha/index.js
index 45f152c8d4..d50ac2fb92 100644
--- a/deps/npm/node_modules/sha/index.js
+++ b/deps/npm/node_modules/sha/index.js
@@ -1,120 +1,120 @@
-'use strict'
-
-var Transform = require('stream').Transform || require('readable-stream').Transform
-var crypto = require('crypto')
-var fs
-try {
- fs = require('graceful-fs')
-} catch (ex) {
- fs = require('fs')
-}
-try {
- process.binding('crypto')
-} catch (e) {
- var er = new Error( 'crypto binding not found.\n'
- + 'Please build node with openssl.\n'
- + e.message )
- throw er
-}
-
-exports.check = check
-exports.checkSync = checkSync
-exports.get = get
-exports.getSync = getSync
-exports.stream = stream
-
-function check(file, expected, options, cb) {
- if (typeof options === 'function') {
- cb = options
- options = undefined
- }
- expected = expected.toLowerCase().trim()
- get(file, options, function (er, actual) {
- if (er) {
- if (er.message) er.message += ' while getting shasum for ' + file
- return cb(er)
- }
- if (actual === expected) return cb(null)
- cb(new Error(
- 'shasum check failed for ' + file + '\n'
- + 'Expected: ' + expected + '\n'
- + 'Actual: ' + actual))
- })
-}
-function checkSync(file, expected, options) {
- expected = expected.toLowerCase().trim()
- var actual
- try {
- actual = getSync(file, options)
- } catch (er) {
- if (er.message) er.message += ' while getting shasum for ' + file
- throw er
- }
- if (actual !== expected) {
- var ex = new Error(
- 'shasum check failed for ' + file + '\n'
- + 'Expected: ' + expected + '\n'
- + 'Actual: ' + actual)
- throw ex
- }
-}
-
-
-function get(file, options, cb) {
- if (typeof options === 'function') {
- cb = options
- options = undefined
- }
- options = options || {}
- var algorithm = options.algorithm || 'sha1'
- var hash = crypto.createHash(algorithm)
- var source = fs.createReadStream(file)
- var errState = null
- source
- .on('error', function (er) {
- if (errState) return
- return cb(errState = er)
- })
- .on('data', function (chunk) {
- if (errState) return
- hash.update(chunk)
- })
- .on('end', function () {
- if (errState) return
- var actual = hash.digest("hex").toLowerCase().trim()
- cb(null, actual)
- })
-}
-
-function getSync(file, options) {
- options = options || {}
- var algorithm = options.algorithm || 'sha1'
- var hash = crypto.createHash(algorithm)
- var source = fs.readFileSync(file)
- hash.update(source)
- return hash.digest("hex").toLowerCase().trim()
-}
-
-function stream(expected, options) {
- expected = expected.toLowerCase().trim()
- options = options || {}
- var algorithm = options.algorithm || 'sha1'
- var hash = crypto.createHash(algorithm)
-
- var stream = new Transform()
- stream._transform = function (chunk, encoding, callback) {
- hash.update(chunk)
- stream.push(chunk)
- callback()
- }
- stream._flush = function (cb) {
- var actual = hash.digest("hex").toLowerCase().trim()
- if (actual === expected) return cb(null)
- cb(new Error(
- 'shasum check failed for:\n'
- + ' Expected: ' + expected + '\n'
- + ' Actual: ' + actual))
- this.push(null)
- }
- return stream
+'use strict'
+
+var Transform = require('stream').Transform || require('readable-stream').Transform
+var crypto = require('crypto')
+var fs
+try {
+ fs = require('graceful-fs')
+} catch (ex) {
+ fs = require('fs')
+}
+try {
+ process.binding('crypto')
+} catch (e) {
+ var er = new Error( 'crypto binding not found.\n'
+ + 'Please build node with openssl.\n'
+ + e.message )
+ throw er
+}
+
+exports.check = check
+exports.checkSync = checkSync
+exports.get = get
+exports.getSync = getSync
+exports.stream = stream
+
+function check(file, expected, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = undefined
+ }
+ expected = expected.toLowerCase().trim()
+ get(file, options, function (er, actual) {
+ if (er) {
+ if (er.message) er.message += ' while getting shasum for ' + file
+ return cb(er)
+ }
+ if (actual === expected) return cb(null)
+ cb(new Error(
+ 'shasum check failed for ' + file + '\n'
+ + 'Expected: ' + expected + '\n'
+ + 'Actual: ' + actual))
+ })
+}
+function checkSync(file, expected, options) {
+ expected = expected.toLowerCase().trim()
+ var actual
+ try {
+ actual = getSync(file, options)
+ } catch (er) {
+ if (er.message) er.message += ' while getting shasum for ' + file
+ throw er
+ }
+ if (actual !== expected) {
+ var ex = new Error(
+ 'shasum check failed for ' + file + '\n'
+ + 'Expected: ' + expected + '\n'
+ + 'Actual: ' + actual)
+ throw ex
+ }
+}
+
+
+function get(file, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = undefined
+ }
+ options = options || {}
+ var algorithm = options.algorithm || 'sha1'
+ var hash = crypto.createHash(algorithm)
+ var source = fs.createReadStream(file)
+ var errState = null
+ source
+ .on('error', function (er) {
+ if (errState) return
+ return cb(errState = er)
+ })
+ .on('data', function (chunk) {
+ if (errState) return
+ hash.update(chunk)
+ })
+ .on('end', function () {
+ if (errState) return
+ var actual = hash.digest("hex").toLowerCase().trim()
+ cb(null, actual)
+ })
+}
+
+function getSync(file, options) {
+ options = options || {}
+ var algorithm = options.algorithm || 'sha1'
+ var hash = crypto.createHash(algorithm)
+ var source = fs.readFileSync(file)
+ hash.update(source)
+ return hash.digest("hex").toLowerCase().trim()
+}
+
+function stream(expected, options) {
+ expected = expected.toLowerCase().trim()
+ options = options || {}
+ var algorithm = options.algorithm || 'sha1'
+ var hash = crypto.createHash(algorithm)
+
+ var stream = new Transform()
+ stream._transform = function (chunk, encoding, callback) {
+ hash.update(chunk)
+ stream.push(chunk)
+ callback()
+ }
+ stream._flush = function (cb) {
+ var actual = hash.digest("hex").toLowerCase().trim()
+ if (actual === expected) return cb(null)
+ cb(new Error(
+ 'shasum check failed for:\n'
+ + ' Expected: ' + expected + '\n'
+ + ' Actual: ' + actual))
+ this.push(null)
+ }
+ return stream
} \ No newline at end of file
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE b/deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE
index 0c44ae716d..e3d4e695a4 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/LICENSE
@@ -1,27 +1,18 @@
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-The BSD License
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/README.md b/deps/npm/node_modules/sha/node_modules/readable-stream/README.md
index 34c1189792..e46b823903 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/README.md
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/README.md
@@ -2,8 +2,8 @@
***Node-core streams for userland***
-[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true)](https://nodei.co/npm/readable-stream/)
-[![NPM](https://nodei.co/npm-dl/readable-stream.png)](https://nodei.co/npm/readable-stream/)
+[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/)
+[![NPM](https://nodei.co/npm-dl/readable-stream.png&months=6&height=3)](https://nodei.co/npm/readable-stream/)
This package is a mirror of the Streams2 and Streams3 implementations in Node-core.
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/float.patch b/deps/npm/node_modules/sha/node_modules/readable-stream/float.patch
new file mode 100644
index 0000000000..b984607a41
--- /dev/null
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/float.patch
@@ -0,0 +1,923 @@
+diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js
+index c5a741c..a2e0d8e 100644
+--- a/lib/_stream_duplex.js
++++ b/lib/_stream_duplex.js
+@@ -26,8 +26,8 @@
+
+ module.exports = Duplex;
+ var util = require('util');
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('./_stream_readable');
++var Writable = require('./_stream_writable');
+
+ util.inherits(Duplex, Readable);
+
+diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js
+index a5e9864..330c247 100644
+--- a/lib/_stream_passthrough.js
++++ b/lib/_stream_passthrough.js
+@@ -25,7 +25,7 @@
+
+ module.exports = PassThrough;
+
+-var Transform = require('_stream_transform');
++var Transform = require('./_stream_transform');
+ var util = require('util');
+ util.inherits(PassThrough, Transform);
+
+diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
+index 0c3fe3e..90a8298 100644
+--- a/lib/_stream_readable.js
++++ b/lib/_stream_readable.js
+@@ -23,10 +23,34 @@ module.exports = Readable;
+ Readable.ReadableState = ReadableState;
+
+ var EE = require('events').EventEmitter;
++if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
++ return emitter.listeners(type).length;
++};
++
++if (!global.setImmediate) global.setImmediate = function setImmediate(fn) {
++ return setTimeout(fn, 0);
++};
++if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) {
++ return clearTimeout(i);
++};
++
+ var Stream = require('stream');
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ var StringDecoder;
+-var debug = util.debuglog('stream');
++var debug;
++if (util.debuglog)
++ debug = util.debuglog('stream');
++else try {
++ debug = require('debuglog')('stream');
++} catch (er) {
++ debug = function() {};
++}
+
+ util.inherits(Readable, Stream);
+
+@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) {
+
+
+ function onEofChunk(stream, state) {
+- if (state.decoder && !state.ended) {
++ if (state.decoder && !state.ended && state.decoder.end) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js
+index b1f9fcc..b0caf57 100644
+--- a/lib/_stream_transform.js
++++ b/lib/_stream_transform.js
+@@ -64,8 +64,14 @@
+
+ module.exports = Transform;
+
+-var Duplex = require('_stream_duplex');
++var Duplex = require('./_stream_duplex');
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ util.inherits(Transform, Duplex);
+
+
+diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
+index ba2e920..f49288b 100644
+--- a/lib/_stream_writable.js
++++ b/lib/_stream_writable.js
+@@ -27,6 +27,12 @@ module.exports = Writable;
+ Writable.WritableState = WritableState;
+
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ var Stream = require('stream');
+
+ util.inherits(Writable, Stream);
+@@ -119,7 +125,7 @@ function WritableState(options, stream) {
+ function Writable(options) {
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+- if (!(this instanceof Writable) && !(this instanceof Stream.Duplex))
++ if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex')))
+ return new Writable(options);
+
+ this._writableState = new WritableState(options, this);
+diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js
+index e3787e4..8cd2127 100644
+--- a/test/simple/test-stream-big-push.js
++++ b/test/simple/test-stream-big-push.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+ var str = 'asdfasdfasdfasdfasdf';
+
+ var r = new stream.Readable({
+diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js
+index bb73777..d40efc7 100644
+--- a/test/simple/test-stream-end-paused.js
++++ b/test/simple/test-stream-end-paused.js
+@@ -25,7 +25,7 @@ var gotEnd = false;
+
+ // Make sure we don't miss the end event for paused 0-length streams
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var stream = new Readable();
+ var calledRead = false;
+ stream._read = function() {
+diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js
+index b46ee90..0be8366 100644
+--- a/test/simple/test-stream-pipe-after-end.js
++++ b/test/simple/test-stream-pipe-after-end.js
+@@ -22,8 +22,8 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var util = require('util');
+
+ util.inherits(TestReadable, Readable);
+diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js
+deleted file mode 100644
+index f689358..0000000
+--- a/test/simple/test-stream-pipe-cleanup.js
++++ /dev/null
+@@ -1,122 +0,0 @@
+-// Copyright Joyent, Inc. and other Node contributors.
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a
+-// copy of this software and associated documentation files (the
+-// "Software"), to deal in the Software without restriction, including
+-// without limitation the rights to use, copy, modify, merge, publish,
+-// distribute, sublicense, and/or sell copies of the Software, and to permit
+-// persons to whom the Software is furnished to do so, subject to the
+-// following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included
+-// in all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+-
+-// This test asserts that Stream.prototype.pipe does not leave listeners
+-// hanging on the source or dest.
+-
+-var common = require('../common');
+-var stream = require('stream');
+-var assert = require('assert');
+-var util = require('util');
+-
+-function Writable() {
+- this.writable = true;
+- this.endCalls = 0;
+- stream.Stream.call(this);
+-}
+-util.inherits(Writable, stream.Stream);
+-Writable.prototype.end = function() {
+- this.endCalls++;
+-};
+-
+-Writable.prototype.destroy = function() {
+- this.endCalls++;
+-};
+-
+-function Readable() {
+- this.readable = true;
+- stream.Stream.call(this);
+-}
+-util.inherits(Readable, stream.Stream);
+-
+-function Duplex() {
+- this.readable = true;
+- Writable.call(this);
+-}
+-util.inherits(Duplex, Writable);
+-
+-var i = 0;
+-var limit = 100;
+-
+-var w = new Writable();
+-
+-var r;
+-
+-for (i = 0; i < limit; i++) {
+- r = new Readable();
+- r.pipe(w);
+- r.emit('end');
+-}
+-assert.equal(0, r.listeners('end').length);
+-assert.equal(limit, w.endCalls);
+-
+-w.endCalls = 0;
+-
+-for (i = 0; i < limit; i++) {
+- r = new Readable();
+- r.pipe(w);
+- r.emit('close');
+-}
+-assert.equal(0, r.listeners('close').length);
+-assert.equal(limit, w.endCalls);
+-
+-w.endCalls = 0;
+-
+-r = new Readable();
+-
+-for (i = 0; i < limit; i++) {
+- w = new Writable();
+- r.pipe(w);
+- w.emit('close');
+-}
+-assert.equal(0, w.listeners('close').length);
+-
+-r = new Readable();
+-w = new Writable();
+-var d = new Duplex();
+-r.pipe(d); // pipeline A
+-d.pipe(w); // pipeline B
+-assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup
+-assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup
+-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
+-assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 1); // B.cleanup
+-
+-r.emit('end');
+-assert.equal(d.endCalls, 1);
+-assert.equal(w.endCalls, 0);
+-assert.equal(r.listeners('end').length, 0);
+-assert.equal(r.listeners('close').length, 0);
+-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
+-assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 1); // B.cleanup
+-
+-d.emit('end');
+-assert.equal(d.endCalls, 1);
+-assert.equal(w.endCalls, 1);
+-assert.equal(r.listeners('end').length, 0);
+-assert.equal(r.listeners('close').length, 0);
+-assert.equal(d.listeners('end').length, 0);
+-assert.equal(d.listeners('close').length, 0);
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 0);
+diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js
+index c5d724b..c7d6b7d 100644
+--- a/test/simple/test-stream-pipe-error-handling.js
++++ b/test/simple/test-stream-pipe-error-handling.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var Stream = require('stream').Stream;
++var Stream = require('../../').Stream;
+
+ (function testErrorListenerCatches() {
+ var source = new Stream();
+diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js
+index cb9d5fe..56f8d61 100644
+--- a/test/simple/test-stream-pipe-event.js
++++ b/test/simple/test-stream-pipe-event.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common');
+-var stream = require('stream');
++var stream = require('../../');
+ var assert = require('assert');
+ var util = require('util');
+
+diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js
+index f2e6ec2..a5c9bf9 100644
+--- a/test/simple/test-stream-push-order.js
++++ b/test/simple/test-stream-push-order.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var assert = require('assert');
+
+ var s = new Readable({
+diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js
+index 06f43dc..1701a9a 100644
+--- a/test/simple/test-stream-push-strings.js
++++ b/test/simple/test-stream-push-strings.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var util = require('util');
+
+ util.inherits(MyStream, Readable);
+diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js
+index ba6a577..a8e6f7b 100644
+--- a/test/simple/test-stream-readable-event.js
++++ b/test/simple/test-stream-readable-event.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ (function first() {
+ // First test, not reading when the readable is added.
+diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js
+index 2891ad6..11689ba 100644
+--- a/test/simple/test-stream-readable-flow-recursion.js
++++ b/test/simple/test-stream-readable-flow-recursion.js
+@@ -27,7 +27,7 @@ var assert = require('assert');
+ // more data continuously, but without triggering a nextTick
+ // warning or RangeError.
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ // throw an error if we trigger a nextTick warning.
+ process.throwDeprecation = true;
+diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js
+index 0c96476..7827538 100644
+--- a/test/simple/test-stream-unshift-empty-chunk.js
++++ b/test/simple/test-stream-unshift-empty-chunk.js
+@@ -24,7 +24,7 @@ var assert = require('assert');
+
+ // This test verifies that stream.unshift(Buffer(0)) or
+ // stream.unshift('') does not set state.reading=false.
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ var r = new Readable();
+ var nChunks = 10;
+diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js
+index 83fd9fa..17c18aa 100644
+--- a/test/simple/test-stream-unshift-read-race.js
++++ b/test/simple/test-stream-unshift-read-race.js
+@@ -29,7 +29,7 @@ var assert = require('assert');
+ // 3. push() after the EOF signaling null is an error.
+ // 4. _read() is not called after pushing the EOF null chunk.
+
+-var stream = require('stream');
++var stream = require('../../');
+ var hwm = 10;
+ var r = stream.Readable({ highWaterMark: hwm });
+ var chunks = 10;
+@@ -51,7 +51,14 @@ r._read = function(n) {
+
+ function push(fast) {
+ assert(!pushedNull, 'push() after null push');
+- var c = pos >= data.length ? null : data.slice(pos, pos + n);
++ var c;
++ if (pos >= data.length)
++ c = null;
++ else {
++ if (n + pos > data.length)
++ n = data.length - pos;
++ c = data.slice(pos, pos + n);
++ }
+ pushedNull = c === null;
+ if (fast) {
+ pos += n;
+diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js
+index 5b49e6e..b5321f3 100644
+--- a/test/simple/test-stream-writev.js
++++ b/test/simple/test-stream-writev.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var stream = require('stream');
++var stream = require('../../');
+
+ var queue = [];
+ for (var decode = 0; decode < 2; decode++) {
+diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js
+index 3814bf0..248c1be 100644
+--- a/test/simple/test-stream2-basic.js
++++ b/test/simple/test-stream2-basic.js
+@@ -21,7 +21,7 @@
+
+
+ var common = require('../common.js');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js
+index 6cdd4e9..f0fa84b 100644
+--- a/test/simple/test-stream2-compatibility.js
++++ b/test/simple/test-stream2-compatibility.js
+@@ -21,7 +21,7 @@
+
+
+ var common = require('../common.js');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js
+index 39b274f..006a19b 100644
+--- a/test/simple/test-stream2-finish-pipe.js
++++ b/test/simple/test-stream2-finish-pipe.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var stream = require('stream');
++var stream = require('../../');
+ var Buffer = require('buffer').Buffer;
+
+ var r = new stream.Readable();
+diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js
+deleted file mode 100644
+index e162406..0000000
+--- a/test/simple/test-stream2-fs.js
++++ /dev/null
+@@ -1,72 +0,0 @@
+-// Copyright Joyent, Inc. and other Node contributors.
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a
+-// copy of this software and associated documentation files (the
+-// "Software"), to deal in the Software without restriction, including
+-// without limitation the rights to use, copy, modify, merge, publish,
+-// distribute, sublicense, and/or sell copies of the Software, and to permit
+-// persons to whom the Software is furnished to do so, subject to the
+-// following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included
+-// in all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+-
+-
+-var common = require('../common.js');
+-var R = require('_stream_readable');
+-var assert = require('assert');
+-
+-var fs = require('fs');
+-var FSReadable = fs.ReadStream;
+-
+-var path = require('path');
+-var file = path.resolve(common.fixturesDir, 'x1024.txt');
+-
+-var size = fs.statSync(file).size;
+-
+-var expectLengths = [1024];
+-
+-var util = require('util');
+-var Stream = require('stream');
+-
+-util.inherits(TestWriter, Stream);
+-
+-function TestWriter() {
+- Stream.apply(this);
+- this.buffer = [];
+- this.length = 0;
+-}
+-
+-TestWriter.prototype.write = function(c) {
+- this.buffer.push(c.toString());
+- this.length += c.length;
+- return true;
+-};
+-
+-TestWriter.prototype.end = function(c) {
+- if (c) this.buffer.push(c.toString());
+- this.emit('results', this.buffer);
+-}
+-
+-var r = new FSReadable(file);
+-var w = new TestWriter();
+-
+-w.on('results', function(res) {
+- console.error(res, w.length);
+- assert.equal(w.length, size);
+- var l = 0;
+- assert.deepEqual(res.map(function (c) {
+- return c.length;
+- }), expectLengths);
+- console.log('ok');
+-});
+-
+-r.pipe(w);
+diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js
+deleted file mode 100644
+index 15cffc2..0000000
+--- a/test/simple/test-stream2-httpclient-response-end.js
++++ /dev/null
+@@ -1,52 +0,0 @@
+-// Copyright Joyent, Inc. and other Node contributors.
+-//
+-// Permission is hereby granted, free of charge, to any person obtaining a
+-// copy of this software and associated documentation files (the
+-// "Software"), to deal in the Software without restriction, including
+-// without limitation the rights to use, copy, modify, merge, publish,
+-// distribute, sublicense, and/or sell copies of the Software, and to permit
+-// persons to whom the Software is furnished to do so, subject to the
+-// following conditions:
+-//
+-// The above copyright notice and this permission notice shall be included
+-// in all copies or substantial portions of the Software.
+-//
+-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+-
+-var common = require('../common.js');
+-var assert = require('assert');
+-var http = require('http');
+-var msg = 'Hello';
+-var readable_event = false;
+-var end_event = false;
+-var server = http.createServer(function(req, res) {
+- res.writeHead(200, {'Content-Type': 'text/plain'});
+- res.end(msg);
+-}).listen(common.PORT, function() {
+- http.get({port: common.PORT}, function(res) {
+- var data = '';
+- res.on('readable', function() {
+- console.log('readable event');
+- readable_event = true;
+- data += res.read();
+- });
+- res.on('end', function() {
+- console.log('end event');
+- end_event = true;
+- assert.strictEqual(msg, data);
+- server.close();
+- });
+- });
+-});
+-
+-process.on('exit', function() {
+- assert(readable_event);
+- assert(end_event);
+-});
+-
+diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js
+index 2fbfbca..667985b 100644
+--- a/test/simple/test-stream2-large-read-stall.js
++++ b/test/simple/test-stream2-large-read-stall.js
+@@ -30,7 +30,7 @@ var PUSHSIZE = 20;
+ var PUSHCOUNT = 1000;
+ var HWM = 50;
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var r = new Readable({
+ highWaterMark: HWM
+ });
+@@ -39,23 +39,23 @@ var rs = r._readableState;
+ r._read = push;
+
+ r.on('readable', function() {
+- console.error('>> readable');
++ //console.error('>> readable');
+ do {
+- console.error(' > read(%d)', READSIZE);
++ //console.error(' > read(%d)', READSIZE);
+ var ret = r.read(READSIZE);
+- console.error(' < %j (%d remain)', ret && ret.length, rs.length);
++ //console.error(' < %j (%d remain)', ret && ret.length, rs.length);
+ } while (ret && ret.length === READSIZE);
+
+- console.error('<< after read()',
+- ret && ret.length,
+- rs.needReadable,
+- rs.length);
++ //console.error('<< after read()',
++ // ret && ret.length,
++ // rs.needReadable,
++ // rs.length);
+ });
+
+ var endEmitted = false;
+ r.on('end', function() {
+ endEmitted = true;
+- console.error('end');
++ //console.error('end');
+ });
+
+ var pushes = 0;
+@@ -64,11 +64,11 @@ function push() {
+ return;
+
+ if (pushes++ === PUSHCOUNT) {
+- console.error(' push(EOF)');
++ //console.error(' push(EOF)');
+ return r.push(null);
+ }
+
+- console.error(' push #%d', pushes);
++ //console.error(' push #%d', pushes);
+ if (r.push(new Buffer(PUSHSIZE)))
+ setTimeout(push);
+ }
+diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js
+index 3e6931d..ff47d89 100644
+--- a/test/simple/test-stream2-objects.js
++++ b/test/simple/test-stream2-objects.js
+@@ -21,8 +21,8 @@
+
+
+ var common = require('../common.js');
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var assert = require('assert');
+
+ // tiny node-tap lookalike.
+diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js
+index cf7531c..e3f3e4e 100644
+--- a/test/simple/test-stream2-pipe-error-handling.js
++++ b/test/simple/test-stream2-pipe-error-handling.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+
+ (function testErrorListenerCatches() {
+ var count = 1000;
+diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js
+index 5e8e3cb..53b2616 100755
+--- a/test/simple/test-stream2-pipe-error-once-listener.js
++++ b/test/simple/test-stream2-pipe-error-once-listener.js
+@@ -24,7 +24,7 @@ var common = require('../common.js');
+ var assert = require('assert');
+
+ var util = require('util');
+-var stream = require('stream');
++var stream = require('../../');
+
+
+ var Read = function() {
+diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js
+index b63edc3..eb2b0e9 100644
+--- a/test/simple/test-stream2-push.js
++++ b/test/simple/test-stream2-push.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var stream = require('stream');
++var stream = require('../../');
+ var Readable = stream.Readable;
+ var Writable = stream.Writable;
+ var assert = require('assert');
+diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js
+index e8a7305..9740a47 100644
+--- a/test/simple/test-stream2-read-sync-stack.js
++++ b/test/simple/test-stream2-read-sync-stack.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var r = new Readable();
+ var N = 256 * 1024;
+
+diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
+index cd30178..4b1659d 100644
+--- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js
++++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
+@@ -22,10 +22,9 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ test1();
+-test2();
+
+ function test1() {
+ var r = new Readable();
+@@ -88,31 +87,3 @@ function test1() {
+ console.log('ok');
+ });
+ }
+-
+-function test2() {
+- var r = new Readable({ encoding: 'base64' });
+- var reads = 5;
+- r._read = function(n) {
+- if (!reads--)
+- return r.push(null); // EOF
+- else
+- return r.push(new Buffer('x'));
+- };
+-
+- var results = [];
+- function flow() {
+- var chunk;
+- while (null !== (chunk = r.read()))
+- results.push(chunk + '');
+- }
+- r.on('readable', flow);
+- r.on('end', function() {
+- results.push('EOF');
+- });
+- flow();
+-
+- process.on('exit', function() {
+- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]);
+- console.log('ok');
+- });
+-}
+diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js
+index 7c96ffe..04a96f5 100644
+--- a/test/simple/test-stream2-readable-from-list.js
++++ b/test/simple/test-stream2-readable-from-list.js
+@@ -21,7 +21,7 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var fromList = require('_stream_readable')._fromList;
++var fromList = require('../../lib/_stream_readable')._fromList;
+
+ // tiny node-tap lookalike.
+ var tests = [];
+diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js
+index 675da8e..51fd3d5 100644
+--- a/test/simple/test-stream2-readable-legacy-drain.js
++++ b/test/simple/test-stream2-readable-legacy-drain.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Stream = require('stream');
++var Stream = require('../../');
+ var Readable = Stream.Readable;
+
+ var r = new Readable();
+diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js
+index 7314ae7..c971898 100644
+--- a/test/simple/test-stream2-readable-non-empty-end.js
++++ b/test/simple/test-stream2-readable-non-empty-end.js
+@@ -21,7 +21,7 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var Readable = require('_stream_readable');
++var Readable = require('../../lib/_stream_readable');
+
+ var len = 0;
+ var chunks = new Array(10);
+diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js
+index 2e5cf25..fd8a3dc 100644
+--- a/test/simple/test-stream2-readable-wrap-empty.js
++++ b/test/simple/test-stream2-readable-wrap-empty.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
++var Readable = require('../../lib/_stream_readable');
+ var EE = require('events').EventEmitter;
+
+ var oldStream = new EE();
+diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js
+index 90eea01..6b177f7 100644
+--- a/test/simple/test-stream2-readable-wrap.js
++++ b/test/simple/test-stream2-readable-wrap.js
+@@ -22,8 +22,8 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var EE = require('events').EventEmitter;
+
+ var testRuns = 0, completedRuns = 0;
+diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js
+index 5d2c32a..685531b 100644
+--- a/test/simple/test-stream2-set-encoding.js
++++ b/test/simple/test-stream2-set-encoding.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var util = require('util');
+
+ // tiny node-tap lookalike.
+diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js
+index 9c9ddd8..a0cacc6 100644
+--- a/test/simple/test-stream2-transform.js
++++ b/test/simple/test-stream2-transform.js
+@@ -21,8 +21,8 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var PassThrough = require('_stream_passthrough');
+-var Transform = require('_stream_transform');
++var PassThrough = require('../../').PassThrough;
++var Transform = require('../../').Transform;
+
+ // tiny node-tap lookalike.
+ var tests = [];
+diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js
+index d66dc3c..365b327 100644
+--- a/test/simple/test-stream2-unpipe-drain.js
++++ b/test/simple/test-stream2-unpipe-drain.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+ var crypto = require('crypto');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js
+index 99f8746..17c92ae 100644
+--- a/test/simple/test-stream2-unpipe-leak.js
++++ b/test/simple/test-stream2-unpipe-leak.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+
+ var chunk = new Buffer('hallo');
+
+diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js
+index 704100c..209c3a6 100644
+--- a/test/simple/test-stream2-writable.js
++++ b/test/simple/test-stream2-writable.js
+@@ -20,8 +20,8 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var W = require('_stream_writable');
+-var D = require('_stream_duplex');
++var W = require('../../').Writable;
++var D = require('../../').Duplex;
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js
+index b91bde3..2f72c15 100644
+--- a/test/simple/test-stream3-pause-then-read.js
++++ b/test/simple/test-stream3-pause-then-read.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var stream = require('stream');
++var stream = require('../../');
+ var Readable = stream.Readable;
+ var Writable = stream.Writable;
+
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js
index 630722099e..19ab358898 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_readable.js
@@ -49,15 +49,29 @@ util.inherits = require('inherits');
var StringDecoder;
+
+/*<replacement>*/
+var debug = require('util');
+if (debug && debug.debuglog) {
+ debug = debug.debuglog('stream');
+} else {
+ debug = function () {};
+}
+/*</replacement>*/
+
+
util.inherits(Readable, Stream);
function ReadableState(options, stream) {
+ var Duplex = require('./_stream_duplex');
+
options = options || {};
// the point at which it stops calling _read() to fill the buffer
// Note: 0 is a valid value, means "don't call _read preemptively ever"
var hwm = options.highWaterMark;
- this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
@@ -66,19 +80,13 @@ function ReadableState(options, stream) {
this.length = 0;
this.pipes = null;
this.pipesCount = 0;
- this.flowing = false;
+ this.flowing = null;
this.ended = false;
this.endEmitted = false;
this.reading = false;
- // In streams that never have any data, and do push(null) right away,
- // the consumer can miss the 'end' event if they do some I/O before
- // consuming the stream. So, we don't emit('end') until some reading
- // happens.
- this.calledRead = false;
-
// a flag to be able to tell if the onwrite cb is called immediately,
- // or on a later tick. We set this to true at first, becuase any
+ // or on a later tick. We set this to true at first, because any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
@@ -94,6 +102,9 @@ function ReadableState(options, stream) {
// make all the buffer merging and length checks go away
this.objectMode = !!options.objectMode;
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.readableObjectMode;
+
// Crypto is kind of old and crusty. Historically, its default string
// encoding is 'binary' so we have to make this configurable.
// Everything else in the universe uses 'utf8', though.
@@ -120,6 +131,8 @@ function ReadableState(options, stream) {
}
function Readable(options) {
+ var Duplex = require('./_stream_duplex');
+
if (!(this instanceof Readable))
return new Readable(options);
@@ -138,7 +151,7 @@ function Readable(options) {
Readable.prototype.push = function(chunk, encoding) {
var state = this._readableState;
- if (typeof chunk === 'string' && !state.objectMode) {
+ if (util.isString(chunk) && !state.objectMode) {
encoding = encoding || state.defaultEncoding;
if (encoding !== state.encoding) {
chunk = new Buffer(chunk, encoding);
@@ -159,7 +172,7 @@ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk);
if (er) {
stream.emit('error', er);
- } else if (chunk === null || chunk === undefined) {
+ } else if (util.isNullOrUndefined(chunk)) {
state.reading = false;
if (!state.ended)
onEofChunk(stream, state);
@@ -174,17 +187,24 @@ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
if (state.decoder && !addToFront && !encoding)
chunk = state.decoder.write(chunk);
- // update the buffer info.
- state.length += state.objectMode ? 1 : chunk.length;
- if (addToFront) {
- state.buffer.unshift(chunk);
- } else {
+ if (!addToFront)
state.reading = false;
- state.buffer.push(chunk);
- }
- if (state.needReadable)
- emitReadable(stream);
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront)
+ state.buffer.unshift(chunk);
+ else
+ state.buffer.push(chunk);
+
+ if (state.needReadable)
+ emitReadable(stream);
+ }
maybeReadMore(stream, state);
}
@@ -217,6 +237,7 @@ Readable.prototype.setEncoding = function(enc) {
StringDecoder = require('string_decoder/').StringDecoder;
this._readableState.decoder = new StringDecoder(enc);
this._readableState.encoding = enc;
+ return this;
};
// Don't raise the hwm > 128MB
@@ -240,7 +261,7 @@ function howMuchToRead(n, state) {
if (state.objectMode)
return n === 0 ? 0 : 1;
- if (n === null || isNaN(n)) {
+ if (isNaN(n) || util.isNull(n)) {
// only flow one buffer at a time
if (state.flowing && state.buffer.length)
return state.buffer[0].length;
@@ -272,12 +293,11 @@ function howMuchToRead(n, state) {
// you can override either this method, or the async _read(n) below.
Readable.prototype.read = function(n) {
+ debug('read', n);
var state = this._readableState;
- state.calledRead = true;
var nOrig = n;
- var ret;
- if (typeof n !== 'number' || n > 0)
+ if (!util.isNumber(n) || n > 0)
state.emittedReadable = false;
// if we're doing read(0) to trigger a readable event, but we
@@ -286,7 +306,11 @@ Readable.prototype.read = function(n) {
if (n === 0 &&
state.needReadable &&
(state.length >= state.highWaterMark || state.ended)) {
- emitReadable(this);
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended)
+ endReadable(this);
+ else
+ emitReadable(this);
return null;
}
@@ -294,28 +318,9 @@ Readable.prototype.read = function(n) {
// if we've ended, and we're now clear, then finish it up.
if (n === 0 && state.ended) {
- ret = null;
-
- // In cases where the decoder did not receive enough data
- // to produce a full chunk, then immediately received an
- // EOF, state.buffer will contain [<Buffer >, <Buffer 00 ...>].
- // howMuchToRead will see this and coerce the amount to
- // read to zero (because it's looking at the length of the
- // first <Buffer > in state.buffer), and we'll end up here.
- //
- // This can only happen via state.decoder -- no other venue
- // exists for pushing a zero-length chunk into state.buffer
- // and triggering this behavior. In this case, we return our
- // remaining data and end the stream, if appropriate.
- if (state.length > 0 && state.decoder) {
- ret = fromList(n, state);
- state.length -= ret.length;
- }
-
if (state.length === 0)
endReadable(this);
-
- return ret;
+ return null;
}
// All the actual chunk generation logic needs to be
@@ -342,17 +347,23 @@ Readable.prototype.read = function(n) {
// if we need a readable event, then we need to do some reading.
var doRead = state.needReadable;
+ debug('need readable', doRead);
// if we currently have less than the highWaterMark, then also read some
- if (state.length - n <= state.highWaterMark)
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
doRead = true;
+ debug('length less than watermark', doRead);
+ }
// however, if we've ended, then there's no point, and if we're already
// reading, then it's unnecessary.
- if (state.ended || state.reading)
+ if (state.ended || state.reading) {
doRead = false;
+ debug('reading or ended', doRead);
+ }
if (doRead) {
+ debug('do read');
state.reading = true;
state.sync = true;
// if the length is currently zero, then we *need* a readable event.
@@ -363,18 +374,18 @@ Readable.prototype.read = function(n) {
state.sync = false;
}
- // If _read called its callback synchronously, then `reading`
- // will be false, and we need to re-evaluate how much data we
- // can return to the user.
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
if (doRead && !state.reading)
n = howMuchToRead(nOrig, state);
+ var ret;
if (n > 0)
ret = fromList(n, state);
else
ret = null;
- if (ret === null) {
+ if (util.isNull(ret)) {
state.needReadable = true;
n = 0;
}
@@ -386,21 +397,21 @@ Readable.prototype.read = function(n) {
if (state.length === 0 && !state.ended)
state.needReadable = true;
- // If we happened to read() exactly the remaining amount in the
- // buffer, and the EOF has been seen at this point, then make sure
- // that we emit 'end' on the very next tick.
- if (state.ended && !state.endEmitted && state.length === 0)
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended && state.length === 0)
endReadable(this);
+ if (!util.isNull(ret))
+ this.emit('data', ret);
+
return ret;
};
function chunkInvalid(state, chunk) {
var er = null;
- if (!Buffer.isBuffer(chunk) &&
- 'string' !== typeof chunk &&
- chunk !== null &&
- chunk !== undefined &&
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
!state.objectMode) {
er = new TypeError('Invalid non-string/buffer chunk');
}
@@ -418,12 +429,8 @@ function onEofChunk(stream, state) {
}
state.ended = true;
- // if we've ended and we have some data left, then emit
- // 'readable' now to make sure it gets picked up.
- if (state.length > 0)
- emitReadable(stream);
- else
- endReadable(stream);
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
}
// Don't emit readable right away in sync mode, because this can trigger
@@ -432,20 +439,22 @@ function onEofChunk(stream, state) {
function emitReadable(stream) {
var state = stream._readableState;
state.needReadable = false;
- if (state.emittedReadable)
- return;
-
- state.emittedReadable = true;
- if (state.sync)
- process.nextTick(function() {
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
emitReadable_(stream);
- });
- else
- emitReadable_(stream);
+ }
}
function emitReadable_(stream) {
+ debug('emit readable');
stream.emit('readable');
+ flow(stream);
}
@@ -468,6 +477,7 @@ function maybeReadMore_(stream, state) {
var len = state.length;
while (!state.reading && !state.flowing && !state.ended &&
state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
stream.read(0);
if (len === state.length)
// didn't get any data, stop spinning.
@@ -502,6 +512,7 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
break;
}
state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
dest !== process.stdout &&
@@ -515,11 +526,14 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
dest.on('unpipe', onunpipe);
function onunpipe(readable) {
- if (readable !== src) return;
- cleanup();
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
}
function onend() {
+ debug('onend');
dest.end();
}
@@ -531,6 +545,7 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
dest.on('drain', ondrain);
function cleanup() {
+ debug('cleanup');
// cleanup event handlers once the pipe is broken
dest.removeListener('close', onclose);
dest.removeListener('finish', onfinish);
@@ -539,19 +554,34 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
dest.removeListener('unpipe', onunpipe);
src.removeListener('end', onend);
src.removeListener('end', cleanup);
+ src.removeListener('data', ondata);
// if the reader is waiting for a drain event from this
// specific writer, then it would cause it to never start
// flowing again.
// So, if this is awaiting a drain, then we just call it now.
// If we don't know, then assume that we are waiting for one.
- if (!dest._writableState || dest._writableState.needDrain)
+ if (state.awaitDrain &&
+ (!dest._writableState || dest._writableState.needDrain))
ondrain();
}
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ if (false === ret) {
+ debug('false write response, pause',
+ src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ src.pause();
+ }
+ }
+
// if the dest has an error, then stop piping into it.
// however, don't suppress the throwing behavior for this.
function onerror(er) {
+ debug('onerror', er);
unpipe();
dest.removeListener('error', onerror);
if (EE.listenerCount(dest, 'error') === 0)
@@ -575,12 +605,14 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
}
dest.once('close', onclose);
function onfinish() {
+ debug('onfinish');
dest.removeListener('close', onclose);
unpipe();
}
dest.once('finish', onfinish);
function unpipe() {
+ debug('unpipe');
src.unpipe(dest);
}
@@ -589,16 +621,8 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
// start the flow if it hasn't been started already.
if (!state.flowing) {
- // the handler that waits for readable events after all
- // the data gets sucked out in flow.
- // This would be easier to follow with a .once() handler
- // in flow(), but that is too slow.
- this.on('readable', pipeOnReadable);
-
- state.flowing = true;
- process.nextTick(function() {
- flow(src);
- });
+ debug('pipe resume');
+ src.resume();
}
return dest;
@@ -606,63 +630,15 @@ Readable.prototype.pipe = function(dest, pipeOpts) {
function pipeOnDrain(src) {
return function() {
- var dest = this;
var state = src._readableState;
- state.awaitDrain--;
- if (state.awaitDrain === 0)
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain)
+ state.awaitDrain--;
+ if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+ state.flowing = true;
flow(src);
- };
-}
-
-function flow(src) {
- var state = src._readableState;
- var chunk;
- state.awaitDrain = 0;
-
- function write(dest, i, list) {
- var written = dest.write(chunk);
- if (false === written) {
- state.awaitDrain++;
}
- }
-
- while (state.pipesCount && null !== (chunk = src.read())) {
-
- if (state.pipesCount === 1)
- write(state.pipes, 0, null);
- else
- forEach(state.pipes, write);
-
- src.emit('data', chunk);
-
- // if anyone needs a drain, then we have to wait for that.
- if (state.awaitDrain > 0)
- return;
- }
-
- // if every destination was unpiped, either before entering this
- // function, or in the while loop, then stop flowing.
- //
- // NB: This is a pretty rare edge case.
- if (state.pipesCount === 0) {
- state.flowing = false;
-
- // if there were data event listeners added, then switch to old mode.
- if (EE.listenerCount(src, 'data') > 0)
- emitDataEvents(src);
- return;
- }
-
- // at this point, no one needed a drain, so we just ran out of data
- // on the next readable event, start it over again.
- state.ranOut = true;
-}
-
-function pipeOnReadable() {
- if (this._readableState.ranOut) {
- this._readableState.ranOut = false;
- flow(this);
- }
+ };
}
@@ -685,7 +661,6 @@ Readable.prototype.unpipe = function(dest) {
// got a match.
state.pipes = null;
state.pipesCount = 0;
- this.removeListener('readable', pipeOnReadable);
state.flowing = false;
if (dest)
dest.emit('unpipe', this);
@@ -700,7 +675,6 @@ Readable.prototype.unpipe = function(dest) {
var len = state.pipesCount;
state.pipes = null;
state.pipesCount = 0;
- this.removeListener('readable', pipeOnReadable);
state.flowing = false;
for (var i = 0; i < len; i++)
@@ -728,8 +702,11 @@ Readable.prototype.unpipe = function(dest) {
Readable.prototype.on = function(ev, fn) {
var res = Stream.prototype.on.call(this, ev, fn);
- if (ev === 'data' && !this._readableState.flowing)
- emitDataEvents(this);
+ // If listening to data, and it has not explicitly been paused,
+ // then call resume to start the flow of data on the next tick.
+ if (ev === 'data' && false !== this._readableState.flowing) {
+ this.resume();
+ }
if (ev === 'readable' && this.readable) {
var state = this._readableState;
@@ -738,7 +715,11 @@ Readable.prototype.on = function(ev, fn) {
state.emittedReadable = false;
state.needReadable = true;
if (!state.reading) {
- this.read(0);
+ var self = this;
+ process.nextTick(function() {
+ debug('readable nexttick read 0');
+ self.read(0);
+ });
} else if (state.length) {
emitReadable(this, state);
}
@@ -752,63 +733,54 @@ Readable.prototype.addListener = Readable.prototype.on;
// pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.
Readable.prototype.resume = function() {
- emitDataEvents(this);
- this.read(0);
- this.emit('resume');
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ if (!state.reading) {
+ debug('resume read 0');
+ this.read(0);
+ }
+ resume(this, state);
+ }
+ return this;
};
+function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(function() {
+ resume_(stream, state);
+ });
+ }
+}
+
+function resume_(stream, state) {
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading)
+ stream.read(0);
+}
+
Readable.prototype.pause = function() {
- emitDataEvents(this, true);
- this.emit('pause');
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
};
-function emitDataEvents(stream, startPaused) {
+function flow(stream) {
var state = stream._readableState;
-
+ debug('flow', state.flowing);
if (state.flowing) {
- // https://github.com/isaacs/readable-stream/issues/16
- throw new Error('Cannot switch to old mode now.');
+ do {
+ var chunk = stream.read();
+ } while (null !== chunk && state.flowing);
}
-
- var paused = startPaused || false;
- var readable = false;
-
- // convert to an old-style stream.
- stream.readable = true;
- stream.pipe = Stream.prototype.pipe;
- stream.on = stream.addListener = Stream.prototype.on;
-
- stream.on('readable', function() {
- readable = true;
-
- var c;
- while (!paused && (null !== (c = stream.read())))
- stream.emit('data', c);
-
- if (c === null) {
- readable = false;
- stream._readableState.needReadable = true;
- }
- });
-
- stream.pause = function() {
- paused = true;
- this.emit('pause');
- };
-
- stream.resume = function() {
- paused = false;
- if (readable)
- process.nextTick(function() {
- stream.emit('readable');
- });
- else
- this.read(0);
- this.emit('resume');
- };
-
- // now make it start, just in case it hadn't already.
- stream.emit('readable');
}
// wrap an old-style stream as the async data source.
@@ -820,6 +792,7 @@ Readable.prototype.wrap = function(stream) {
var self = this;
stream.on('end', function() {
+ debug('wrapped end');
if (state.decoder && !state.ended) {
var chunk = state.decoder.end();
if (chunk && chunk.length)
@@ -830,14 +803,10 @@ Readable.prototype.wrap = function(stream) {
});
stream.on('data', function(chunk) {
+ debug('wrapped data');
if (state.decoder)
chunk = state.decoder.write(chunk);
-
- // don't skip over falsy values in objectMode
- //if (state.objectMode && util.isNullOrUndefined(chunk))
- if (state.objectMode && (chunk === null || chunk === undefined))
- return;
- else if (!state.objectMode && (!chunk || !chunk.length))
+ if (!chunk || !state.objectMode && !chunk.length)
return;
var ret = self.push(chunk);
@@ -850,8 +819,7 @@ Readable.prototype.wrap = function(stream) {
// proxy all the other methods.
// important when wrapping filters and duplexes.
for (var i in stream) {
- if (typeof stream[i] === 'function' &&
- typeof this[i] === 'undefined') {
+ if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
this[i] = function(method) { return function() {
return stream[method].apply(stream, arguments);
}}(i);
@@ -867,6 +835,7 @@ Readable.prototype.wrap = function(stream) {
// when we try to consume some more bytes, simply unpause the
// underlying stream.
self._read = function(n) {
+ debug('wrapped _read', n);
if (paused) {
paused = false;
stream.resume();
@@ -955,7 +924,7 @@ function endReadable(stream) {
if (state.length > 0)
throw new Error('endReadable called on non-empty stream');
- if (!state.endEmitted && state.calledRead) {
+ if (!state.endEmitted) {
state.ended = true;
process.nextTick(function() {
// Check that we didn't get one last unshift.
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js
index eb188df3e8..905c5e4507 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_transform.js
@@ -97,7 +97,7 @@ function afterTransform(stream, er, data) {
ts.writechunk = null;
ts.writecb = null;
- if (data !== null && data !== undefined)
+ if (!util.isNullOrUndefined(data))
stream.push(data);
if (cb)
@@ -117,7 +117,7 @@ function Transform(options) {
Duplex.call(this, options);
- var ts = this._transformState = new TransformState(options, this);
+ this._transformState = new TransformState(options, this);
// when the writable side finishes, then flush out anything remaining.
var stream = this;
@@ -130,8 +130,8 @@ function Transform(options) {
// sync guard flag.
this._readableState.sync = false;
- this.once('finish', function() {
- if ('function' === typeof this._flush)
+ this.once('prefinish', function() {
+ if (util.isFunction(this._flush))
this._flush(function(er) {
done(stream, er);
});
@@ -179,7 +179,7 @@ Transform.prototype._write = function(chunk, encoding, cb) {
Transform.prototype._read = function(n) {
var ts = this._transformState;
- if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+ if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
ts.transforming = true;
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
} else {
@@ -197,7 +197,6 @@ function done(stream, er) {
// if there's nothing in the write buffer, then that means
// that nothing more will ever be provided
var ws = stream._writableState;
- var rs = stream._readableState;
var ts = stream._transformState;
if (ws.length)
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js
index 4bdaa4fa49..db8539cd5b 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/lib/_stream_writable.js
@@ -48,18 +48,24 @@ function WriteReq(chunk, encoding, cb) {
}
function WritableState(options, stream) {
+ var Duplex = require('./_stream_duplex');
+
options = options || {};
// the point at which write() starts returning false
// Note: 0 is a valid value, means that we always return false if
// the entire buffer is not flushed immediately on write()
var hwm = options.highWaterMark;
- this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
// object stream flag to indicate whether or not this stream
// contains buffers or objects.
this.objectMode = !!options.objectMode;
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.writableObjectMode;
+
// cast to ints.
this.highWaterMark = ~~this.highWaterMark;
@@ -90,8 +96,11 @@ function WritableState(options, stream) {
// a flag to see when we're in the middle of a write.
this.writing = false;
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
// a flag to be able to tell if the onwrite cb is called immediately,
- // or on a later tick. We set this to true at first, becuase any
+ // or on a later tick. We set this to true at first, because any
// actions that shouldn't happen until "later" should generally also
// not happen before the first write call.
this.sync = true;
@@ -114,6 +123,14 @@ function WritableState(options, stream) {
this.buffer = [];
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
// True if the error was already emitted and should not be thrown again
this.errorEmitted = false;
}
@@ -156,10 +173,9 @@ function writeAfterEnd(stream, state, cb) {
// how many bytes or characters.
function validChunk(stream, state, chunk, cb) {
var valid = true;
- if (!Buffer.isBuffer(chunk) &&
- 'string' !== typeof chunk &&
- chunk !== null &&
- chunk !== undefined &&
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
!state.objectMode) {
var er = new TypeError('Invalid non-string/buffer chunk');
stream.emit('error', er);
@@ -175,31 +191,54 @@ Writable.prototype.write = function(chunk, encoding, cb) {
var state = this._writableState;
var ret = false;
- if (typeof encoding === 'function') {
+ if (util.isFunction(encoding)) {
cb = encoding;
encoding = null;
}
- if (Buffer.isBuffer(chunk))
+ if (util.isBuffer(chunk))
encoding = 'buffer';
else if (!encoding)
encoding = state.defaultEncoding;
- if (typeof cb !== 'function')
+ if (!util.isFunction(cb))
cb = function() {};
if (state.ended)
writeAfterEnd(this, state, cb);
- else if (validChunk(this, state, chunk, cb))
+ else if (validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
ret = writeOrBuffer(this, state, chunk, encoding, cb);
+ }
return ret;
};
+Writable.prototype.cork = function() {
+ var state = this._writableState;
+
+ state.corked++;
+};
+
+Writable.prototype.uncork = function() {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing &&
+ !state.corked &&
+ !state.finished &&
+ !state.bufferProcessing &&
+ state.buffer.length)
+ clearBuffer(this, state);
+ }
+};
+
function decodeChunk(state, chunk, encoding) {
if (!state.objectMode &&
state.decodeStrings !== false &&
- typeof chunk === 'string') {
+ util.isString(chunk)) {
chunk = new Buffer(chunk, encoding);
}
return chunk;
@@ -210,7 +249,7 @@ function decodeChunk(state, chunk, encoding) {
// If we return false, then we need a drain event, so set that flag.
function writeOrBuffer(stream, state, chunk, encoding, cb) {
chunk = decodeChunk(state, chunk, encoding);
- if (Buffer.isBuffer(chunk))
+ if (util.isBuffer(chunk))
encoding = 'buffer';
var len = state.objectMode ? 1 : chunk.length;
@@ -221,30 +260,36 @@ function writeOrBuffer(stream, state, chunk, encoding, cb) {
if (!ret)
state.needDrain = true;
- if (state.writing)
+ if (state.writing || state.corked)
state.buffer.push(new WriteReq(chunk, encoding, cb));
else
- doWrite(stream, state, len, chunk, encoding, cb);
+ doWrite(stream, state, false, len, chunk, encoding, cb);
return ret;
}
-function doWrite(stream, state, len, chunk, encoding, cb) {
+function doWrite(stream, state, writev, len, chunk, encoding, cb) {
state.writelen = len;
state.writecb = cb;
state.writing = true;
state.sync = true;
- stream._write(chunk, encoding, state.onwrite);
+ if (writev)
+ stream._writev(chunk, state.onwrite);
+ else
+ stream._write(chunk, encoding, state.onwrite);
state.sync = false;
}
function onwriteError(stream, state, sync, er, cb) {
if (sync)
process.nextTick(function() {
+ state.pendingcb--;
cb(er);
});
- else
+ else {
+ state.pendingcb--;
cb(er);
+ }
stream._writableState.errorEmitted = true;
stream.emit('error', er);
@@ -270,8 +315,12 @@ function onwrite(stream, er) {
// Check if we're actually ready to finish, but don't emit yet
var finished = needFinish(stream, state);
- if (!finished && !state.bufferProcessing && state.buffer.length)
+ if (!finished &&
+ !state.corked &&
+ !state.bufferProcessing &&
+ state.buffer.length) {
clearBuffer(stream, state);
+ }
if (sync) {
process.nextTick(function() {
@@ -286,9 +335,9 @@ function onwrite(stream, er) {
function afterWrite(stream, state, finished, cb) {
if (!finished)
onwriteDrain(stream, state);
+ state.pendingcb--;
cb();
- if (finished)
- finishMaybe(stream, state);
+ finishMaybe(stream, state);
}
// Must force callback to be called on nextTick, so that we don't
@@ -306,51 +355,82 @@ function onwriteDrain(stream, state) {
function clearBuffer(stream, state) {
state.bufferProcessing = true;
- for (var c = 0; c < state.buffer.length; c++) {
- var entry = state.buffer[c];
- var chunk = entry.chunk;
- var encoding = entry.encoding;
- var cb = entry.callback;
- var len = state.objectMode ? 1 : chunk.length;
-
- doWrite(stream, state, len, chunk, encoding, cb);
-
- // if we didn't call the onwrite immediately, then
- // it means that we need to wait until it does.
- // also, that means that the chunk and cb are currently
- // being processed, so move the buffer counter past them.
- if (state.writing) {
- c++;
- break;
+ if (stream._writev && state.buffer.length > 1) {
+ // Fast case, write everything using _writev()
+ var cbs = [];
+ for (var c = 0; c < state.buffer.length; c++)
+ cbs.push(state.buffer[c].callback);
+
+ // count the one we are adding, as well.
+ // TODO(isaacs) clean this up
+ state.pendingcb++;
+ doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+ for (var i = 0; i < cbs.length; i++) {
+ state.pendingcb--;
+ cbs[i](err);
+ }
+ });
+
+ // Clear buffer
+ state.buffer = [];
+ } else {
+ // Slow case, write chunks one-by-one
+ for (var c = 0; c < state.buffer.length; c++) {
+ var entry = state.buffer[c];
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ c++;
+ break;
+ }
}
+
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
}
state.bufferProcessing = false;
- if (c < state.buffer.length)
- state.buffer = state.buffer.slice(c);
- else
- state.buffer.length = 0;
}
Writable.prototype._write = function(chunk, encoding, cb) {
cb(new Error('not implemented'));
+
};
+Writable.prototype._writev = null;
+
Writable.prototype.end = function(chunk, encoding, cb) {
var state = this._writableState;
- if (typeof chunk === 'function') {
+ if (util.isFunction(chunk)) {
cb = chunk;
chunk = null;
encoding = null;
- } else if (typeof encoding === 'function') {
+ } else if (util.isFunction(encoding)) {
cb = encoding;
encoding = null;
}
- if (typeof chunk !== 'undefined' && chunk !== null)
+ if (!util.isNullOrUndefined(chunk))
this.write(chunk, encoding);
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
// ignore unnecessary end() calls.
if (!state.ending && !state.finished)
endWritable(this, state, cb);
@@ -364,11 +444,22 @@ function needFinish(stream, state) {
!state.writing);
}
+function prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+}
+
function finishMaybe(stream, state) {
var need = needFinish(stream, state);
if (need) {
- state.finished = true;
- stream.emit('finish');
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else
+ prefinish(stream, state);
}
return need;
}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/core-util-is/package.json b/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/core-util-is/package.json
index 2155d11c62..4eb9ce4f3c 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/core-util-is/package.json
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/core-util-is/package.json
@@ -49,5 +49,6 @@
],
"directories": {},
"_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
- "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz",
+ "scripts": {}
}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/package.json b/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/package.json
index 04d6a3fd31..fc7904b67b 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/package.json
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/isarray/package.json
@@ -47,5 +47,8 @@
],
"directories": {},
"_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
- "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "bugs": {
+ "url": "https://github.com/juliangruber/isarray/issues"
+ }
}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/string_decoder/package.json b/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/string_decoder/package.json
index 21c9cd535c..0364d54ba4 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/string_decoder/package.json
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/node_modules/string_decoder/package.json
@@ -49,5 +49,6 @@
"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"
+ "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/package.json b/deps/npm/node_modules/sha/node_modules/readable-stream/package.json
index 7483ebbecf..9344b0f9c4 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/package.json
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/package.json
@@ -1,7 +1,7 @@
{
"name": "readable-stream",
- "version": "1.0.31",
- "description": "Streams2, a user-land copy of the stream library from Node.js v0.10.x",
+ "version": "1.1.13",
+ "description": "Streams3, a user-land copy of the stream library from Node.js v0.11.x",
"main": "readable.js",
"dependencies": {
"core-util-is": "~1.0.0",
@@ -33,14 +33,15 @@
"url": "http://blog.izs.me/"
},
"license": "MIT",
+ "gitHead": "3b672fd7ae92acf5b4ffdbabf74b372a0a56b051",
"bugs": {
"url": "https://github.com/isaacs/readable-stream/issues"
},
"homepage": "https://github.com/isaacs/readable-stream",
- "_id": "readable-stream@1.0.31",
- "_shasum": "8f2502e0bc9e3b0da1b94520aabb4e2603ecafae",
- "_from": "readable-stream@>=1.0.0 <1.1.0",
- "_npmVersion": "1.4.9",
+ "_id": "readable-stream@1.1.13",
+ "_shasum": "f6eef764f514c89e2b9e23146a75ba106756d23e",
+ "_from": "readable-stream@>=1.1.0 <1.2.0",
+ "_npmVersion": "1.4.23",
"_npmUser": {
"name": "rvagg",
"email": "rod@vagg.org"
@@ -60,9 +61,10 @@
}
],
"dist": {
- "shasum": "8f2502e0bc9e3b0da1b94520aabb4e2603ecafae",
- "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz"
+ "shasum": "f6eef764f514c89e2b9e23146a75ba106756d23e",
+ "tarball": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz"
+ "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js b/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js
index 4d1ddfc734..09b8bf5091 100644
--- a/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js
+++ b/deps/npm/node_modules/sha/node_modules/readable-stream/readable.js
@@ -1,4 +1,5 @@
exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = require('stream');
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
diff --git a/deps/npm/node_modules/sha/package.json b/deps/npm/node_modules/sha/package.json
index 1b8b2aa7ff..f5aff49079 100644
--- a/deps/npm/node_modules/sha/package.json
+++ b/deps/npm/node_modules/sha/package.json
@@ -1,6 +1,6 @@
{
"name": "sha",
- "version": "1.2.4",
+ "version": "1.3.0",
"description": "Check and get file hashes",
"scripts": {
"test": "mocha -R spec"
@@ -12,29 +12,27 @@
"license": "BSD",
"optionalDependencies": {
"graceful-fs": "2 || 3",
- "readable-stream": "1.0"
+ "readable-stream": "~1.1"
},
"devDependencies": {
"mocha": "~1.9.0"
},
+ "gitHead": "f1985eefbf7538e5809a2157c728d2f740901600",
"bugs": {
"url": "https://github.com/ForbesLindesay/sha/issues"
},
"homepage": "https://github.com/ForbesLindesay/sha",
"dependencies": {
"graceful-fs": "2 || 3",
- "readable-stream": "1.0"
+ "readable-stream": "~1.1"
},
- "_id": "sha@1.2.4",
- "dist": {
- "shasum": "1f9a377f27b6fdee409b9b858e43da702be48a4d",
- "tarball": "http://registry.npmjs.org/sha/-/sha-1.2.4.tgz"
- },
- "_from": "sha@>=1.2.1 <1.3.0",
- "_npmVersion": "1.4.3",
+ "_id": "sha@1.3.0",
+ "_shasum": "79f4787045d0ede7327d702c25c443460dbc6764",
+ "_from": "sha@>=1.3.0 <1.4.0",
+ "_npmVersion": "1.5.0-alpha-4",
"_npmUser": {
"name": "forbeslindesay",
- "email": "forbes@lindeay.co.uk"
+ "email": "forbes@lindesay.co.uk"
},
"maintainers": [
{
@@ -42,7 +40,10 @@
"email": "forbes@lindesay.co.uk"
}
],
+ "dist": {
+ "shasum": "79f4787045d0ede7327d702c25c443460dbc6764",
+ "tarball": "http://registry.npmjs.org/sha/-/sha-1.3.0.tgz"
+ },
"directories": {},
- "_shasum": "1f9a377f27b6fdee409b9b858e43da702be48a4d",
- "_resolved": "https://registry.npmjs.org/sha/-/sha-1.2.4.tgz"
+ "_resolved": "https://registry.npmjs.org/sha/-/sha-1.3.0.tgz"
}
diff --git a/deps/npm/node_modules/wrappy/LICENSE b/deps/npm/node_modules/wrappy/LICENSE
new file mode 100644
index 0000000000..19129e315f
--- /dev/null
+++ b/deps/npm/node_modules/wrappy/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/deps/npm/node_modules/wrappy/README.md b/deps/npm/node_modules/wrappy/README.md
new file mode 100644
index 0000000000..98eab2522b
--- /dev/null
+++ b/deps/npm/node_modules/wrappy/README.md
@@ -0,0 +1,36 @@
+# wrappy
+
+Callback wrapping utility
+
+## USAGE
+
+```javascript
+var wrappy = require("wrappy")
+
+// var wrapper = wrappy(wrapperFunction)
+
+// make sure a cb is called only once
+// See also: http://npm.im/once for this specific use case
+var once = wrappy(function (cb) {
+ var called = false
+ return function () {
+ if (called) return
+ called = true
+ return cb.apply(this, arguments)
+ }
+})
+
+function printBoo () {
+ console.log('boo')
+}
+// has some rando property
+printBoo.iAmBooPrinter = true
+
+var onlyPrintOnce = once(printBoo)
+
+onlyPrintOnce() // prints 'boo'
+onlyPrintOnce() // does nothing
+
+// random property is retained!
+assert.equal(onlyPrintOnce.iAmBooPrinter, true)
+```
diff --git a/deps/npm/node_modules/wrappy/package.json b/deps/npm/node_modules/wrappy/package.json
new file mode 100644
index 0000000000..b88e662832
--- /dev/null
+++ b/deps/npm/node_modules/wrappy/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "wrappy",
+ "version": "1.0.1",
+ "description": "Callback wrapping utility",
+ "main": "wrappy.js",
+ "directories": {
+ "test": "test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "tap": "^0.4.12"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/npm/wrappy"
+ },
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/wrappy/issues"
+ },
+ "homepage": "https://github.com/npm/wrappy",
+ "gitHead": "006a8cbac6b99988315834c207896eed71fd069a",
+ "_id": "wrappy@1.0.1",
+ "_shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
+ "_from": "wrappy@1.0.1",
+ "_npmVersion": "2.0.0",
+ "_nodeVersion": "0.10.31",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "1e65969965ccbc2db4548c6b84a6f2c5aedd4739",
+ "tarball": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/wrappy/test/basic.js b/deps/npm/node_modules/wrappy/test/basic.js
new file mode 100644
index 0000000000..5ed0fcdfd9
--- /dev/null
+++ b/deps/npm/node_modules/wrappy/test/basic.js
@@ -0,0 +1,51 @@
+var test = require('tap').test
+var wrappy = require('../wrappy.js')
+
+test('basic', function (t) {
+ function onceifier (cb) {
+ var called = false
+ return function () {
+ if (called) return
+ called = true
+ return cb.apply(this, arguments)
+ }
+ }
+ onceifier.iAmOnce = {}
+ var once = wrappy(onceifier)
+ t.equal(once.iAmOnce, onceifier.iAmOnce)
+
+ var called = 0
+ function boo () {
+ t.equal(called, 0)
+ called++
+ }
+ // has some rando property
+ boo.iAmBoo = true
+
+ var onlyPrintOnce = once(boo)
+
+ onlyPrintOnce() // prints 'boo'
+ onlyPrintOnce() // does nothing
+ t.equal(called, 1)
+
+ // random property is retained!
+ t.equal(onlyPrintOnce.iAmBoo, true)
+
+ var logs = []
+ var logwrap = wrappy(function (msg, cb) {
+ logs.push(msg + ' wrapping cb')
+ return function () {
+ logs.push(msg + ' before cb')
+ var ret = cb.apply(this, arguments)
+ logs.push(msg + ' after cb')
+ }
+ })
+
+ var c = logwrap('foo', function () {
+ t.same(logs, [ 'foo wrapping cb', 'foo before cb' ])
+ })
+ c()
+ t.same(logs, [ 'foo wrapping cb', 'foo before cb', 'foo after cb' ])
+
+ t.end()
+})
diff --git a/deps/npm/node_modules/wrappy/wrappy.js b/deps/npm/node_modules/wrappy/wrappy.js
new file mode 100644
index 0000000000..bb7e7d6fcf
--- /dev/null
+++ b/deps/npm/node_modules/wrappy/wrappy.js
@@ -0,0 +1,33 @@
+// Returns a wrapper function that returns a wrapped callback
+// The wrapper function should do some stuff, and return a
+// presumably different callback function.
+// This makes sure that own properties are retained, so that
+// decorations and such are not lost along the way.
+module.exports = wrappy
+function wrappy (fn, cb) {
+ if (fn && cb) return wrappy(fn)(cb)
+
+ if (typeof fn !== 'function')
+ throw new TypeError('need wrapper function')
+
+ Object.keys(fn).forEach(function (k) {
+ wrapper[k] = fn[k]
+ })
+
+ return wrapper
+
+ function wrapper() {
+ var args = new Array(arguments.length)
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i]
+ }
+ var ret = fn.apply(this, args)
+ var cb = args[args.length-1]
+ if (typeof ret === 'function' && ret !== cb) {
+ Object.keys(cb).forEach(function (k) {
+ ret[k] = cb[k]
+ })
+ }
+ return ret
+ }
+}
diff --git a/deps/npm/node_modules/write-file-atomic/.npmignore b/deps/npm/node_modules/write-file-atomic/.npmignore
new file mode 100644
index 0000000000..454382637b
--- /dev/null
+++ b/deps/npm/node_modules/write-file-atomic/.npmignore
@@ -0,0 +1,4 @@
+*~
+DEADJOE
+.#*
+node_modules \ No newline at end of file
diff --git a/deps/npm/node_modules/write-file-atomic/README.md b/deps/npm/node_modules/write-file-atomic/README.md
new file mode 100644
index 0000000000..26e434d194
--- /dev/null
+++ b/deps/npm/node_modules/write-file-atomic/README.md
@@ -0,0 +1,44 @@
+write-file-atomic
+-----------------
+
+This is an extension for node's `fs.writeFile` that makes its operation
+atomic and allows you set ownership (uid/gid of the file).
+
+### var writeFileAtomic = require('write-file-atomic')<br>writeFileAtomic(filename, data, [options], callback)
+
+* filename **String**
+* data **String** | **Buffer**
+* options **Object**
+ * chown **Object**
+ * uid **Number**
+ * gid **Number**
+ * encoding **String** | **Null** default = 'utf8'
+ * mode **Number** default = 438 (aka 0666 in Octal)
+callback **Function**
+
+Atomically and asynchronously writes data to a file, replacing the file if it already
+exists. data can be a string or a buffer.
+
+The file is initially named `filename + "." + md5hex(__filename, process.pid, ++invocations)`.
+If writeFile completes successfully then, if passed the **chown** option it will change
+the ownership of the file. Finally it renames the file back to the filename you specified. If
+it encounters errors at any of these steps it will attempt to unlink the temporary file and then
+pass the error back to the caller.
+
+If provided, the **chown** option requires both **uid** and **gid** properties or else
+you'll get an error.
+
+The **encoding** option is ignored if **data** is a buffer. It defaults to 'utf8'.
+
+Example:
+
+```javascript
+writeFileAtomic('message.txt', 'Hello Node', {chown:{uid:100,gid:50}}, function (err) {
+ if (err) throw err;
+ console.log('It\'s saved!');
+});
+```
+
+### var writeFileAtomicSync = require('write-file-atomic').sync<br>writeFileAtomicSync(filename, data, [options])
+
+The synchronous version of **writeFileAtomic**.
diff --git a/deps/npm/node_modules/write-file-atomic/index.js b/deps/npm/node_modules/write-file-atomic/index.js
new file mode 100644
index 0000000000..f61a17038b
--- /dev/null
+++ b/deps/npm/node_modules/write-file-atomic/index.js
@@ -0,0 +1,45 @@
+'use strict'
+var fs = require('graceful-fs');
+var chain = require('slide').chain;
+var crypto = require('crypto');
+
+var md5hex = function () {
+ var hash = crypto.createHash('md5');
+ for (var ii=0; ii<arguments.length; ++ii) hash.update(''+arguments[ii])
+ return hash.digest('hex')
+}
+var invocations = 0;
+var getTmpname = function (filename) {
+ return filename + "." + md5hex(__filename, process.pid, ++invocations)
+}
+
+module.exports = function writeFile(filename, data, options, callback) {
+ if (options instanceof Function) {
+ callback = options;
+ options = null;
+ }
+ if (!options) options = {};
+ var tmpfile = getTmpname(filename);
+ chain([
+ [fs, fs.writeFile, tmpfile, data, options],
+ options.chown && [fs, fs.chown, tmpfile, options.chown.uid, options.chown.gid],
+ [fs, fs.rename, tmpfile, filename]
+ ], function (err) {
+ err ? fs.unlink(tmpfile, function () { callback(err) })
+ : callback()
+ })
+}
+
+module.exports.sync = function writeFileSync(filename, data, options) {
+ if (!options) options = {};
+ var tmpfile = getTmpname(filename);
+ try {
+ fs.writeFileSync(tmpfile, data, options);
+ if (options.chown) fs.chownSync(tmpfile, options.chown.uid, options.chown.gid);
+ fs.renameSync(tmpfile, filename);
+ }
+ catch (err) {
+ try { fs.unlinkSync(tmpfile) } catch(e) {}
+ throw err;
+ }
+}
diff --git a/deps/npm/node_modules/write-file-atomic/package.json b/deps/npm/node_modules/write-file-atomic/package.json
new file mode 100644
index 0000000000..1fa0f6cc84
--- /dev/null
+++ b/deps/npm/node_modules/write-file-atomic/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "write-file-atomic",
+ "version": "1.1.0",
+ "description": "Write files in an atomic fashion w/configurable ownership",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:iarna/write-file-atomic.git"
+ },
+ "keywords": [
+ "writeFile",
+ "atomic"
+ ],
+ "author": {
+ "name": "Rebecca Turner",
+ "email": "me@re-becca.org",
+ "url": "http://re-becca.org"
+ },
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/iarna/write-file-atomic/issues"
+ },
+ "homepage": "https://github.com/iarna/write-file-atomic",
+ "dependencies": {
+ "graceful-fs": "^3.0.2",
+ "slide": "^1.1.5"
+ },
+ "devDependencies": {
+ "require-inject": "^1.1.0",
+ "tap": "^0.4.12"
+ },
+ "gitHead": "28e4df86547c6728eab0b51bca6f00cf44ef392c",
+ "_id": "write-file-atomic@1.1.0",
+ "_shasum": "e114cfb8f82188353f98217c5945451c9b4dc060",
+ "_from": "write-file-atomic@>=1.1.0 <2.0.0",
+ "_npmVersion": "1.4.28",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "dist": {
+ "shasum": "e114cfb8f82188353f98217c5945451c9b4dc060",
+ "tarball": "http://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.0.tgz"
+}
diff --git a/deps/npm/node_modules/write-file-atomic/test/basic.js b/deps/npm/node_modules/write-file-atomic/test/basic.js
new file mode 100644
index 0000000000..a3227eaa1d
--- /dev/null
+++ b/deps/npm/node_modules/write-file-atomic/test/basic.js
@@ -0,0 +1,97 @@
+"use strict";
+var test = require('tap').test;
+var requireInject = require('require-inject');
+var writeFileAtomic = requireInject('../index', {
+ 'graceful-fs': {
+ writeFile: function (tmpfile, data, options, cb) {
+ if (/nowrite/.test(tmpfile)) return cb('ENOWRITE');
+ cb();
+ },
+ chown: function (tmpfile, uid, gid, cb) {
+ if (/nochown/.test(tmpfile)) return cb('ENOCHOWN');
+ cb();
+ },
+ rename: function (tmpfile, filename, cb) {
+ if (/norename/.test(tmpfile)) return cb('ENORENAME');
+ cb();
+ },
+ unlink: function (tmpfile, cb) {
+ if (/nounlink/.test(tmpfile)) return cb('ENOUNLINK');
+ cb();
+ },
+ writeFileSync: function (tmpfile, data, options) {
+ if (/nowrite/.test(tmpfile)) throw 'ENOWRITE';
+ },
+ chownSync: function (tmpfile, uid, gid) {
+ if (/nochown/.test(tmpfile)) throw 'ENOCHOWN';
+ },
+ renameSync: function (tmpfile, filename) {
+ if (/norename/.test(tmpfile)) throw 'ENORENAME';
+ },
+ unlinkSync: function (tmpfile) {
+ if (/nounlink/.test(tmpfile)) throw 'ENOUNLINK';
+ },
+ }
+});
+var writeFileAtomicSync = writeFileAtomic.sync;
+
+test('async tests', function (t) {
+ t.plan(7);
+ writeFileAtomic('good', 'test', {mode: '0777'}, function (err) {
+ t.notOk(err, 'No errors occur when passing in options');
+ });
+ writeFileAtomic('good', 'test', function (err) {
+ t.notOk(err, 'No errors occur when NOT passing in options');
+ });
+ writeFileAtomic('nowrite', 'test', function (err) {
+ t.is(err, 'ENOWRITE', 'writeFile failures propagate');
+ });
+ writeFileAtomic('nochown', 'test', {chown: {uid:100,gid:100}}, function (err) {
+ t.is(err, 'ENOCHOWN', 'Chown failures propagate');
+ });
+ writeFileAtomic('nochown', 'test', function (err) {
+ t.notOk(err, 'No attempt to chown when no uid/gid passed in');
+ });
+ writeFileAtomic('norename', 'test', function (err) {
+ t.is(err, 'ENORENAME', 'Rename errors propagate');
+ });
+ writeFileAtomic('norename nounlink', 'test', function (err) {
+ t.is(err, 'ENORENAME', 'Failure to unlink the temp file does not clobber the original error');
+ });
+});
+
+test('sync tests', function (t) {
+ t.plan(7);
+ var throws = function (shouldthrow, msg, todo) {
+ var err;
+ try { todo() } catch (e) { err = e }
+ t.is(shouldthrow,err,msg);
+ }
+ var noexception = function (msg, todo) {
+ var err;
+ try { todo() } catch (e) { err = e }
+ t.notOk(err,msg);
+ }
+
+ noexception('No errors occur when passing in options',function (){
+ writeFileAtomicSync('good', 'test', {mode: '0777'});
+ })
+ noexception('No errors occur when NOT passing in options',function (){
+ writeFileAtomicSync('good', 'test');
+ });
+ throws('ENOWRITE', 'writeFile failures propagate', function () {
+ writeFileAtomicSync('nowrite', 'test');
+ });
+ throws('ENOCHOWN', 'Chown failures propagate', function () {
+ writeFileAtomicSync('nochown', 'test', {chown: {uid:100,gid:100}});
+ });
+ noexception('No attempt to chown when no uid/gid passed in', function (){
+ writeFileAtomicSync('nochown', 'test');
+ });
+ throws('ENORENAME', 'Rename errors propagate', function (){
+ writeFileAtomicSync('norename', 'test');
+ });
+ throws('ENORENAME', 'Failure to unlink the temp file does not clobber the original error', function (){
+ writeFileAtomicSync('norename nounlink', 'test');
+ });
+});