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
|
+
* express
|
3
|
+
* Copyright(c) 2009-2013 TJ Holowaychuk
|
4
|
+
* Copyright(c) 2013 Roman Shtylman
|
5
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
6
|
+
* MIT Licensed
|
7
|
+
*/
|
8
|
+
|
9
|
+
'use strict';
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Module dependencies.
|
13
|
+
* @private
|
14
|
+
*/
|
15
|
+
|
16
|
+
var pathRegexp = require('path-to-regexp');
|
17
|
+
var debug = require('debug')('express:router:layer');
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Module variables.
|
21
|
+
* @private
|
22
|
+
*/
|
23
|
+
|
24
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Module exports.
|
28
|
+
* @public
|
29
|
+
*/
|
30
|
+
|
31
|
+
module.exports = Layer;
|
32
|
+
|
33
|
+
function Layer(path, options, fn) {
|
34
|
+
if (!(this instanceof Layer)) {
|
35
|
+
return new Layer(path, options, fn);
|
36
|
+
}
|
37
|
+
|
38
|
+
debug('new %o', path)
|
39
|
+
var opts = options || {};
|
40
|
+
|
41
|
+
this.handle = fn;
|
42
|
+
this.name = fn.name || '<anonymous>';
|
43
|
+
this.params = undefined;
|
44
|
+
this.path = undefined;
|
45
|
+
this.regexp = pathRegexp(path, this.keys = [], opts);
|
46
|
+
|
47
|
+
// set fast path flags
|
48
|
+
this.regexp.fast_star = path === '*'
|
49
|
+
this.regexp.fast_slash = path === '/' && opts.end === false
|
50
|
+
}
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Handle the error for the layer.
|
54
|
+
*
|
55
|
+
* @param {Error} error
|
56
|
+
* @param {Request} req
|
57
|
+
* @param {Response} res
|
58
|
+
* @param {function} next
|
59
|
+
* @api private
|
60
|
+
*/
|
61
|
+
|
62
|
+
Layer.prototype.handle_error = function handle_error(error, req, res, next) {
|
63
|
+
var fn = this.handle;
|
64
|
+
|
65
|
+
if (fn.length !== 4) {
|
66
|
+
// not a standard error handler
|
67
|
+
return next(error);
|
68
|
+
}
|
69
|
+
|
70
|
+
try {
|
71
|
+
fn(error, req, res, next);
|
72
|
+
} catch (err) {
|
73
|
+
next(err);
|
74
|
+
}
|
75
|
+
};
|
76
|
+
|
77
|
+
/**
|
78
|
+
* Handle the request for the layer.
|
79
|
+
*
|
80
|
+
* @param {Request} req
|
81
|
+
* @param {Response} res
|
82
|
+
* @param {function} next
|
83
|
+
* @api private
|
84
|
+
*/
|
85
|
+
|
86
|
+
Layer.prototype.handle_request = function handle(req, res, next) {
|
87
|
+
var fn = this.handle;
|
88
|
+
|
89
|
+
if (fn.length > 3) {
|
90
|
+
// not a standard request handler
|
91
|
+
return next();
|
92
|
+
}
|
93
|
+
|
94
|
+
try {
|
95
|
+
fn(req, res, next);
|
96
|
+
} catch (err) {
|
97
|
+
next(err);
|
98
|
+
}
|
99
|
+
};
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Check if this route matches `path`, if so
|
103
|
+
* populate `.params`.
|
104
|
+
*
|
105
|
+
* @param {String} path
|
106
|
+
* @return {Boolean}
|
107
|
+
* @api private
|
108
|
+
*/
|
109
|
+
|
110
|
+
Layer.prototype.match = function match(path) {
|
111
|
+
var match
|
112
|
+
|
113
|
+
if (path != null) {
|
114
|
+
// fast path non-ending match for / (any path matches)
|
115
|
+
if (this.regexp.fast_slash) {
|
116
|
+
this.params = {}
|
117
|
+
this.path = ''
|
118
|
+
return true
|
119
|
+
}
|
120
|
+
|
121
|
+
// fast path for * (everything matched in a param)
|
122
|
+
if (this.regexp.fast_star) {
|
123
|
+
this.params = {'0': decode_param(path)}
|
124
|
+
this.path = path
|
125
|
+
return true
|
126
|
+
}
|
127
|
+
|
128
|
+
// match the path
|
129
|
+
match = this.regexp.exec(path)
|
130
|
+
}
|
131
|
+
|
132
|
+
if (!match) {
|
133
|
+
this.params = undefined;
|
134
|
+
this.path = undefined;
|
135
|
+
return false;
|
136
|
+
}
|
137
|
+
|
138
|
+
// store values
|
139
|
+
this.params = {};
|
140
|
+
this.path = match[0]
|
141
|
+
|
142
|
+
var keys = this.keys;
|
143
|
+
var params = this.params;
|
144
|
+
|
145
|
+
for (var i = 1; i < match.length; i++) {
|
146
|
+
var key = keys[i - 1];
|
147
|
+
var prop = key.name;
|
148
|
+
var val = decode_param(match[i])
|
149
|
+
|
150
|
+
if (val !== undefined || !(hasOwnProperty.call(params, prop))) {
|
151
|
+
params[prop] = val;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
return true;
|
156
|
+
};
|
157
|
+
|
158
|
+
/**
|
159
|
+
* Decode param value.
|
160
|
+
*
|
161
|
+
* @param {string} val
|
162
|
+
* @return {string}
|
163
|
+
* @private
|
164
|
+
*/
|
165
|
+
|
166
|
+
function decode_param(val) {
|
167
|
+
if (typeof val !== 'string' || val.length === 0) {
|
168
|
+
return val;
|
169
|
+
}
|
170
|
+
|
171
|
+
try {
|
172
|
+
return decodeURIComponent(val);
|
173
|
+
} catch (err) {
|
174
|
+
if (err instanceof URIError) {
|
175
|
+
err.message = 'Failed to decode param \'' + val + '\'';
|
176
|
+
err.status = err.statusCode = 400;
|
177
|
+
}
|
178
|
+
|
179
|
+
throw err;
|
180
|
+
}
|
181
|
+
}
|
@@ -0,0 +1,216 @@
|
|
1
|
+
/*!
|
2
|
+
* express
|
3
|
+
* Copyright(c) 2009-2013 TJ Holowaychuk
|
4
|
+
* Copyright(c) 2013 Roman Shtylman
|
5
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
6
|
+
* MIT Licensed
|
7
|
+
*/
|
8
|
+
|
9
|
+
'use strict';
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Module dependencies.
|
13
|
+
* @private
|
14
|
+
*/
|
15
|
+
|
16
|
+
var debug = require('debug')('express:router:route');
|
17
|
+
var flatten = require('array-flatten');
|
18
|
+
var Layer = require('./layer');
|
19
|
+
var methods = require('methods');
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Module variables.
|
23
|
+
* @private
|
24
|
+
*/
|
25
|
+
|
26
|
+
var slice = Array.prototype.slice;
|
27
|
+
var toString = Object.prototype.toString;
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Module exports.
|
31
|
+
* @public
|
32
|
+
*/
|
33
|
+
|
34
|
+
module.exports = Route;
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Initialize `Route` with the given `path`,
|
38
|
+
*
|
39
|
+
* @param {String} path
|
40
|
+
* @public
|
41
|
+
*/
|
42
|
+
|
43
|
+
function Route(path) {
|
44
|
+
this.path = path;
|
45
|
+
this.stack = [];
|
46
|
+
|
47
|
+
debug('new %o', path)
|
48
|
+
|
49
|
+
// route handlers for various http methods
|
50
|
+
this.methods = {};
|
51
|
+
}
|
52
|
+
|
53
|
+
/**
|
54
|
+
* Determine if the route handles a given method.
|
55
|
+
* @private
|
56
|
+
*/
|
57
|
+
|
58
|
+
Route.prototype._handles_method = function _handles_method(method) {
|
59
|
+
if (this.methods._all) {
|
60
|
+
return true;
|
61
|
+
}
|
62
|
+
|
63
|
+
var name = method.toLowerCase();
|
64
|
+
|
65
|
+
if (name === 'head' && !this.methods['head']) {
|
66
|
+
name = 'get';
|
67
|
+
}
|
68
|
+
|
69
|
+
return Boolean(this.methods[name]);
|
70
|
+
};
|
71
|
+
|
72
|
+
/**
|
73
|
+
* @return {Array} supported HTTP methods
|
74
|
+
* @private
|
75
|
+
*/
|
76
|
+
|
77
|
+
Route.prototype._options = function _options() {
|
78
|
+
var methods = Object.keys(this.methods);
|
79
|
+
|
80
|
+
// append automatic head
|
81
|
+
if (this.methods.get && !this.methods.head) {
|
82
|
+
methods.push('head');
|
83
|
+
}
|
84
|
+
|
85
|
+
for (var i = 0; i < methods.length; i++) {
|
86
|
+
// make upper case
|
87
|
+
methods[i] = methods[i].toUpperCase();
|
88
|
+
}
|
89
|
+
|
90
|
+
return methods;
|
91
|
+
};
|
92
|
+
|
93
|
+
/**
|
94
|
+
* dispatch req, res into this route
|
95
|
+
* @private
|
96
|
+
*/
|
97
|
+
|
98
|
+
Route.prototype.dispatch = function dispatch(req, res, done) {
|
99
|
+
var idx = 0;
|
100
|
+
var stack = this.stack;
|
101
|
+
if (stack.length === 0) {
|
102
|
+
return done();
|
103
|
+
}
|
104
|
+
|
105
|
+
var method = req.method.toLowerCase();
|
106
|
+
if (method === 'head' && !this.methods['head']) {
|
107
|
+
method = 'get';
|
108
|
+
}
|
109
|
+
|
110
|
+
req.route = this;
|
111
|
+
|
112
|
+
next();
|
113
|
+
|
114
|
+
function next(err) {
|
115
|
+
// signal to exit route
|
116
|
+
if (err && err === 'route') {
|
117
|
+
return done();
|
118
|
+
}
|
119
|
+
|
120
|
+
// signal to exit router
|
121
|
+
if (err && err === 'router') {
|
122
|
+
return done(err)
|
123
|
+
}
|
124
|
+
|
125
|
+
var layer = stack[idx++];
|
126
|
+
if (!layer) {
|
127
|
+
return done(err);
|
128
|
+
}
|
129
|
+
|
130
|
+
if (layer.method && layer.method !== method) {
|
131
|
+
return next(err);
|
132
|
+
}
|
133
|
+
|
134
|
+
if (err) {
|
135
|
+
layer.handle_error(err, req, res, next);
|
136
|
+
} else {
|
137
|
+
layer.handle_request(req, res, next);
|
138
|
+
}
|
139
|
+
}
|
140
|
+
};
|
141
|
+
|
142
|
+
/**
|
143
|
+
* Add a handler for all HTTP verbs to this route.
|
144
|
+
*
|
145
|
+
* Behaves just like middleware and can respond or call `next`
|
146
|
+
* to continue processing.
|
147
|
+
*
|
148
|
+
* You can use multiple `.all` call to add multiple handlers.
|
149
|
+
*
|
150
|
+
* function check_something(req, res, next){
|
151
|
+
* next();
|
152
|
+
* };
|
153
|
+
*
|
154
|
+
* function validate_user(req, res, next){
|
155
|
+
* next();
|
156
|
+
* };
|
157
|
+
*
|
158
|
+
* route
|
159
|
+
* .all(validate_user)
|
160
|
+
* .all(check_something)
|
161
|
+
* .get(function(req, res, next){
|
162
|
+
* res.send('hello world');
|
163
|
+
* });
|
164
|
+
*
|
165
|
+
* @param {function} handler
|
166
|
+
* @return {Route} for chaining
|
167
|
+
* @api public
|
168
|
+
*/
|
169
|
+
|
170
|
+
Route.prototype.all = function all() {
|
171
|
+
var handles = flatten(slice.call(arguments));
|
172
|
+
|
173
|
+
for (var i = 0; i < handles.length; i++) {
|
174
|
+
var handle = handles[i];
|
175
|
+
|
176
|
+
if (typeof handle !== 'function') {
|
177
|
+
var type = toString.call(handle);
|
178
|
+
var msg = 'Route.all() requires a callback function but got a ' + type
|
179
|
+
throw new TypeError(msg);
|
180
|
+
}
|
181
|
+
|
182
|
+
var layer = Layer('/', {}, handle);
|
183
|
+
layer.method = undefined;
|
184
|
+
|
185
|
+
this.methods._all = true;
|
186
|
+
this.stack.push(layer);
|
187
|
+
}
|
188
|
+
|
189
|
+
return this;
|
190
|
+
};
|
191
|
+
|
192
|
+
methods.forEach(function(method){
|
193
|
+
Route.prototype[method] = function(){
|
194
|
+
var handles = flatten(slice.call(arguments));
|
195
|
+
|
196
|
+
for (var i = 0; i < handles.length; i++) {
|
197
|
+
var handle = handles[i];
|
198
|
+
|
199
|
+
if (typeof handle !== 'function') {
|
200
|
+
var type = toString.call(handle);
|
201
|
+
var msg = 'Route.' + method + '() requires a callback function but got a ' + type
|
202
|
+
throw new Error(msg);
|
203
|
+
}
|
204
|
+
|
205
|
+
debug('%s %o', method, this.path)
|
206
|
+
|
207
|
+
var layer = Layer('/', {}, handle);
|
208
|
+
layer.method = method;
|
209
|
+
|
210
|
+
this.methods[method] = true;
|
211
|
+
this.stack.push(layer);
|
212
|
+
}
|
213
|
+
|
214
|
+
return this;
|
215
|
+
};
|
216
|
+
});
|
@@ -0,0 +1,302 @@
|
|
1
|
+
/*!
|
2
|
+
* express
|
3
|
+
* Copyright(c) 2009-2013 TJ Holowaychuk
|
4
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
5
|
+
* MIT Licensed
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Module dependencies.
|
12
|
+
* @api private
|
13
|
+
*/
|
14
|
+
|
15
|
+
var Buffer = require('safe-buffer').Buffer
|
16
|
+
var contentDisposition = require('content-disposition');
|
17
|
+
var contentType = require('content-type');
|
18
|
+
var deprecate = require('depd')('express');
|
19
|
+
var flatten = require('array-flatten');
|
20
|
+
var mime = require('send').mime;
|
21
|
+
var etag = require('etag');
|
22
|
+
var proxyaddr = require('proxy-addr');
|
23
|
+
var qs = require('qs');
|
24
|
+
var querystring = require('querystring');
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Return strong ETag for `body`.
|
28
|
+
*
|
29
|
+
* @param {String|Buffer} body
|
30
|
+
* @param {String} [encoding]
|
31
|
+
* @return {String}
|
32
|
+
* @api private
|
33
|
+
*/
|
34
|
+
|
35
|
+
exports.etag = createETagGenerator({ weak: false })
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Return weak ETag for `body`.
|
39
|
+
*
|
40
|
+
* @param {String|Buffer} body
|
41
|
+
* @param {String} [encoding]
|
42
|
+
* @return {String}
|
43
|
+
* @api private
|
44
|
+
*/
|
45
|
+
|
46
|
+
exports.wetag = createETagGenerator({ weak: true })
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Check if `path` looks absolute.
|
50
|
+
*
|
51
|
+
* @param {String} path
|
52
|
+
* @return {Boolean}
|
53
|
+
* @api private
|
54
|
+
*/
|
55
|
+
|
56
|
+
exports.isAbsolute = function(path){
|
57
|
+
if ('/' === path[0]) return true;
|
58
|
+
if (':' === path[1] && ('\\' === path[2] || '/' === path[2])) return true; // Windows device path
|
59
|
+
if ('\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path
|
60
|
+
};
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Flatten the given `arr`.
|
64
|
+
*
|
65
|
+
* @param {Array} arr
|
66
|
+
* @return {Array}
|
67
|
+
* @api private
|
68
|
+
*/
|
69
|
+
|
70
|
+
exports.flatten = deprecate.function(flatten,
|
71
|
+
'utils.flatten: use array-flatten npm module instead');
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Normalize the given `type`, for example "html" becomes "text/html".
|
75
|
+
*
|
76
|
+
* @param {String} type
|
77
|
+
* @return {Object}
|
78
|
+
* @api private
|
79
|
+
*/
|
80
|
+
|
81
|
+
exports.normalizeType = function(type){
|
82
|
+
return ~type.indexOf('/')
|
83
|
+
? acceptParams(type)
|
84
|
+
: { value: mime.lookup(type), params: {} };
|
85
|
+
};
|
86
|
+
|
87
|
+
/**
|
88
|
+
* Normalize `types`, for example "html" becomes "text/html".
|
89
|
+
*
|
90
|
+
* @param {Array} types
|
91
|
+
* @return {Array}
|
92
|
+
* @api private
|
93
|
+
*/
|
94
|
+
|
95
|
+
exports.normalizeTypes = function(types){
|
96
|
+
var ret = [];
|
97
|
+
|
98
|
+
for (var i = 0; i < types.length; ++i) {
|
99
|
+
ret.push(exports.normalizeType(types[i]));
|
100
|
+
}
|
101
|
+
|
102
|
+
return ret;
|
103
|
+
};
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Generate Content-Disposition header appropriate for the filename.
|
107
|
+
* non-ascii filenames are urlencoded and a filename* parameter is added
|
108
|
+
*
|
109
|
+
* @param {String} filename
|
110
|
+
* @return {String}
|
111
|
+
* @api private
|
112
|
+
*/
|
113
|
+
|
114
|
+
exports.contentDisposition = deprecate.function(contentDisposition,
|
115
|
+
'utils.contentDisposition: use content-disposition npm module instead');
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Parse accept params `str` returning an
|
119
|
+
* object with `.value`, `.quality` and `.params`.
|
120
|
+
* also includes `.originalIndex` for stable sorting
|
121
|
+
*
|
122
|
+
* @param {String} str
|
123
|
+
* @return {Object}
|
124
|
+
* @api private
|
125
|
+
*/
|
126
|
+
|
127
|
+
function acceptParams(str, index) {
|
128
|
+
var parts = str.split(/ *; */);
|
129
|
+
var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index };
|
130
|
+
|
131
|
+
for (var i = 1; i < parts.length; ++i) {
|
132
|
+
var pms = parts[i].split(/ *= */);
|
133
|
+
if ('q' === pms[0]) {
|
134
|
+
ret.quality = parseFloat(pms[1]);
|
135
|
+
} else {
|
136
|
+
ret.params[pms[0]] = pms[1];
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
return ret;
|
141
|
+
}
|
142
|
+
|
143
|
+
/**
|
144
|
+
* Compile "etag" value to function.
|
145
|
+
*
|
146
|
+
* @param {Boolean|String|Function} val
|
147
|
+
* @return {Function}
|
148
|
+
* @api private
|
149
|
+
*/
|
150
|
+
|
151
|
+
exports.compileETag = function(val) {
|
152
|
+
var fn;
|
153
|
+
|
154
|
+
if (typeof val === 'function') {
|
155
|
+
return val;
|
156
|
+
}
|
157
|
+
|
158
|
+
switch (val) {
|
159
|
+
case true:
|
160
|
+
case 'weak':
|
161
|
+
fn = exports.wetag;
|
162
|
+
break;
|
163
|
+
case false:
|
164
|
+
break;
|
165
|
+
case 'strong':
|
166
|
+
fn = exports.etag;
|
167
|
+
break;
|
168
|
+
default:
|
169
|
+
throw new TypeError('unknown value for etag function: ' + val);
|
170
|
+
}
|
171
|
+
|
172
|
+
return fn;
|
173
|
+
}
|
174
|
+
|
175
|
+
/**
|
176
|
+
* Compile "query parser" value to function.
|
177
|
+
*
|
178
|
+
* @param {String|Function} val
|
179
|
+
* @return {Function}
|
180
|
+
* @api private
|
181
|
+
*/
|
182
|
+
|
183
|
+
exports.compileQueryParser = function compileQueryParser(val) {
|
184
|
+
var fn;
|
185
|
+
|
186
|
+
if (typeof val === 'function') {
|
187
|
+
return val;
|
188
|
+
}
|
189
|
+
|
190
|
+
switch (val) {
|
191
|
+
case true:
|
192
|
+
case 'simple':
|
193
|
+
fn = querystring.parse;
|
194
|
+
break;
|
195
|
+
case false:
|
196
|
+
fn = newObject;
|
197
|
+
break;
|
198
|
+
case 'extended':
|
199
|
+
fn = parseExtendedQueryString;
|
200
|
+
break;
|
201
|
+
default:
|
202
|
+
throw new TypeError('unknown value for query parser function: ' + val);
|
203
|
+
}
|
204
|
+
|
205
|
+
return fn;
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Compile "proxy trust" value to function.
|
210
|
+
*
|
211
|
+
* @param {Boolean|String|Number|Array|Function} val
|
212
|
+
* @return {Function}
|
213
|
+
* @api private
|
214
|
+
*/
|
215
|
+
|
216
|
+
exports.compileTrust = function(val) {
|
217
|
+
if (typeof val === 'function') return val;
|
218
|
+
|
219
|
+
if (val === true) {
|
220
|
+
// Support plain true/false
|
221
|
+
return function(){ return true };
|
222
|
+
}
|
223
|
+
|
224
|
+
if (typeof val === 'number') {
|
225
|
+
// Support trusting hop count
|
226
|
+
return function(a, i){ return i < val };
|
227
|
+
}
|
228
|
+
|
229
|
+
if (typeof val === 'string') {
|
230
|
+
// Support comma-separated values
|
231
|
+
val = val.split(/ *, */);
|
232
|
+
}
|
233
|
+
|
234
|
+
return proxyaddr.compile(val || []);
|
235
|
+
}
|
236
|
+
|
237
|
+
/**
|
238
|
+
* Set the charset in a given Content-Type string.
|
239
|
+
*
|
240
|
+
* @param {String} type
|
241
|
+
* @param {String} charset
|
242
|
+
* @return {String}
|
243
|
+
* @api private
|
244
|
+
*/
|
245
|
+
|
246
|
+
exports.setCharset = function setCharset(type, charset) {
|
247
|
+
if (!type || !charset) {
|
248
|
+
return type;
|
249
|
+
}
|
250
|
+
|
251
|
+
// parse type
|
252
|
+
var parsed = contentType.parse(type);
|
253
|
+
|
254
|
+
// set charset
|
255
|
+
parsed.parameters.charset = charset;
|
256
|
+
|
257
|
+
// format type
|
258
|
+
return contentType.format(parsed);
|
259
|
+
};
|
260
|
+
|
261
|
+
/**
|
262
|
+
* Create an ETag generator function, generating ETags with
|
263
|
+
* the given options.
|
264
|
+
*
|
265
|
+
* @param {object} options
|
266
|
+
* @return {function}
|
267
|
+
* @private
|
268
|
+
*/
|
269
|
+
|
270
|
+
function createETagGenerator (options) {
|
271
|
+
return function generateETag (body, encoding) {
|
272
|
+
var buf = !Buffer.isBuffer(body)
|
273
|
+
? Buffer.from(body, encoding)
|
274
|
+
: body
|
275
|
+
|
276
|
+
return etag(buf, options)
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
280
|
+
/**
|
281
|
+
* Parse an extended query string with qs.
|
282
|
+
*
|
283
|
+
* @return {Object}
|
284
|
+
* @private
|
285
|
+
*/
|
286
|
+
|
287
|
+
function parseExtendedQueryString(str) {
|
288
|
+
return qs.parse(str, {
|
289
|
+
allowPrototypes: true
|
290
|
+
});
|
291
|
+
}
|
292
|
+
|
293
|
+
/**
|
294
|
+
* Return new empty object.
|
295
|
+
*
|
296
|
+
* @return {Object}
|
297
|
+
* @api private
|
298
|
+
*/
|
299
|
+
|
300
|
+
function newObject() {
|
301
|
+
return {};
|
302
|
+
}
|