es6-crawler-detect 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +2 -1
- package/.eslintignore +6 -0
- package/.eslintrc.json +30 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +11 -8
- package/.github/ISSUE_TEMPLATE/feature_request.md +1 -1
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +29 -0
- package/.prettierrc.json +5 -0
- package/README.md +27 -17
- package/dist/main.bundle.js +1 -1
- package/example/node/dist/crawler.min.js +1 -1
- package/example/node/node_modules/.bin/mime +15 -0
- package/example/node/node_modules/.bin/mime.cmd +7 -0
- package/example/node/node_modules/.yarn-integrity +67 -0
- package/example/node/node_modules/accepts/HISTORY.md +236 -0
- package/example/node/node_modules/accepts/LICENSE +23 -0
- package/example/node/node_modules/accepts/README.md +142 -0
- package/example/node/node_modules/accepts/index.js +238 -0
- package/example/node/node_modules/accepts/package.json +47 -0
- package/example/node/node_modules/array-flatten/LICENSE +21 -0
- package/example/node/node_modules/array-flatten/README.md +43 -0
- package/example/node/node_modules/array-flatten/array-flatten.js +64 -0
- package/example/node/node_modules/array-flatten/package.json +39 -0
- package/example/node/node_modules/body-parser/HISTORY.md +624 -0
- package/example/node/node_modules/body-parser/LICENSE +23 -0
- package/example/node/node_modules/body-parser/README.md +456 -0
- package/example/node/node_modules/body-parser/index.js +157 -0
- package/example/node/node_modules/body-parser/lib/read.js +181 -0
- package/example/node/node_modules/body-parser/lib/types/json.js +230 -0
- package/example/node/node_modules/body-parser/lib/types/raw.js +101 -0
- package/example/node/node_modules/body-parser/lib/types/text.js +121 -0
- package/example/node/node_modules/body-parser/lib/types/urlencoded.js +284 -0
- package/example/node/node_modules/body-parser/package.json +52 -0
- package/example/node/node_modules/bytes/History.md +92 -0
- package/example/node/node_modules/bytes/LICENSE +23 -0
- package/example/node/node_modules/bytes/Readme.md +152 -0
- package/example/node/node_modules/bytes/index.js +166 -0
- package/example/node/node_modules/bytes/package.json +42 -0
- package/example/node/node_modules/content-disposition/HISTORY.md +60 -0
- package/example/node/node_modules/content-disposition/LICENSE +22 -0
- package/example/node/node_modules/content-disposition/README.md +142 -0
- package/example/node/node_modules/content-disposition/index.js +458 -0
- package/example/node/node_modules/content-disposition/package.json +44 -0
- package/example/node/node_modules/content-type/HISTORY.md +24 -0
- package/example/node/node_modules/content-type/LICENSE +22 -0
- package/example/node/node_modules/content-type/README.md +92 -0
- package/example/node/node_modules/content-type/index.js +222 -0
- package/example/node/node_modules/content-type/package.json +40 -0
- package/example/node/node_modules/cookie/HISTORY.md +128 -0
- package/example/node/node_modules/cookie/LICENSE +24 -0
- package/example/node/node_modules/cookie/README.md +257 -0
- package/example/node/node_modules/cookie/index.js +202 -0
- package/example/node/node_modules/cookie/package.json +40 -0
- package/example/node/node_modules/cookie-signature/History.md +38 -0
- package/example/node/node_modules/cookie-signature/Readme.md +42 -0
- package/example/node/node_modules/cookie-signature/index.js +51 -0
- package/example/node/node_modules/cookie-signature/package.json +18 -0
- package/example/node/node_modules/debug/.coveralls.yml +1 -0
- package/example/node/node_modules/debug/.eslintrc +11 -0
- package/example/node/node_modules/debug/.travis.yml +14 -0
- package/example/node/node_modules/debug/CHANGELOG.md +362 -0
- package/example/node/node_modules/debug/LICENSE +19 -0
- package/example/node/node_modules/debug/Makefile +50 -0
- package/example/node/node_modules/debug/README.md +312 -0
- package/example/node/node_modules/debug/component.json +19 -0
- package/example/node/node_modules/debug/karma.conf.js +70 -0
- package/example/node/node_modules/debug/node.js +1 -0
- package/example/node/node_modules/debug/package.json +49 -0
- package/example/node/node_modules/debug/src/browser.js +185 -0
- package/example/node/node_modules/debug/src/debug.js +202 -0
- package/example/node/node_modules/debug/src/index.js +10 -0
- package/example/node/node_modules/debug/src/inspector-log.js +15 -0
- package/example/node/node_modules/debug/src/node.js +248 -0
- package/example/node/node_modules/depd/History.md +96 -0
- package/example/node/node_modules/depd/LICENSE +22 -0
- package/example/node/node_modules/depd/Readme.md +280 -0
- package/example/node/node_modules/depd/index.js +522 -0
- package/example/node/node_modules/depd/lib/browser/index.js +77 -0
- package/example/node/node_modules/depd/lib/compat/callsite-tostring.js +103 -0
- package/example/node/node_modules/depd/lib/compat/event-listener-count.js +22 -0
- package/example/node/node_modules/depd/lib/compat/index.js +79 -0
- package/example/node/node_modules/depd/package.json +41 -0
- package/example/node/node_modules/destroy/LICENSE +22 -0
- package/example/node/node_modules/destroy/README.md +60 -0
- package/example/node/node_modules/destroy/index.js +75 -0
- package/example/node/node_modules/destroy/package.json +37 -0
- package/example/node/node_modules/ee-first/LICENSE +22 -0
- package/example/node/node_modules/ee-first/README.md +80 -0
- package/example/node/node_modules/ee-first/index.js +95 -0
- package/example/node/node_modules/ee-first/package.json +29 -0
- package/example/node/node_modules/encodeurl/HISTORY.md +14 -0
- package/example/node/node_modules/encodeurl/LICENSE +22 -0
- package/example/node/node_modules/encodeurl/README.md +128 -0
- package/example/node/node_modules/encodeurl/index.js +60 -0
- package/example/node/node_modules/encodeurl/package.json +40 -0
- package/example/node/node_modules/escape-html/LICENSE +24 -0
- package/example/node/node_modules/escape-html/Readme.md +43 -0
- package/example/node/node_modules/escape-html/index.js +78 -0
- package/example/node/node_modules/escape-html/package.json +24 -0
- package/example/node/node_modules/etag/HISTORY.md +83 -0
- package/example/node/node_modules/etag/LICENSE +22 -0
- package/example/node/node_modules/etag/README.md +159 -0
- package/example/node/node_modules/etag/index.js +131 -0
- package/example/node/node_modules/etag/package.json +47 -0
- package/example/node/node_modules/express/History.md +3510 -0
- package/example/node/node_modules/express/LICENSE +24 -0
- package/example/node/node_modules/express/Readme.md +158 -0
- package/example/node/node_modules/express/index.js +11 -0
- package/example/node/node_modules/express/lib/application.js +644 -0
- package/example/node/node_modules/express/lib/express.js +116 -0
- package/example/node/node_modules/express/lib/middleware/init.js +43 -0
- package/example/node/node_modules/express/lib/middleware/query.js +47 -0
- package/example/node/node_modules/express/lib/request.js +525 -0
- package/example/node/node_modules/express/lib/response.js +1147 -0
- package/example/node/node_modules/express/lib/router/index.js +668 -0
- package/example/node/node_modules/express/lib/router/layer.js +181 -0
- package/example/node/node_modules/express/lib/router/route.js +216 -0
- package/example/node/node_modules/express/lib/utils.js +302 -0
- package/example/node/node_modules/express/lib/view.js +182 -0
- package/example/node/node_modules/express/package.json +99 -0
- package/example/node/node_modules/finalhandler/HISTORY.md +187 -0
- package/example/node/node_modules/finalhandler/LICENSE +22 -0
- package/example/node/node_modules/finalhandler/README.md +148 -0
- package/example/node/node_modules/finalhandler/index.js +331 -0
- package/example/node/node_modules/finalhandler/package.json +45 -0
- package/example/node/node_modules/forwarded/HISTORY.md +21 -0
- package/example/node/node_modules/forwarded/LICENSE +22 -0
- package/example/node/node_modules/forwarded/README.md +57 -0
- package/example/node/node_modules/forwarded/index.js +90 -0
- package/example/node/node_modules/forwarded/package.json +45 -0
- package/example/node/node_modules/fresh/HISTORY.md +70 -0
- package/example/node/node_modules/fresh/LICENSE +23 -0
- package/example/node/node_modules/fresh/README.md +119 -0
- package/example/node/node_modules/fresh/index.js +137 -0
- package/example/node/node_modules/fresh/package.json +46 -0
- package/example/node/node_modules/http-errors/HISTORY.md +165 -0
- package/example/node/node_modules/http-errors/LICENSE +23 -0
- package/example/node/node_modules/http-errors/README.md +169 -0
- package/example/node/node_modules/http-errors/index.js +299 -0
- package/example/node/node_modules/http-errors/package.json +49 -0
- package/example/node/node_modules/iconv-lite/Changelog.md +162 -0
- package/example/node/node_modules/iconv-lite/LICENSE +21 -0
- package/example/node/node_modules/iconv-lite/README.md +156 -0
- package/example/node/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- package/example/node/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- package/example/node/node_modules/iconv-lite/encodings/index.js +22 -0
- package/example/node/node_modules/iconv-lite/encodings/internal.js +188 -0
- package/example/node/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- package/example/node/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/example/node/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- package/example/node/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/example/node/node_modules/iconv-lite/encodings/utf16.js +177 -0
- package/example/node/node_modules/iconv-lite/encodings/utf7.js +290 -0
- package/example/node/node_modules/iconv-lite/lib/bom-handling.js +52 -0
- package/example/node/node_modules/iconv-lite/lib/extend-node.js +217 -0
- package/example/node/node_modules/iconv-lite/lib/index.d.ts +24 -0
- package/example/node/node_modules/iconv-lite/lib/index.js +153 -0
- package/example/node/node_modules/iconv-lite/lib/streams.js +121 -0
- package/example/node/node_modules/iconv-lite/package.json +46 -0
- package/example/node/node_modules/inherits/LICENSE +16 -0
- package/example/node/node_modules/inherits/README.md +42 -0
- package/example/node/node_modules/inherits/inherits.js +9 -0
- package/example/node/node_modules/inherits/inherits_browser.js +27 -0
- package/example/node/node_modules/inherits/package.json +29 -0
- package/example/node/node_modules/ipaddr.js/LICENSE +19 -0
- package/example/node/node_modules/ipaddr.js/README.md +233 -0
- package/example/node/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- package/example/node/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- package/example/node/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- package/example/node/node_modules/ipaddr.js/package.json +35 -0
- package/example/node/node_modules/media-typer/HISTORY.md +22 -0
- package/example/node/node_modules/media-typer/LICENSE +22 -0
- package/example/node/node_modules/media-typer/README.md +81 -0
- package/example/node/node_modules/media-typer/index.js +270 -0
- package/example/node/node_modules/media-typer/package.json +26 -0
- package/example/node/node_modules/merge-descriptors/HISTORY.md +21 -0
- package/example/node/node_modules/merge-descriptors/LICENSE +23 -0
- package/example/node/node_modules/merge-descriptors/README.md +48 -0
- package/example/node/node_modules/merge-descriptors/index.js +60 -0
- package/example/node/node_modules/merge-descriptors/package.json +32 -0
- package/example/node/node_modules/methods/HISTORY.md +29 -0
- package/example/node/node_modules/methods/LICENSE +24 -0
- package/example/node/node_modules/methods/README.md +51 -0
- package/example/node/node_modules/methods/index.js +69 -0
- package/example/node/node_modules/methods/package.json +36 -0
- package/example/node/node_modules/mime/CHANGELOG.md +164 -0
- package/example/node/node_modules/mime/LICENSE +21 -0
- package/example/node/node_modules/mime/README.md +90 -0
- package/example/node/node_modules/mime/cli.js +8 -0
- package/example/node/node_modules/mime/mime.js +108 -0
- package/example/node/node_modules/mime/package.json +44 -0
- package/example/node/node_modules/mime/src/build.js +53 -0
- package/example/node/node_modules/mime/src/test.js +60 -0
- package/example/node/node_modules/mime/types.json +1 -0
- package/example/node/node_modules/mime-db/HISTORY.md +499 -0
- package/example/node/node_modules/mime-db/LICENSE +22 -0
- package/example/node/node_modules/mime-db/README.md +100 -0
- package/example/node/node_modules/mime-db/db.json +8471 -0
- package/example/node/node_modules/mime-db/index.js +11 -0
- package/example/node/node_modules/mime-db/package.json +59 -0
- package/example/node/node_modules/mime-types/HISTORY.md +388 -0
- package/example/node/node_modules/mime-types/LICENSE +23 -0
- package/example/node/node_modules/mime-types/README.md +113 -0
- package/example/node/node_modules/mime-types/index.js +188 -0
- package/example/node/node_modules/mime-types/package.json +44 -0
- package/example/node/node_modules/ms/index.js +152 -0
- package/example/node/node_modules/ms/license.md +21 -0
- package/example/node/node_modules/ms/package.json +37 -0
- package/example/node/node_modules/ms/readme.md +51 -0
- package/example/node/node_modules/negotiator/HISTORY.md +103 -0
- package/example/node/node_modules/negotiator/LICENSE +24 -0
- package/example/node/node_modules/negotiator/README.md +203 -0
- package/example/node/node_modules/negotiator/index.js +124 -0
- package/example/node/node_modules/negotiator/lib/charset.js +169 -0
- package/example/node/node_modules/negotiator/lib/encoding.js +184 -0
- package/example/node/node_modules/negotiator/lib/language.js +179 -0
- package/example/node/node_modules/negotiator/lib/mediaType.js +294 -0
- package/example/node/node_modules/negotiator/package.json +42 -0
- package/example/node/node_modules/on-finished/HISTORY.md +88 -0
- package/example/node/node_modules/on-finished/LICENSE +23 -0
- package/example/node/node_modules/on-finished/README.md +154 -0
- package/example/node/node_modules/on-finished/index.js +196 -0
- package/example/node/node_modules/on-finished/package.json +31 -0
- package/example/node/node_modules/parseurl/HISTORY.md +58 -0
- package/example/node/node_modules/parseurl/LICENSE +24 -0
- package/example/node/node_modules/parseurl/README.md +133 -0
- package/example/node/node_modules/parseurl/index.js +158 -0
- package/example/node/node_modules/parseurl/package.json +40 -0
- package/example/node/node_modules/path-to-regexp/History.md +36 -0
- package/example/node/node_modules/path-to-regexp/LICENSE +21 -0
- package/example/node/node_modules/path-to-regexp/Readme.md +35 -0
- package/example/node/node_modules/path-to-regexp/index.js +129 -0
- package/example/node/node_modules/path-to-regexp/package.json +30 -0
- package/example/node/node_modules/proxy-addr/HISTORY.md +161 -0
- package/example/node/node_modules/proxy-addr/LICENSE +22 -0
- package/example/node/node_modules/proxy-addr/README.md +139 -0
- package/example/node/node_modules/proxy-addr/index.js +327 -0
- package/example/node/node_modules/proxy-addr/package.json +47 -0
- package/example/node/node_modules/qs/.editorconfig +39 -0
- package/example/node/node_modules/qs/.eslintignore +2 -0
- package/example/node/node_modules/qs/.eslintrc +35 -0
- package/example/node/node_modules/qs/.github/FUNDING.yml +12 -0
- package/example/node/node_modules/qs/.nycrc +13 -0
- package/example/node/node_modules/qs/CHANGELOG.md +359 -0
- package/example/node/node_modules/qs/LICENSE.md +29 -0
- package/example/node/node_modules/qs/README.md +604 -0
- package/example/node/node_modules/qs/dist/qs.js +832 -0
- package/example/node/node_modules/qs/lib/formats.js +23 -0
- package/example/node/node_modules/qs/lib/index.js +11 -0
- package/example/node/node_modules/qs/lib/parse.js +257 -0
- package/example/node/node_modules/qs/lib/stringify.js +278 -0
- package/example/node/node_modules/qs/lib/utils.js +251 -0
- package/example/node/node_modules/qs/package.json +69 -0
- package/example/node/node_modules/qs/test/parse.js +772 -0
- package/example/node/node_modules/qs/test/stringify.js +793 -0
- package/example/node/node_modules/qs/test/utils.js +136 -0
- package/example/node/node_modules/range-parser/HISTORY.md +56 -0
- package/example/node/node_modules/range-parser/LICENSE +23 -0
- package/example/node/node_modules/range-parser/README.md +84 -0
- package/example/node/node_modules/range-parser/index.js +162 -0
- package/example/node/node_modules/range-parser/package.json +44 -0
- package/example/node/node_modules/raw-body/HISTORY.md +284 -0
- package/example/node/node_modules/raw-body/LICENSE +22 -0
- package/example/node/node_modules/raw-body/README.md +217 -0
- package/example/node/node_modules/raw-body/index.d.ts +87 -0
- package/example/node/node_modules/raw-body/index.js +286 -0
- package/example/node/node_modules/raw-body/package.json +48 -0
- package/example/node/node_modules/safe-buffer/LICENSE +21 -0
- package/example/node/node_modules/safe-buffer/README.md +584 -0
- package/example/node/node_modules/safe-buffer/index.d.ts +187 -0
- package/example/node/node_modules/safe-buffer/index.js +65 -0
- package/example/node/node_modules/safe-buffer/package.json +51 -0
- package/example/node/node_modules/safer-buffer/LICENSE +21 -0
- package/example/node/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/example/node/node_modules/safer-buffer/Readme.md +156 -0
- package/example/node/node_modules/safer-buffer/dangerous.js +58 -0
- package/example/node/node_modules/safer-buffer/package.json +34 -0
- package/example/node/node_modules/safer-buffer/safer.js +77 -0
- package/example/node/node_modules/safer-buffer/tests.js +406 -0
- package/example/node/node_modules/send/HISTORY.md +506 -0
- package/example/node/node_modules/send/LICENSE +23 -0
- package/example/node/node_modules/send/README.md +327 -0
- package/example/node/node_modules/send/index.js +1133 -0
- package/example/node/node_modules/send/node_modules/.bin/mime +15 -0
- package/example/node/node_modules/send/node_modules/.bin/mime.cmd +7 -0
- package/example/node/node_modules/send/node_modules/ms/index.js +162 -0
- package/example/node/node_modules/send/node_modules/ms/license.md +21 -0
- package/example/node/node_modules/send/node_modules/ms/package.json +38 -0
- package/example/node/node_modules/send/node_modules/ms/readme.md +59 -0
- package/example/node/node_modules/send/package.json +61 -0
- package/example/node/node_modules/serve-static/HISTORY.md +459 -0
- package/example/node/node_modules/serve-static/LICENSE +25 -0
- package/example/node/node_modules/serve-static/README.md +257 -0
- package/example/node/node_modules/serve-static/index.js +210 -0
- package/example/node/node_modules/serve-static/package.json +42 -0
- package/example/node/node_modules/setprototypeof/LICENSE +13 -0
- package/example/node/node_modules/setprototypeof/README.md +31 -0
- package/example/node/node_modules/setprototypeof/index.d.ts +2 -0
- package/example/node/node_modules/setprototypeof/index.js +17 -0
- package/example/node/node_modules/setprototypeof/package.json +38 -0
- package/example/node/node_modules/setprototypeof/test/index.js +24 -0
- package/example/node/node_modules/statuses/HISTORY.md +65 -0
- package/example/node/node_modules/statuses/LICENSE +23 -0
- package/example/node/node_modules/statuses/README.md +127 -0
- package/example/node/node_modules/statuses/codes.json +66 -0
- package/example/node/node_modules/statuses/index.js +113 -0
- package/example/node/node_modules/statuses/package.json +48 -0
- package/example/node/node_modules/toidentifier/HISTORY.md +9 -0
- package/example/node/node_modules/toidentifier/LICENSE +21 -0
- package/example/node/node_modules/toidentifier/README.md +61 -0
- package/example/node/node_modules/toidentifier/index.js +32 -0
- package/example/node/node_modules/toidentifier/package.json +38 -0
- package/example/node/node_modules/type-is/HISTORY.md +259 -0
- package/example/node/node_modules/type-is/LICENSE +23 -0
- package/example/node/node_modules/type-is/README.md +170 -0
- package/example/node/node_modules/type-is/index.js +266 -0
- package/example/node/node_modules/type-is/package.json +45 -0
- package/example/node/node_modules/unpipe/HISTORY.md +4 -0
- package/example/node/node_modules/unpipe/LICENSE +22 -0
- package/example/node/node_modules/unpipe/README.md +43 -0
- package/example/node/node_modules/unpipe/index.js +69 -0
- package/example/node/node_modules/unpipe/package.json +27 -0
- package/example/node/node_modules/utils-merge/LICENSE +20 -0
- package/example/node/node_modules/utils-merge/README.md +34 -0
- package/example/node/node_modules/utils-merge/index.js +23 -0
- package/example/node/node_modules/utils-merge/package.json +40 -0
- package/example/node/node_modules/vary/HISTORY.md +39 -0
- package/example/node/node_modules/vary/LICENSE +22 -0
- package/example/node/node_modules/vary/README.md +101 -0
- package/example/node/node_modules/vary/index.js +149 -0
- package/example/node/node_modules/vary/package.json +43 -0
- package/example/node/package.json +11 -0
- package/example/node/server.js +32 -26
- package/example/node/yarn.lock +352 -0
- package/package.json +30 -19
- package/src/index.js +16 -10
- package/src/lib/crawler/crawlers.js +1402 -15
- package/src/lib/crawler/exclusions.js +62 -15
- package/src/lib/crawler/headers.js +24 -15
- package/src/lib/crawler/provider.js +11 -13
- package/src/lib/crawler.js +135 -139
- package/test/lib/crawler.test.js +52 -35
- package/webpack.common.js +20 -20
- package/webpack.dev.js +7 -7
- package/webpack.prod.js +14 -15
@@ -0,0 +1,181 @@
|
|
1
|
+
/*!
|
2
|
+
* body-parser
|
3
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
4
|
+
* MIT Licensed
|
5
|
+
*/
|
6
|
+
|
7
|
+
'use strict'
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Module dependencies.
|
11
|
+
* @private
|
12
|
+
*/
|
13
|
+
|
14
|
+
var createError = require('http-errors')
|
15
|
+
var getBody = require('raw-body')
|
16
|
+
var iconv = require('iconv-lite')
|
17
|
+
var onFinished = require('on-finished')
|
18
|
+
var zlib = require('zlib')
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Module exports.
|
22
|
+
*/
|
23
|
+
|
24
|
+
module.exports = read
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Read a request into a buffer and parse.
|
28
|
+
*
|
29
|
+
* @param {object} req
|
30
|
+
* @param {object} res
|
31
|
+
* @param {function} next
|
32
|
+
* @param {function} parse
|
33
|
+
* @param {function} debug
|
34
|
+
* @param {object} options
|
35
|
+
* @private
|
36
|
+
*/
|
37
|
+
|
38
|
+
function read (req, res, next, parse, debug, options) {
|
39
|
+
var length
|
40
|
+
var opts = options
|
41
|
+
var stream
|
42
|
+
|
43
|
+
// flag as parsed
|
44
|
+
req._body = true
|
45
|
+
|
46
|
+
// read options
|
47
|
+
var encoding = opts.encoding !== null
|
48
|
+
? opts.encoding
|
49
|
+
: null
|
50
|
+
var verify = opts.verify
|
51
|
+
|
52
|
+
try {
|
53
|
+
// get the content stream
|
54
|
+
stream = contentstream(req, debug, opts.inflate)
|
55
|
+
length = stream.length
|
56
|
+
stream.length = undefined
|
57
|
+
} catch (err) {
|
58
|
+
return next(err)
|
59
|
+
}
|
60
|
+
|
61
|
+
// set raw-body options
|
62
|
+
opts.length = length
|
63
|
+
opts.encoding = verify
|
64
|
+
? null
|
65
|
+
: encoding
|
66
|
+
|
67
|
+
// assert charset is supported
|
68
|
+
if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
|
69
|
+
return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
70
|
+
charset: encoding.toLowerCase(),
|
71
|
+
type: 'charset.unsupported'
|
72
|
+
}))
|
73
|
+
}
|
74
|
+
|
75
|
+
// read body
|
76
|
+
debug('read body')
|
77
|
+
getBody(stream, opts, function (error, body) {
|
78
|
+
if (error) {
|
79
|
+
var _error
|
80
|
+
|
81
|
+
if (error.type === 'encoding.unsupported') {
|
82
|
+
// echo back charset
|
83
|
+
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
84
|
+
charset: encoding.toLowerCase(),
|
85
|
+
type: 'charset.unsupported'
|
86
|
+
})
|
87
|
+
} else {
|
88
|
+
// set status code on error
|
89
|
+
_error = createError(400, error)
|
90
|
+
}
|
91
|
+
|
92
|
+
// read off entire request
|
93
|
+
stream.resume()
|
94
|
+
onFinished(req, function onfinished () {
|
95
|
+
next(createError(400, _error))
|
96
|
+
})
|
97
|
+
return
|
98
|
+
}
|
99
|
+
|
100
|
+
// verify
|
101
|
+
if (verify) {
|
102
|
+
try {
|
103
|
+
debug('verify body')
|
104
|
+
verify(req, res, body, encoding)
|
105
|
+
} catch (err) {
|
106
|
+
next(createError(403, err, {
|
107
|
+
body: body,
|
108
|
+
type: err.type || 'entity.verify.failed'
|
109
|
+
}))
|
110
|
+
return
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
// parse
|
115
|
+
var str = body
|
116
|
+
try {
|
117
|
+
debug('parse body')
|
118
|
+
str = typeof body !== 'string' && encoding !== null
|
119
|
+
? iconv.decode(body, encoding)
|
120
|
+
: body
|
121
|
+
req.body = parse(str)
|
122
|
+
} catch (err) {
|
123
|
+
next(createError(400, err, {
|
124
|
+
body: str,
|
125
|
+
type: err.type || 'entity.parse.failed'
|
126
|
+
}))
|
127
|
+
return
|
128
|
+
}
|
129
|
+
|
130
|
+
next()
|
131
|
+
})
|
132
|
+
}
|
133
|
+
|
134
|
+
/**
|
135
|
+
* Get the content stream of the request.
|
136
|
+
*
|
137
|
+
* @param {object} req
|
138
|
+
* @param {function} debug
|
139
|
+
* @param {boolean} [inflate=true]
|
140
|
+
* @return {object}
|
141
|
+
* @api private
|
142
|
+
*/
|
143
|
+
|
144
|
+
function contentstream (req, debug, inflate) {
|
145
|
+
var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
|
146
|
+
var length = req.headers['content-length']
|
147
|
+
var stream
|
148
|
+
|
149
|
+
debug('content-encoding "%s"', encoding)
|
150
|
+
|
151
|
+
if (inflate === false && encoding !== 'identity') {
|
152
|
+
throw createError(415, 'content encoding unsupported', {
|
153
|
+
encoding: encoding,
|
154
|
+
type: 'encoding.unsupported'
|
155
|
+
})
|
156
|
+
}
|
157
|
+
|
158
|
+
switch (encoding) {
|
159
|
+
case 'deflate':
|
160
|
+
stream = zlib.createInflate()
|
161
|
+
debug('inflate body')
|
162
|
+
req.pipe(stream)
|
163
|
+
break
|
164
|
+
case 'gzip':
|
165
|
+
stream = zlib.createGunzip()
|
166
|
+
debug('gunzip body')
|
167
|
+
req.pipe(stream)
|
168
|
+
break
|
169
|
+
case 'identity':
|
170
|
+
stream = req
|
171
|
+
stream.length = length
|
172
|
+
break
|
173
|
+
default:
|
174
|
+
throw createError(415, 'unsupported content encoding "' + encoding + '"', {
|
175
|
+
encoding: encoding,
|
176
|
+
type: 'encoding.unsupported'
|
177
|
+
})
|
178
|
+
}
|
179
|
+
|
180
|
+
return stream
|
181
|
+
}
|
@@ -0,0 +1,230 @@
|
|
1
|
+
/*!
|
2
|
+
* body-parser
|
3
|
+
* Copyright(c) 2014 Jonathan Ong
|
4
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
5
|
+
* MIT Licensed
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict'
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Module dependencies.
|
12
|
+
* @private
|
13
|
+
*/
|
14
|
+
|
15
|
+
var bytes = require('bytes')
|
16
|
+
var contentType = require('content-type')
|
17
|
+
var createError = require('http-errors')
|
18
|
+
var debug = require('debug')('body-parser:json')
|
19
|
+
var read = require('../read')
|
20
|
+
var typeis = require('type-is')
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Module exports.
|
24
|
+
*/
|
25
|
+
|
26
|
+
module.exports = json
|
27
|
+
|
28
|
+
/**
|
29
|
+
* RegExp to match the first non-space in a string.
|
30
|
+
*
|
31
|
+
* Allowed whitespace is defined in RFC 7159:
|
32
|
+
*
|
33
|
+
* ws = *(
|
34
|
+
* %x20 / ; Space
|
35
|
+
* %x09 / ; Horizontal tab
|
36
|
+
* %x0A / ; Line feed or New line
|
37
|
+
* %x0D ) ; Carriage return
|
38
|
+
*/
|
39
|
+
|
40
|
+
var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Create a middleware to parse JSON bodies.
|
44
|
+
*
|
45
|
+
* @param {object} [options]
|
46
|
+
* @return {function}
|
47
|
+
* @public
|
48
|
+
*/
|
49
|
+
|
50
|
+
function json (options) {
|
51
|
+
var opts = options || {}
|
52
|
+
|
53
|
+
var limit = typeof opts.limit !== 'number'
|
54
|
+
? bytes.parse(opts.limit || '100kb')
|
55
|
+
: opts.limit
|
56
|
+
var inflate = opts.inflate !== false
|
57
|
+
var reviver = opts.reviver
|
58
|
+
var strict = opts.strict !== false
|
59
|
+
var type = opts.type || 'application/json'
|
60
|
+
var verify = opts.verify || false
|
61
|
+
|
62
|
+
if (verify !== false && typeof verify !== 'function') {
|
63
|
+
throw new TypeError('option verify must be function')
|
64
|
+
}
|
65
|
+
|
66
|
+
// create the appropriate type checking function
|
67
|
+
var shouldParse = typeof type !== 'function'
|
68
|
+
? typeChecker(type)
|
69
|
+
: type
|
70
|
+
|
71
|
+
function parse (body) {
|
72
|
+
if (body.length === 0) {
|
73
|
+
// special-case empty json body, as it's a common client-side mistake
|
74
|
+
// TODO: maybe make this configurable or part of "strict" option
|
75
|
+
return {}
|
76
|
+
}
|
77
|
+
|
78
|
+
if (strict) {
|
79
|
+
var first = firstchar(body)
|
80
|
+
|
81
|
+
if (first !== '{' && first !== '[') {
|
82
|
+
debug('strict violation')
|
83
|
+
throw createStrictSyntaxError(body, first)
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
try {
|
88
|
+
debug('parse json')
|
89
|
+
return JSON.parse(body, reviver)
|
90
|
+
} catch (e) {
|
91
|
+
throw normalizeJsonSyntaxError(e, {
|
92
|
+
message: e.message,
|
93
|
+
stack: e.stack
|
94
|
+
})
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
return function jsonParser (req, res, next) {
|
99
|
+
if (req._body) {
|
100
|
+
debug('body already parsed')
|
101
|
+
next()
|
102
|
+
return
|
103
|
+
}
|
104
|
+
|
105
|
+
req.body = req.body || {}
|
106
|
+
|
107
|
+
// skip requests without bodies
|
108
|
+
if (!typeis.hasBody(req)) {
|
109
|
+
debug('skip empty body')
|
110
|
+
next()
|
111
|
+
return
|
112
|
+
}
|
113
|
+
|
114
|
+
debug('content-type %j', req.headers['content-type'])
|
115
|
+
|
116
|
+
// determine if request should be parsed
|
117
|
+
if (!shouldParse(req)) {
|
118
|
+
debug('skip parsing')
|
119
|
+
next()
|
120
|
+
return
|
121
|
+
}
|
122
|
+
|
123
|
+
// assert charset per RFC 7159 sec 8.1
|
124
|
+
var charset = getCharset(req) || 'utf-8'
|
125
|
+
if (charset.substr(0, 4) !== 'utf-') {
|
126
|
+
debug('invalid charset')
|
127
|
+
next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
|
128
|
+
charset: charset,
|
129
|
+
type: 'charset.unsupported'
|
130
|
+
}))
|
131
|
+
return
|
132
|
+
}
|
133
|
+
|
134
|
+
// read
|
135
|
+
read(req, res, next, parse, debug, {
|
136
|
+
encoding: charset,
|
137
|
+
inflate: inflate,
|
138
|
+
limit: limit,
|
139
|
+
verify: verify
|
140
|
+
})
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
/**
|
145
|
+
* Create strict violation syntax error matching native error.
|
146
|
+
*
|
147
|
+
* @param {string} str
|
148
|
+
* @param {string} char
|
149
|
+
* @return {Error}
|
150
|
+
* @private
|
151
|
+
*/
|
152
|
+
|
153
|
+
function createStrictSyntaxError (str, char) {
|
154
|
+
var index = str.indexOf(char)
|
155
|
+
var partial = str.substring(0, index) + '#'
|
156
|
+
|
157
|
+
try {
|
158
|
+
JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')
|
159
|
+
} catch (e) {
|
160
|
+
return normalizeJsonSyntaxError(e, {
|
161
|
+
message: e.message.replace('#', char),
|
162
|
+
stack: e.stack
|
163
|
+
})
|
164
|
+
}
|
165
|
+
}
|
166
|
+
|
167
|
+
/**
|
168
|
+
* Get the first non-whitespace character in a string.
|
169
|
+
*
|
170
|
+
* @param {string} str
|
171
|
+
* @return {function}
|
172
|
+
* @private
|
173
|
+
*/
|
174
|
+
|
175
|
+
function firstchar (str) {
|
176
|
+
return FIRST_CHAR_REGEXP.exec(str)[1]
|
177
|
+
}
|
178
|
+
|
179
|
+
/**
|
180
|
+
* Get the charset of a request.
|
181
|
+
*
|
182
|
+
* @param {object} req
|
183
|
+
* @api private
|
184
|
+
*/
|
185
|
+
|
186
|
+
function getCharset (req) {
|
187
|
+
try {
|
188
|
+
return (contentType.parse(req).parameters.charset || '').toLowerCase()
|
189
|
+
} catch (e) {
|
190
|
+
return undefined
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
194
|
+
/**
|
195
|
+
* Normalize a SyntaxError for JSON.parse.
|
196
|
+
*
|
197
|
+
* @param {SyntaxError} error
|
198
|
+
* @param {object} obj
|
199
|
+
* @return {SyntaxError}
|
200
|
+
*/
|
201
|
+
|
202
|
+
function normalizeJsonSyntaxError (error, obj) {
|
203
|
+
var keys = Object.getOwnPropertyNames(error)
|
204
|
+
|
205
|
+
for (var i = 0; i < keys.length; i++) {
|
206
|
+
var key = keys[i]
|
207
|
+
if (key !== 'stack' && key !== 'message') {
|
208
|
+
delete error[key]
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
// replace stack before message for Node.js 0.10 and below
|
213
|
+
error.stack = obj.stack.replace(error.message, obj.message)
|
214
|
+
error.message = obj.message
|
215
|
+
|
216
|
+
return error
|
217
|
+
}
|
218
|
+
|
219
|
+
/**
|
220
|
+
* Get the simple type checker.
|
221
|
+
*
|
222
|
+
* @param {string} type
|
223
|
+
* @return {function}
|
224
|
+
*/
|
225
|
+
|
226
|
+
function typeChecker (type) {
|
227
|
+
return function checkType (req) {
|
228
|
+
return Boolean(typeis(req, type))
|
229
|
+
}
|
230
|
+
}
|
@@ -0,0 +1,101 @@
|
|
1
|
+
/*!
|
2
|
+
* body-parser
|
3
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
4
|
+
* MIT Licensed
|
5
|
+
*/
|
6
|
+
|
7
|
+
'use strict'
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Module dependencies.
|
11
|
+
*/
|
12
|
+
|
13
|
+
var bytes = require('bytes')
|
14
|
+
var debug = require('debug')('body-parser:raw')
|
15
|
+
var read = require('../read')
|
16
|
+
var typeis = require('type-is')
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Module exports.
|
20
|
+
*/
|
21
|
+
|
22
|
+
module.exports = raw
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Create a middleware to parse raw bodies.
|
26
|
+
*
|
27
|
+
* @param {object} [options]
|
28
|
+
* @return {function}
|
29
|
+
* @api public
|
30
|
+
*/
|
31
|
+
|
32
|
+
function raw (options) {
|
33
|
+
var opts = options || {}
|
34
|
+
|
35
|
+
var inflate = opts.inflate !== false
|
36
|
+
var limit = typeof opts.limit !== 'number'
|
37
|
+
? bytes.parse(opts.limit || '100kb')
|
38
|
+
: opts.limit
|
39
|
+
var type = opts.type || 'application/octet-stream'
|
40
|
+
var verify = opts.verify || false
|
41
|
+
|
42
|
+
if (verify !== false && typeof verify !== 'function') {
|
43
|
+
throw new TypeError('option verify must be function')
|
44
|
+
}
|
45
|
+
|
46
|
+
// create the appropriate type checking function
|
47
|
+
var shouldParse = typeof type !== 'function'
|
48
|
+
? typeChecker(type)
|
49
|
+
: type
|
50
|
+
|
51
|
+
function parse (buf) {
|
52
|
+
return buf
|
53
|
+
}
|
54
|
+
|
55
|
+
return function rawParser (req, res, next) {
|
56
|
+
if (req._body) {
|
57
|
+
debug('body already parsed')
|
58
|
+
next()
|
59
|
+
return
|
60
|
+
}
|
61
|
+
|
62
|
+
req.body = req.body || {}
|
63
|
+
|
64
|
+
// skip requests without bodies
|
65
|
+
if (!typeis.hasBody(req)) {
|
66
|
+
debug('skip empty body')
|
67
|
+
next()
|
68
|
+
return
|
69
|
+
}
|
70
|
+
|
71
|
+
debug('content-type %j', req.headers['content-type'])
|
72
|
+
|
73
|
+
// determine if request should be parsed
|
74
|
+
if (!shouldParse(req)) {
|
75
|
+
debug('skip parsing')
|
76
|
+
next()
|
77
|
+
return
|
78
|
+
}
|
79
|
+
|
80
|
+
// read
|
81
|
+
read(req, res, next, parse, debug, {
|
82
|
+
encoding: null,
|
83
|
+
inflate: inflate,
|
84
|
+
limit: limit,
|
85
|
+
verify: verify
|
86
|
+
})
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Get the simple type checker.
|
92
|
+
*
|
93
|
+
* @param {string} type
|
94
|
+
* @return {function}
|
95
|
+
*/
|
96
|
+
|
97
|
+
function typeChecker (type) {
|
98
|
+
return function checkType (req) {
|
99
|
+
return Boolean(typeis(req, type))
|
100
|
+
}
|
101
|
+
}
|
@@ -0,0 +1,121 @@
|
|
1
|
+
/*!
|
2
|
+
* body-parser
|
3
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
4
|
+
* MIT Licensed
|
5
|
+
*/
|
6
|
+
|
7
|
+
'use strict'
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Module dependencies.
|
11
|
+
*/
|
12
|
+
|
13
|
+
var bytes = require('bytes')
|
14
|
+
var contentType = require('content-type')
|
15
|
+
var debug = require('debug')('body-parser:text')
|
16
|
+
var read = require('../read')
|
17
|
+
var typeis = require('type-is')
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Module exports.
|
21
|
+
*/
|
22
|
+
|
23
|
+
module.exports = text
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Create a middleware to parse text bodies.
|
27
|
+
*
|
28
|
+
* @param {object} [options]
|
29
|
+
* @return {function}
|
30
|
+
* @api public
|
31
|
+
*/
|
32
|
+
|
33
|
+
function text (options) {
|
34
|
+
var opts = options || {}
|
35
|
+
|
36
|
+
var defaultCharset = opts.defaultCharset || 'utf-8'
|
37
|
+
var inflate = opts.inflate !== false
|
38
|
+
var limit = typeof opts.limit !== 'number'
|
39
|
+
? bytes.parse(opts.limit || '100kb')
|
40
|
+
: opts.limit
|
41
|
+
var type = opts.type || 'text/plain'
|
42
|
+
var verify = opts.verify || false
|
43
|
+
|
44
|
+
if (verify !== false && typeof verify !== 'function') {
|
45
|
+
throw new TypeError('option verify must be function')
|
46
|
+
}
|
47
|
+
|
48
|
+
// create the appropriate type checking function
|
49
|
+
var shouldParse = typeof type !== 'function'
|
50
|
+
? typeChecker(type)
|
51
|
+
: type
|
52
|
+
|
53
|
+
function parse (buf) {
|
54
|
+
return buf
|
55
|
+
}
|
56
|
+
|
57
|
+
return function textParser (req, res, next) {
|
58
|
+
if (req._body) {
|
59
|
+
debug('body already parsed')
|
60
|
+
next()
|
61
|
+
return
|
62
|
+
}
|
63
|
+
|
64
|
+
req.body = req.body || {}
|
65
|
+
|
66
|
+
// skip requests without bodies
|
67
|
+
if (!typeis.hasBody(req)) {
|
68
|
+
debug('skip empty body')
|
69
|
+
next()
|
70
|
+
return
|
71
|
+
}
|
72
|
+
|
73
|
+
debug('content-type %j', req.headers['content-type'])
|
74
|
+
|
75
|
+
// determine if request should be parsed
|
76
|
+
if (!shouldParse(req)) {
|
77
|
+
debug('skip parsing')
|
78
|
+
next()
|
79
|
+
return
|
80
|
+
}
|
81
|
+
|
82
|
+
// get charset
|
83
|
+
var charset = getCharset(req) || defaultCharset
|
84
|
+
|
85
|
+
// read
|
86
|
+
read(req, res, next, parse, debug, {
|
87
|
+
encoding: charset,
|
88
|
+
inflate: inflate,
|
89
|
+
limit: limit,
|
90
|
+
verify: verify
|
91
|
+
})
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
/**
|
96
|
+
* Get the charset of a request.
|
97
|
+
*
|
98
|
+
* @param {object} req
|
99
|
+
* @api private
|
100
|
+
*/
|
101
|
+
|
102
|
+
function getCharset (req) {
|
103
|
+
try {
|
104
|
+
return (contentType.parse(req).parameters.charset || '').toLowerCase()
|
105
|
+
} catch (e) {
|
106
|
+
return undefined
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Get the simple type checker.
|
112
|
+
*
|
113
|
+
* @param {string} type
|
114
|
+
* @return {function}
|
115
|
+
*/
|
116
|
+
|
117
|
+
function typeChecker (type) {
|
118
|
+
return function checkType (req) {
|
119
|
+
return Boolean(typeis(req, type))
|
120
|
+
}
|
121
|
+
}
|