fsevents 1.2.6 → 1.2.7
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fsevents might be problematic. Click here for more details.
- package/node_modules/abbrev/LICENSE +46 -0
- package/node_modules/abbrev/README.md +23 -0
- package/node_modules/abbrev/abbrev.js +61 -0
- package/node_modules/abbrev/package.json +57 -0
- package/node_modules/ansi-regex/index.js +4 -0
- package/node_modules/ansi-regex/license +21 -0
- package/node_modules/ansi-regex/package.json +108 -0
- package/node_modules/ansi-regex/readme.md +39 -0
- package/node_modules/aproba/LICENSE +14 -0
- package/node_modules/aproba/README.md +94 -0
- package/node_modules/aproba/index.js +105 -0
- package/node_modules/aproba/package.json +62 -0
- package/node_modules/are-we-there-yet/CHANGES.md +37 -0
- package/node_modules/are-we-there-yet/LICENSE +5 -0
- package/node_modules/are-we-there-yet/README.md +195 -0
- package/node_modules/are-we-there-yet/index.js +4 -0
- package/node_modules/are-we-there-yet/package.json +63 -0
- package/node_modules/are-we-there-yet/tracker-base.js +11 -0
- package/node_modules/are-we-there-yet/tracker-group.js +107 -0
- package/node_modules/are-we-there-yet/tracker-stream.js +36 -0
- package/node_modules/are-we-there-yet/tracker.js +30 -0
- package/node_modules/balanced-match/.npmignore +5 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +91 -0
- package/node_modules/balanced-match/index.js +59 -0
- package/node_modules/balanced-match/package.json +77 -0
- package/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/brace-expansion/package.json +75 -0
- package/node_modules/chownr/LICENSE +15 -0
- package/node_modules/chownr/README.md +3 -0
- package/node_modules/chownr/chownr.js +88 -0
- package/node_modules/chownr/package.json +59 -0
- package/node_modules/code-point-at/index.js +32 -0
- package/node_modules/code-point-at/license +21 -0
- package/node_modules/code-point-at/package.json +70 -0
- package/node_modules/code-point-at/readme.md +32 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +88 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/console-control-strings/LICENSE +13 -0
- package/node_modules/console-control-strings/README.md +145 -0
- package/node_modules/console-control-strings/README.md~ +140 -0
- package/node_modules/console-control-strings/index.js +125 -0
- package/node_modules/console-control-strings/package.json +61 -0
- package/node_modules/core-util-is/LICENSE +19 -0
- package/node_modules/core-util-is/README.md +3 -0
- package/node_modules/core-util-is/float.patch +604 -0
- package/node_modules/core-util-is/lib/util.js +107 -0
- package/node_modules/core-util-is/package.json +62 -0
- package/node_modules/core-util-is/test.js +68 -0
- package/node_modules/debug/.coveralls.yml +1 -0
- package/node_modules/debug/.eslintrc +11 -0
- package/node_modules/debug/.npmignore +9 -0
- package/node_modules/debug/.travis.yml +14 -0
- package/node_modules/debug/CHANGELOG.md +362 -0
- package/node_modules/debug/LICENSE +19 -0
- package/node_modules/debug/Makefile +50 -0
- package/node_modules/debug/README.md +312 -0
- package/node_modules/debug/component.json +19 -0
- package/node_modules/debug/karma.conf.js +70 -0
- package/node_modules/debug/node.js +1 -0
- package/node_modules/debug/package.json +88 -0
- package/node_modules/debug/src/browser.js +185 -0
- package/node_modules/debug/src/debug.js +202 -0
- package/node_modules/debug/src/index.js +10 -0
- package/node_modules/debug/src/inspector-log.js +15 -0
- package/node_modules/debug/src/node.js +248 -0
- package/node_modules/deep-extend/CHANGELOG.md +46 -0
- package/node_modules/deep-extend/LICENSE +20 -0
- package/node_modules/deep-extend/README.md +91 -0
- package/node_modules/deep-extend/index.js +1 -0
- package/node_modules/deep-extend/lib/deep-extend.js +150 -0
- package/node_modules/deep-extend/package.json +92 -0
- package/node_modules/delegates/.npmignore +1 -0
- package/node_modules/delegates/History.md +22 -0
- package/node_modules/delegates/License +20 -0
- package/node_modules/delegates/Makefile +8 -0
- package/node_modules/delegates/Readme.md +94 -0
- package/node_modules/delegates/index.js +121 -0
- package/node_modules/delegates/package.json +48 -0
- package/node_modules/delegates/test/index.js +94 -0
- package/node_modules/detect-libc/.npmignore +7 -0
- package/node_modules/detect-libc/LICENSE +201 -0
- package/node_modules/detect-libc/README.md +78 -0
- package/node_modules/detect-libc/bin/detect-libc.js +18 -0
- package/node_modules/detect-libc/lib/detect-libc.js +92 -0
- package/node_modules/detect-libc/package.json +70 -0
- package/node_modules/fs-minipass/LICENSE +15 -0
- package/node_modules/fs-minipass/README.md +70 -0
- package/node_modules/fs-minipass/index.js +386 -0
- package/node_modules/fs-minipass/package.json +62 -0
- package/node_modules/fs.realpath/LICENSE +43 -0
- package/node_modules/fs.realpath/README.md +33 -0
- package/node_modules/fs.realpath/index.js +66 -0
- package/node_modules/fs.realpath/old.js +303 -0
- package/node_modules/fs.realpath/package.json +59 -0
- package/node_modules/gauge/CHANGELOG.md +160 -0
- package/node_modules/gauge/LICENSE +13 -0
- package/node_modules/gauge/README.md +399 -0
- package/node_modules/gauge/base-theme.js +14 -0
- package/node_modules/gauge/error.js +24 -0
- package/node_modules/gauge/has-color.js +12 -0
- package/node_modules/gauge/index.js +233 -0
- package/node_modules/gauge/package.json +91 -0
- package/node_modules/gauge/plumbing.js +48 -0
- package/node_modules/gauge/process.js +3 -0
- package/node_modules/gauge/progress-bar.js +35 -0
- package/node_modules/gauge/render-template.js +181 -0
- package/node_modules/gauge/set-immediate.js +7 -0
- package/node_modules/gauge/set-interval.js +3 -0
- package/node_modules/gauge/spin.js +5 -0
- package/node_modules/gauge/template-item.js +73 -0
- package/node_modules/gauge/theme-set.js +115 -0
- package/node_modules/gauge/themes.js +54 -0
- package/node_modules/gauge/wide-truncate.js +25 -0
- package/node_modules/glob/LICENSE +15 -0
- package/node_modules/glob/README.md +368 -0
- package/node_modules/glob/changelog.md +67 -0
- package/node_modules/glob/common.js +240 -0
- package/node_modules/glob/glob.js +790 -0
- package/node_modules/glob/package.json +76 -0
- package/node_modules/glob/sync.js +486 -0
- package/node_modules/has-unicode/LICENSE +14 -0
- package/node_modules/has-unicode/README.md +43 -0
- package/node_modules/has-unicode/index.js +16 -0
- package/node_modules/has-unicode/package.json +58 -0
- package/node_modules/iconv-lite/Changelog.md +162 -0
- package/node_modules/iconv-lite/LICENSE +21 -0
- package/node_modules/iconv-lite/README.md +156 -0
- package/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- package/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- package/node_modules/iconv-lite/encodings/index.js +22 -0
- package/node_modules/iconv-lite/encodings/internal.js +188 -0
- package/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- package/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- package/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- package/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/node_modules/iconv-lite/encodings/utf16.js +177 -0
- package/node_modules/iconv-lite/encodings/utf7.js +290 -0
- package/node_modules/iconv-lite/lib/bom-handling.js +52 -0
- package/node_modules/iconv-lite/lib/extend-node.js +217 -0
- package/node_modules/iconv-lite/lib/index.d.ts +24 -0
- package/node_modules/iconv-lite/lib/index.js +153 -0
- package/node_modules/iconv-lite/lib/streams.js +121 -0
- package/node_modules/iconv-lite/package.json +76 -0
- package/node_modules/ignore-walk/LICENSE +15 -0
- package/node_modules/ignore-walk/README.md +60 -0
- package/node_modules/ignore-walk/index.js +265 -0
- package/node_modules/ignore-walk/package.json +71 -0
- package/node_modules/inflight/LICENSE +15 -0
- package/node_modules/inflight/README.md +37 -0
- package/node_modules/inflight/inflight.js +54 -0
- package/node_modules/inflight/package.json +58 -0
- package/node_modules/inherits/LICENSE +16 -0
- package/node_modules/inherits/README.md +42 -0
- package/node_modules/inherits/inherits.js +7 -0
- package/node_modules/inherits/inherits_browser.js +23 -0
- package/node_modules/inherits/package.json +64 -0
- package/node_modules/ini/LICENSE +15 -0
- package/node_modules/ini/README.md +102 -0
- package/node_modules/ini/ini.js +194 -0
- package/node_modules/ini/package.json +63 -0
- package/node_modules/is-fullwidth-code-point/index.js +46 -0
- package/node_modules/is-fullwidth-code-point/license +21 -0
- package/node_modules/is-fullwidth-code-point/package.json +77 -0
- package/node_modules/is-fullwidth-code-point/readme.md +39 -0
- package/node_modules/isarray/.npmignore +1 -0
- package/node_modules/isarray/.travis.yml +4 -0
- package/node_modules/isarray/Makefile +6 -0
- package/node_modules/isarray/README.md +60 -0
- package/node_modules/isarray/component.json +19 -0
- package/node_modules/isarray/index.js +5 -0
- package/node_modules/isarray/package.json +73 -0
- package/node_modules/isarray/test.js +20 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +209 -0
- package/node_modules/minimatch/minimatch.js +923 -0
- package/node_modules/minimatch/package.json +64 -0
- package/node_modules/minimist/.travis.yml +4 -0
- package/node_modules/minimist/LICENSE +18 -0
- package/node_modules/minimist/example/parse.js +2 -0
- package/node_modules/minimist/index.js +187 -0
- package/node_modules/minimist/package.json +71 -0
- package/node_modules/minimist/readme.markdown +73 -0
- package/node_modules/minimist/test/dash.js +24 -0
- package/node_modules/minimist/test/default_bool.js +20 -0
- package/node_modules/minimist/test/dotted.js +16 -0
- package/node_modules/minimist/test/long.js +31 -0
- package/node_modules/minimist/test/parse.js +318 -0
- package/node_modules/minimist/test/parse_modified.js +9 -0
- package/node_modules/minimist/test/short.js +67 -0
- package/node_modules/minimist/test/whitespace.js +8 -0
- package/node_modules/minipass/LICENSE +15 -0
- package/node_modules/minipass/README.md +124 -0
- package/node_modules/minipass/index.js +375 -0
- package/node_modules/minipass/package.json +69 -0
- package/node_modules/minizlib/LICENSE +26 -0
- package/node_modules/minizlib/README.md +44 -0
- package/node_modules/minizlib/constants.js +46 -0
- package/node_modules/minizlib/index.js +335 -0
- package/node_modules/minizlib/package.json +71 -0
- package/node_modules/mkdirp/.travis.yml +8 -0
- package/node_modules/mkdirp/LICENSE +21 -0
- package/node_modules/mkdirp/bin/cmd.js +33 -0
- package/node_modules/mkdirp/bin/usage.txt +12 -0
- package/node_modules/mkdirp/examples/pow.js +6 -0
- package/node_modules/mkdirp/index.js +98 -0
- package/node_modules/mkdirp/package.json +64 -0
- package/node_modules/mkdirp/readme.markdown +100 -0
- package/node_modules/mkdirp/test/chmod.js +41 -0
- package/node_modules/mkdirp/test/clobber.js +38 -0
- package/node_modules/mkdirp/test/mkdirp.js +28 -0
- package/node_modules/mkdirp/test/opts_fs.js +29 -0
- package/node_modules/mkdirp/test/opts_fs_sync.js +27 -0
- package/node_modules/mkdirp/test/perm.js +32 -0
- package/node_modules/mkdirp/test/perm_sync.js +36 -0
- package/node_modules/mkdirp/test/race.js +37 -0
- package/node_modules/mkdirp/test/rel.js +32 -0
- package/node_modules/mkdirp/test/return.js +25 -0
- package/node_modules/mkdirp/test/return_sync.js +24 -0
- package/node_modules/mkdirp/test/root.js +19 -0
- package/node_modules/mkdirp/test/sync.js +32 -0
- package/node_modules/mkdirp/test/umask.js +28 -0
- package/node_modules/mkdirp/test/umask_sync.js +32 -0
- package/node_modules/ms/index.js +152 -0
- package/node_modules/ms/license.md +21 -0
- package/node_modules/ms/package.json +69 -0
- package/node_modules/ms/readme.md +51 -0
- package/node_modules/needle/README.md +594 -0
- package/node_modules/needle/bin/needle +40 -0
- package/node_modules/needle/examples/deflated-stream.js +22 -0
- package/node_modules/needle/examples/digest-auth.js +16 -0
- package/node_modules/needle/examples/download-to-file.js +18 -0
- package/node_modules/needle/examples/multipart-stream.js +25 -0
- package/node_modules/needle/examples/parsed-stream.js +23 -0
- package/node_modules/needle/examples/parsed-stream2.js +21 -0
- package/node_modules/needle/examples/stream-events.js +23 -0
- package/node_modules/needle/examples/stream-to-file.js +14 -0
- package/node_modules/needle/examples/upload-image.js +51 -0
- package/node_modules/needle/lib/auth.js +110 -0
- package/node_modules/needle/lib/cookies.js +79 -0
- package/node_modules/needle/lib/decoder.js +53 -0
- package/node_modules/needle/lib/multipart.js +98 -0
- package/node_modules/needle/lib/needle.js +795 -0
- package/node_modules/needle/lib/parsers.js +120 -0
- package/node_modules/needle/lib/querystring.js +49 -0
- package/node_modules/needle/license.txt +19 -0
- package/node_modules/needle/note.xml +7 -0
- package/node_modules/needle/note.xml.1 +7 -0
- package/node_modules/needle/package.json +102 -0
- package/node_modules/needle/test/basic_auth_spec.js +196 -0
- package/node_modules/needle/test/compression_spec.js +94 -0
- package/node_modules/needle/test/cookies_spec.js +305 -0
- package/node_modules/needle/test/decoder_spec.js +86 -0
- package/node_modules/needle/test/errors_spec.js +286 -0
- package/node_modules/needle/test/headers_spec.js +198 -0
- package/node_modules/needle/test/helpers.js +72 -0
- package/node_modules/needle/test/long_string_spec.js +34 -0
- package/node_modules/needle/test/output_spec.js +254 -0
- package/node_modules/needle/test/parsing_spec.js +494 -0
- package/node_modules/needle/test/post_data_spec.js +1021 -0
- package/node_modules/needle/test/proxy_spec.js +202 -0
- package/node_modules/needle/test/querystring_spec.js +128 -0
- package/node_modules/needle/test/redirect_spec.js +392 -0
- package/node_modules/needle/test/redirect_with_timeout.js +45 -0
- package/node_modules/needle/test/request_stream_spec.js +202 -0
- package/node_modules/needle/test/response_stream_spec.js +139 -0
- package/node_modules/needle/test/socket_pool_spec.js +66 -0
- package/node_modules/needle/test/url_spec.js +155 -0
- package/node_modules/needle/test/utils/formidable.js +17 -0
- package/node_modules/needle/test/utils/proxy.js +62 -0
- package/node_modules/needle/test/utils/test.js +104 -0
- package/node_modules/node-pre-gyp/CHANGELOG.md +422 -0
- package/node_modules/node-pre-gyp/LICENSE +27 -0
- package/node_modules/node-pre-gyp/README.md +658 -0
- package/node_modules/node-pre-gyp/appveyor.yml +30 -0
- package/node_modules/node-pre-gyp/bin/node-pre-gyp +134 -0
- package/node_modules/node-pre-gyp/bin/node-pre-gyp.cmd +2 -0
- package/node_modules/node-pre-gyp/contributing.md +10 -0
- package/node_modules/node-pre-gyp/lib/build.js +51 -0
- package/node_modules/node-pre-gyp/lib/clean.js +32 -0
- package/node_modules/node-pre-gyp/lib/configure.js +52 -0
- package/node_modules/node-pre-gyp/lib/info.js +40 -0
- package/node_modules/node-pre-gyp/lib/install.js +243 -0
- package/node_modules/node-pre-gyp/lib/node-pre-gyp.js +203 -0
- package/node_modules/node-pre-gyp/lib/package.js +56 -0
- package/node_modules/node-pre-gyp/lib/pre-binding.js +30 -0
- package/node_modules/node-pre-gyp/lib/publish.js +79 -0
- package/node_modules/node-pre-gyp/lib/rebuild.js +21 -0
- package/node_modules/node-pre-gyp/lib/reinstall.js +20 -0
- package/node_modules/node-pre-gyp/lib/reveal.js +33 -0
- package/node_modules/node-pre-gyp/lib/testbinary.js +81 -0
- package/node_modules/node-pre-gyp/lib/testpackage.js +55 -0
- package/node_modules/node-pre-gyp/lib/unpublish.js +43 -0
- package/node_modules/node-pre-gyp/lib/util/abi_crosswalk.json +1782 -0
- package/node_modules/node-pre-gyp/lib/util/compile.js +87 -0
- package/node_modules/node-pre-gyp/lib/util/handle_gyp_opts.js +100 -0
- package/node_modules/node-pre-gyp/lib/util/napi.js +156 -0
- package/node_modules/node-pre-gyp/lib/util/nw-pre-gyp/index.html +26 -0
- package/node_modules/node-pre-gyp/lib/util/nw-pre-gyp/package.json +9 -0
- package/node_modules/node-pre-gyp/lib/util/s3_setup.js +27 -0
- package/node_modules/node-pre-gyp/lib/util/versioning.js +330 -0
- package/node_modules/node-pre-gyp/package.json +86 -0
- package/node_modules/nopt/.npmignore +1 -0
- package/node_modules/nopt/.travis.yml +8 -0
- package/node_modules/nopt/CHANGELOG.md +58 -0
- package/node_modules/nopt/LICENSE +15 -0
- package/node_modules/nopt/README.md +213 -0
- package/node_modules/nopt/bin/nopt.js +54 -0
- package/node_modules/nopt/examples/my-program.js +30 -0
- package/node_modules/nopt/lib/nopt.js +436 -0
- package/node_modules/nopt/package.json +58 -0
- package/node_modules/nopt/test/basic.js +303 -0
- package/node_modules/npm-bundled/LICENSE +15 -0
- package/node_modules/npm-bundled/README.md +48 -0
- package/node_modules/npm-bundled/index.js +229 -0
- package/node_modules/npm-bundled/package.json +60 -0
- package/node_modules/npm-packlist/LICENSE +15 -0
- package/node_modules/npm-packlist/README.md +68 -0
- package/node_modules/npm-packlist/index.js +229 -0
- package/node_modules/npm-packlist/package.json +66 -0
- package/node_modules/npmlog/CHANGELOG.md +49 -0
- package/node_modules/npmlog/LICENSE +15 -0
- package/node_modules/npmlog/README.md +216 -0
- package/node_modules/npmlog/log.js +309 -0
- package/node_modules/npmlog/package.json +61 -0
- package/node_modules/number-is-nan/index.js +4 -0
- package/node_modules/number-is-nan/license +21 -0
- package/node_modules/number-is-nan/package.json +67 -0
- package/node_modules/number-is-nan/readme.md +28 -0
- package/node_modules/object-assign/index.js +90 -0
- package/node_modules/object-assign/license +21 -0
- package/node_modules/object-assign/package.json +74 -0
- package/node_modules/object-assign/readme.md +61 -0
- package/node_modules/once/LICENSE +15 -0
- package/node_modules/once/README.md +79 -0
- package/node_modules/once/once.js +42 -0
- package/node_modules/once/package.json +67 -0
- package/node_modules/os-homedir/index.js +24 -0
- package/node_modules/os-homedir/license +21 -0
- package/node_modules/os-homedir/package.json +73 -0
- package/node_modules/os-homedir/readme.md +31 -0
- package/node_modules/os-tmpdir/index.js +25 -0
- package/node_modules/os-tmpdir/license +21 -0
- package/node_modules/os-tmpdir/package.json +73 -0
- package/node_modules/os-tmpdir/readme.md +32 -0
- package/node_modules/osenv/LICENSE +15 -0
- package/node_modules/osenv/README.md +63 -0
- package/node_modules/osenv/osenv.js +72 -0
- package/node_modules/osenv/package.json +73 -0
- package/node_modules/path-is-absolute/index.js +20 -0
- package/node_modules/path-is-absolute/license +21 -0
- package/node_modules/path-is-absolute/package.json +75 -0
- package/node_modules/path-is-absolute/readme.md +59 -0
- package/node_modules/process-nextick-args/index.js +44 -0
- package/node_modules/process-nextick-args/license.md +19 -0
- package/node_modules/process-nextick-args/package.json +50 -0
- package/node_modules/process-nextick-args/readme.md +18 -0
- package/node_modules/rc/LICENSE.APACHE2 +15 -0
- package/node_modules/rc/LICENSE.BSD +26 -0
- package/node_modules/rc/LICENSE.MIT +24 -0
- package/node_modules/rc/README.md +227 -0
- package/node_modules/rc/browser.js +7 -0
- package/node_modules/rc/cli.js +4 -0
- package/node_modules/rc/index.js +53 -0
- package/node_modules/rc/lib/utils.js +104 -0
- package/node_modules/rc/node_modules/minimist/.travis.yml +8 -0
- package/node_modules/rc/node_modules/minimist/LICENSE +18 -0
- package/node_modules/rc/node_modules/minimist/example/parse.js +2 -0
- package/node_modules/rc/node_modules/minimist/index.js +236 -0
- package/node_modules/rc/node_modules/minimist/package.json +73 -0
- package/node_modules/rc/node_modules/minimist/readme.markdown +91 -0
- package/node_modules/rc/node_modules/minimist/test/all_bool.js +32 -0
- package/node_modules/rc/node_modules/minimist/test/bool.js +166 -0
- package/node_modules/rc/node_modules/minimist/test/dash.js +31 -0
- package/node_modules/rc/node_modules/minimist/test/default_bool.js +35 -0
- package/node_modules/rc/node_modules/minimist/test/dotted.js +22 -0
- package/node_modules/rc/node_modules/minimist/test/kv_short.js +16 -0
- package/node_modules/rc/node_modules/minimist/test/long.js +31 -0
- package/node_modules/rc/node_modules/minimist/test/num.js +36 -0
- package/node_modules/rc/node_modules/minimist/test/parse.js +197 -0
- package/node_modules/rc/node_modules/minimist/test/parse_modified.js +9 -0
- package/node_modules/rc/node_modules/minimist/test/short.js +67 -0
- package/node_modules/rc/node_modules/minimist/test/stop_early.js +15 -0
- package/node_modules/rc/node_modules/minimist/test/unknown.js +102 -0
- package/node_modules/rc/node_modules/minimist/test/whitespace.js +8 -0
- package/node_modules/rc/package.json +64 -0
- package/node_modules/rc/test/ini.js +16 -0
- package/node_modules/rc/test/nested-env-vars.js +50 -0
- package/node_modules/rc/test/test.js +59 -0
- package/node_modules/readable-stream/.travis.yml +55 -0
- package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
- package/node_modules/readable-stream/GOVERNANCE.md +136 -0
- package/node_modules/readable-stream/LICENSE +47 -0
- package/node_modules/readable-stream/README.md +58 -0
- package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
- package/node_modules/readable-stream/duplex-browser.js +1 -0
- package/node_modules/readable-stream/duplex.js +1 -0
- package/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
- package/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
- package/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
- package/node_modules/readable-stream/lib/_stream_transform.js +214 -0
- package/node_modules/readable-stream/lib/_stream_writable.js +687 -0
- package/node_modules/readable-stream/lib/internal/streams/BufferList.js +79 -0
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +74 -0
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
- package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
- package/node_modules/readable-stream/package.json +81 -0
- package/node_modules/readable-stream/passthrough.js +1 -0
- package/node_modules/readable-stream/readable-browser.js +7 -0
- package/node_modules/readable-stream/readable.js +19 -0
- package/node_modules/readable-stream/transform.js +1 -0
- package/node_modules/readable-stream/writable-browser.js +1 -0
- package/node_modules/readable-stream/writable.js +8 -0
- package/node_modules/rimraf/LICENSE +15 -0
- package/node_modules/rimraf/README.md +101 -0
- package/node_modules/rimraf/bin.js +50 -0
- package/node_modules/rimraf/package.json +67 -0
- package/node_modules/rimraf/rimraf.js +364 -0
- package/node_modules/safe-buffer/LICENSE +21 -0
- package/node_modules/safe-buffer/README.md +584 -0
- package/node_modules/safe-buffer/index.d.ts +187 -0
- package/node_modules/safe-buffer/index.js +62 -0
- package/node_modules/safe-buffer/package.json +65 -0
- package/node_modules/safer-buffer/LICENSE +21 -0
- package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/node_modules/safer-buffer/Readme.md +156 -0
- package/node_modules/safer-buffer/dangerous.js +58 -0
- package/node_modules/safer-buffer/package.json +60 -0
- package/node_modules/safer-buffer/safer.js +77 -0
- package/node_modules/safer-buffer/tests.js +406 -0
- package/node_modules/sax/LICENSE +41 -0
- package/node_modules/sax/README.md +225 -0
- package/node_modules/sax/lib/sax.js +1565 -0
- package/node_modules/sax/package.json +61 -0
- package/node_modules/semver/LICENSE +15 -0
- package/node_modules/semver/README.md +399 -0
- package/node_modules/semver/bin/semver +153 -0
- package/node_modules/semver/package.json +54 -0
- package/node_modules/semver/range.bnf +16 -0
- package/node_modules/semver/semver.js +1352 -0
- package/node_modules/set-blocking/CHANGELOG.md +26 -0
- package/node_modules/set-blocking/LICENSE.txt +14 -0
- package/node_modules/set-blocking/README.md +31 -0
- package/node_modules/set-blocking/index.js +7 -0
- package/node_modules/set-blocking/package.json +70 -0
- package/node_modules/signal-exit/CHANGELOG.md +27 -0
- package/node_modules/signal-exit/LICENSE.txt +16 -0
- package/node_modules/signal-exit/README.md +40 -0
- package/node_modules/signal-exit/index.js +157 -0
- package/node_modules/signal-exit/package.json +66 -0
- package/node_modules/signal-exit/signals.js +53 -0
- package/node_modules/string-width/index.js +37 -0
- package/node_modules/string-width/license +21 -0
- package/node_modules/string-width/package.json +89 -0
- package/node_modules/string-width/readme.md +42 -0
- package/node_modules/string_decoder/.travis.yml +50 -0
- package/node_modules/string_decoder/LICENSE +48 -0
- package/node_modules/string_decoder/README.md +47 -0
- package/node_modules/string_decoder/lib/string_decoder.js +296 -0
- package/node_modules/string_decoder/package.json +59 -0
- package/node_modules/strip-ansi/index.js +6 -0
- package/node_modules/strip-ansi/license +21 -0
- package/node_modules/strip-ansi/package.json +102 -0
- package/node_modules/strip-ansi/readme.md +33 -0
- package/node_modules/strip-json-comments/index.js +70 -0
- package/node_modules/strip-json-comments/license +21 -0
- package/node_modules/strip-json-comments/package.json +74 -0
- package/node_modules/strip-json-comments/readme.md +64 -0
- package/node_modules/tar/LICENSE +15 -0
- package/node_modules/tar/README.md +954 -0
- package/node_modules/tar/index.js +18 -0
- package/node_modules/tar/lib/buffer.js +11 -0
- package/node_modules/tar/lib/create.js +105 -0
- package/node_modules/tar/lib/extract.js +112 -0
- package/node_modules/tar/lib/header.js +289 -0
- package/node_modules/tar/lib/high-level-opt.js +29 -0
- package/node_modules/tar/lib/large-numbers.js +92 -0
- package/node_modules/tar/lib/list.js +130 -0
- package/node_modules/tar/lib/mkdir.js +206 -0
- package/node_modules/tar/lib/mode-fix.js +14 -0
- package/node_modules/tar/lib/pack.js +404 -0
- package/node_modules/tar/lib/parse.js +423 -0
- package/node_modules/tar/lib/pax.js +146 -0
- package/node_modules/tar/lib/read-entry.js +94 -0
- package/node_modules/tar/lib/replace.js +220 -0
- package/node_modules/tar/lib/types.js +44 -0
- package/node_modules/tar/lib/unpack.js +621 -0
- package/node_modules/tar/lib/update.js +36 -0
- package/node_modules/tar/lib/warn-mixin.js +14 -0
- package/node_modules/tar/lib/winchars.js +23 -0
- package/node_modules/tar/lib/write-entry.js +422 -0
- package/node_modules/tar/package.json +78 -0
- package/node_modules/util-deprecate/History.md +16 -0
- package/node_modules/util-deprecate/LICENSE +24 -0
- package/node_modules/util-deprecate/README.md +53 -0
- package/node_modules/util-deprecate/browser.js +67 -0
- package/node_modules/util-deprecate/node.js +6 -0
- package/node_modules/util-deprecate/package.json +56 -0
- package/node_modules/wide-align/LICENSE +14 -0
- package/node_modules/wide-align/README.md +47 -0
- package/node_modules/wide-align/align.js +65 -0
- package/node_modules/wide-align/package.json +66 -0
- package/node_modules/wrappy/LICENSE +15 -0
- package/node_modules/wrappy/README.md +36 -0
- package/node_modules/wrappy/package.json +59 -0
- package/node_modules/wrappy/wrappy.js +33 -0
- package/node_modules/yallist/LICENSE +15 -0
- package/node_modules/yallist/README.md +204 -0
- package/node_modules/yallist/iterator.js +8 -0
- package/node_modules/yallist/package.json +63 -0
- package/node_modules/yallist/yallist.js +376 -0
- package/package.json +1 -1
@@ -0,0 +1,795 @@
|
|
1
|
+
//////////////////////////////////////////
|
2
|
+
// Needle -- HTTP Client for Node.js
|
3
|
+
// Written by Tomás Pollak <tomas@forkhq.com>
|
4
|
+
// (c) 2012-2017 - Fork Ltd.
|
5
|
+
// MIT Licensed
|
6
|
+
//////////////////////////////////////////
|
7
|
+
|
8
|
+
var fs = require('fs'),
|
9
|
+
http = require('http'),
|
10
|
+
https = require('https'),
|
11
|
+
url = require('url'),
|
12
|
+
stream = require('stream'),
|
13
|
+
debug = require('debug')('needle'),
|
14
|
+
stringify = require('./querystring').build,
|
15
|
+
multipart = require('./multipart'),
|
16
|
+
auth = require('./auth'),
|
17
|
+
cookies = require('./cookies'),
|
18
|
+
parsers = require('./parsers'),
|
19
|
+
decoder = require('./decoder');
|
20
|
+
|
21
|
+
//////////////////////////////////////////
|
22
|
+
// variabilia
|
23
|
+
|
24
|
+
var version = require('../package.json').version;
|
25
|
+
|
26
|
+
var user_agent = 'Needle/' + version;
|
27
|
+
user_agent += ' (Node.js ' + process.version + '; ' + process.platform + ' ' + process.arch + ')';
|
28
|
+
|
29
|
+
var tls_options = 'agent pfx key passphrase cert ca ciphers rejectUnauthorized secureProtocol checkServerIdentity';
|
30
|
+
|
31
|
+
// older versions of node (< 0.11.4) prevent the runtime from exiting
|
32
|
+
// because of connections in keep-alive state. so if this is the case
|
33
|
+
// we'll default new requests to set a Connection: close header.
|
34
|
+
var close_by_default = !http.Agent || http.Agent.defaultMaxSockets != Infinity;
|
35
|
+
|
36
|
+
// see if we have Object.assign. otherwise fall back to util._extend
|
37
|
+
var extend = Object.assign ? Object.assign : require('util')._extend;
|
38
|
+
|
39
|
+
// these are the status codes that Needle interprets as redirects.
|
40
|
+
var redirect_codes = [301, 302, 303, 307];
|
41
|
+
|
42
|
+
//////////////////////////////////////////
|
43
|
+
// decompressors for gzip/deflate bodies
|
44
|
+
|
45
|
+
var decompressors = {};
|
46
|
+
|
47
|
+
try {
|
48
|
+
|
49
|
+
var zlib = require('zlib');
|
50
|
+
decompressors['x-deflate'] = zlib.Inflate;
|
51
|
+
decompressors['deflate'] = zlib.Inflate;
|
52
|
+
decompressors['x-gzip'] = zlib.Gunzip;
|
53
|
+
decompressors['gzip'] = zlib.Gunzip;
|
54
|
+
|
55
|
+
// Enable Z_SYNC_FLUSH to avoid Z_BUF_ERROR errors (Node PR #2595)
|
56
|
+
var zlib_options = {
|
57
|
+
flush: zlib.Z_SYNC_FLUSH,
|
58
|
+
finishFlush: zlib.Z_SYNC_FLUSH
|
59
|
+
}
|
60
|
+
|
61
|
+
} catch(e) { /* zlib not available */ }
|
62
|
+
|
63
|
+
//////////////////////////////////////////
|
64
|
+
// options and aliases
|
65
|
+
|
66
|
+
var defaults = {
|
67
|
+
// data
|
68
|
+
boundary : '--------------------NODENEEDLEHTTPCLIENT',
|
69
|
+
encoding : 'utf8',
|
70
|
+
parse_response : 'all', // same as true. valid options: 'json', 'xml' or false/null
|
71
|
+
proxy : null,
|
72
|
+
|
73
|
+
// headers
|
74
|
+
accept : '*/*',
|
75
|
+
user_agent : user_agent,
|
76
|
+
|
77
|
+
// numbers
|
78
|
+
open_timeout : 10000,
|
79
|
+
response_timeout : 0,
|
80
|
+
read_timeout : 0,
|
81
|
+
follow_max : 0,
|
82
|
+
stream_length : -1,
|
83
|
+
|
84
|
+
// booleans
|
85
|
+
decode_response : true,
|
86
|
+
parse_cookies : true,
|
87
|
+
follow_set_cookies : false,
|
88
|
+
follow_set_referer : false,
|
89
|
+
follow_keep_method : false,
|
90
|
+
follow_if_same_host : false,
|
91
|
+
follow_if_same_protocol : false
|
92
|
+
}
|
93
|
+
|
94
|
+
var aliased = {
|
95
|
+
options: {
|
96
|
+
decode : 'decode_response',
|
97
|
+
parse : 'parse_response',
|
98
|
+
timeout : 'open_timeout',
|
99
|
+
follow : 'follow_max'
|
100
|
+
},
|
101
|
+
inverted: {}
|
102
|
+
}
|
103
|
+
|
104
|
+
// only once, invert aliased keys so we can get passed options.
|
105
|
+
Object.keys(aliased.options).map(function(k) {
|
106
|
+
var value = aliased.options[k];
|
107
|
+
aliased.inverted[value] = k;
|
108
|
+
});
|
109
|
+
|
110
|
+
//////////////////////////////////////////
|
111
|
+
// helpers
|
112
|
+
|
113
|
+
function keys_by_type(type) {
|
114
|
+
return Object.keys(defaults).map(function(el) {
|
115
|
+
if (defaults[el] !== null && defaults[el].constructor == type)
|
116
|
+
return el;
|
117
|
+
}).filter(function(el) { return el })
|
118
|
+
}
|
119
|
+
|
120
|
+
function parse_content_type(header) {
|
121
|
+
if (!header || header === '') return {};
|
122
|
+
|
123
|
+
var found, charset = 'iso-8859-1', arr = header.split(';');
|
124
|
+
|
125
|
+
if (arr.length > 1 && (found = arr[1].match(/charset=(.+)/)))
|
126
|
+
charset = found[1];
|
127
|
+
|
128
|
+
return { type: arr[0], charset: charset };
|
129
|
+
}
|
130
|
+
|
131
|
+
function is_stream(obj) {
|
132
|
+
return typeof obj.pipe === 'function';
|
133
|
+
}
|
134
|
+
|
135
|
+
function get_stream_length(stream, given_length, cb) {
|
136
|
+
if (given_length > 0)
|
137
|
+
return cb(given_length);
|
138
|
+
|
139
|
+
if (stream.end !== void 0 && stream.end !== Infinity && stream.start !== void 0)
|
140
|
+
return cb((stream.end + 1) - (stream.start || 0));
|
141
|
+
|
142
|
+
fs.stat(stream.path, function(err, stat) {
|
143
|
+
cb(stat ? stat.size - (stream.start || 0) : null);
|
144
|
+
});
|
145
|
+
}
|
146
|
+
|
147
|
+
//////////////////////////////////////////
|
148
|
+
// the main act
|
149
|
+
|
150
|
+
function Needle(method, uri, data, options, callback) {
|
151
|
+
// if (!(this instanceof Needle)) {
|
152
|
+
// return new Needle(method, uri, data, options, callback);
|
153
|
+
// }
|
154
|
+
|
155
|
+
if (typeof uri !== 'string')
|
156
|
+
throw new TypeError('URL must be a string, not ' + uri);
|
157
|
+
|
158
|
+
this.method = method;
|
159
|
+
this.uri = uri;
|
160
|
+
this.data = data;
|
161
|
+
|
162
|
+
if (typeof options == 'function') {
|
163
|
+
this.callback = options;
|
164
|
+
this.options = {};
|
165
|
+
} else {
|
166
|
+
this.callback = callback;
|
167
|
+
this.options = options;
|
168
|
+
}
|
169
|
+
|
170
|
+
}
|
171
|
+
|
172
|
+
Needle.prototype.setup = function(uri, options) {
|
173
|
+
|
174
|
+
function get_option(key, fallback) {
|
175
|
+
// if original is in options, return that value
|
176
|
+
if (typeof options[key] != 'undefined') return options[key];
|
177
|
+
|
178
|
+
// otherwise, return value from alias or fallback/undefined
|
179
|
+
return typeof options[aliased.inverted[key]] != 'undefined'
|
180
|
+
? options[aliased.inverted[key]] : fallback;
|
181
|
+
}
|
182
|
+
|
183
|
+
function check_value(expected, key) {
|
184
|
+
var value = get_option(key),
|
185
|
+
type = typeof value;
|
186
|
+
|
187
|
+
if (type != 'undefined' && type != expected)
|
188
|
+
throw new TypeError(type + ' received for ' + key + ', but expected a ' + expected);
|
189
|
+
|
190
|
+
return (type == expected) ? value : defaults[key];
|
191
|
+
}
|
192
|
+
|
193
|
+
//////////////////////////////////////////////////
|
194
|
+
// the basics
|
195
|
+
|
196
|
+
var config = {
|
197
|
+
http_opts : {
|
198
|
+
localAddress: get_option('localAddress', undefined)
|
199
|
+
}, // passed later to http.request() directly
|
200
|
+
output : options.output,
|
201
|
+
proxy : get_option('proxy', defaults.proxy),
|
202
|
+
parser : get_option('parse_response', defaults.parse_response),
|
203
|
+
encoding : options.encoding || (options.multipart ? 'binary' : defaults.encoding)
|
204
|
+
}
|
205
|
+
|
206
|
+
keys_by_type(Boolean).forEach(function(key) {
|
207
|
+
config[key] = check_value('boolean', key);
|
208
|
+
})
|
209
|
+
|
210
|
+
keys_by_type(Number).forEach(function(key) {
|
211
|
+
config[key] = check_value('number', key);
|
212
|
+
})
|
213
|
+
|
214
|
+
// populate http_opts with given TLS options
|
215
|
+
tls_options.split(' ').forEach(function(key) {
|
216
|
+
if (typeof options[key] != 'undefined') {
|
217
|
+
config.http_opts[key] = options[key];
|
218
|
+
if (typeof options.agent == 'undefined')
|
219
|
+
config.http_opts.agent = false; // otherwise tls options are skipped
|
220
|
+
}
|
221
|
+
});
|
222
|
+
|
223
|
+
//////////////////////////////////////////////////
|
224
|
+
// headers, cookies
|
225
|
+
|
226
|
+
config.headers = {
|
227
|
+
'accept' : options.accept || defaults.accept,
|
228
|
+
'user-agent' : options.user_agent || defaults.user_agent
|
229
|
+
}
|
230
|
+
|
231
|
+
if (options.content_type)
|
232
|
+
config.headers['content-type'] = options.content_type;
|
233
|
+
|
234
|
+
// set connection header if opts.connection was passed, or if node < 0.11.4 (close)
|
235
|
+
if (options.connection || close_by_default)
|
236
|
+
config.headers['connection'] = options.connection || 'close';
|
237
|
+
|
238
|
+
if ((options.compressed || defaults.compressed) && typeof zlib != 'undefined')
|
239
|
+
config.headers['accept-encoding'] = 'gzip,deflate';
|
240
|
+
|
241
|
+
if (options.cookies)
|
242
|
+
config.headers['cookie'] = cookies.write(options.cookies);
|
243
|
+
|
244
|
+
//////////////////////////////////////////////////
|
245
|
+
// basic/digest auth
|
246
|
+
|
247
|
+
if (uri.match(/[^\/]@/)) { // url contains user:pass@host, so parse it.
|
248
|
+
var parts = (url.parse(uri).auth || '').split(':');
|
249
|
+
options.username = parts[0];
|
250
|
+
options.password = parts[1];
|
251
|
+
}
|
252
|
+
|
253
|
+
if (options.username) {
|
254
|
+
if (options.auth && (options.auth == 'auto' || options.auth == 'digest')) {
|
255
|
+
config.credentials = [options.username, options.password];
|
256
|
+
} else {
|
257
|
+
config.headers['authorization'] = auth.basic(options.username, options.password);
|
258
|
+
}
|
259
|
+
}
|
260
|
+
|
261
|
+
// if proxy is present, set auth header from either url or proxy_user option.
|
262
|
+
if (config.proxy) {
|
263
|
+
if (config.proxy.indexOf('http') === -1)
|
264
|
+
config.proxy = 'http://' + config.proxy;
|
265
|
+
|
266
|
+
if (config.proxy.indexOf('@') !== -1) {
|
267
|
+
var proxy = (url.parse(config.proxy).auth || '').split(':');
|
268
|
+
options.proxy_user = proxy[0];
|
269
|
+
options.proxy_pass = proxy[1];
|
270
|
+
}
|
271
|
+
|
272
|
+
if (options.proxy_user)
|
273
|
+
config.headers['proxy-authorization'] = auth.basic(options.proxy_user, options.proxy_pass);
|
274
|
+
}
|
275
|
+
|
276
|
+
// now that all our headers are set, overwrite them if instructed.
|
277
|
+
for (var h in options.headers)
|
278
|
+
config.headers[h.toLowerCase()] = options.headers[h];
|
279
|
+
|
280
|
+
return config;
|
281
|
+
}
|
282
|
+
|
283
|
+
Needle.prototype.start = function() {
|
284
|
+
|
285
|
+
var out = new stream.PassThrough({ objectMode: false }),
|
286
|
+
uri = this.uri,
|
287
|
+
data = this.data,
|
288
|
+
method = this.method,
|
289
|
+
callback = (typeof this.options == 'function') ? this.options : this.callback,
|
290
|
+
options = this.options || {};
|
291
|
+
|
292
|
+
// if no 'http' is found on URL, prepend it.
|
293
|
+
if (uri.indexOf('http') === -1)
|
294
|
+
uri = uri.replace(/^(\/\/)?/, 'http://');
|
295
|
+
|
296
|
+
var self = this, body, waiting = false, config = this.setup(uri, options);
|
297
|
+
|
298
|
+
// unless options.json was set to false, assume boss also wants JSON if content-type matches.
|
299
|
+
var json = options.json || (options.json !== false && config.headers['content-type'] == 'application/json');
|
300
|
+
|
301
|
+
if (data) {
|
302
|
+
|
303
|
+
if (options.multipart) { // boss says we do multipart. so we do it.
|
304
|
+
var boundary = options.boundary || defaults.boundary;
|
305
|
+
|
306
|
+
waiting = true;
|
307
|
+
multipart.build(data, boundary, function(err, parts) {
|
308
|
+
if (err) throw(err);
|
309
|
+
|
310
|
+
config.headers['content-type'] = 'multipart/form-data; boundary=' + boundary;
|
311
|
+
next(parts);
|
312
|
+
});
|
313
|
+
|
314
|
+
} else if (is_stream(data)) {
|
315
|
+
|
316
|
+
if (method.toUpperCase() == 'GET')
|
317
|
+
throw new Error('Refusing to pipe() a stream via GET. Did you mean .post?');
|
318
|
+
|
319
|
+
if (config.stream_length > 0 || (config.stream_length === 0 && data.path)) {
|
320
|
+
// ok, let's get the stream's length and set it as the content-length header.
|
321
|
+
// this prevents some servers from cutting us off before all the data is sent.
|
322
|
+
waiting = true;
|
323
|
+
get_stream_length(data, config.stream_length, function(length) {
|
324
|
+
data.length = length;
|
325
|
+
next(data);
|
326
|
+
})
|
327
|
+
|
328
|
+
} else {
|
329
|
+
// if the boss doesn't want us to get the stream's length, or if it doesn't
|
330
|
+
// have a file descriptor for that purpose, then just head on.
|
331
|
+
body = data;
|
332
|
+
}
|
333
|
+
|
334
|
+
} else if (Buffer.isBuffer(data)) {
|
335
|
+
|
336
|
+
body = data; // use the raw buffer as request body.
|
337
|
+
|
338
|
+
} else if (method.toUpperCase() == 'GET' && !json) {
|
339
|
+
|
340
|
+
// append the data to the URI as a querystring.
|
341
|
+
uri = uri.replace(/\?.*|$/, '?' + stringify(data));
|
342
|
+
|
343
|
+
} else { // string or object data, no multipart.
|
344
|
+
|
345
|
+
// if string, leave it as it is, otherwise, stringify.
|
346
|
+
body = (typeof(data) === 'string') ? data
|
347
|
+
: json ? JSON.stringify(data) : stringify(data);
|
348
|
+
|
349
|
+
// ensure we have a buffer so bytecount is correct.
|
350
|
+
body = new Buffer(body, config.encoding);
|
351
|
+
}
|
352
|
+
|
353
|
+
}
|
354
|
+
|
355
|
+
function next(body) {
|
356
|
+
if (body) {
|
357
|
+
if (body.length) config.headers['content-length'] = body.length;
|
358
|
+
|
359
|
+
// if no content-type was passed, determine if json or not.
|
360
|
+
if (!config.headers['content-type']) {
|
361
|
+
config.headers['content-type'] = json
|
362
|
+
? 'application/json; charset=utf-8'
|
363
|
+
: 'application/x-www-form-urlencoded'; // no charset says W3 spec.
|
364
|
+
}
|
365
|
+
}
|
366
|
+
|
367
|
+
// unless a specific accept header was set, assume json: true wants JSON back.
|
368
|
+
if (options.json && (!options.accept && !(options.headers || {}).accept))
|
369
|
+
config.headers['accept'] = 'application/json';
|
370
|
+
|
371
|
+
self.send_request(1, method, uri, config, body, out, callback);
|
372
|
+
}
|
373
|
+
|
374
|
+
if (!waiting) next(body);
|
375
|
+
return out;
|
376
|
+
}
|
377
|
+
|
378
|
+
Needle.prototype.get_request_opts = function(method, uri, config) {
|
379
|
+
var opts = config.http_opts,
|
380
|
+
proxy = config.proxy,
|
381
|
+
remote = proxy ? url.parse(proxy) : url.parse(uri);
|
382
|
+
|
383
|
+
opts.protocol = remote.protocol;
|
384
|
+
opts.host = remote.hostname;
|
385
|
+
opts.port = remote.port || (remote.protocol == 'https:' ? 443 : 80);
|
386
|
+
opts.path = proxy ? uri : remote.pathname + (remote.search || '');
|
387
|
+
opts.method = method;
|
388
|
+
opts.headers = config.headers;
|
389
|
+
|
390
|
+
if (!opts.headers['host']) {
|
391
|
+
// if using proxy, make sure the host header shows the final destination
|
392
|
+
var target = proxy ? url.parse(uri) : remote;
|
393
|
+
opts.headers['host'] = target.hostname;
|
394
|
+
|
395
|
+
// and if a non standard port was passed, append it to the port header
|
396
|
+
if (target.port && [80, 443].indexOf(target.port) === -1) {
|
397
|
+
opts.headers['host'] += ':' + target.port;
|
398
|
+
}
|
399
|
+
}
|
400
|
+
|
401
|
+
return opts;
|
402
|
+
}
|
403
|
+
|
404
|
+
Needle.prototype.should_follow = function(location, config, original) {
|
405
|
+
if (!location) return false;
|
406
|
+
|
407
|
+
// returns true if location contains matching property (host or protocol)
|
408
|
+
function matches(property) {
|
409
|
+
var property = original[property];
|
410
|
+
return location.indexOf(property) !== -1;
|
411
|
+
}
|
412
|
+
|
413
|
+
// first, check whether the requested location is actually different from the original
|
414
|
+
if (location === original)
|
415
|
+
return false;
|
416
|
+
|
417
|
+
if (config.follow_if_same_host && !matches('host'))
|
418
|
+
return false; // host does not match, so not following
|
419
|
+
|
420
|
+
if (config.follow_if_same_protocol && !matches('protocol'))
|
421
|
+
return false; // procotol does not match, so not following
|
422
|
+
|
423
|
+
return true;
|
424
|
+
}
|
425
|
+
|
426
|
+
Needle.prototype.send_request = function(count, method, uri, config, post_data, out, callback) {
|
427
|
+
|
428
|
+
var timer,
|
429
|
+
returned = 0,
|
430
|
+
self = this,
|
431
|
+
request_opts = this.get_request_opts(method, uri, config),
|
432
|
+
protocol = request_opts.protocol == 'https:' ? https : http;
|
433
|
+
|
434
|
+
function done(err, resp) {
|
435
|
+
if (returned++ > 0)
|
436
|
+
return debug('Already finished, stopping here.');
|
437
|
+
|
438
|
+
if (timer) clearTimeout(timer);
|
439
|
+
request.removeListener('error', had_error);
|
440
|
+
|
441
|
+
if (callback)
|
442
|
+
return callback(err, resp, resp ? resp.body : undefined);
|
443
|
+
|
444
|
+
// NOTE: this event used to be called 'end', but the behaviour was confusing
|
445
|
+
// when errors ocurred, because the stream would still emit an 'end' event.
|
446
|
+
out.emit('done', err);
|
447
|
+
}
|
448
|
+
|
449
|
+
function had_error(err) {
|
450
|
+
debug('Request error', err);
|
451
|
+
out.emit('err', err);
|
452
|
+
done(err || new Error('Unknown error when making request.'));
|
453
|
+
}
|
454
|
+
|
455
|
+
function set_timeout(type, milisecs) {
|
456
|
+
if (timer) clearTimeout(timer);
|
457
|
+
if (milisecs <= 0) return;
|
458
|
+
|
459
|
+
timer = setTimeout(function() {
|
460
|
+
out.emit('timeout', type);
|
461
|
+
request.abort();
|
462
|
+
// also invoke done() to terminate job on read_timeout
|
463
|
+
if (type == 'read') done(new Error(type + ' timeout'));
|
464
|
+
}, milisecs);
|
465
|
+
}
|
466
|
+
|
467
|
+
// handle errors on the underlying socket, that may be closed while writing
|
468
|
+
// for an example case, see test/long_string_spec.js. we make sure this
|
469
|
+
// scenario ocurred by verifying the socket's writable & destroyed states.
|
470
|
+
function on_socket_end() {
|
471
|
+
if (!this.writable && this.destroyed === false) {
|
472
|
+
this.destroy();
|
473
|
+
had_error(new Error('Remote end closed socket abruptly.'))
|
474
|
+
}
|
475
|
+
}
|
476
|
+
|
477
|
+
debug('Making request #' + count, request_opts);
|
478
|
+
var request = protocol.request(request_opts, function(resp) {
|
479
|
+
|
480
|
+
var headers = resp.headers;
|
481
|
+
debug('Got response', resp.statusCode, headers);
|
482
|
+
out.emit('response', resp);
|
483
|
+
|
484
|
+
set_timeout('read', config.read_timeout);
|
485
|
+
|
486
|
+
// if we got cookies, parse them unless we were instructed not to. make sure to include any
|
487
|
+
// cookies that might have been set on previous redirects.
|
488
|
+
if (config.parse_cookies && (headers['set-cookie'] || config.stored_cookies)) {
|
489
|
+
resp.cookies = extend(config.stored_cookies || {}, cookies.read(headers['set-cookie']));
|
490
|
+
debug('Got cookies', resp.cookies);
|
491
|
+
}
|
492
|
+
|
493
|
+
// if redirect code is found, determine if we should follow it according to the given options.
|
494
|
+
if (redirect_codes.indexOf(resp.statusCode) !== -1 && self.should_follow(headers.location, config, uri)) {
|
495
|
+
// clear timer before following redirects to prevent unexpected setTimeout consequence
|
496
|
+
clearTimeout(timer);
|
497
|
+
|
498
|
+
if (count <= config.follow_max) {
|
499
|
+
out.emit('redirect', headers.location);
|
500
|
+
|
501
|
+
// unless 'follow_keep_method' is true, rewrite the request to GET before continuing.
|
502
|
+
if (!config.follow_keep_method) {
|
503
|
+
method = 'GET';
|
504
|
+
post_data = null;
|
505
|
+
delete config.headers['content-length']; // in case the original was a multipart POST request.
|
506
|
+
}
|
507
|
+
|
508
|
+
// if follow_set_cookies is true, make sure to put any cookies in the next request's headers.
|
509
|
+
if (config.follow_set_cookies && resp.cookies) {
|
510
|
+
config.stored_cookies = resp.cookies;
|
511
|
+
config.headers['cookie'] = cookies.write(resp.cookies);
|
512
|
+
}
|
513
|
+
|
514
|
+
if (config.follow_set_referer)
|
515
|
+
config.headers['referer'] = encodeURI(uri); // the original, not the destination URL.
|
516
|
+
|
517
|
+
config.headers['host'] = null; // clear previous Host header to avoid conflicts.
|
518
|
+
|
519
|
+
debug('Redirecting to ' + url.resolve(uri, headers.location));
|
520
|
+
return self.send_request(++count, method, url.resolve(uri, headers.location), config, post_data, out, callback);
|
521
|
+
} else if (config.follow_max > 0) {
|
522
|
+
return done(new Error('Max redirects reached. Possible loop in: ' + headers.location));
|
523
|
+
}
|
524
|
+
}
|
525
|
+
|
526
|
+
// if auth is requested and credentials were not passed, resend request, provided we have user/pass.
|
527
|
+
if (resp.statusCode == 401 && headers['www-authenticate'] && config.credentials) {
|
528
|
+
if (!config.headers['authorization']) { // only if authentication hasn't been sent
|
529
|
+
var auth_header = auth.header(headers['www-authenticate'], config.credentials, request_opts);
|
530
|
+
|
531
|
+
if (auth_header) {
|
532
|
+
config.headers['authorization'] = auth_header;
|
533
|
+
return self.send_request(count, method, uri, config, post_data, out, callback);
|
534
|
+
}
|
535
|
+
}
|
536
|
+
}
|
537
|
+
|
538
|
+
// ok, so we got a valid (non-redirect & authorized) response. let's notify the stream guys.
|
539
|
+
out.emit('header', resp.statusCode, headers);
|
540
|
+
out.emit('headers', headers);
|
541
|
+
|
542
|
+
var pipeline = [],
|
543
|
+
mime = parse_content_type(headers['content-type']),
|
544
|
+
text_response = mime.type && mime.type.indexOf('text/') != -1;
|
545
|
+
|
546
|
+
// To start, if our body is compressed and we're able to inflate it, do it.
|
547
|
+
if (headers['content-encoding'] && decompressors[headers['content-encoding']]) {
|
548
|
+
|
549
|
+
var decompressor = decompressors[headers['content-encoding']](zlib_options);
|
550
|
+
|
551
|
+
// make sure we catch errors triggered by the decompressor.
|
552
|
+
decompressor.on('error', had_error);
|
553
|
+
pipeline.push(decompressor);
|
554
|
+
}
|
555
|
+
|
556
|
+
// If parse is enabled and we have a parser for it, then go for it.
|
557
|
+
if (config.parser && parsers[mime.type]) {
|
558
|
+
|
559
|
+
// If a specific parser was requested, make sure we don't parse other types.
|
560
|
+
var parser_name = config.parser.toString().toLowerCase();
|
561
|
+
if (['xml', 'json'].indexOf(parser_name) == -1 || parsers[mime.type].name == parser_name) {
|
562
|
+
|
563
|
+
// OK, so either we're parsing all content types or the one requested matches.
|
564
|
+
out.parser = parsers[mime.type].name;
|
565
|
+
pipeline.push(parsers[mime.type].fn());
|
566
|
+
|
567
|
+
// Set objectMode on out stream to improve performance.
|
568
|
+
out._writableState.objectMode = true;
|
569
|
+
out._readableState.objectMode = true;
|
570
|
+
}
|
571
|
+
|
572
|
+
// If we're not parsing, and unless decoding was disabled, we'll try
|
573
|
+
// decoding non UTF-8 bodies to UTF-8, using the iconv-lite library.
|
574
|
+
} else if (text_response && config.decode_response
|
575
|
+
&& mime.charset && !mime.charset.match(/utf-?8$/i)) {
|
576
|
+
pipeline.push(decoder(mime.charset));
|
577
|
+
}
|
578
|
+
|
579
|
+
// And `out` is the stream we finally push the decoded/parsed output to.
|
580
|
+
pipeline.push(out);
|
581
|
+
|
582
|
+
// Now, release the kraken!
|
583
|
+
var tmp = resp;
|
584
|
+
while (pipeline.length) {
|
585
|
+
tmp = tmp.pipe(pipeline.shift());
|
586
|
+
}
|
587
|
+
|
588
|
+
// If the user has requested and output file, pipe the output stream to it.
|
589
|
+
// In stream mode, we will still get the response stream to play with.
|
590
|
+
if (config.output && resp.statusCode == 200) {
|
591
|
+
|
592
|
+
// for some reason, simply piping resp to the writable stream doesn't
|
593
|
+
// work all the time (stream gets cut in the middle with no warning).
|
594
|
+
// so we'll manually need to do the readable/write(chunk) trick.
|
595
|
+
var file = fs.createWriteStream(config.output);
|
596
|
+
file.on('error', had_error);
|
597
|
+
|
598
|
+
out.on('end', function() {
|
599
|
+
if (file.writable) file.end();
|
600
|
+
});
|
601
|
+
|
602
|
+
file.on('close', function() {
|
603
|
+
delete out.file;
|
604
|
+
})
|
605
|
+
|
606
|
+
out.on('readable', function() {
|
607
|
+
var chunk;
|
608
|
+
while ((chunk = this.read()) !== null) {
|
609
|
+
if (file.writable) file.write(chunk);
|
610
|
+
|
611
|
+
// if callback was requested, also push it to resp.body
|
612
|
+
if (resp.body) resp.body.push(chunk);
|
613
|
+
}
|
614
|
+
})
|
615
|
+
|
616
|
+
out.file = file;
|
617
|
+
}
|
618
|
+
|
619
|
+
// Only aggregate the full body if a callback was requested.
|
620
|
+
if (callback) {
|
621
|
+
resp.raw = [];
|
622
|
+
resp.body = [];
|
623
|
+
resp.bytes = 0;
|
624
|
+
|
625
|
+
// Gather and count the amount of (raw) bytes using a PassThrough stream.
|
626
|
+
var clean_pipe = new stream.PassThrough();
|
627
|
+
resp.pipe(clean_pipe);
|
628
|
+
|
629
|
+
clean_pipe.on('readable', function() {
|
630
|
+
var chunk;
|
631
|
+
while ((chunk = this.read()) != null) {
|
632
|
+
resp.bytes += chunk.length;
|
633
|
+
resp.raw.push(chunk);
|
634
|
+
}
|
635
|
+
})
|
636
|
+
|
637
|
+
// Listen on the 'readable' event to aggregate the chunks, but only if
|
638
|
+
// file output wasn't requested. Otherwise we'd have two stream readers.
|
639
|
+
if (!config.output || resp.statusCode != 200) {
|
640
|
+
out.on('readable', function() {
|
641
|
+
var chunk;
|
642
|
+
while ((chunk = this.read()) !== null) {
|
643
|
+
// We're either pushing buffers or objects, never strings.
|
644
|
+
if (typeof chunk == 'string') chunk = new Buffer(chunk);
|
645
|
+
|
646
|
+
// Push all chunks to resp.body. We'll bind them in resp.end().
|
647
|
+
resp.body.push(chunk);
|
648
|
+
}
|
649
|
+
})
|
650
|
+
}
|
651
|
+
}
|
652
|
+
|
653
|
+
// And set the .body property once all data is in.
|
654
|
+
out.on('end', function() {
|
655
|
+
if (resp.body) { // callback mode
|
656
|
+
|
657
|
+
// we want to be able to access to the raw data later, so keep a reference.
|
658
|
+
resp.raw = Buffer.concat(resp.raw);
|
659
|
+
|
660
|
+
// if parse was successful, we should have an array with one object
|
661
|
+
if (resp.body[0] !== undefined && !Buffer.isBuffer(resp.body[0])) {
|
662
|
+
|
663
|
+
// that's our body right there.
|
664
|
+
resp.body = resp.body[0];
|
665
|
+
|
666
|
+
// set the parser property on our response. we may want to check.
|
667
|
+
if (out.parser) resp.parser = out.parser;
|
668
|
+
|
669
|
+
} else { // we got one or several buffers. string or binary.
|
670
|
+
resp.body = Buffer.concat(resp.body);
|
671
|
+
|
672
|
+
// if we're here and parsed is true, it means we tried to but it didn't work.
|
673
|
+
// so given that we got a text response, let's stringify it.
|
674
|
+
if (text_response || out.parser) {
|
675
|
+
resp.body = resp.body.toString();
|
676
|
+
}
|
677
|
+
}
|
678
|
+
}
|
679
|
+
|
680
|
+
// if an output file is being written to, make sure the callback
|
681
|
+
// is triggered after all data has been written to it.
|
682
|
+
if (out.file) {
|
683
|
+
out.file.on('close', function() {
|
684
|
+
done(null, resp, resp.body);
|
685
|
+
})
|
686
|
+
} else { // elvis has left the building.
|
687
|
+
done(null, resp, resp.body);
|
688
|
+
}
|
689
|
+
|
690
|
+
});
|
691
|
+
|
692
|
+
}); // end request call
|
693
|
+
|
694
|
+
// unless open_timeout was disabled, set a timeout to abort the request.
|
695
|
+
set_timeout('open', config.open_timeout);
|
696
|
+
|
697
|
+
// handle errors on the request object. things might get bumpy.
|
698
|
+
request.on('error', had_error);
|
699
|
+
|
700
|
+
// make sure timer is cleared if request is aborted (issue #257)
|
701
|
+
request.once('abort', function() {
|
702
|
+
if (timer) clearTimeout(timer);
|
703
|
+
})
|
704
|
+
|
705
|
+
// handle socket 'end' event to ensure we don't get delayed EPIPE errors.
|
706
|
+
request.once('socket', function(socket) {
|
707
|
+
if (socket.connecting) {
|
708
|
+
socket.once('connect', function() {
|
709
|
+
set_timeout('response', config.response_timeout);
|
710
|
+
})
|
711
|
+
} else {
|
712
|
+
set_timeout('response', config.response_timeout);
|
713
|
+
}
|
714
|
+
|
715
|
+
// console.log(socket);
|
716
|
+
if (!socket.on_socket_end) {
|
717
|
+
socket.on_socket_end = on_socket_end;
|
718
|
+
socket.once('end', function() { process.nextTick(on_socket_end.bind(socket)) });
|
719
|
+
}
|
720
|
+
})
|
721
|
+
|
722
|
+
if (post_data) {
|
723
|
+
if (is_stream(post_data)) {
|
724
|
+
post_data.pipe(request);
|
725
|
+
} else {
|
726
|
+
request.write(post_data, config.encoding);
|
727
|
+
request.end();
|
728
|
+
}
|
729
|
+
} else {
|
730
|
+
request.end();
|
731
|
+
}
|
732
|
+
|
733
|
+
out.request = request;
|
734
|
+
return out;
|
735
|
+
}
|
736
|
+
|
737
|
+
//////////////////////////////////////////
|
738
|
+
// exports
|
739
|
+
|
740
|
+
if (typeof Promise !== 'undefined') {
|
741
|
+
module.exports = function() {
|
742
|
+
var verb, args = [].slice.call(arguments);
|
743
|
+
|
744
|
+
if (args[0].match(/\.|\//)) // first argument looks like a URL
|
745
|
+
verb = (args.length > 2) ? 'post' : 'get';
|
746
|
+
else
|
747
|
+
verb = args.shift();
|
748
|
+
|
749
|
+
if (verb.match(/get|head/) && args.length == 2)
|
750
|
+
args.splice(1, 0, null); // assume no data if head/get with two args (url, options)
|
751
|
+
|
752
|
+
return new Promise(function(resolve, reject) {
|
753
|
+
module.exports.request(verb, args[0], args[1], args[2], function(err, resp) {
|
754
|
+
return err ? reject(err) : resolve(resp);
|
755
|
+
});
|
756
|
+
})
|
757
|
+
}
|
758
|
+
}
|
759
|
+
|
760
|
+
module.exports.version = version;
|
761
|
+
|
762
|
+
module.exports.defaults = function(obj) {
|
763
|
+
for (var key in obj) {
|
764
|
+
var target_key = aliased.options[key] || key;
|
765
|
+
|
766
|
+
if (defaults.hasOwnProperty(target_key) && typeof obj[key] != 'undefined') {
|
767
|
+
if (target_key != 'parse_response' && target_key != 'proxy') {
|
768
|
+
// ensure type matches the original, except for proxy/parse_response that can be null/bool or string
|
769
|
+
var valid_type = defaults[target_key].constructor.name;
|
770
|
+
|
771
|
+
if (obj[key].constructor.name != valid_type)
|
772
|
+
throw new TypeError('Invalid type for ' + key + ', should be ' + valid_type);
|
773
|
+
}
|
774
|
+
defaults[target_key] = obj[key];
|
775
|
+
}
|
776
|
+
}
|
777
|
+
|
778
|
+
return defaults;
|
779
|
+
}
|
780
|
+
|
781
|
+
'head get'.split(' ').forEach(function(method) {
|
782
|
+
module.exports[method] = function(uri, options, callback) {
|
783
|
+
return new Needle(method, uri, null, options, callback).start();
|
784
|
+
}
|
785
|
+
})
|
786
|
+
|
787
|
+
'post put patch delete'.split(' ').forEach(function(method) {
|
788
|
+
module.exports[method] = function(uri, data, options, callback) {
|
789
|
+
return new Needle(method, uri, data, options, callback).start();
|
790
|
+
}
|
791
|
+
})
|
792
|
+
|
793
|
+
module.exports.request = function(method, uri, data, opts, callback) {
|
794
|
+
return new Needle(method, uri, data, opts, callback).start();
|
795
|
+
};
|