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,154 @@
|
|
1
|
+
# on-finished
|
2
|
+
|
3
|
+
[![NPM Version][npm-image]][npm-url]
|
4
|
+
[![NPM Downloads][downloads-image]][downloads-url]
|
5
|
+
[![Node.js Version][node-version-image]][node-version-url]
|
6
|
+
[![Build Status][travis-image]][travis-url]
|
7
|
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
8
|
+
|
9
|
+
Execute a callback when a HTTP request closes, finishes, or errors.
|
10
|
+
|
11
|
+
## Install
|
12
|
+
|
13
|
+
```sh
|
14
|
+
$ npm install on-finished
|
15
|
+
```
|
16
|
+
|
17
|
+
## API
|
18
|
+
|
19
|
+
```js
|
20
|
+
var onFinished = require('on-finished')
|
21
|
+
```
|
22
|
+
|
23
|
+
### onFinished(res, listener)
|
24
|
+
|
25
|
+
Attach a listener to listen for the response to finish. The listener will
|
26
|
+
be invoked only once when the response finished. If the response finished
|
27
|
+
to an error, the first argument will contain the error. If the response
|
28
|
+
has already finished, the listener will be invoked.
|
29
|
+
|
30
|
+
Listening to the end of a response would be used to close things associated
|
31
|
+
with the response, like open files.
|
32
|
+
|
33
|
+
Listener is invoked as `listener(err, res)`.
|
34
|
+
|
35
|
+
```js
|
36
|
+
onFinished(res, function (err, res) {
|
37
|
+
// clean up open fds, etc.
|
38
|
+
// err contains the error is request error'd
|
39
|
+
})
|
40
|
+
```
|
41
|
+
|
42
|
+
### onFinished(req, listener)
|
43
|
+
|
44
|
+
Attach a listener to listen for the request to finish. The listener will
|
45
|
+
be invoked only once when the request finished. If the request finished
|
46
|
+
to an error, the first argument will contain the error. If the request
|
47
|
+
has already finished, the listener will be invoked.
|
48
|
+
|
49
|
+
Listening to the end of a request would be used to know when to continue
|
50
|
+
after reading the data.
|
51
|
+
|
52
|
+
Listener is invoked as `listener(err, req)`.
|
53
|
+
|
54
|
+
```js
|
55
|
+
var data = ''
|
56
|
+
|
57
|
+
req.setEncoding('utf8')
|
58
|
+
res.on('data', function (str) {
|
59
|
+
data += str
|
60
|
+
})
|
61
|
+
|
62
|
+
onFinished(req, function (err, req) {
|
63
|
+
// data is read unless there is err
|
64
|
+
})
|
65
|
+
```
|
66
|
+
|
67
|
+
### onFinished.isFinished(res)
|
68
|
+
|
69
|
+
Determine if `res` is already finished. This would be useful to check and
|
70
|
+
not even start certain operations if the response has already finished.
|
71
|
+
|
72
|
+
### onFinished.isFinished(req)
|
73
|
+
|
74
|
+
Determine if `req` is already finished. This would be useful to check and
|
75
|
+
not even start certain operations if the request has already finished.
|
76
|
+
|
77
|
+
## Special Node.js requests
|
78
|
+
|
79
|
+
### HTTP CONNECT method
|
80
|
+
|
81
|
+
The meaning of the `CONNECT` method from RFC 7231, section 4.3.6:
|
82
|
+
|
83
|
+
> The CONNECT method requests that the recipient establish a tunnel to
|
84
|
+
> the destination origin server identified by the request-target and,
|
85
|
+
> if successful, thereafter restrict its behavior to blind forwarding
|
86
|
+
> of packets, in both directions, until the tunnel is closed. Tunnels
|
87
|
+
> are commonly used to create an end-to-end virtual connection, through
|
88
|
+
> one or more proxies, which can then be secured using TLS (Transport
|
89
|
+
> Layer Security, [RFC5246]).
|
90
|
+
|
91
|
+
In Node.js, these request objects come from the `'connect'` event on
|
92
|
+
the HTTP server.
|
93
|
+
|
94
|
+
When this module is used on a HTTP `CONNECT` request, the request is
|
95
|
+
considered "finished" immediately, **due to limitations in the Node.js
|
96
|
+
interface**. This means if the `CONNECT` request contains a request entity,
|
97
|
+
the request will be considered "finished" even before it has been read.
|
98
|
+
|
99
|
+
There is no such thing as a response object to a `CONNECT` request in
|
100
|
+
Node.js, so there is no support for for one.
|
101
|
+
|
102
|
+
### HTTP Upgrade request
|
103
|
+
|
104
|
+
The meaning of the `Upgrade` header from RFC 7230, section 6.1:
|
105
|
+
|
106
|
+
> The "Upgrade" header field is intended to provide a simple mechanism
|
107
|
+
> for transitioning from HTTP/1.1 to some other protocol on the same
|
108
|
+
> connection.
|
109
|
+
|
110
|
+
In Node.js, these request objects come from the `'upgrade'` event on
|
111
|
+
the HTTP server.
|
112
|
+
|
113
|
+
When this module is used on a HTTP request with an `Upgrade` header, the
|
114
|
+
request is considered "finished" immediately, **due to limitations in the
|
115
|
+
Node.js interface**. This means if the `Upgrade` request contains a request
|
116
|
+
entity, the request will be considered "finished" even before it has been
|
117
|
+
read.
|
118
|
+
|
119
|
+
There is no such thing as a response object to a `Upgrade` request in
|
120
|
+
Node.js, so there is no support for for one.
|
121
|
+
|
122
|
+
## Example
|
123
|
+
|
124
|
+
The following code ensures that file descriptors are always closed
|
125
|
+
once the response finishes.
|
126
|
+
|
127
|
+
```js
|
128
|
+
var destroy = require('destroy')
|
129
|
+
var http = require('http')
|
130
|
+
var onFinished = require('on-finished')
|
131
|
+
|
132
|
+
http.createServer(function onRequest(req, res) {
|
133
|
+
var stream = fs.createReadStream('package.json')
|
134
|
+
stream.pipe(res)
|
135
|
+
onFinished(res, function (err) {
|
136
|
+
destroy(stream)
|
137
|
+
})
|
138
|
+
})
|
139
|
+
```
|
140
|
+
|
141
|
+
## License
|
142
|
+
|
143
|
+
[MIT](LICENSE)
|
144
|
+
|
145
|
+
[npm-image]: https://img.shields.io/npm/v/on-finished.svg
|
146
|
+
[npm-url]: https://npmjs.org/package/on-finished
|
147
|
+
[node-version-image]: https://img.shields.io/node/v/on-finished.svg
|
148
|
+
[node-version-url]: http://nodejs.org/download/
|
149
|
+
[travis-image]: https://img.shields.io/travis/jshttp/on-finished/master.svg
|
150
|
+
[travis-url]: https://travis-ci.org/jshttp/on-finished
|
151
|
+
[coveralls-image]: https://img.shields.io/coveralls/jshttp/on-finished/master.svg
|
152
|
+
[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master
|
153
|
+
[downloads-image]: https://img.shields.io/npm/dm/on-finished.svg
|
154
|
+
[downloads-url]: https://npmjs.org/package/on-finished
|
@@ -0,0 +1,196 @@
|
|
1
|
+
/*!
|
2
|
+
* on-finished
|
3
|
+
* Copyright(c) 2013 Jonathan Ong
|
4
|
+
* Copyright(c) 2014 Douglas Christopher Wilson
|
5
|
+
* MIT Licensed
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict'
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Module exports.
|
12
|
+
* @public
|
13
|
+
*/
|
14
|
+
|
15
|
+
module.exports = onFinished
|
16
|
+
module.exports.isFinished = isFinished
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Module dependencies.
|
20
|
+
* @private
|
21
|
+
*/
|
22
|
+
|
23
|
+
var first = require('ee-first')
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Variables.
|
27
|
+
* @private
|
28
|
+
*/
|
29
|
+
|
30
|
+
/* istanbul ignore next */
|
31
|
+
var defer = typeof setImmediate === 'function'
|
32
|
+
? setImmediate
|
33
|
+
: function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Invoke callback when the response has finished, useful for
|
37
|
+
* cleaning up resources afterwards.
|
38
|
+
*
|
39
|
+
* @param {object} msg
|
40
|
+
* @param {function} listener
|
41
|
+
* @return {object}
|
42
|
+
* @public
|
43
|
+
*/
|
44
|
+
|
45
|
+
function onFinished(msg, listener) {
|
46
|
+
if (isFinished(msg) !== false) {
|
47
|
+
defer(listener, null, msg)
|
48
|
+
return msg
|
49
|
+
}
|
50
|
+
|
51
|
+
// attach the listener to the message
|
52
|
+
attachListener(msg, listener)
|
53
|
+
|
54
|
+
return msg
|
55
|
+
}
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Determine if message is already finished.
|
59
|
+
*
|
60
|
+
* @param {object} msg
|
61
|
+
* @return {boolean}
|
62
|
+
* @public
|
63
|
+
*/
|
64
|
+
|
65
|
+
function isFinished(msg) {
|
66
|
+
var socket = msg.socket
|
67
|
+
|
68
|
+
if (typeof msg.finished === 'boolean') {
|
69
|
+
// OutgoingMessage
|
70
|
+
return Boolean(msg.finished || (socket && !socket.writable))
|
71
|
+
}
|
72
|
+
|
73
|
+
if (typeof msg.complete === 'boolean') {
|
74
|
+
// IncomingMessage
|
75
|
+
return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))
|
76
|
+
}
|
77
|
+
|
78
|
+
// don't know
|
79
|
+
return undefined
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Attach a finished listener to the message.
|
84
|
+
*
|
85
|
+
* @param {object} msg
|
86
|
+
* @param {function} callback
|
87
|
+
* @private
|
88
|
+
*/
|
89
|
+
|
90
|
+
function attachFinishedListener(msg, callback) {
|
91
|
+
var eeMsg
|
92
|
+
var eeSocket
|
93
|
+
var finished = false
|
94
|
+
|
95
|
+
function onFinish(error) {
|
96
|
+
eeMsg.cancel()
|
97
|
+
eeSocket.cancel()
|
98
|
+
|
99
|
+
finished = true
|
100
|
+
callback(error)
|
101
|
+
}
|
102
|
+
|
103
|
+
// finished on first message event
|
104
|
+
eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)
|
105
|
+
|
106
|
+
function onSocket(socket) {
|
107
|
+
// remove listener
|
108
|
+
msg.removeListener('socket', onSocket)
|
109
|
+
|
110
|
+
if (finished) return
|
111
|
+
if (eeMsg !== eeSocket) return
|
112
|
+
|
113
|
+
// finished on first socket event
|
114
|
+
eeSocket = first([[socket, 'error', 'close']], onFinish)
|
115
|
+
}
|
116
|
+
|
117
|
+
if (msg.socket) {
|
118
|
+
// socket already assigned
|
119
|
+
onSocket(msg.socket)
|
120
|
+
return
|
121
|
+
}
|
122
|
+
|
123
|
+
// wait for socket to be assigned
|
124
|
+
msg.on('socket', onSocket)
|
125
|
+
|
126
|
+
if (msg.socket === undefined) {
|
127
|
+
// node.js 0.8 patch
|
128
|
+
patchAssignSocket(msg, onSocket)
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
/**
|
133
|
+
* Attach the listener to the message.
|
134
|
+
*
|
135
|
+
* @param {object} msg
|
136
|
+
* @return {function}
|
137
|
+
* @private
|
138
|
+
*/
|
139
|
+
|
140
|
+
function attachListener(msg, listener) {
|
141
|
+
var attached = msg.__onFinished
|
142
|
+
|
143
|
+
// create a private single listener with queue
|
144
|
+
if (!attached || !attached.queue) {
|
145
|
+
attached = msg.__onFinished = createListener(msg)
|
146
|
+
attachFinishedListener(msg, attached)
|
147
|
+
}
|
148
|
+
|
149
|
+
attached.queue.push(listener)
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* Create listener on message.
|
154
|
+
*
|
155
|
+
* @param {object} msg
|
156
|
+
* @return {function}
|
157
|
+
* @private
|
158
|
+
*/
|
159
|
+
|
160
|
+
function createListener(msg) {
|
161
|
+
function listener(err) {
|
162
|
+
if (msg.__onFinished === listener) msg.__onFinished = null
|
163
|
+
if (!listener.queue) return
|
164
|
+
|
165
|
+
var queue = listener.queue
|
166
|
+
listener.queue = null
|
167
|
+
|
168
|
+
for (var i = 0; i < queue.length; i++) {
|
169
|
+
queue[i](err, msg)
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
listener.queue = []
|
174
|
+
|
175
|
+
return listener
|
176
|
+
}
|
177
|
+
|
178
|
+
/**
|
179
|
+
* Patch ServerResponse.prototype.assignSocket for node.js 0.8.
|
180
|
+
*
|
181
|
+
* @param {ServerResponse} res
|
182
|
+
* @param {function} callback
|
183
|
+
* @private
|
184
|
+
*/
|
185
|
+
|
186
|
+
function patchAssignSocket(res, callback) {
|
187
|
+
var assignSocket = res.assignSocket
|
188
|
+
|
189
|
+
if (typeof assignSocket !== 'function') return
|
190
|
+
|
191
|
+
// res.on('socket', callback) is broken in 0.8
|
192
|
+
res.assignSocket = function _assignSocket(socket) {
|
193
|
+
assignSocket.call(this, socket)
|
194
|
+
callback(socket)
|
195
|
+
}
|
196
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
{
|
2
|
+
"name": "on-finished",
|
3
|
+
"description": "Execute a callback when a request closes, finishes, or errors",
|
4
|
+
"version": "2.3.0",
|
5
|
+
"contributors": [
|
6
|
+
"Douglas Christopher Wilson <doug@somethingdoug.com>",
|
7
|
+
"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
|
8
|
+
],
|
9
|
+
"license": "MIT",
|
10
|
+
"repository": "jshttp/on-finished",
|
11
|
+
"dependencies": {
|
12
|
+
"ee-first": "1.1.1"
|
13
|
+
},
|
14
|
+
"devDependencies": {
|
15
|
+
"istanbul": "0.3.9",
|
16
|
+
"mocha": "2.2.5"
|
17
|
+
},
|
18
|
+
"engines": {
|
19
|
+
"node": ">= 0.8"
|
20
|
+
},
|
21
|
+
"files": [
|
22
|
+
"HISTORY.md",
|
23
|
+
"LICENSE",
|
24
|
+
"index.js"
|
25
|
+
],
|
26
|
+
"scripts": {
|
27
|
+
"test": "mocha --reporter spec --bail --check-leaks test/",
|
28
|
+
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
|
29
|
+
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
1.3.3 / 2019-04-15
|
2
|
+
==================
|
3
|
+
|
4
|
+
* Fix Node.js 0.8 return value inconsistencies
|
5
|
+
|
6
|
+
1.3.2 / 2017-09-09
|
7
|
+
==================
|
8
|
+
|
9
|
+
* perf: reduce overhead for full URLs
|
10
|
+
* perf: unroll the "fast-path" `RegExp`
|
11
|
+
|
12
|
+
1.3.1 / 2016-01-17
|
13
|
+
==================
|
14
|
+
|
15
|
+
* perf: enable strict mode
|
16
|
+
|
17
|
+
1.3.0 / 2014-08-09
|
18
|
+
==================
|
19
|
+
|
20
|
+
* Add `parseurl.original` for parsing `req.originalUrl` with fallback
|
21
|
+
* Return `undefined` if `req.url` is `undefined`
|
22
|
+
|
23
|
+
1.2.0 / 2014-07-21
|
24
|
+
==================
|
25
|
+
|
26
|
+
* Cache URLs based on original value
|
27
|
+
* Remove no-longer-needed URL mis-parse work-around
|
28
|
+
* Simplify the "fast-path" `RegExp`
|
29
|
+
|
30
|
+
1.1.3 / 2014-07-08
|
31
|
+
==================
|
32
|
+
|
33
|
+
* Fix typo
|
34
|
+
|
35
|
+
1.1.2 / 2014-07-08
|
36
|
+
==================
|
37
|
+
|
38
|
+
* Seriously fix Node.js 0.8 compatibility
|
39
|
+
|
40
|
+
1.1.1 / 2014-07-08
|
41
|
+
==================
|
42
|
+
|
43
|
+
* Fix Node.js 0.8 compatibility
|
44
|
+
|
45
|
+
1.1.0 / 2014-07-08
|
46
|
+
==================
|
47
|
+
|
48
|
+
* Incorporate URL href-only parse fast-path
|
49
|
+
|
50
|
+
1.0.1 / 2014-03-08
|
51
|
+
==================
|
52
|
+
|
53
|
+
* Add missing `require`
|
54
|
+
|
55
|
+
1.0.0 / 2014-03-08
|
56
|
+
==================
|
57
|
+
|
58
|
+
* Genesis from `connect`
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
(The MIT License)
|
3
|
+
|
4
|
+
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
5
|
+
Copyright (c) 2014-2017 Douglas Christopher Wilson <doug@somethingdoug.com>
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
+
a copy of this software and associated documentation files (the
|
9
|
+
'Software'), to deal in the Software without restriction, including
|
10
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
+
permit persons to whom the Software is furnished to do so, subject to
|
13
|
+
the following conditions:
|
14
|
+
|
15
|
+
The above copyright notice and this permission notice shall be
|
16
|
+
included in all copies or substantial portions of the Software.
|
17
|
+
|
18
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
19
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
21
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
22
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
23
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
24
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# parseurl
|
2
|
+
|
3
|
+
[![NPM Version][npm-version-image]][npm-url]
|
4
|
+
[![NPM Downloads][npm-downloads-image]][npm-url]
|
5
|
+
[![Node.js Version][node-image]][node-url]
|
6
|
+
[![Build Status][travis-image]][travis-url]
|
7
|
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
8
|
+
|
9
|
+
Parse a URL with memoization.
|
10
|
+
|
11
|
+
## Install
|
12
|
+
|
13
|
+
This is a [Node.js](https://nodejs.org/en/) module available through the
|
14
|
+
[npm registry](https://www.npmjs.com/). Installation is done using the
|
15
|
+
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
16
|
+
|
17
|
+
```sh
|
18
|
+
$ npm install parseurl
|
19
|
+
```
|
20
|
+
|
21
|
+
## API
|
22
|
+
|
23
|
+
```js
|
24
|
+
var parseurl = require('parseurl')
|
25
|
+
```
|
26
|
+
|
27
|
+
### parseurl(req)
|
28
|
+
|
29
|
+
Parse the URL of the given request object (looks at the `req.url` property)
|
30
|
+
and return the result. The result is the same as `url.parse` in Node.js core.
|
31
|
+
Calling this function multiple times on the same `req` where `req.url` does
|
32
|
+
not change will return a cached parsed object, rather than parsing again.
|
33
|
+
|
34
|
+
### parseurl.original(req)
|
35
|
+
|
36
|
+
Parse the original URL of the given request object and return the result.
|
37
|
+
This works by trying to parse `req.originalUrl` if it is a string, otherwise
|
38
|
+
parses `req.url`. The result is the same as `url.parse` in Node.js core.
|
39
|
+
Calling this function multiple times on the same `req` where `req.originalUrl`
|
40
|
+
does not change will return a cached parsed object, rather than parsing again.
|
41
|
+
|
42
|
+
## Benchmark
|
43
|
+
|
44
|
+
```bash
|
45
|
+
$ npm run-script bench
|
46
|
+
|
47
|
+
> parseurl@1.3.3 bench nodejs-parseurl
|
48
|
+
> node benchmark/index.js
|
49
|
+
|
50
|
+
http_parser@2.8.0
|
51
|
+
node@10.6.0
|
52
|
+
v8@6.7.288.46-node.13
|
53
|
+
uv@1.21.0
|
54
|
+
zlib@1.2.11
|
55
|
+
ares@1.14.0
|
56
|
+
modules@64
|
57
|
+
nghttp2@1.32.0
|
58
|
+
napi@3
|
59
|
+
openssl@1.1.0h
|
60
|
+
icu@61.1
|
61
|
+
unicode@10.0
|
62
|
+
cldr@33.0
|
63
|
+
tz@2018c
|
64
|
+
|
65
|
+
> node benchmark/fullurl.js
|
66
|
+
|
67
|
+
Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy"
|
68
|
+
|
69
|
+
4 tests completed.
|
70
|
+
|
71
|
+
fasturl x 2,207,842 ops/sec ±3.76% (184 runs sampled)
|
72
|
+
nativeurl - legacy x 507,180 ops/sec ±0.82% (191 runs sampled)
|
73
|
+
nativeurl - whatwg x 290,044 ops/sec ±1.96% (189 runs sampled)
|
74
|
+
parseurl x 488,907 ops/sec ±2.13% (192 runs sampled)
|
75
|
+
|
76
|
+
> node benchmark/pathquery.js
|
77
|
+
|
78
|
+
Parsing URL "/foo/bar?user=tj&pet=fluffy"
|
79
|
+
|
80
|
+
4 tests completed.
|
81
|
+
|
82
|
+
fasturl x 3,812,564 ops/sec ±3.15% (188 runs sampled)
|
83
|
+
nativeurl - legacy x 2,651,631 ops/sec ±1.68% (189 runs sampled)
|
84
|
+
nativeurl - whatwg x 161,837 ops/sec ±2.26% (189 runs sampled)
|
85
|
+
parseurl x 4,166,338 ops/sec ±2.23% (184 runs sampled)
|
86
|
+
|
87
|
+
> node benchmark/samerequest.js
|
88
|
+
|
89
|
+
Parsing URL "/foo/bar?user=tj&pet=fluffy" on same request object
|
90
|
+
|
91
|
+
4 tests completed.
|
92
|
+
|
93
|
+
fasturl x 3,821,651 ops/sec ±2.42% (185 runs sampled)
|
94
|
+
nativeurl - legacy x 2,651,162 ops/sec ±1.90% (187 runs sampled)
|
95
|
+
nativeurl - whatwg x 175,166 ops/sec ±1.44% (188 runs sampled)
|
96
|
+
parseurl x 14,912,606 ops/sec ±3.59% (183 runs sampled)
|
97
|
+
|
98
|
+
> node benchmark/simplepath.js
|
99
|
+
|
100
|
+
Parsing URL "/foo/bar"
|
101
|
+
|
102
|
+
4 tests completed.
|
103
|
+
|
104
|
+
fasturl x 12,421,765 ops/sec ±2.04% (191 runs sampled)
|
105
|
+
nativeurl - legacy x 7,546,036 ops/sec ±1.41% (188 runs sampled)
|
106
|
+
nativeurl - whatwg x 198,843 ops/sec ±1.83% (189 runs sampled)
|
107
|
+
parseurl x 24,244,006 ops/sec ±0.51% (194 runs sampled)
|
108
|
+
|
109
|
+
> node benchmark/slash.js
|
110
|
+
|
111
|
+
Parsing URL "/"
|
112
|
+
|
113
|
+
4 tests completed.
|
114
|
+
|
115
|
+
fasturl x 17,159,456 ops/sec ±3.25% (188 runs sampled)
|
116
|
+
nativeurl - legacy x 11,635,097 ops/sec ±3.79% (184 runs sampled)
|
117
|
+
nativeurl - whatwg x 240,693 ops/sec ±0.83% (189 runs sampled)
|
118
|
+
parseurl x 42,279,067 ops/sec ±0.55% (190 runs sampled)
|
119
|
+
```
|
120
|
+
|
121
|
+
## License
|
122
|
+
|
123
|
+
[MIT](LICENSE)
|
124
|
+
|
125
|
+
[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/parseurl/master
|
126
|
+
[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master
|
127
|
+
[node-image]: https://badgen.net/npm/node/parseurl
|
128
|
+
[node-url]: https://nodejs.org/en/download
|
129
|
+
[npm-downloads-image]: https://badgen.net/npm/dm/parseurl
|
130
|
+
[npm-url]: https://npmjs.org/package/parseurl
|
131
|
+
[npm-version-image]: https://badgen.net/npm/v/parseurl
|
132
|
+
[travis-image]: https://badgen.net/travis/pillarjs/parseurl/master
|
133
|
+
[travis-url]: https://travis-ci.org/pillarjs/parseurl
|