dcs8 1.1.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/index.html +314 -0
- package/mod/douban-proxy.js +98 -0
- package/mod/node_modules/.package-lock.json +845 -0
- package/mod/node_modules/accepts/HISTORY.md +250 -0
- package/mod/node_modules/accepts/LICENSE +23 -0
- package/mod/node_modules/accepts/README.md +140 -0
- package/mod/node_modules/accepts/index.js +238 -0
- package/mod/node_modules/accepts/package.json +47 -0
- package/mod/node_modules/body-parser/LICENSE +23 -0
- package/mod/node_modules/body-parser/README.md +494 -0
- package/mod/node_modules/body-parser/index.js +71 -0
- package/mod/node_modules/body-parser/lib/read.js +247 -0
- package/mod/node_modules/body-parser/lib/types/json.js +158 -0
- package/mod/node_modules/body-parser/lib/types/raw.js +42 -0
- package/mod/node_modules/body-parser/lib/types/text.js +36 -0
- package/mod/node_modules/body-parser/lib/types/urlencoded.js +142 -0
- package/mod/node_modules/body-parser/lib/utils.js +98 -0
- package/mod/node_modules/body-parser/package.json +52 -0
- package/mod/node_modules/bytes/History.md +97 -0
- package/mod/node_modules/bytes/LICENSE +23 -0
- package/mod/node_modules/bytes/Readme.md +152 -0
- package/mod/node_modules/bytes/index.js +170 -0
- package/mod/node_modules/bytes/package.json +42 -0
- package/mod/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
- package/mod/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- package/mod/node_modules/call-bind-apply-helpers/.nycrc +9 -0
- package/mod/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- package/mod/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- package/mod/node_modules/call-bind-apply-helpers/README.md +62 -0
- package/mod/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- package/mod/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- package/mod/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- package/mod/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- package/mod/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- package/mod/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- package/mod/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- package/mod/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- package/mod/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- package/mod/node_modules/call-bind-apply-helpers/index.js +15 -0
- package/mod/node_modules/call-bind-apply-helpers/package.json +85 -0
- package/mod/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- package/mod/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- package/mod/node_modules/call-bind-apply-helpers/test/index.js +63 -0
- package/mod/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- package/mod/node_modules/call-bound/.eslintrc +13 -0
- package/mod/node_modules/call-bound/.github/FUNDING.yml +12 -0
- package/mod/node_modules/call-bound/.nycrc +9 -0
- package/mod/node_modules/call-bound/CHANGELOG.md +42 -0
- package/mod/node_modules/call-bound/LICENSE +21 -0
- package/mod/node_modules/call-bound/README.md +53 -0
- package/mod/node_modules/call-bound/index.d.ts +94 -0
- package/mod/node_modules/call-bound/index.js +19 -0
- package/mod/node_modules/call-bound/package.json +99 -0
- package/mod/node_modules/call-bound/test/index.js +61 -0
- package/mod/node_modules/call-bound/tsconfig.json +10 -0
- package/mod/node_modules/content-disposition/HISTORY.md +72 -0
- package/mod/node_modules/content-disposition/LICENSE +22 -0
- package/mod/node_modules/content-disposition/README.md +142 -0
- package/mod/node_modules/content-disposition/index.js +458 -0
- package/mod/node_modules/content-disposition/package.json +43 -0
- package/mod/node_modules/content-type/HISTORY.md +29 -0
- package/mod/node_modules/content-type/LICENSE +22 -0
- package/mod/node_modules/content-type/README.md +94 -0
- package/mod/node_modules/content-type/index.js +225 -0
- package/mod/node_modules/content-type/package.json +42 -0
- package/mod/node_modules/cookie/LICENSE +24 -0
- package/mod/node_modules/cookie/README.md +317 -0
- package/mod/node_modules/cookie/SECURITY.md +25 -0
- package/mod/node_modules/cookie/index.js +335 -0
- package/mod/node_modules/cookie/package.json +44 -0
- package/mod/node_modules/cookie-signature/History.md +70 -0
- package/mod/node_modules/cookie-signature/LICENSE +22 -0
- package/mod/node_modules/cookie-signature/Readme.md +23 -0
- package/mod/node_modules/cookie-signature/index.js +47 -0
- package/mod/node_modules/cookie-signature/package.json +24 -0
- package/mod/node_modules/cors/LICENSE +22 -0
- package/mod/node_modules/cors/README.md +277 -0
- package/mod/node_modules/cors/lib/index.js +238 -0
- package/mod/node_modules/cors/package.json +42 -0
- package/mod/node_modules/debug/LICENSE +20 -0
- package/mod/node_modules/debug/README.md +481 -0
- package/mod/node_modules/debug/package.json +64 -0
- package/mod/node_modules/debug/src/browser.js +272 -0
- package/mod/node_modules/debug/src/common.js +292 -0
- package/mod/node_modules/debug/src/index.js +10 -0
- package/mod/node_modules/debug/src/node.js +263 -0
- package/mod/node_modules/depd/History.md +103 -0
- package/mod/node_modules/depd/LICENSE +22 -0
- package/mod/node_modules/depd/Readme.md +280 -0
- package/mod/node_modules/depd/index.js +538 -0
- package/mod/node_modules/depd/lib/browser/index.js +77 -0
- package/mod/node_modules/depd/package.json +45 -0
- package/mod/node_modules/dunder-proto/.eslintrc +5 -0
- package/mod/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- package/mod/node_modules/dunder-proto/.nycrc +13 -0
- package/mod/node_modules/dunder-proto/CHANGELOG.md +24 -0
- package/mod/node_modules/dunder-proto/LICENSE +21 -0
- package/mod/node_modules/dunder-proto/README.md +54 -0
- package/mod/node_modules/dunder-proto/get.d.ts +5 -0
- package/mod/node_modules/dunder-proto/get.js +30 -0
- package/mod/node_modules/dunder-proto/package.json +76 -0
- package/mod/node_modules/dunder-proto/set.d.ts +5 -0
- package/mod/node_modules/dunder-proto/set.js +35 -0
- package/mod/node_modules/dunder-proto/test/get.js +34 -0
- package/mod/node_modules/dunder-proto/test/index.js +4 -0
- package/mod/node_modules/dunder-proto/test/set.js +50 -0
- package/mod/node_modules/dunder-proto/tsconfig.json +9 -0
- package/mod/node_modules/ee-first/LICENSE +22 -0
- package/mod/node_modules/ee-first/README.md +80 -0
- package/mod/node_modules/ee-first/index.js +95 -0
- package/mod/node_modules/ee-first/package.json +29 -0
- package/mod/node_modules/encodeurl/LICENSE +22 -0
- package/mod/node_modules/encodeurl/README.md +109 -0
- package/mod/node_modules/encodeurl/index.js +60 -0
- package/mod/node_modules/encodeurl/package.json +40 -0
- package/mod/node_modules/es-define-property/.eslintrc +13 -0
- package/mod/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- package/mod/node_modules/es-define-property/.nycrc +9 -0
- package/mod/node_modules/es-define-property/CHANGELOG.md +29 -0
- package/mod/node_modules/es-define-property/LICENSE +21 -0
- package/mod/node_modules/es-define-property/README.md +49 -0
- package/mod/node_modules/es-define-property/index.d.ts +3 -0
- package/mod/node_modules/es-define-property/index.js +14 -0
- package/mod/node_modules/es-define-property/package.json +81 -0
- package/mod/node_modules/es-define-property/test/index.js +56 -0
- package/mod/node_modules/es-define-property/tsconfig.json +10 -0
- package/mod/node_modules/es-errors/.eslintrc +5 -0
- package/mod/node_modules/es-errors/.github/FUNDING.yml +12 -0
- package/mod/node_modules/es-errors/CHANGELOG.md +40 -0
- package/mod/node_modules/es-errors/LICENSE +21 -0
- package/mod/node_modules/es-errors/README.md +55 -0
- package/mod/node_modules/es-errors/eval.d.ts +3 -0
- package/mod/node_modules/es-errors/eval.js +4 -0
- package/mod/node_modules/es-errors/index.d.ts +3 -0
- package/mod/node_modules/es-errors/index.js +4 -0
- package/mod/node_modules/es-errors/package.json +80 -0
- package/mod/node_modules/es-errors/range.d.ts +3 -0
- package/mod/node_modules/es-errors/range.js +4 -0
- package/mod/node_modules/es-errors/ref.d.ts +3 -0
- package/mod/node_modules/es-errors/ref.js +4 -0
- package/mod/node_modules/es-errors/syntax.d.ts +3 -0
- package/mod/node_modules/es-errors/syntax.js +4 -0
- package/mod/node_modules/es-errors/test/index.js +19 -0
- package/mod/node_modules/es-errors/tsconfig.json +49 -0
- package/mod/node_modules/es-errors/type.d.ts +3 -0
- package/mod/node_modules/es-errors/type.js +4 -0
- package/mod/node_modules/es-errors/uri.d.ts +3 -0
- package/mod/node_modules/es-errors/uri.js +4 -0
- package/mod/node_modules/es-object-atoms/.eslintrc +16 -0
- package/mod/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- package/mod/node_modules/es-object-atoms/CHANGELOG.md +37 -0
- package/mod/node_modules/es-object-atoms/LICENSE +21 -0
- package/mod/node_modules/es-object-atoms/README.md +63 -0
- package/mod/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- package/mod/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- package/mod/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- package/mod/node_modules/es-object-atoms/ToObject.js +10 -0
- package/mod/node_modules/es-object-atoms/index.d.ts +3 -0
- package/mod/node_modules/es-object-atoms/index.js +4 -0
- package/mod/node_modules/es-object-atoms/isObject.d.ts +3 -0
- package/mod/node_modules/es-object-atoms/isObject.js +6 -0
- package/mod/node_modules/es-object-atoms/package.json +80 -0
- package/mod/node_modules/es-object-atoms/test/index.js +38 -0
- package/mod/node_modules/es-object-atoms/tsconfig.json +6 -0
- package/mod/node_modules/escape-html/LICENSE +24 -0
- package/mod/node_modules/escape-html/Readme.md +43 -0
- package/mod/node_modules/escape-html/index.js +78 -0
- package/mod/node_modules/escape-html/package.json +24 -0
- package/mod/node_modules/etag/HISTORY.md +83 -0
- package/mod/node_modules/etag/LICENSE +22 -0
- package/mod/node_modules/etag/README.md +159 -0
- package/mod/node_modules/etag/index.js +131 -0
- package/mod/node_modules/etag/package.json +47 -0
- package/mod/node_modules/express/LICENSE +24 -0
- package/mod/node_modules/express/Readme.md +276 -0
- package/mod/node_modules/express/index.js +11 -0
- package/mod/node_modules/express/lib/application.js +631 -0
- package/mod/node_modules/express/lib/express.js +81 -0
- package/mod/node_modules/express/lib/request.js +514 -0
- package/mod/node_modules/express/lib/response.js +1053 -0
- package/mod/node_modules/express/lib/utils.js +271 -0
- package/mod/node_modules/express/lib/view.js +205 -0
- package/mod/node_modules/express/package.json +99 -0
- package/mod/node_modules/finalhandler/HISTORY.md +239 -0
- package/mod/node_modules/finalhandler/LICENSE +22 -0
- package/mod/node_modules/finalhandler/README.md +150 -0
- package/mod/node_modules/finalhandler/index.js +293 -0
- package/mod/node_modules/finalhandler/package.json +47 -0
- package/mod/node_modules/forwarded/HISTORY.md +21 -0
- package/mod/node_modules/forwarded/LICENSE +22 -0
- package/mod/node_modules/forwarded/README.md +57 -0
- package/mod/node_modules/forwarded/index.js +90 -0
- package/mod/node_modules/forwarded/package.json +45 -0
- package/mod/node_modules/fresh/HISTORY.md +80 -0
- package/mod/node_modules/fresh/LICENSE +23 -0
- package/mod/node_modules/fresh/README.md +117 -0
- package/mod/node_modules/fresh/index.js +136 -0
- package/mod/node_modules/fresh/package.json +46 -0
- package/mod/node_modules/function-bind/.eslintrc +21 -0
- package/mod/node_modules/function-bind/.github/FUNDING.yml +12 -0
- package/mod/node_modules/function-bind/.github/SECURITY.md +3 -0
- package/mod/node_modules/function-bind/.nycrc +13 -0
- package/mod/node_modules/function-bind/CHANGELOG.md +136 -0
- package/mod/node_modules/function-bind/LICENSE +20 -0
- package/mod/node_modules/function-bind/README.md +46 -0
- package/mod/node_modules/function-bind/implementation.js +84 -0
- package/mod/node_modules/function-bind/index.js +5 -0
- package/mod/node_modules/function-bind/package.json +87 -0
- package/mod/node_modules/function-bind/test/.eslintrc +9 -0
- package/mod/node_modules/function-bind/test/index.js +252 -0
- package/mod/node_modules/get-intrinsic/.eslintrc +42 -0
- package/mod/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- package/mod/node_modules/get-intrinsic/.nycrc +9 -0
- package/mod/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- package/mod/node_modules/get-intrinsic/LICENSE +21 -0
- package/mod/node_modules/get-intrinsic/README.md +71 -0
- package/mod/node_modules/get-intrinsic/index.js +378 -0
- package/mod/node_modules/get-intrinsic/package.json +97 -0
- package/mod/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- package/mod/node_modules/get-proto/.eslintrc +10 -0
- package/mod/node_modules/get-proto/.github/FUNDING.yml +12 -0
- package/mod/node_modules/get-proto/.nycrc +9 -0
- package/mod/node_modules/get-proto/CHANGELOG.md +21 -0
- package/mod/node_modules/get-proto/LICENSE +21 -0
- package/mod/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- package/mod/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- package/mod/node_modules/get-proto/README.md +50 -0
- package/mod/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- package/mod/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- package/mod/node_modules/get-proto/index.d.ts +5 -0
- package/mod/node_modules/get-proto/index.js +27 -0
- package/mod/node_modules/get-proto/package.json +81 -0
- package/mod/node_modules/get-proto/test/index.js +68 -0
- package/mod/node_modules/get-proto/tsconfig.json +9 -0
- package/mod/node_modules/gopd/.eslintrc +16 -0
- package/mod/node_modules/gopd/.github/FUNDING.yml +12 -0
- package/mod/node_modules/gopd/CHANGELOG.md +45 -0
- package/mod/node_modules/gopd/LICENSE +21 -0
- package/mod/node_modules/gopd/README.md +40 -0
- package/mod/node_modules/gopd/gOPD.d.ts +1 -0
- package/mod/node_modules/gopd/gOPD.js +4 -0
- package/mod/node_modules/gopd/index.d.ts +5 -0
- package/mod/node_modules/gopd/index.js +15 -0
- package/mod/node_modules/gopd/package.json +77 -0
- package/mod/node_modules/gopd/test/index.js +36 -0
- package/mod/node_modules/gopd/tsconfig.json +9 -0
- package/mod/node_modules/has-symbols/.eslintrc +11 -0
- package/mod/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- package/mod/node_modules/has-symbols/.nycrc +9 -0
- package/mod/node_modules/has-symbols/CHANGELOG.md +91 -0
- package/mod/node_modules/has-symbols/LICENSE +21 -0
- package/mod/node_modules/has-symbols/README.md +46 -0
- package/mod/node_modules/has-symbols/index.d.ts +3 -0
- package/mod/node_modules/has-symbols/index.js +14 -0
- package/mod/node_modules/has-symbols/package.json +111 -0
- package/mod/node_modules/has-symbols/shams.d.ts +3 -0
- package/mod/node_modules/has-symbols/shams.js +45 -0
- package/mod/node_modules/has-symbols/test/index.js +22 -0
- package/mod/node_modules/has-symbols/test/shams/core-js.js +29 -0
- package/mod/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- package/mod/node_modules/has-symbols/test/tests.js +58 -0
- package/mod/node_modules/has-symbols/tsconfig.json +10 -0
- package/mod/node_modules/hasown/.eslintrc +5 -0
- package/mod/node_modules/hasown/.github/FUNDING.yml +12 -0
- package/mod/node_modules/hasown/.nycrc +13 -0
- package/mod/node_modules/hasown/CHANGELOG.md +40 -0
- package/mod/node_modules/hasown/LICENSE +21 -0
- package/mod/node_modules/hasown/README.md +40 -0
- package/mod/node_modules/hasown/index.d.ts +3 -0
- package/mod/node_modules/hasown/index.js +8 -0
- package/mod/node_modules/hasown/package.json +92 -0
- package/mod/node_modules/hasown/tsconfig.json +6 -0
- package/mod/node_modules/http-errors/HISTORY.md +186 -0
- package/mod/node_modules/http-errors/LICENSE +23 -0
- package/mod/node_modules/http-errors/README.md +169 -0
- package/mod/node_modules/http-errors/index.js +290 -0
- package/mod/node_modules/http-errors/package.json +54 -0
- package/mod/node_modules/iconv-lite/LICENSE +21 -0
- package/mod/node_modules/iconv-lite/README.md +138 -0
- package/mod/node_modules/iconv-lite/encodings/dbcs-codec.js +532 -0
- package/mod/node_modules/iconv-lite/encodings/dbcs-data.js +185 -0
- package/mod/node_modules/iconv-lite/encodings/index.js +23 -0
- package/mod/node_modules/iconv-lite/encodings/internal.js +218 -0
- package/mod/node_modules/iconv-lite/encodings/sbcs-codec.js +75 -0
- package/mod/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/mod/node_modules/iconv-lite/encodings/sbcs-data.js +178 -0
- package/mod/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/mod/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/mod/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/mod/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/mod/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/mod/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/mod/node_modules/iconv-lite/encodings/tables/gbk-added.json +56 -0
- package/mod/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/mod/node_modules/iconv-lite/encodings/utf16.js +187 -0
- package/mod/node_modules/iconv-lite/encodings/utf32.js +307 -0
- package/mod/node_modules/iconv-lite/encodings/utf7.js +283 -0
- package/mod/node_modules/iconv-lite/lib/bom-handling.js +48 -0
- package/mod/node_modules/iconv-lite/lib/helpers/merge-exports.js +13 -0
- package/mod/node_modules/iconv-lite/lib/index.d.ts +129 -0
- package/mod/node_modules/iconv-lite/lib/index.js +182 -0
- package/mod/node_modules/iconv-lite/lib/streams.js +105 -0
- package/mod/node_modules/iconv-lite/package.json +70 -0
- package/mod/node_modules/iconv-lite/types/encodings.d.ts +423 -0
- package/mod/node_modules/inherits/LICENSE +16 -0
- package/mod/node_modules/inherits/README.md +42 -0
- package/mod/node_modules/inherits/inherits.js +9 -0
- package/mod/node_modules/inherits/inherits_browser.js +27 -0
- package/mod/node_modules/inherits/package.json +29 -0
- package/mod/node_modules/ipaddr.js/LICENSE +19 -0
- package/mod/node_modules/ipaddr.js/README.md +233 -0
- package/mod/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- package/mod/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- package/mod/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- package/mod/node_modules/ipaddr.js/package.json +35 -0
- package/mod/node_modules/is-promise/LICENSE +19 -0
- package/mod/node_modules/is-promise/index.d.ts +2 -0
- package/mod/node_modules/is-promise/index.js +6 -0
- package/mod/node_modules/is-promise/index.mjs +3 -0
- package/mod/node_modules/is-promise/package.json +30 -0
- package/mod/node_modules/is-promise/readme.md +33 -0
- package/mod/node_modules/math-intrinsics/.eslintrc +16 -0
- package/mod/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- package/mod/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- package/mod/node_modules/math-intrinsics/LICENSE +21 -0
- package/mod/node_modules/math-intrinsics/README.md +50 -0
- package/mod/node_modules/math-intrinsics/abs.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/abs.js +4 -0
- package/mod/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- package/mod/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- package/mod/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- package/mod/node_modules/math-intrinsics/floor.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/floor.js +4 -0
- package/mod/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/isFinite.js +12 -0
- package/mod/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/isInteger.js +16 -0
- package/mod/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/isNaN.js +6 -0
- package/mod/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- package/mod/node_modules/math-intrinsics/max.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/max.js +4 -0
- package/mod/node_modules/math-intrinsics/min.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/min.js +4 -0
- package/mod/node_modules/math-intrinsics/mod.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/mod.js +9 -0
- package/mod/node_modules/math-intrinsics/package.json +86 -0
- package/mod/node_modules/math-intrinsics/pow.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/pow.js +4 -0
- package/mod/node_modules/math-intrinsics/round.d.ts +1 -0
- package/mod/node_modules/math-intrinsics/round.js +4 -0
- package/mod/node_modules/math-intrinsics/sign.d.ts +3 -0
- package/mod/node_modules/math-intrinsics/sign.js +11 -0
- package/mod/node_modules/math-intrinsics/test/index.js +192 -0
- package/mod/node_modules/math-intrinsics/tsconfig.json +3 -0
- package/mod/node_modules/media-typer/HISTORY.md +50 -0
- package/mod/node_modules/media-typer/LICENSE +22 -0
- package/mod/node_modules/media-typer/README.md +93 -0
- package/mod/node_modules/media-typer/index.js +143 -0
- package/mod/node_modules/media-typer/package.json +33 -0
- package/mod/node_modules/merge-descriptors/index.d.ts +11 -0
- package/mod/node_modules/merge-descriptors/index.js +26 -0
- package/mod/node_modules/merge-descriptors/license +11 -0
- package/mod/node_modules/merge-descriptors/package.json +50 -0
- package/mod/node_modules/merge-descriptors/readme.md +55 -0
- package/mod/node_modules/mime-db/HISTORY.md +541 -0
- package/mod/node_modules/mime-db/LICENSE +23 -0
- package/mod/node_modules/mime-db/README.md +109 -0
- package/mod/node_modules/mime-db/db.json +9342 -0
- package/mod/node_modules/mime-db/index.js +12 -0
- package/mod/node_modules/mime-db/package.json +56 -0
- package/mod/node_modules/mime-types/HISTORY.md +428 -0
- package/mod/node_modules/mime-types/LICENSE +23 -0
- package/mod/node_modules/mime-types/README.md +126 -0
- package/mod/node_modules/mime-types/index.js +211 -0
- package/mod/node_modules/mime-types/mimeScore.js +57 -0
- package/mod/node_modules/mime-types/package.json +49 -0
- package/mod/node_modules/ms/index.js +162 -0
- package/mod/node_modules/ms/license.md +21 -0
- package/mod/node_modules/ms/package.json +38 -0
- package/mod/node_modules/ms/readme.md +59 -0
- package/mod/node_modules/negotiator/HISTORY.md +114 -0
- package/mod/node_modules/negotiator/LICENSE +24 -0
- package/mod/node_modules/negotiator/README.md +212 -0
- package/mod/node_modules/negotiator/index.js +83 -0
- package/mod/node_modules/negotiator/lib/charset.js +169 -0
- package/mod/node_modules/negotiator/lib/encoding.js +205 -0
- package/mod/node_modules/negotiator/lib/language.js +179 -0
- package/mod/node_modules/negotiator/lib/mediaType.js +294 -0
- package/mod/node_modules/negotiator/package.json +43 -0
- package/mod/node_modules/object-assign/index.js +90 -0
- package/mod/node_modules/object-assign/license +21 -0
- package/mod/node_modules/object-assign/package.json +42 -0
- package/mod/node_modules/object-assign/readme.md +61 -0
- package/mod/node_modules/object-inspect/.eslintrc +53 -0
- package/mod/node_modules/object-inspect/.github/FUNDING.yml +12 -0
- package/mod/node_modules/object-inspect/.nycrc +13 -0
- package/mod/node_modules/object-inspect/CHANGELOG.md +424 -0
- package/mod/node_modules/object-inspect/LICENSE +21 -0
- package/mod/node_modules/object-inspect/example/all.js +23 -0
- package/mod/node_modules/object-inspect/example/circular.js +6 -0
- package/mod/node_modules/object-inspect/example/fn.js +5 -0
- package/mod/node_modules/object-inspect/example/inspect.js +10 -0
- package/mod/node_modules/object-inspect/index.js +544 -0
- package/mod/node_modules/object-inspect/package-support.json +20 -0
- package/mod/node_modules/object-inspect/package.json +105 -0
- package/mod/node_modules/object-inspect/readme.markdown +84 -0
- package/mod/node_modules/object-inspect/test/bigint.js +58 -0
- package/mod/node_modules/object-inspect/test/browser/dom.js +15 -0
- package/mod/node_modules/object-inspect/test/circular.js +16 -0
- package/mod/node_modules/object-inspect/test/deep.js +12 -0
- package/mod/node_modules/object-inspect/test/element.js +53 -0
- package/mod/node_modules/object-inspect/test/err.js +48 -0
- package/mod/node_modules/object-inspect/test/fakes.js +29 -0
- package/mod/node_modules/object-inspect/test/fn.js +76 -0
- package/mod/node_modules/object-inspect/test/global.js +17 -0
- package/mod/node_modules/object-inspect/test/has.js +15 -0
- package/mod/node_modules/object-inspect/test/holes.js +15 -0
- package/mod/node_modules/object-inspect/test/indent-option.js +271 -0
- package/mod/node_modules/object-inspect/test/inspect.js +139 -0
- package/mod/node_modules/object-inspect/test/lowbyte.js +12 -0
- package/mod/node_modules/object-inspect/test/number.js +58 -0
- package/mod/node_modules/object-inspect/test/quoteStyle.js +26 -0
- package/mod/node_modules/object-inspect/test/toStringTag.js +40 -0
- package/mod/node_modules/object-inspect/test/undef.js +12 -0
- package/mod/node_modules/object-inspect/test/values.js +261 -0
- package/mod/node_modules/object-inspect/test-core-js.js +26 -0
- package/mod/node_modules/object-inspect/util.inspect.js +1 -0
- package/mod/node_modules/on-finished/HISTORY.md +98 -0
- package/mod/node_modules/on-finished/LICENSE +23 -0
- package/mod/node_modules/on-finished/README.md +162 -0
- package/mod/node_modules/on-finished/index.js +234 -0
- package/mod/node_modules/on-finished/package.json +39 -0
- package/mod/node_modules/once/LICENSE +15 -0
- package/mod/node_modules/once/README.md +79 -0
- package/mod/node_modules/once/once.js +42 -0
- package/mod/node_modules/once/package.json +33 -0
- package/mod/node_modules/parseurl/HISTORY.md +58 -0
- package/mod/node_modules/parseurl/LICENSE +24 -0
- package/mod/node_modules/parseurl/README.md +133 -0
- package/mod/node_modules/parseurl/index.js +158 -0
- package/mod/node_modules/parseurl/package.json +40 -0
- package/mod/node_modules/path-to-regexp/LICENSE +21 -0
- package/mod/node_modules/path-to-regexp/Readme.md +224 -0
- package/mod/node_modules/path-to-regexp/dist/index.d.ts +144 -0
- package/mod/node_modules/path-to-regexp/dist/index.js +409 -0
- package/mod/node_modules/path-to-regexp/dist/index.js.map +1 -0
- package/mod/node_modules/path-to-regexp/package.json +64 -0
- package/mod/node_modules/proxy-addr/HISTORY.md +161 -0
- package/mod/node_modules/proxy-addr/LICENSE +22 -0
- package/mod/node_modules/proxy-addr/README.md +139 -0
- package/mod/node_modules/proxy-addr/index.js +327 -0
- package/mod/node_modules/proxy-addr/package.json +47 -0
- package/mod/node_modules/qs/.editorconfig +46 -0
- package/mod/node_modules/qs/.github/FUNDING.yml +12 -0
- package/mod/node_modules/qs/.github/SECURITY.md +11 -0
- package/mod/node_modules/qs/.github/THREAT_MODEL.md +78 -0
- package/mod/node_modules/qs/.nycrc +13 -0
- package/mod/node_modules/qs/CHANGELOG.md +631 -0
- package/mod/node_modules/qs/LICENSE.md +29 -0
- package/mod/node_modules/qs/README.md +733 -0
- package/mod/node_modules/qs/dist/qs.js +141 -0
- package/mod/node_modules/qs/eslint.config.mjs +56 -0
- package/mod/node_modules/qs/lib/formats.js +23 -0
- package/mod/node_modules/qs/lib/index.js +11 -0
- package/mod/node_modules/qs/lib/parse.js +360 -0
- package/mod/node_modules/qs/lib/stringify.js +356 -0
- package/mod/node_modules/qs/lib/utils.js +320 -0
- package/mod/node_modules/qs/package.json +94 -0
- package/mod/node_modules/qs/test/empty-keys-cases.js +267 -0
- package/mod/node_modules/qs/test/parse.js +1396 -0
- package/mod/node_modules/qs/test/stringify.js +1310 -0
- package/mod/node_modules/qs/test/utils.js +381 -0
- package/mod/node_modules/range-parser/HISTORY.md +56 -0
- package/mod/node_modules/range-parser/LICENSE +23 -0
- package/mod/node_modules/range-parser/README.md +84 -0
- package/mod/node_modules/range-parser/index.js +162 -0
- package/mod/node_modules/range-parser/package.json +44 -0
- package/mod/node_modules/raw-body/LICENSE +22 -0
- package/mod/node_modules/raw-body/README.md +223 -0
- package/mod/node_modules/raw-body/index.d.ts +85 -0
- package/mod/node_modules/raw-body/index.js +336 -0
- package/mod/node_modules/raw-body/package.json +46 -0
- package/mod/node_modules/router/HISTORY.md +228 -0
- package/mod/node_modules/router/LICENSE +23 -0
- package/mod/node_modules/router/README.md +416 -0
- package/mod/node_modules/router/index.js +748 -0
- package/mod/node_modules/router/lib/layer.js +247 -0
- package/mod/node_modules/router/lib/route.js +242 -0
- package/mod/node_modules/router/package.json +44 -0
- package/mod/node_modules/safer-buffer/LICENSE +21 -0
- package/mod/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/mod/node_modules/safer-buffer/Readme.md +156 -0
- package/mod/node_modules/safer-buffer/dangerous.js +58 -0
- package/mod/node_modules/safer-buffer/package.json +34 -0
- package/mod/node_modules/safer-buffer/safer.js +77 -0
- package/mod/node_modules/safer-buffer/tests.js +406 -0
- package/mod/node_modules/send/LICENSE +23 -0
- package/mod/node_modules/send/README.md +317 -0
- package/mod/node_modules/send/index.js +997 -0
- package/mod/node_modules/send/package.json +63 -0
- package/mod/node_modules/serve-static/LICENSE +25 -0
- package/mod/node_modules/serve-static/README.md +253 -0
- package/mod/node_modules/serve-static/index.js +208 -0
- package/mod/node_modules/serve-static/package.json +44 -0
- package/mod/node_modules/setprototypeof/LICENSE +13 -0
- package/mod/node_modules/setprototypeof/README.md +31 -0
- package/mod/node_modules/setprototypeof/index.d.ts +2 -0
- package/mod/node_modules/setprototypeof/index.js +17 -0
- package/mod/node_modules/setprototypeof/package.json +38 -0
- package/mod/node_modules/setprototypeof/test/index.js +24 -0
- package/mod/node_modules/side-channel/.editorconfig +9 -0
- package/mod/node_modules/side-channel/.eslintrc +12 -0
- package/mod/node_modules/side-channel/.github/FUNDING.yml +12 -0
- package/mod/node_modules/side-channel/.nycrc +13 -0
- package/mod/node_modules/side-channel/CHANGELOG.md +110 -0
- package/mod/node_modules/side-channel/LICENSE +21 -0
- package/mod/node_modules/side-channel/README.md +61 -0
- package/mod/node_modules/side-channel/index.d.ts +14 -0
- package/mod/node_modules/side-channel/index.js +43 -0
- package/mod/node_modules/side-channel/package.json +85 -0
- package/mod/node_modules/side-channel/test/index.js +104 -0
- package/mod/node_modules/side-channel/tsconfig.json +9 -0
- package/mod/node_modules/side-channel-list/.editorconfig +9 -0
- package/mod/node_modules/side-channel-list/.eslintrc +11 -0
- package/mod/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
- package/mod/node_modules/side-channel-list/.nycrc +13 -0
- package/mod/node_modules/side-channel-list/CHANGELOG.md +15 -0
- package/mod/node_modules/side-channel-list/LICENSE +21 -0
- package/mod/node_modules/side-channel-list/README.md +62 -0
- package/mod/node_modules/side-channel-list/index.d.ts +13 -0
- package/mod/node_modules/side-channel-list/index.js +113 -0
- package/mod/node_modules/side-channel-list/list.d.ts +14 -0
- package/mod/node_modules/side-channel-list/package.json +77 -0
- package/mod/node_modules/side-channel-list/test/index.js +104 -0
- package/mod/node_modules/side-channel-list/tsconfig.json +9 -0
- package/mod/node_modules/side-channel-map/.editorconfig +9 -0
- package/mod/node_modules/side-channel-map/.eslintrc +11 -0
- package/mod/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
- package/mod/node_modules/side-channel-map/.nycrc +13 -0
- package/mod/node_modules/side-channel-map/CHANGELOG.md +22 -0
- package/mod/node_modules/side-channel-map/LICENSE +21 -0
- package/mod/node_modules/side-channel-map/README.md +62 -0
- package/mod/node_modules/side-channel-map/index.d.ts +15 -0
- package/mod/node_modules/side-channel-map/index.js +68 -0
- package/mod/node_modules/side-channel-map/package.json +80 -0
- package/mod/node_modules/side-channel-map/test/index.js +114 -0
- package/mod/node_modules/side-channel-map/tsconfig.json +9 -0
- package/mod/node_modules/side-channel-weakmap/.editorconfig +9 -0
- package/mod/node_modules/side-channel-weakmap/.eslintrc +12 -0
- package/mod/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- package/mod/node_modules/side-channel-weakmap/.nycrc +13 -0
- package/mod/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- package/mod/node_modules/side-channel-weakmap/LICENSE +21 -0
- package/mod/node_modules/side-channel-weakmap/README.md +62 -0
- package/mod/node_modules/side-channel-weakmap/index.d.ts +15 -0
- package/mod/node_modules/side-channel-weakmap/index.js +84 -0
- package/mod/node_modules/side-channel-weakmap/package.json +87 -0
- package/mod/node_modules/side-channel-weakmap/test/index.js +114 -0
- package/mod/node_modules/side-channel-weakmap/tsconfig.json +9 -0
- package/mod/node_modules/statuses/HISTORY.md +87 -0
- package/mod/node_modules/statuses/LICENSE +23 -0
- package/mod/node_modules/statuses/README.md +139 -0
- package/mod/node_modules/statuses/codes.json +65 -0
- package/mod/node_modules/statuses/index.js +146 -0
- package/mod/node_modules/statuses/package.json +49 -0
- package/mod/node_modules/toidentifier/HISTORY.md +9 -0
- package/mod/node_modules/toidentifier/LICENSE +21 -0
- package/mod/node_modules/toidentifier/README.md +61 -0
- package/mod/node_modules/toidentifier/index.js +32 -0
- package/mod/node_modules/toidentifier/package.json +38 -0
- package/mod/node_modules/type-is/HISTORY.md +292 -0
- package/mod/node_modules/type-is/LICENSE +23 -0
- package/mod/node_modules/type-is/README.md +198 -0
- package/mod/node_modules/type-is/index.js +250 -0
- package/mod/node_modules/type-is/package.json +47 -0
- package/mod/node_modules/unpipe/HISTORY.md +4 -0
- package/mod/node_modules/unpipe/LICENSE +22 -0
- package/mod/node_modules/unpipe/README.md +43 -0
- package/mod/node_modules/unpipe/index.js +69 -0
- package/mod/node_modules/unpipe/package.json +27 -0
- package/mod/node_modules/vary/HISTORY.md +39 -0
- package/mod/node_modules/vary/LICENSE +22 -0
- package/mod/node_modules/vary/README.md +101 -0
- package/mod/node_modules/vary/index.js +149 -0
- package/mod/node_modules/vary/package.json +43 -0
- package/mod/node_modules/wrappy/LICENSE +15 -0
- package/mod/node_modules/wrappy/README.md +36 -0
- package/mod/node_modules/wrappy/package.json +29 -0
- package/mod/node_modules/wrappy/wrappy.js +33 -0
- package/mod/package-lock.json +854 -0
- package/mod/package.json +16 -0
- package/package.json +19 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(The MIT License)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2012-2014 Federico Romero
|
|
4
|
+
Copyright (c) 2012-2014 Isaac Z. Schlueter
|
|
5
|
+
Copyright (c) 2014-2015 Douglas Christopher Wilson
|
|
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,212 @@
|
|
|
1
|
+
# negotiator
|
|
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][github-actions-ci-image]][github-actions-ci-url]
|
|
7
|
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
|
8
|
+
|
|
9
|
+
An HTTP content negotiator for Node.js
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
$ npm install negotiator
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## API
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
var Negotiator = require('negotiator')
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Accept Negotiation
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
availableMediaTypes = ['text/html', 'text/plain', 'application/json']
|
|
27
|
+
|
|
28
|
+
// The negotiator constructor receives a request object
|
|
29
|
+
negotiator = new Negotiator(request)
|
|
30
|
+
|
|
31
|
+
// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'
|
|
32
|
+
|
|
33
|
+
negotiator.mediaTypes()
|
|
34
|
+
// -> ['text/html', 'image/jpeg', 'application/*']
|
|
35
|
+
|
|
36
|
+
negotiator.mediaTypes(availableMediaTypes)
|
|
37
|
+
// -> ['text/html', 'application/json']
|
|
38
|
+
|
|
39
|
+
negotiator.mediaType(availableMediaTypes)
|
|
40
|
+
// -> 'text/html'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
You can check a working example at `examples/accept.js`.
|
|
44
|
+
|
|
45
|
+
#### Methods
|
|
46
|
+
|
|
47
|
+
##### mediaType()
|
|
48
|
+
|
|
49
|
+
Returns the most preferred media type from the client.
|
|
50
|
+
|
|
51
|
+
##### mediaType(availableMediaType)
|
|
52
|
+
|
|
53
|
+
Returns the most preferred media type from a list of available media types.
|
|
54
|
+
|
|
55
|
+
##### mediaTypes()
|
|
56
|
+
|
|
57
|
+
Returns an array of preferred media types ordered by the client preference.
|
|
58
|
+
|
|
59
|
+
##### mediaTypes(availableMediaTypes)
|
|
60
|
+
|
|
61
|
+
Returns an array of preferred media types ordered by priority from a list of
|
|
62
|
+
available media types.
|
|
63
|
+
|
|
64
|
+
### Accept-Language Negotiation
|
|
65
|
+
|
|
66
|
+
```js
|
|
67
|
+
negotiator = new Negotiator(request)
|
|
68
|
+
|
|
69
|
+
availableLanguages = ['en', 'es', 'fr']
|
|
70
|
+
|
|
71
|
+
// Let's say Accept-Language header is 'en;q=0.8, es, pt'
|
|
72
|
+
|
|
73
|
+
negotiator.languages()
|
|
74
|
+
// -> ['es', 'pt', 'en']
|
|
75
|
+
|
|
76
|
+
negotiator.languages(availableLanguages)
|
|
77
|
+
// -> ['es', 'en']
|
|
78
|
+
|
|
79
|
+
language = negotiator.language(availableLanguages)
|
|
80
|
+
// -> 'es'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
You can check a working example at `examples/language.js`.
|
|
84
|
+
|
|
85
|
+
#### Methods
|
|
86
|
+
|
|
87
|
+
##### language()
|
|
88
|
+
|
|
89
|
+
Returns the most preferred language from the client.
|
|
90
|
+
|
|
91
|
+
##### language(availableLanguages)
|
|
92
|
+
|
|
93
|
+
Returns the most preferred language from a list of available languages.
|
|
94
|
+
|
|
95
|
+
##### languages()
|
|
96
|
+
|
|
97
|
+
Returns an array of preferred languages ordered by the client preference.
|
|
98
|
+
|
|
99
|
+
##### languages(availableLanguages)
|
|
100
|
+
|
|
101
|
+
Returns an array of preferred languages ordered by priority from a list of
|
|
102
|
+
available languages.
|
|
103
|
+
|
|
104
|
+
### Accept-Charset Negotiation
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']
|
|
108
|
+
|
|
109
|
+
negotiator = new Negotiator(request)
|
|
110
|
+
|
|
111
|
+
// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'
|
|
112
|
+
|
|
113
|
+
negotiator.charsets()
|
|
114
|
+
// -> ['utf-8', 'iso-8859-1', 'utf-7']
|
|
115
|
+
|
|
116
|
+
negotiator.charsets(availableCharsets)
|
|
117
|
+
// -> ['utf-8', 'iso-8859-1']
|
|
118
|
+
|
|
119
|
+
negotiator.charset(availableCharsets)
|
|
120
|
+
// -> 'utf-8'
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
You can check a working example at `examples/charset.js`.
|
|
124
|
+
|
|
125
|
+
#### Methods
|
|
126
|
+
|
|
127
|
+
##### charset()
|
|
128
|
+
|
|
129
|
+
Returns the most preferred charset from the client.
|
|
130
|
+
|
|
131
|
+
##### charset(availableCharsets)
|
|
132
|
+
|
|
133
|
+
Returns the most preferred charset from a list of available charsets.
|
|
134
|
+
|
|
135
|
+
##### charsets()
|
|
136
|
+
|
|
137
|
+
Returns an array of preferred charsets ordered by the client preference.
|
|
138
|
+
|
|
139
|
+
##### charsets(availableCharsets)
|
|
140
|
+
|
|
141
|
+
Returns an array of preferred charsets ordered by priority from a list of
|
|
142
|
+
available charsets.
|
|
143
|
+
|
|
144
|
+
### Accept-Encoding Negotiation
|
|
145
|
+
|
|
146
|
+
```js
|
|
147
|
+
availableEncodings = ['identity', 'gzip']
|
|
148
|
+
|
|
149
|
+
negotiator = new Negotiator(request)
|
|
150
|
+
|
|
151
|
+
// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'
|
|
152
|
+
|
|
153
|
+
negotiator.encodings()
|
|
154
|
+
// -> ['gzip', 'identity', 'compress']
|
|
155
|
+
|
|
156
|
+
negotiator.encodings(availableEncodings)
|
|
157
|
+
// -> ['gzip', 'identity']
|
|
158
|
+
|
|
159
|
+
negotiator.encoding(availableEncodings)
|
|
160
|
+
// -> 'gzip'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
You can check a working example at `examples/encoding.js`.
|
|
164
|
+
|
|
165
|
+
#### Methods
|
|
166
|
+
|
|
167
|
+
##### encoding()
|
|
168
|
+
|
|
169
|
+
Returns the most preferred encoding from the client.
|
|
170
|
+
|
|
171
|
+
##### encoding(availableEncodings)
|
|
172
|
+
|
|
173
|
+
Returns the most preferred encoding from a list of available encodings.
|
|
174
|
+
|
|
175
|
+
##### encoding(availableEncodings, { preferred })
|
|
176
|
+
|
|
177
|
+
Returns the most preferred encoding from a list of available encodings, while prioritizing based on `preferred` array between same-quality encodings.
|
|
178
|
+
|
|
179
|
+
##### encodings()
|
|
180
|
+
|
|
181
|
+
Returns an array of preferred encodings ordered by the client preference.
|
|
182
|
+
|
|
183
|
+
##### encodings(availableEncodings)
|
|
184
|
+
|
|
185
|
+
Returns an array of preferred encodings ordered by priority from a list of
|
|
186
|
+
available encodings.
|
|
187
|
+
|
|
188
|
+
##### encodings(availableEncodings, { preferred })
|
|
189
|
+
|
|
190
|
+
Returns an array of preferred encodings ordered by priority from a list of
|
|
191
|
+
available encodings, while prioritizing based on `preferred` array between same-quality encodings.
|
|
192
|
+
|
|
193
|
+
## See Also
|
|
194
|
+
|
|
195
|
+
The [accepts](https://npmjs.org/package/accepts#readme) module builds on
|
|
196
|
+
this module and provides an alternative interface, mime type validation,
|
|
197
|
+
and more.
|
|
198
|
+
|
|
199
|
+
## License
|
|
200
|
+
|
|
201
|
+
[MIT](LICENSE)
|
|
202
|
+
|
|
203
|
+
[npm-image]: https://img.shields.io/npm/v/negotiator.svg
|
|
204
|
+
[npm-url]: https://npmjs.org/package/negotiator
|
|
205
|
+
[node-version-image]: https://img.shields.io/node/v/negotiator.svg
|
|
206
|
+
[node-version-url]: https://nodejs.org/en/download/
|
|
207
|
+
[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg
|
|
208
|
+
[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master
|
|
209
|
+
[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg
|
|
210
|
+
[downloads-url]: https://npmjs.org/package/negotiator
|
|
211
|
+
[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/negotiator/ci/master?label=ci
|
|
212
|
+
[github-actions-ci-url]: https://github.com/jshttp/negotiator/actions/workflows/ci.yml
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* negotiator
|
|
3
|
+
* Copyright(c) 2012 Federico Romero
|
|
4
|
+
* Copyright(c) 2012-2014 Isaac Z. Schlueter
|
|
5
|
+
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
6
|
+
* MIT Licensed
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
var preferredCharsets = require('./lib/charset')
|
|
12
|
+
var preferredEncodings = require('./lib/encoding')
|
|
13
|
+
var preferredLanguages = require('./lib/language')
|
|
14
|
+
var preferredMediaTypes = require('./lib/mediaType')
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Module exports.
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
module.exports = Negotiator;
|
|
22
|
+
module.exports.Negotiator = Negotiator;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Create a Negotiator instance from a request.
|
|
26
|
+
* @param {object} request
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
function Negotiator(request) {
|
|
31
|
+
if (!(this instanceof Negotiator)) {
|
|
32
|
+
return new Negotiator(request);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
this.request = request;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
Negotiator.prototype.charset = function charset(available) {
|
|
39
|
+
var set = this.charsets(available);
|
|
40
|
+
return set && set[0];
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
Negotiator.prototype.charsets = function charsets(available) {
|
|
44
|
+
return preferredCharsets(this.request.headers['accept-charset'], available);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
Negotiator.prototype.encoding = function encoding(available, opts) {
|
|
48
|
+
var set = this.encodings(available, opts);
|
|
49
|
+
return set && set[0];
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
Negotiator.prototype.encodings = function encodings(available, options) {
|
|
53
|
+
var opts = options || {};
|
|
54
|
+
return preferredEncodings(this.request.headers['accept-encoding'], available, opts.preferred);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
Negotiator.prototype.language = function language(available) {
|
|
58
|
+
var set = this.languages(available);
|
|
59
|
+
return set && set[0];
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
Negotiator.prototype.languages = function languages(available) {
|
|
63
|
+
return preferredLanguages(this.request.headers['accept-language'], available);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
Negotiator.prototype.mediaType = function mediaType(available) {
|
|
67
|
+
var set = this.mediaTypes(available);
|
|
68
|
+
return set && set[0];
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
Negotiator.prototype.mediaTypes = function mediaTypes(available) {
|
|
72
|
+
return preferredMediaTypes(this.request.headers.accept, available);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// Backwards compatibility
|
|
76
|
+
Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
|
|
77
|
+
Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
|
|
78
|
+
Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
|
|
79
|
+
Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
|
|
80
|
+
Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
|
|
81
|
+
Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
|
|
82
|
+
Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
|
|
83
|
+
Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* negotiator
|
|
3
|
+
* Copyright(c) 2012 Isaac Z. Schlueter
|
|
4
|
+
* Copyright(c) 2014 Federico Romero
|
|
5
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
|
6
|
+
* MIT Licensed
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Module exports.
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
module.exports = preferredCharsets;
|
|
17
|
+
module.exports.preferredCharsets = preferredCharsets;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Module variables.
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Parse the Accept-Charset header.
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
function parseAcceptCharset(accept) {
|
|
32
|
+
var accepts = accept.split(',');
|
|
33
|
+
|
|
34
|
+
for (var i = 0, j = 0; i < accepts.length; i++) {
|
|
35
|
+
var charset = parseCharset(accepts[i].trim(), i);
|
|
36
|
+
|
|
37
|
+
if (charset) {
|
|
38
|
+
accepts[j++] = charset;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// trim accepts
|
|
43
|
+
accepts.length = j;
|
|
44
|
+
|
|
45
|
+
return accepts;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Parse a charset from the Accept-Charset header.
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
function parseCharset(str, i) {
|
|
54
|
+
var match = simpleCharsetRegExp.exec(str);
|
|
55
|
+
if (!match) return null;
|
|
56
|
+
|
|
57
|
+
var charset = match[1];
|
|
58
|
+
var q = 1;
|
|
59
|
+
if (match[2]) {
|
|
60
|
+
var params = match[2].split(';')
|
|
61
|
+
for (var j = 0; j < params.length; j++) {
|
|
62
|
+
var p = params[j].trim().split('=');
|
|
63
|
+
if (p[0] === 'q') {
|
|
64
|
+
q = parseFloat(p[1]);
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
charset: charset,
|
|
72
|
+
q: q,
|
|
73
|
+
i: i
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get the priority of a charset.
|
|
79
|
+
* @private
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
function getCharsetPriority(charset, accepted, index) {
|
|
83
|
+
var priority = {o: -1, q: 0, s: 0};
|
|
84
|
+
|
|
85
|
+
for (var i = 0; i < accepted.length; i++) {
|
|
86
|
+
var spec = specify(charset, accepted[i], index);
|
|
87
|
+
|
|
88
|
+
if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
|
|
89
|
+
priority = spec;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return priority;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Get the specificity of the charset.
|
|
98
|
+
* @private
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
function specify(charset, spec, index) {
|
|
102
|
+
var s = 0;
|
|
103
|
+
if(spec.charset.toLowerCase() === charset.toLowerCase()){
|
|
104
|
+
s |= 1;
|
|
105
|
+
} else if (spec.charset !== '*' ) {
|
|
106
|
+
return null
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return {
|
|
110
|
+
i: index,
|
|
111
|
+
o: spec.i,
|
|
112
|
+
q: spec.q,
|
|
113
|
+
s: s
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Get the preferred charsets from an Accept-Charset header.
|
|
119
|
+
* @public
|
|
120
|
+
*/
|
|
121
|
+
|
|
122
|
+
function preferredCharsets(accept, provided) {
|
|
123
|
+
// RFC 2616 sec 14.2: no header = *
|
|
124
|
+
var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');
|
|
125
|
+
|
|
126
|
+
if (!provided) {
|
|
127
|
+
// sorted list of all charsets
|
|
128
|
+
return accepts
|
|
129
|
+
.filter(isQuality)
|
|
130
|
+
.sort(compareSpecs)
|
|
131
|
+
.map(getFullCharset);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
var priorities = provided.map(function getPriority(type, index) {
|
|
135
|
+
return getCharsetPriority(type, accepts, index);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// sorted list of accepted charsets
|
|
139
|
+
return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {
|
|
140
|
+
return provided[priorities.indexOf(priority)];
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Compare two specs.
|
|
146
|
+
* @private
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
function compareSpecs(a, b) {
|
|
150
|
+
return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Get full charset string.
|
|
155
|
+
* @private
|
|
156
|
+
*/
|
|
157
|
+
|
|
158
|
+
function getFullCharset(spec) {
|
|
159
|
+
return spec.charset;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Check if a spec has any quality.
|
|
164
|
+
* @private
|
|
165
|
+
*/
|
|
166
|
+
|
|
167
|
+
function isQuality(spec) {
|
|
168
|
+
return spec.q > 0;
|
|
169
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* negotiator
|
|
3
|
+
* Copyright(c) 2012 Isaac Z. Schlueter
|
|
4
|
+
* Copyright(c) 2014 Federico Romero
|
|
5
|
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
|
6
|
+
* MIT Licensed
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Module exports.
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
module.exports = preferredEncodings;
|
|
17
|
+
module.exports.preferredEncodings = preferredEncodings;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Module variables.
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Parse the Accept-Encoding header.
|
|
28
|
+
* @private
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
function parseAcceptEncoding(accept) {
|
|
32
|
+
var accepts = accept.split(',');
|
|
33
|
+
var hasIdentity = false;
|
|
34
|
+
var minQuality = 1;
|
|
35
|
+
|
|
36
|
+
for (var i = 0, j = 0; i < accepts.length; i++) {
|
|
37
|
+
var encoding = parseEncoding(accepts[i].trim(), i);
|
|
38
|
+
|
|
39
|
+
if (encoding) {
|
|
40
|
+
accepts[j++] = encoding;
|
|
41
|
+
hasIdentity = hasIdentity || specify('identity', encoding);
|
|
42
|
+
minQuality = Math.min(minQuality, encoding.q || 1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!hasIdentity) {
|
|
47
|
+
/*
|
|
48
|
+
* If identity doesn't explicitly appear in the accept-encoding header,
|
|
49
|
+
* it's added to the list of acceptable encoding with the lowest q
|
|
50
|
+
*/
|
|
51
|
+
accepts[j++] = {
|
|
52
|
+
encoding: 'identity',
|
|
53
|
+
q: minQuality,
|
|
54
|
+
i: i
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// trim accepts
|
|
59
|
+
accepts.length = j;
|
|
60
|
+
|
|
61
|
+
return accepts;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Parse an encoding from the Accept-Encoding header.
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
function parseEncoding(str, i) {
|
|
70
|
+
var match = simpleEncodingRegExp.exec(str);
|
|
71
|
+
if (!match) return null;
|
|
72
|
+
|
|
73
|
+
var encoding = match[1];
|
|
74
|
+
var q = 1;
|
|
75
|
+
if (match[2]) {
|
|
76
|
+
var params = match[2].split(';');
|
|
77
|
+
for (var j = 0; j < params.length; j++) {
|
|
78
|
+
var p = params[j].trim().split('=');
|
|
79
|
+
if (p[0] === 'q') {
|
|
80
|
+
q = parseFloat(p[1]);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
encoding: encoding,
|
|
88
|
+
q: q,
|
|
89
|
+
i: i
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Get the priority of an encoding.
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
function getEncodingPriority(encoding, accepted, index) {
|
|
99
|
+
var priority = {encoding: encoding, o: -1, q: 0, s: 0};
|
|
100
|
+
|
|
101
|
+
for (var i = 0; i < accepted.length; i++) {
|
|
102
|
+
var spec = specify(encoding, accepted[i], index);
|
|
103
|
+
|
|
104
|
+
if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
|
|
105
|
+
priority = spec;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return priority;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Get the specificity of the encoding.
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
function specify(encoding, spec, index) {
|
|
118
|
+
var s = 0;
|
|
119
|
+
if(spec.encoding.toLowerCase() === encoding.toLowerCase()){
|
|
120
|
+
s |= 1;
|
|
121
|
+
} else if (spec.encoding !== '*' ) {
|
|
122
|
+
return null
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
encoding: encoding,
|
|
127
|
+
i: index,
|
|
128
|
+
o: spec.i,
|
|
129
|
+
q: spec.q,
|
|
130
|
+
s: s
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get the preferred encodings from an Accept-Encoding header.
|
|
136
|
+
* @public
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
function preferredEncodings(accept, provided, preferred) {
|
|
140
|
+
var accepts = parseAcceptEncoding(accept || '');
|
|
141
|
+
|
|
142
|
+
var comparator = preferred ? function comparator (a, b) {
|
|
143
|
+
if (a.q !== b.q) {
|
|
144
|
+
return b.q - a.q // higher quality first
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
var aPreferred = preferred.indexOf(a.encoding)
|
|
148
|
+
var bPreferred = preferred.indexOf(b.encoding)
|
|
149
|
+
|
|
150
|
+
if (aPreferred === -1 && bPreferred === -1) {
|
|
151
|
+
// consider the original specifity/order
|
|
152
|
+
return (b.s - a.s) || (a.o - b.o) || (a.i - b.i)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (aPreferred !== -1 && bPreferred !== -1) {
|
|
156
|
+
return aPreferred - bPreferred // consider the preferred order
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return aPreferred === -1 ? 1 : -1 // preferred first
|
|
160
|
+
} : compareSpecs;
|
|
161
|
+
|
|
162
|
+
if (!provided) {
|
|
163
|
+
// sorted list of all encodings
|
|
164
|
+
return accepts
|
|
165
|
+
.filter(isQuality)
|
|
166
|
+
.sort(comparator)
|
|
167
|
+
.map(getFullEncoding);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
var priorities = provided.map(function getPriority(type, index) {
|
|
171
|
+
return getEncodingPriority(type, accepts, index);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// sorted list of accepted encodings
|
|
175
|
+
return priorities.filter(isQuality).sort(comparator).map(function getEncoding(priority) {
|
|
176
|
+
return provided[priorities.indexOf(priority)];
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Compare two specs.
|
|
182
|
+
* @private
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
function compareSpecs(a, b) {
|
|
186
|
+
return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Get full encoding string.
|
|
191
|
+
* @private
|
|
192
|
+
*/
|
|
193
|
+
|
|
194
|
+
function getFullEncoding(spec) {
|
|
195
|
+
return spec.encoding;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Check if a spec has any quality.
|
|
200
|
+
* @private
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
function isQuality(spec) {
|
|
204
|
+
return spec.q > 0;
|
|
205
|
+
}
|