From 6cf90a20d41a278dec102305a69b143fb09c4a3d Mon Sep 17 00:00:00 2001 From: Philipp Horstenkamp Date: Tue, 16 Dec 2025 01:08:09 +0100 Subject: [PATCH] `npm install` + git add -a --- node_modules/.bin/node-gyp-build | 12 + node_modules/.bin/node-gyp-build-optional | 12 + node_modules/.bin/node-gyp-build-optional.cmd | 17 + node_modules/.bin/node-gyp-build-optional.ps1 | 28 + node_modules/.bin/node-gyp-build-test | 12 + node_modules/.bin/node-gyp-build-test.cmd | 17 + node_modules/.bin/node-gyp-build-test.ps1 | 28 + node_modules/.bin/node-gyp-build.cmd | 17 + node_modules/.bin/node-gyp-build.ps1 | 28 + .../@isaacs/balanced-match/LICENSE.md | 23 + node_modules/@isaacs/balanced-match/README.md | 60 + .../balanced-match/dist/commonjs/index.d.ts | 9 + .../dist/commonjs/index.d.ts.map | 1 + .../balanced-match/dist/commonjs/index.js | 59 + .../balanced-match/dist/commonjs/index.js.map | 1 + .../balanced-match/dist/commonjs/package.json | 3 + .../balanced-match/dist/esm/index.d.ts | 9 + .../balanced-match/dist/esm/index.d.ts.map | 1 + .../@isaacs/balanced-match/dist/esm/index.js | 54 + .../balanced-match/dist/esm/index.js.map | 1 + .../balanced-match/dist/esm/package.json | 3 + .../@isaacs/balanced-match/package.json | 79 + node_modules/@isaacs/brace-expansion/LICENSE | 23 + .../@isaacs/brace-expansion/README.md | 86 + .../brace-expansion/dist/commonjs/index.d.ts | 2 + .../dist/commonjs/index.d.ts.map | 1 + .../brace-expansion/dist/commonjs/index.js | 196 + .../dist/commonjs/index.js.map | 1 + .../dist/commonjs/package.json | 3 + .../brace-expansion/dist/esm/index.d.ts | 2 + .../brace-expansion/dist/esm/index.d.ts.map | 1 + .../@isaacs/brace-expansion/dist/esm/index.js | 193 + .../brace-expansion/dist/esm/index.js.map | 1 + .../brace-expansion/dist/esm/package.json | 3 + .../@isaacs/brace-expansion/package.json | 71 + node_modules/asynckit/LICENSE | 21 + node_modules/asynckit/README.md | 233 + node_modules/asynckit/bench.js | 76 + node_modules/asynckit/index.js | 6 + node_modules/asynckit/lib/abort.js | 29 + node_modules/asynckit/lib/async.js | 34 + node_modules/asynckit/lib/defer.js | 26 + node_modules/asynckit/lib/iterate.js | 75 + .../asynckit/lib/readable_asynckit.js | 91 + .../asynckit/lib/readable_parallel.js | 25 + node_modules/asynckit/lib/readable_serial.js | 25 + .../asynckit/lib/readable_serial_ordered.js | 29 + node_modules/asynckit/lib/state.js | 37 + node_modules/asynckit/lib/streamify.js | 141 + node_modules/asynckit/lib/terminator.js | 29 + node_modules/asynckit/package.json | 63 + node_modules/asynckit/parallel.js | 43 + node_modules/asynckit/serial.js | 17 + node_modules/asynckit/serialOrdered.js | 75 + node_modules/asynckit/stream.js | 21 + node_modules/axios/CHANGELOG.md | 1014 ++ node_modules/axios/LICENSE | 19 + node_modules/axios/README.md | 1182 +++ node_modules/axios/SECURITY.md | 5 + node_modules/axios/UPGRADE_GUIDE.md | 169 + node_modules/axios/bin/check-build-version.js | 19 + node_modules/axios/bin/ssl_hotfix.js | 22 + node_modules/axios/dist/axios.js | 2377 +++++ node_modules/axios/dist/axios.js.map | 1 + node_modules/axios/dist/axios.min.js | 2 + node_modules/axios/dist/axios.min.js.map | 1 + node_modules/axios/dist/esm/axios.js | 2369 +++++ node_modules/axios/dist/esm/axios.js.map | 1 + node_modules/axios/dist/esm/axios.min.js | 2 + node_modules/axios/dist/esm/axios.min.js.map | 1 + node_modules/axios/index.d.ts | 340 + node_modules/axios/index.js | 1 + node_modules/axios/lib/adapters/README.md | 37 + node_modules/axios/lib/adapters/http.js | 463 + node_modules/axios/lib/adapters/xhr.js | 226 + node_modules/axios/lib/axios.js | 68 + node_modules/axios/lib/cancel/CancelToken.js | 118 + .../axios/lib/cancel/CanceledError.js | 24 + node_modules/axios/lib/cancel/isCancel.js | 5 + node_modules/axios/lib/core/Axios.js | 172 + node_modules/axios/lib/core/AxiosError.js | 97 + .../axios/lib/core/InterceptorManager.js | 63 + node_modules/axios/lib/core/README.md | 8 + node_modules/axios/lib/core/buildFullPath.js | 20 + .../axios/lib/core/dispatchRequest.js | 94 + node_modules/axios/lib/core/mergeConfig.js | 103 + node_modules/axios/lib/core/settle.js | 25 + node_modules/axios/lib/core/transformData.js | 23 + node_modules/axios/lib/defaults/index.js | 175 + .../axios/lib/defaults/transitional.js | 7 + node_modules/axios/lib/env/README.md | 3 + .../axios/lib/env/classes/FormData.js | 2 + node_modules/axios/lib/env/data.js | 3 + .../axios/lib/helpers/AxiosURLSearchParams.js | 42 + node_modules/axios/lib/helpers/README.md | 7 + node_modules/axios/lib/helpers/bind.js | 7 + node_modules/axios/lib/helpers/buildURL.js | 55 + node_modules/axios/lib/helpers/combineURLs.js | 14 + node_modules/axios/lib/helpers/cookies.js | 53 + .../axios/lib/helpers/deprecatedMethod.js | 24 + .../axios/lib/helpers/formDataToJSON.js | 71 + node_modules/axios/lib/helpers/fromDataURI.js | 51 + .../axios/lib/helpers/isAbsoluteURL.js | 14 + .../axios/lib/helpers/isAxiosError.js | 13 + .../axios/lib/helpers/isURLSameOrigin.js | 68 + .../axios/lib/helpers/normalizeHeaderName.js | 12 + node_modules/axios/lib/helpers/null.js | 2 + .../axios/lib/helpers/parseHeaders.js | 53 + .../axios/lib/helpers/parseProtocol.js | 6 + node_modules/axios/lib/helpers/spread.js | 27 + node_modules/axios/lib/helpers/toFormData.js | 179 + .../axios/lib/helpers/toURLEncodedForm.js | 18 + node_modules/axios/lib/helpers/validator.js | 86 + .../lib/platform/browser/classes/FormData.js | 3 + .../browser/classes/URLSearchParams.js | 5 + .../axios/lib/platform/browser/index.js | 11 + node_modules/axios/lib/platform/index.js | 3 + .../lib/platform/node/classes/FormData.js | 3 + .../platform/node/classes/URLSearchParams.js | 5 + node_modules/axios/lib/platform/node/index.js | 11 + node_modules/axios/lib/utils.js | 522 + node_modules/axios/package.json | 100 + node_modules/axios/rollup.config.js | 60 + node_modules/axios/tsconfig.json | 14 + node_modules/axios/tslint.json | 6 + node_modules/bufferutil/LICENSE | 20 + node_modules/bufferutil/README.md | 79 + node_modules/bufferutil/binding.gyp | 32 + node_modules/bufferutil/fallback.js | 34 + node_modules/bufferutil/index.js | 7 + node_modules/bufferutil/package.json | 36 + .../darwin-x64+arm64/bufferutil.node | Bin 0 -> 66976 bytes .../prebuilds/linux-x64/bufferutil.node | Bin 0 -> 14576 bytes .../prebuilds/win32-ia32/bufferutil.node | Bin 0 -> 126976 bytes .../prebuilds/win32-x64/bufferutil.node | Bin 0 -> 153600 bytes node_modules/bufferutil/src/bufferutil.c | 171 + .../call-bind-apply-helpers/.eslintrc | 17 + .../.github/FUNDING.yml | 12 + node_modules/call-bind-apply-helpers/.nycrc | 9 + .../call-bind-apply-helpers/CHANGELOG.md | 30 + node_modules/call-bind-apply-helpers/LICENSE | 21 + .../call-bind-apply-helpers/README.md | 62 + .../call-bind-apply-helpers/actualApply.d.ts | 1 + .../call-bind-apply-helpers/actualApply.js | 10 + .../call-bind-apply-helpers/applyBind.d.ts | 19 + .../call-bind-apply-helpers/applyBind.js | 10 + .../functionApply.d.ts | 1 + .../call-bind-apply-helpers/functionApply.js | 4 + .../call-bind-apply-helpers/functionCall.d.ts | 1 + .../call-bind-apply-helpers/functionCall.js | 4 + .../call-bind-apply-helpers/index.d.ts | 64 + node_modules/call-bind-apply-helpers/index.js | 15 + .../call-bind-apply-helpers/package.json | 85 + .../call-bind-apply-helpers/reflectApply.d.ts | 3 + .../call-bind-apply-helpers/reflectApply.js | 4 + .../call-bind-apply-helpers/test/index.js | 63 + .../call-bind-apply-helpers/tsconfig.json | 9 + node_modules/combined-stream/License | 19 + node_modules/combined-stream/Readme.md | 138 + .../combined-stream/lib/combined_stream.js | 208 + node_modules/combined-stream/package.json | 25 + node_modules/combined-stream/yarn.lock | 17 + node_modules/commander/esm.mjs | 4 + node_modules/commander/package-support.json | 16 + node_modules/debug/LICENSE | 20 + node_modules/debug/README.md | 481 + node_modules/debug/package.json | 64 + node_modules/debug/src/browser.js | 272 + node_modules/debug/src/common.js | 292 + node_modules/debug/src/index.js | 10 + node_modules/debug/src/node.js | 263 + node_modules/delayed-stream/.npmignore | 1 + node_modules/delayed-stream/License | 19 + node_modules/delayed-stream/Makefile | 7 + node_modules/delayed-stream/Readme.md | 141 + .../delayed-stream/lib/delayed_stream.js | 107 + node_modules/delayed-stream/package.json | 27 + node_modules/dunder-proto/.eslintrc | 5 + node_modules/dunder-proto/.github/FUNDING.yml | 12 + node_modules/dunder-proto/.nycrc | 13 + node_modules/dunder-proto/CHANGELOG.md | 24 + node_modules/dunder-proto/LICENSE | 21 + node_modules/dunder-proto/README.md | 54 + node_modules/dunder-proto/get.d.ts | 5 + node_modules/dunder-proto/get.js | 30 + node_modules/dunder-proto/package.json | 76 + node_modules/dunder-proto/set.d.ts | 5 + node_modules/dunder-proto/set.js | 35 + node_modules/dunder-proto/test/get.js | 34 + node_modules/dunder-proto/test/index.js | 4 + node_modules/dunder-proto/test/set.js | 50 + node_modules/dunder-proto/tsconfig.json | 9 + node_modules/es-define-property/.eslintrc | 13 + .../es-define-property/.github/FUNDING.yml | 12 + node_modules/es-define-property/.nycrc | 9 + node_modules/es-define-property/CHANGELOG.md | 29 + node_modules/es-define-property/LICENSE | 21 + node_modules/es-define-property/README.md | 49 + node_modules/es-define-property/index.d.ts | 3 + node_modules/es-define-property/index.js | 14 + node_modules/es-define-property/package.json | 81 + node_modules/es-define-property/test/index.js | 56 + node_modules/es-define-property/tsconfig.json | 10 + node_modules/es-errors/.eslintrc | 5 + node_modules/es-errors/.github/FUNDING.yml | 12 + node_modules/es-errors/CHANGELOG.md | 40 + node_modules/es-errors/LICENSE | 21 + node_modules/es-errors/README.md | 55 + node_modules/es-errors/eval.d.ts | 3 + node_modules/es-errors/eval.js | 4 + node_modules/es-errors/index.d.ts | 3 + node_modules/es-errors/index.js | 4 + node_modules/es-errors/package.json | 80 + node_modules/es-errors/range.d.ts | 3 + node_modules/es-errors/range.js | 4 + node_modules/es-errors/ref.d.ts | 3 + node_modules/es-errors/ref.js | 4 + node_modules/es-errors/syntax.d.ts | 3 + node_modules/es-errors/syntax.js | 4 + node_modules/es-errors/test/index.js | 19 + node_modules/es-errors/tsconfig.json | 49 + node_modules/es-errors/type.d.ts | 3 + node_modules/es-errors/type.js | 4 + node_modules/es-errors/uri.d.ts | 3 + node_modules/es-errors/uri.js | 4 + node_modules/es-object-atoms/.eslintrc | 16 + .../es-object-atoms/.github/FUNDING.yml | 12 + node_modules/es-object-atoms/CHANGELOG.md | 37 + node_modules/es-object-atoms/LICENSE | 21 + node_modules/es-object-atoms/README.md | 63 + .../RequireObjectCoercible.d.ts | 3 + .../es-object-atoms/RequireObjectCoercible.js | 11 + node_modules/es-object-atoms/ToObject.d.ts | 7 + node_modules/es-object-atoms/ToObject.js | 10 + node_modules/es-object-atoms/index.d.ts | 3 + node_modules/es-object-atoms/index.js | 4 + node_modules/es-object-atoms/isObject.d.ts | 3 + node_modules/es-object-atoms/isObject.js | 6 + node_modules/es-object-atoms/package.json | 80 + node_modules/es-object-atoms/test/index.js | 38 + node_modules/es-object-atoms/tsconfig.json | 6 + node_modules/es-set-tostringtag/.eslintrc | 13 + node_modules/es-set-tostringtag/.nycrc | 9 + node_modules/es-set-tostringtag/CHANGELOG.md | 67 + node_modules/es-set-tostringtag/LICENSE | 21 + node_modules/es-set-tostringtag/README.md | 53 + node_modules/es-set-tostringtag/index.d.ts | 10 + node_modules/es-set-tostringtag/index.js | 35 + node_modules/es-set-tostringtag/package.json | 78 + node_modules/es-set-tostringtag/test/index.js | 85 + node_modules/es-set-tostringtag/tsconfig.json | 9 + node_modules/follow-redirects/LICENSE | 18 + node_modules/follow-redirects/README.md | 155 + node_modules/follow-redirects/debug.js | 15 + node_modules/follow-redirects/http.js | 1 + node_modules/follow-redirects/https.js | 1 + node_modules/follow-redirects/index.js | 686 ++ node_modules/follow-redirects/package.json | 58 + node_modules/form-data/CHANGELOG.md | 601 ++ node_modules/form-data/License | 19 + node_modules/form-data/README.md | 355 + node_modules/form-data/index.d.ts | 62 + node_modules/form-data/lib/browser.js | 4 + node_modules/form-data/lib/form_data.js | 494 + node_modules/form-data/lib/populate.js | 10 + node_modules/form-data/package.json | 82 + node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + node_modules/function-bind/.nycrc | 13 + node_modules/function-bind/CHANGELOG.md | 136 + node_modules/function-bind/LICENSE | 20 + node_modules/function-bind/README.md | 46 + node_modules/function-bind/implementation.js | 84 + node_modules/function-bind/index.js | 5 + node_modules/function-bind/package.json | 87 + node_modules/function-bind/test/.eslintrc | 9 + node_modules/function-bind/test/index.js | 252 + node_modules/get-intrinsic/.eslintrc | 42 + .../get-intrinsic/.github/FUNDING.yml | 12 + node_modules/get-intrinsic/.nycrc | 9 + node_modules/get-intrinsic/CHANGELOG.md | 186 + node_modules/get-intrinsic/LICENSE | 21 + node_modules/get-intrinsic/README.md | 71 + node_modules/get-intrinsic/index.js | 378 + node_modules/get-intrinsic/package.json | 97 + .../get-intrinsic/test/GetIntrinsic.js | 274 + node_modules/get-proto/.eslintrc | 10 + node_modules/get-proto/.github/FUNDING.yml | 12 + node_modules/get-proto/.nycrc | 9 + node_modules/get-proto/CHANGELOG.md | 21 + node_modules/get-proto/LICENSE | 21 + .../get-proto/Object.getPrototypeOf.d.ts | 5 + .../get-proto/Object.getPrototypeOf.js | 6 + node_modules/get-proto/README.md | 50 + .../get-proto/Reflect.getPrototypeOf.d.ts | 3 + .../get-proto/Reflect.getPrototypeOf.js | 4 + node_modules/get-proto/index.d.ts | 5 + node_modules/get-proto/index.js | 27 + node_modules/get-proto/package.json | 81 + node_modules/get-proto/test/index.js | 68 + node_modules/get-proto/tsconfig.json | 9 + node_modules/gopd/.eslintrc | 16 + node_modules/gopd/.github/FUNDING.yml | 12 + node_modules/gopd/CHANGELOG.md | 45 + node_modules/gopd/LICENSE | 21 + node_modules/gopd/README.md | 40 + node_modules/gopd/gOPD.d.ts | 1 + node_modules/gopd/gOPD.js | 4 + node_modules/gopd/index.d.ts | 5 + node_modules/gopd/index.js | 15 + node_modules/gopd/package.json | 77 + node_modules/gopd/test/index.js | 36 + node_modules/gopd/tsconfig.json | 9 + node_modules/has-symbols/.eslintrc | 11 + node_modules/has-symbols/.github/FUNDING.yml | 12 + node_modules/has-symbols/.nycrc | 9 + node_modules/has-symbols/CHANGELOG.md | 91 + node_modules/has-symbols/LICENSE | 21 + node_modules/has-symbols/README.md | 46 + node_modules/has-symbols/index.d.ts | 3 + node_modules/has-symbols/index.js | 14 + node_modules/has-symbols/package.json | 111 + node_modules/has-symbols/shams.d.ts | 3 + node_modules/has-symbols/shams.js | 45 + node_modules/has-symbols/test/index.js | 22 + .../has-symbols/test/shams/core-js.js | 29 + .../test/shams/get-own-property-symbols.js | 29 + node_modules/has-symbols/test/tests.js | 58 + node_modules/has-symbols/tsconfig.json | 10 + node_modules/has-tostringtag/.eslintrc | 5 + .../has-tostringtag/.github/FUNDING.yml | 12 + node_modules/has-tostringtag/.nycrc | 13 + node_modules/has-tostringtag/CHANGELOG.md | 42 + node_modules/has-tostringtag/LICENSE | 21 + node_modules/has-tostringtag/README.md | 46 + node_modules/has-tostringtag/index.d.ts | 3 + node_modules/has-tostringtag/index.js | 8 + node_modules/has-tostringtag/package.json | 108 + node_modules/has-tostringtag/shams.d.ts | 3 + node_modules/has-tostringtag/shams.js | 8 + node_modules/has-tostringtag/test/index.js | 21 + .../has-tostringtag/test/shams/core-js.js | 31 + .../test/shams/get-own-property-symbols.js | 30 + node_modules/has-tostringtag/test/tests.js | 15 + node_modules/has-tostringtag/tsconfig.json | 49 + node_modules/hasown/.eslintrc | 5 + node_modules/hasown/.github/FUNDING.yml | 12 + node_modules/hasown/.nycrc | 13 + node_modules/hasown/CHANGELOG.md | 40 + node_modules/hasown/LICENSE | 21 + node_modules/hasown/README.md | 40 + node_modules/hasown/index.d.ts | 3 + node_modules/hasown/index.js | 8 + node_modules/hasown/package.json | 92 + node_modules/hasown/tsconfig.json | 6 + node_modules/math-intrinsics/.eslintrc | 16 + .../math-intrinsics/.github/FUNDING.yml | 12 + node_modules/math-intrinsics/CHANGELOG.md | 24 + node_modules/math-intrinsics/LICENSE | 21 + node_modules/math-intrinsics/README.md | 50 + node_modules/math-intrinsics/abs.d.ts | 1 + node_modules/math-intrinsics/abs.js | 4 + .../constants/maxArrayLength.d.ts | 3 + .../constants/maxArrayLength.js | 4 + .../constants/maxSafeInteger.d.ts | 3 + .../constants/maxSafeInteger.js | 5 + .../math-intrinsics/constants/maxValue.d.ts | 3 + .../math-intrinsics/constants/maxValue.js | 5 + node_modules/math-intrinsics/floor.d.ts | 1 + node_modules/math-intrinsics/floor.js | 4 + node_modules/math-intrinsics/isFinite.d.ts | 3 + node_modules/math-intrinsics/isFinite.js | 12 + node_modules/math-intrinsics/isInteger.d.ts | 3 + node_modules/math-intrinsics/isInteger.js | 16 + node_modules/math-intrinsics/isNaN.d.ts | 1 + node_modules/math-intrinsics/isNaN.js | 6 + .../math-intrinsics/isNegativeZero.d.ts | 3 + .../math-intrinsics/isNegativeZero.js | 6 + node_modules/math-intrinsics/max.d.ts | 1 + node_modules/math-intrinsics/max.js | 4 + node_modules/math-intrinsics/min.d.ts | 1 + node_modules/math-intrinsics/min.js | 4 + node_modules/math-intrinsics/mod.d.ts | 3 + node_modules/math-intrinsics/mod.js | 9 + node_modules/math-intrinsics/package.json | 86 + node_modules/math-intrinsics/pow.d.ts | 1 + node_modules/math-intrinsics/pow.js | 4 + node_modules/math-intrinsics/round.d.ts | 1 + node_modules/math-intrinsics/round.js | 4 + node_modules/math-intrinsics/sign.d.ts | 3 + node_modules/math-intrinsics/sign.js | 11 + node_modules/math-intrinsics/test/index.js | 192 + node_modules/math-intrinsics/tsconfig.json | 3 + node_modules/mime-db/HISTORY.md | 507 + node_modules/mime-db/LICENSE | 23 + node_modules/mime-db/README.md | 100 + node_modules/mime-db/db.json | 8519 +++++++++++++++++ node_modules/mime-db/index.js | 12 + node_modules/mime-db/package.json | 60 + node_modules/mime-types/HISTORY.md | 397 + node_modules/mime-types/LICENSE | 23 + node_modules/mime-types/README.md | 113 + node_modules/mime-types/index.js | 188 + node_modules/mime-types/package.json | 44 + node_modules/ms/index.js | 162 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 38 + node_modules/ms/readme.md | 59 + node_modules/node-gyp-build/LICENSE | 21 + node_modules/node-gyp-build/README.md | 58 + node_modules/node-gyp-build/SECURITY.md | 5 + node_modules/node-gyp-build/bin.js | 84 + node_modules/node-gyp-build/build-test.js | 19 + node_modules/node-gyp-build/index.js | 6 + node_modules/node-gyp-build/node-gyp-build.js | 207 + node_modules/node-gyp-build/optional.js | 7 + node_modules/node-gyp-build/package.json | 43 + node_modules/proxy-from-env/.eslintrc | 29 + node_modules/proxy-from-env/.travis.yml | 10 + node_modules/proxy-from-env/LICENSE | 20 + node_modules/proxy-from-env/README.md | 131 + node_modules/proxy-from-env/index.js | 108 + node_modules/proxy-from-env/package.json | 34 + node_modules/proxy-from-env/test.js | 483 + node_modules/screeps-api/FUNDING.yml | 2 + node_modules/screeps-api/dist/ScreepsAPI.js | 1537 +++ .../screeps-api/dist/types/ConfigManager.d.ts | 8 + .../screeps-api/dist/types/RawAPI.d.ts | 1091 +++ .../screeps-api/dist/types/ScreepsAPI.d.ts | 286 + .../screeps-api/dist/types/Socket.d.ts | 31 + .../screeps-api/dist/types/index.d.ts | 1 + .../screeps-api/dist/types/ws-browser.d.ts | 2 + node_modules/screeps-api/tsconfig.json | 10 + node_modules/utf-8-validate/LICENSE | 30 + node_modules/utf-8-validate/README.md | 50 + node_modules/utf-8-validate/binding.gyp | 18 + node_modules/utf-8-validate/fallback.js | 62 + node_modules/utf-8-validate/index.js | 7 + node_modules/utf-8-validate/package.json | 36 + .../prebuilds/darwin-x64+arm64/node.napi.node | Bin 0 -> 116000 bytes .../prebuilds/linux-x64/node.napi.node | Bin 0 -> 6232 bytes .../prebuilds/win32-ia32/node.napi.node | Bin 0 -> 121856 bytes .../prebuilds/win32-x64/node.napi.node | Bin 0 -> 150528 bytes node_modules/utf-8-validate/src/validation.c | 109 + node_modules/ws/browser.js | 8 + node_modules/ws/lib/limiter.js | 55 + node_modules/ws/lib/stream.js | 180 + 448 files changed, 39324 insertions(+) create mode 100644 node_modules/.bin/node-gyp-build create mode 100644 node_modules/.bin/node-gyp-build-optional create mode 100644 node_modules/.bin/node-gyp-build-optional.cmd create mode 100644 node_modules/.bin/node-gyp-build-optional.ps1 create mode 100644 node_modules/.bin/node-gyp-build-test create mode 100644 node_modules/.bin/node-gyp-build-test.cmd create mode 100644 node_modules/.bin/node-gyp-build-test.ps1 create mode 100644 node_modules/.bin/node-gyp-build.cmd create mode 100644 node_modules/.bin/node-gyp-build.ps1 create mode 100644 node_modules/@isaacs/balanced-match/LICENSE.md create mode 100644 node_modules/@isaacs/balanced-match/README.md create mode 100644 node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts create mode 100644 node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map create mode 100644 node_modules/@isaacs/balanced-match/dist/commonjs/index.js create mode 100644 node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map create mode 100644 node_modules/@isaacs/balanced-match/dist/commonjs/package.json create mode 100644 node_modules/@isaacs/balanced-match/dist/esm/index.d.ts create mode 100644 node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map create mode 100644 node_modules/@isaacs/balanced-match/dist/esm/index.js create mode 100644 node_modules/@isaacs/balanced-match/dist/esm/index.js.map create mode 100644 node_modules/@isaacs/balanced-match/dist/esm/package.json create mode 100644 node_modules/@isaacs/balanced-match/package.json create mode 100644 node_modules/@isaacs/brace-expansion/LICENSE create mode 100644 node_modules/@isaacs/brace-expansion/README.md create mode 100644 node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts create mode 100644 node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map create mode 100644 node_modules/@isaacs/brace-expansion/dist/commonjs/index.js create mode 100644 node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map create mode 100644 node_modules/@isaacs/brace-expansion/dist/commonjs/package.json create mode 100644 node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts create mode 100644 node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map create mode 100644 node_modules/@isaacs/brace-expansion/dist/esm/index.js create mode 100644 node_modules/@isaacs/brace-expansion/dist/esm/index.js.map create mode 100644 node_modules/@isaacs/brace-expansion/dist/esm/package.json create mode 100644 node_modules/@isaacs/brace-expansion/package.json create mode 100644 node_modules/asynckit/LICENSE create mode 100644 node_modules/asynckit/README.md create mode 100644 node_modules/asynckit/bench.js create mode 100644 node_modules/asynckit/index.js create mode 100644 node_modules/asynckit/lib/abort.js create mode 100644 node_modules/asynckit/lib/async.js create mode 100644 node_modules/asynckit/lib/defer.js create mode 100644 node_modules/asynckit/lib/iterate.js create mode 100644 node_modules/asynckit/lib/readable_asynckit.js create mode 100644 node_modules/asynckit/lib/readable_parallel.js create mode 100644 node_modules/asynckit/lib/readable_serial.js create mode 100644 node_modules/asynckit/lib/readable_serial_ordered.js create mode 100644 node_modules/asynckit/lib/state.js create mode 100644 node_modules/asynckit/lib/streamify.js create mode 100644 node_modules/asynckit/lib/terminator.js create mode 100644 node_modules/asynckit/package.json create mode 100644 node_modules/asynckit/parallel.js create mode 100644 node_modules/asynckit/serial.js create mode 100644 node_modules/asynckit/serialOrdered.js create mode 100644 node_modules/asynckit/stream.js create mode 100644 node_modules/axios/CHANGELOG.md create mode 100644 node_modules/axios/LICENSE create mode 100644 node_modules/axios/README.md create mode 100644 node_modules/axios/SECURITY.md create mode 100644 node_modules/axios/UPGRADE_GUIDE.md create mode 100644 node_modules/axios/bin/check-build-version.js create mode 100644 node_modules/axios/bin/ssl_hotfix.js create mode 100644 node_modules/axios/dist/axios.js create mode 100644 node_modules/axios/dist/axios.js.map create mode 100644 node_modules/axios/dist/axios.min.js create mode 100644 node_modules/axios/dist/axios.min.js.map create mode 100644 node_modules/axios/dist/esm/axios.js create mode 100644 node_modules/axios/dist/esm/axios.js.map create mode 100644 node_modules/axios/dist/esm/axios.min.js create mode 100644 node_modules/axios/dist/esm/axios.min.js.map create mode 100644 node_modules/axios/index.d.ts create mode 100644 node_modules/axios/index.js create mode 100644 node_modules/axios/lib/adapters/README.md create mode 100644 node_modules/axios/lib/adapters/http.js create mode 100644 node_modules/axios/lib/adapters/xhr.js create mode 100644 node_modules/axios/lib/axios.js create mode 100644 node_modules/axios/lib/cancel/CancelToken.js create mode 100644 node_modules/axios/lib/cancel/CanceledError.js create mode 100644 node_modules/axios/lib/cancel/isCancel.js create mode 100644 node_modules/axios/lib/core/Axios.js create mode 100644 node_modules/axios/lib/core/AxiosError.js create mode 100644 node_modules/axios/lib/core/InterceptorManager.js create mode 100644 node_modules/axios/lib/core/README.md create mode 100644 node_modules/axios/lib/core/buildFullPath.js create mode 100644 node_modules/axios/lib/core/dispatchRequest.js create mode 100644 node_modules/axios/lib/core/mergeConfig.js create mode 100644 node_modules/axios/lib/core/settle.js create mode 100644 node_modules/axios/lib/core/transformData.js create mode 100644 node_modules/axios/lib/defaults/index.js create mode 100644 node_modules/axios/lib/defaults/transitional.js create mode 100644 node_modules/axios/lib/env/README.md create mode 100644 node_modules/axios/lib/env/classes/FormData.js create mode 100644 node_modules/axios/lib/env/data.js create mode 100644 node_modules/axios/lib/helpers/AxiosURLSearchParams.js create mode 100644 node_modules/axios/lib/helpers/README.md create mode 100644 node_modules/axios/lib/helpers/bind.js create mode 100644 node_modules/axios/lib/helpers/buildURL.js create mode 100644 node_modules/axios/lib/helpers/combineURLs.js create mode 100644 node_modules/axios/lib/helpers/cookies.js create mode 100644 node_modules/axios/lib/helpers/deprecatedMethod.js create mode 100644 node_modules/axios/lib/helpers/formDataToJSON.js create mode 100644 node_modules/axios/lib/helpers/fromDataURI.js create mode 100644 node_modules/axios/lib/helpers/isAbsoluteURL.js create mode 100644 node_modules/axios/lib/helpers/isAxiosError.js create mode 100644 node_modules/axios/lib/helpers/isURLSameOrigin.js create mode 100644 node_modules/axios/lib/helpers/normalizeHeaderName.js create mode 100644 node_modules/axios/lib/helpers/null.js create mode 100644 node_modules/axios/lib/helpers/parseHeaders.js create mode 100644 node_modules/axios/lib/helpers/parseProtocol.js create mode 100644 node_modules/axios/lib/helpers/spread.js create mode 100644 node_modules/axios/lib/helpers/toFormData.js create mode 100644 node_modules/axios/lib/helpers/toURLEncodedForm.js create mode 100644 node_modules/axios/lib/helpers/validator.js create mode 100644 node_modules/axios/lib/platform/browser/classes/FormData.js create mode 100644 node_modules/axios/lib/platform/browser/classes/URLSearchParams.js create mode 100644 node_modules/axios/lib/platform/browser/index.js create mode 100644 node_modules/axios/lib/platform/index.js create mode 100644 node_modules/axios/lib/platform/node/classes/FormData.js create mode 100644 node_modules/axios/lib/platform/node/classes/URLSearchParams.js create mode 100644 node_modules/axios/lib/platform/node/index.js create mode 100644 node_modules/axios/lib/utils.js create mode 100644 node_modules/axios/package.json create mode 100644 node_modules/axios/rollup.config.js create mode 100644 node_modules/axios/tsconfig.json create mode 100644 node_modules/axios/tslint.json create mode 100644 node_modules/bufferutil/LICENSE create mode 100644 node_modules/bufferutil/README.md create mode 100644 node_modules/bufferutil/binding.gyp create mode 100644 node_modules/bufferutil/fallback.js create mode 100644 node_modules/bufferutil/index.js create mode 100644 node_modules/bufferutil/package.json create mode 100644 node_modules/bufferutil/prebuilds/darwin-x64+arm64/bufferutil.node create mode 100644 node_modules/bufferutil/prebuilds/linux-x64/bufferutil.node create mode 100644 node_modules/bufferutil/prebuilds/win32-ia32/bufferutil.node create mode 100644 node_modules/bufferutil/prebuilds/win32-x64/bufferutil.node create mode 100644 node_modules/bufferutil/src/bufferutil.c create mode 100644 node_modules/call-bind-apply-helpers/.eslintrc create mode 100644 node_modules/call-bind-apply-helpers/.github/FUNDING.yml create mode 100644 node_modules/call-bind-apply-helpers/.nycrc create mode 100644 node_modules/call-bind-apply-helpers/CHANGELOG.md create mode 100644 node_modules/call-bind-apply-helpers/LICENSE create mode 100644 node_modules/call-bind-apply-helpers/README.md create mode 100644 node_modules/call-bind-apply-helpers/actualApply.d.ts create mode 100644 node_modules/call-bind-apply-helpers/actualApply.js create mode 100644 node_modules/call-bind-apply-helpers/applyBind.d.ts create mode 100644 node_modules/call-bind-apply-helpers/applyBind.js create mode 100644 node_modules/call-bind-apply-helpers/functionApply.d.ts create mode 100644 node_modules/call-bind-apply-helpers/functionApply.js create mode 100644 node_modules/call-bind-apply-helpers/functionCall.d.ts create mode 100644 node_modules/call-bind-apply-helpers/functionCall.js create mode 100644 node_modules/call-bind-apply-helpers/index.d.ts create mode 100644 node_modules/call-bind-apply-helpers/index.js create mode 100644 node_modules/call-bind-apply-helpers/package.json create mode 100644 node_modules/call-bind-apply-helpers/reflectApply.d.ts create mode 100644 node_modules/call-bind-apply-helpers/reflectApply.js create mode 100644 node_modules/call-bind-apply-helpers/test/index.js create mode 100644 node_modules/call-bind-apply-helpers/tsconfig.json create mode 100644 node_modules/combined-stream/License create mode 100644 node_modules/combined-stream/Readme.md create mode 100644 node_modules/combined-stream/lib/combined_stream.js create mode 100644 node_modules/combined-stream/package.json create mode 100644 node_modules/combined-stream/yarn.lock create mode 100644 node_modules/commander/esm.mjs create mode 100644 node_modules/commander/package-support.json create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/common.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/delayed-stream/.npmignore create mode 100644 node_modules/delayed-stream/License create mode 100644 node_modules/delayed-stream/Makefile create mode 100644 node_modules/delayed-stream/Readme.md create mode 100644 node_modules/delayed-stream/lib/delayed_stream.js create mode 100644 node_modules/delayed-stream/package.json create mode 100644 node_modules/dunder-proto/.eslintrc create mode 100644 node_modules/dunder-proto/.github/FUNDING.yml create mode 100644 node_modules/dunder-proto/.nycrc create mode 100644 node_modules/dunder-proto/CHANGELOG.md create mode 100644 node_modules/dunder-proto/LICENSE create mode 100644 node_modules/dunder-proto/README.md create mode 100644 node_modules/dunder-proto/get.d.ts create mode 100644 node_modules/dunder-proto/get.js create mode 100644 node_modules/dunder-proto/package.json create mode 100644 node_modules/dunder-proto/set.d.ts create mode 100644 node_modules/dunder-proto/set.js create mode 100644 node_modules/dunder-proto/test/get.js create mode 100644 node_modules/dunder-proto/test/index.js create mode 100644 node_modules/dunder-proto/test/set.js create mode 100644 node_modules/dunder-proto/tsconfig.json create mode 100644 node_modules/es-define-property/.eslintrc create mode 100644 node_modules/es-define-property/.github/FUNDING.yml create mode 100644 node_modules/es-define-property/.nycrc create mode 100644 node_modules/es-define-property/CHANGELOG.md create mode 100644 node_modules/es-define-property/LICENSE create mode 100644 node_modules/es-define-property/README.md create mode 100644 node_modules/es-define-property/index.d.ts create mode 100644 node_modules/es-define-property/index.js create mode 100644 node_modules/es-define-property/package.json create mode 100644 node_modules/es-define-property/test/index.js create mode 100644 node_modules/es-define-property/tsconfig.json create mode 100644 node_modules/es-errors/.eslintrc create mode 100644 node_modules/es-errors/.github/FUNDING.yml create mode 100644 node_modules/es-errors/CHANGELOG.md create mode 100644 node_modules/es-errors/LICENSE create mode 100644 node_modules/es-errors/README.md create mode 100644 node_modules/es-errors/eval.d.ts create mode 100644 node_modules/es-errors/eval.js create mode 100644 node_modules/es-errors/index.d.ts create mode 100644 node_modules/es-errors/index.js create mode 100644 node_modules/es-errors/package.json create mode 100644 node_modules/es-errors/range.d.ts create mode 100644 node_modules/es-errors/range.js create mode 100644 node_modules/es-errors/ref.d.ts create mode 100644 node_modules/es-errors/ref.js create mode 100644 node_modules/es-errors/syntax.d.ts create mode 100644 node_modules/es-errors/syntax.js create mode 100644 node_modules/es-errors/test/index.js create mode 100644 node_modules/es-errors/tsconfig.json create mode 100644 node_modules/es-errors/type.d.ts create mode 100644 node_modules/es-errors/type.js create mode 100644 node_modules/es-errors/uri.d.ts create mode 100644 node_modules/es-errors/uri.js create mode 100644 node_modules/es-object-atoms/.eslintrc create mode 100644 node_modules/es-object-atoms/.github/FUNDING.yml create mode 100644 node_modules/es-object-atoms/CHANGELOG.md create mode 100644 node_modules/es-object-atoms/LICENSE create mode 100644 node_modules/es-object-atoms/README.md create mode 100644 node_modules/es-object-atoms/RequireObjectCoercible.d.ts create mode 100644 node_modules/es-object-atoms/RequireObjectCoercible.js create mode 100644 node_modules/es-object-atoms/ToObject.d.ts create mode 100644 node_modules/es-object-atoms/ToObject.js create mode 100644 node_modules/es-object-atoms/index.d.ts create mode 100644 node_modules/es-object-atoms/index.js create mode 100644 node_modules/es-object-atoms/isObject.d.ts create mode 100644 node_modules/es-object-atoms/isObject.js create mode 100644 node_modules/es-object-atoms/package.json create mode 100644 node_modules/es-object-atoms/test/index.js create mode 100644 node_modules/es-object-atoms/tsconfig.json create mode 100644 node_modules/es-set-tostringtag/.eslintrc create mode 100644 node_modules/es-set-tostringtag/.nycrc create mode 100644 node_modules/es-set-tostringtag/CHANGELOG.md create mode 100644 node_modules/es-set-tostringtag/LICENSE create mode 100644 node_modules/es-set-tostringtag/README.md create mode 100644 node_modules/es-set-tostringtag/index.d.ts create mode 100644 node_modules/es-set-tostringtag/index.js create mode 100644 node_modules/es-set-tostringtag/package.json create mode 100644 node_modules/es-set-tostringtag/test/index.js create mode 100644 node_modules/es-set-tostringtag/tsconfig.json create mode 100644 node_modules/follow-redirects/LICENSE create mode 100644 node_modules/follow-redirects/README.md create mode 100644 node_modules/follow-redirects/debug.js create mode 100644 node_modules/follow-redirects/http.js create mode 100644 node_modules/follow-redirects/https.js create mode 100644 node_modules/follow-redirects/index.js create mode 100644 node_modules/follow-redirects/package.json create mode 100644 node_modules/form-data/CHANGELOG.md create mode 100644 node_modules/form-data/License create mode 100644 node_modules/form-data/README.md create mode 100644 node_modules/form-data/index.d.ts create mode 100644 node_modules/form-data/lib/browser.js create mode 100644 node_modules/form-data/lib/form_data.js create mode 100644 node_modules/form-data/lib/populate.js create mode 100644 node_modules/form-data/package.json create mode 100644 node_modules/function-bind/.eslintrc create mode 100644 node_modules/function-bind/.github/FUNDING.yml create mode 100644 node_modules/function-bind/.github/SECURITY.md create mode 100644 node_modules/function-bind/.nycrc create mode 100644 node_modules/function-bind/CHANGELOG.md create mode 100644 node_modules/function-bind/LICENSE create mode 100644 node_modules/function-bind/README.md create mode 100644 node_modules/function-bind/implementation.js create mode 100644 node_modules/function-bind/index.js create mode 100644 node_modules/function-bind/package.json create mode 100644 node_modules/function-bind/test/.eslintrc create mode 100644 node_modules/function-bind/test/index.js create mode 100644 node_modules/get-intrinsic/.eslintrc create mode 100644 node_modules/get-intrinsic/.github/FUNDING.yml create mode 100644 node_modules/get-intrinsic/.nycrc create mode 100644 node_modules/get-intrinsic/CHANGELOG.md create mode 100644 node_modules/get-intrinsic/LICENSE create mode 100644 node_modules/get-intrinsic/README.md create mode 100644 node_modules/get-intrinsic/index.js create mode 100644 node_modules/get-intrinsic/package.json create mode 100644 node_modules/get-intrinsic/test/GetIntrinsic.js create mode 100644 node_modules/get-proto/.eslintrc create mode 100644 node_modules/get-proto/.github/FUNDING.yml create mode 100644 node_modules/get-proto/.nycrc create mode 100644 node_modules/get-proto/CHANGELOG.md create mode 100644 node_modules/get-proto/LICENSE create mode 100644 node_modules/get-proto/Object.getPrototypeOf.d.ts create mode 100644 node_modules/get-proto/Object.getPrototypeOf.js create mode 100644 node_modules/get-proto/README.md create mode 100644 node_modules/get-proto/Reflect.getPrototypeOf.d.ts create mode 100644 node_modules/get-proto/Reflect.getPrototypeOf.js create mode 100644 node_modules/get-proto/index.d.ts create mode 100644 node_modules/get-proto/index.js create mode 100644 node_modules/get-proto/package.json create mode 100644 node_modules/get-proto/test/index.js create mode 100644 node_modules/get-proto/tsconfig.json create mode 100644 node_modules/gopd/.eslintrc create mode 100644 node_modules/gopd/.github/FUNDING.yml create mode 100644 node_modules/gopd/CHANGELOG.md create mode 100644 node_modules/gopd/LICENSE create mode 100644 node_modules/gopd/README.md create mode 100644 node_modules/gopd/gOPD.d.ts create mode 100644 node_modules/gopd/gOPD.js create mode 100644 node_modules/gopd/index.d.ts create mode 100644 node_modules/gopd/index.js create mode 100644 node_modules/gopd/package.json create mode 100644 node_modules/gopd/test/index.js create mode 100644 node_modules/gopd/tsconfig.json create mode 100644 node_modules/has-symbols/.eslintrc create mode 100644 node_modules/has-symbols/.github/FUNDING.yml create mode 100644 node_modules/has-symbols/.nycrc create mode 100644 node_modules/has-symbols/CHANGELOG.md create mode 100644 node_modules/has-symbols/LICENSE create mode 100644 node_modules/has-symbols/README.md create mode 100644 node_modules/has-symbols/index.d.ts create mode 100644 node_modules/has-symbols/index.js create mode 100644 node_modules/has-symbols/package.json create mode 100644 node_modules/has-symbols/shams.d.ts create mode 100644 node_modules/has-symbols/shams.js create mode 100644 node_modules/has-symbols/test/index.js create mode 100644 node_modules/has-symbols/test/shams/core-js.js create mode 100644 node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 node_modules/has-symbols/test/tests.js create mode 100644 node_modules/has-symbols/tsconfig.json create mode 100644 node_modules/has-tostringtag/.eslintrc create mode 100644 node_modules/has-tostringtag/.github/FUNDING.yml create mode 100644 node_modules/has-tostringtag/.nycrc create mode 100644 node_modules/has-tostringtag/CHANGELOG.md create mode 100644 node_modules/has-tostringtag/LICENSE create mode 100644 node_modules/has-tostringtag/README.md create mode 100644 node_modules/has-tostringtag/index.d.ts create mode 100644 node_modules/has-tostringtag/index.js create mode 100644 node_modules/has-tostringtag/package.json create mode 100644 node_modules/has-tostringtag/shams.d.ts create mode 100644 node_modules/has-tostringtag/shams.js create mode 100644 node_modules/has-tostringtag/test/index.js create mode 100644 node_modules/has-tostringtag/test/shams/core-js.js create mode 100644 node_modules/has-tostringtag/test/shams/get-own-property-symbols.js create mode 100644 node_modules/has-tostringtag/test/tests.js create mode 100644 node_modules/has-tostringtag/tsconfig.json create mode 100644 node_modules/hasown/.eslintrc create mode 100644 node_modules/hasown/.github/FUNDING.yml create mode 100644 node_modules/hasown/.nycrc create mode 100644 node_modules/hasown/CHANGELOG.md create mode 100644 node_modules/hasown/LICENSE create mode 100644 node_modules/hasown/README.md create mode 100644 node_modules/hasown/index.d.ts create mode 100644 node_modules/hasown/index.js create mode 100644 node_modules/hasown/package.json create mode 100644 node_modules/hasown/tsconfig.json create mode 100644 node_modules/math-intrinsics/.eslintrc create mode 100644 node_modules/math-intrinsics/.github/FUNDING.yml create mode 100644 node_modules/math-intrinsics/CHANGELOG.md create mode 100644 node_modules/math-intrinsics/LICENSE create mode 100644 node_modules/math-intrinsics/README.md create mode 100644 node_modules/math-intrinsics/abs.d.ts create mode 100644 node_modules/math-intrinsics/abs.js create mode 100644 node_modules/math-intrinsics/constants/maxArrayLength.d.ts create mode 100644 node_modules/math-intrinsics/constants/maxArrayLength.js create mode 100644 node_modules/math-intrinsics/constants/maxSafeInteger.d.ts create mode 100644 node_modules/math-intrinsics/constants/maxSafeInteger.js create mode 100644 node_modules/math-intrinsics/constants/maxValue.d.ts create mode 100644 node_modules/math-intrinsics/constants/maxValue.js create mode 100644 node_modules/math-intrinsics/floor.d.ts create mode 100644 node_modules/math-intrinsics/floor.js create mode 100644 node_modules/math-intrinsics/isFinite.d.ts create mode 100644 node_modules/math-intrinsics/isFinite.js create mode 100644 node_modules/math-intrinsics/isInteger.d.ts create mode 100644 node_modules/math-intrinsics/isInteger.js create mode 100644 node_modules/math-intrinsics/isNaN.d.ts create mode 100644 node_modules/math-intrinsics/isNaN.js create mode 100644 node_modules/math-intrinsics/isNegativeZero.d.ts create mode 100644 node_modules/math-intrinsics/isNegativeZero.js create mode 100644 node_modules/math-intrinsics/max.d.ts create mode 100644 node_modules/math-intrinsics/max.js create mode 100644 node_modules/math-intrinsics/min.d.ts create mode 100644 node_modules/math-intrinsics/min.js create mode 100644 node_modules/math-intrinsics/mod.d.ts create mode 100644 node_modules/math-intrinsics/mod.js create mode 100644 node_modules/math-intrinsics/package.json create mode 100644 node_modules/math-intrinsics/pow.d.ts create mode 100644 node_modules/math-intrinsics/pow.js create mode 100644 node_modules/math-intrinsics/round.d.ts create mode 100644 node_modules/math-intrinsics/round.js create mode 100644 node_modules/math-intrinsics/sign.d.ts create mode 100644 node_modules/math-intrinsics/sign.js create mode 100644 node_modules/math-intrinsics/test/index.js create mode 100644 node_modules/math-intrinsics/tsconfig.json create mode 100644 node_modules/mime-db/HISTORY.md create mode 100644 node_modules/mime-db/LICENSE create mode 100644 node_modules/mime-db/README.md create mode 100644 node_modules/mime-db/db.json create mode 100644 node_modules/mime-db/index.js create mode 100644 node_modules/mime-db/package.json create mode 100644 node_modules/mime-types/HISTORY.md create mode 100644 node_modules/mime-types/LICENSE create mode 100644 node_modules/mime-types/README.md create mode 100644 node_modules/mime-types/index.js create mode 100644 node_modules/mime-types/package.json create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/node-gyp-build/LICENSE create mode 100644 node_modules/node-gyp-build/README.md create mode 100644 node_modules/node-gyp-build/SECURITY.md create mode 100644 node_modules/node-gyp-build/bin.js create mode 100644 node_modules/node-gyp-build/build-test.js create mode 100644 node_modules/node-gyp-build/index.js create mode 100644 node_modules/node-gyp-build/node-gyp-build.js create mode 100644 node_modules/node-gyp-build/optional.js create mode 100644 node_modules/node-gyp-build/package.json create mode 100644 node_modules/proxy-from-env/.eslintrc create mode 100644 node_modules/proxy-from-env/.travis.yml create mode 100644 node_modules/proxy-from-env/LICENSE create mode 100644 node_modules/proxy-from-env/README.md create mode 100644 node_modules/proxy-from-env/index.js create mode 100644 node_modules/proxy-from-env/package.json create mode 100644 node_modules/proxy-from-env/test.js create mode 100644 node_modules/screeps-api/FUNDING.yml create mode 100644 node_modules/screeps-api/dist/ScreepsAPI.js create mode 100644 node_modules/screeps-api/dist/types/ConfigManager.d.ts create mode 100644 node_modules/screeps-api/dist/types/RawAPI.d.ts create mode 100644 node_modules/screeps-api/dist/types/ScreepsAPI.d.ts create mode 100644 node_modules/screeps-api/dist/types/Socket.d.ts create mode 100644 node_modules/screeps-api/dist/types/index.d.ts create mode 100644 node_modules/screeps-api/dist/types/ws-browser.d.ts create mode 100644 node_modules/screeps-api/tsconfig.json create mode 100644 node_modules/utf-8-validate/LICENSE create mode 100644 node_modules/utf-8-validate/README.md create mode 100644 node_modules/utf-8-validate/binding.gyp create mode 100644 node_modules/utf-8-validate/fallback.js create mode 100644 node_modules/utf-8-validate/index.js create mode 100644 node_modules/utf-8-validate/package.json create mode 100644 node_modules/utf-8-validate/prebuilds/darwin-x64+arm64/node.napi.node create mode 100644 node_modules/utf-8-validate/prebuilds/linux-x64/node.napi.node create mode 100644 node_modules/utf-8-validate/prebuilds/win32-ia32/node.napi.node create mode 100644 node_modules/utf-8-validate/prebuilds/win32-x64/node.napi.node create mode 100644 node_modules/utf-8-validate/src/validation.c create mode 100644 node_modules/ws/browser.js create mode 100644 node_modules/ws/lib/limiter.js create mode 100644 node_modules/ws/lib/stream.js diff --git a/node_modules/.bin/node-gyp-build b/node_modules/.bin/node-gyp-build new file mode 100644 index 0000000..78d3889 --- /dev/null +++ b/node_modules/.bin/node-gyp-build @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../node-gyp-build/bin.js" "$@" +else + exec node "$basedir/../node-gyp-build/bin.js" "$@" +fi diff --git a/node_modules/.bin/node-gyp-build-optional b/node_modules/.bin/node-gyp-build-optional new file mode 100644 index 0000000..03297c5 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../node-gyp-build/optional.js" "$@" +else + exec node "$basedir/../node-gyp-build/optional.js" "$@" +fi diff --git a/node_modules/.bin/node-gyp-build-optional.cmd b/node_modules/.bin/node-gyp-build-optional.cmd new file mode 100644 index 0000000..74d85f2 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\node-gyp-build\optional.js" %* diff --git a/node_modules/.bin/node-gyp-build-optional.ps1 b/node_modules/.bin/node-gyp-build-optional.ps1 new file mode 100644 index 0000000..45995c3 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../node-gyp-build/optional.js" $args + } else { + & "$basedir/node$exe" "$basedir/../node-gyp-build/optional.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../node-gyp-build/optional.js" $args + } else { + & "node$exe" "$basedir/../node-gyp-build/optional.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/node-gyp-build-test b/node_modules/.bin/node-gyp-build-test new file mode 100644 index 0000000..049fa6a --- /dev/null +++ b/node_modules/.bin/node-gyp-build-test @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../node-gyp-build/build-test.js" "$@" +else + exec node "$basedir/../node-gyp-build/build-test.js" "$@" +fi diff --git a/node_modules/.bin/node-gyp-build-test.cmd b/node_modules/.bin/node-gyp-build-test.cmd new file mode 100644 index 0000000..182a757 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-test.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\node-gyp-build\build-test.js" %* diff --git a/node_modules/.bin/node-gyp-build-test.ps1 b/node_modules/.bin/node-gyp-build-test.ps1 new file mode 100644 index 0000000..6cb0b9b --- /dev/null +++ b/node_modules/.bin/node-gyp-build-test.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../node-gyp-build/build-test.js" $args + } else { + & "$basedir/node$exe" "$basedir/../node-gyp-build/build-test.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../node-gyp-build/build-test.js" $args + } else { + & "node$exe" "$basedir/../node-gyp-build/build-test.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.bin/node-gyp-build.cmd b/node_modules/.bin/node-gyp-build.cmd new file mode 100644 index 0000000..ac854a6 --- /dev/null +++ b/node_modules/.bin/node-gyp-build.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\node-gyp-build\bin.js" %* diff --git a/node_modules/.bin/node-gyp-build.ps1 b/node_modules/.bin/node-gyp-build.ps1 new file mode 100644 index 0000000..c1f9a9a --- /dev/null +++ b/node_modules/.bin/node-gyp-build.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../node-gyp-build/bin.js" $args + } else { + & "$basedir/node$exe" "$basedir/../node-gyp-build/bin.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../node-gyp-build/bin.js" $args + } else { + & "node$exe" "$basedir/../node-gyp-build/bin.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/@isaacs/balanced-match/LICENSE.md b/node_modules/@isaacs/balanced-match/LICENSE.md new file mode 100644 index 0000000..61ece8c --- /dev/null +++ b/node_modules/@isaacs/balanced-match/LICENSE.md @@ -0,0 +1,23 @@ +(MIT) + +Original code Copyright Julian Gruber + +Port to TypeScript Copyright Isaac Z. Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@isaacs/balanced-match/README.md b/node_modules/@isaacs/balanced-match/README.md new file mode 100644 index 0000000..ed10c70 --- /dev/null +++ b/node_modules/@isaacs/balanced-match/README.md @@ -0,0 +1,60 @@ +# @isaacs/balanced-match + +A hybrid CJS/ESM TypeScript fork of +[balanced-match](http://npm.im/balanced-match). + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![CI](https://github.com/juliangruber/balanced-match/actions/workflows/ci.yml/badge.svg)](https://github.com/juliangruber/balanced-match/actions/workflows/ci.yml) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +import { balanced } from '@isaacs/balanced-match' + +console.log(balanced('{', '}', 'pre{in{nested}}post')) +console.log(balanced('{', '}', 'pre{first}between{second}post')) +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')) +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### const m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +- **start** the index of the first match of `a` +- **end** the index of the matching `b` +- **pre** the preamble, `a` and `b` not included +- **body** the match, `a` and `b` not included +- **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### const r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. diff --git a/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts b/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts new file mode 100644 index 0000000..f819cfd --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts @@ -0,0 +1,9 @@ +export declare const balanced: (a: string | RegExp, b: string | RegExp, str: string) => false | { + start: number; + end: number; + pre: string; + body: string; + post: string; +} | undefined; +export declare const range: (a: string, b: string, str: string) => undefined | [number, number]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map b/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map new file mode 100644 index 0000000..6306762 --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,GACnB,GAAG,MAAM,GAAG,MAAM,EAClB,GAAG,MAAM,GAAG,MAAM,EAClB,KAAK,MAAM;;;;;;aAgBZ,CAAA;AAOD,eAAO,MAAM,KAAK,GAChB,GAAG,MAAM,EACT,GAAG,MAAM,EACT,KAAK,MAAM,KACV,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CA2C7B,CAAA"} \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/commonjs/index.js b/node_modules/@isaacs/balanced-match/dist/commonjs/index.js new file mode 100644 index 0000000..0c9014b --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/commonjs/index.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.range = exports.balanced = void 0; +const balanced = (a, b, str) => { + const ma = a instanceof RegExp ? maybeMatch(a, str) : a; + const mb = b instanceof RegExp ? maybeMatch(b, str) : b; + const r = ma !== null && mb != null && (0, exports.range)(ma, mb, str); + return (r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + ma.length, r[1]), + post: str.slice(r[1] + mb.length), + }); +}; +exports.balanced = balanced; +const maybeMatch = (reg, str) => { + const m = str.match(reg); + return m ? m[0] : null; +}; +const range = (a, b, str) => { + let begs, beg, left, right = undefined, result; + let ai = str.indexOf(a); + let bi = str.indexOf(b, ai + 1); + let i = ai; + if (ai >= 0 && bi > 0) { + if (a === b) { + return [ai, bi]; + } + begs = []; + left = str.length; + while (i >= 0 && !result) { + if (i === ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } + else if (begs.length === 1) { + const r = begs.pop(); + if (r !== undefined) + result = [r, bi]; + } + else { + beg = begs.pop(); + if (beg !== undefined && beg < left) { + left = beg; + right = bi; + } + bi = str.indexOf(b, i + 1); + } + i = ai < bi && ai >= 0 ? ai : bi; + } + if (begs.length && right !== undefined) { + result = [left, right]; + } + } + return result; +}; +exports.range = range; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map b/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map new file mode 100644 index 0000000..83f547c --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export const balanced = (\n a: string | RegExp,\n b: string | RegExp,\n str: string,\n) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b\n\n const r = ma !== null && mb != null && range(ma, mb, str)\n\n return (\n r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n }\n )\n}\n\nconst maybeMatch = (reg: RegExp, str: string) => {\n const m = str.match(reg)\n return m ? m[0] : null\n}\n\nexport const range = (\n a: string,\n b: string,\n str: string,\n): undefined | [number, number] => {\n let begs: number[],\n beg: number | undefined,\n left: number,\n right: number | undefined = undefined,\n result: undefined | [number, number]\n let ai = str.indexOf(a)\n let bi = str.indexOf(b, ai + 1)\n let i = ai\n\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi]\n }\n begs = []\n left = str.length\n\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i)\n ai = str.indexOf(a, i + 1)\n } else if (begs.length === 1) {\n const r = begs.pop()\n if (r !== undefined) result = [r, bi]\n } else {\n beg = begs.pop()\n if (beg !== undefined && beg < left) {\n left = beg\n right = bi\n }\n\n bi = str.indexOf(b, i + 1)\n }\n\n i = ai < bi && ai >= 0 ? ai : bi\n }\n\n if (begs.length && right !== undefined) {\n result = [left, right]\n }\n }\n\n return result\n}\n"]} \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/commonjs/package.json b/node_modules/@isaacs/balanced-match/dist/commonjs/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts b/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts new file mode 100644 index 0000000..f819cfd --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts @@ -0,0 +1,9 @@ +export declare const balanced: (a: string | RegExp, b: string | RegExp, str: string) => false | { + start: number; + end: number; + pre: string; + body: string; + post: string; +} | undefined; +export declare const range: (a: string, b: string, str: string) => undefined | [number, number]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map b/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map new file mode 100644 index 0000000..6306762 --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,GACnB,GAAG,MAAM,GAAG,MAAM,EAClB,GAAG,MAAM,GAAG,MAAM,EAClB,KAAK,MAAM;;;;;;aAgBZ,CAAA;AAOD,eAAO,MAAM,KAAK,GAChB,GAAG,MAAM,EACT,GAAG,MAAM,EACT,KAAK,MAAM,KACV,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CA2C7B,CAAA"} \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/esm/index.js b/node_modules/@isaacs/balanced-match/dist/esm/index.js new file mode 100644 index 0000000..fe81200 --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/esm/index.js @@ -0,0 +1,54 @@ +export const balanced = (a, b, str) => { + const ma = a instanceof RegExp ? maybeMatch(a, str) : a; + const mb = b instanceof RegExp ? maybeMatch(b, str) : b; + const r = ma !== null && mb != null && range(ma, mb, str); + return (r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + ma.length, r[1]), + post: str.slice(r[1] + mb.length), + }); +}; +const maybeMatch = (reg, str) => { + const m = str.match(reg); + return m ? m[0] : null; +}; +export const range = (a, b, str) => { + let begs, beg, left, right = undefined, result; + let ai = str.indexOf(a); + let bi = str.indexOf(b, ai + 1); + let i = ai; + if (ai >= 0 && bi > 0) { + if (a === b) { + return [ai, bi]; + } + begs = []; + left = str.length; + while (i >= 0 && !result) { + if (i === ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } + else if (begs.length === 1) { + const r = begs.pop(); + if (r !== undefined) + result = [r, bi]; + } + else { + beg = begs.pop(); + if (beg !== undefined && beg < left) { + left = beg; + right = bi; + } + bi = str.indexOf(b, i + 1); + } + i = ai < bi && ai >= 0 ? ai : bi; + } + if (begs.length && right !== undefined) { + result = [left, right]; + } + } + return result; +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/esm/index.js.map b/node_modules/@isaacs/balanced-match/dist/esm/index.js.map new file mode 100644 index 0000000..b476cae --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export const balanced = (\n a: string | RegExp,\n b: string | RegExp,\n str: string,\n) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b\n\n const r = ma !== null && mb != null && range(ma, mb, str)\n\n return (\n r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n }\n )\n}\n\nconst maybeMatch = (reg: RegExp, str: string) => {\n const m = str.match(reg)\n return m ? m[0] : null\n}\n\nexport const range = (\n a: string,\n b: string,\n str: string,\n): undefined | [number, number] => {\n let begs: number[],\n beg: number | undefined,\n left: number,\n right: number | undefined = undefined,\n result: undefined | [number, number]\n let ai = str.indexOf(a)\n let bi = str.indexOf(b, ai + 1)\n let i = ai\n\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi]\n }\n begs = []\n left = str.length\n\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i)\n ai = str.indexOf(a, i + 1)\n } else if (begs.length === 1) {\n const r = begs.pop()\n if (r !== undefined) result = [r, bi]\n } else {\n beg = begs.pop()\n if (beg !== undefined && beg < left) {\n left = beg\n right = bi\n }\n\n bi = str.indexOf(b, i + 1)\n }\n\n i = ai < bi && ai >= 0 ? ai : bi\n }\n\n if (begs.length && right !== undefined) {\n result = [left, right]\n }\n }\n\n return result\n}\n"]} \ No newline at end of file diff --git a/node_modules/@isaacs/balanced-match/dist/esm/package.json b/node_modules/@isaacs/balanced-match/dist/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/node_modules/@isaacs/balanced-match/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/@isaacs/balanced-match/package.json b/node_modules/@isaacs/balanced-match/package.json new file mode 100644 index 0000000..49296e6 --- /dev/null +++ b/node_modules/@isaacs/balanced-match/package.json @@ -0,0 +1,79 @@ +{ + "name": "@isaacs/balanced-match", + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "version": "4.0.1", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git://github.com/isaacs/balanced-match.git" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "type": "module", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "benchmark": "node benchmark/index.js", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.2", + "@types/node": "^24.0.0", + "mkdirp": "^3.0.1", + "prettier": "^3.3.2", + "tap": "^21.1.0", + "tshy": "^3.0.2", + "typedoc": "^0.28.5" + }, + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "engines": { + "node": "20 || >=22" + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "module": "./dist/esm/index.js" +} diff --git a/node_modules/@isaacs/brace-expansion/LICENSE b/node_modules/@isaacs/brace-expansion/LICENSE new file mode 100644 index 0000000..46e7b75 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/LICENSE @@ -0,0 +1,23 @@ +MIT License + +Copyright Julian Gruber + +TypeScript port Copyright Isaac Z. Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@isaacs/brace-expansion/README.md b/node_modules/@isaacs/brace-expansion/README.md new file mode 100644 index 0000000..56097c9 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/README.md @@ -0,0 +1,86 @@ +# @isaacs/brace-expansion + +A hybrid CJS/ESM TypeScript fork of +[brace-expansion](http://npm.im/brace-expansion). + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![CI](https://github.com/juliangruber/brace-expansion/actions/workflows/ci.yml/badge.svg)](https://github.com/juliangruber/brace-expansion/actions/workflows/ci.yml) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) + +## Example + +```js +import { expand } from '@isaacs/brace-expansion' + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +import { expand } from '@isaacs/brace-expansion' +``` + +### const expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. diff --git a/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts new file mode 100644 index 0000000..c51cda1 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts @@ -0,0 +1,2 @@ +export declare function expand(str: string): string[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map new file mode 100644 index 0000000..27f432d --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAwEA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,YAgBjC"} \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js new file mode 100644 index 0000000..99cee69 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js @@ -0,0 +1,196 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.expand = expand; +const balanced_match_1 = require("@isaacs/balanced-match"); +const escSlash = '\0SLASH' + Math.random() + '\0'; +const escOpen = '\0OPEN' + Math.random() + '\0'; +const escClose = '\0CLOSE' + Math.random() + '\0'; +const escComma = '\0COMMA' + Math.random() + '\0'; +const escPeriod = '\0PERIOD' + Math.random() + '\0'; +const escSlashPattern = new RegExp(escSlash, 'g'); +const escOpenPattern = new RegExp(escOpen, 'g'); +const escClosePattern = new RegExp(escClose, 'g'); +const escCommaPattern = new RegExp(escComma, 'g'); +const escPeriodPattern = new RegExp(escPeriod, 'g'); +const slashPattern = /\\\\/g; +const openPattern = /\\{/g; +const closePattern = /\\}/g; +const commaPattern = /\\,/g; +const periodPattern = /\\./g; +function numeric(str) { + return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); +} +function escapeBraces(str) { + return str + .replace(slashPattern, escSlash) + .replace(openPattern, escOpen) + .replace(closePattern, escClose) + .replace(commaPattern, escComma) + .replace(periodPattern, escPeriod); +} +function unescapeBraces(str) { + return str + .replace(escSlashPattern, '\\') + .replace(escOpenPattern, '{') + .replace(escClosePattern, '}') + .replace(escCommaPattern, ',') + .replace(escPeriodPattern, '.'); +} +/** + * Basically just str.split(","), but handling cases + * where we have nested braced sections, which should be + * treated as individual members, like {a,{b,c},d} + */ +function parseCommaParts(str) { + if (!str) { + return ['']; + } + const parts = []; + const m = (0, balanced_match_1.balanced)('{', '}', str); + if (!m) { + return str.split(','); + } + const { pre, body, post } = m; + const p = pre.split(','); + p[p.length - 1] += '{' + body + '}'; + const postParts = parseCommaParts(post); + if (post.length) { + ; + p[p.length - 1] += postParts.shift(); + p.push.apply(p, postParts); + } + parts.push.apply(parts, p); + return parts; +} +function expand(str) { + if (!str) { + return []; + } + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.slice(0, 2) === '{}') { + str = '\\{\\}' + str.slice(2); + } + return expand_(escapeBraces(str), true).map(unescapeBraces); +} +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} +function expand_(str, isTop) { + /** @type {string[]} */ + const expansions = []; + const m = (0, balanced_match_1.balanced)('{', '}', str); + if (!m) + return [str]; + // no need to expand pre, since it is guaranteed to be free of brace-sets + const pre = m.pre; + const post = m.post.length ? expand_(m.post, false) : ['']; + if (/\$$/.test(m.pre)) { + for (let k = 0; k < post.length; k++) { + const expansion = pre + '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } + else { + const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + const isSequence = isNumericSequence || isAlphaSequence; + const isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,(?!,).*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand_(str); + } + return [str]; + } + let n; + if (isSequence) { + n = m.body.split(/\.\./); + } + else { + n = parseCommaParts(m.body); + if (n.length === 1 && n[0] !== undefined) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand_(n[0], false).map(embrace); + //XXX is this necessary? Can't seem to hit it in tests. + /* c8 ignore start */ + if (n.length === 1) { + return post.map(p => m.pre + n[0] + p); + } + /* c8 ignore stop */ + } + } + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + let N; + if (isSequence && n[0] !== undefined && n[1] !== undefined) { + const x = numeric(n[0]); + const y = numeric(n[1]); + const width = Math.max(n[0].length, n[1].length); + let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1; + let test = lte; + const reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + const pad = n.some(isPadded); + N = []; + for (let i = x; test(i, y); i += incr) { + let c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') { + c = ''; + } + } + else { + c = String(i); + if (pad) { + const need = width - c.length; + if (need > 0) { + const z = new Array(need + 1).join('0'); + if (i < 0) { + c = '-' + z + c.slice(1); + } + else { + c = z + c; + } + } + } + } + N.push(c); + } + } + else { + N = []; + for (let j = 0; j < n.length; j++) { + N.push.apply(N, expand_(n[j], false)); + } + } + for (let j = 0; j < N.length; j++) { + for (let k = 0; k < post.length; k++) { + const expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) { + expansions.push(expansion); + } + } + } + } + return expansions; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map new file mode 100644 index 0000000..6c3f6c4 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { balanced } from '@isaacs/balanced-match'\n\nconst escSlash = '\\0SLASH' + Math.random() + '\\0'\nconst escOpen = '\\0OPEN' + Math.random() + '\\0'\nconst escClose = '\\0CLOSE' + Math.random() + '\\0'\nconst escComma = '\\0COMMA' + Math.random() + '\\0'\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0'\nconst escSlashPattern = new RegExp(escSlash, 'g')\nconst escOpenPattern = new RegExp(escOpen, 'g')\nconst escClosePattern = new RegExp(escClose, 'g')\nconst escCommaPattern = new RegExp(escComma, 'g')\nconst escPeriodPattern = new RegExp(escPeriod, 'g')\nconst slashPattern = /\\\\\\\\/g\nconst openPattern = /\\\\{/g\nconst closePattern = /\\\\}/g\nconst commaPattern = /\\\\,/g\nconst periodPattern = /\\\\./g\n\nfunction numeric(str: string) {\n return !isNaN(str as any) ? parseInt(str, 10) : str.charCodeAt(0)\n}\n\nfunction escapeBraces(str: string) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod)\n}\n\nfunction unescapeBraces(str: string) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.')\n}\n\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str: string) {\n if (!str) {\n return ['']\n }\n\n const parts: string[] = []\n const m = balanced('{', '}', str)\n\n if (!m) {\n return str.split(',')\n }\n\n const { pre, body, post } = m\n const p = pre.split(',')\n\n p[p.length - 1] += '{' + body + '}'\n const postParts = parseCommaParts(post)\n if (post.length) {\n ;(p[p.length - 1] as string) += postParts.shift()\n p.push.apply(p, postParts)\n }\n\n parts.push.apply(parts, p)\n\n return parts\n}\n\nexport function expand(str: string) {\n if (!str) {\n return []\n }\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2)\n }\n\n return expand_(escapeBraces(str), true).map(unescapeBraces)\n}\n\nfunction embrace(str: string) {\n return '{' + str + '}'\n}\n\nfunction isPadded(el: string) {\n return /^-?0\\d/.test(el)\n}\n\nfunction lte(i: number, y: number) {\n return i <= y\n}\n\nfunction gte(i: number, y: number) {\n return i >= y\n}\n\nfunction expand_(str: string, isTop?: boolean): string[] {\n /** @type {string[]} */\n const expansions: string[] = []\n\n const m = balanced('{', '}', str)\n if (!m) return [str]\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre\n const post: string[] = m.post.length ? expand_(m.post, false) : ['']\n\n if (/\\$$/.test(m.pre)) {\n for (let k = 0; k < post.length; k++) {\n const expansion = pre + '{' + m.body + '}' + post[k]\n expansions.push(expansion)\n }\n } else {\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body)\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body)\n const isSequence = isNumericSequence || isAlphaSequence\n const isOptions = m.body.indexOf(',') >= 0\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post\n return expand_(str)\n }\n return [str]\n }\n\n let n: string[]\n if (isSequence) {\n n = m.body.split(/\\.\\./)\n } else {\n n = parseCommaParts(m.body)\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], false).map(embrace)\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n return post.map(p => m.pre + n[0] + p)\n }\n /* c8 ignore stop */\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n let N: string[]\n\n if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n const x = numeric(n[0])\n const y = numeric(n[1])\n const width = Math.max(n[0].length, n[1].length)\n let incr =\n n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1\n let test = lte\n const reverse = y < x\n if (reverse) {\n incr *= -1\n test = gte\n }\n const pad = n.some(isPadded)\n\n N = []\n\n for (let i = x; test(i, y); i += incr) {\n let c\n if (isAlphaSequence) {\n c = String.fromCharCode(i)\n if (c === '\\\\') {\n c = ''\n }\n } else {\n c = String(i)\n if (pad) {\n const need = width - c.length\n if (need > 0) {\n const z = new Array(need + 1).join('0')\n if (i < 0) {\n c = '-' + z + c.slice(1)\n } else {\n c = z + c\n }\n }\n }\n }\n N.push(c)\n }\n } else {\n N = []\n\n for (let j = 0; j < n.length; j++) {\n N.push.apply(N, expand_(n[j] as string, false))\n }\n }\n\n for (let j = 0; j < N.length; j++) {\n for (let k = 0; k < post.length; k++) {\n const expansion = pre + N[j] + post[k]\n if (!isTop || isSequence || expansion) {\n expansions.push(expansion)\n }\n }\n }\n }\n\n return expansions\n}\n"]} \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json b/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts b/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts new file mode 100644 index 0000000..c51cda1 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts @@ -0,0 +1,2 @@ +export declare function expand(str: string): string[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map b/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map new file mode 100644 index 0000000..27f432d --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAwEA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,YAgBjC"} \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/esm/index.js b/node_modules/@isaacs/brace-expansion/dist/esm/index.js new file mode 100644 index 0000000..ebb88ed --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/esm/index.js @@ -0,0 +1,193 @@ +import { balanced } from '@isaacs/balanced-match'; +const escSlash = '\0SLASH' + Math.random() + '\0'; +const escOpen = '\0OPEN' + Math.random() + '\0'; +const escClose = '\0CLOSE' + Math.random() + '\0'; +const escComma = '\0COMMA' + Math.random() + '\0'; +const escPeriod = '\0PERIOD' + Math.random() + '\0'; +const escSlashPattern = new RegExp(escSlash, 'g'); +const escOpenPattern = new RegExp(escOpen, 'g'); +const escClosePattern = new RegExp(escClose, 'g'); +const escCommaPattern = new RegExp(escComma, 'g'); +const escPeriodPattern = new RegExp(escPeriod, 'g'); +const slashPattern = /\\\\/g; +const openPattern = /\\{/g; +const closePattern = /\\}/g; +const commaPattern = /\\,/g; +const periodPattern = /\\./g; +function numeric(str) { + return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); +} +function escapeBraces(str) { + return str + .replace(slashPattern, escSlash) + .replace(openPattern, escOpen) + .replace(closePattern, escClose) + .replace(commaPattern, escComma) + .replace(periodPattern, escPeriod); +} +function unescapeBraces(str) { + return str + .replace(escSlashPattern, '\\') + .replace(escOpenPattern, '{') + .replace(escClosePattern, '}') + .replace(escCommaPattern, ',') + .replace(escPeriodPattern, '.'); +} +/** + * Basically just str.split(","), but handling cases + * where we have nested braced sections, which should be + * treated as individual members, like {a,{b,c},d} + */ +function parseCommaParts(str) { + if (!str) { + return ['']; + } + const parts = []; + const m = balanced('{', '}', str); + if (!m) { + return str.split(','); + } + const { pre, body, post } = m; + const p = pre.split(','); + p[p.length - 1] += '{' + body + '}'; + const postParts = parseCommaParts(post); + if (post.length) { + ; + p[p.length - 1] += postParts.shift(); + p.push.apply(p, postParts); + } + parts.push.apply(parts, p); + return parts; +} +export function expand(str) { + if (!str) { + return []; + } + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.slice(0, 2) === '{}') { + str = '\\{\\}' + str.slice(2); + } + return expand_(escapeBraces(str), true).map(unescapeBraces); +} +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} +function expand_(str, isTop) { + /** @type {string[]} */ + const expansions = []; + const m = balanced('{', '}', str); + if (!m) + return [str]; + // no need to expand pre, since it is guaranteed to be free of brace-sets + const pre = m.pre; + const post = m.post.length ? expand_(m.post, false) : ['']; + if (/\$$/.test(m.pre)) { + for (let k = 0; k < post.length; k++) { + const expansion = pre + '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } + else { + const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + const isSequence = isNumericSequence || isAlphaSequence; + const isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,(?!,).*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand_(str); + } + return [str]; + } + let n; + if (isSequence) { + n = m.body.split(/\.\./); + } + else { + n = parseCommaParts(m.body); + if (n.length === 1 && n[0] !== undefined) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand_(n[0], false).map(embrace); + //XXX is this necessary? Can't seem to hit it in tests. + /* c8 ignore start */ + if (n.length === 1) { + return post.map(p => m.pre + n[0] + p); + } + /* c8 ignore stop */ + } + } + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + let N; + if (isSequence && n[0] !== undefined && n[1] !== undefined) { + const x = numeric(n[0]); + const y = numeric(n[1]); + const width = Math.max(n[0].length, n[1].length); + let incr = n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1; + let test = lte; + const reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + const pad = n.some(isPadded); + N = []; + for (let i = x; test(i, y); i += incr) { + let c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') { + c = ''; + } + } + else { + c = String(i); + if (pad) { + const need = width - c.length; + if (need > 0) { + const z = new Array(need + 1).join('0'); + if (i < 0) { + c = '-' + z + c.slice(1); + } + else { + c = z + c; + } + } + } + } + N.push(c); + } + } + else { + N = []; + for (let j = 0; j < n.length; j++) { + N.push.apply(N, expand_(n[j], false)); + } + } + for (let j = 0; j < N.length; j++) { + for (let k = 0; k < post.length; k++) { + const expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) { + expansions.push(expansion); + } + } + } + } + return expansions; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map b/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map new file mode 100644 index 0000000..85c33de --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { balanced } from '@isaacs/balanced-match'\n\nconst escSlash = '\\0SLASH' + Math.random() + '\\0'\nconst escOpen = '\\0OPEN' + Math.random() + '\\0'\nconst escClose = '\\0CLOSE' + Math.random() + '\\0'\nconst escComma = '\\0COMMA' + Math.random() + '\\0'\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0'\nconst escSlashPattern = new RegExp(escSlash, 'g')\nconst escOpenPattern = new RegExp(escOpen, 'g')\nconst escClosePattern = new RegExp(escClose, 'g')\nconst escCommaPattern = new RegExp(escComma, 'g')\nconst escPeriodPattern = new RegExp(escPeriod, 'g')\nconst slashPattern = /\\\\\\\\/g\nconst openPattern = /\\\\{/g\nconst closePattern = /\\\\}/g\nconst commaPattern = /\\\\,/g\nconst periodPattern = /\\\\./g\n\nfunction numeric(str: string) {\n return !isNaN(str as any) ? parseInt(str, 10) : str.charCodeAt(0)\n}\n\nfunction escapeBraces(str: string) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod)\n}\n\nfunction unescapeBraces(str: string) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.')\n}\n\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str: string) {\n if (!str) {\n return ['']\n }\n\n const parts: string[] = []\n const m = balanced('{', '}', str)\n\n if (!m) {\n return str.split(',')\n }\n\n const { pre, body, post } = m\n const p = pre.split(',')\n\n p[p.length - 1] += '{' + body + '}'\n const postParts = parseCommaParts(post)\n if (post.length) {\n ;(p[p.length - 1] as string) += postParts.shift()\n p.push.apply(p, postParts)\n }\n\n parts.push.apply(parts, p)\n\n return parts\n}\n\nexport function expand(str: string) {\n if (!str) {\n return []\n }\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2)\n }\n\n return expand_(escapeBraces(str), true).map(unescapeBraces)\n}\n\nfunction embrace(str: string) {\n return '{' + str + '}'\n}\n\nfunction isPadded(el: string) {\n return /^-?0\\d/.test(el)\n}\n\nfunction lte(i: number, y: number) {\n return i <= y\n}\n\nfunction gte(i: number, y: number) {\n return i >= y\n}\n\nfunction expand_(str: string, isTop?: boolean): string[] {\n /** @type {string[]} */\n const expansions: string[] = []\n\n const m = balanced('{', '}', str)\n if (!m) return [str]\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre\n const post: string[] = m.post.length ? expand_(m.post, false) : ['']\n\n if (/\\$$/.test(m.pre)) {\n for (let k = 0; k < post.length; k++) {\n const expansion = pre + '{' + m.body + '}' + post[k]\n expansions.push(expansion)\n }\n } else {\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body)\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body)\n const isSequence = isNumericSequence || isAlphaSequence\n const isOptions = m.body.indexOf(',') >= 0\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post\n return expand_(str)\n }\n return [str]\n }\n\n let n: string[]\n if (isSequence) {\n n = m.body.split(/\\.\\./)\n } else {\n n = parseCommaParts(m.body)\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], false).map(embrace)\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n return post.map(p => m.pre + n[0] + p)\n }\n /* c8 ignore stop */\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n let N: string[]\n\n if (isSequence && n[0] !== undefined && n[1] !== undefined) {\n const x = numeric(n[0])\n const y = numeric(n[1])\n const width = Math.max(n[0].length, n[1].length)\n let incr =\n n.length === 3 && n[2] !== undefined ? Math.abs(numeric(n[2])) : 1\n let test = lte\n const reverse = y < x\n if (reverse) {\n incr *= -1\n test = gte\n }\n const pad = n.some(isPadded)\n\n N = []\n\n for (let i = x; test(i, y); i += incr) {\n let c\n if (isAlphaSequence) {\n c = String.fromCharCode(i)\n if (c === '\\\\') {\n c = ''\n }\n } else {\n c = String(i)\n if (pad) {\n const need = width - c.length\n if (need > 0) {\n const z = new Array(need + 1).join('0')\n if (i < 0) {\n c = '-' + z + c.slice(1)\n } else {\n c = z + c\n }\n }\n }\n }\n N.push(c)\n }\n } else {\n N = []\n\n for (let j = 0; j < n.length; j++) {\n N.push.apply(N, expand_(n[j] as string, false))\n }\n }\n\n for (let j = 0; j < N.length; j++) {\n for (let k = 0; k < post.length; k++) {\n const expansion = pre + N[j] + post[k]\n if (!isTop || isSequence || expansion) {\n expansions.push(expansion)\n }\n }\n }\n }\n\n return expansions\n}\n"]} \ No newline at end of file diff --git a/node_modules/@isaacs/brace-expansion/dist/esm/package.json b/node_modules/@isaacs/brace-expansion/dist/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/@isaacs/brace-expansion/package.json b/node_modules/@isaacs/brace-expansion/package.json new file mode 100644 index 0000000..cf10356 --- /dev/null +++ b/node_modules/@isaacs/brace-expansion/package.json @@ -0,0 +1,71 @@ +{ + "name": "@isaacs/brace-expansion", + "description": "Brace expansion as known from sh/bash", + "version": "5.0.0", + "files": [ + "dist" + ], + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "type": "module", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --loglevel warn", + "benchmark": "node benchmark/index.js", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "semi": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.2", + "@types/node": "^24.0.0", + "mkdirp": "^3.0.1", + "prettier": "^3.3.2", + "tap": "^21.1.0", + "tshy": "^3.0.2", + "typedoc": "^0.28.5" + }, + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "license": "MIT", + "engines": { + "node": "20 || >=22" + }, + "tshy": { + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "module": "./dist/esm/index.js" +} diff --git a/node_modules/asynckit/LICENSE b/node_modules/asynckit/LICENSE new file mode 100644 index 0000000..c9eca5d --- /dev/null +++ b/node_modules/asynckit/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Alex Indigo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/asynckit/README.md b/node_modules/asynckit/README.md new file mode 100644 index 0000000..ddcc7e6 --- /dev/null +++ b/node_modules/asynckit/README.md @@ -0,0 +1,233 @@ +# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit) + +Minimal async jobs utility library, with streams support. + +[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit) + +[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master) +[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit) +[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit) + + + +AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. +Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. + +It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. + +| compression | size | +| :----------------- | -------: | +| asynckit.js | 12.34 kB | +| asynckit.min.js | 4.11 kB | +| asynckit.min.js.gz | 1.47 kB | + + +## Install + +```sh +$ npm install --save asynckit +``` + +## Examples + +### Parallel Jobs + +Runs iterator over provided array in parallel. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will terminate rest of the active jobs (if abort function is provided) +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var parallel = require('asynckit').parallel + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , target = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// async job accepts one element from the array +// and a callback function +function asyncJob(item, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var parallel = require('asynckit/parallel') + , assert = require('assert') + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] + , target = [] + , keys = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); + assert.deepEqual(keys, expectedKeys); +}); + +// supports full value, key, callback (shortcut) interface +function asyncJob(item, key, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + keys.push(key); + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). + +### Serial Jobs + +Runs iterator over provided array sequentially. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will not proceed to the rest of the items in the list +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var serial = require('asynckit/serial') + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// extended interface (item, key, callback) +// also supported for arrays +function asyncJob(item, key, cb) +{ + target.push(key); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var serial = require('asynckit').serial + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , target = [] + ; + + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// shortcut interface (item, callback) +// works for object as well as for the arrays +function asyncJob(item, cb) +{ + target.push(item); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). + +_Note: Since _object_ is an _unordered_ collection of properties, +it may produce unexpected results with sequential iterations. +Whenever order of the jobs' execution is important please use `serialOrdered` method._ + +### Ordered Serial Iterations + +TBD + +For example [compare-property](compare-property) package. + +### Streaming interface + +TBD + +## Want to Know More? + +More examples can be found in [test folder](test/). + +Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. + +## License + +AsyncKit is licensed under the MIT license. diff --git a/node_modules/asynckit/bench.js b/node_modules/asynckit/bench.js new file mode 100644 index 0000000..c612f1a --- /dev/null +++ b/node_modules/asynckit/bench.js @@ -0,0 +1,76 @@ +/* eslint no-console: "off" */ + +var asynckit = require('./') + , async = require('async') + , assert = require('assert') + , expected = 0 + ; + +var Benchmark = require('benchmark'); +var suite = new Benchmark.Suite; + +var source = []; +for (var z = 1; z < 100; z++) +{ + source.push(z); + expected += z; +} + +suite +// add tests + +.add('async.map', function(deferred) +{ + var total = 0; + + async.map(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +.add('asynckit.parallel', function(deferred) +{ + var total = 0; + + asynckit.parallel(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +// add listeners +.on('cycle', function(ev) +{ + console.log(String(ev.target)); +}) +.on('complete', function() +{ + console.log('Fastest is ' + this.filter('fastest').map('name')); +}) +// run async +.run({ 'async': true }); diff --git a/node_modules/asynckit/index.js b/node_modules/asynckit/index.js new file mode 100644 index 0000000..455f945 --- /dev/null +++ b/node_modules/asynckit/index.js @@ -0,0 +1,6 @@ +module.exports = +{ + parallel : require('./parallel.js'), + serial : require('./serial.js'), + serialOrdered : require('./serialOrdered.js') +}; diff --git a/node_modules/asynckit/lib/abort.js b/node_modules/asynckit/lib/abort.js new file mode 100644 index 0000000..114367e --- /dev/null +++ b/node_modules/asynckit/lib/abort.js @@ -0,0 +1,29 @@ +// API +module.exports = abort; + +/** + * Aborts leftover active jobs + * + * @param {object} state - current state object + */ +function abort(state) +{ + Object.keys(state.jobs).forEach(clean.bind(state)); + + // reset leftover jobs + state.jobs = {}; +} + +/** + * Cleans up leftover job by invoking abort function for the provided job id + * + * @this state + * @param {string|number} key - job id to abort + */ +function clean(key) +{ + if (typeof this.jobs[key] == 'function') + { + this.jobs[key](); + } +} diff --git a/node_modules/asynckit/lib/async.js b/node_modules/asynckit/lib/async.js new file mode 100644 index 0000000..7f1288a --- /dev/null +++ b/node_modules/asynckit/lib/async.js @@ -0,0 +1,34 @@ +var defer = require('./defer.js'); + +// API +module.exports = async; + +/** + * Runs provided callback asynchronously + * even if callback itself is not + * + * @param {function} callback - callback to invoke + * @returns {function} - augmented callback + */ +function async(callback) +{ + var isAsync = false; + + // check if async happened + defer(function() { isAsync = true; }); + + return function async_callback(err, result) + { + if (isAsync) + { + callback(err, result); + } + else + { + defer(function nextTick_callback() + { + callback(err, result); + }); + } + }; +} diff --git a/node_modules/asynckit/lib/defer.js b/node_modules/asynckit/lib/defer.js new file mode 100644 index 0000000..b67110c --- /dev/null +++ b/node_modules/asynckit/lib/defer.js @@ -0,0 +1,26 @@ +module.exports = defer; + +/** + * Runs provided function on next iteration of the event loop + * + * @param {function} fn - function to run + */ +function defer(fn) +{ + var nextTick = typeof setImmediate == 'function' + ? setImmediate + : ( + typeof process == 'object' && typeof process.nextTick == 'function' + ? process.nextTick + : null + ); + + if (nextTick) + { + nextTick(fn); + } + else + { + setTimeout(fn, 0); + } +} diff --git a/node_modules/asynckit/lib/iterate.js b/node_modules/asynckit/lib/iterate.js new file mode 100644 index 0000000..5d2839a --- /dev/null +++ b/node_modules/asynckit/lib/iterate.js @@ -0,0 +1,75 @@ +var async = require('./async.js') + , abort = require('./abort.js') + ; + +// API +module.exports = iterate; + +/** + * Iterates over each job object + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {object} state - current job status + * @param {function} callback - invoked when all elements processed + */ +function iterate(list, iterator, state, callback) +{ + // store current index + var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; + + state.jobs[key] = runJob(iterator, key, list[key], function(error, output) + { + // don't repeat yourself + // skip secondary callbacks + if (!(key in state.jobs)) + { + return; + } + + // clean up jobs + delete state.jobs[key]; + + if (error) + { + // don't process rest of the results + // stop still active jobs + // and reset the list + abort(state); + } + else + { + state.results[key] = output; + } + + // return salvaged results + callback(error, state.results); + }); +} + +/** + * Runs iterator over provided job element + * + * @param {function} iterator - iterator to invoke + * @param {string|number} key - key/index of the element in the list of jobs + * @param {mixed} item - job description + * @param {function} callback - invoked after iterator is done with the job + * @returns {function|mixed} - job abort function or something else + */ +function runJob(iterator, key, item, callback) +{ + var aborter; + + // allow shortcut if iterator expects only two arguments + if (iterator.length == 2) + { + aborter = iterator(item, async(callback)); + } + // otherwise go with full three arguments + else + { + aborter = iterator(item, key, async(callback)); + } + + return aborter; +} diff --git a/node_modules/asynckit/lib/readable_asynckit.js b/node_modules/asynckit/lib/readable_asynckit.js new file mode 100644 index 0000000..78ad240 --- /dev/null +++ b/node_modules/asynckit/lib/readable_asynckit.js @@ -0,0 +1,91 @@ +var streamify = require('./streamify.js') + , defer = require('./defer.js') + ; + +// API +module.exports = ReadableAsyncKit; + +/** + * Base constructor for all streams + * used to hold properties/methods + */ +function ReadableAsyncKit() +{ + ReadableAsyncKit.super_.apply(this, arguments); + + // list of active jobs + this.jobs = {}; + + // add stream methods + this.destroy = destroy; + this._start = _start; + this._read = _read; +} + +/** + * Destroys readable stream, + * by aborting outstanding jobs + * + * @returns {void} + */ +function destroy() +{ + if (this.destroyed) + { + return; + } + + this.destroyed = true; + + if (typeof this.terminator == 'function') + { + this.terminator(); + } +} + +/** + * Starts provided jobs in async manner + * + * @private + */ +function _start() +{ + // first argument – runner function + var runner = arguments[0] + // take away first argument + , args = Array.prototype.slice.call(arguments, 1) + // second argument - input data + , input = args[0] + // last argument - result callback + , endCb = streamify.callback.call(this, args[args.length - 1]) + ; + + args[args.length - 1] = endCb; + // third argument - iterator + args[1] = streamify.iterator.call(this, args[1]); + + // allow time for proper setup + defer(function() + { + if (!this.destroyed) + { + this.terminator = runner.apply(null, args); + } + else + { + endCb(null, Array.isArray(input) ? [] : {}); + } + }.bind(this)); +} + + +/** + * Implement _read to comply with Readable streams + * Doesn't really make sense for flowing object mode + * + * @private + */ +function _read() +{ + +} diff --git a/node_modules/asynckit/lib/readable_parallel.js b/node_modules/asynckit/lib/readable_parallel.js new file mode 100644 index 0000000..5d2929f --- /dev/null +++ b/node_modules/asynckit/lib/readable_parallel.js @@ -0,0 +1,25 @@ +var parallel = require('../parallel.js'); + +// API +module.exports = ReadableParallel; + +/** + * Streaming wrapper to `asynckit.parallel` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableParallel(list, iterator, callback) +{ + if (!(this instanceof ReadableParallel)) + { + return new ReadableParallel(list, iterator, callback); + } + + // turn on object mode + ReadableParallel.super_.call(this, {objectMode: true}); + + this._start(parallel, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial.js b/node_modules/asynckit/lib/readable_serial.js new file mode 100644 index 0000000..7822698 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial.js @@ -0,0 +1,25 @@ +var serial = require('../serial.js'); + +// API +module.exports = ReadableSerial; + +/** + * Streaming wrapper to `asynckit.serial` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerial(list, iterator, callback) +{ + if (!(this instanceof ReadableSerial)) + { + return new ReadableSerial(list, iterator, callback); + } + + // turn on object mode + ReadableSerial.super_.call(this, {objectMode: true}); + + this._start(serial, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial_ordered.js b/node_modules/asynckit/lib/readable_serial_ordered.js new file mode 100644 index 0000000..3de89c4 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial_ordered.js @@ -0,0 +1,29 @@ +var serialOrdered = require('../serialOrdered.js'); + +// API +module.exports = ReadableSerialOrdered; +// expose sort helpers +module.exports.ascending = serialOrdered.ascending; +module.exports.descending = serialOrdered.descending; + +/** + * Streaming wrapper to `asynckit.serialOrdered` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerialOrdered(list, iterator, sortMethod, callback) +{ + if (!(this instanceof ReadableSerialOrdered)) + { + return new ReadableSerialOrdered(list, iterator, sortMethod, callback); + } + + // turn on object mode + ReadableSerialOrdered.super_.call(this, {objectMode: true}); + + this._start(serialOrdered, list, iterator, sortMethod, callback); +} diff --git a/node_modules/asynckit/lib/state.js b/node_modules/asynckit/lib/state.js new file mode 100644 index 0000000..cbea7ad --- /dev/null +++ b/node_modules/asynckit/lib/state.js @@ -0,0 +1,37 @@ +// API +module.exports = state; + +/** + * Creates initial state object + * for iteration over list + * + * @param {array|object} list - list to iterate over + * @param {function|null} sortMethod - function to use for keys sort, + * or `null` to keep them as is + * @returns {object} - initial state object + */ +function state(list, sortMethod) +{ + var isNamedList = !Array.isArray(list) + , initState = + { + index : 0, + keyedList: isNamedList || sortMethod ? Object.keys(list) : null, + jobs : {}, + results : isNamedList ? {} : [], + size : isNamedList ? Object.keys(list).length : list.length + } + ; + + if (sortMethod) + { + // sort array keys based on it's values + // sort object's keys just on own merit + initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) + { + return sortMethod(list[a], list[b]); + }); + } + + return initState; +} diff --git a/node_modules/asynckit/lib/streamify.js b/node_modules/asynckit/lib/streamify.js new file mode 100644 index 0000000..f56a1c9 --- /dev/null +++ b/node_modules/asynckit/lib/streamify.js @@ -0,0 +1,141 @@ +var async = require('./async.js'); + +// API +module.exports = { + iterator: wrapIterator, + callback: wrapCallback +}; + +/** + * Wraps iterators with long signature + * + * @this ReadableAsyncKit# + * @param {function} iterator - function to wrap + * @returns {function} - wrapped function + */ +function wrapIterator(iterator) +{ + var stream = this; + + return function(item, key, cb) + { + var aborter + , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) + ; + + stream.jobs[key] = wrappedCb; + + // it's either shortcut (item, cb) + if (iterator.length == 2) + { + aborter = iterator(item, wrappedCb); + } + // or long format (item, key, cb) + else + { + aborter = iterator(item, key, wrappedCb); + } + + return aborter; + }; +} + +/** + * Wraps provided callback function + * allowing to execute snitch function before + * real callback + * + * @this ReadableAsyncKit# + * @param {function} callback - function to wrap + * @returns {function} - wrapped function + */ +function wrapCallback(callback) +{ + var stream = this; + + var wrapped = function(error, result) + { + return finisher.call(stream, error, result, callback); + }; + + return wrapped; +} + +/** + * Wraps provided iterator callback function + * makes sure snitch only called once, + * but passes secondary calls to the original callback + * + * @this ReadableAsyncKit# + * @param {function} callback - callback to wrap + * @param {number|string} key - iteration key + * @returns {function} wrapped callback + */ +function wrapIteratorCallback(callback, key) +{ + var stream = this; + + return function(error, output) + { + // don't repeat yourself + if (!(key in stream.jobs)) + { + callback(error, output); + return; + } + + // clean up jobs + delete stream.jobs[key]; + + return streamer.call(stream, error, {key: key, value: output}, callback); + }; +} + +/** + * Stream wrapper for iterator callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects iterator results + */ +function streamer(error, output, callback) +{ + if (error && !this.error) + { + this.error = error; + this.pause(); + this.emit('error', error); + // send back value only, as expected + callback(error, output && output.value); + return; + } + + // stream stuff + this.push(output); + + // back to original track + // send back value only, as expected + callback(error, output && output.value); +} + +/** + * Stream wrapper for finishing callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects final results + */ +function finisher(error, output, callback) +{ + // signal end of the stream + // only for successfully finished streams + if (!error) + { + this.push(null); + } + + // back to original track + callback(error, output); +} diff --git a/node_modules/asynckit/lib/terminator.js b/node_modules/asynckit/lib/terminator.js new file mode 100644 index 0000000..d6eb992 --- /dev/null +++ b/node_modules/asynckit/lib/terminator.js @@ -0,0 +1,29 @@ +var abort = require('./abort.js') + , async = require('./async.js') + ; + +// API +module.exports = terminator; + +/** + * Terminates jobs in the attached state context + * + * @this AsyncKitState# + * @param {function} callback - final callback to invoke after termination + */ +function terminator(callback) +{ + if (!Object.keys(this.jobs).length) + { + return; + } + + // fast forward iteration index + this.index = this.size; + + // abort jobs + abort(this); + + // send back results we have so far + async(callback)(null, this.results); +} diff --git a/node_modules/asynckit/package.json b/node_modules/asynckit/package.json new file mode 100644 index 0000000..51147d6 --- /dev/null +++ b/node_modules/asynckit/package.json @@ -0,0 +1,63 @@ +{ + "name": "asynckit", + "version": "0.4.0", + "description": "Minimal async jobs utility library, with streams support", + "main": "index.js", + "scripts": { + "clean": "rimraf coverage", + "lint": "eslint *.js lib/*.js test/*.js", + "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", + "win-test": "tape test/test-*.js", + "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", + "report": "istanbul report", + "size": "browserify index.js | size-table asynckit", + "debug": "tape test/test-*.js" + }, + "pre-commit": [ + "clean", + "lint", + "test", + "browser", + "report", + "size" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/alexindigo/asynckit.git" + }, + "keywords": [ + "async", + "jobs", + "parallel", + "serial", + "iterator", + "array", + "object", + "stream", + "destroy", + "terminate", + "abort" + ], + "author": "Alex Indigo ", + "license": "MIT", + "bugs": { + "url": "https://github.com/alexindigo/asynckit/issues" + }, + "homepage": "https://github.com/alexindigo/asynckit#readme", + "devDependencies": { + "browserify": "^13.0.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^2.11.9", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.7", + "pre-commit": "^1.1.3", + "reamde": "^1.1.0", + "rimraf": "^2.5.2", + "size-table": "^0.2.0", + "tap-spec": "^4.1.1", + "tape": "^4.5.1" + }, + "dependencies": {} +} diff --git a/node_modules/asynckit/parallel.js b/node_modules/asynckit/parallel.js new file mode 100644 index 0000000..3c50344 --- /dev/null +++ b/node_modules/asynckit/parallel.js @@ -0,0 +1,43 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = parallel; + +/** + * Runs iterator over provided array elements in parallel + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function parallel(list, iterator, callback) +{ + var state = initState(list); + + while (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, function(error, result) + { + if (error) + { + callback(error, result); + return; + } + + // looks like it's the last one + if (Object.keys(state.jobs).length === 0) + { + callback(null, state.results); + return; + } + }); + + state.index++; + } + + return terminator.bind(state, callback); +} diff --git a/node_modules/asynckit/serial.js b/node_modules/asynckit/serial.js new file mode 100644 index 0000000..6cd949a --- /dev/null +++ b/node_modules/asynckit/serial.js @@ -0,0 +1,17 @@ +var serialOrdered = require('./serialOrdered.js'); + +// Public API +module.exports = serial; + +/** + * Runs iterator over provided array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serial(list, iterator, callback) +{ + return serialOrdered(list, iterator, null, callback); +} diff --git a/node_modules/asynckit/serialOrdered.js b/node_modules/asynckit/serialOrdered.js new file mode 100644 index 0000000..607eafe --- /dev/null +++ b/node_modules/asynckit/serialOrdered.js @@ -0,0 +1,75 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = serialOrdered; +// sorting helpers +module.exports.ascending = ascending; +module.exports.descending = descending; + +/** + * Runs iterator over provided sorted array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serialOrdered(list, iterator, sortMethod, callback) +{ + var state = initState(list, sortMethod); + + iterate(list, iterator, state, function iteratorHandler(error, result) + { + if (error) + { + callback(error, result); + return; + } + + state.index++; + + // are we there yet? + if (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, iteratorHandler); + return; + } + + // done here + callback(null, state.results); + }); + + return terminator.bind(state, callback); +} + +/* + * -- Sort methods + */ + +/** + * sort helper to sort array elements in ascending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function ascending(a, b) +{ + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * sort helper to sort array elements in descending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function descending(a, b) +{ + return -1 * ascending(a, b); +} diff --git a/node_modules/asynckit/stream.js b/node_modules/asynckit/stream.js new file mode 100644 index 0000000..d43465f --- /dev/null +++ b/node_modules/asynckit/stream.js @@ -0,0 +1,21 @@ +var inherits = require('util').inherits + , Readable = require('stream').Readable + , ReadableAsyncKit = require('./lib/readable_asynckit.js') + , ReadableParallel = require('./lib/readable_parallel.js') + , ReadableSerial = require('./lib/readable_serial.js') + , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') + ; + +// API +module.exports = +{ + parallel : ReadableParallel, + serial : ReadableSerial, + serialOrdered : ReadableSerialOrdered, +}; + +inherits(ReadableAsyncKit, Readable); + +inherits(ReadableParallel, ReadableAsyncKit); +inherits(ReadableSerial, ReadableAsyncKit); +inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/node_modules/axios/CHANGELOG.md b/node_modules/axios/CHANGELOG.md new file mode 100644 index 0000000..5c92fb3 --- /dev/null +++ b/node_modules/axios/CHANGELOG.md @@ -0,0 +1,1014 @@ +# Changelog + +## [0.28.1](https://github.com/axios/axios/compare/v0.28.0...v0.28.1) (2024-03-24) + +## Release notes: +### Bug Fixes + +* fix(backport): custom params serializer support (#6263) +* fix(backport): uncaught ReferenceError `req` is not defined (#6307) + +## [0.28.0](https://github.com/axios/axios/compare/v0.27.2...v0.28.0) (2024-02-12) + +## Release notes: +### Bug Fixes + +* fix(security): fixed CVE-2023-45857 by backporting `withXSRFToken` option to v0.x (#6091) + +### Backports from v1.x: + +* Allow null indexes on formSerializer and paramsSerializer v0.x (#4961) +* Fixing content-type header repeated #4745 +* Fixed timeout error message for HTTP 4738 +* Added `axios.formToJSON` method (#4735) +* URL params serializer (#4734) +* Fixed toFormData Blob issue on node>v17 #4728 +* Adding types for progress event callbacks #4675 +* Fixed max body length defaults #4731 +* Added data URL support for node.js (#4725) +* Added isCancel type assert (#4293) +* Added the ability for the `url-encoded-form` serializer to respect the `formSerializer` config (#4721) +* Add `string[]` to `AxiosRequestHeaders` type (#4322) +* Allow type definition for axios instance methods (#4224) +* Fixed `AxiosError` stack capturing; (#4718) +* Fixed `AxiosError` status code type; (#4717) +* Adding Canceler parameters config and request (#4711) +* fix(types): allow to specify partial default headers for instance creation (#4185) +* Added `blob` to the list of protocols supported by the browser (#4678) +* Fixing Z_BUF_ERROR when no content (#4701) +* Fixed race condition on immediate requests cancellation (#4261) +* Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an Axios instance https://github.com/axios/axios/pull/4248 +* Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill (#4229) +* Fix TS definition for AxiosRequestTransformer (#4201) +* Use type alias instead of interface for AxiosPromise (#4505) +* Include request and config when creating a CanceledError instance (#4659) +* Added generic TS types for the exposed toFormData helper (#4668) +* Optimized the code that checks cancellation (#4587) +* Replaced webpack with rollup (#4596) +* Added stack trace to AxiosError (#4624) +* Updated AxiosError.config to be optional in the type definition (#4665) +* Removed incorrect argument for NetworkError constructor (#4656) + +## 0.27.2 (April 27, 2022) + +Fixes and Functionality: + +- Fixed FormData posting in browser environment by reverting #3785 ([#4640](https://github.com/axios/axios/pull/4640)) +- Enhanced protocol parsing implementation ([#4639](https://github.com/axios/axios/pull/4639)) +- Fixed bundle size + +## 0.27.1 (April 26, 2022) + +Fixes and Functionality: + +- Removed import of url module in browser build due to huge size overhead and builds being broken ([#4594](https://github.com/axios/axios/pull/4594)) +- Bumped follow-redirects to ^1.14.9 ([#4615](https://github.com/axios/axios/pull/4615)) + +## 0.27.0 (April 25, 2022) + +Breaking changes: + +- New toFormData helper function that allows the implementor to pass an object and allow axios to convert it to FormData ([#3757](https://github.com/axios/axios/pull/3757)) +- Removed functionality that removed the the `Content-Type` request header when passing FormData ([#3785](https://github.com/axios/axios/pull/3785)) +- **(*)** Refactored error handling implementing AxiosError as a constructor, this is a large change to error handling on the whole ([#3645](https://github.com/axios/axios/pull/3645)) +- Separated responsibility for FormData instantiation between `transformRequest` and `toFormData` ([#4470](https://github.com/axios/axios/pull/4470)) +- **(*)** Improved and fixed multiple issues with FormData support ([#4448](https://github.com/axios/axios/pull/4448)) + +QOL and DevX improvements: + +- Added a multipart/form-data testing playground allowing contributors to debug changes easily ([#4465](https://github.com/axios/axios/pull/4465)) + +Fixes and Functionality: + +- Refactored project file structure to avoid circular imports ([#4515](https://github.com/axios/axios/pull/4516)) & ([#4516](https://github.com/axios/axios/pull/4516)) +- Bumped follow-redirects to ^1.14.9 ([#4562](https://github.com/axios/axios/pull/4562)) + +Internal and Tests: + +- Updated dev dependencies to latest version + +Documentation: + +- Fixing incorrect link in changelog ([#4551](https://github.com/axios/axios/pull/4551)) + +Notes: + +- **(*)** Please read these pull requests before updating, these changes are very impactful and far reaching. + +## 0.26.1 (March 9, 2022) + +Fixes and Functionality: + +- Refactored project file structure to avoid circular imports ([#4220](https://github.com/axios/axios/pull/4220)) + +## 0.26.0 (February 13, 2022) + +Fixes and Functionality: + +- Fixed The timeoutErrorMessage property in config not work with Node.js ([#3581](https://github.com/axios/axios/pull/3581)) +- Added errors to be displayed when the query parsing process itself fails ([#3961](https://github.com/axios/axios/pull/3961)) +- Fix/remove url required ([#4426](https://github.com/axios/axios/pull/4426)) +- Update follow-redirects dependency due to Vulnerability ([#4462](https://github.com/axios/axios/pull/4462)) +- Bump karma from 6.3.11 to 6.3.14 ([#4461](https://github.com/axios/axios/pull/4461)) +- Bump follow-redirects from 1.14.7 to 1.14.8 ([#4473](https://github.com/axios/axios/pull/4473)) + +## 0.25.0 (January 18, 2022) + +Breaking changes: + +- Fixing maxBodyLength enforcement ([#3786](https://github.com/axios/axios/pull/3786)) +- Don't rely on strict mode behavior for arguments ([#3470](https://github.com/axios/axios/pull/3470)) +- Adding error handling when missing url ([#3791](https://github.com/axios/axios/pull/3791)) +- Update isAbsoluteURL.js removing escaping of non-special characters ([#3809](https://github.com/axios/axios/pull/3809)) +- Use native Array.isArray() in utils.js ([#3836](https://github.com/axios/axios/pull/3836)) +- Adding error handling inside stream end callback ([#3967](https://github.com/axios/axios/pull/3967)) + +Fixes and Functionality: + +- Added aborted even handler ([#3916](https://github.com/axios/axios/pull/3916)) +- Header types expanded allowing `boolean` and `number` types ([#4144](https://github.com/axios/axios/pull/4144)) +- Fix cancel signature allowing cancel message to be `undefined` ([#3153](https://github.com/axios/axios/pull/3153)) +- Updated type checks to be formulated better ([#3342](https://github.com/axios/axios/pull/3342)) +- Avoid unnecessary buffer allocations ([#3321](https://github.com/axios/axios/pull/3321)) +- Adding a socket handler to keep TCP connection live when processing long living requests ([#3422](https://github.com/axios/axios/pull/3422)) +- Added toFormData helper function ([#3757](https://github.com/axios/axios/pull/3757)) +- Adding responseEncoding prop type in AxiosRequestConfig ([#3918](https://github.com/axios/axios/pull/3918)) + +Internal and Tests: + +- Adding axios-test-instance to ecosystem ([#3496](https://github.com/axios/axios/pull/3496)) +- Optimize the logic of isAxiosError ([#3546](https://github.com/axios/axios/pull/3546)) +- Add tests and documentation to display how multiple inceptors work ([#3564](https://github.com/axios/axios/pull/3564)) +- Updating follow-redirects to version 1.14.7 ([#4379](https://github.com/axios/axios/pull/4379)) + +Documentation: + +- Fixing changelog to show correct pull request ([#4219](https://github.com/axios/axios/pull/4219)) +- Update upgrade guide for https proxy setting ([#3604](https://github.com/axios/axios/pull/3604)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Rijk van Zanten](https://github.com/rijkvanzanten) +- [Kohta Ito](https://github.com/koh110) +- [Brandon Faulkner](https://github.com/bfaulk96) +- [Stefano Magni](https://github.com/NoriSte) +- [enofan](https://github.com/fanguangyi) +- [Andrey Pechkurov](https://github.com/puzpuzpuz) +- [Doowonee](https://github.com/doowonee) +- [Emil Broman](https://github.com/emilbroman-eqt) +- [Remco Haszing](https://github.com/remcohaszing) +- [Black-Hole](https://github.com/BlackHole1) +- [Wolfram Kriesing](https://github.com/wolframkriesing) +- [Andrew Ovens](https://github.com/repl-andrew-ovens) +- [Paulo Renato](https://github.com/PauloRSF) +- [Ben Carp](https://github.com/carpben) +- [Hirotaka Tagawa](https://github.com/wafuwafu13) +- [狼族小狈](https://github.com/lzxb) +- [C. Lewis](https://github.com/ctjlewis) +- [Felipe Carvalho](https://github.com/FCarvalhoVII) +- [Daniel](https://github.com/djs113) +- [Gustavo Sales](https://github.com/gussalesdev) + +## 0.24.0 (October 25, 2021) + +Breaking changes: + +- Revert: change type of AxiosResponse to any, please read lengthy discussion here: ([#4141](https://github.com/axios/axios/issues/4141)) pull request: ([#4186](https://github.com/axios/axios/pull/4186)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Rodry](https://github.com/ImRodry) +- [Remco Haszing](https://github.com/remcohaszing) +- [Isaiah Thomason](https://github.com/ITenthusiasm) + +## 0.23.0 (October 12, 2021) + +Breaking changes: + +- Distinguish request and response data types ([#4116](https://github.com/axios/axios/pull/4116)) +- Change never type to unknown ([#4142](https://github.com/axios/axios/pull/4142)) +- Fixed TransitionalOptions typings ([#4147](https://github.com/axios/axios/pull/4147)) + +Fixes and Functionality: + +- Adding globalObject: 'this' to webpack config ([#3176](https://github.com/axios/axios/pull/3176)) +- Adding insecureHTTPParser type to AxiosRequestConfig ([#4066](https://github.com/axios/axios/pull/4066)) +- Fix missing semicolon in typings ([#4115](https://github.com/axios/axios/pull/4115)) +- Fix response headers types ([#4136](https://github.com/axios/axios/pull/4136)) + +Internal and Tests: + +- Improve timeout error when timeout is browser default ([#3209](https://github.com/axios/axios/pull/3209)) +- Fix node version on CI ([#4069](https://github.com/axios/axios/pull/4069)) +- Added testing to TypeScript portion of project ([#4140](https://github.com/axios/axios/pull/4140)) + +Documentation: + +- Rename Angular to AngularJS ([#4114](https://github.com/axios/axios/pull/4114)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Evan-Finkelstein](https://github.com/Evan-Finkelstein) +- [Paweł Szymański](https://github.com/Jezorko) +- [Dobes Vandermeer](https://github.com/dobesv) +- [Claas Augner](https://github.com/caugner) +- [Remco Haszing](https://github.com/remcohaszing) +- [Evgeniy](https://github.com/egmen) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) + +## 0.22.0 (October 01, 2021) + +Fixes and Functionality: + +- Caseless header comparing in HTTP adapter ([#2880](https://github.com/axios/axios/pull/2880)) +- Avoid package.json import fixing issues and warnings related to this ([#4041](https://github.com/axios/axios/pull/4041)), ([#4065](https://github.com/axios/axios/pull/4065)) +- Fixed cancelToken leakage and added AbortController support ([#3305](https://github.com/axios/axios/pull/3305)) +- Updating CI to run on release branches +- Bump follow redirects version +- Fixed default transitional config for custom Axios instance; ([#4052](https://github.com/axios/axios/pull/4052)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Matt R. Wilson](https://github.com/mastermatt) +- [Xianming Zhong](https://github.com/chinesedfan) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) + +## 0.21.4 (September 6, 2021) + +Fixes and Functionality: + +- Fixing JSON transform when data is stringified. Providing backward compatibility and complying to the JSON RFC standard ([#4020](https://github.com/axios/axios/pull/4020)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Guillaume Fortaine](https://github.com/gfortaine) +- [Yusuke Kawasaki](https://github.com/kawanet) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) + +## 0.21.3 (September 4, 2021) + +Fixes and Functionality: + +- Fixing response interceptor not being called when request interceptor is attached ([#4013](https://github.com/axios/axios/pull/4013)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Julian Hollmann](https://github.com/nerdbeere) + +## 0.21.2 (September 4, 2021) + +Fixes and Functionality: + +- Updating axios requests to be delayed by pre-emptive promise creation ([#2702](https://github.com/axios/axios/pull/2702)) +- Adding "synchronous" and "runWhen" options to interceptors api ([#2702](https://github.com/axios/axios/pull/2702)) +- Updating of transformResponse ([#3377](https://github.com/axios/axios/pull/3377)) +- Adding ability to omit User-Agent header ([#3703](https://github.com/axios/axios/pull/3703)) +- Adding multiple JSON improvements ([#3688](https://github.com/axios/axios/pull/3688), [#3763](https://github.com/axios/axios/pull/3763)) +- Fixing quadratic runtime and extra memory usage when setting a maxContentLength ([#3738](https://github.com/axios/axios/pull/3738)) +- Adding parseInt to config.timeout ([#3781](https://github.com/axios/axios/pull/3781)) +- Adding custom return type support to interceptor ([#3783](https://github.com/axios/axios/pull/3783)) +- Adding security fix for ReDoS vulnerability ([#3980](https://github.com/axios/axios/pull/3980)) + +Internal and Tests: + +- Updating build dev dependencies ([#3401](https://github.com/axios/axios/pull/3401)) +- Fixing builds running on Travis CI ([#3538](https://github.com/axios/axios/pull/3538)) +- Updating follow redirect version ([#3694](https://github.com/axios/axios/pull/3694), [#3771](https://github.com/axios/axios/pull/3771)) +- Updating karma sauce launcher to fix failing sauce tests ([#3712](https://github.com/axios/axios/pull/3712), [#3717](https://github.com/axios/axios/pull/3717)) +- Updating content-type header for application/json to not contain charset field, according do RFC 8259 ([#2154](https://github.com/axios/axios/pull/2154)) +- Fixing tests by bumping karma-sauce-launcher version ([#3813](https://github.com/axios/axios/pull/3813)) +- Changing testing process from Travis CI to GitHub Actions ([#3938](https://github.com/axios/axios/pull/3938)) + +Documentation: + +- Updating documentation around the use of `AUTH_TOKEN` with multiple domain endpoints ([#3539](https://github.com/axios/axios/pull/3539)) +- Remove duplication of item in changelog ([#3523](https://github.com/axios/axios/pull/3523)) +- Fixing grammatical errors ([#2642](https://github.com/axios/axios/pull/2642)) +- Fixing spelling error ([#3567](https://github.com/axios/axios/pull/3567)) +- Moving gitpod mention ([#2637](https://github.com/axios/axios/pull/2637)) +- Adding new axios documentation website link ([#3681](https://github.com/axios/axios/pull/3681), [#3707](https://github.com/axios/axios/pull/3707)) +- Updating documentation around dispatching requests ([#3772](https://github.com/axios/axios/pull/3772)) +- Adding documentation for the type guard isAxiosError ([#3767](https://github.com/axios/axios/pull/3767)) +- Adding explanation of cancel token ([#3803](https://github.com/axios/axios/pull/3803)) +- Updating CI status badge ([#3953](https://github.com/axios/axios/pull/3953)) +- Fixing errors with JSON documentation ([#3936](https://github.com/axios/axios/pull/3936)) +- Fixing README typo under Request Config ([#3825](https://github.com/axios/axios/pull/3825)) +- Adding axios-multi-api to the ecosystem file ([#3817](https://github.com/axios/axios/pull/3817)) +- Adding SECURITY.md to properly disclose security vulnerabilities ([#3981](https://github.com/axios/axios/pull/3981)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- [Jay](mailto:jasonsaayman@gmail.com) +- [Sasha Korotkov](https://github.com/SashaKoro) +- [Daniel Lopretto](https://github.com/timemachine3030) +- [Mike Bishop](https://github.com/MikeBishop) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Mark](https://github.com/bimbiltu) +- [Philipe Gouveia Paixão](https://github.com/piiih) +- [hippo](https://github.com/hippo2cat) +- [ready-research](https://github.com/ready-research) +- [Xianming Zhong](https://github.com/chinesedfan) +- [Christopher Chrapka](https://github.com/OJezu) +- [Brian Anglin](https://github.com/anglinb) +- [Kohta Ito](https://github.com/koh110) +- [Ali Clark](https://github.com/aliclark) +- [caikan](https://github.com/caikan) +- [Elina Gorshkova](https://github.com/elinagorshkova) +- [Ryota Ikezawa](https://github.com/paveg) +- [Nisar Hassan Naqvi](https://github.com/nisarhassan12) +- [Jake](https://github.com/codemaster138) +- [TagawaHirotaka](https://github.com/wafuwafu13) +- [Johannes Jarbratt](https://github.com/johachi) +- [Mo Sattler](https://github.com/MoSattler) +- [Sam Carlton](https://github.com/ThatGuySam) +- [Matt Czapliński](https://github.com/MattCCC) +- [Ziding Zhang](https://github.com/zidingz) + +## 0.21.1 (December 21, 2020) + +Fixes and Functionality: + +- Hotfix: Prevent SSRF ([#3410](https://github.com/axios/axios/pull/3410)) +- Protocol not parsed when setting proxy config from env vars ([#3070](https://github.com/axios/axios/pull/3070)) +- Updating axios in types to be lower case ([#2797](https://github.com/axios/axios/pull/2797)) +- Adding a type guard for `AxiosError` ([#2949](https://github.com/axios/axios/pull/2949)) + +Internal and Tests: + +- Remove the skipping of the `socket` http test ([#3364](https://github.com/axios/axios/pull/3364)) +- Use different socket for Win32 test ([#3375](https://github.com/axios/axios/pull/3375)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- Daniel Lopretto +- Jason Kwok +- Jay +- Jonathan Foster +- Remco Haszing +- Xianming Zhong + +## 0.21.0 (October 23, 2020) + +Fixes and Functionality: + +- Fixing requestHeaders.Authorization ([#3287](https://github.com/axios/axios/pull/3287)) +- Fixing node types ([#3237](https://github.com/axios/axios/pull/3237)) +- Fixing axios.delete ignores config.data ([#3282](https://github.com/axios/axios/pull/3282)) +- Revert "Fixing overwrite Blob/File type as Content-Type in browser. (#1773)" ([#3289](https://github.com/axios/axios/pull/3289)) +- Fixing an issue that type 'null' and 'undefined' is not assignable to validateStatus when typescript strict option is enabled ([#3200](https://github.com/axios/axios/pull/3200)) + +Internal and Tests: + +- Lock travis to not use node v15 ([#3361](https://github.com/axios/axios/pull/3361)) + +Documentation: + +- Fixing simple typo, existent -> existent ([#3252](https://github.com/axios/axios/pull/3252)) +- Fixing typos ([#3309](https://github.com/axios/axios/pull/3309)) + +Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub: + +- Allan Cruz <57270969+Allanbcruz@users.noreply.github.com> +- George Cheng +- Jay +- Kevin Kirsche +- Remco Haszing +- Taemin Shin +- Tim Gates +- Xianming Zhong + +## 0.20.0 (August 20, 2020) + +Release of 0.20.0-pre as a full release with no other changes. + +## 0.20.0-pre (July 15, 2020) + +Fixes and Functionality: + +- Fixing response with utf-8 BOM can not parse to json ([#2419](https://github.com/axios/axios/pull/2419)) + - fix: remove byte order marker (UTF-8 BOM) when transform response + - fix: remove BOM only utf-8 + - test: utf-8 BOM + - fix: incorrect param name +- Refactor mergeConfig without utils.deepMerge ([#2844](https://github.com/axios/axios/pull/2844)) + - Adding failing test + - Fixing #2587 default custom config persisting + - Adding Concat keys and filter duplicates + - Fixed value from CPE + - update for review feedbacks + - no deepMerge + - only merge between plain objects + - fix rename + - always merge config by mergeConfig + - extract function mergeDeepProperties + - refactor mergeConfig with all keys, and add special logic for validateStatus + - add test for resetting headers + - add lots of tests and fix a bug + - should not inherit `data` + - use simple toString +- Fixing overwrite Blob/File type as Content-Type in browser. ([#1773](https://github.com/axios/axios/pull/1773)) +- Fixing an issue that type 'null' is not assignable to validateStatus ([#2773](https://github.com/axios/axios/pull/2773)) +- Fixing special char encoding ([#1671](https://github.com/axios/axios/pull/1671)) + - removing @ character from replacement list since it is a reserved character + - Updating buildURL test to not include the @ character + - Removing console logs +- Fixing password encoding with special characters in basic authentication ([#1492](https://github.com/axios/axios/pull/1492)) + - Fixing password encoding with special characters in basic authentication + - Adding test to check if password with non-Latin1 characters pass +- Fixing 'Network Error' in react native android ([#1487](https://github.com/axios/axios/pull/1487)) + There is a bug in react native Android platform when using get method. It will trigger a 'Network Error' when passing the requestData which is an empty string to request.send function. So if the requestData is an empty string we can set it to null as well to fix the bug. +- Fixing Cookie Helper with Async Components ([#1105](https://github.com/axios/axios/pull/1105)) ([#1107](https://github.com/axios/axios/pull/1107)) +- Fixing 'progressEvent' type ([#2851](https://github.com/axios/axios/pull/2851)) + - Fix 'progressEvent' type + - Update axios.ts +- Fixing getting local files (file://) failed ([#2470](https://github.com/axios/axios/pull/2470)) + - fix issue #2416, #2396 + - fix Eslint warn + - Modify judgment conditions + - add unit test + - update unit test + - update unit test +- Allow PURGE method in typings ([#2191](https://github.com/axios/axios/pull/2191)) +- Adding option to disable automatic decompression ([#2661](https://github.com/axios/axios/pull/2661)) + - Adding ability to disable auto decompression + - Updating decompress documentation in README + - Fixing test\unit\adapters\http.js lint errors + - Adding test for disabling auto decompression + - Removing changes that fixed lint errors in tests + - Removing formatting change to unit test +- Add independent `maxBodyLength` option ([#2781](https://github.com/axios/axios/pull/2781)) + - Add independent option to set the maximum size of the request body + - Remove maxBodyLength check + - Update README + - Assert for error code and message +- Adding responseEncoding to mergeConfig ([#1745](https://github.com/axios/axios/pull/1745)) +- Compatible with follow-redirect aborts the request ([#2689](https://github.com/axios/axios/pull/2689)) + - Compatible with follow-redirect aborts the request + - Use the error code +- Fix merging of params ([#2656](https://github.com/axios/axios/pull/2656)) + - Name function to avoid ESLint func-names warning + - Switch params config to merge list and update tests + - Restore testing of both false and null + - Restore test cases for keys without defaults + - Include test for non-object values that aren't false-y. +- Revert `finally` as `then` ([#2683](https://github.com/axios/axios/pull/2683)) + +Internal and Tests: + +- Fix stale bot config ([#3049](https://github.com/axios/axios/pull/3049)) + - fix stale bot config + - fix multiple lines +- Add days and change name to work ([#3035](https://github.com/axios/axios/pull/3035)) +- Update close-issues.yml ([#3031](https://github.com/axios/axios/pull/3031)) + - Update close-issues.yml + Update close message to read better 😄 + - Fix use of quotations + Use single quotes as per other .yml files + - Remove user name form message +- Add GitHub actions to close stale issues/prs ([#3029](https://github.com/axios/axios/pull/3029)) + - prepare stale actions + - update messages + - Add exempt labels and lighten up comments +- Add GitHub actions to close invalid issues ([#3022](https://github.com/axios/axios/pull/3022)) + - add close actions + - fix with checkout + - update issue templates + - add reminder + - update close message +- Add test with Node.js 12 ([#2860](https://github.com/axios/axios/pull/2860)) + - test with Node.js 12 + - test with latest +- Adding console log on sandbox server startup ([#2210](https://github.com/axios/axios/pull/2210)) + - Adding console log on sandbox server startup + - Update server.js + Add server error handling + - Update server.js + Better error message, remove retry. +- Adding tests for method `options` type definitions ([#1996](https://github.com/axios/axios/pull/1996)) + Update tests. +- Add test for redirecting with too large response ([#2695](https://github.com/axios/axios/pull/2695)) +- Fixing unit test failure in Windows OS ([#2601](https://github.com/axios/axios/pull/2601)) +- Fixing issue for HEAD method and gzipped response ([#2666](https://github.com/axios/axios/pull/2666)) +- Fix tests in browsers ([#2748](https://github.com/axios/axios/pull/2748)) +- chore: add `jsdelivr` and `unpkg` support ([#2443](https://github.com/axios/axios/pull/2443)) + +Documentation: + +- Adding support for URLSearchParams in node ([#1900](https://github.com/axios/axios/pull/1900)) + - Adding support for URLSearchParams in node + - Remove un-needed code + - Update utils.js + - Make changes as suggested +- Adding table of content (preview) ([#3050](https://github.com/axios/axios/pull/3050)) + - add toc (preview) + - remove toc in toc + Signed-off-by: Moni + - fix sublinks + - fix indentation + - remove redundant table links + - update caps and indent + - remove axios +- Replace 'blacklist' with 'blocklist' ([#3006](https://github.com/axios/axios/pull/3006)) +- docs(): Detailed config options environment. ([#2088](https://github.com/axios/axios/pull/2088)) + - docs(): Detailed config options environment. + - Update README.md +- Include axios-data-unpacker in ECOSYSTEM.md ([#2080](https://github.com/axios/axios/pull/2080)) +- Allow opening examples in Gitpod ([#1958](https://github.com/axios/axios/pull/1958)) +- Remove axios.all() and axios.spread() from Readme.md ([#2727](https://github.com/axios/axios/pull/2727)) + - remove axios.all(), axios.spread() + - replace example + - axios.all() -> Promise.all() + - axios.spread(function (acct, perms)) -> function (acct, perms) + - add deprecated mark +- Update README.md ([#2887](https://github.com/axios/axios/pull/2887)) + Small change to the data attribute doc of the config. A request body can also be set for DELETE methods but this wasn't mentioned in the documentation (it only mentioned POST, PUT and PATCH). Took my some 10-20 minutes until I realized that I don't need to manipulate the request body with transformRequest in the case of DELETE. +- Include swagger-taxos-codegen in ECOSYSTEM.md ([#2162](https://github.com/axios/axios/pull/2162)) +- Add CDNJS version badge in README.md ([#878](https://github.com/axios/axios/pull/878)) + This badge will show the version on CDNJS! +- Documentation update to clear up ambiguity in code examples ([#2928](https://github.com/axios/axios/pull/2928)) + - Made an adjustment to the documentation to clear up any ambiguity around the use of "fs". This should help clear up that the code examples with "fs" cannot be used on the client side. +- Update README.md about validateStatus ([#2912](https://github.com/axios/axios/pull/2912)) + Rewrote the comment from "Reject only if the status code is greater than or equal to 500" to "Resolve only if the status code is less than 500" +- Updating documentation for usage form-data ([#2805](https://github.com/axios/axios/pull/2805)) + Closes #2049 +- Fixing CHANGELOG.md issue link ([#2784](https://github.com/axios/axios/pull/2784)) +- Include axios-hooks in ECOSYSTEM.md ([#2003](https://github.com/axios/axios/pull/2003)) +- Added Response header access instructions ([#1901](https://github.com/axios/axios/pull/1901)) + - Added Response header access instructions + - Added note about using bracket notation +- Add `onUploadProgress` and `onDownloadProgress` are browser only ([#2763](https://github.com/axios/axios/pull/2763)) + Saw in #928 and #1966 that `onUploadProgress` and `onDownloadProgress` only work in the browser and was missing that from the README. +- Update ' sign to ` in proxy spec ([#2778](https://github.com/axios/axios/pull/2778)) +- Adding jsDelivr link in README ([#1110](https://github.com/axios/axios/pull/1110)) + - Adding jsDelivr link + - Add SRI + - Remove SRI + +Huge thanks to everyone who contributed to this release via code (authors listed +below) or via reviews and triaging on GitHub: + +- Alan Wang +- Alexandru Ungureanu +- Anubhav Srivastava +- Benny Neugebauer +- Cr <631807682@qq.com> +- David +- David Ko +- David Tanner +- Emily Morehouse +- Felipe Martins +- Fonger <5862369+Fonger@users.noreply.github.com> +- Frostack +- George Cheng +- grumblerchester +- Gustavo López +- hexaez <45806662+hexaez@users.noreply.github.com> +- huangzuizui +- Ian Wijma +- Jay +- jeffjing +- jennynju <46782518+jennynju@users.noreply.github.com> +- Jimmy Liao <52391190+jimmy-liao-gogoro@users.noreply.github.com> +- Jonathan Sharpe +- JounQin +- Justin Beckwith +- Kamil Posiadała <3dcreator.pl@gmail.com> +- Lukas Drgon +- marcinx +- Martti Laine +- Michał Zarach +- Moni +- Motonori Iwata <121048+iwata@users.noreply.github.com> +- Nikita Galkin +- Petr Mares +- Philippe Recto +- Remco Haszing +- rockcs1992 +- Ryan Bown +- Samina Fu +- Simone Busoli +- Spencer von der Ohe +- Sven Efftinge +- Taegyeoung Oh +- Taemin Shin +- Thibault Ehrhart <1208424+ehrhart@users.noreply.github.com> +- Xianming Zhong +- Yasu Flores +- Zac Delventhal + +## 0.19.2 (Jan 20, 2020) + +- Remove unnecessary XSS check ([#2679](https://github.com/axios/axios/pull/2679)) (see ([#2646](https://github.com/axios/axios/issues/2646)) for discussion) + +## 0.19.1 (Jan 7, 2020) + +Fixes and Functionality: + +- Fixing invalid agent issue ([#1904](https://github.com/axios/axios/pull/1904)) +- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582)) +- Delete useless default to hash ([#2458](https://github.com/axios/axios/pull/2458)) +- Fix HTTP/HTTPs agents passing to follow-redirect ([#1904](https://github.com/axios/axios/pull/1904)) +- Fix ignore set withCredentials false ([#2582](https://github.com/axios/axios/pull/2582)) +- Fix CI build failure ([#2570](https://github.com/axios/axios/pull/2570)) +- Remove dependency on is-buffer from package.json ([#1816](https://github.com/axios/axios/pull/1816)) +- Adding options typings ([#2341](https://github.com/axios/axios/pull/2341)) +- Adding Typescript HTTP method definition for LINK and UNLINK. ([#2444](https://github.com/axios/axios/pull/2444)) +- Update dist with newest changes, fixes Custom Attributes issue +- Change syntax to see if build passes ([#2488](https://github.com/axios/axios/pull/2488)) +- Update Webpack + deps, remove now unnecessary polyfills ([#2410](https://github.com/axios/axios/pull/2410)) +- Fix to prevent XSS, throw an error when the URL contains a JS script ([#2464](https://github.com/axios/axios/pull/2464)) +- Add custom timeout error copy in config ([#2275](https://github.com/axios/axios/pull/2275)) +- Add error toJSON example ([#2466](https://github.com/axios/axios/pull/2466)) +- Fixing Vulnerability A Fortify Scan finds a critical Cross-Site Scrip… ([#2451](https://github.com/axios/axios/pull/2451)) +- Fixing subdomain handling on no_proxy ([#2442](https://github.com/axios/axios/pull/2442)) +- Make redirection from HTTP to HTTPS work ([#2426](https://github.com/axios/axios/pull/2426)) and ([#2547](https://github.com/axios/axios/pull/2547)) +- Add toJSON property to AxiosError type ([#2427](https://github.com/axios/axios/pull/2427)) +- Fixing socket hang up error on node side for slow response. ([#1752](https://github.com/axios/axios/pull/1752)) +- Alternative syntax to send data into the body ([#2317](https://github.com/axios/axios/pull/2317)) +- Fixing custom config options ([#2207](https://github.com/axios/axios/pull/2207)) +- Fixing set `config.method` after mergeConfig for Axios.prototype.request ([#2383](https://github.com/axios/axios/pull/2383)) +- Axios create url bug ([#2290](https://github.com/axios/axios/pull/2290)) +- Do not modify config.url when using a relative baseURL (resolves [#1628](https://github.com/axios/axios/issues/1098)) ([#2391](https://github.com/axios/axios/pull/2391)) + +Internal: + +- Revert "Update Webpack + deps, remove now unnecessary polyfills" ([#2479](https://github.com/axios/axios/pull/2479)) +- Order of if/else blocks is causing unit tests mocking XHR. ([#2201](https://github.com/axios/axios/pull/2201)) +- Add license badge ([#2446](https://github.com/axios/axios/pull/2446)) +- Fix travis CI build [#2386](https://github.com/axios/axios/pull/2386) +- Fix cancellation error on build master. #2290 #2207 ([#2407](https://github.com/axios/axios/pull/2407)) + +Documentation: + +- Fixing typo in CHANGELOG.md: s/Functionallity/Functionality ([#2639](https://github.com/axios/axios/pull/2639)) +- Fix badge, use master branch ([#2538](https://github.com/axios/axios/pull/2538)) +- Fix typo in changelog [#2193](https://github.com/axios/axios/pull/2193) +- Document fix ([#2514](https://github.com/axios/axios/pull/2514)) +- Update docs with no_proxy change, issue #2484 ([#2513](https://github.com/axios/axios/pull/2513)) +- Fixing missing words in docs template ([#2259](https://github.com/axios/axios/pull/2259)) +- 🐛Fix request finally documentation in README ([#2189](https://github.com/axios/axios/pull/2189)) +- updating spelling and adding link to docs ([#2212](https://github.com/axios/axios/pull/2212)) +- docs: minor tweak ([#2404](https://github.com/axios/axios/pull/2404)) +- Update response interceptor docs ([#2399](https://github.com/axios/axios/pull/2399)) +- Update README.md ([#2504](https://github.com/axios/axios/pull/2504)) +- Fix word 'sintaxe' to 'syntax' in README.md ([#2432](https://github.com/axios/axios/pull/2432)) +- updating README: notes on CommonJS autocomplete ([#2256](https://github.com/axios/axios/pull/2256)) +- Fix grammar in README.md ([#2271](https://github.com/axios/axios/pull/2271)) +- Doc fixes, minor examples cleanup ([#2198](https://github.com/axios/axios/pull/2198)) + +## 0.19.0 (May 30, 2019) + +Fixes and Functionality: + +- Added support for no_proxy env variable ([#1693](https://github.com/axios/axios/pull/1693/files)) - Chance Dickson +- Unzip response body only for statuses != 204 ([#1129](https://github.com/axios/axios/pull/1129)) - drawski +- Destroy stream on exceeding maxContentLength (fixes [#1098](https://github.com/axios/axios/issues/1098)) ([#1485](https://github.com/axios/axios/pull/1485)) - Gadzhi Gadzhiev +- Makes Axios error generic to use AxiosResponse ([#1738](https://github.com/axios/axios/pull/1738)) - Suman Lama +- Fixing Mocha tests by locking follow-redirects version to 1.5.10 ([#1993](https://github.com/axios/axios/pull/1993)) - grumblerchester +- Allow uppercase methods in typings. ([#1781](https://github.com/axios/axios/pull/1781)) - Ken Powers +- Fixing building url with hash mark ([#1771](https://github.com/axios/axios/pull/1771)) - Anatoly Ryabov +- This commit fix building url with hash map (fragment identifier) when parameters are present: they must not be added after `#`, because client cut everything after `#` +- Preserve HTTP method when following redirect ([#1758](https://github.com/axios/axios/pull/1758)) - Rikki Gibson +- Add `getUri` signature to TypeScript definition. ([#1736](https://github.com/axios/axios/pull/1736)) - Alexander Trauzzi +- Adding isAxiosError flag to errors thrown by axios ([#1419](https://github.com/axios/axios/pull/1419)) - Ayush Gupta + +Internal: + +- Fixing .eslintrc without extension ([#1789](https://github.com/axios/axios/pull/1789)) - Manoel +- Fix failing SauceLabs tests by updating configuration - Emily Morehouse +- Add issue templates - Emily Morehouse + +Documentation: + +- Consistent coding style in README ([#1787](https://github.com/axios/axios/pull/1787)) - Ali Servet Donmez +- Add information about auth parameter to README ([#2166](https://github.com/axios/axios/pull/2166)) - xlaguna +- Add DELETE to list of methods that allow data as a config option ([#2169](https://github.com/axios/axios/pull/2169)) - Daniela Borges Matos de Carvalho +- Update ECOSYSTEM.md - Add Axios Endpoints ([#2176](https://github.com/axios/axios/pull/2176)) - Renan +- Add r2curl in ECOSYSTEM ([#2141](https://github.com/axios/axios/pull/2141)) - 유용우 / CX +- Update README.md - Add instructions for installing with yarn ([#2036](https://github.com/axios/axios/pull/2036)) - Victor Hermes +- Fixing spacing for README.md ([#2066](https://github.com/axios/axios/pull/2066)) - Josh McCarty +- Update README.md. - Change `.then` to `.finally` in example code ([#2090](https://github.com/axios/axios/pull/2090)) - Omar Cai +- Clarify what values responseType can have in Node ([#2121](https://github.com/axios/axios/pull/2121)) - Tyler Breisacher +- docs(ECOSYSTEM): add axios-api-versioning ([#2020](https://github.com/axios/axios/pull/2020)) - Weffe +- It seems that `responseType: 'blob'` doesn't actually work in Node (when I tried using it, response.data was a string, not a Blob, since Node doesn't have Blobs), so this clarifies that this option should only be used in the browser +- Update README.md. - Add Querystring library note ([#1896](https://github.com/axios/axios/pull/1896)) - Dmitriy Eroshenko +- Add react-hooks-axios to Libraries section of ECOSYSTEM.md ([#1925](https://github.com/axios/axios/pull/1925)) - Cody Chan +- Clarify in README that default timeout is 0 (no timeout) ([#1750](https://github.com/axios/axios/pull/1750)) - Ben Standefer + +## 0.19.0-beta.1 (Aug 9, 2018) + +**NOTE:** This is a beta version of this release. There may be functionality that is broken in +certain browsers, though we suspect that builds are hanging and not erroring. See + for the most up-to-date information. + +New Functionality: + +- Add getUri method ([#1712](https://github.com/axios/axios/issues/1712)) +- Add support for no_proxy env variable ([#1693](https://github.com/axios/axios/issues/1693)) +- Add toJSON to decorated Axios errors to facilitate serialization ([#1625](https://github.com/axios/axios/issues/1625)) +- Add second then on axios call ([#1623](https://github.com/axios/axios/issues/1623)) +- Typings: allow custom return types +- Add option to specify character set in responses (with http adapter) + +Fixes: + +- Fix Keep defaults local to instance ([#385](https://github.com/axios/axios/issues/385)) +- Correctly catch exception in http test ([#1475](https://github.com/axios/axios/issues/1475)) +- Fix accept header normalization ([#1698](https://github.com/axios/axios/issues/1698)) +- Fix http adapter to allow HTTPS connections via HTTP ([#959](https://github.com/axios/axios/issues/959)) +- Fix Removes usage of deprecated Buffer constructor. ([#1555](https://github.com/axios/axios/issues/1555), [#1622](https://github.com/axios/axios/issues/1622)) +- Fix defaults to use httpAdapter if available ([#1285](https://github.com/axios/axios/issues/1285)) + - Fixing defaults to use httpAdapter if available + - Use a safer, cross-platform method to detect the Node environment +- Fix Reject promise if request is cancelled by the browser ([#537](https://github.com/axios/axios/issues/537)) +- [Typescript] Fix missing type parameters on delete/head methods +- [NS]: Send `false` flag isStandardBrowserEnv for Nativescript +- Fix missing type parameters on delete/head +- Fix Default method for an instance always overwritten by get +- Fix type error when socketPath option in AxiosRequestConfig +- Capture errors on request data streams +- Decorate resolve and reject to clear timeout in all cases + +Huge thanks to everyone who contributed to this release via code (authors listed +below) or via reviews and triaging on GitHub: + +- Andrew Scott +- Anthony Gauthier +- arpit +- ascott18 +- Benedikt Rötsch +- Chance Dickson +- Dave Stewart +- Deric Cain +- Guillaume Briday +- Jacob Wejendorp +- Jim Lynch +- johntron +- Justin Beckwith +- Justin Beckwith +- Khaled Garbaya +- Lim Jing Rong +- Mark van den Broek +- Martti Laine +- mattridley +- mattridley +- Nicolas Del Valle +- Nilegfx +- pbarbiero +- Rikki Gibson +- Sako Hartounian +- Shane Fitzpatrick +- Stephan Schneider +- Steven +- Tim Garthwaite +- Tim Johns +- Yutaro Miyazaki + +## 0.18.0 (Feb 19, 2018) + +- Adding support for UNIX Sockets when running with Node.js ([#1070](https://github.com/axios/axios/pull/1070)) +- Fixing typings ([#1177](https://github.com/axios/axios/pull/1177)): + - AxiosRequestConfig.proxy: allows type false + - AxiosProxyConfig: added auth field +- Adding function signature in AxiosInstance interface so AxiosInstance can be invoked ([#1192](https://github.com/axios/axios/pull/1192), [#1254](https://github.com/axios/axios/pull/1254)) +- Allowing maxContentLength to pass through to redirected calls as maxBodyLength in follow-redirects config ([#1287](https://github.com/axios/axios/pull/1287)) +- Fixing configuration when using an instance - method can now be set ([#1342](https://github.com/axios/axios/pull/1342)) + +## 0.17.1 (Nov 11, 2017) + +- Fixing issue with web workers ([#1160](https://github.com/axios/axios/pull/1160)) +- Allowing overriding transport ([#1080](https://github.com/axios/axios/pull/1080)) +- Updating TypeScript typings ([#1165](https://github.com/axios/axios/pull/1165), [#1125](https://github.com/axios/axios/pull/1125), [#1131](https://github.com/axios/axios/pull/1131)) + +## 0.17.0 (Oct 21, 2017) + +- **BREAKING** Fixing issue with `baseURL` and interceptors ([#950](https://github.com/axios/axios/pull/950)) +- **BREAKING** Improving handing of duplicate headers ([#874](https://github.com/axios/axios/pull/874)) +- Adding support for disabling proxies ([#691](https://github.com/axios/axios/pull/691)) +- Updating TypeScript typings with generic type parameters ([#1061](https://github.com/axios/axios/pull/1061)) + +## 0.16.2 (Jun 3, 2017) + +- Fixing issue with including `buffer` in bundle ([#887](https://github.com/axios/axios/pull/887)) +- Including underlying request in errors ([#830](https://github.com/axios/axios/pull/830)) +- Convert `method` to lowercase ([#930](https://github.com/axios/axios/pull/930)) + +## 0.16.1 (Apr 8, 2017) + +- Improving HTTP adapter to return last request in case of redirects ([#828](https://github.com/axios/axios/pull/828)) +- Updating `follow-redirects` dependency ([#829](https://github.com/axios/axios/pull/829)) +- Adding support for passing `Buffer` in node ([#773](https://github.com/axios/axios/pull/773)) + +## 0.16.0 (Mar 31, 2017) + +- **BREAKING** Removing `Promise` from axios typings in favor of built-in type declarations ([#480](https://github.com/axios/axios/issues/480)) +- Adding `options` shortcut method ([#461](https://github.com/axios/axios/pull/461)) +- Fixing issue with using `responseType: 'json'` in browsers incompatible with XHR Level 2 ([#654](https://github.com/axios/axios/pull/654)) +- Improving React Native detection ([#731](https://github.com/axios/axios/pull/731)) +- Fixing `combineURLs` to support empty `relativeURL` ([#581](https://github.com/axios/axios/pull/581)) +- Removing `PROTECTION_PREFIX` support ([#561](https://github.com/axios/axios/pull/561)) + +## 0.15.3 (Nov 27, 2016) + +- Fixing issue with custom instances and global defaults ([#443](https://github.com/axios/axios/issues/443)) +- Renaming `axios.d.ts` to `index.d.ts` ([#519](https://github.com/axios/axios/issues/519)) +- Adding `get`, `head`, and `delete` to `defaults.headers` ([#509](https://github.com/axios/axios/issues/509)) +- Fixing issue with `btoa` and IE ([#507](https://github.com/axios/axios/issues/507)) +- Adding support for proxy authentication ([#483](https://github.com/axios/axios/pull/483)) +- Improving HTTP adapter to use `http` protocol by default ([#493](https://github.com/axios/axios/pull/493)) +- Fixing proxy issues ([#491](https://github.com/axios/axios/pull/491)) + +## 0.15.2 (Oct 17, 2016) + +- Fixing issue with calling `cancel` after response has been received ([#482](https://github.com/axios/axios/issues/482)) + +## 0.15.1 (Oct 14, 2016) + +- Fixing issue with UMD ([#485](https://github.com/axios/axios/issues/485)) + +## 0.15.0 (Oct 10, 2016) + +- Adding cancellation support ([#452](https://github.com/axios/axios/pull/452)) +- Moving default adapter to global defaults ([#437](https://github.com/axios/axios/pull/437)) +- Fixing issue with `file` URI scheme ([#440](https://github.com/axios/axios/pull/440)) +- Fixing issue with `params` objects that have no prototype ([#445](https://github.com/axios/axios/pull/445)) + +## 0.14.0 (Aug 27, 2016) + +- **BREAKING** Updating TypeScript definitions ([#419](https://github.com/axios/axios/pull/419)) +- **BREAKING** Replacing `agent` option with `httpAgent` and `httpsAgent` ([#387](https://github.com/axios/axios/pull/387)) +- **BREAKING** Splitting `progress` event handlers into `onUploadProgress` and `onDownloadProgress` ([#423](https://github.com/axios/axios/pull/423)) +- Adding support for `http_proxy` and `https_proxy` environment variables ([#366](https://github.com/axios/axios/pull/366)) +- Fixing issue with `auth` config option and `Authorization` header ([#397](https://github.com/axios/axios/pull/397)) +- Don't set XSRF header if `xsrfCookieName` is `null` ([#406](https://github.com/axios/axios/pull/406)) + +## 0.13.1 (Jul 16, 2016) + +- Fixing issue with response data not being transformed on error ([#378](https://github.com/axios/axios/issues/378)) + +## 0.13.0 (Jul 13, 2016) + +- **BREAKING** Improved error handling ([#345](https://github.com/axios/axios/pull/345)) +- **BREAKING** Response transformer now invoked in dispatcher not adapter ([10eb238](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e)) +- **BREAKING** Request adapters now return a `Promise` ([157efd5](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a)) +- Fixing issue with `withCredentials` not being overwritten ([#343](https://github.com/axios/axios/issues/343)) +- Fixing regression with request transformer being called before request interceptor ([#352](https://github.com/axios/axios/issues/352)) +- Fixing custom instance defaults ([#341](https://github.com/axios/axios/issues/341)) +- Fixing instances created from `axios.create` to have same API as default axios ([#217](https://github.com/axios/axios/issues/217)) + +## 0.12.0 (May 31, 2016) + +- Adding support for `URLSearchParams` ([#317](https://github.com/axios/axios/pull/317)) +- Adding `maxRedirects` option ([#307](https://github.com/axios/axios/pull/307)) + +## 0.11.1 (May 17, 2016) + +- Fixing IE CORS support ([#313](https://github.com/axios/axios/pull/313)) +- Fixing detection of `FormData` ([#325](https://github.com/axios/axios/pull/325)) +- Adding `Axios` class to exports ([#321](https://github.com/axios/axios/pull/321)) + +## 0.11.0 (Apr 26, 2016) + +- Adding support for Stream with HTTP adapter ([#296](https://github.com/axios/axios/pull/296)) +- Adding support for custom HTTP status code error ranges ([#308](https://github.com/axios/axios/pull/308)) +- Fixing issue with ArrayBuffer ([#299](https://github.com/axios/axios/pull/299)) + +## 0.10.0 (Apr 20, 2016) + +- Fixing issue with some requests sending `undefined` instead of `null` ([#250](https://github.com/axios/axios/pull/250)) +- Fixing basic auth for HTTP adapter ([#252](https://github.com/axios/axios/pull/252)) +- Fixing request timeout for XHR adapter ([#227](https://github.com/axios/axios/pull/227)) +- Fixing IE8 support by using `onreadystatechange` instead of `onload` ([#249](https://github.com/axios/axios/pull/249)) +- Fixing IE9 cross domain requests ([#251](https://github.com/axios/axios/pull/251)) +- Adding `maxContentLength` option ([#275](https://github.com/axios/axios/pull/275)) +- Fixing XHR support for WebWorker environment ([#279](https://github.com/axios/axios/pull/279)) +- Adding request instance to response ([#200](https://github.com/axios/axios/pull/200)) + +## 0.9.1 (Jan 24, 2016) + +- Improving handling of request timeout in node ([#124](https://github.com/axios/axios/issues/124)) +- Fixing network errors not rejecting ([#205](https://github.com/axios/axios/pull/205)) +- Fixing issue with IE rejecting on HTTP 204 ([#201](https://github.com/axios/axios/issues/201)) +- Fixing host/port when following redirects ([#198](https://github.com/axios/axios/pull/198)) + +## 0.9.0 (Jan 18, 2016) + +- Adding support for custom adapters +- Fixing Content-Type header being removed when data is false ([#195](https://github.com/axios/axios/pull/195)) +- Improving XDomainRequest implementation ([#185](https://github.com/axios/axios/pull/185)) +- Improving config merging and order of precedence ([#183](https://github.com/axios/axios/pull/183)) +- Fixing XDomainRequest support for only <= IE9 ([#182](https://github.com/axios/axios/pull/182)) + +## 0.8.1 (Dec 14, 2015) + +- Adding support for passing XSRF token for cross domain requests when using `withCredentials` ([#168](https://github.com/axios/axios/pull/168)) +- Fixing error with format of basic auth header ([#178](https://github.com/axios/axios/pull/173)) +- Fixing error with JSON payloads throwing `InvalidStateError` in some cases ([#174](https://github.com/axios/axios/pull/174)) + +## 0.8.0 (Dec 11, 2015) + +- Adding support for creating instances of axios ([#123](https://github.com/axios/axios/pull/123)) +- Fixing http adapter to use `Buffer` instead of `String` in case of `responseType === 'arraybuffer'` ([#128](https://github.com/axios/axios/pull/128)) +- Adding support for using custom parameter serializer with `paramsSerializer` option ([#121](https://github.com/axios/axios/pull/121)) +- Fixing issue in IE8 caused by `forEach` on `arguments` ([#127](https://github.com/axios/axios/pull/127)) +- Adding support for following redirects in node ([#146](https://github.com/axios/axios/pull/146)) +- Adding support for transparent decompression if `content-encoding` is set ([#149](https://github.com/axios/axios/pull/149)) +- Adding support for transparent XDomainRequest to handle cross domain requests in IE9 ([#140](https://github.com/axios/axios/pull/140)) +- Adding support for HTTP basic auth via Authorization header ([#167](https://github.com/axios/axios/pull/167)) +- Adding support for baseURL option ([#160](https://github.com/axios/axios/pull/160)) + +## 0.7.0 (Sep 29, 2015) + +- Fixing issue with minified bundle in IE8 ([#87](https://github.com/axios/axios/pull/87)) +- Adding support for passing agent in node ([#102](https://github.com/axios/axios/pull/102)) +- Adding support for returning result from `axios.spread` for chaining ([#106](https://github.com/axios/axios/pull/106)) +- Fixing typescript definition ([#105](https://github.com/axios/axios/pull/105)) +- Fixing default timeout config for node ([#112](https://github.com/axios/axios/pull/112)) +- Adding support for use in web workers, and react-native ([#70](https://github.com/axios/axios/issue/70)), ([#98](https://github.com/axios/axios/pull/98)) +- Adding support for fetch like API `axios(url[, config])` ([#116](https://github.com/axios/axios/issues/116)) + +## 0.6.0 (Sep 21, 2015) + +- Removing deprecated success/error aliases +- Fixing issue with array params not being properly encoded ([#49](https://github.com/axios/axios/pull/49)) +- Fixing issue with User-Agent getting overridden ([#69](https://github.com/axios/axios/issues/69)) +- Adding support for timeout config ([#56](https://github.com/axios/axios/issues/56)) +- Removing es6-promise dependency +- Fixing issue preventing `length` to be used as a parameter ([#91](https://github.com/axios/axios/pull/91)) +- Fixing issue with IE8 ([#85](https://github.com/axios/axios/pull/85)) +- Converting build to UMD + +## 0.5.4 (Apr 08, 2015) + +- Fixing issue with FormData not being sent ([#53](https://github.com/axios/axios/issues/53)) + +## 0.5.3 (Apr 07, 2015) + +- Using JSON.parse unconditionally when transforming response string ([#55](https://github.com/axios/axios/issues/55)) + +## 0.5.2 (Mar 13, 2015) + +- Adding support for `statusText` in response ([#46](https://github.com/axios/axios/issues/46)) + +## 0.5.1 (Mar 10, 2015) + +- Fixing issue using strict mode ([#45](https://github.com/axios/axios/issues/45)) +- Fixing issue with standalone build ([#47](https://github.com/axios/axios/issues/47)) + +## 0.5.0 (Jan 23, 2015) + +- Adding support for intercepetors ([#14](https://github.com/axios/axios/issues/14)) +- Updating es6-promise dependency + +## 0.4.2 (Dec 10, 2014) + +- Fixing issue with `Content-Type` when using `FormData` ([#22](https://github.com/axios/axios/issues/22)) +- Adding support for TypeScript ([#25](https://github.com/axios/axios/issues/25)) +- Fixing issue with standalone build ([#29](https://github.com/axios/axios/issues/29)) +- Fixing issue with verbs needing to be capitalized in some browsers ([#30](https://github.com/axios/axios/issues/30)) + +## 0.4.1 (Oct 15, 2014) + +- Adding error handling to request for node.js ([#18](https://github.com/axios/axios/issues/18)) + +## 0.4.0 (Oct 03, 2014) + +- Adding support for `ArrayBuffer` and `ArrayBufferView` ([#10](https://github.com/axios/axios/issues/10)) +- Adding support for utf-8 for node.js ([#13](https://github.com/axios/axios/issues/13)) +- Adding support for SSL for node.js ([#12](https://github.com/axios/axios/issues/12)) +- Fixing incorrect `Content-Type` header ([#9](https://github.com/axios/axios/issues/9)) +- Adding standalone build without bundled es6-promise ([#11](https://github.com/axios/axios/issues/11)) +- Deprecating `success`/`error` in favor of `then`/`catch` + +## 0.3.1 (Sep 16, 2014) + +- Fixing missing post body when using node.js ([#3](https://github.com/axios/axios/issues/3)) + +## 0.3.0 (Sep 16, 2014) + +- Fixing `success` and `error` to properly receive response data as individual arguments ([#8](https://github.com/axios/axios/issues/8)) +- Updating `then` and `catch` to receive response data as a single object ([#6](https://github.com/axios/axios/issues/6)) +- Fixing issue with `all` not working ([#7](https://github.com/axios/axios/issues/7)) + +## 0.2.2 (Sep 14, 2014) + +- Fixing bundling with browserify ([#4](https://github.com/axios/axios/issues/4)) + +## 0.2.1 (Sep 12, 2014) + +- Fixing build problem causing ridiculous file sizes + +## 0.2.0 (Sep 12, 2014) + +- Adding support for `all` and `spread` +- Adding support for node.js ([#1](https://github.com/axios/axios/issues/1)) + +## 0.1.0 (Aug 29, 2014) + +- Initial release diff --git a/node_modules/axios/LICENSE b/node_modules/axios/LICENSE new file mode 100644 index 0000000..d36c80e --- /dev/null +++ b/node_modules/axios/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014-present Matt Zabriskie + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/axios/README.md b/node_modules/axios/README.md new file mode 100644 index 0000000..c33dcd9 --- /dev/null +++ b/node_modules/axios/README.md @@ -0,0 +1,1182 @@ +# axios + +[![npm version](https://img.shields.io/npm/v/axios.svg?style=flat-square)](https://www.npmjs.org/package/axios) +[![CDNJS](https://img.shields.io/cdnjs/v/axios.svg?style=flat-square)](https://cdnjs.com/libraries/axios) +![Build status](https://github.com/axios/axios/actions/workflows/ci.yml/badge.svg) +[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/axios/axios) +[![code coverage](https://img.shields.io/coveralls/mzabriskie/axios.svg?style=flat-square)](https://coveralls.io/r/mzabriskie/axios) +[![install size](https://packagephobia.now.sh/badge?p=axios)](https://packagephobia.now.sh/result?p=axios) +[![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](https://npm-stat.com/charts.html?package=axios) +[![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios) +[![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios) +[![Known Vulnerabilities](https://snyk.io/test/npm/axios/badge.svg)](https://snyk.io/test/npm/axios) +![npm bundle size](https://img.shields.io/bundlephobia/minzip/axios) + +Promise based HTTP client for the browser and node.js + +> New axios docs website: [click here](https://axios-http.com/) + +## Table of Contents + + - [Features](#features) + - [Browser Support](#browser-support) + - [Installing](#installing) + - [Example](#example) + - [Axios API](#axios-api) + - [Request method aliases](#request-method-aliases) + - [Concurrency 👎](#concurrency-deprecated) + - [Creating an instance](#creating-an-instance) + - [Instance methods](#instance-methods) + - [Request Config](#request-config) + - [Response Schema](#response-schema) + - [Config Defaults](#config-defaults) + - [Global axios defaults](#global-axios-defaults) + - [Custom instance defaults](#custom-instance-defaults) + - [Config order of precedence](#config-order-of-precedence) + - [Interceptors](#interceptors) + - [Multiple Interceptors](#multiple-interceptors) + - [Handling Errors](#handling-errors) + - [Cancellation](#cancellation) + - [AbortController](#abortcontroller) + - [CancelToken 👎](#canceltoken-deprecated) + - [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format) + - [URLSearchParams](#urlsearchparams) + - [Query string](#query-string-older-browsers) + - [🆕 Automatic serialization](#-automatic-serialization-to-urlsearchparams) + - [Using multipart/form-data format](#using-multipartform-data-format) + - [FormData](#formdata) + - [🆕 Automatic serialization](#-automatic-serialization-to-formdata) + - [Files Posting](#files-posting) + - [HTML Form Posting](#html-form-posting-browser) + - [Semver](#semver) + - [Promises](#promises) + - [TypeScript](#typescript) + - [Resources](#resources) + - [Credits](#credits) + - [License](#license) + +## Features + +- Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser +- Make [http](https://nodejs.org/api/http.html) requests from node.js +- Supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API +- Intercept request and response +- Transform request and response data +- Cancel requests +- Automatic transforms for JSON data +- 🆕 Automatic data object serialization to `multipart/form-data` and `x-www-form-urlencoded` body encodings +- Client side support for protecting against [XSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) + +## Browser Support + +![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/main/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/main/src/firefox/firefox_48x48.png) | ![Safari](https://raw.githubusercontent.com/alrra/browser-logos/main/src/safari/safari_48x48.png) | ![Opera](https://raw.githubusercontent.com/alrra/browser-logos/main/src/opera/opera_48x48.png) | ![Edge](https://raw.githubusercontent.com/alrra/browser-logos/main/src/edge/edge_48x48.png) | ![IE](https://raw.githubusercontent.com/alrra/browser-logos/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_48x48.png) | +--- | --- | --- | --- | --- | --- | +Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 11 ✔ | + +[![Browser Matrix](https://saucelabs.com/open_sauce/build_matrix/axios.svg)](https://saucelabs.com/u/axios) + +## Installing + +Using npm: + +```bash +$ npm install axios +``` + +Using bower: + +```bash +$ bower install axios +``` + +Using yarn: + +```bash +$ yarn add axios +``` + +Using pnpm: + +```bash +$ pnpm add axios +``` + +Using jsDelivr CDN: + +```html + +``` + +Using unpkg CDN: + +```html + +``` + +## Example + +### note: CommonJS usage +In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with `require()` use the following approach: + +```js +const axios = require('axios').default; + +// axios. will now provide autocomplete and parameter typings +``` + +Performing a `GET` request + +```js +const axios = require('axios').default; + +// Make a request for a user with a given ID +axios.get('/user?ID=12345') + .then(function (response) { + // handle success + console.log(response); + }) + .catch(function (error) { + // handle error + console.log(error); + }) + .then(function () { + // always executed + }); + +// Optionally the request above could also be done as +axios.get('/user', { + params: { + ID: 12345 + } + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }) + .then(function () { + // always executed + }); + +// Want to use async/await? Add the `async` keyword to your outer function/method. +async function getUser() { + try { + const response = await axios.get('/user?ID=12345'); + console.log(response); + } catch (error) { + console.error(error); + } +} +``` + +> **NOTE:** `async/await` is part of ECMAScript 2017 and is not supported in Internet +> Explorer and older browsers, so use with caution. + +Performing a `POST` request + +```js +axios.post('/user', { + firstName: 'Fred', + lastName: 'Flintstone' + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }); +``` + +Performing multiple concurrent requests + +```js +function getUserAccount() { + return axios.get('/user/12345'); +} + +function getUserPermissions() { + return axios.get('/user/12345/permissions'); +} + +Promise.all([getUserAccount(), getUserPermissions()]) + .then(function (results) { + const acct = results[0]; + const perm = results[1]; + }); +``` + +## axios API + +Requests can be made by passing the relevant config to `axios`. + +##### axios(config) + +```js +// Send a POST request +axios({ + method: 'post', + url: '/user/12345', + data: { + firstName: 'Fred', + lastName: 'Flintstone' + } +}); +``` + +```js +// GET request for remote image in node.js +axios({ + method: 'get', + url: 'https://bit.ly/2mTM3nY', + responseType: 'stream' +}) + .then(function (response) { + response.data.pipe(fs.createWriteStream('ada_lovelace.jpg')) + }); +``` + +##### axios(url[, config]) + +```js +// Send a GET request (default method) +axios('/user/12345'); +``` + +### Request method aliases + +For convenience, aliases have been provided for all common request methods. + +##### axios.request(config) +##### axios.get(url[, config]) +##### axios.delete(url[, config]) +##### axios.head(url[, config]) +##### axios.options(url[, config]) +##### axios.post(url[, data[, config]]) +##### axios.put(url[, data[, config]]) +##### axios.patch(url[, data[, config]]) + +###### NOTE +When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config. + +### Concurrency (Deprecated) +Please use `Promise.all` to replace the below functions. + +Helper functions for dealing with concurrent requests. + +axios.all(iterable) +axios.spread(callback) + +### Creating an instance + +You can create a new instance of axios with a custom config. + +##### axios.create([config]) + +```js +const instance = axios.create({ + baseURL: 'https://some-domain.com/api/', + timeout: 1000, + headers: {'X-Custom-Header': 'foobar'} +}); +``` + +### Instance methods + +The available instance methods are listed below. The specified config will be merged with the instance config. + +##### axios#request(config) +##### axios#get(url[, config]) +##### axios#delete(url[, config]) +##### axios#head(url[, config]) +##### axios#options(url[, config]) +##### axios#post(url[, data[, config]]) +##### axios#put(url[, data[, config]]) +##### axios#patch(url[, data[, config]]) +##### axios#getUri([config]) + +## Request Config + +These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified. + +```js +{ + // `url` is the server URL that will be used for the request + url: '/user', + + // `method` is the request method to be used when making the request + method: 'get', // default + + // `baseURL` will be prepended to `url` unless `url` is absolute. + // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs + // to methods of that instance. + baseURL: 'https://some-domain.com/api/', + + // `transformRequest` allows changes to the request data before it is sent to the server + // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE' + // The last function in the array must return a string or an instance of Buffer, ArrayBuffer, + // FormData or Stream + // You may modify the headers object. + transformRequest: [function (data, headers) { + // Do whatever you want to transform the data + + return data; + }], + + // `transformResponse` allows changes to the response data to be made before + // it is passed to then/catch + transformResponse: [function (data) { + // Do whatever you want to transform the data + + return data; + }], + + // `headers` are custom headers to be sent + headers: {'X-Requested-With': 'XMLHttpRequest'}, + + // `params` are the URL parameters to be sent with the request + // Must be a plain object or a URLSearchParams object + params: { + ID: 12345 + }, + + // `paramsSerializer` is an optional config in charge of serializing `params` + paramsSerializer: { + indexes: null // array indexes format (null - no brackets, false - empty brackets, true - brackets with indexes) + }, + + // `data` is the data to be sent as the request body + // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH' + // When no `transformRequest` is set, must be of one of the following types: + // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams + // - Browser only: FormData, File, Blob + // - Node only: Stream, Buffer + data: { + firstName: 'Fred' + }, + + // syntax alternative to send data into the body + // method post + // only the value is sent, not the key + data: 'Country=Brasil&City=Belo Horizonte', + + // `timeout` specifies the number of milliseconds before the request times out. + // If the request takes longer than `timeout`, the request will be aborted. + timeout: 1000, // default is `0` (no timeout) + + // `withCredentials` indicates whether or not cross-site Access-Control requests + // should be made using credentials + withCredentials: false, // default + + // `adapter` allows custom handling of requests which makes testing easier. + // Return a promise and supply a valid response (see lib/adapters/README.md). + adapter: function (config) { + /* ... */ + }, + + // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. + // This will set an `Authorization` header, overwriting any existing + // `Authorization` custom headers you have set using `headers`. + // Please note that only HTTP Basic auth is configurable through this parameter. + // For Bearer tokens and such, use `Authorization` custom headers instead. + auth: { + username: 'janedoe', + password: 's00pers3cret' + }, + + // `responseType` indicates the type of data that the server will respond with + // options are: 'arraybuffer', 'document', 'json', 'text', 'stream' + // browser only: 'blob' + responseType: 'json', // default + + // `responseEncoding` indicates encoding to use for decoding responses (Node.js only) + // Note: Ignored for `responseType` of 'stream' or client-side requests + responseEncoding: 'utf8', // default + + // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token + xsrfCookieName: 'XSRF-TOKEN', // default + + // `xsrfHeaderName` is the name of the http header that carries the xsrf token value + xsrfHeaderName: 'X-XSRF-TOKEN', // default + + // `undefined` (default) - set XSRF header only for the same origin requests + withXSRFToken: boolean | undefined | ((config: AxiosRequestConfig) => boolean | undefined), + + // `onUploadProgress` allows handling of progress events for uploads + // browser only + onUploadProgress: function (progressEvent) { + // Do whatever you want with the native progress event + }, + + // `onDownloadProgress` allows handling of progress events for downloads + // browser only + onDownloadProgress: function (progressEvent) { + // Do whatever you want with the native progress event + }, + + // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js + maxContentLength: 2000, + + // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed + maxBodyLength: 2000, + + // `validateStatus` defines whether to resolve or reject the promise for a given + // HTTP response status code. If `validateStatus` returns `true` (or is set to `null` + // or `undefined`), the promise will be resolved; otherwise, the promise will be + // rejected. + validateStatus: function (status) { + return status >= 200 && status < 300; // default + }, + + // `maxRedirects` defines the maximum number of redirects to follow in node.js. + // If set to 0, no redirects will be followed. + maxRedirects: 21, // default + + // `beforeRedirect` defines a function that will be called before redirect. + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + // If maxRedirects is set to 0, `beforeRedirect` is not used. + beforeRedirect: (options, { headers }) => { + if (options.hostname === "example.com") { + options.auth = "user:password"; + } + }, + + // `socketPath` defines a UNIX Socket to be used in node.js. + // e.g. '/var/run/docker.sock' to send requests to the docker daemon. + // Only either `socketPath` or `proxy` can be specified. + // If both are specified, `socketPath` is used. + socketPath: null, // default + + // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http + // and https requests, respectively, in node.js. This allows options to be added like + // `keepAlive` that are not enabled by default. + httpAgent: new http.Agent({ keepAlive: true }), + httpsAgent: new https.Agent({ keepAlive: true }), + + // `proxy` defines the hostname, port, and protocol of the proxy server. + // You can also define your proxy using the conventional `http_proxy` and + // `https_proxy` environment variables. If you are using environment variables + // for your proxy configuration, you can also define a `no_proxy` environment + // variable as a comma-separated list of domains that should not be proxied. + // Use `false` to disable proxies, ignoring environment variables. + // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and + // supplies credentials. + // This will set an `Proxy-Authorization` header, overwriting any existing + // `Proxy-Authorization` custom headers you have set using `headers`. + // If the proxy server uses HTTPS, then you must set the protocol to `https`. + proxy: { + protocol: 'https', + host: '127.0.0.1', + port: 9000, + auth: { + username: 'mikeymike', + password: 'rapunz3l' + } + }, + + // `cancelToken` specifies a cancel token that can be used to cancel the request + // (see Cancellation section below for details) + cancelToken: new CancelToken(function (cancel) { + }), + + // an alternative way to cancel Axios requests using AbortController + signal: new AbortController().signal, + + // `decompress` indicates whether or not the response body should be decompressed + // automatically. If set to `true` will also remove the 'content-encoding' header + // from the responses objects of all decompressed responses + // - Node only (XHR cannot turn off decompression) + decompress: true // default + + // `insecureHTTPParser` boolean. + // Indicates where to use an insecure HTTP parser that accepts invalid HTTP headers. + // This may allow interoperability with non-conformant HTTP implementations. + // Using the insecure parser should be avoided. + // see options https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_url_options_callback + // see also https://nodejs.org/en/blog/vulnerability/february-2020-security-releases/#strict-http-header-parsing-none + insecureHTTPParser: undefined // default + + // transitional options for backward compatibility that may be removed in the newer versions + transitional: { + // silent JSON parsing mode + // `true` - ignore JSON parsing errors and set response.data to null if parsing failed (old behaviour) + // `false` - throw SyntaxError if JSON parsing failed (Note: responseType must be set to 'json') + silentJSONParsing: true, // default value for the current Axios version + + // try to parse the response string as JSON even if `responseType` is not 'json' + forcedJSONParsing: true, + + // throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts + clarifyTimeoutError: false, + }, + + env: { + // The FormData class to be used to automatically serialize the payload into a FormData object + FormData: window?.FormData || global?.FormData + }, + + formSerializer: { + visitor: (value, key, path, helpers)=> {}; // custom visitor function to serialize form values + dots: boolean; // use dots instead of brackets format + metaTokens: boolean; // keep special endings like {} in parameter key + indexes: boolean; // array indexes format null - no brackets, false - empty brackets, true - brackets with indexes + } +} +``` + +## Response Schema + +The response for a request contains the following information. + +```js +{ + // `data` is the response that was provided by the server + data: {}, + + // `status` is the HTTP status code from the server response + status: 200, + + // `statusText` is the HTTP status message from the server response + statusText: 'OK', + + // `headers` the HTTP headers that the server responded with + // All header names are lowercase and can be accessed using the bracket notation. + // Example: `response.headers['content-type']` + headers: {}, + + // `config` is the config that was provided to `axios` for the request + config: {}, + + // `request` is the request that generated this response + // It is the last ClientRequest instance in node.js (in redirects) + // and an XMLHttpRequest instance in the browser + request: {} +} +``` + +When using `then`, you will receive the response as follows: + +```js +axios.get('/user/12345') + .then(function (response) { + console.log(response.data); + console.log(response.status); + console.log(response.statusText); + console.log(response.headers); + console.log(response.config); + }); +``` + +When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section. + +## Config Defaults + +You can specify config defaults that will be applied to every request. + +### Global axios defaults + +```js +axios.defaults.baseURL = 'https://api.example.com'; + +// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them. +// See below for an example using Custom instance defaults instead. +axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; + +axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; +``` + +### Custom instance defaults + +```js +// Set config defaults when creating the instance +const instance = axios.create({ + baseURL: 'https://api.example.com' +}); + +// Alter defaults after instance has been created +instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; +``` + +### Config order of precedence + +Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults.js](https://github.com/axios/axios/blob/master/lib/defaults/index.js#L28), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example. + +```js +// Create an instance using the config defaults provided by the library +// At this point the timeout config value is `0` as is the default for the library +const instance = axios.create(); + +// Override timeout default for the library +// Now all requests using this instance will wait 2.5 seconds before timing out +instance.defaults.timeout = 2500; + +// Override timeout for this request as it's known to take a long time +instance.get('/longRequest', { + timeout: 5000 +}); +``` + +## Interceptors + +You can intercept requests or responses before they are handled by `then` or `catch`. + +```js +// Add a request interceptor +axios.interceptors.request.use(function (config) { + // Do something before request is sent + return config; + }, function (error) { + // Do something with request error + return Promise.reject(error); + }); + +// Add a response interceptor +axios.interceptors.response.use(function (response) { + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + return response; + }, function (error) { + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + return Promise.reject(error); + }); +``` + +If you need to remove an interceptor later you can. + +```js +const myInterceptor = axios.interceptors.request.use(function () {/*...*/}); +axios.interceptors.request.eject(myInterceptor); +``` + +You can also clear all interceptors for requests or responses. +```js +const instance = axios.create(); +instance.interceptors.request.use(function () {/*...*/}); +instance.interceptors.request.clear(); // Removes interceptors from requests +instance.interceptors.response.use(function () {/*...*/}); +instance.interceptors.response.clear(); // Removes interceptors from responses +``` + +You can add interceptors to a custom instance of axios. + +```js +const instance = axios.create(); +instance.interceptors.request.use(function () {/*...*/}); +``` + +When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay +in the execution of your axios request when the main thread is blocked (a promise is created under the hood for +the interceptor and your request gets put on the bottom of the call stack). If your request interceptors are synchronous you can add a flag +to the options object that will tell axios to run the code synchronously and avoid any delays in request execution. + +```js +axios.interceptors.request.use(function (config) { + config.headers.test = 'I am only a header!'; + return config; +}, null, { synchronous: true }); +``` + +If you want to execute a particular interceptor based on a runtime check, +you can add a `runWhen` function to the options object. The interceptor will not be executed **if and only if** the return +of `runWhen` is `false`. The function will be called with the config +object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an +asynchronous request interceptor that only needs to run at certain times. + +```js +function onGetCall(config) { + return config.method === 'get'; +} +axios.interceptors.request.use(function (config) { + config.headers.test = 'special get headers'; + return config; +}, null, { runWhen: onGetCall }); +``` + +### Multiple Interceptors + +Given you add multiple response interceptors +and when the response was fulfilled +- then each interceptor is executed +- then they are executed in the order they were added +- then only the last interceptor's result is returned +- then every interceptor receives the result of its predecessor +- and when the fulfillment-interceptor throws + - then the following fulfillment-interceptor is not called + - then the following rejection-interceptor is called + - once caught, another following fulfill-interceptor is called again (just like in a promise chain). + +Read [the interceptor tests](./test/specs/interceptors.spec.js) for seeing all this in code. + +## Handling Errors + +```js +axios.get('/user/12345') + .catch(function (error) { + if (error.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + console.log(error.response.data); + console.log(error.response.status); + console.log(error.response.headers); + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + console.log(error.request); + } else { + // Something happened in setting up the request that triggered an Error + console.log('Error', error.message); + } + console.log(error.config); + }); +``` + +Using the `validateStatus` config option, you can define HTTP code(s) that should throw an error. + +```js +axios.get('/user/12345', { + validateStatus: function (status) { + return status < 500; // Resolve only if the status code is less than 500 + } +}) +``` + +Using `toJSON` you get an object with more information about the HTTP error. + +```js +axios.get('/user/12345') + .catch(function (error) { + console.log(error.toJSON()); + }); +``` + +## Cancellation + +### AbortController + +Starting from `v0.22.0` Axios supports AbortController to cancel requests in fetch API way: + +```js +const controller = new AbortController(); + +axios.get('/foo/bar', { + signal: controller.signal +}).then(function(response) { + //... +}); +// cancel the request +controller.abort() +``` + +### CancelToken `👎deprecated` + +You can also cancel a request using a *CancelToken*. + +> The axios cancel token API is based on the withdrawn [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises). + +> This API is deprecated since v0.22.0 and shouldn't be used in new projects + +You can create a cancel token using the `CancelToken.source` factory as shown below: + +```js +const CancelToken = axios.CancelToken; +const source = CancelToken.source(); + +axios.get('/user/12345', { + cancelToken: source.token +}).catch(function (thrown) { + if (axios.isCancel(thrown)) { + console.log('Request canceled', thrown.message); + } else { + // handle error + } +}); + +axios.post('/user/12345', { + name: 'new name' +}, { + cancelToken: source.token +}) + +// cancel the request (the message parameter is optional) +source.cancel('Operation canceled by the user.'); +``` + +You can also create a cancel token by passing an executor function to the `CancelToken` constructor: + +```js +const CancelToken = axios.CancelToken; +let cancel; + +axios.get('/user/12345', { + cancelToken: new CancelToken(function executor(c) { + // An executor function receives a cancel function as a parameter + cancel = c; + }) +}); + +// cancel the request +cancel(); +``` + +> Note: you can cancel several requests with the same cancel token/abort controller. +> If a cancellation token is already cancelled at the moment of starting an Axios request, then the request is cancelled immediately, without any attempts to make a real request. + +> During the transition period, you can use both cancellation APIs, even for the same request: + +## Using `application/x-www-form-urlencoded` format + +### URLSearchParams + +By default, axios serializes JavaScript objects to `JSON`. To send data in the [`application/x-www-form-urlencoded` format](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) instead, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API, which is [supported](http://www.caniuse.com/#feat=urlsearchparams) in the vast majority of browsers, [and Node](https://nodejs.org/api/url.html#url_class_urlsearchparams) starting with v10 (released in 2018). + +```js +const params = new URLSearchParams({ foo: 'bar' }); +params.append('extraparam', 'value'); +axios.post('/foo', params); +``` + +### Query string (Older browsers) + +For compatibility with very old browsers, there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment). + +Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library: + +```js +const qs = require('qs'); +axios.post('/foo', qs.stringify({ 'bar': 123 })); +``` + +Or in another way (ES6), + +```js +import qs from 'qs'; +const data = { 'bar': 123 }; +const options = { + method: 'POST', + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + data: qs.stringify(data), + url, +}; +axios(options); +``` + +### Older Node.js versions + +For older Node.js engines, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows: + +```js +const querystring = require('querystring'); +axios.post('https://something.com/', querystring.stringify({ foo: 'bar' })); +``` + +You can also use the [`qs`](https://github.com/ljharb/qs) library. + +> NOTE: +> The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case. + +### 🆕 Automatic serialization to URLSearchParams + +Axios will automatically serialize the data object to urlencoded format if the content-type header is set to "application/x-www-form-urlencoded". + +``` +const data = { + x: 1, + arr: [1, 2, 3], + arr2: [1, [2], 3], + users: [{name: 'Peter', surname: 'Griffin'}, {name: 'Thomas', surname: 'Anderson'}], +}; + +await axios.postForm('https://postman-echo.com/post', data, + {headers: {'content-type': 'application/x-www-form-urlencoded'}} +); +``` + +The server will handle it as + +```js + { + x: '1', + 'arr[]': [ '1', '2', '3' ], + 'arr2[0]': '1', + 'arr2[1][0]': '2', + 'arr2[2]': '3', + 'arr3[]': [ '1', '2', '3' ], + 'users[0][name]': 'Peter', + 'users[0][surname]': 'griffin', + 'users[1][name]': 'Thomas', + 'users[1][surname]': 'Anderson' + } +```` + +If your backend body-parser (like `body-parser` of `express.js`) supports nested objects decoding, you will get the same object on the server-side automatically + +```js + var app = express(); + + app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies + + app.post('/', function (req, res, next) { + // echo body as JSON + res.send(JSON.stringify(req.body)); + }); + + server = app.listen(3000); +``` + +## Using `multipart/form-data` format + +### FormData + +To send the data as a `multipart/formdata` you need to pass a formData instance as a payload. +Setting the `Content-Type` header is not required as Axios guesses it based on the payload type. + +```js +const formData = new FormData(); +formData.append('foo', 'bar'); + +axios.post('https://httpbin.org/post', formData); +``` + +In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows: + +```js +const FormData = require('form-data'); + +const form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); + +axios.post('https://example.com', form) +``` + +### 🆕 Automatic serialization to FormData + +Starting from `v0.27.0`, Axios supports automatic object serialization to a FormData object if the request `Content-Type` +header is set to `multipart/form-data`. + +The following request will submit the data in a FormData format (Browser & Node.js): + +```js +import axios from 'axios'; + +axios.post('https://httpbin.org/post', {x: 1}, { + headers: { + 'Content-Type': 'multipart/form-data' + } +}).then(({data})=> console.log(data)); +``` + +In the `node.js` build, the ([`form-data`](https://github.com/form-data/form-data)) polyfill is used by default. + +You can overload the FormData class by setting the `env.FormData` config variable, +but you probably won't need it in most cases: + +```js +const axios= require('axios'); +var FormData = require('form-data'); + +axios.post('https://httpbin.org/post', {x: 1, buf: new Buffer(10)}, { + headers: { + 'Content-Type': 'multipart/form-data' + } +}).then(({data})=> console.log(data)); +``` + +Axios FormData serializer supports some special endings to perform the following operations: + +- `{}` - serialize the value with JSON.stringify +- `[]` - unwrap the array-like object as separate fields with the same key + +> NOTE: +> unwrap/expand operation will be used by default on arrays and FileList objects + +FormData serializer supports additional options via `config.formSerializer: object` property to handle rare cases: + +- `visitor: Function` - user-defined visitor function that will be called recursively to serialize the data object +to a `FormData` object by following custom rules. + +- `dots: boolean = false` - use dot notation instead of brackets to serialize arrays and objects; + +- `metaTokens: boolean = true` - add the special ending (e.g `user{}: '{"name": "John"}'`) in the FormData key. +The back-end body-parser could potentially use this meta-information to automatically parse the value as JSON. + +- `indexes: null|false|true = false` - controls how indexes will be added to unwrapped keys of `flat` array-like objects + + - `null` - don't add brackets (`arr: 1`, `arr: 2`, `arr: 3`) + - `false`(default) - add empty brackets (`arr[]: 1`, `arr[]: 2`, `arr[]: 3`) + - `true` - add brackets with indexes (`arr[0]: 1`, `arr[1]: 2`, `arr[2]: 3`) + +Let's say we have an object like this one: + +```js +const obj = { + x: 1, + arr: [1, 2, 3], + arr2: [1, [2], 3], + users: [{name: 'Peter', surname: 'Griffin'}, {name: 'Thomas', surname: 'Anderson'}], + 'obj2{}': [{x:1}] +}; +``` + +The following steps will be executed by the Axios serializer internally: + +```js +const formData= new FormData(); +formData.append('x', '1'); +formData.append('arr[]', '1'); +formData.append('arr[]', '2'); +formData.append('arr[]', '3'); +formData.append('arr2[0]', '1'); +formData.append('arr2[1][0]', '2'); +formData.append('arr2[2]', '3'); +formData.append('users[0][name]', 'Peter'); +formData.append('users[0][surname]', 'Griffin'); +formData.append('users[1][name]', 'Thomas'); +formData.append('users[1][surname]', 'Anderson'); +formData.append('obj2{}', '[{"x":1}]'); +``` + +Axios supports the following shortcut methods: `postForm`, `putForm`, `patchForm` +which are just the corresponding http methods with the `Content-Type` header preset to `multipart/form-data`. + +## Files Posting + +You can easily sumbit a single file + +```js +await axios.postForm('https://httpbin.org/post', { + 'myVar' : 'foo', + 'file': document.querySelector('#fileInput').files[0] +}); +``` + +or multiple files as `multipart/form-data`. + +```js +await axios.postForm('https://httpbin.org/post', { + 'files[]': document.querySelector('#fileInput').files +}); +``` + +`FileList` object can be passed directly: + +```js +await axios.postForm('https://httpbin.org/post', document.querySelector('#fileInput').files) +``` + +All files will be sent with the same field names: `files[]`. + +## 🆕 HTML Form Posting (browser) + +Pass HTML Form element as a payload to submit it as `multipart/form-data` content. + +```js +await axios.postForm('https://httpbin.org/post', document.querySelector('#htmlForm')); +``` + +`FormData` and `HTMLForm` objects can also be posted as `JSON` by explicitly setting the `Content-Type` header to `application/json`: + +```js +await axios.post('https://httpbin.org/post', document.querySelector('#htmlForm'), { + headers: { + 'Content-Type': 'application/json' + } +}) +``` + +For example, the Form + +```html +
+ + + + + + + + + +
+``` + +will be submitted as the following JSON object: + +```js +{ + "foo": "1", + "deep": { + "prop": { + "spaced": "3" + } + }, + "baz": [ + "4", + "5" + ], + "user": { + "age": "value2" + } +} +```` + +Sending `Blobs`/`Files` as JSON (`base64`) is not currently supported. + +## Semver + +Until axios reaches a `1.0` release, breaking changes will be released with a new minor version. For example `0.5.1`, and `0.5.4` will have the same API, but `0.6.0` will have breaking changes. + +## Promises + +axios depends on a native ES6 Promise implementation to be [supported](https://caniuse.com/promises). +If your environment doesn't support ES6 Promises, you can [polyfill](https://github.com/jakearchibald/es6-promise). + +## TypeScript + +axios includes [TypeScript](https://typescriptlang.org) definitions and a type guard for axios errors. + +```typescript +let user: User = null; +try { + const { data } = await axios.get('/user?ID=12345'); + user = data.userDetails; +} catch (error) { + if (axios.isAxiosError(error)) { + handleAxiosError(error); + } else { + handleUnexpectedError(error); + } +} +``` + +## Online one-click setup + +You can use Gitpod, an online IDE(which is free for Open Source) for contributing or running the examples online. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/axios/axios/blob/master/examples/server.js) + + +## Resources + +* [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) +* [Upgrade Guide](https://github.com/axios/axios/blob/master/UPGRADE_GUIDE.md) +* [Ecosystem](https://github.com/axios/axios/blob/master/ECOSYSTEM.md) +* [Contributing Guide](https://github.com/axios/axios/blob/master/CONTRIBUTING.md) +* [Code of Conduct](https://github.com/axios/axios/blob/master/CODE_OF_CONDUCT.md) + +## Credits + +axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [AngularJS](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of AngularJS. + +## License + +[MIT](LICENSE) diff --git a/node_modules/axios/SECURITY.md b/node_modules/axios/SECURITY.md new file mode 100644 index 0000000..7b96aaa --- /dev/null +++ b/node_modules/axios/SECURITY.md @@ -0,0 +1,5 @@ +# Reporting a Vulnerability + +If you discover a security vulnerability within axios, please submit a report via [huntr.dev](https://huntr.dev/bounties/?target=https%3A%2F%2Fgithub.com%2Faxios%2Faxios). Bounties and CVEs are automatically managed and allocated via the platform. + +All security vulnerabilities will be promptly addressed. diff --git a/node_modules/axios/UPGRADE_GUIDE.md b/node_modules/axios/UPGRADE_GUIDE.md new file mode 100644 index 0000000..52a022d --- /dev/null +++ b/node_modules/axios/UPGRADE_GUIDE.md @@ -0,0 +1,169 @@ +# Upgrade Guide + +## 0.18.x -> 0.19.0 + +### HTTPS Proxies + +Routing through an https proxy now requires setting the `protocol` attribute of the proxy configuration to `https` + +## 0.15.x -> 0.16.0 + +### `Promise` Type Declarations + +The `Promise` type declarations have been removed from the axios typings in favor of the built-in type declarations. If you use axios in a TypeScript project that targets `ES5`, please make sure to include the `es2015.promise` lib. Please see [this post](https://blog.mariusschulz.com/2016/11/25/typescript-2-0-built-in-type-declarations) for details. + +## 0.13.x -> 0.14.0 + +### TypeScript Definitions + +The axios TypeScript definitions have been updated to match the axios API and use the ES2015 module syntax. + +Please use the following `import` statement to import axios in TypeScript: + +```typescript +import axios from 'axios'; + +axios.get('/foo') + .then(response => console.log(response)) + .catch(error => console.log(error)); +``` + +### `agent` Config Option + +The `agent` config option has been replaced with two new options: `httpAgent` and `httpsAgent`. Please use them instead. + +```js +{ + // Define a custom agent for HTTP + httpAgent: new http.Agent({ keepAlive: true }), + // Define a custom agent for HTTPS + httpsAgent: new https.Agent({ keepAlive: true }) +} +``` + +### `progress` Config Option + +The `progress` config option has been replaced with the `onUploadProgress` and `onDownloadProgress` options. + +```js +{ + // Define a handler for upload progress events + onUploadProgress: function (progressEvent) { + // ... + }, + + // Define a handler for download progress events + onDownloadProgress: function (progressEvent) { + // ... + } +} +``` + +## 0.12.x -> 0.13.0 + +The `0.13.0` release contains several changes to custom adapters and error handling. + +### Error Handling + +Previous to this release an error could either be a server response with bad status code or an actual `Error`. With this release Promise will always reject with an `Error`. In the case that a response was received, the `Error` will also include the response. + +```js +axios.get('/user/12345') + .catch((error) => { + console.log(error.message); + console.log(error.code); // Not always specified + console.log(error.config); // The config that was used to make the request + console.log(error.response); // Only available if response was received from the server + }); +``` + +### Request Adapters + +This release changes a few things about how request adapters work. Please take note if you are using your own custom adapter. + +1. Response transformer is now called outside of adapter. +2. Request adapter returns a `Promise`. + +This means that you no longer need to invoke `transformData` on response data. You will also no longer receive `resolve` and `reject` as arguments in your adapter. + +Previous code: + +```js +function myAdapter(resolve, reject, config) { + var response = { + data: transformData( + responseData, + responseHeaders, + config.transformResponse + ), + status: request.status, + statusText: request.statusText, + headers: responseHeaders + }; + settle(resolve, reject, response); +} +``` + +New code: + +```js +function myAdapter(config) { + return new Promise(function (resolve, reject) { + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders + }; + settle(resolve, reject, response); + }); +} +``` + +See the related commits for more details: + +- [Response transformers](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e) +- [Request adapter Promise](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a) + +## 0.5.x -> 0.6.0 + +The `0.6.0` release contains mostly bug fixes, but there are a couple things to be aware of when upgrading. + +### ES6 Promise Polyfill + +Up until the `0.6.0` release ES6 `Promise` was being polyfilled using [es6-promise](https://github.com/jakearchibald/es6-promise). With this release, the polyfill has been removed, and you will need to supply it yourself if your environment needs it. + +```js +require('es6-promise').polyfill(); +var axios = require('axios'); +``` + +This will polyfill the global environment, and only needs to be done once. + +### `axios.success`/`axios.error` + +The `success`, and `error` aliases were deprecated in [0.4.0](https://github.com/axios/axios/blob/master/CHANGELOG.md#040-oct-03-2014). As of this release they have been removed entirely. Instead please use `axios.then`, and `axios.catch` respectively. + +```js +axios.get('some/url') + .then(function (res) { + /* ... */ + }) + .catch(function (err) { + /* ... */ + }); +``` + +### UMD + +Previous versions of axios shipped with an AMD, CommonJS, and Global build. This has all been rolled into a single UMD build. + +```js +// AMD +require(['bower_components/axios/dist/axios'], function (axios) { + /* ... */ +}); + +// CommonJS +var axios = require('axios/dist/axios'); +``` diff --git a/node_modules/axios/bin/check-build-version.js b/node_modules/axios/bin/check-build-version.js new file mode 100644 index 0000000..41d9253 --- /dev/null +++ b/node_modules/axios/bin/check-build-version.js @@ -0,0 +1,19 @@ +const fs = require('fs'); +const assert = require('assert'); +const axios = require('../index.js'); + +const {version} = JSON.parse(fs.readFileSync('./package.json')); + +console.log('Checking versions...\n----------------------------') + +console.log(`Package version: v${version}`); +console.log(`Axios version: v${axios.VERSION}`); +console.log(`----------------------------`); + +assert.strictEqual( + version, + axios.VERSION, + `Version mismatch between package and Axios ${version} != ${axios.VERSION}` +); + +console.log('✔️ PASSED\n'); diff --git a/node_modules/axios/bin/ssl_hotfix.js b/node_modules/axios/bin/ssl_hotfix.js new file mode 100644 index 0000000..e79819f --- /dev/null +++ b/node_modules/axios/bin/ssl_hotfix.js @@ -0,0 +1,22 @@ +const {spawn} = require('child_process'); + +const args = process.argv.slice(2); + +console.log(`Running ${args.join(' ')} on ${process.version}\n`); + +const match = /v(\d+)/.exec(process.version); + +const isHotfixNeeded = match && match[1] > 16; + +isHotfixNeeded && console.warn('Setting --openssl-legacy-provider as ssl hotfix'); + +const test = spawn('cross-env', + isHotfixNeeded ? ['NODE_OPTIONS=--openssl-legacy-provider', ...args] : args, { + shell: true, + stdio: 'inherit' + } +); + +test.on('exit', function (code) { + process.exit(code) +}) diff --git a/node_modules/axios/dist/axios.js b/node_modules/axios/dist/axios.js new file mode 100644 index 0000000..7509ebb --- /dev/null +++ b/node_modules/axios/dist/axios.js @@ -0,0 +1,2377 @@ +// axios v0.28.1 Copyright (c) 2024 Matt Zabriskie +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.axios = factory()); +})(this, (function () { 'use strict'; + + var bind = function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; + }; + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + + // eslint-disable-next-line func-names + var kindOf = (function(cache) { + // eslint-disable-next-line func-names + return function(thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; + })(Object.create(null)); + + function kindOfTest(type) { + type = type.toLowerCase(); + return function isKindOf(thing) { + return kindOf(thing) === type; + }; + } + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ + function isArray(val) { + return Array.isArray(val); + } + + /** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ + function isUndefined(val) { + return typeof val === 'undefined'; + } + + /** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ + function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); + } + + /** + * Determine if a value is an ArrayBuffer + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + var isArrayBuffer = kindOfTest('ArrayBuffer'); + + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ + function isString(val) { + return typeof val === 'string'; + } + + /** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ + function isNumber(val) { + return typeof val === 'number'; + } + + /** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ + function isObject(val) { + return val !== null && typeof val === 'object'; + } + + /** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ + function isPlainObject(val) { + if (kindOf(val) !== 'object') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; + } + + /** + * Determine if a value is a empty Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a empty Object, otherwise false + */ + function isEmptyObject(val) { + return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; + } + + /** + * Determine if a value is a Date + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ + var isDate = kindOfTest('Date'); + + /** + * Determine if a value is a File + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ + var isFile = kindOfTest('File'); + + /** + * Determine if a value is a Blob + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ + var isBlob = kindOfTest('Blob'); + + /** + * Determine if a value is a FileList + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ + var isFileList = kindOfTest('FileList'); + + /** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + function isFunction(val) { + return toString.call(val) === '[object Function]'; + } + + /** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ + function isStream(val) { + return isObject(val) && isFunction(val.pipe); + } + + /** + * Determine if a value is a FormData + * + * @param {Object} thing The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ + function isFormData(thing) { + var pattern = '[object FormData]'; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || + toString.call(thing) === pattern || + (isFunction(thing.toString) && thing.toString() === pattern) + ); + } + + /** + * Determine if a value is a URLSearchParams object + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + var isURLSearchParams = kindOfTest('URLSearchParams'); + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ + function trim(str) { + return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ + function isStandardBrowserEnv() { + var product; + if (typeof navigator !== 'undefined' && ( + (product = navigator.product) === 'ReactNative' || + product === 'NativeScript' || + product === 'NS') + ) { + return false; + } + + return typeof window !== 'undefined' && typeof document !== 'undefined'; + } + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ + function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } + } + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ + function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; + } + + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ + function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; + } + + /** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ + function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; + } + + /** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + */ + + function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + props && Object.assign(constructor.prototype, props); + } + + /** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * @returns {Object} + */ + + function toFlatObject(sourceObj, destObj, filter, propFilter) { + var props; + var i; + var prop; + var merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && Object.getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; + } + + /* + * determines whether a string ends with the characters of a specified string + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * @returns {boolean} + */ + function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + } + + + /** + * Returns new array from array like object or null if failed + * @param {*} [thing] + * @returns {?Array} + */ + function toArray(thing) { + if (!thing) return null; + if (isArray(thing)) return thing; + var i = thing.length; + if (!isNumber(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; + } + + // eslint-disable-next-line func-names + var isTypedArray = (function(TypedArray) { + // eslint-disable-next-line func-names + return function(thing) { + return TypedArray && thing instanceof TypedArray; + }; + })(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array)); + + function forEachEntry(obj, fn) { + var generator = obj && obj[Symbol.iterator]; + + var iterator = generator.call(obj); + + var result; + + while ((result = iterator.next()) && !result.done) { + var pair = result.value; + fn.call(obj, pair[0], pair[1]); + } + } + + function matchAll(regExp, str) { + var matches; + var arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; + } + + var isHTMLForm = kindOfTest('HTMLFormElement'); + + var hasOwnProperty = (function resolver(_hasOwnProperty) { + return function(obj, prop) { + return _hasOwnProperty.call(obj, prop); + }; + })(Object.prototype.hasOwnProperty); + + var utils = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isPlainObject: isPlainObject, + isEmptyObject: isEmptyObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + isTypedArray: isTypedArray, + isFileList: isFileList, + forEachEntry: forEachEntry, + matchAll: matchAll, + isHTMLForm: isHTMLForm, + hasOwnProperty: hasOwnProperty + }; + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ + function AxiosError(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + response && (this.response = response); + } + + utils.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code, + status: this.response && this.response.status ? this.response.status : null + }; + } + }); + + var prototype$1 = AxiosError.prototype; + var descriptors = {}; + + [ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' + // eslint-disable-next-line func-names + ].forEach(function(code) { + descriptors[code] = {value: code}; + }); + + Object.defineProperties(AxiosError, descriptors); + Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); + + // eslint-disable-next-line func-names + AxiosError.from = function(error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype$1); + + utils.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; + }; + + var AxiosError_1 = AxiosError; + + /* eslint-env browser */ + var browser$1 = typeof self == 'object' ? self.FormData : window.FormData; + + // eslint-disable-next-line strict + var FormData$1 = browser$1; + + function isVisitable(thing) { + return utils.isPlainObject(thing) || utils.isArray(thing); + } + + function removeBrackets(key) { + return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; + } + + function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); + } + + function isFlatArray(arr) { + return utils.isArray(arr) && !arr.some(isVisitable); + } + + var predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); + }); + + function isSpecCompliant(thing) { + return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]; + } + + /** + * Convert a data object to FormData + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * @returns {Object} + **/ + + function toFormData(obj, formData, options) { + if (!utils.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData$1 || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils.isUndefined(source[option]); + }); + + var metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + var visitor = options.visitor || defaultVisitor; + var dots = options.dots; + var indexes = options.indexes; + var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + var useBlob = _Blob && isSpecCompliant(formData); + + if (!utils.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils.isBlob(value)) { + throw new AxiosError_1('Blob is not supported. Use a Buffer instead.'); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + var arr = value; + + if (value && !path && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils.isArray(value) && isFlatArray(value)) || + (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !utils.isUndefined(el) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + var stack = []; + + var exposedHelpers = Object.assign(predicates, { + defaultVisitor: defaultVisitor, + convertValue: convertValue, + isVisitable: isVisitable + }); + + function build(value, path) { + if (utils.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils.forEach(value, function each(el, key) { + var result = !utils.isUndefined(el) && visitor.call( + formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; + } + + var toFormData_1 = toFormData; + + function encode$1(str) { + var charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'\(\)~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); + } + + function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData_1(params, this, options); + } + + var prototype = AxiosURLSearchParams.prototype; + + prototype.append = function append(name, value) { + this._pairs.push([name, value]); + }; + + prototype.toString = function toString(encoder) { + var _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); + }; + + var AxiosURLSearchParams_1 = AxiosURLSearchParams; + + function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?object} options + * @returns {string} The formatted url + */ + var buildURL = function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var hashmarkIndex = url.indexOf('#'); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + var _encode = options && options.encode || encode; + + var serializeFn = options && options.serialize; + + var serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams_1(params, options).toString(_encode); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; + }; + + function InterceptorManager() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + }; + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ + InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + }; + + /** + * Clear all interceptors from the stack + */ + InterceptorManager.prototype.clear = function clear() { + if (this.handlers) { + this.handlers = []; + } + }; + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ + InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + }; + + var InterceptorManager_1 = InterceptorManager; + + var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); + }; + + var transitional = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false + }; + + var URLSearchParams_1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams_1; + + var FormData_1 = FormData; + + var browser = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams_1, + FormData: FormData_1, + Blob: Blob + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] + }; + + var platform = browser; + + var toURLEncodedForm = function toURLEncodedForm(data, options) { + return toFormData_1(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); + }; + + function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils.matchAll(/\w+|\[(\w*)]/g, name).map(function(match) { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); + } + + function arrayToObject(arr) { + var obj = {}; + var keys = Object.keys(arr); + var i; + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; + } + + function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + var name = path[index++]; + var isNumericKey = Number.isFinite(+name); + var isLast = index >= path.length; + name = !name && utils.isArray(target) ? target.length : name; + + if (isLast) { + if (utils.hasOwnProperty(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils.isObject(target[name])) { + target[name] = []; + } + + var result = buildPath(path, value, target[name], index); + + if (result && utils.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { + var obj = {}; + + utils.forEachEntry(formData, function(name, value) { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; + } + + var formDataToJSON_1 = formDataToJSON; + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ + var settle = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError_1( + 'Request failed with status code ' + response.status, + [AxiosError_1.ERR_BAD_REQUEST, AxiosError_1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } + }; + + var cookies = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() + ); + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + var isAbsoluteURL = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); + }; + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ + var combineURLs = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; + }; + + /** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ + var buildFullPath = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; + }; + + // Headers whose duplicates are ignored by node + // c.f. https://nodejs.org/api/http.html#http_message_headers + var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' + ]; + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ + var parseHeaders = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.slice(0, i)).toLowerCase(); + val = utils.trim(line.slice(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; + }; + + var isURLSameOrigin = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() + ); + + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + */ + function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError_1.call(this, message == null ? 'canceled' : message, AxiosError_1.ERR_CANCELED, config, request); + this.name = 'CanceledError'; + } + + utils.inherits(CanceledError, AxiosError_1, { + __CANCEL__: true + }); + + var CanceledError_1 = CanceledError; + + var parseProtocol = function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; + }; + + var xhr = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + var responseType = config.responseType; + var withXSRFToken = config.withXSRFToken; + var onCanceled; + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled); + } + + if (config.signal) { + config.signal.removeEventListener('abort', onCanceled); + } + } + + if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError_1('Request aborted', AxiosError_1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError_1('Network Error', AxiosError_1.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional$1 = config.transitional || transitional; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError_1( + timeoutErrorMessage, + transitional$1.clarifyTimeoutError ? AxiosError_1.ETIMEDOUT : AxiosError_1.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)); + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) { + // Add xsrf header + var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName); + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = config.responseType; + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function(cancel) { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError_1(null, config, request) : cancel); + request.abort(); + request = null; + }; + + config.cancelToken && config.cancelToken.subscribe(onCanceled); + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + } + } + + // false, 0 (zero number), and '' (empty string) are valid JSON values + if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') { + requestData = null; + } + + var protocol = parseProtocol(fullPath); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError_1('Unsupported protocol ' + protocol + ':', AxiosError_1.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData); + }); + }; + + var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } + } + + function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = xhr; + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = xhr; + } + return adapter; + } + + function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); + } + + var defaults = { + + transitional: transitional, + + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + + var contentType = headers && headers['Content-Type'] || ''; + var hasJSONContentType = contentType.indexOf('application/json') > -1; + var isObjectPayload = utils.isObject(data); + + if (isObjectPayload && utils.isHTMLForm(data)) { + data = new FormData(data); + } + + var isFormData = utils.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON_1(data)) : data; + } + + if (utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + + var isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + var _FormData = this.env && this.env.FormData; + + return toFormData_1( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + setContentTypeIfUnset(headers, 'application/json'); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var JSONRequested = this.responseType === 'json'; + + if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError_1.from(e, AxiosError_1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + } + } + }; + + utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; + }); + + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); + }); + + var defaults_1 = defaults; + + /** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Number} status HTTP status code + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ + var transformData = function transformData(data, headers, status, fns) { + var context = this || defaults_1; + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn.call(context, data, headers, status); + }); + + return data; + }; + + var isCancel = function isCancel(value) { + return !!(value && value.__CANCEL__); + }; + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError_1(); + } + } + + /** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ + var dispatchRequest = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData.call( + config, + config.data, + config.headers, + null, + config.transformRequest + ); + + normalizeHeaderName(config.headers, 'Accept'); + normalizeHeaderName(config.headers, 'Content-Type'); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults_1.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + response.data, + response.headers, + response.status, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + reason.response.data, + reason.response.headers, + reason.response.status, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); + }; + + /** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ + var mergeConfig = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isEmptyObject(source)) { + return utils.merge({}, target); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(prop) { + if (prop in config2) { + return getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + return getMergedValue(undefined, config1[prop]); + } + } + + var mergeMap = { + 'url': valueFromConfig2, + 'method': valueFromConfig2, + 'data': valueFromConfig2, + 'baseURL': defaultToConfig2, + 'transformRequest': defaultToConfig2, + 'transformResponse': defaultToConfig2, + 'paramsSerializer': defaultToConfig2, + 'timeout': defaultToConfig2, + 'timeoutMessage': defaultToConfig2, + 'withCredentials': defaultToConfig2, + 'withXSRFToken': defaultToConfig2, + 'adapter': defaultToConfig2, + 'responseType': defaultToConfig2, + 'xsrfCookieName': defaultToConfig2, + 'xsrfHeaderName': defaultToConfig2, + 'onUploadProgress': defaultToConfig2, + 'onDownloadProgress': defaultToConfig2, + 'decompress': defaultToConfig2, + 'maxContentLength': defaultToConfig2, + 'maxBodyLength': defaultToConfig2, + 'beforeRedirect': defaultToConfig2, + 'transport': defaultToConfig2, + 'httpAgent': defaultToConfig2, + 'httpsAgent': defaultToConfig2, + 'cancelToken': defaultToConfig2, + 'socketPath': defaultToConfig2, + 'responseEncoding': defaultToConfig2, + 'validateStatus': mergeDirectKeys + }; + + utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties; + var configValue = merge(prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; + }; + + var data = { + "version": "0.28.1" + }; + + var VERSION = data.version; + + + var validators$1 = {}; + + // eslint-disable-next-line func-names + ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; + }); + + var deprecatedWarnings = {}; + + /** + * Transitional option validator + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * @returns {function} + */ + validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function(value, opt, opts) { + if (validator === false) { + throw new AxiosError_1( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError_1.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; + }; + + /** + * Assert object's properties type + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + */ + + function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError_1('options must be an object', AxiosError_1.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError_1('option ' + opt + ' must be ' + result, AxiosError_1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError_1('Unknown option ' + opt, AxiosError_1.ERR_BAD_OPTION); + } + } + } + + var validator = { + assertOptions: assertOptions, + validators: validators$1 + }; + + var validators = validator.validators; + /** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ + function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager_1(), + response: new InterceptorManager_1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + */ + Axios.prototype.request = function request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + var transitional = config.transitional; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + var paramsSerializer = config.paramsSerializer; + + if (paramsSerializer !== undefined) { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + + utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer}); + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + var promise; + + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest, undefined]; + + Array.prototype.unshift.apply(chain, requestInterceptorChain); + chain = chain.concat(responseInterceptorChain); + + promise = Promise.resolve(config); + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + } + + + var newConfig = config; + while (requestInterceptorChain.length) { + var onFulfilled = requestInterceptorChain.shift(); + var onRejected = requestInterceptorChain.shift(); + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected(error); + break; + } + } + + try { + promise = dispatchRequest(newConfig); + } catch (error) { + return Promise.reject(error); + } + + while (responseInterceptorChain.length) { + promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); + } + + return promise; + }; + + Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url); + return buildURL(fullPath, config.params, config.paramsSerializer); + }; + + // Provide aliases for supported request methods + utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; + }); + + utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); + }); + + var Axios_1 = Axios; + + /** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ + function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function(cancel) { + if (!token._listeners) return; + + var i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function(onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function(resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError_1(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } + }; + + /** + * Subscribe to the cancel signal + */ + + CancelToken.prototype.subscribe = function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + }; + + /** + * Unsubscribe from the cancel signal + */ + + CancelToken.prototype.unsubscribe = function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + }; + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; + }; + + var CancelToken_1 = CancelToken; + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ + var spread = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + }; + + /** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ + var isAxiosError = function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); + }; + + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios_1(defaultConfig); + var instance = bind(Axios_1.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios_1.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; + } + + // Create the default instance to be exported + var axios = createInstance(defaults_1); + + // Expose Axios class to allow class inheritance + axios.Axios = Axios_1; + + // Expose Cancel & CancelToken + axios.CanceledError = CanceledError_1; + axios.CancelToken = CancelToken_1; + axios.isCancel = isCancel; + axios.VERSION = data.version; + axios.toFormData = toFormData_1; + + // Expose AxiosError class + axios.AxiosError = AxiosError_1; + + // alias for CanceledError for backward compatibility + axios.Cancel = axios.CanceledError; + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = spread; + + // Expose isAxiosError + axios.isAxiosError = isAxiosError; + + axios.formToJSON = function(thing) { + return formDataToJSON_1(utils.isHTMLForm(thing) ? new FormData(thing) : thing); + }; + + var axios_1 = axios; + + // Allow use of default import syntax in TypeScript + var _default = axios; + axios_1.default = _default; + + return axios_1; + +})); +//# sourceMappingURL=axios.js.map diff --git a/node_modules/axios/dist/axios.js.map b/node_modules/axios/dist/axios.js.map new file mode 100644 index 0000000..68e435e --- /dev/null +++ b/node_modules/axios/dist/axios.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../node_modules/form-data/lib/browser.js","../lib/env/classes/FormData.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/helpers/normalizeHeaderName.js","../lib/defaults/transitional.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/platform/browser/index.js","../lib/platform/index.js","../lib/helpers/toURLEncodedForm.js","../lib/helpers/formDataToJSON.js","../lib/core/settle.js","../lib/helpers/cookies.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/core/buildFullPath.js","../lib/helpers/parseHeaders.js","../lib/helpers/isURLSameOrigin.js","../lib/cancel/CanceledError.js","../lib/helpers/parseProtocol.js","../lib/adapters/xhr.js","../lib/defaults/index.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/core/dispatchRequest.js","../lib/core/mergeConfig.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js","../lib/axios.js"],"sourcesContent":["'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n return fn.apply(thisArg, arguments);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar bind = require('./helpers/bind');\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n// eslint-disable-next-line func-names\r\nvar kindOf = (function(cache) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n var str = toString.call(thing);\r\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\r\n };\r\n})(Object.create(null));\r\n\r\nfunction kindOfTest(type) {\r\n type = type.toLowerCase();\r\n return function isKindOf(thing) {\r\n return kindOf(thing) === type;\r\n };\r\n}\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return Array.isArray(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Buffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Buffer, otherwise false\r\n */\r\nfunction isBuffer(val) {\r\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\r\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\r\n\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a plain Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a plain Object, otherwise false\r\n */\r\nfunction isPlainObject(val) {\r\n if (kindOf(val) !== 'object') {\r\n return false;\r\n }\r\n\r\n var prototype = Object.getPrototypeOf(val);\r\n return prototype === null || prototype === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a empty Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a empty Object, otherwise false\r\n */\r\nfunction isEmptyObject(val) {\r\n return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nvar isDate = kindOfTest('Date');\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFile = kindOfTest('File');\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nvar isBlob = kindOfTest('Blob');\r\n\r\n/**\r\n * Determine if a value is a FileList\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFileList = kindOfTest('FileList');\r\n\r\n/**\r\n * Determine if a value is a Function\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Function, otherwise false\r\n */\r\nfunction isFunction(val) {\r\n return toString.call(val) === '[object Function]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Stream\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Stream, otherwise false\r\n */\r\nfunction isStream(val) {\r\n return isObject(val) && isFunction(val.pipe);\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} thing The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(thing) {\r\n var pattern = '[object FormData]';\r\n return thing && (\r\n (typeof FormData === 'function' && thing instanceof FormData) ||\r\n toString.call(thing) === pattern ||\r\n (isFunction(thing.toString) && thing.toString() === pattern)\r\n );\r\n}\r\n\r\n/**\r\n * Determine if a value is a URLSearchParams object\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\r\n */\r\nvar isURLSearchParams = kindOfTest('URLSearchParams');\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * navigator.product -> 'ReactNative'\r\n * nativescript\r\n * navigator.product -> 'NativeScript' or 'NS'\r\n */\r\nfunction isStandardBrowserEnv() {\r\n var product;\r\n if (typeof navigator !== 'undefined' && (\r\n (product = navigator.product) === 'ReactNative' ||\r\n product === 'NativeScript' ||\r\n product === 'NS')\r\n ) {\r\n return false;\r\n }\r\n\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object') {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (isPlainObject(result[key]) && isPlainObject(val)) {\r\n result[key] = merge(result[key], val);\r\n } else if (isPlainObject(val)) {\r\n result[key] = merge({}, val);\r\n } else if (isArray(val)) {\r\n result[key] = val.slice();\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Extends object a by mutably adding to it the properties of object b.\r\n *\r\n * @param {Object} a The object to be extended\r\n * @param {Object} b The object to copy properties from\r\n * @param {Object} thisArg The object to bind function to\r\n * @return {Object} The resulting value of object a\r\n */\r\nfunction extend(a, b, thisArg) {\r\n forEach(b, function assignValue(val, key) {\r\n if (thisArg && typeof val === 'function') {\r\n a[key] = bind(val, thisArg);\r\n } else {\r\n a[key] = val;\r\n }\r\n });\r\n return a;\r\n}\r\n\r\n/**\r\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\r\n *\r\n * @param {string} content with BOM\r\n * @return {string} content value without BOM\r\n */\r\nfunction stripBOM(content) {\r\n if (content.charCodeAt(0) === 0xFEFF) {\r\n content = content.slice(1);\r\n }\r\n return content;\r\n}\r\n\r\n/**\r\n * Inherit the prototype methods from one constructor into another\r\n * @param {function} constructor\r\n * @param {function} superConstructor\r\n * @param {object} [props]\r\n * @param {object} [descriptors]\r\n */\r\n\r\nfunction inherits(constructor, superConstructor, props, descriptors) {\r\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\r\n constructor.prototype.constructor = constructor;\r\n props && Object.assign(constructor.prototype, props);\r\n}\r\n\r\n/**\r\n * Resolve object with deep prototype chain to a flat object\r\n * @param {Object} sourceObj source object\r\n * @param {Object} [destObj]\r\n * @param {Function|Boolean} [filter]\r\n * @param {Function} [propFilter]\r\n * @returns {Object}\r\n */\r\n\r\nfunction toFlatObject(sourceObj, destObj, filter, propFilter) {\r\n var props;\r\n var i;\r\n var prop;\r\n var merged = {};\r\n\r\n destObj = destObj || {};\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n if (sourceObj == null) return destObj;\r\n\r\n do {\r\n props = Object.getOwnPropertyNames(sourceObj);\r\n i = props.length;\r\n while (i-- > 0) {\r\n prop = props[i];\r\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\r\n destObj[prop] = sourceObj[prop];\r\n merged[prop] = true;\r\n }\r\n }\r\n sourceObj = filter !== false && Object.getPrototypeOf(sourceObj);\r\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\r\n\r\n return destObj;\r\n}\r\n\r\n/*\r\n * determines whether a string ends with the characters of a specified string\r\n * @param {String} str\r\n * @param {String} searchString\r\n * @param {Number} [position= 0]\r\n * @returns {boolean}\r\n */\r\nfunction endsWith(str, searchString, position) {\r\n str = String(str);\r\n if (position === undefined || position > str.length) {\r\n position = str.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = str.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n}\r\n\r\n\r\n/**\r\n * Returns new array from array like object or null if failed\r\n * @param {*} [thing]\r\n * @returns {?Array}\r\n */\r\nfunction toArray(thing) {\r\n if (!thing) return null;\r\n if (isArray(thing)) return thing;\r\n var i = thing.length;\r\n if (!isNumber(i)) return null;\r\n var arr = new Array(i);\r\n while (i-- > 0) {\r\n arr[i] = thing[i];\r\n }\r\n return arr;\r\n}\r\n\r\n// eslint-disable-next-line func-names\r\nvar isTypedArray = (function(TypedArray) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n return TypedArray && thing instanceof TypedArray;\r\n };\r\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\r\n\r\nfunction forEachEntry(obj, fn) {\r\n var generator = obj && obj[Symbol.iterator];\r\n\r\n var iterator = generator.call(obj);\r\n\r\n var result;\r\n\r\n while ((result = iterator.next()) && !result.done) {\r\n var pair = result.value;\r\n fn.call(obj, pair[0], pair[1]);\r\n }\r\n}\r\n\r\nfunction matchAll(regExp, str) {\r\n var matches;\r\n var arr = [];\r\n\r\n while ((matches = regExp.exec(str)) !== null) {\r\n arr.push(matches);\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nvar isHTMLForm = kindOfTest('HTMLFormElement');\r\n\r\nvar hasOwnProperty = (function resolver(_hasOwnProperty) {\r\n return function(obj, prop) {\r\n return _hasOwnProperty.call(obj, prop);\r\n };\r\n})(Object.prototype.hasOwnProperty);\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isBuffer: isBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isPlainObject: isPlainObject,\r\n isEmptyObject: isEmptyObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isFunction: isFunction,\r\n isStream: isStream,\r\n isURLSearchParams: isURLSearchParams,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n extend: extend,\r\n trim: trim,\r\n stripBOM: stripBOM,\r\n inherits: inherits,\r\n toFlatObject: toFlatObject,\r\n kindOf: kindOf,\r\n kindOfTest: kindOfTest,\r\n endsWith: endsWith,\r\n toArray: toArray,\r\n isTypedArray: isTypedArray,\r\n isFileList: isFileList,\r\n forEachEntry: forEachEntry,\r\n matchAll: matchAll,\r\n isHTMLForm: isHTMLForm,\r\n hasOwnProperty: hasOwnProperty\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Create an Error with the specified message, config, error code, request and response.\r\n *\r\n * @param {string} message The error message.\r\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\r\n * @param {Object} [config] The config.\r\n * @param {Object} [request] The request.\r\n * @param {Object} [response] The response.\r\n * @returns {Error} The created error.\r\n */\r\nfunction AxiosError(message, code, config, request, response) {\r\n Error.call(this);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error()).stack;\r\n }\r\n\r\n this.message = message;\r\n this.name = 'AxiosError';\r\n code && (this.code = code);\r\n config && (this.config = config);\r\n request && (this.request = request);\r\n response && (this.response = response);\r\n}\r\n\r\nutils.inherits(AxiosError, Error, {\r\n toJSON: function toJSON() {\r\n return {\r\n // Standard\r\n message: this.message,\r\n name: this.name,\r\n // Microsoft\r\n description: this.description,\r\n number: this.number,\r\n // Mozilla\r\n fileName: this.fileName,\r\n lineNumber: this.lineNumber,\r\n columnNumber: this.columnNumber,\r\n stack: this.stack,\r\n // Axios\r\n config: this.config,\r\n code: this.code,\r\n status: this.response && this.response.status ? this.response.status : null\r\n };\r\n }\r\n});\r\n\r\nvar prototype = AxiosError.prototype;\r\nvar descriptors = {};\r\n\r\n[\r\n 'ERR_BAD_OPTION_VALUE',\r\n 'ERR_BAD_OPTION',\r\n 'ECONNABORTED',\r\n 'ETIMEDOUT',\r\n 'ERR_NETWORK',\r\n 'ERR_FR_TOO_MANY_REDIRECTS',\r\n 'ERR_DEPRECATED',\r\n 'ERR_BAD_RESPONSE',\r\n 'ERR_BAD_REQUEST',\r\n 'ERR_CANCELED',\r\n 'ERR_NOT_SUPPORT',\r\n 'ERR_INVALID_URL'\r\n// eslint-disable-next-line func-names\r\n].forEach(function(code) {\r\n descriptors[code] = {value: code};\r\n});\r\n\r\nObject.defineProperties(AxiosError, descriptors);\r\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\r\n\r\n// eslint-disable-next-line func-names\r\nAxiosError.from = function(error, code, config, request, response, customProps) {\r\n var axiosError = Object.create(prototype);\r\n\r\n utils.toFlatObject(error, axiosError, function filter(obj) {\r\n return obj !== Error.prototype;\r\n });\r\n\r\n AxiosError.call(axiosError, error.message, code, config, request, response);\r\n\r\n axiosError.cause = error;\r\n\r\n axiosError.name = error.name;\r\n\r\n customProps && Object.assign(axiosError, customProps);\r\n\r\n return axiosError;\r\n};\r\n\r\nmodule.exports = AxiosError;\r\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","// eslint-disable-next-line strict\r\nmodule.exports = require('form-data');\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar envFormData = require('../env/classes/FormData');\r\n\r\nfunction isVisitable(thing) {\r\n return utils.isPlainObject(thing) || utils.isArray(thing);\r\n}\r\n\r\nfunction removeBrackets(key) {\r\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\r\n}\r\n\r\nfunction renderKey(path, key, dots) {\r\n if (!path) return key;\r\n return path.concat(key).map(function each(token, i) {\r\n // eslint-disable-next-line no-param-reassign\r\n token = removeBrackets(token);\r\n return !dots && i ? '[' + token + ']' : token;\r\n }).join(dots ? '.' : '');\r\n}\r\n\r\nfunction isFlatArray(arr) {\r\n return utils.isArray(arr) && !arr.some(isVisitable);\r\n}\r\n\r\nvar predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\r\n return /^is[A-Z]/.test(prop);\r\n});\r\n\r\nfunction isSpecCompliant(thing) {\r\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\r\n}\r\n\r\n/**\r\n * Convert a data object to FormData\r\n * @param {Object} obj\r\n * @param {?Object} [formData]\r\n * @param {?Object} [options]\r\n * @param {Function} [options.visitor]\r\n * @param {Boolean} [options.metaTokens = true]\r\n * @param {Boolean} [options.dots = false]\r\n * @param {?Boolean} [options.indexes = false]\r\n * @returns {Object}\r\n **/\r\n\r\nfunction toFormData(obj, formData, options) {\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('target must be an object');\r\n }\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n formData = formData || new (envFormData || FormData)();\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n options = utils.toFlatObject(options, {\r\n metaTokens: true,\r\n dots: false,\r\n indexes: false\r\n }, false, function defined(option, source) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n return !utils.isUndefined(source[option]);\r\n });\r\n\r\n var metaTokens = options.metaTokens;\r\n // eslint-disable-next-line no-use-before-define\r\n var visitor = options.visitor || defaultVisitor;\r\n var dots = options.dots;\r\n var indexes = options.indexes;\r\n var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\r\n var useBlob = _Blob && isSpecCompliant(formData);\r\n\r\n if (!utils.isFunction(visitor)) {\r\n throw new TypeError('visitor must be a function');\r\n }\r\n\r\n function convertValue(value) {\r\n if (value === null) return '';\r\n\r\n if (utils.isDate(value)) {\r\n return value.toISOString();\r\n }\r\n\r\n if (!useBlob && utils.isBlob(value)) {\r\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\r\n }\r\n\r\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\r\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n *\r\n * @param {*} value\r\n * @param {String|Number} key\r\n * @param {Array} path\r\n * @this {FormData}\r\n * @returns {boolean} return true to visit the each prop of the value recursively\r\n */\r\n function defaultVisitor(value, key, path) {\r\n var arr = value;\r\n\r\n if (value && !path && typeof value === 'object') {\r\n if (utils.endsWith(key, '{}')) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = metaTokens ? key : key.slice(0, -2);\r\n // eslint-disable-next-line no-param-reassign\r\n value = JSON.stringify(value);\r\n } else if (\r\n (utils.isArray(value) && isFlatArray(value)) ||\r\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\r\n )) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = removeBrackets(key);\r\n\r\n arr.forEach(function each(el, index) {\r\n !utils.isUndefined(el) && formData.append(\r\n // eslint-disable-next-line no-nested-ternary\r\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\r\n convertValue(el)\r\n );\r\n });\r\n return false;\r\n }\r\n }\r\n\r\n if (isVisitable(value)) {\r\n return true;\r\n }\r\n\r\n formData.append(renderKey(path, key, dots), convertValue(value));\r\n\r\n return false;\r\n }\r\n\r\n var stack = [];\r\n\r\n var exposedHelpers = Object.assign(predicates, {\r\n defaultVisitor: defaultVisitor,\r\n convertValue: convertValue,\r\n isVisitable: isVisitable\r\n });\r\n\r\n function build(value, path) {\r\n if (utils.isUndefined(value)) return;\r\n\r\n if (stack.indexOf(value) !== -1) {\r\n throw Error('Circular reference detected in ' + path.join('.'));\r\n }\r\n\r\n stack.push(value);\r\n\r\n utils.forEach(value, function each(el, key) {\r\n var result = !utils.isUndefined(el) && visitor.call(\r\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\r\n );\r\n\r\n if (result === true) {\r\n build(el, path ? path.concat(key) : [key]);\r\n }\r\n });\r\n\r\n stack.pop();\r\n }\r\n\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('data must be an object');\r\n }\r\n\r\n build(obj);\r\n\r\n return formData;\r\n}\r\n\r\nmodule.exports = toFormData;\r\n","'use strict';\r\n\r\nvar toFormData = require('./toFormData');\r\n\r\nfunction encode(str) {\r\n var charMap = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+',\r\n '%00': '\\x00'\r\n };\r\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function replacer(match) {\r\n return charMap[match];\r\n });\r\n}\r\n\r\nfunction AxiosURLSearchParams(params, options) {\r\n this._pairs = [];\r\n\r\n params && toFormData(params, this, options);\r\n}\r\n\r\nvar prototype = AxiosURLSearchParams.prototype;\r\n\r\nprototype.append = function append(name, value) {\r\n this._pairs.push([name, value]);\r\n};\r\n\r\nprototype.toString = function toString(encoder) {\r\n var _encode = encoder ? function(value) {\r\n return encoder.call(this, value, encode);\r\n } : encode;\r\n\r\n return this._pairs.map(function each(pair) {\r\n return _encode(pair[0]) + '=' + _encode(pair[1]);\r\n }, '').join('&');\r\n};\r\n\r\nmodule.exports = AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosURLSearchParams = require('../helpers/AxiosURLSearchParams');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @param {?object} options\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, options) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var hashmarkIndex = url.indexOf('#');\r\n\r\n if (hashmarkIndex !== -1) {\r\n url = url.slice(0, hashmarkIndex);\r\n }\r\n\r\n var _encode = options && options.encode || encode;\r\n\r\n var serializeFn = options && options.serialize;\r\n\r\n var serializedParams;\r\n\r\n if (serializeFn) {\r\n serializedParams = serializeFn(params, options);\r\n } else {\r\n serializedParams = utils.isURLSearchParams(params) ?\r\n params.toString() :\r\n new AxiosURLSearchParams(params, options).toString(_encode);\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected,\r\n synchronous: options ? options.synchronous : false,\r\n runWhen: options ? options.runWhen : null\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Clear all interceptors from the stack\r\n */\r\nInterceptorManager.prototype.clear = function clear() {\r\n if (this.handlers) {\r\n this.handlers = [];\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\r\n utils.forEach(headers, function processHeader(value, name) {\r\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\r\n headers[normalizedName] = value;\r\n delete headers[name];\r\n }\r\n });\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n silentJSONParsing: true,\r\n forcedJSONParsing: true,\r\n clarifyTimeoutError: false\r\n};\r\n","'use strict';\r\n\r\nvar AxiosURLSearchParams = require('../../../helpers/AxiosURLSearchParams');\r\n\r\nmodule.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nmodule.exports = FormData;\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n isBrowser: true,\r\n classes: {\r\n URLSearchParams: require('./classes/URLSearchParams'),\r\n FormData: require('./classes/FormData'),\r\n Blob: Blob\r\n },\r\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = require('./node/');\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar toFormData = require('./toFormData');\r\nvar platform = require('../platform/');\r\n\r\nmodule.exports = function toURLEncodedForm(data, options) {\r\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\r\n visitor: function(value, key, path, helpers) {\r\n if (platform.isNode && utils.isBuffer(value)) {\r\n this.append(key, value.toString('base64'));\r\n return false;\r\n }\r\n\r\n return helpers.defaultVisitor.apply(this, arguments);\r\n }\r\n }, options));\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nfunction parsePropPath(name) {\r\n // foo[x][y][z]\r\n // foo.x.y.z\r\n // foo-x-y-z\r\n // foo x y z\r\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(function(match) {\r\n return match[0] === '[]' ? '' : match[1] || match[0];\r\n });\r\n}\r\n\r\nfunction arrayToObject(arr) {\r\n var obj = {};\r\n var keys = Object.keys(arr);\r\n var i;\r\n var len = keys.length;\r\n var key;\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n obj[key] = arr[key];\r\n }\r\n return obj;\r\n}\r\n\r\nfunction formDataToJSON(formData) {\r\n function buildPath(path, value, target, index) {\r\n var name = path[index++];\r\n var isNumericKey = Number.isFinite(+name);\r\n var isLast = index >= path.length;\r\n name = !name && utils.isArray(target) ? target.length : name;\r\n\r\n if (isLast) {\r\n if (utils.hasOwnProperty(target, name)) {\r\n target[name] = [target[name], value];\r\n } else {\r\n target[name] = value;\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (!target[name] || !utils.isObject(target[name])) {\r\n target[name] = [];\r\n }\r\n\r\n var result = buildPath(path, value, target[name], index);\r\n\r\n if (result && utils.isArray(target[name])) {\r\n target[name] = arrayToObject(target[name]);\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\r\n var obj = {};\r\n\r\n utils.forEachEntry(formData, function(name, value) {\r\n buildPath(parsePropPath(name), value, obj, 0);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nmodule.exports = formDataToJSON;\r\n","'use strict';\r\n\r\nvar AxiosError = require('./AxiosError');\r\n\r\n/**\r\n * Resolve or reject a Promise based on response status.\r\n *\r\n * @param {Function} resolve A function that resolves the promise.\r\n * @param {Function} reject A function that rejects the promise.\r\n * @param {object} response The response.\r\n */\r\nmodule.exports = function settle(resolve, reject, response) {\r\n var validateStatus = response.config.validateStatus;\r\n if (!response.status || !validateStatus || validateStatus(response.status)) {\r\n resolve(response);\r\n } else {\r\n reject(new AxiosError(\r\n 'Request failed with status code ' + response.status,\r\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\r\n response.config,\r\n response.request,\r\n response\r\n ));\r\n }\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return relativeURL\r\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\r\n : baseURL;\r\n};\r\n","'use strict';\r\n\r\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\r\nvar combineURLs = require('../helpers/combineURLs');\r\n\r\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n * @returns {string} The combined full path\r\n */\r\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\r\n if (baseURL && !isAbsoluteURL(requestedURL)) {\r\n return combineURLs(baseURL, requestedURL);\r\n }\r\n return requestedURL;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n// Headers whose duplicates are ignored by node\r\n// c.f. https://nodejs.org/api/http.html#http_message_headers\r\nvar ignoreDuplicateOf = [\r\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\r\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\r\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\r\n 'referer', 'retry-after', 'user-agent'\r\n];\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.slice(0, i)).toLowerCase();\r\n val = utils.trim(line.slice(i + 1));\r\n\r\n if (key) {\r\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\r\n return;\r\n }\r\n if (key === 'set-cookie') {\r\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\r\n } else {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar AxiosError = require('../core/AxiosError');\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * A `CanceledError` is an object that is thrown when an operation is canceled.\r\n *\r\n * @class\r\n * @param {string=} message The message.\r\n * @param {Object=} config The config.\r\n * @param {Object=} request The request.\r\n */\r\nfunction CanceledError(message, config, request) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\r\n this.name = 'CanceledError';\r\n}\r\n\r\nutils.inherits(CanceledError, AxiosError, {\r\n __CANCEL__: true\r\n});\r\n\r\nmodule.exports = CanceledError;\r\n","'use strict';\r\n\r\nmodule.exports = function parseProtocol(url) {\r\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\r\n return match && match[1] || '';\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar settle = require('./../core/settle');\r\nvar cookies = require('./../helpers/cookies');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar buildFullPath = require('../core/buildFullPath');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar transitionalDefaults = require('../defaults/transitional');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar parseProtocol = require('../helpers/parseProtocol');\r\nvar platform = require('../platform');\r\n\r\nmodule.exports = function xhrAdapter(config) {\r\n return new Promise(function dispatchXhrRequest(resolve, reject) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n var responseType = config.responseType;\r\n var withXSRFToken = config.withXSRFToken;\r\n var onCanceled;\r\n function done() {\r\n if (config.cancelToken) {\r\n config.cancelToken.unsubscribe(onCanceled);\r\n }\r\n\r\n if (config.signal) {\r\n config.signal.removeEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n\r\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n function onloadend() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\r\n request.responseText : request.response;\r\n var response = {\r\n data: responseData,\r\n status: request.status,\r\n statusText: request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n settle(function _resolve(value) {\r\n resolve(value);\r\n done();\r\n }, function _reject(err) {\r\n reject(err);\r\n done();\r\n }, response);\r\n\r\n // Clean up request\r\n request = null;\r\n }\r\n\r\n if ('onloadend' in request) {\r\n // Use onloadend if available\r\n request.onloadend = onloadend;\r\n } else {\r\n // Listen for ready state to emulate onloadend\r\n request.onreadystatechange = function handleLoad() {\r\n if (!request || request.readyState !== 4) {\r\n return;\r\n }\r\n\r\n // The request errored out and we didn't get a response, this will be\r\n // handled by onerror instead\r\n // With one exception: request that using file: protocol, most browsers\r\n // will return status as 0 even though it's a successful request\r\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\r\n return;\r\n }\r\n // readystate handler is calling before onerror or ontimeout handlers,\r\n // so we should call onloadend on the next 'tick'\r\n setTimeout(onloadend);\r\n };\r\n }\r\n\r\n // Handle browser request cancellation (as opposed to a manual cancellation)\r\n request.onabort = function handleAbort() {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle timeout\r\n request.ontimeout = function handleTimeout() {\r\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\r\n var transitional = config.transitional || transitionalDefaults;\r\n if (config.timeoutErrorMessage) {\r\n timeoutErrorMessage = config.timeoutErrorMessage;\r\n }\r\n reject(new AxiosError(\r\n timeoutErrorMessage,\r\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\r\n config,\r\n request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n // Add xsrf header\r\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\r\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\r\n // Add xsrf header\r\n var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (!utils.isUndefined(config.withCredentials)) {\r\n request.withCredentials = !!config.withCredentials;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (responseType && responseType !== 'json') {\r\n request.responseType = config.responseType;\r\n }\r\n\r\n // Handle progress if needed\r\n if (typeof config.onDownloadProgress === 'function') {\r\n request.addEventListener('progress', config.onDownloadProgress);\r\n }\r\n\r\n // Not all browsers support upload events\r\n if (typeof config.onUploadProgress === 'function' && request.upload) {\r\n request.upload.addEventListener('progress', config.onUploadProgress);\r\n }\r\n\r\n if (config.cancelToken || config.signal) {\r\n // Handle cancellation\r\n // eslint-disable-next-line func-names\r\n onCanceled = function(cancel) {\r\n if (!request) {\r\n return;\r\n }\r\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\r\n request.abort();\r\n request = null;\r\n };\r\n\r\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\r\n if (config.signal) {\r\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n // false, 0 (zero number), and '' (empty string) are valid JSON values\r\n if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') {\r\n requestData = null;\r\n }\r\n\r\n var protocol = parseProtocol(fullPath);\r\n\r\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\r\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\r\n return;\r\n }\r\n\r\n\r\n // Send the request\r\n request.send(requestData);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar transitionalDefaults = require('./transitional');\r\nvar toFormData = require('../helpers/toFormData');\r\nvar toURLEncodedForm = require('../helpers/toURLEncodedForm');\r\nvar platform = require('../platform');\r\nvar formDataToJSON = require('../helpers/formDataToJSON');\r\n\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nfunction setContentTypeIfUnset(headers, value) {\r\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = value;\r\n }\r\n}\r\n\r\nfunction getDefaultAdapter() {\r\n var adapter;\r\n if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n return adapter;\r\n}\r\n\r\nfunction stringifySafely(rawValue, parser, encoder) {\r\n if (utils.isString(rawValue)) {\r\n try {\r\n (parser || JSON.parse)(rawValue);\r\n return utils.trim(rawValue);\r\n } catch (e) {\r\n if (e.name !== 'SyntaxError') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return (encoder || JSON.stringify)(rawValue);\r\n}\r\n\r\nvar defaults = {\r\n\r\n transitional: transitionalDefaults,\r\n\r\n adapter: getDefaultAdapter(),\r\n\r\n transformRequest: [function transformRequest(data, headers) {\r\n normalizeHeaderName(headers, 'Accept');\r\n normalizeHeaderName(headers, 'Content-Type');\r\n\r\n var contentType = headers && headers['Content-Type'] || '';\r\n var hasJSONContentType = contentType.indexOf('application/json') > -1;\r\n var isObjectPayload = utils.isObject(data);\r\n\r\n if (isObjectPayload && utils.isHTMLForm(data)) {\r\n data = new FormData(data);\r\n }\r\n\r\n var isFormData = utils.isFormData(data);\r\n\r\n if (isFormData) {\r\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\r\n }\r\n\r\n if (utils.isArrayBuffer(data) ||\r\n utils.isBuffer(data) ||\r\n utils.isStream(data) ||\r\n utils.isFile(data) ||\r\n utils.isBlob(data)\r\n ) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isURLSearchParams(data)) {\r\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\r\n return data.toString();\r\n }\r\n\r\n var isFileList;\r\n\r\n if (isObjectPayload) {\r\n if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {\r\n return toURLEncodedForm(data, this.formSerializer).toString();\r\n }\r\n\r\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\r\n var _FormData = this.env && this.env.FormData;\r\n\r\n return toFormData(\r\n isFileList ? {'files[]': data} : data,\r\n _FormData && new _FormData(),\r\n this.formSerializer\r\n );\r\n }\r\n }\r\n\r\n if (isObjectPayload || hasJSONContentType ) {\r\n setContentTypeIfUnset(headers, 'application/json');\r\n return stringifySafely(data);\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponse(data) {\r\n var transitional = this.transitional || defaults.transitional;\r\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\r\n var JSONRequested = this.responseType === 'json';\r\n\r\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\r\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\r\n var strictJSONParsing = !silentJSONParsing && JSONRequested;\r\n\r\n try {\r\n return JSON.parse(data);\r\n } catch (e) {\r\n if (strictJSONParsing) {\r\n if (e.name === 'SyntaxError') {\r\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\r\n }\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n /**\r\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\r\n * timeout is not created.\r\n */\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN',\r\n\r\n maxContentLength: -1,\r\n maxBodyLength: -1,\r\n\r\n env: {\r\n FormData: platform.classes.FormData,\r\n Blob: platform.classes.Blob\r\n },\r\n\r\n validateStatus: function validateStatus(status) {\r\n return status >= 200 && status < 300;\r\n },\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n }\r\n }\r\n};\r\n\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n defaults.headers[method] = {};\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\r\n});\r\n\r\nmodule.exports = defaults;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar defaults = require('../defaults');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Number} status HTTP status code\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, status, fns) {\r\n var context = this || defaults;\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn.call(context, data, headers, status);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function isCancel(value) {\r\n return !!(value && value.__CANCEL__);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar transformData = require('./transformData');\r\nvar isCancel = require('../cancel/isCancel');\r\nvar defaults = require('../defaults');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nfunction throwIfCancellationRequested(config) {\r\n if (config.cancelToken) {\r\n config.cancelToken.throwIfRequested();\r\n }\r\n\r\n if (config.signal && config.signal.aborted) {\r\n throw new CanceledError();\r\n }\r\n}\r\n\r\n/**\r\n * Dispatch a request to the server using the configured adapter.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Ensure headers exist\r\n config.headers = config.headers || {};\r\n\r\n // Transform request data\r\n config.data = transformData.call(\r\n config,\r\n config.data,\r\n config.headers,\r\n null,\r\n config.transformRequest\r\n );\r\n\r\n normalizeHeaderName(config.headers, 'Accept');\r\n normalizeHeaderName(config.headers, 'Content-Type');\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n var adapter = config.adapter || defaults.adapter;\r\n\r\n return adapter(config).then(function onAdapterResolution(response) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n response.data = transformData.call(\r\n config,\r\n response.data,\r\n response.headers,\r\n response.status,\r\n config.transformResponse\r\n );\r\n\r\n return response;\r\n }, function onAdapterRejection(reason) {\r\n if (!isCancel(reason)) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n if (reason && reason.response) {\r\n reason.response.data = transformData.call(\r\n config,\r\n reason.response.data,\r\n reason.response.headers,\r\n reason.response.status,\r\n config.transformResponse\r\n );\r\n }\r\n }\r\n\r\n return Promise.reject(reason);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Config-specific merge-function which creates a new config-object\r\n * by merging two configuration objects together.\r\n *\r\n * @param {Object} config1\r\n * @param {Object} config2\r\n * @returns {Object} New object resulting from merging config2 to config1\r\n */\r\nmodule.exports = function mergeConfig(config1, config2) {\r\n // eslint-disable-next-line no-param-reassign\r\n config2 = config2 || {};\r\n var config = {};\r\n\r\n function getMergedValue(target, source) {\r\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\r\n return utils.merge(target, source);\r\n } else if (utils.isEmptyObject(source)) {\r\n return utils.merge({}, target);\r\n } else if (utils.isPlainObject(source)) {\r\n return utils.merge({}, source);\r\n } else if (utils.isArray(source)) {\r\n return source.slice();\r\n }\r\n return source;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDeepProperties(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function valueFromConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function defaultToConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDirectKeys(prop) {\r\n if (prop in config2) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (prop in config1) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n var mergeMap = {\r\n 'url': valueFromConfig2,\r\n 'method': valueFromConfig2,\r\n 'data': valueFromConfig2,\r\n 'baseURL': defaultToConfig2,\r\n 'transformRequest': defaultToConfig2,\r\n 'transformResponse': defaultToConfig2,\r\n 'paramsSerializer': defaultToConfig2,\r\n 'timeout': defaultToConfig2,\r\n 'timeoutMessage': defaultToConfig2,\r\n 'withCredentials': defaultToConfig2,\r\n 'withXSRFToken': defaultToConfig2,\r\n 'adapter': defaultToConfig2,\r\n 'responseType': defaultToConfig2,\r\n 'xsrfCookieName': defaultToConfig2,\r\n 'xsrfHeaderName': defaultToConfig2,\r\n 'onUploadProgress': defaultToConfig2,\r\n 'onDownloadProgress': defaultToConfig2,\r\n 'decompress': defaultToConfig2,\r\n 'maxContentLength': defaultToConfig2,\r\n 'maxBodyLength': defaultToConfig2,\r\n 'beforeRedirect': defaultToConfig2,\r\n 'transport': defaultToConfig2,\r\n 'httpAgent': defaultToConfig2,\r\n 'httpsAgent': defaultToConfig2,\r\n 'cancelToken': defaultToConfig2,\r\n 'socketPath': defaultToConfig2,\r\n 'responseEncoding': defaultToConfig2,\r\n 'validateStatus': mergeDirectKeys\r\n };\r\n\r\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\r\n var merge = mergeMap[prop] || mergeDeepProperties;\r\n var configValue = merge(prop);\r\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\r\n });\r\n\r\n return config;\r\n};\r\n","module.exports = {\n \"version\": \"0.28.1\"\n};","'use strict';\r\n\r\nvar VERSION = require('../env/data').version;\r\nvar AxiosError = require('../core/AxiosError');\r\n\r\nvar validators = {};\r\n\r\n// eslint-disable-next-line func-names\r\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\r\n validators[type] = function validator(thing) {\r\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\r\n };\r\n});\r\n\r\nvar deprecatedWarnings = {};\r\n\r\n/**\r\n * Transitional option validator\r\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\r\n * @param {string?} version - deprecated version / removed since version\r\n * @param {string?} message - some message with additional info\r\n * @returns {function}\r\n */\r\nvalidators.transitional = function transitional(validator, version, message) {\r\n function formatMessage(opt, desc) {\r\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\r\n }\r\n\r\n // eslint-disable-next-line func-names\r\n return function(value, opt, opts) {\r\n if (validator === false) {\r\n throw new AxiosError(\r\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\r\n AxiosError.ERR_DEPRECATED\r\n );\r\n }\r\n\r\n if (version && !deprecatedWarnings[opt]) {\r\n deprecatedWarnings[opt] = true;\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n formatMessage(\r\n opt,\r\n ' has been deprecated since v' + version + ' and will be removed in the near future'\r\n )\r\n );\r\n }\r\n\r\n return validator ? validator(value, opt, opts) : true;\r\n };\r\n};\r\n\r\n/**\r\n * Assert object's properties type\r\n * @param {object} options\r\n * @param {object} schema\r\n * @param {boolean?} allowUnknown\r\n */\r\n\r\nfunction assertOptions(options, schema, allowUnknown) {\r\n if (typeof options !== 'object') {\r\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n var keys = Object.keys(options);\r\n var i = keys.length;\r\n while (i-- > 0) {\r\n var opt = keys[i];\r\n var validator = schema[opt];\r\n if (validator) {\r\n var value = options[opt];\r\n var result = value === undefined || validator(value, opt, options);\r\n if (result !== true) {\r\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n continue;\r\n }\r\n if (allowUnknown !== true) {\r\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n assertOptions: assertOptions,\r\n validators: validators\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('../helpers/buildURL');\r\nvar InterceptorManager = require('./InterceptorManager');\r\nvar dispatchRequest = require('./dispatchRequest');\r\nvar mergeConfig = require('./mergeConfig');\r\nvar buildFullPath = require('./buildFullPath');\r\nvar validator = require('../helpers/validator');\r\n\r\nvar validators = validator.validators;\r\n/**\r\n * Create a new instance of Axios\r\n *\r\n * @param {Object} instanceConfig The default config for the instance\r\n */\r\nfunction Axios(instanceConfig) {\r\n this.defaults = instanceConfig;\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\n/**\r\n * Dispatch a request\r\n *\r\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\r\n * @param {?Object} config\r\n */\r\nAxios.prototype.request = function request(configOrUrl, config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof configOrUrl === 'string') {\r\n config = config || {};\r\n config.url = configOrUrl;\r\n } else {\r\n config = configOrUrl || {};\r\n }\r\n\r\n config = mergeConfig(this.defaults, config);\r\n\r\n // Set config.method\r\n if (config.method) {\r\n config.method = config.method.toLowerCase();\r\n } else if (this.defaults.method) {\r\n config.method = this.defaults.method.toLowerCase();\r\n } else {\r\n config.method = 'get';\r\n }\r\n\r\n var transitional = config.transitional;\r\n\r\n if (transitional !== undefined) {\r\n validator.assertOptions(transitional, {\r\n silentJSONParsing: validators.transitional(validators.boolean),\r\n forcedJSONParsing: validators.transitional(validators.boolean),\r\n clarifyTimeoutError: validators.transitional(validators.boolean)\r\n }, false);\r\n }\r\n\r\n var paramsSerializer = config.paramsSerializer;\r\n\r\n if (paramsSerializer !== undefined) {\r\n validator.assertOptions(paramsSerializer, {\r\n encode: validators.function,\r\n serialize: validators.function\r\n }, true);\r\n }\r\n\r\n utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer});\r\n\r\n // filter out skipped interceptors\r\n var requestInterceptorChain = [];\r\n var synchronousRequestInterceptors = true;\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\r\n return;\r\n }\r\n\r\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\r\n\r\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var responseInterceptorChain = [];\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var promise;\r\n\r\n if (!synchronousRequestInterceptors) {\r\n var chain = [dispatchRequest, undefined];\r\n\r\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\r\n chain = chain.concat(responseInterceptorChain);\r\n\r\n promise = Promise.resolve(config);\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n\r\n var newConfig = config;\r\n while (requestInterceptorChain.length) {\r\n var onFulfilled = requestInterceptorChain.shift();\r\n var onRejected = requestInterceptorChain.shift();\r\n try {\r\n newConfig = onFulfilled(newConfig);\r\n } catch (error) {\r\n onRejected(error);\r\n break;\r\n }\r\n }\r\n\r\n try {\r\n promise = dispatchRequest(newConfig);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n while (responseInterceptorChain.length) {\r\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nAxios.prototype.getUri = function getUri(config) {\r\n config = mergeConfig(this.defaults, config);\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n return buildURL(fullPath, config.params, config.paramsSerializer);\r\n};\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n url: url,\r\n data: (config || {}).data\r\n }));\r\n };\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n\r\n function generateHTTPMethod(isForm) {\r\n return function httpMethod(url, data, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n headers: isForm ? {\r\n 'Content-Type': 'multipart/form-data'\r\n } : {},\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n }\r\n\r\n Axios.prototype[method] = generateHTTPMethod();\r\n\r\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\r\n});\r\n\r\nmodule.exports = Axios;\r\n","'use strict';\r\n\r\nvar CanceledError = require('./CanceledError');\r\n\r\n/**\r\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\r\n *\r\n * @class\r\n * @param {Function} executor The executor function.\r\n */\r\nfunction CancelToken(executor) {\r\n if (typeof executor !== 'function') {\r\n throw new TypeError('executor must be a function.');\r\n }\r\n\r\n var resolvePromise;\r\n\r\n this.promise = new Promise(function promiseExecutor(resolve) {\r\n resolvePromise = resolve;\r\n });\r\n\r\n var token = this;\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then(function(cancel) {\r\n if (!token._listeners) return;\r\n\r\n var i = token._listeners.length;\r\n\r\n while (i-- > 0) {\r\n token._listeners[i](cancel);\r\n }\r\n token._listeners = null;\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then = function(onfulfilled) {\r\n var _resolve;\r\n // eslint-disable-next-line func-names\r\n var promise = new Promise(function(resolve) {\r\n token.subscribe(resolve);\r\n _resolve = resolve;\r\n }).then(onfulfilled);\r\n\r\n promise.cancel = function reject() {\r\n token.unsubscribe(_resolve);\r\n };\r\n\r\n return promise;\r\n };\r\n\r\n executor(function cancel(message, config, request) {\r\n if (token.reason) {\r\n // Cancellation has already been requested\r\n return;\r\n }\r\n\r\n token.reason = new CanceledError(message, config, request);\r\n resolvePromise(token.reason);\r\n });\r\n}\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\r\n if (this.reason) {\r\n throw this.reason;\r\n }\r\n};\r\n\r\n/**\r\n * Subscribe to the cancel signal\r\n */\r\n\r\nCancelToken.prototype.subscribe = function subscribe(listener) {\r\n if (this.reason) {\r\n listener(this.reason);\r\n return;\r\n }\r\n\r\n if (this._listeners) {\r\n this._listeners.push(listener);\r\n } else {\r\n this._listeners = [listener];\r\n }\r\n};\r\n\r\n/**\r\n * Unsubscribe from the cancel signal\r\n */\r\n\r\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\r\n if (!this._listeners) {\r\n return;\r\n }\r\n var index = this._listeners.indexOf(listener);\r\n if (index !== -1) {\r\n this._listeners.splice(index, 1);\r\n }\r\n};\r\n\r\n/**\r\n * Returns an object that contains a new `CancelToken` and a function that, when called,\r\n * cancels the `CancelToken`.\r\n */\r\nCancelToken.source = function source() {\r\n var cancel;\r\n var token = new CancelToken(function executor(c) {\r\n cancel = c;\r\n });\r\n return {\r\n token: token,\r\n cancel: cancel\r\n };\r\n};\r\n\r\nmodule.exports = CancelToken;\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Determines whether the payload is an error thrown by Axios\r\n *\r\n * @param {*} payload The value to test\r\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\r\n */\r\nmodule.exports = function isAxiosError(payload) {\r\n return utils.isObject(payload) && (payload.isAxiosError === true);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\nvar bind = require('./helpers/bind');\r\nvar Axios = require('./core/Axios');\r\nvar mergeConfig = require('./core/mergeConfig');\r\nvar defaults = require('./defaults');\r\nvar formDataToJSON = require('./helpers/formDataToJSON');\r\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n * @return {Axios} A new instance of Axios\r\n */\r\nfunction createInstance(defaultConfig) {\r\n var context = new Axios(defaultConfig);\r\n var instance = bind(Axios.prototype.request, context);\r\n\r\n // Copy axios.prototype to instance\r\n utils.extend(instance, Axios.prototype, context);\r\n\r\n // Copy context to instance\r\n utils.extend(instance, context);\r\n\r\n // Factory for creating new instances\r\n instance.create = function create(instanceConfig) {\r\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\r\n };\r\n\r\n return instance;\r\n}\r\n\r\n// Create the default instance to be exported\r\nvar axios = createInstance(defaults);\r\n\r\n// Expose Axios class to allow class inheritance\r\naxios.Axios = Axios;\r\n\r\n// Expose Cancel & CancelToken\r\naxios.CanceledError = require('./cancel/CanceledError');\r\naxios.CancelToken = require('./cancel/CancelToken');\r\naxios.isCancel = require('./cancel/isCancel');\r\naxios.VERSION = require('./env/data').version;\r\naxios.toFormData = require('./helpers/toFormData');\r\n\r\n// Expose AxiosError class\r\naxios.AxiosError = require('../lib/core/AxiosError');\r\n\r\n// alias for CanceledError for backward compatibility\r\naxios.Cancel = axios.CanceledError;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose isAxiosError\r\naxios.isAxiosError = require('./helpers/isAxiosError');\r\n\r\naxios.formToJSON = function(thing) {\r\n return formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\r\n};\r\n\r\nmodule.exports = axios;\r\n\r\n// Allow use of default import syntax in TypeScript\r\nmodule.exports.default = axios;\r\n"],"names":["prototype","browser","FormData","require$$0","envFormData","AxiosError","encode","toFormData","AxiosURLSearchParams","require$$1","transitional","transitionalDefaults","CanceledError","formDataToJSON","defaults","validators","InterceptorManager","Axios","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/axios.min.js b/node_modules/axios/dist/axios.min.js new file mode 100644 index 0000000..ad05f11 --- /dev/null +++ b/node_modules/axios/dist/axios.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).axios=t()}(this,(function(){"use strict";var e,t=function(e,t){return function(){return e.apply(t,arguments)}},r=Object.prototype.toString,n=(e=Object.create(null),function(t){var n=r.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())});function o(e){return e=e.toLowerCase(),function(t){return n(t)===e}}function i(e){return Array.isArray(e)}function s(e){return void 0===e}var a=o("ArrayBuffer");function u(e){return"number"==typeof e}function c(e){return null!==e&&"object"==typeof e}function f(e){if("object"!==n(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var l=o("Date"),p=o("File"),d=o("Blob"),h=o("FileList");function m(e){return"[object Function]"===r.call(e)}var y=o("URLSearchParams");function v(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var r=0,n=e.length;r0;)s=o[i],n&&!n(s,e,t)||a[s]||(t[s]=e[s],a[s]=!0);e=!1!==r&&Object.getPrototypeOf(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:n,kindOfTest:o,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;if(i(e))return e;var t=e.length;if(!u(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},isTypedArray:E,isFileList:h,forEachEntry:function(e,t){for(var r,n=(e&&e[Symbol.iterator]).call(e);(r=n.next())&&!r.done;){var o=r.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var r,n=[];null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:w,hasOwnProperty:O};function S(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}R.inherits(S,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var T=S.prototype,A={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){A[e]={value:e}})),Object.defineProperties(S,A),Object.defineProperty(T,"isAxiosError",{value:!0}),S.from=function(e,t,r,n,o,i){var s=Object.create(T);return R.toFlatObject(e,s,(function(e){return e!==Error.prototype})),S.call(s,e.message,t,r,n,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};var j=S,x="object"==typeof self?self.FormData:window.FormData;function N(e){return R.isPlainObject(e)||R.isArray(e)}function _(e){return R.endsWith(e,"[]")?e.slice(0,-2):e}function P(e,t,r){return e?e.concat(t).map((function(e,t){return e=_(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}var B=R.toFlatObject(R,{},null,(function(e){return/^is[A-Z]/.test(e)}));var C=function(e,t,r){if(!R.isObject(e))throw new TypeError("target must be an object");t=t||new(x||FormData);var n,o=(r=R.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!R.isUndefined(t[e])}))).metaTokens,i=r.visitor||f,s=r.dots,a=r.indexes,u=(r.Blob||"undefined"!=typeof Blob&&Blob)&&((n=t)&&R.isFunction(n.append)&&"FormData"===n[Symbol.toStringTag]&&n[Symbol.iterator]);if(!R.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(R.isDate(e))return e.toISOString();if(!u&&R.isBlob(e))throw new j("Blob is not supported. Use a Buffer instead.");return R.isArrayBuffer(e)||R.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function f(e,r,n){var i=e;if(e&&!n&&"object"==typeof e)if(R.endsWith(r,"{}"))r=o?r:r.slice(0,-2),e=JSON.stringify(e);else if(R.isArray(e)&&function(e){return R.isArray(e)&&!e.some(N)}(e)||R.isFileList(e)||R.endsWith(r,"[]")&&(i=R.toArray(e)))return r=_(r),i.forEach((function(e,n){!R.isUndefined(e)&&t.append(!0===a?P([r],n,s):null===a?r:r+"[]",c(e))})),!1;return!!N(e)||(t.append(P(n,r,s),c(e)),!1)}var l=[],p=Object.assign(B,{defaultVisitor:f,convertValue:c,isVisitable:N});if(!R.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!R.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),R.forEach(r,(function(r,o){!0===(!R.isUndefined(r)&&i.call(t,r,R.isString(o)?o.trim():o,n,p))&&e(r,n?n.concat(o):[o])})),l.pop()}}(e),t};function F(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function U(e,t){this._pairs=[],e&&C(e,this,t)}var D=U.prototype;D.append=function(e,t){this._pairs.push([e,t])},D.toString=function(e){var t=e?function(t){return e.call(this,t,F)}:F;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var L=U;function k(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var q=function(e,t,r){if(!t)return e;var n=e.indexOf("#");-1!==n&&(e=e.slice(0,n));var o,i=r&&r.encode||k,s=r&&r.serialize;return(o=s?s(t,r):R.isURLSearchParams(t)?t.toString():new L(t,r).toString(i))&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e};function I(){this.handlers=[]}I.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},I.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},I.prototype.clear=function(){this.handlers&&(this.handlers=[])},I.prototype.forEach=function(e){R.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var z=I,M=function(e,t){R.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))},H={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},J={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:L,FormData:FormData,Blob:Blob},protocols:["http","https","file","blob","url","data"]};var V=function(e){function t(e,r,n,o){var i=e[o++],s=Number.isFinite(+i),a=o>=e.length;return i=!i&&R.isArray(n)?n.length:i,a?(R.hasOwnProperty(n,i)?n[i]=[n[i],r]:n[i]=r,!s):(n[i]&&R.isObject(n[i])||(n[i]=[]),t(e,r,n[i],o)&&R.isArray(n[i])&&(n[i]=function(e){var t,r,n={},o=Object.keys(e),i=o.length;for(t=0;t=0)return;f[o]="set-cookie"===o?(f[o]?f[o]:[]).concat([i]):f[o]?f[o]+", "+i:i}})),f):f):null;!function(e,t,r){var n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new j("Request failed with status code "+r.status,[j.ERR_BAD_REQUEST,j.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}((function(e){t(e),u()}),(function(e){r(e),u()}),{data:s&&"text"!==s&&"json"!==s?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:l,config:e,request:c}),c=null}}if(c.open(e.method.toUpperCase(),q(p,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=d:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(d)},c.onabort=function(){c&&(r(new j("Request aborted",j.ECONNABORTED,e,c)),c=null)},c.onerror=function(){r(new j("Network Error",j.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||H;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new j(t,n.clarifyTimeoutError?j.ETIMEDOUT:j.ECONNABORTED,e,c)),c=null},R.isStandardBrowserEnv()&&(a&&R.isFunction(a)&&(a=a(e)),a||!1!==a&&$(p))){var h=e.xsrfHeaderName&&e.xsrfCookieName&&W.read(e.xsrfCookieName);h&&(i[e.xsrfHeaderName]=h)}"setRequestHeader"in c&&R.forEach(i,(function(e,t){void 0===o&&"content-type"===t.toLowerCase()?delete i[t]:c.setRequestHeader(t,e)})),R.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),s&&"json"!==s&&(c.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&c.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(t){c&&(r(!t||t.type?new G(null,e,c):t),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),o||!1===o||0===o||""===o||(o=null);var m,y=(m=/^([-+\w]{1,25})(:?\/\/|:)/.exec(p))&&m[1]||"";y&&-1===J.protocols.indexOf(y)?r(new j("Unsupported protocol "+y+":",j.ERR_BAD_REQUEST,e)):c.send(o)}))},Z={"Content-Type":"application/x-www-form-urlencoded"};function ee(e,t){!R.isUndefined(e)&&R.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var te,re={transitional:H,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(te=Y),te),transformRequest:[function(e,t){M(t,"Accept"),M(t,"Content-Type");var r,n=t&&t["Content-Type"]||"",o=n.indexOf("application/json")>-1,i=R.isObject(e);if(i&&R.isHTMLForm(e)&&(e=new FormData(e)),R.isFormData(e))return o?JSON.stringify(V(e)):e;if(R.isArrayBuffer(e)||R.isBuffer(e)||R.isStream(e)||R.isFile(e)||R.isBlob(e))return e;if(R.isArrayBufferView(e))return e.buffer;if(R.isURLSearchParams(e))return ee(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(i){if(-1!==n.indexOf("application/x-www-form-urlencoded"))return function(e,t){return C(e,new J.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return J.isNode&&R.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((r=R.isFileList(e))||n.indexOf("multipart/form-data")>-1){var s=this.env&&this.env.FormData;return C(r?{"files[]":e}:e,s&&new s,this.formSerializer)}}return i||o?(ee(t,"application/json"),function(e,t,r){if(R.isString(e))try{return(t||JSON.parse)(e),R.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||re.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&R.isString(e)&&(r&&!this.responseType||n)){var o=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw j.from(e,j.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:J.classes.FormData,Blob:J.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};R.forEach(["delete","get","head"],(function(e){re.headers[e]={}})),R.forEach(["post","put","patch"],(function(e){re.headers[e]=R.merge(Z)}));var ne=re,oe=function(e,t,r,n){var o=this||ne;return R.forEach(n,(function(n){e=n.call(o,e,t,r)})),e},ie=function(e){return!(!e||!e.__CANCEL__)};function se(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new G}var ae=function(e){return se(e),e.headers=e.headers||{},e.data=oe.call(e,e.data,e.headers,null,e.transformRequest),M(e.headers,"Accept"),M(e.headers,"Content-Type"),e.headers=R.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),R.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||ne.adapter)(e).then((function(t){return se(e),t.data=oe.call(e,t.data,t.headers,t.status,e.transformResponse),t}),(function(t){return ie(t)||(se(e),t&&t.response&&(t.response.data=oe.call(e,t.response.data,t.response.headers,t.response.status,e.transformResponse))),Promise.reject(t)}))},ue=function(e,t){t=t||{};var r={};function n(e,t){return R.isPlainObject(e)&&R.isPlainObject(t)?R.merge(e,t):R.isEmptyObject(t)?R.merge({},e):R.isPlainObject(t)?R.merge({},t):R.isArray(t)?t.slice():t}function o(r){return R.isUndefined(t[r])?R.isUndefined(e[r])?void 0:n(void 0,e[r]):n(e[r],t[r])}function i(e){if(!R.isUndefined(t[e]))return n(void 0,t[e])}function s(r){return R.isUndefined(t[r])?R.isUndefined(e[r])?void 0:n(void 0,e[r]):n(void 0,t[r])}function a(r){return r in t?n(e[r],t[r]):r in e?n(void 0,e[r]):void 0}var u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a};return R.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=u[e]||o,n=t(e);R.isUndefined(n)&&t!==a||(r[e]=n)})),r},ce="0.28.1",fe=ce,le={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){le[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var pe={};le.transitional=function(e,t,r){function n(e,t){return"[Axios v"+fe+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,o,i){if(!1===e)throw new j(n(o," has been removed"+(t?" in "+t:"")),j.ERR_DEPRECATED);return t&&!pe[o]&&(pe[o]=!0,console.warn(n(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,o,i)}};var de={assertOptions:function(e,t,r){if("object"!=typeof e)throw new j("options must be an object",j.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),o=n.length;o-- >0;){var i=n[o],s=t[i];if(s){var a=e[i],u=void 0===a||s(a,i,e);if(!0!==u)throw new j("option "+i+" must be "+u,j.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new j("Unknown option "+i,j.ERR_BAD_OPTION)}},validators:le},he=de.validators;function me(e){this.defaults=e,this.interceptors={request:new z,response:new z}}me.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=ue(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&de.assertOptions(r,{silentJSONParsing:he.transitional(he.boolean),forcedJSONParsing:he.transitional(he.boolean),clarifyTimeoutError:he.transitional(he.boolean)},!1);var n=t.paramsSerializer;void 0!==n&&de.assertOptions(n,{encode:he.function,serialize:he.function},!0),R.isFunction(n)&&(t.paramsSerializer={serialize:n});var o=[],i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,o.unshift(e.fulfilled,e.rejected))}));var s,a=[];if(this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)})),!i){var u=[ae,void 0];for(Array.prototype.unshift.apply(u,o),u=u.concat(a),s=Promise.resolve(t);u.length;)s=s.then(u.shift(),u.shift());return s}for(var c=t;o.length;){var f=o.shift(),l=o.shift();try{c=f(c)}catch(e){l(e);break}}try{s=ae(c)}catch(e){return Promise.reject(e)}for(;a.length;)s=s.then(a.shift(),a.shift());return s},me.prototype.getUri=function(e){e=ue(this.defaults,e);var t=X(e.baseURL,e.url);return q(t,e.params,e.paramsSerializer)},R.forEach(["delete","get","head","options"],(function(e){me.prototype[e]=function(t,r){return this.request(ue(r||{},{method:e,url:t,data:(r||{}).data}))}})),R.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,o){return this.request(ue(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}me.prototype[e]=t(),me.prototype[e+"Form"]=t(!0)}));var ye=me;function ve(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){for(var t=r._listeners.length;t-- >0;)r._listeners[t](e);r._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,o){r.reason||(r.reason=new G(e,n,o),t(r.reason))}))}ve.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},ve.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},ve.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},ve.source=function(){var e;return{token:new ve((function(t){e=t})),cancel:e}};var be=ve;var Ee=function e(r){var n=new ye(r),o=t(ye.prototype.request,n);return R.extend(o,ye.prototype,n),R.extend(o,n),o.create=function(t){return e(ue(r,t))},o}(ne);Ee.Axios=ye,Ee.CanceledError=G,Ee.CancelToken=be,Ee.isCancel=ie,Ee.VERSION=ce,Ee.toFormData=C,Ee.AxiosError=j,Ee.Cancel=Ee.CanceledError,Ee.all=function(e){return Promise.all(e)},Ee.spread=function(e){return function(t){return e.apply(null,t)}},Ee.isAxiosError=function(e){return R.isObject(e)&&!0===e.isAxiosError},Ee.formToJSON=function(e){return V(R.isHTMLForm(e)?new FormData(e):e)};var ge=Ee,we=Ee;return ge.default=we,ge})); +//# sourceMappingURL=axios.min.js.map diff --git a/node_modules/axios/dist/axios.min.js.map b/node_modules/axios/dist/axios.min.js.map new file mode 100644 index 0000000..147b8d1 --- /dev/null +++ b/node_modules/axios/dist/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../lib/env/classes/FormData.js","../node_modules/form-data/lib/browser.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/helpers/normalizeHeaderName.js","../lib/defaults/transitional.js","../lib/platform/index.js","../lib/platform/browser/index.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/helpers/formDataToJSON.js","../lib/helpers/cookies.js","../lib/core/buildFullPath.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/helpers/parseHeaders.js","../lib/helpers/isURLSameOrigin.js","../lib/cancel/CanceledError.js","../lib/adapters/xhr.js","../lib/core/settle.js","../lib/helpers/parseProtocol.js","../lib/defaults/index.js","../lib/helpers/toURLEncodedForm.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/core/dispatchRequest.js","../lib/core/mergeConfig.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/axios.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js"],"sourcesContent":["'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n return fn.apply(thisArg, arguments);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar bind = require('./helpers/bind');\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n// eslint-disable-next-line func-names\r\nvar kindOf = (function(cache) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n var str = toString.call(thing);\r\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\r\n };\r\n})(Object.create(null));\r\n\r\nfunction kindOfTest(type) {\r\n type = type.toLowerCase();\r\n return function isKindOf(thing) {\r\n return kindOf(thing) === type;\r\n };\r\n}\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return Array.isArray(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Buffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Buffer, otherwise false\r\n */\r\nfunction isBuffer(val) {\r\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\r\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\r\n\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a plain Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a plain Object, otherwise false\r\n */\r\nfunction isPlainObject(val) {\r\n if (kindOf(val) !== 'object') {\r\n return false;\r\n }\r\n\r\n var prototype = Object.getPrototypeOf(val);\r\n return prototype === null || prototype === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a empty Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a empty Object, otherwise false\r\n */\r\nfunction isEmptyObject(val) {\r\n return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nvar isDate = kindOfTest('Date');\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFile = kindOfTest('File');\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nvar isBlob = kindOfTest('Blob');\r\n\r\n/**\r\n * Determine if a value is a FileList\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFileList = kindOfTest('FileList');\r\n\r\n/**\r\n * Determine if a value is a Function\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Function, otherwise false\r\n */\r\nfunction isFunction(val) {\r\n return toString.call(val) === '[object Function]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Stream\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Stream, otherwise false\r\n */\r\nfunction isStream(val) {\r\n return isObject(val) && isFunction(val.pipe);\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} thing The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(thing) {\r\n var pattern = '[object FormData]';\r\n return thing && (\r\n (typeof FormData === 'function' && thing instanceof FormData) ||\r\n toString.call(thing) === pattern ||\r\n (isFunction(thing.toString) && thing.toString() === pattern)\r\n );\r\n}\r\n\r\n/**\r\n * Determine if a value is a URLSearchParams object\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\r\n */\r\nvar isURLSearchParams = kindOfTest('URLSearchParams');\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * navigator.product -> 'ReactNative'\r\n * nativescript\r\n * navigator.product -> 'NativeScript' or 'NS'\r\n */\r\nfunction isStandardBrowserEnv() {\r\n var product;\r\n if (typeof navigator !== 'undefined' && (\r\n (product = navigator.product) === 'ReactNative' ||\r\n product === 'NativeScript' ||\r\n product === 'NS')\r\n ) {\r\n return false;\r\n }\r\n\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object') {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (isPlainObject(result[key]) && isPlainObject(val)) {\r\n result[key] = merge(result[key], val);\r\n } else if (isPlainObject(val)) {\r\n result[key] = merge({}, val);\r\n } else if (isArray(val)) {\r\n result[key] = val.slice();\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Extends object a by mutably adding to it the properties of object b.\r\n *\r\n * @param {Object} a The object to be extended\r\n * @param {Object} b The object to copy properties from\r\n * @param {Object} thisArg The object to bind function to\r\n * @return {Object} The resulting value of object a\r\n */\r\nfunction extend(a, b, thisArg) {\r\n forEach(b, function assignValue(val, key) {\r\n if (thisArg && typeof val === 'function') {\r\n a[key] = bind(val, thisArg);\r\n } else {\r\n a[key] = val;\r\n }\r\n });\r\n return a;\r\n}\r\n\r\n/**\r\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\r\n *\r\n * @param {string} content with BOM\r\n * @return {string} content value without BOM\r\n */\r\nfunction stripBOM(content) {\r\n if (content.charCodeAt(0) === 0xFEFF) {\r\n content = content.slice(1);\r\n }\r\n return content;\r\n}\r\n\r\n/**\r\n * Inherit the prototype methods from one constructor into another\r\n * @param {function} constructor\r\n * @param {function} superConstructor\r\n * @param {object} [props]\r\n * @param {object} [descriptors]\r\n */\r\n\r\nfunction inherits(constructor, superConstructor, props, descriptors) {\r\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\r\n constructor.prototype.constructor = constructor;\r\n props && Object.assign(constructor.prototype, props);\r\n}\r\n\r\n/**\r\n * Resolve object with deep prototype chain to a flat object\r\n * @param {Object} sourceObj source object\r\n * @param {Object} [destObj]\r\n * @param {Function|Boolean} [filter]\r\n * @param {Function} [propFilter]\r\n * @returns {Object}\r\n */\r\n\r\nfunction toFlatObject(sourceObj, destObj, filter, propFilter) {\r\n var props;\r\n var i;\r\n var prop;\r\n var merged = {};\r\n\r\n destObj = destObj || {};\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n if (sourceObj == null) return destObj;\r\n\r\n do {\r\n props = Object.getOwnPropertyNames(sourceObj);\r\n i = props.length;\r\n while (i-- > 0) {\r\n prop = props[i];\r\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\r\n destObj[prop] = sourceObj[prop];\r\n merged[prop] = true;\r\n }\r\n }\r\n sourceObj = filter !== false && Object.getPrototypeOf(sourceObj);\r\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\r\n\r\n return destObj;\r\n}\r\n\r\n/*\r\n * determines whether a string ends with the characters of a specified string\r\n * @param {String} str\r\n * @param {String} searchString\r\n * @param {Number} [position= 0]\r\n * @returns {boolean}\r\n */\r\nfunction endsWith(str, searchString, position) {\r\n str = String(str);\r\n if (position === undefined || position > str.length) {\r\n position = str.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = str.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n}\r\n\r\n\r\n/**\r\n * Returns new array from array like object or null if failed\r\n * @param {*} [thing]\r\n * @returns {?Array}\r\n */\r\nfunction toArray(thing) {\r\n if (!thing) return null;\r\n if (isArray(thing)) return thing;\r\n var i = thing.length;\r\n if (!isNumber(i)) return null;\r\n var arr = new Array(i);\r\n while (i-- > 0) {\r\n arr[i] = thing[i];\r\n }\r\n return arr;\r\n}\r\n\r\n// eslint-disable-next-line func-names\r\nvar isTypedArray = (function(TypedArray) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n return TypedArray && thing instanceof TypedArray;\r\n };\r\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\r\n\r\nfunction forEachEntry(obj, fn) {\r\n var generator = obj && obj[Symbol.iterator];\r\n\r\n var iterator = generator.call(obj);\r\n\r\n var result;\r\n\r\n while ((result = iterator.next()) && !result.done) {\r\n var pair = result.value;\r\n fn.call(obj, pair[0], pair[1]);\r\n }\r\n}\r\n\r\nfunction matchAll(regExp, str) {\r\n var matches;\r\n var arr = [];\r\n\r\n while ((matches = regExp.exec(str)) !== null) {\r\n arr.push(matches);\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nvar isHTMLForm = kindOfTest('HTMLFormElement');\r\n\r\nvar hasOwnProperty = (function resolver(_hasOwnProperty) {\r\n return function(obj, prop) {\r\n return _hasOwnProperty.call(obj, prop);\r\n };\r\n})(Object.prototype.hasOwnProperty);\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isBuffer: isBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isPlainObject: isPlainObject,\r\n isEmptyObject: isEmptyObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isFunction: isFunction,\r\n isStream: isStream,\r\n isURLSearchParams: isURLSearchParams,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n extend: extend,\r\n trim: trim,\r\n stripBOM: stripBOM,\r\n inherits: inherits,\r\n toFlatObject: toFlatObject,\r\n kindOf: kindOf,\r\n kindOfTest: kindOfTest,\r\n endsWith: endsWith,\r\n toArray: toArray,\r\n isTypedArray: isTypedArray,\r\n isFileList: isFileList,\r\n forEachEntry: forEachEntry,\r\n matchAll: matchAll,\r\n isHTMLForm: isHTMLForm,\r\n hasOwnProperty: hasOwnProperty\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Create an Error with the specified message, config, error code, request and response.\r\n *\r\n * @param {string} message The error message.\r\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\r\n * @param {Object} [config] The config.\r\n * @param {Object} [request] The request.\r\n * @param {Object} [response] The response.\r\n * @returns {Error} The created error.\r\n */\r\nfunction AxiosError(message, code, config, request, response) {\r\n Error.call(this);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error()).stack;\r\n }\r\n\r\n this.message = message;\r\n this.name = 'AxiosError';\r\n code && (this.code = code);\r\n config && (this.config = config);\r\n request && (this.request = request);\r\n response && (this.response = response);\r\n}\r\n\r\nutils.inherits(AxiosError, Error, {\r\n toJSON: function toJSON() {\r\n return {\r\n // Standard\r\n message: this.message,\r\n name: this.name,\r\n // Microsoft\r\n description: this.description,\r\n number: this.number,\r\n // Mozilla\r\n fileName: this.fileName,\r\n lineNumber: this.lineNumber,\r\n columnNumber: this.columnNumber,\r\n stack: this.stack,\r\n // Axios\r\n config: this.config,\r\n code: this.code,\r\n status: this.response && this.response.status ? this.response.status : null\r\n };\r\n }\r\n});\r\n\r\nvar prototype = AxiosError.prototype;\r\nvar descriptors = {};\r\n\r\n[\r\n 'ERR_BAD_OPTION_VALUE',\r\n 'ERR_BAD_OPTION',\r\n 'ECONNABORTED',\r\n 'ETIMEDOUT',\r\n 'ERR_NETWORK',\r\n 'ERR_FR_TOO_MANY_REDIRECTS',\r\n 'ERR_DEPRECATED',\r\n 'ERR_BAD_RESPONSE',\r\n 'ERR_BAD_REQUEST',\r\n 'ERR_CANCELED',\r\n 'ERR_NOT_SUPPORT',\r\n 'ERR_INVALID_URL'\r\n// eslint-disable-next-line func-names\r\n].forEach(function(code) {\r\n descriptors[code] = {value: code};\r\n});\r\n\r\nObject.defineProperties(AxiosError, descriptors);\r\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\r\n\r\n// eslint-disable-next-line func-names\r\nAxiosError.from = function(error, code, config, request, response, customProps) {\r\n var axiosError = Object.create(prototype);\r\n\r\n utils.toFlatObject(error, axiosError, function filter(obj) {\r\n return obj !== Error.prototype;\r\n });\r\n\r\n AxiosError.call(axiosError, error.message, code, config, request, response);\r\n\r\n axiosError.cause = error;\r\n\r\n axiosError.name = error.name;\r\n\r\n customProps && Object.assign(axiosError, customProps);\r\n\r\n return axiosError;\r\n};\r\n\r\nmodule.exports = AxiosError;\r\n","// eslint-disable-next-line strict\r\nmodule.exports = require('form-data');\r\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar envFormData = require('../env/classes/FormData');\r\n\r\nfunction isVisitable(thing) {\r\n return utils.isPlainObject(thing) || utils.isArray(thing);\r\n}\r\n\r\nfunction removeBrackets(key) {\r\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\r\n}\r\n\r\nfunction renderKey(path, key, dots) {\r\n if (!path) return key;\r\n return path.concat(key).map(function each(token, i) {\r\n // eslint-disable-next-line no-param-reassign\r\n token = removeBrackets(token);\r\n return !dots && i ? '[' + token + ']' : token;\r\n }).join(dots ? '.' : '');\r\n}\r\n\r\nfunction isFlatArray(arr) {\r\n return utils.isArray(arr) && !arr.some(isVisitable);\r\n}\r\n\r\nvar predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\r\n return /^is[A-Z]/.test(prop);\r\n});\r\n\r\nfunction isSpecCompliant(thing) {\r\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\r\n}\r\n\r\n/**\r\n * Convert a data object to FormData\r\n * @param {Object} obj\r\n * @param {?Object} [formData]\r\n * @param {?Object} [options]\r\n * @param {Function} [options.visitor]\r\n * @param {Boolean} [options.metaTokens = true]\r\n * @param {Boolean} [options.dots = false]\r\n * @param {?Boolean} [options.indexes = false]\r\n * @returns {Object}\r\n **/\r\n\r\nfunction toFormData(obj, formData, options) {\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('target must be an object');\r\n }\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n formData = formData || new (envFormData || FormData)();\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n options = utils.toFlatObject(options, {\r\n metaTokens: true,\r\n dots: false,\r\n indexes: false\r\n }, false, function defined(option, source) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n return !utils.isUndefined(source[option]);\r\n });\r\n\r\n var metaTokens = options.metaTokens;\r\n // eslint-disable-next-line no-use-before-define\r\n var visitor = options.visitor || defaultVisitor;\r\n var dots = options.dots;\r\n var indexes = options.indexes;\r\n var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\r\n var useBlob = _Blob && isSpecCompliant(formData);\r\n\r\n if (!utils.isFunction(visitor)) {\r\n throw new TypeError('visitor must be a function');\r\n }\r\n\r\n function convertValue(value) {\r\n if (value === null) return '';\r\n\r\n if (utils.isDate(value)) {\r\n return value.toISOString();\r\n }\r\n\r\n if (!useBlob && utils.isBlob(value)) {\r\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\r\n }\r\n\r\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\r\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n *\r\n * @param {*} value\r\n * @param {String|Number} key\r\n * @param {Array} path\r\n * @this {FormData}\r\n * @returns {boolean} return true to visit the each prop of the value recursively\r\n */\r\n function defaultVisitor(value, key, path) {\r\n var arr = value;\r\n\r\n if (value && !path && typeof value === 'object') {\r\n if (utils.endsWith(key, '{}')) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = metaTokens ? key : key.slice(0, -2);\r\n // eslint-disable-next-line no-param-reassign\r\n value = JSON.stringify(value);\r\n } else if (\r\n (utils.isArray(value) && isFlatArray(value)) ||\r\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\r\n )) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = removeBrackets(key);\r\n\r\n arr.forEach(function each(el, index) {\r\n !utils.isUndefined(el) && formData.append(\r\n // eslint-disable-next-line no-nested-ternary\r\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\r\n convertValue(el)\r\n );\r\n });\r\n return false;\r\n }\r\n }\r\n\r\n if (isVisitable(value)) {\r\n return true;\r\n }\r\n\r\n formData.append(renderKey(path, key, dots), convertValue(value));\r\n\r\n return false;\r\n }\r\n\r\n var stack = [];\r\n\r\n var exposedHelpers = Object.assign(predicates, {\r\n defaultVisitor: defaultVisitor,\r\n convertValue: convertValue,\r\n isVisitable: isVisitable\r\n });\r\n\r\n function build(value, path) {\r\n if (utils.isUndefined(value)) return;\r\n\r\n if (stack.indexOf(value) !== -1) {\r\n throw Error('Circular reference detected in ' + path.join('.'));\r\n }\r\n\r\n stack.push(value);\r\n\r\n utils.forEach(value, function each(el, key) {\r\n var result = !utils.isUndefined(el) && visitor.call(\r\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\r\n );\r\n\r\n if (result === true) {\r\n build(el, path ? path.concat(key) : [key]);\r\n }\r\n });\r\n\r\n stack.pop();\r\n }\r\n\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('data must be an object');\r\n }\r\n\r\n build(obj);\r\n\r\n return formData;\r\n}\r\n\r\nmodule.exports = toFormData;\r\n","'use strict';\r\n\r\nvar toFormData = require('./toFormData');\r\n\r\nfunction encode(str) {\r\n var charMap = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+',\r\n '%00': '\\x00'\r\n };\r\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function replacer(match) {\r\n return charMap[match];\r\n });\r\n}\r\n\r\nfunction AxiosURLSearchParams(params, options) {\r\n this._pairs = [];\r\n\r\n params && toFormData(params, this, options);\r\n}\r\n\r\nvar prototype = AxiosURLSearchParams.prototype;\r\n\r\nprototype.append = function append(name, value) {\r\n this._pairs.push([name, value]);\r\n};\r\n\r\nprototype.toString = function toString(encoder) {\r\n var _encode = encoder ? function(value) {\r\n return encoder.call(this, value, encode);\r\n } : encode;\r\n\r\n return this._pairs.map(function each(pair) {\r\n return _encode(pair[0]) + '=' + _encode(pair[1]);\r\n }, '').join('&');\r\n};\r\n\r\nmodule.exports = AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosURLSearchParams = require('../helpers/AxiosURLSearchParams');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @param {?object} options\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, options) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var hashmarkIndex = url.indexOf('#');\r\n\r\n if (hashmarkIndex !== -1) {\r\n url = url.slice(0, hashmarkIndex);\r\n }\r\n\r\n var _encode = options && options.encode || encode;\r\n\r\n var serializeFn = options && options.serialize;\r\n\r\n var serializedParams;\r\n\r\n if (serializeFn) {\r\n serializedParams = serializeFn(params, options);\r\n } else {\r\n serializedParams = utils.isURLSearchParams(params) ?\r\n params.toString() :\r\n new AxiosURLSearchParams(params, options).toString(_encode);\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected,\r\n synchronous: options ? options.synchronous : false,\r\n runWhen: options ? options.runWhen : null\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Clear all interceptors from the stack\r\n */\r\nInterceptorManager.prototype.clear = function clear() {\r\n if (this.handlers) {\r\n this.handlers = [];\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\r\n utils.forEach(headers, function processHeader(value, name) {\r\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\r\n headers[normalizedName] = value;\r\n delete headers[name];\r\n }\r\n });\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n silentJSONParsing: true,\r\n forcedJSONParsing: true,\r\n clarifyTimeoutError: false\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = require('./node/');\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n isBrowser: true,\r\n classes: {\r\n URLSearchParams: require('./classes/URLSearchParams'),\r\n FormData: require('./classes/FormData'),\r\n Blob: Blob\r\n },\r\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\r\n};\r\n","'use strict';\r\n\r\nvar AxiosURLSearchParams = require('../../../helpers/AxiosURLSearchParams');\r\n\r\nmodule.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nmodule.exports = FormData;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nfunction parsePropPath(name) {\r\n // foo[x][y][z]\r\n // foo.x.y.z\r\n // foo-x-y-z\r\n // foo x y z\r\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(function(match) {\r\n return match[0] === '[]' ? '' : match[1] || match[0];\r\n });\r\n}\r\n\r\nfunction arrayToObject(arr) {\r\n var obj = {};\r\n var keys = Object.keys(arr);\r\n var i;\r\n var len = keys.length;\r\n var key;\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n obj[key] = arr[key];\r\n }\r\n return obj;\r\n}\r\n\r\nfunction formDataToJSON(formData) {\r\n function buildPath(path, value, target, index) {\r\n var name = path[index++];\r\n var isNumericKey = Number.isFinite(+name);\r\n var isLast = index >= path.length;\r\n name = !name && utils.isArray(target) ? target.length : name;\r\n\r\n if (isLast) {\r\n if (utils.hasOwnProperty(target, name)) {\r\n target[name] = [target[name], value];\r\n } else {\r\n target[name] = value;\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (!target[name] || !utils.isObject(target[name])) {\r\n target[name] = [];\r\n }\r\n\r\n var result = buildPath(path, value, target[name], index);\r\n\r\n if (result && utils.isArray(target[name])) {\r\n target[name] = arrayToObject(target[name]);\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\r\n var obj = {};\r\n\r\n utils.forEachEntry(formData, function(name, value) {\r\n buildPath(parsePropPath(name), value, obj, 0);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nmodule.exports = formDataToJSON;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\r\nvar combineURLs = require('../helpers/combineURLs');\r\n\r\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n * @returns {string} The combined full path\r\n */\r\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\r\n if (baseURL && !isAbsoluteURL(requestedURL)) {\r\n return combineURLs(baseURL, requestedURL);\r\n }\r\n return requestedURL;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return relativeURL\r\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\r\n : baseURL;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n// Headers whose duplicates are ignored by node\r\n// c.f. https://nodejs.org/api/http.html#http_message_headers\r\nvar ignoreDuplicateOf = [\r\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\r\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\r\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\r\n 'referer', 'retry-after', 'user-agent'\r\n];\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.slice(0, i)).toLowerCase();\r\n val = utils.trim(line.slice(i + 1));\r\n\r\n if (key) {\r\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\r\n return;\r\n }\r\n if (key === 'set-cookie') {\r\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\r\n } else {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar AxiosError = require('../core/AxiosError');\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * A `CanceledError` is an object that is thrown when an operation is canceled.\r\n *\r\n * @class\r\n * @param {string=} message The message.\r\n * @param {Object=} config The config.\r\n * @param {Object=} request The request.\r\n */\r\nfunction CanceledError(message, config, request) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\r\n this.name = 'CanceledError';\r\n}\r\n\r\nutils.inherits(CanceledError, AxiosError, {\r\n __CANCEL__: true\r\n});\r\n\r\nmodule.exports = CanceledError;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar settle = require('./../core/settle');\r\nvar cookies = require('./../helpers/cookies');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar buildFullPath = require('../core/buildFullPath');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar transitionalDefaults = require('../defaults/transitional');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar parseProtocol = require('../helpers/parseProtocol');\r\nvar platform = require('../platform');\r\n\r\nmodule.exports = function xhrAdapter(config) {\r\n return new Promise(function dispatchXhrRequest(resolve, reject) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n var responseType = config.responseType;\r\n var withXSRFToken = config.withXSRFToken;\r\n var onCanceled;\r\n function done() {\r\n if (config.cancelToken) {\r\n config.cancelToken.unsubscribe(onCanceled);\r\n }\r\n\r\n if (config.signal) {\r\n config.signal.removeEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n\r\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n function onloadend() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\r\n request.responseText : request.response;\r\n var response = {\r\n data: responseData,\r\n status: request.status,\r\n statusText: request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n settle(function _resolve(value) {\r\n resolve(value);\r\n done();\r\n }, function _reject(err) {\r\n reject(err);\r\n done();\r\n }, response);\r\n\r\n // Clean up request\r\n request = null;\r\n }\r\n\r\n if ('onloadend' in request) {\r\n // Use onloadend if available\r\n request.onloadend = onloadend;\r\n } else {\r\n // Listen for ready state to emulate onloadend\r\n request.onreadystatechange = function handleLoad() {\r\n if (!request || request.readyState !== 4) {\r\n return;\r\n }\r\n\r\n // The request errored out and we didn't get a response, this will be\r\n // handled by onerror instead\r\n // With one exception: request that using file: protocol, most browsers\r\n // will return status as 0 even though it's a successful request\r\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\r\n return;\r\n }\r\n // readystate handler is calling before onerror or ontimeout handlers,\r\n // so we should call onloadend on the next 'tick'\r\n setTimeout(onloadend);\r\n };\r\n }\r\n\r\n // Handle browser request cancellation (as opposed to a manual cancellation)\r\n request.onabort = function handleAbort() {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle timeout\r\n request.ontimeout = function handleTimeout() {\r\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\r\n var transitional = config.transitional || transitionalDefaults;\r\n if (config.timeoutErrorMessage) {\r\n timeoutErrorMessage = config.timeoutErrorMessage;\r\n }\r\n reject(new AxiosError(\r\n timeoutErrorMessage,\r\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\r\n config,\r\n request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n // Add xsrf header\r\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\r\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\r\n // Add xsrf header\r\n var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (!utils.isUndefined(config.withCredentials)) {\r\n request.withCredentials = !!config.withCredentials;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (responseType && responseType !== 'json') {\r\n request.responseType = config.responseType;\r\n }\r\n\r\n // Handle progress if needed\r\n if (typeof config.onDownloadProgress === 'function') {\r\n request.addEventListener('progress', config.onDownloadProgress);\r\n }\r\n\r\n // Not all browsers support upload events\r\n if (typeof config.onUploadProgress === 'function' && request.upload) {\r\n request.upload.addEventListener('progress', config.onUploadProgress);\r\n }\r\n\r\n if (config.cancelToken || config.signal) {\r\n // Handle cancellation\r\n // eslint-disable-next-line func-names\r\n onCanceled = function(cancel) {\r\n if (!request) {\r\n return;\r\n }\r\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\r\n request.abort();\r\n request = null;\r\n };\r\n\r\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\r\n if (config.signal) {\r\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n // false, 0 (zero number), and '' (empty string) are valid JSON values\r\n if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') {\r\n requestData = null;\r\n }\r\n\r\n var protocol = parseProtocol(fullPath);\r\n\r\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\r\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\r\n return;\r\n }\r\n\r\n\r\n // Send the request\r\n request.send(requestData);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar AxiosError = require('./AxiosError');\r\n\r\n/**\r\n * Resolve or reject a Promise based on response status.\r\n *\r\n * @param {Function} resolve A function that resolves the promise.\r\n * @param {Function} reject A function that rejects the promise.\r\n * @param {object} response The response.\r\n */\r\nmodule.exports = function settle(resolve, reject, response) {\r\n var validateStatus = response.config.validateStatus;\r\n if (!response.status || !validateStatus || validateStatus(response.status)) {\r\n resolve(response);\r\n } else {\r\n reject(new AxiosError(\r\n 'Request failed with status code ' + response.status,\r\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\r\n response.config,\r\n response.request,\r\n response\r\n ));\r\n }\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function parseProtocol(url) {\r\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\r\n return match && match[1] || '';\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar transitionalDefaults = require('./transitional');\r\nvar toFormData = require('../helpers/toFormData');\r\nvar toURLEncodedForm = require('../helpers/toURLEncodedForm');\r\nvar platform = require('../platform');\r\nvar formDataToJSON = require('../helpers/formDataToJSON');\r\n\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nfunction setContentTypeIfUnset(headers, value) {\r\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = value;\r\n }\r\n}\r\n\r\nfunction getDefaultAdapter() {\r\n var adapter;\r\n if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n return adapter;\r\n}\r\n\r\nfunction stringifySafely(rawValue, parser, encoder) {\r\n if (utils.isString(rawValue)) {\r\n try {\r\n (parser || JSON.parse)(rawValue);\r\n return utils.trim(rawValue);\r\n } catch (e) {\r\n if (e.name !== 'SyntaxError') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return (encoder || JSON.stringify)(rawValue);\r\n}\r\n\r\nvar defaults = {\r\n\r\n transitional: transitionalDefaults,\r\n\r\n adapter: getDefaultAdapter(),\r\n\r\n transformRequest: [function transformRequest(data, headers) {\r\n normalizeHeaderName(headers, 'Accept');\r\n normalizeHeaderName(headers, 'Content-Type');\r\n\r\n var contentType = headers && headers['Content-Type'] || '';\r\n var hasJSONContentType = contentType.indexOf('application/json') > -1;\r\n var isObjectPayload = utils.isObject(data);\r\n\r\n if (isObjectPayload && utils.isHTMLForm(data)) {\r\n data = new FormData(data);\r\n }\r\n\r\n var isFormData = utils.isFormData(data);\r\n\r\n if (isFormData) {\r\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\r\n }\r\n\r\n if (utils.isArrayBuffer(data) ||\r\n utils.isBuffer(data) ||\r\n utils.isStream(data) ||\r\n utils.isFile(data) ||\r\n utils.isBlob(data)\r\n ) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isURLSearchParams(data)) {\r\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\r\n return data.toString();\r\n }\r\n\r\n var isFileList;\r\n\r\n if (isObjectPayload) {\r\n if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {\r\n return toURLEncodedForm(data, this.formSerializer).toString();\r\n }\r\n\r\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\r\n var _FormData = this.env && this.env.FormData;\r\n\r\n return toFormData(\r\n isFileList ? {'files[]': data} : data,\r\n _FormData && new _FormData(),\r\n this.formSerializer\r\n );\r\n }\r\n }\r\n\r\n if (isObjectPayload || hasJSONContentType ) {\r\n setContentTypeIfUnset(headers, 'application/json');\r\n return stringifySafely(data);\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponse(data) {\r\n var transitional = this.transitional || defaults.transitional;\r\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\r\n var JSONRequested = this.responseType === 'json';\r\n\r\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\r\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\r\n var strictJSONParsing = !silentJSONParsing && JSONRequested;\r\n\r\n try {\r\n return JSON.parse(data);\r\n } catch (e) {\r\n if (strictJSONParsing) {\r\n if (e.name === 'SyntaxError') {\r\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\r\n }\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n /**\r\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\r\n * timeout is not created.\r\n */\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN',\r\n\r\n maxContentLength: -1,\r\n maxBodyLength: -1,\r\n\r\n env: {\r\n FormData: platform.classes.FormData,\r\n Blob: platform.classes.Blob\r\n },\r\n\r\n validateStatus: function validateStatus(status) {\r\n return status >= 200 && status < 300;\r\n },\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n }\r\n }\r\n};\r\n\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n defaults.headers[method] = {};\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\r\n});\r\n\r\nmodule.exports = defaults;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar toFormData = require('./toFormData');\r\nvar platform = require('../platform/');\r\n\r\nmodule.exports = function toURLEncodedForm(data, options) {\r\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\r\n visitor: function(value, key, path, helpers) {\r\n if (platform.isNode && utils.isBuffer(value)) {\r\n this.append(key, value.toString('base64'));\r\n return false;\r\n }\r\n\r\n return helpers.defaultVisitor.apply(this, arguments);\r\n }\r\n }, options));\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar defaults = require('../defaults');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Number} status HTTP status code\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, status, fns) {\r\n var context = this || defaults;\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn.call(context, data, headers, status);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function isCancel(value) {\r\n return !!(value && value.__CANCEL__);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar transformData = require('./transformData');\r\nvar isCancel = require('../cancel/isCancel');\r\nvar defaults = require('../defaults');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nfunction throwIfCancellationRequested(config) {\r\n if (config.cancelToken) {\r\n config.cancelToken.throwIfRequested();\r\n }\r\n\r\n if (config.signal && config.signal.aborted) {\r\n throw new CanceledError();\r\n }\r\n}\r\n\r\n/**\r\n * Dispatch a request to the server using the configured adapter.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Ensure headers exist\r\n config.headers = config.headers || {};\r\n\r\n // Transform request data\r\n config.data = transformData.call(\r\n config,\r\n config.data,\r\n config.headers,\r\n null,\r\n config.transformRequest\r\n );\r\n\r\n normalizeHeaderName(config.headers, 'Accept');\r\n normalizeHeaderName(config.headers, 'Content-Type');\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n var adapter = config.adapter || defaults.adapter;\r\n\r\n return adapter(config).then(function onAdapterResolution(response) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n response.data = transformData.call(\r\n config,\r\n response.data,\r\n response.headers,\r\n response.status,\r\n config.transformResponse\r\n );\r\n\r\n return response;\r\n }, function onAdapterRejection(reason) {\r\n if (!isCancel(reason)) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n if (reason && reason.response) {\r\n reason.response.data = transformData.call(\r\n config,\r\n reason.response.data,\r\n reason.response.headers,\r\n reason.response.status,\r\n config.transformResponse\r\n );\r\n }\r\n }\r\n\r\n return Promise.reject(reason);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Config-specific merge-function which creates a new config-object\r\n * by merging two configuration objects together.\r\n *\r\n * @param {Object} config1\r\n * @param {Object} config2\r\n * @returns {Object} New object resulting from merging config2 to config1\r\n */\r\nmodule.exports = function mergeConfig(config1, config2) {\r\n // eslint-disable-next-line no-param-reassign\r\n config2 = config2 || {};\r\n var config = {};\r\n\r\n function getMergedValue(target, source) {\r\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\r\n return utils.merge(target, source);\r\n } else if (utils.isEmptyObject(source)) {\r\n return utils.merge({}, target);\r\n } else if (utils.isPlainObject(source)) {\r\n return utils.merge({}, source);\r\n } else if (utils.isArray(source)) {\r\n return source.slice();\r\n }\r\n return source;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDeepProperties(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function valueFromConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function defaultToConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDirectKeys(prop) {\r\n if (prop in config2) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (prop in config1) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n var mergeMap = {\r\n 'url': valueFromConfig2,\r\n 'method': valueFromConfig2,\r\n 'data': valueFromConfig2,\r\n 'baseURL': defaultToConfig2,\r\n 'transformRequest': defaultToConfig2,\r\n 'transformResponse': defaultToConfig2,\r\n 'paramsSerializer': defaultToConfig2,\r\n 'timeout': defaultToConfig2,\r\n 'timeoutMessage': defaultToConfig2,\r\n 'withCredentials': defaultToConfig2,\r\n 'withXSRFToken': defaultToConfig2,\r\n 'adapter': defaultToConfig2,\r\n 'responseType': defaultToConfig2,\r\n 'xsrfCookieName': defaultToConfig2,\r\n 'xsrfHeaderName': defaultToConfig2,\r\n 'onUploadProgress': defaultToConfig2,\r\n 'onDownloadProgress': defaultToConfig2,\r\n 'decompress': defaultToConfig2,\r\n 'maxContentLength': defaultToConfig2,\r\n 'maxBodyLength': defaultToConfig2,\r\n 'beforeRedirect': defaultToConfig2,\r\n 'transport': defaultToConfig2,\r\n 'httpAgent': defaultToConfig2,\r\n 'httpsAgent': defaultToConfig2,\r\n 'cancelToken': defaultToConfig2,\r\n 'socketPath': defaultToConfig2,\r\n 'responseEncoding': defaultToConfig2,\r\n 'validateStatus': mergeDirectKeys\r\n };\r\n\r\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\r\n var merge = mergeMap[prop] || mergeDeepProperties;\r\n var configValue = merge(prop);\r\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\r\n });\r\n\r\n return config;\r\n};\r\n","module.exports = {\n \"version\": \"0.28.1\"\n};","'use strict';\r\n\r\nvar VERSION = require('../env/data').version;\r\nvar AxiosError = require('../core/AxiosError');\r\n\r\nvar validators = {};\r\n\r\n// eslint-disable-next-line func-names\r\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\r\n validators[type] = function validator(thing) {\r\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\r\n };\r\n});\r\n\r\nvar deprecatedWarnings = {};\r\n\r\n/**\r\n * Transitional option validator\r\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\r\n * @param {string?} version - deprecated version / removed since version\r\n * @param {string?} message - some message with additional info\r\n * @returns {function}\r\n */\r\nvalidators.transitional = function transitional(validator, version, message) {\r\n function formatMessage(opt, desc) {\r\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\r\n }\r\n\r\n // eslint-disable-next-line func-names\r\n return function(value, opt, opts) {\r\n if (validator === false) {\r\n throw new AxiosError(\r\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\r\n AxiosError.ERR_DEPRECATED\r\n );\r\n }\r\n\r\n if (version && !deprecatedWarnings[opt]) {\r\n deprecatedWarnings[opt] = true;\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n formatMessage(\r\n opt,\r\n ' has been deprecated since v' + version + ' and will be removed in the near future'\r\n )\r\n );\r\n }\r\n\r\n return validator ? validator(value, opt, opts) : true;\r\n };\r\n};\r\n\r\n/**\r\n * Assert object's properties type\r\n * @param {object} options\r\n * @param {object} schema\r\n * @param {boolean?} allowUnknown\r\n */\r\n\r\nfunction assertOptions(options, schema, allowUnknown) {\r\n if (typeof options !== 'object') {\r\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n var keys = Object.keys(options);\r\n var i = keys.length;\r\n while (i-- > 0) {\r\n var opt = keys[i];\r\n var validator = schema[opt];\r\n if (validator) {\r\n var value = options[opt];\r\n var result = value === undefined || validator(value, opt, options);\r\n if (result !== true) {\r\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n continue;\r\n }\r\n if (allowUnknown !== true) {\r\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n assertOptions: assertOptions,\r\n validators: validators\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('../helpers/buildURL');\r\nvar InterceptorManager = require('./InterceptorManager');\r\nvar dispatchRequest = require('./dispatchRequest');\r\nvar mergeConfig = require('./mergeConfig');\r\nvar buildFullPath = require('./buildFullPath');\r\nvar validator = require('../helpers/validator');\r\n\r\nvar validators = validator.validators;\r\n/**\r\n * Create a new instance of Axios\r\n *\r\n * @param {Object} instanceConfig The default config for the instance\r\n */\r\nfunction Axios(instanceConfig) {\r\n this.defaults = instanceConfig;\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\n/**\r\n * Dispatch a request\r\n *\r\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\r\n * @param {?Object} config\r\n */\r\nAxios.prototype.request = function request(configOrUrl, config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof configOrUrl === 'string') {\r\n config = config || {};\r\n config.url = configOrUrl;\r\n } else {\r\n config = configOrUrl || {};\r\n }\r\n\r\n config = mergeConfig(this.defaults, config);\r\n\r\n // Set config.method\r\n if (config.method) {\r\n config.method = config.method.toLowerCase();\r\n } else if (this.defaults.method) {\r\n config.method = this.defaults.method.toLowerCase();\r\n } else {\r\n config.method = 'get';\r\n }\r\n\r\n var transitional = config.transitional;\r\n\r\n if (transitional !== undefined) {\r\n validator.assertOptions(transitional, {\r\n silentJSONParsing: validators.transitional(validators.boolean),\r\n forcedJSONParsing: validators.transitional(validators.boolean),\r\n clarifyTimeoutError: validators.transitional(validators.boolean)\r\n }, false);\r\n }\r\n\r\n var paramsSerializer = config.paramsSerializer;\r\n\r\n if (paramsSerializer !== undefined) {\r\n validator.assertOptions(paramsSerializer, {\r\n encode: validators.function,\r\n serialize: validators.function\r\n }, true);\r\n }\r\n\r\n utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer});\r\n\r\n // filter out skipped interceptors\r\n var requestInterceptorChain = [];\r\n var synchronousRequestInterceptors = true;\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\r\n return;\r\n }\r\n\r\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\r\n\r\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var responseInterceptorChain = [];\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var promise;\r\n\r\n if (!synchronousRequestInterceptors) {\r\n var chain = [dispatchRequest, undefined];\r\n\r\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\r\n chain = chain.concat(responseInterceptorChain);\r\n\r\n promise = Promise.resolve(config);\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n\r\n var newConfig = config;\r\n while (requestInterceptorChain.length) {\r\n var onFulfilled = requestInterceptorChain.shift();\r\n var onRejected = requestInterceptorChain.shift();\r\n try {\r\n newConfig = onFulfilled(newConfig);\r\n } catch (error) {\r\n onRejected(error);\r\n break;\r\n }\r\n }\r\n\r\n try {\r\n promise = dispatchRequest(newConfig);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n while (responseInterceptorChain.length) {\r\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nAxios.prototype.getUri = function getUri(config) {\r\n config = mergeConfig(this.defaults, config);\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n return buildURL(fullPath, config.params, config.paramsSerializer);\r\n};\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n url: url,\r\n data: (config || {}).data\r\n }));\r\n };\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n\r\n function generateHTTPMethod(isForm) {\r\n return function httpMethod(url, data, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n headers: isForm ? {\r\n 'Content-Type': 'multipart/form-data'\r\n } : {},\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n }\r\n\r\n Axios.prototype[method] = generateHTTPMethod();\r\n\r\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\r\n});\r\n\r\nmodule.exports = Axios;\r\n","'use strict';\r\n\r\nvar CanceledError = require('./CanceledError');\r\n\r\n/**\r\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\r\n *\r\n * @class\r\n * @param {Function} executor The executor function.\r\n */\r\nfunction CancelToken(executor) {\r\n if (typeof executor !== 'function') {\r\n throw new TypeError('executor must be a function.');\r\n }\r\n\r\n var resolvePromise;\r\n\r\n this.promise = new Promise(function promiseExecutor(resolve) {\r\n resolvePromise = resolve;\r\n });\r\n\r\n var token = this;\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then(function(cancel) {\r\n if (!token._listeners) return;\r\n\r\n var i = token._listeners.length;\r\n\r\n while (i-- > 0) {\r\n token._listeners[i](cancel);\r\n }\r\n token._listeners = null;\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then = function(onfulfilled) {\r\n var _resolve;\r\n // eslint-disable-next-line func-names\r\n var promise = new Promise(function(resolve) {\r\n token.subscribe(resolve);\r\n _resolve = resolve;\r\n }).then(onfulfilled);\r\n\r\n promise.cancel = function reject() {\r\n token.unsubscribe(_resolve);\r\n };\r\n\r\n return promise;\r\n };\r\n\r\n executor(function cancel(message, config, request) {\r\n if (token.reason) {\r\n // Cancellation has already been requested\r\n return;\r\n }\r\n\r\n token.reason = new CanceledError(message, config, request);\r\n resolvePromise(token.reason);\r\n });\r\n}\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\r\n if (this.reason) {\r\n throw this.reason;\r\n }\r\n};\r\n\r\n/**\r\n * Subscribe to the cancel signal\r\n */\r\n\r\nCancelToken.prototype.subscribe = function subscribe(listener) {\r\n if (this.reason) {\r\n listener(this.reason);\r\n return;\r\n }\r\n\r\n if (this._listeners) {\r\n this._listeners.push(listener);\r\n } else {\r\n this._listeners = [listener];\r\n }\r\n};\r\n\r\n/**\r\n * Unsubscribe from the cancel signal\r\n */\r\n\r\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\r\n if (!this._listeners) {\r\n return;\r\n }\r\n var index = this._listeners.indexOf(listener);\r\n if (index !== -1) {\r\n this._listeners.splice(index, 1);\r\n }\r\n};\r\n\r\n/**\r\n * Returns an object that contains a new `CancelToken` and a function that, when called,\r\n * cancels the `CancelToken`.\r\n */\r\nCancelToken.source = function source() {\r\n var cancel;\r\n var token = new CancelToken(function executor(c) {\r\n cancel = c;\r\n });\r\n return {\r\n token: token,\r\n cancel: cancel\r\n };\r\n};\r\n\r\nmodule.exports = CancelToken;\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\nvar bind = require('./helpers/bind');\r\nvar Axios = require('./core/Axios');\r\nvar mergeConfig = require('./core/mergeConfig');\r\nvar defaults = require('./defaults');\r\nvar formDataToJSON = require('./helpers/formDataToJSON');\r\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n * @return {Axios} A new instance of Axios\r\n */\r\nfunction createInstance(defaultConfig) {\r\n var context = new Axios(defaultConfig);\r\n var instance = bind(Axios.prototype.request, context);\r\n\r\n // Copy axios.prototype to instance\r\n utils.extend(instance, Axios.prototype, context);\r\n\r\n // Copy context to instance\r\n utils.extend(instance, context);\r\n\r\n // Factory for creating new instances\r\n instance.create = function create(instanceConfig) {\r\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\r\n };\r\n\r\n return instance;\r\n}\r\n\r\n// Create the default instance to be exported\r\nvar axios = createInstance(defaults);\r\n\r\n// Expose Axios class to allow class inheritance\r\naxios.Axios = Axios;\r\n\r\n// Expose Cancel & CancelToken\r\naxios.CanceledError = require('./cancel/CanceledError');\r\naxios.CancelToken = require('./cancel/CancelToken');\r\naxios.isCancel = require('./cancel/isCancel');\r\naxios.VERSION = require('./env/data').version;\r\naxios.toFormData = require('./helpers/toFormData');\r\n\r\n// Expose AxiosError class\r\naxios.AxiosError = require('../lib/core/AxiosError');\r\n\r\n// alias for CanceledError for backward compatibility\r\naxios.Cancel = axios.CanceledError;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose isAxiosError\r\naxios.isAxiosError = require('./helpers/isAxiosError');\r\n\r\naxios.formToJSON = function(thing) {\r\n return formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\r\n};\r\n\r\nmodule.exports = axios;\r\n\r\n// Allow use of default import syntax in TypeScript\r\nmodule.exports.default = axios;\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Determines whether the payload is an error thrown by Axios\r\n *\r\n * @param {*} payload The value to test\r\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\r\n */\r\nmodule.exports = function isAxiosError(payload) {\r\n return utils.isObject(payload) && (payload.isAxiosError === true);\r\n};\r\n"],"names":["cache","bind","fn","thisArg","apply","arguments","toString","Object","prototype","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","isArray","val","Array","isUndefined","isArrayBuffer","isNumber","isObject","isPlainObject","getPrototypeOf","isDate","isFile","isBlob","isFileList","isFunction","isURLSearchParams","forEach","obj","i","l","length","key","hasOwnProperty","TypedArray","isTypedArray","Uint8Array","_hasOwnProperty","isHTMLForm","prop","utils","isBuffer","constructor","isFormData","pattern","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isEmptyObject","keys","isStream","pipe","isStandardBrowserEnv","product","navigator","window","document","merge","result","assignValue","extend","a","b","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","getOwnPropertyNames","endsWith","searchString","position","String","undefined","lastIndex","indexOf","toArray","arr","forEachEntry","iterator","Symbol","next","done","pair","value","matchAll","regExp","matches","exec","push","AxiosError","message","code","config","request","response","Error","this","captureStackTrace","stack","name","toJSON","description","number","fileName","lineNumber","columnNumber","status","defineProperties","defineProperty","from","error","customProps","axiosError","cause","AxiosError_1","self","isVisitable","removeBrackets","renderKey","path","dots","concat","map","token","join","predicates","test","toFormData_1","formData","options","TypeError","envFormData","metaTokens","indexes","option","source","visitor","defaultVisitor","useBlob","Blob","append","toStringTag","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","toFormData","encoder","_encode","AxiosURLSearchParams_1","buildURL","url","hashmarkIndex","serializedParams","serializeFn","serialize","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","h","InterceptorManager_1","normalizeHeaderName","headers","normalizedName","toUpperCase","transitional","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform","isBrowser","classes","URLSearchParams","protocols","formDataToJSON_1","buildPath","target","isNumericKey","Number","isFinite","isLast","len","arrayToObject","entries","parsePropPath","cookies","write","expires","domain","secure","cookie","Date","toGMTString","read","RegExp","decodeURIComponent","remove","now","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","ignoreDuplicateOf","isURLSameOrigin","originURL","msie","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","location","requestURL","parsed","CanceledError","ERR_CANCELED","__CANCEL__","CanceledError_1","xhr","Promise","resolve","reject","onCanceled","requestData","data","requestHeaders","responseType","withXSRFToken","cancelToken","unsubscribe","signal","removeEventListener","XMLHttpRequest","auth","username","password","unescape","Authorization","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","split","line","validateStatus","ERR_BAD_REQUEST","ERR_BAD_RESPONSE","Math","floor","settle","err","responseText","statusText","open","method","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","setTimeout","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","transitionalDefaults","ETIMEDOUT","xsrfValue","xsrfHeaderName","xsrfCookieName","setRequestHeader","withCredentials","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","subscribe","aborted","send","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","process","require$$0","transformRequest","contentType","hasJSONContentType","isObjectPayload","formDataToJSON","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","e","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","maxContentLength","maxBodyLength","common","Accept","defaults_1","transformData","fns","context","isCancel","throwIfCancellationRequested","throwIfRequested","dispatchRequest","then","reason","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validators$1","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","boolean","function","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","shift","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","Axios_1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","listener","splice","c","CancelToken_1","axios","createInstance","defaultConfig","instance","require$$1","require$$2","require$$3","require$$4","require$$5","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","axios_1","_default"],"mappings":"sOAEA,ICOuBA,EDPvBC,EAAiB,SAAcC,EAAIC,GACjC,OAAO,WACL,OAAOD,EAAGE,MAAMD,EAASE,aCEzBC,EAAWC,OAAOC,UAAUF,SAG5BG,GAAmBT,EAMpBO,OAAOG,OAAO,MAJR,SAASC,GACd,IAAIC,EAAMN,EAASO,KAAKF,GACxB,OAAOX,EAAMY,KAASZ,EAAMY,GAAOA,EAAIE,MAAM,GAAI,GAAGC,iBAIxD,SAASC,EAAWC,GAElB,OADAA,EAAOA,EAAKF,cACL,SAAkBJ,GACvB,OAAOF,EAAOE,KAAWM,GAU7B,SAASC,EAAQC,GACf,OAAOC,MAAMF,QAAQC,GASvB,SAASE,EAAYF,GACnB,YAAsB,IAARA,EAqBhB,IAAIG,EAAgBN,EAAW,eAmC/B,SAASO,EAASJ,GAChB,MAAsB,iBAARA,EAShB,SAASK,EAASL,GAChB,OAAe,OAARA,GAA+B,iBAARA,EAShC,SAASM,EAAcN,GACrB,GAAoB,WAAhBV,EAAOU,GACT,OAAO,EAGT,IAAIX,EAAYD,OAAOmB,eAAeP,GACtC,OAAqB,OAAdX,GAAsBA,IAAcD,OAAOC,UAoBpD,IAAImB,EAASX,EAAW,QASpBY,EAASZ,EAAW,QASpBa,EAASb,EAAW,QASpBc,EAAad,EAAW,YAQ5B,SAASe,EAAWZ,GAClB,MAA8B,sBAAvBb,EAASO,KAAKM,GAkCvB,IAAIa,EAAoBhB,EAAW,mBAoDnC,SAASiB,EAAQC,EAAKhC,GAEpB,GAAIgC,MAAAA,EAUJ,GALmB,iBAARA,IAETA,EAAM,CAACA,IAGLhB,EAAQgB,GAEV,IAAK,IAAIC,EAAI,EAAGC,EAAIF,EAAIG,OAAQF,EAAIC,EAAGD,IACrCjC,EAAGW,KAAK,KAAMqB,EAAIC,GAAIA,EAAGD,QAI3B,IAAK,IAAII,KAAOJ,EACV3B,OAAOC,UAAU+B,eAAe1B,KAAKqB,EAAKI,IAC5CpC,EAAGW,KAAK,KAAMqB,EAAII,GAAMA,EAAKJ,GAgKrC,IAA6BM,EAAzBC,GAAyBD,EAKJ,oBAAfE,YAA8BnC,OAAOmB,eAAegB,YAHrD,SAAS/B,GACd,OAAO6B,GAAc7B,aAAiB6B,IA4B1C,IAEwCG,EAFpCC,EAAa5B,EAAW,mBAExBuB,GAAoCI,EAIrCpC,OAAOC,UAAU+B,eAHX,SAASL,EAAKW,GACnB,OAAOF,EAAgB9B,KAAKqB,EAAKW,KAIrCC,EAAiB,CACf5B,QAASA,EACTI,cAAeA,EACfyB,SAtbF,SAAkB5B,GAChB,OAAe,OAARA,IAAiBE,EAAYF,IAA4B,OAApBA,EAAI6B,cAAyB3B,EAAYF,EAAI6B,cAChD,mBAA7B7B,EAAI6B,YAAYD,UAA2B5B,EAAI6B,YAAYD,SAAS5B,IAqbhF8B,WAnSF,SAAoBtC,GAClB,IAAIuC,EAAU,oBACd,OAAOvC,IACgB,mBAAbwC,UAA2BxC,aAAiBwC,UACpD7C,EAASO,KAAKF,KAAWuC,GACxBnB,EAAWpB,EAAML,WAAaK,EAAML,aAAe4C,IA+RtDE,kBAnaF,SAA2BjC,GAOzB,MAL4B,oBAAhBkC,aAAiCA,YAAkB,OACpDA,YAAYC,OAAOnC,GAEnB,GAAUA,EAAU,QAAMG,EAAcH,EAAIoC,SA+ZvDC,SApZF,SAAkBrC,GAChB,MAAsB,iBAARA,GAoZdI,SAAUA,EACVC,SAAUA,EACVC,cAAeA,EACfgC,cA3WF,SAAuBtC,GACrB,OAAOA,GAAmC,IAA5BZ,OAAOmD,KAAKvC,GAAKkB,QAAgB9B,OAAOmB,eAAeP,KAASZ,OAAOC,WA2WrFa,YAAaA,EACbM,OAAQA,EACRC,OAAQA,EACRC,OAAQA,EACRE,WAAYA,EACZ4B,SAzTF,SAAkBxC,GAChB,OAAOK,EAASL,IAAQY,EAAWZ,EAAIyC,OAyTvC5B,kBAAmBA,EACnB6B,qBAvQF,WACE,IAAIC,EACJ,OAAyB,oBAAdC,WACyB,iBAAjCD,EAAUC,UAAUD,UACT,iBAAZA,GACY,OAAZA,KAKuB,oBAAXE,QAA8C,oBAAbC,WA8P/ChC,QAASA,EACTiC,MApMF,SAASA,IACP,IAAIC,EAAS,GACb,SAASC,EAAYjD,EAAKmB,GACpBb,EAAc0C,EAAO7B,KAASb,EAAcN,GAC9CgD,EAAO7B,GAAO4B,EAAMC,EAAO7B,GAAMnB,GACxBM,EAAcN,GACvBgD,EAAO7B,GAAO4B,EAAM,GAAI/C,GACfD,EAAQC,GACjBgD,EAAO7B,GAAOnB,EAAIL,QAElBqD,EAAO7B,GAAOnB,EAIlB,IAAK,IAAIgB,EAAI,EAAGC,EAAI/B,UAAUgC,OAAQF,EAAIC,EAAGD,IAC3CF,EAAQ5B,UAAU8B,GAAIiC,GAExB,OAAOD,GAoLPE,OAzKF,SAAgBC,EAAGC,EAAGpE,GAQpB,OAPA8B,EAAQsC,GAAG,SAAqBpD,EAAKmB,GAEjCgC,EAAEhC,GADAnC,GAA0B,mBAARgB,EACXlB,EAAKkB,EAAKhB,GAEVgB,KAGNmD,GAkKPE,KA9RF,SAAc5D,GACZ,OAAOA,EAAI4D,KAAO5D,EAAI4D,OAAS5D,EAAI6D,QAAQ,qCAAsC,KA8RjFC,SA1JF,SAAkBC,GAIhB,OAH8B,QAA1BA,EAAQC,WAAW,KACrBD,EAAUA,EAAQ7D,MAAM,IAEnB6D,GAuJPE,SA5IF,SAAkB7B,EAAa8B,EAAkBC,EAAOC,GACtDhC,EAAYxC,UAAYD,OAAOG,OAAOoE,EAAiBtE,UAAWwE,GAClEhC,EAAYxC,UAAUwC,YAAcA,EACpC+B,GAASxE,OAAO0E,OAAOjC,EAAYxC,UAAWuE,IA0I9CG,aA9HF,SAAsBC,EAAWC,EAASC,EAAQC,GAChD,IAAIP,EACA5C,EACAU,EACA0C,EAAS,GAIb,GAFAH,EAAUA,GAAW,GAEJ,MAAbD,EAAmB,OAAOC,EAE9B,EAAG,CAGD,IADAjD,GADA4C,EAAQxE,OAAOiF,oBAAoBL,IACzB9C,OACHF,KAAM,GACXU,EAAOkC,EAAM5C,GACPmD,IAAcA,EAAWzC,EAAMsC,EAAWC,IAAcG,EAAO1C,KACnEuC,EAAQvC,GAAQsC,EAAUtC,GAC1B0C,EAAO1C,IAAQ,GAGnBsC,GAAuB,IAAXE,GAAoB9E,OAAOmB,eAAeyD,SAC/CA,KAAeE,GAAUA,EAAOF,EAAWC,KAAaD,IAAc5E,OAAOC,WAEtF,OAAO4E,GAwGP3E,OAAQA,EACRO,WAAYA,EACZyE,SAhGF,SAAkB7E,EAAK8E,EAAcC,GACnC/E,EAAMgF,OAAOhF,SACIiF,IAAbF,GAA0BA,EAAW/E,EAAIyB,UAC3CsD,EAAW/E,EAAIyB,QAEjBsD,GAAYD,EAAarD,OACzB,IAAIyD,EAAYlF,EAAImF,QAAQL,EAAcC,GAC1C,OAAsB,IAAfG,GAAoBA,IAAcH,GA0FzCK,QAjFF,SAAiBrF,GACf,IAAKA,EAAO,OAAO,KACnB,GAAIO,EAAQP,GAAQ,OAAOA,EAC3B,IAAIwB,EAAIxB,EAAM0B,OACd,IAAKd,EAASY,GAAI,OAAO,KAEzB,IADA,IAAI8D,EAAM,IAAI7E,MAAMe,GACbA,KAAM,GACX8D,EAAI9D,GAAKxB,EAAMwB,GAEjB,OAAO8D,GAyEPxD,aAAcA,EACdX,WAAYA,EACZoE,aAhEF,SAAsBhE,EAAKhC,GAOzB,IANA,IAIIiE,EAFAgC,GAFYjE,GAAOA,EAAIkE,OAAOD,WAETtF,KAAKqB,IAItBiC,EAASgC,EAASE,UAAYlC,EAAOmC,MAAM,CACjD,IAAIC,EAAOpC,EAAOqC,MAClBtG,EAAGW,KAAKqB,EAAKqE,EAAK,GAAIA,EAAK,MAwD7BE,SApDF,SAAkBC,EAAQ9F,GAIxB,IAHA,IAAI+F,EACAV,EAAM,GAE8B,QAAhCU,EAAUD,EAAOE,KAAKhG,KAC5BqF,EAAIY,KAAKF,GAGX,OAAOV,GA6CPrD,WAAYA,EACZL,eAAgBA,GC1flB,SAASuE,EAAWC,EAASC,EAAMC,EAAQC,EAASC,GAClDC,MAAMvG,KAAKwG,MAEPD,MAAME,kBACRF,MAAME,kBAAkBD,KAAMA,KAAKrE,aAEnCqE,KAAKE,OAAQ,IAAKH,OAASG,MAG7BF,KAAKN,QAAUA,EACfM,KAAKG,KAAO,aACZR,IAASK,KAAKL,KAAOA,GACrBC,IAAWI,KAAKJ,OAASA,GACzBC,IAAYG,KAAKH,QAAUA,GAC3BC,IAAaE,KAAKF,SAAWA,GAG/BrE,EAAM+B,SAASiC,EAAYM,MAAO,CAChCK,OAAQ,WACN,MAAO,CAELV,QAASM,KAAKN,QACdS,KAAMH,KAAKG,KAEXE,YAAaL,KAAKK,YAClBC,OAAQN,KAAKM,OAEbC,SAAUP,KAAKO,SACfC,WAAYR,KAAKQ,WACjBC,aAAcT,KAAKS,aACnBP,MAAOF,KAAKE,MAEZN,OAAQI,KAAKJ,OACbD,KAAMK,KAAKL,KACXe,OAAQV,KAAKF,UAAYE,KAAKF,SAASY,OAASV,KAAKF,SAASY,OAAS,SAK7E,IAAIvH,EAAYsG,EAAWtG,UACvBwE,EAAc,GAElB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,mBAEA/C,SAAQ,SAAS+E,GACjBhC,EAAYgC,GAAQ,CAACR,MAAOQ,MAG9BzG,OAAOyH,iBAAiBlB,EAAY9B,GACpCzE,OAAO0H,eAAezH,EAAW,eAAgB,CAACgG,OAAO,IAGzDM,EAAWoB,KAAO,SAASC,EAAOnB,EAAMC,EAAQC,EAASC,EAAUiB,GACjE,IAAIC,EAAa9H,OAAOG,OAAOF,GAc/B,OAZAsC,EAAMoC,aAAaiD,EAAOE,GAAY,SAAgBnG,GACpD,OAAOA,IAAQkF,MAAM5G,aAGvBsG,EAAWjG,KAAKwH,EAAYF,EAAMpB,QAASC,EAAMC,EAAQC,EAASC,GAElEkB,EAAWC,MAAQH,EAEnBE,EAAWb,KAAOW,EAAMX,KAExBY,GAAe7H,OAAO0E,OAAOoD,EAAYD,GAElCC,GAGT,IAAAE,EAAiBzB,EC/FjB3D,ECAgC,iBAARqF,KAAmBA,KAAKrF,SAAWa,OAAOb,SCKlE,SAASsF,EAAY9H,GACnB,OAAOmC,EAAMrB,cAAcd,IAAUmC,EAAM5B,QAAQP,GAGrD,SAAS+H,EAAepG,GACtB,OAAOQ,EAAM2C,SAASnD,EAAK,MAAQA,EAAIxB,MAAM,GAAI,GAAKwB,EAGxD,SAASqG,EAAUC,EAAMtG,EAAKuG,GAC5B,OAAKD,EACEA,EAAKE,OAAOxG,GAAKyG,KAAI,SAAcC,EAAO7G,GAG/C,OADA6G,EAAQN,EAAeM,IACfH,GAAQ1G,EAAI,IAAM6G,EAAQ,IAAMA,KACvCC,KAAKJ,EAAO,IAAM,IALHvG,EAYpB,IAAI4G,EAAapG,EAAMoC,aAAapC,EAAO,GAAI,MAAM,SAAgBD,GACnE,MAAO,WAAWsG,KAAKtG,MAsJzB,IAAAuG,EAnIA,SAAoBlH,EAAKmH,EAAUC,GACjC,IAAKxG,EAAMtB,SAASU,GAClB,MAAM,IAAIqH,UAAU,4BAItBF,EAAWA,GAAY,IAAKG,GAAerG,UAY3C,IAlCuBxC,EAkCnB8I,GATJH,EAAUxG,EAAMoC,aAAaoE,EAAS,CACpCG,YAAY,EACZZ,MAAM,EACNa,SAAS,IACR,GAAO,SAAiBC,EAAQC,GAEjC,OAAQ9G,EAAMzB,YAAYuI,EAAOD,QAGVF,WAErBI,EAAUP,EAAQO,SAAWC,EAC7BjB,EAAOS,EAAQT,KACfa,EAAUJ,EAAQI,QAElBK,GADQT,EAAQU,MAAwB,oBAATA,MAAwBA,SAvCpCrJ,EAwCgB0I,IAvCvBvG,EAAMf,WAAWpB,EAAMsJ,SAAyC,aAA9BtJ,EAAMyF,OAAO8D,cAA+BvJ,EAAMyF,OAAOD,WAyC3G,IAAKrD,EAAMf,WAAW8H,GACpB,MAAM,IAAIN,UAAU,8BAGtB,SAASY,EAAa3D,GACpB,GAAc,OAAVA,EAAgB,MAAO,GAE3B,GAAI1D,EAAMnB,OAAO6E,GACf,OAAOA,EAAM4D,cAGf,IAAKL,GAAWjH,EAAMjB,OAAO2E,GAC3B,MAAM,IAAIM,EAAW,gDAGvB,OAAIhE,EAAMxB,cAAckF,IAAU1D,EAAML,aAAa+D,GAC5CuD,GAA2B,mBAATC,KAAsB,IAAIA,KAAK,CAACxD,IAAU6D,OAAOnC,KAAK1B,GAG1EA,EAWT,SAASsD,EAAetD,EAAOlE,EAAKsG,GAClC,IAAI3C,EAAMO,EAEV,GAAIA,IAAUoC,GAAyB,iBAAVpC,EAC3B,GAAI1D,EAAM2C,SAASnD,EAAK,MAEtBA,EAAMmH,EAAanH,EAAMA,EAAIxB,MAAM,GAAI,GAEvC0F,EAAQ8D,KAAKC,UAAU/D,QAClB,GACJ1D,EAAM5B,QAAQsF,IA1FvB,SAAqBP,GACnB,OAAOnD,EAAM5B,QAAQ+E,KAASA,EAAIuE,KAAK/B,GAyFRgC,CAAYjE,IACpC1D,EAAMhB,WAAW0E,IAAU1D,EAAM2C,SAASnD,EAAK,QAAU2D,EAAMnD,EAAMkD,QAAQQ,IAY9E,OATAlE,EAAMoG,EAAepG,GAErB2D,EAAIhE,SAAQ,SAAcyI,EAAIC,IAC3B7H,EAAMzB,YAAYqJ,IAAOrB,EAASY,QAErB,IAAZP,EAAmBf,EAAU,CAACrG,GAAMqI,EAAO9B,GAAqB,OAAZa,EAAmBpH,EAAMA,EAAM,KACnF6H,EAAaO,QAGV,EAIX,QAAIjC,EAAYjC,KAIhB6C,EAASY,OAAOtB,EAAUC,EAAMtG,EAAKuG,GAAOsB,EAAa3D,KAElD,GAGT,IAAIe,EAAQ,GAERqD,EAAiBrK,OAAO0E,OAAOiE,EAAY,CAC7CY,eAAgBA,EAChBK,aAAcA,EACd1B,YAAaA,IAyBf,IAAK3F,EAAMtB,SAASU,GAClB,MAAM,IAAIqH,UAAU,0BAKtB,OA5BA,SAASsB,EAAMrE,EAAOoC,GACpB,IAAI9F,EAAMzB,YAAYmF,GAAtB,CAEA,IAA8B,IAA1Be,EAAMxB,QAAQS,GAChB,MAAMY,MAAM,kCAAoCwB,EAAKK,KAAK,MAG5D1B,EAAMV,KAAKL,GAEX1D,EAAMb,QAAQuE,GAAO,SAAckE,EAAIpI,IAKtB,MAJDQ,EAAMzB,YAAYqJ,IAAOb,EAAQhJ,KAC7CwI,EAAUqB,EAAI5H,EAAMU,SAASlB,GAAOA,EAAIkC,OAASlC,EAAKsG,EAAMgC,KAI5DC,EAAMH,EAAI9B,EAAOA,EAAKE,OAAOxG,GAAO,CAACA,OAIzCiF,EAAMuD,OAORD,CAAM3I,GAECmH,GC3KT,SAAS0B,EAAOnK,GACd,IAAIoK,EAAU,CACZ,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,MAET,OAAOC,mBAAmBrK,GAAK6D,QAAQ,sBAAsB,SAAkByG,GAC7E,OAAOF,EAAQE,MAInB,SAASC,EAAqBC,EAAQ9B,GACpCjC,KAAKgE,OAAS,GAEdD,GAAUE,EAAWF,EAAQ/D,KAAMiC,GAGrC,IAAI9I,EAAY2K,EAAqB3K,UAErCA,EAAUyJ,OAAS,SAAgBzC,EAAMhB,GACvCa,KAAKgE,OAAOxE,KAAK,CAACW,EAAMhB,KAG1BhG,EAAUF,SAAW,SAAkBiL,GACrC,IAAIC,EAAUD,EAAU,SAAS/E,GAC/B,OAAO+E,EAAQ1K,KAAKwG,KAAMb,EAAOuE,IAC/BA,EAEJ,OAAO1D,KAAKgE,OAAOtC,KAAI,SAAcxC,GACnC,OAAOiF,EAAQjF,EAAK,IAAM,IAAMiF,EAAQjF,EAAK,MAC5C,IAAI0C,KAAK,MAGd,IAAAwC,EAAiBN,ECpCjB,SAASJ,EAAO5J,GACd,OAAO8J,mBAAmB9J,GACxBsD,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAWrB,IAAciH,EAAG,SAAkBC,EAAKP,EAAQ9B,GAE9C,IAAK8B,EACH,OAAOO,EAGT,IAAIC,EAAgBD,EAAI5F,QAAQ,MAET,IAAnB6F,IACFD,EAAMA,EAAI7K,MAAM,EAAG8K,IAGrB,IAIIC,EAJAL,EAAUlC,GAAWA,EAAQyB,QAAUA,EAEvCe,EAAcxC,GAAWA,EAAQyC,UAgBrC,OAXEF,EADEC,EACiBA,EAAYV,EAAQ9B,GAEpBxG,EAAMd,kBAAkBoJ,GACzCA,EAAO9K,WACP,IAAI6K,EAAqBC,EAAQ9B,GAAShJ,SAASkL,MAIrDG,KAA8B,IAAtBA,EAAI5F,QAAQ,KAAc,IAAM,KAAO8F,GAG1CF,GCjDT,SAASK,IACP3E,KAAK4E,SAAW,GAWlBD,EAAmBxL,UAAU0L,IAAM,SAAaC,EAAWC,EAAU9C,GAOnE,OANAjC,KAAK4E,SAASpF,KAAK,CACjBsF,UAAWA,EACXC,SAAUA,EACVC,cAAa/C,GAAUA,EAAQ+C,YAC/BC,QAAShD,EAAUA,EAAQgD,QAAU,OAEhCjF,KAAK4E,SAAS5J,OAAS,GAQhC2J,EAAmBxL,UAAU+L,MAAQ,SAAeC,GAC9CnF,KAAK4E,SAASO,KAChBnF,KAAK4E,SAASO,GAAM,OAOxBR,EAAmBxL,UAAUiM,MAAQ,WAC/BpF,KAAK4E,WACP5E,KAAK4E,SAAW,KAYpBD,EAAmBxL,UAAUyB,QAAU,SAAiB/B,GACtD4C,EAAMb,QAAQoF,KAAK4E,UAAU,SAAwBS,GACzC,OAANA,GACFxM,EAAGwM,OAKT,IAAAC,EAAiBX,EC1DjBY,EAAiB,SAA6BC,EAASC,GACrDhK,EAAMb,QAAQ4K,GAAS,SAAuBrG,EAAOgB,GAC/CA,IAASsF,GAAkBtF,EAAKuF,gBAAkBD,EAAeC,gBACnEF,EAAQC,GAAkBtG,SACnBqG,EAAQrF,QCNrBwF,EAAiB,CACfC,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB,GCHvBC,ECAiB,CACfC,WAAW,EACXC,QAAS,CACPC,gBCDwC,oBAApBA,gBAAkCA,gBAAkBpC,EDExEhI,SEJaA,SFKb6G,KAAMA,MAERwD,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,SG6DtD,IAAAC,EA3CA,SAAwBpE,GACtB,SAASqE,EAAU9E,EAAMpC,EAAOmH,EAAQhD,GACtC,IAAInD,EAAOoB,EAAK+B,KACZiD,EAAeC,OAAOC,UAAUtG,GAChCuG,EAASpD,GAAS/B,EAAKvG,OAG3B,OAFAmF,GAAQA,GAAQ1E,EAAM5B,QAAQyM,GAAUA,EAAOtL,OAASmF,EAEpDuG,GACEjL,EAAMP,eAAeoL,EAAQnG,GAC/BmG,EAAOnG,GAAQ,CAACmG,EAAOnG,GAAOhB,GAE9BmH,EAAOnG,GAAQhB,GAGToH,IAGLD,EAAOnG,IAAU1E,EAAMtB,SAASmM,EAAOnG,MAC1CmG,EAAOnG,GAAQ,IAGJkG,EAAU9E,EAAMpC,EAAOmH,EAAOnG,GAAOmD,IAEpC7H,EAAM5B,QAAQyM,EAAOnG,MACjCmG,EAAOnG,GArCb,SAAuBvB,GACrB,IAEI9D,EAEAG,EAJAJ,EAAM,GACNwB,EAAOnD,OAAOmD,KAAKuC,GAEnB+H,EAAMtK,EAAKrB,OAEf,IAAKF,EAAI,EAAGA,EAAI6L,EAAK7L,IAEnBD,EADAI,EAAMoB,EAAKvB,IACA8D,EAAI3D,GAEjB,OAAOJ,EA2BY+L,CAAcN,EAAOnG,MAG9BoG,GAGV,GAAI9K,EAAMG,WAAWoG,IAAavG,EAAMf,WAAWsH,EAAS6E,SAAU,CACpE,IAAIhM,EAAM,GAMV,OAJAY,EAAMoD,aAAamD,GAAU,SAAS7B,EAAMhB,GAC1CkH,EAzDN,SAAuBlG,GAKrB,OAAO1E,EAAM2D,SAAS,gBAAiBe,GAAMuB,KAAI,SAASmC,GACxD,MAAoB,OAAbA,EAAM,GAAc,GAAKA,EAAM,IAAMA,EAAM,MAmDtCiD,CAAc3G,GAAOhB,EAAOtE,EAAK,MAGtCA,EAGT,OAAO,MC/DKkM,EACZtL,EAAMe,uBAIK,CACLwK,MAAO,SAAe7G,EAAMhB,EAAO8H,EAAS1F,EAAM2F,EAAQC,GACxD,IAAIC,EAAS,GACbA,EAAO5H,KAAKW,EAAO,IAAMyD,mBAAmBzE,IAExC1D,EAAMvB,SAAS+M,IACjBG,EAAO5H,KAAK,WAAa,IAAI6H,KAAKJ,GAASK,eAGzC7L,EAAMU,SAASoF,IACjB6F,EAAO5H,KAAK,QAAU+B,GAGpB9F,EAAMU,SAAS+K,IACjBE,EAAO5H,KAAK,UAAY0H,IAGX,IAAXC,GACFC,EAAO5H,KAAK,UAGd5C,SAASwK,OAASA,EAAOxF,KAAK,OAGhC2F,KAAM,SAAcpH,GAClB,IAAI0D,EAAQjH,SAASwK,OAAOvD,MAAM,IAAI2D,OAAO,aAAerH,EAAO,cACnE,OAAQ0D,EAAQ4D,mBAAmB5D,EAAM,IAAM,MAGjD6D,OAAQ,SAAgBvH,GACtBH,KAAKgH,MAAM7G,EAAM,GAAIkH,KAAKM,MAAQ,SAO/B,CACLX,MAAO,aACPO,KAAM,WAAkB,OAAO,MAC/BG,OAAQ,cCnChBE,EAAiB,SAAuBC,EAASC,GAC/C,OAAID,ICHG,8BAA8B/F,KDGPgG,GENf,SAAqBD,EAASE,GAC7C,OAAOA,EACHF,EAAQzK,QAAQ,OAAQ,IAAM,IAAM2K,EAAY3K,QAAQ,OAAQ,IAChEyK,EFIKG,CAAYH,EAASC,GAEvBA,GGZLG,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cCNdC,EACZzM,EAAMe,uBAIJ,WACE,IAEI2L,EAFAC,EAAO,kBAAkBtG,KAAKpF,UAAU2L,WACxCC,EAAiB1L,SAAS2L,cAAc,KAS5C,SAASC,EAAWlE,GAClB,IAAImE,EAAOnE,EAWX,OATI8D,IAEFE,EAAeI,aAAa,OAAQD,GACpCA,EAAOH,EAAeG,MAGxBH,EAAeI,aAAa,OAAQD,GAG7B,CACLA,KAAMH,EAAeG,KACrBE,SAAUL,EAAeK,SAAWL,EAAeK,SAASvL,QAAQ,KAAM,IAAM,GAChFwL,KAAMN,EAAeM,KACrBC,OAAQP,EAAeO,OAASP,EAAeO,OAAOzL,QAAQ,MAAO,IAAM,GAC3E0L,KAAMR,EAAeQ,KAAOR,EAAeQ,KAAK1L,QAAQ,KAAM,IAAM,GACpE2L,SAAUT,EAAeS,SACzBC,KAAMV,EAAeU,KACrBC,SAAiD,MAAtCX,EAAeW,SAASC,OAAO,GACxCZ,EAAeW,SACf,IAAMX,EAAeW,UAY3B,OARAd,EAAYK,EAAW7L,OAAOwM,SAASV,MAQhC,SAAyBW,GAC9B,IAAIC,EAAU5N,EAAMU,SAASiN,GAAeZ,EAAWY,GAAcA,EACrE,OAAQC,EAAOV,WAAaR,EAAUQ,UAClCU,EAAOT,OAAST,EAAUS,MAhDlC,GAsDS,WACL,OAAO,GCnDf,SAASU,EAAc5J,EAASE,EAAQC,GAEtCJ,EAAWjG,KAAKwG,KAAiB,MAAXN,EAAkB,WAAaA,EAASD,EAAW8J,aAAc3J,EAAQC,GAC/FG,KAAKG,KAAO,gBAGd1E,EAAM+B,SAAS8L,EAAe7J,EAAY,CACxC+J,YAAY,IAGd,IAAAC,EAAiBH,ECRjBI,EAAiB,SAAoB9J,GACnC,OAAO,IAAI+J,SAAQ,SAA4BC,EAASC,GACtD,IAIIC,EAJAC,EAAcnK,EAAOoK,KACrBC,EAAiBrK,EAAO4F,QACxB0E,EAAetK,EAAOsK,aACtBC,EAAgBvK,EAAOuK,cAE3B,SAASlL,IACHW,EAAOwK,aACTxK,EAAOwK,YAAYC,YAAYP,GAG7BlK,EAAO0K,QACT1K,EAAO0K,OAAOC,oBAAoB,QAAST,GAI3CrO,EAAMG,WAAWmO,IAAgBtO,EAAMe,+BAClCyN,EAAe,gBAGxB,IAAIpK,EAAU,IAAI2K,eAGlB,GAAI5K,EAAO6K,KAAM,CACf,IAAIC,EAAW9K,EAAO6K,KAAKC,UAAY,GACnCC,EAAW/K,EAAO6K,KAAKE,SAAWC,SAAShH,mBAAmBhE,EAAO6K,KAAKE,WAAa,GAC3FV,EAAeY,cAAgB,SAAWC,KAAKJ,EAAW,IAAMC,GAGlE,IAAII,EAAWnD,EAAchI,EAAOiI,QAASjI,EAAO0E,KAOpD,SAAS0G,IACP,GAAKnL,EAAL,CAIA,IH/BiC2F,EAEjCvK,EACAnB,EACAgB,EAHAuO,EG8BI4B,EAAkB,0BAA2BpL,GH/BhB2F,EG+BuC3F,EAAQqL,wBH9BhF7B,EAAS,GAKR7D,GAEL/J,EAAMb,QAAQ4K,EAAQ2F,MAAM,OAAO,SAAgBC,GAKjD,GAJAtQ,EAAIsQ,EAAK1M,QAAQ,KACjBzD,EAAMQ,EAAM0B,KAAKiO,EAAK3R,MAAM,EAAGqB,IAAIpB,cACnCI,EAAM2B,EAAM0B,KAAKiO,EAAK3R,MAAMqB,EAAI,IAE5BG,EAAK,CACP,GAAIoO,EAAOpO,IAAQgN,EAAkBvJ,QAAQzD,IAAQ,EACnD,OAGAoO,EAAOpO,GADG,eAARA,GACaoO,EAAOpO,GAAOoO,EAAOpO,GAAO,IAAIwG,OAAO,CAAC3H,IAEzCuP,EAAOpO,GAAOoO,EAAOpO,GAAO,KAAOnB,EAAMA,MAKtDuP,GAnBgBA,GGyBwF,MC9ChG,SAAgBO,EAASC,EAAQ/J,GAChD,IAAIuL,EAAiBvL,EAASF,OAAOyL,eAChCvL,EAASY,QAAW2K,IAAkBA,EAAevL,EAASY,QAGjEmJ,EAAO,IAAIpK,EACT,mCAAqCK,EAASY,OAC9C,CAACjB,EAAW6L,gBAAiB7L,EAAW8L,kBAAkBC,KAAKC,MAAM3L,EAASY,OAAS,KAAO,GAC9FZ,EAASF,OACTE,EAASD,QACTC,IAPF8J,EAAQ9J,GDuDN4L,EAAO,SAAkBvM,GACvByK,EAAQzK,GACRF,OACC,SAAiB0M,GAClB9B,EAAO8B,GACP1M,MAda,CACb+K,KAHkBE,GAAiC,SAAjBA,GAA6C,SAAjBA,EACvCrK,EAAQC,SAA/BD,EAAQ+L,aAGRlL,OAAQb,EAAQa,OAChBmL,WAAYhM,EAAQgM,WACpBrG,QAASyF,EACTrL,OAAQA,EACRC,QAASA,IAYXA,EAAU,MAoEZ,GAnGAA,EAAQiM,KAAKlM,EAAOmM,OAAOrG,cAAerB,EAAS0G,EAAUnL,EAAOmE,OAAQnE,EAAOoM,mBAAmB,GAGtGnM,EAAQoM,QAAUrM,EAAOqM,QA+BrB,cAAepM,EAEjBA,EAAQmL,UAAYA,EAGpBnL,EAAQqM,mBAAqB,WACtBrM,GAAkC,IAAvBA,EAAQsM,aAQD,IAAnBtM,EAAQa,QAAkBb,EAAQuM,aAAwD,IAAzCvM,EAAQuM,YAAY1N,QAAQ,WAKjF2N,WAAWrB,IAKfnL,EAAQyM,QAAU,WACXzM,IAILgK,EAAO,IAAIpK,EAAW,kBAAmBA,EAAW8M,aAAc3M,EAAQC,IAG1EA,EAAU,OAIZA,EAAQ2M,QAAU,WAGhB3C,EAAO,IAAIpK,EAAW,gBAAiBA,EAAWgN,YAAa7M,EAAQC,IAGvEA,EAAU,MAIZA,EAAQ6M,UAAY,WAClB,IAAIC,EAAsB/M,EAAOqM,QAAU,cAAgBrM,EAAOqM,QAAU,cAAgB,mBACxFtG,EAAe/F,EAAO+F,cAAgBiH,EACtChN,EAAO+M,sBACTA,EAAsB/M,EAAO+M,qBAE/B9C,EAAO,IAAIpK,EACTkN,EACAhH,EAAaG,oBAAsBrG,EAAWoN,UAAYpN,EAAW8M,aACrE3M,EACAC,IAGFA,EAAU,MAMRpE,EAAMe,yBAER2N,GAAiB1O,EAAMf,WAAWyP,KAAmBA,EAAgBA,EAAcvK,IAC/EuK,IAAoC,IAAlBA,GAA2BjC,EAAgB6C,IAAY,CAE3E,IAAI+B,EAAYlN,EAAOmN,gBAAkBnN,EAAOoN,gBAAkBjG,EAAQQ,KAAK3H,EAAOoN,gBAClFF,IACF7C,EAAerK,EAAOmN,gBAAkBD,GAM1C,qBAAsBjN,GACxBpE,EAAMb,QAAQqP,GAAgB,SAA0BnQ,EAAKmB,QAChC,IAAhB8O,GAAqD,iBAAtB9O,EAAIvB,qBAErCuQ,EAAehP,GAGtB4E,EAAQoN,iBAAiBhS,EAAKnB,MAM/B2B,EAAMzB,YAAY4F,EAAOsN,mBAC5BrN,EAAQqN,kBAAoBtN,EAAOsN,iBAIjChD,GAAiC,SAAjBA,IAClBrK,EAAQqK,aAAetK,EAAOsK,cAIS,mBAA9BtK,EAAOuN,oBAChBtN,EAAQuN,iBAAiB,WAAYxN,EAAOuN,oBAIP,mBAA5BvN,EAAOyN,kBAAmCxN,EAAQyN,QAC3DzN,EAAQyN,OAAOF,iBAAiB,WAAYxN,EAAOyN,mBAGjDzN,EAAOwK,aAAexK,EAAO0K,UAG/BR,EAAa,SAASyD,GACf1N,IAGLgK,GAAQ0D,GAAUA,EAAO3T,KAAO,IAAI0P,EAAc,KAAM1J,EAAQC,GAAW0N,GAC3E1N,EAAQ2N,QACR3N,EAAU,OAGZD,EAAOwK,aAAexK,EAAOwK,YAAYqD,UAAU3D,GAC/ClK,EAAO0K,SACT1K,EAAO0K,OAAOoD,QAAU5D,IAAelK,EAAO0K,OAAO8C,iBAAiB,QAAStD,KAK9EC,IAA+B,IAAhBA,GAAyC,IAAhBA,GAAqC,KAAhBA,IAChEA,EAAc,MAGhB,IEnNElG,EFmNE8E,GEnNF9E,EAAQ,4BAA4BtE,KFmNTwL,KElNflH,EAAM,IAAM,GFoNtB8E,IAAsD,IAA1C5C,EAASI,UAAUzH,QAAQiK,GACzCkB,EAAO,IAAIpK,EAAW,wBAA0BkJ,EAAW,IAAKlJ,EAAW6L,gBAAiB1L,IAM9FC,EAAQ8N,KAAK5D,OGpNb6D,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,GAAsBrI,EAASrG,IACjC1D,EAAMzB,YAAYwL,IAAY/J,EAAMzB,YAAYwL,EAAQ,mBAC3DA,EAAQ,gBAAkBrG,GA+B9B,IA1BM2O,GA0BFC,GAAW,CAEbpI,aAAciH,EAEdkB,UA7B8B,oBAAnBtD,gBAGmB,oBAAZwD,SAAuE,qBAA5C9U,OAAOC,UAAUF,SAASO,KAAKwU,YAD1EF,GAAUG,GAKLH,IAwBPI,iBAAkB,CAAC,SAA0BlE,EAAMxE,GACjDD,EAAoBC,EAAS,UAC7BD,EAAoBC,EAAS,gBAE7B,IA8BI/K,EA9BA0T,EAAc3I,GAAWA,EAAQ,iBAAmB,GACpD4I,EAAqBD,EAAYzP,QAAQ,qBAAuB,EAChE2P,EAAkB5S,EAAMtB,SAAS6P,GAQrC,GANIqE,GAAmB5S,EAAMF,WAAWyO,KACtCA,EAAO,IAAIlO,SAASkO,IAGLvO,EAAMG,WAAWoO,GAGhC,OAAOoE,EAAqBnL,KAAKC,UAAUoL,EAAetE,IAASA,EAGrE,GAAIvO,EAAMxB,cAAc+P,IACtBvO,EAAMC,SAASsO,IACfvO,EAAMa,SAAS0N,IACfvO,EAAMlB,OAAOyP,IACbvO,EAAMjB,OAAOwP,GAEb,OAAOA,EAET,GAAIvO,EAAMM,kBAAkBiO,GAC1B,OAAOA,EAAK9N,OAEd,GAAIT,EAAMd,kBAAkBqP,GAE1B,OADA6D,GAAsBrI,EAAS,mDACxBwE,EAAK/Q,WAKd,GAAIoV,EAAiB,CACnB,IAAkE,IAA9DF,EAAYzP,QAAQ,qCACtB,OCtFS,SAA0BsL,EAAM/H,GAC/C,OAAOgC,EAAW+F,EAAM,IAAIjE,EAASE,QAAQC,gBAAmBhN,OAAO0E,OAAO,CAC5E4E,QAAS,SAASrD,EAAOlE,EAAKsG,EAAMgN,GAClC,OAAIxI,EAASyI,QAAU/S,EAAMC,SAASyD,IACpCa,KAAK4C,OAAO3H,EAAKkE,EAAMlG,SAAS,YACzB,GAGFsV,EAAQ9L,eAAe1J,MAAMiH,KAAMhH,aAE3CiJ,ID4EUwM,CAAiBzE,EAAMhK,KAAK0O,gBAAgBzV,WAGrD,IAAKwB,EAAagB,EAAMhB,WAAWuP,KAAUmE,EAAYzP,QAAQ,wBAA0B,EAAG,CAC5F,IAAIiQ,EAAY3O,KAAK4O,KAAO5O,KAAK4O,IAAI9S,SAErC,OAAOmI,EACLxJ,EAAa,CAAC,UAAWuP,GAAQA,EACjC2E,GAAa,IAAIA,EACjB3O,KAAK0O,iBAKX,OAAIL,GAAmBD,GACrBP,GAAsBrI,EAAS,oBA1ErC,SAAyBqJ,EAAUC,EAAQ5K,GACzC,GAAIzI,EAAMU,SAAS0S,GACjB,IAEE,OADCC,GAAU7L,KAAK8L,OAAOF,GAChBpT,EAAM0B,KAAK0R,GAClB,MAAOG,GACP,GAAe,gBAAXA,EAAE7O,KACJ,MAAM6O,EAKZ,OAAQ9K,GAAWjB,KAAKC,WAAW2L,GA+DxBI,CAAgBjF,IAGlBA,IAGTkF,kBAAmB,CAAC,SAA2BlF,GAC7C,IAAIrE,EAAe3F,KAAK2F,cAAgBoI,GAASpI,aAC7CE,EAAoBF,GAAgBA,EAAaE,kBACjDsJ,EAAsC,SAAtBnP,KAAKkK,aAEzB,GAAIF,GAAQvO,EAAMU,SAAS6N,KAAWnE,IAAsB7F,KAAKkK,cAAiBiF,GAAgB,CAChG,IACIC,IADoBzJ,GAAgBA,EAAaC,oBACPuJ,EAE9C,IACE,OAAOlM,KAAK8L,MAAM/E,GAClB,MAAOgF,GACP,GAAII,EAAmB,CACrB,GAAe,gBAAXJ,EAAE7O,KACJ,MAAMV,EAAWoB,KAAKmO,EAAGvP,EAAW8L,iBAAkBvL,KAAM,KAAMA,KAAKF,UAEzE,MAAMkP,IAKZ,OAAOhF,IAOTiC,QAAS,EAETe,eAAgB,aAChBD,eAAgB,eAEhBsC,kBAAmB,EACnBC,eAAgB,EAEhBV,IAAK,CACH9S,SAAUiK,EAASE,QAAQnK,SAC3B6G,KAAMoD,EAASE,QAAQtD,MAGzB0I,eAAgB,SAAwB3K,GACtC,OAAOA,GAAU,KAAOA,EAAS,KAGnC8E,QAAS,CACP+J,OAAQ,CACNC,OAAU,uCAKhB/T,EAAMb,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BmR,GACpEgC,GAASvI,QAAQuG,GAAU,MAG7BtQ,EAAMb,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BmR,GACrEgC,GAASvI,QAAQuG,GAAUtQ,EAAMoB,MAAM+Q,MAGzC,IAAA6B,GAAiB1B,GEhKH2B,GAAG,SAAuB1F,EAAMxE,EAAS9E,EAAQiP,GAC7D,IAAIC,EAAU5P,MAAQ+N,GAMtB,OAJAtS,EAAMb,QAAQ+U,GAAK,SAAmB9W,GACpCmR,EAAOnR,EAAGW,KAAKoW,EAAS5F,EAAMxE,EAAS9E,MAGlCsJ,GCnBT6F,GAAiB,SAAkB1Q,GACjC,SAAUA,IAASA,EAAMqK,aCS3B,SAASsG,GAA6BlQ,GAKpC,GAJIA,EAAOwK,aACTxK,EAAOwK,YAAY2F,mBAGjBnQ,EAAO0K,QAAU1K,EAAO0K,OAAOoD,QACjC,MAAM,IAAIpE,EAUd,IAAA0G,GAAiB,SAAyBpQ,GAkCxC,OAjCAkQ,GAA6BlQ,GAG7BA,EAAO4F,QAAU5F,EAAO4F,SAAW,GAGnC5F,EAAOoK,KAAO0F,GAAclW,KAC1BoG,EACAA,EAAOoK,KACPpK,EAAO4F,QACP,KACA5F,EAAOsO,kBAGT3I,EAAoB3F,EAAO4F,QAAS,UACpCD,EAAoB3F,EAAO4F,QAAS,gBAGpC5F,EAAO4F,QAAU/J,EAAMoB,MACrB+C,EAAO4F,QAAQ+J,QAAU,GACzB3P,EAAO4F,QAAQ5F,EAAOmM,SAAW,GACjCnM,EAAO4F,SAGT/J,EAAMb,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2BmR,UAClBnM,EAAO4F,QAAQuG,OAIZnM,EAAOkO,SAAWC,GAASD,SAE1BlO,GAAQqQ,MAAK,SAA6BnQ,GAYvD,OAXAgQ,GAA6BlQ,GAG7BE,EAASkK,KAAO0F,GAAclW,KAC5BoG,EACAE,EAASkK,KACTlK,EAAS0F,QACT1F,EAASY,OACTd,EAAOsP,mBAGFpP,KACN,SAA4BoQ,GAgB7B,OAfKL,GAASK,KACZJ,GAA6BlQ,GAGzBsQ,GAAUA,EAAOpQ,WACnBoQ,EAAOpQ,SAASkK,KAAO0F,GAAclW,KACnCoG,EACAsQ,EAAOpQ,SAASkK,KAChBkG,EAAOpQ,SAAS0F,QAChB0K,EAAOpQ,SAASY,OAChBd,EAAOsP,qBAKNvF,QAAQE,OAAOqG,OC/E1BC,GAAiB,SAAqBC,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAIzQ,EAAS,GAEb,SAAS0Q,EAAehK,EAAQ/D,GAC9B,OAAI9G,EAAMrB,cAAckM,IAAW7K,EAAMrB,cAAcmI,GAC9C9G,EAAMoB,MAAMyJ,EAAQ/D,GAClB9G,EAAMW,cAAcmG,GACtB9G,EAAMoB,MAAM,GAAIyJ,GACd7K,EAAMrB,cAAcmI,GACtB9G,EAAMoB,MAAM,GAAI0F,GACd9G,EAAM5B,QAAQ0I,GAChBA,EAAO9I,QAET8I,EAIT,SAASgO,EAAoB/U,GAC3B,OAAKC,EAAMzB,YAAYqW,EAAQ7U,IAEnBC,EAAMzB,YAAYoW,EAAQ5U,SAA/B,EACE8U,OAAe9R,EAAW4R,EAAQ5U,IAFlC8U,EAAeF,EAAQ5U,GAAO6U,EAAQ7U,IAOjD,SAASgV,EAAiBhV,GACxB,IAAKC,EAAMzB,YAAYqW,EAAQ7U,IAC7B,OAAO8U,OAAe9R,EAAW6R,EAAQ7U,IAK7C,SAASiV,EAAiBjV,GACxB,OAAKC,EAAMzB,YAAYqW,EAAQ7U,IAEnBC,EAAMzB,YAAYoW,EAAQ5U,SAA/B,EACE8U,OAAe9R,EAAW4R,EAAQ5U,IAFlC8U,OAAe9R,EAAW6R,EAAQ7U,IAO7C,SAASkV,EAAgBlV,GACvB,OAAIA,KAAQ6U,EACHC,EAAeF,EAAQ5U,GAAO6U,EAAQ7U,IACpCA,KAAQ4U,EACVE,OAAe9R,EAAW4R,EAAQ5U,SADpC,EAKT,IAAImV,EAAW,CACbrM,IAAOkM,EACPzE,OAAUyE,EACVxG,KAAQwG,EACR3I,QAAW4I,EACXvC,iBAAoBuC,EACpBvB,kBAAqBuB,EACrBzE,iBAAoByE,EACpBxE,QAAWwE,EACXG,eAAkBH,EAClBvD,gBAAmBuD,EACnBtG,cAAiBsG,EACjB3C,QAAW2C,EACXvG,aAAgBuG,EAChBzD,eAAkByD,EAClB1D,eAAkB0D,EAClBpD,iBAAoBoD,EACpBtD,mBAAsBsD,EACtBI,WAAcJ,EACdpB,iBAAoBoB,EACpBnB,cAAiBmB,EACjBK,eAAkBL,EAClBM,UAAaN,EACbO,UAAaP,EACbQ,WAAcR,EACdrG,YAAeqG,EACfS,WAAcT,EACdU,iBAAoBV,EACpBpF,eAAkBqF,GASpB,OANAjV,EAAMb,QAAQ1B,OAAOmD,KAAK+T,GAAS3O,OAAOvI,OAAOmD,KAAKgU,KAAW,SAA4B7U,GAC3F,IAAIqB,EAAQ8T,EAASnV,IAAS+U,EAC1Ba,EAAcvU,EAAMrB,GACvBC,EAAMzB,YAAYoX,IAAgBvU,IAAU6T,IAAqB9Q,EAAOpE,GAAQ4V,MAG5ExR,GCrGToK,GACa,SCCTqH,GAAUpD,GAGVqD,GAAa,GAGjB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAU1W,SAAQ,SAAShB,EAAMkB,GACrFwW,GAAW1X,GAAQ,SAAmBN,GACpC,cAAcA,IAAUM,GAAQ,KAAOkB,EAAI,EAAI,KAAO,KAAOlB,MAIjE,IAAI2X,GAAqB,GASfC,GAAC7L,aAAe,SAAsB8L,EAAWC,EAAShS,GAClE,SAASiS,EAAcC,EAAKC,GAC1B,MAAO,WAAaR,GAAU,0BAA6BO,EAAM,IAAOC,GAAQnS,EAAU,KAAOA,EAAU,IAI7G,OAAO,SAASP,EAAOyS,EAAKE,GAC1B,IAAkB,IAAdL,EACF,MAAM,IAAIhS,EACRkS,EAAcC,EAAK,qBAAuBF,EAAU,OAASA,EAAU,KACvEjS,EAAWsS,gBAef,OAXIL,IAAYH,GAAmBK,KACjCL,GAAmBK,IAAO,EAE1BI,QAAQC,KACNN,EACEC,EACA,+BAAiCF,EAAU,8CAK1CD,GAAYA,EAAUtS,EAAOyS,EAAKE,KAkC7C,IAAAL,GAAiB,CACfS,cAxBF,SAAuBjQ,EAASkQ,EAAQC,GACtC,GAAuB,iBAAZnQ,EACT,MAAM,IAAIxC,EAAW,4BAA6BA,EAAW4S,sBAI/D,IAFA,IAAIhW,EAAOnD,OAAOmD,KAAK4F,GACnBnH,EAAIuB,EAAKrB,OACNF,KAAM,GAAG,CACd,IAAI8W,EAAMvV,EAAKvB,GACX2W,EAAYU,EAAOP,GACvB,GAAIH,EAAJ,CACE,IAAItS,EAAQ8C,EAAQ2P,GAChB9U,OAAmB0B,IAAVW,GAAuBsS,EAAUtS,EAAOyS,EAAK3P,GAC1D,IAAe,IAAXnF,EACF,MAAM,IAAI2C,EAAW,UAAYmS,EAAM,YAAc9U,EAAQ2C,EAAW4S,2BAI5E,IAAqB,IAAjBD,EACF,MAAM,IAAI3S,EAAW,kBAAoBmS,EAAKnS,EAAW6S,kBAO7DhB,WAAYA,IC1EVA,GAAaG,GAAUH,WAM3B,SAASiB,GAAMC,GACbxS,KAAK+N,SAAWyE,EAChBxS,KAAKyS,aAAe,CAClB5S,QAAS,IAAI8E,EACb7E,SAAU,IAAI6E,GAUlB4N,GAAMpZ,UAAU0G,QAAU,SAAiB6S,EAAa9S,GAG3B,iBAAhB8S,GACT9S,EAASA,GAAU,IACZ0E,IAAMoO,EAEb9S,EAAS8S,GAAe,IAG1B9S,EAASuQ,GAAYnQ,KAAK+N,SAAUnO,IAGzBmM,OACTnM,EAAOmM,OAASnM,EAAOmM,OAAOrS,cACrBsG,KAAK+N,SAAShC,OACvBnM,EAAOmM,OAAS/L,KAAK+N,SAAShC,OAAOrS,cAErCkG,EAAOmM,OAAS,MAGlB,IAAIpG,EAAe/F,EAAO+F,kBAELnH,IAAjBmH,GACF8L,GAAUS,cAAcvM,EAAc,CACpCC,kBAAmB0L,GAAW3L,aAAa2L,GAAWqB,SACtD9M,kBAAmByL,GAAW3L,aAAa2L,GAAWqB,SACtD7M,oBAAqBwL,GAAW3L,aAAa2L,GAAWqB,WACvD,GAGL,IAAI3G,EAAmBpM,EAAOoM,sBAELxN,IAArBwN,GACFyF,GAAUS,cAAclG,EAAkB,CACxCtI,OAAQ4N,GAAWsB,SACnBlO,UAAW4M,GAAWsB,WACrB,GAGLnX,EAAMf,WAAWsR,KAAsBpM,EAAOoM,iBAAmB,CAACtH,UAAWsH,IAG7E,IAAI6G,EAA0B,GAC1BC,GAAiC,EACrC9S,KAAKyS,aAAa5S,QAAQjF,SAAQ,SAAoCmY,GACjC,mBAAxBA,EAAY9N,UAA0D,IAAhC8N,EAAY9N,QAAQrF,KAIrEkT,EAAiCA,GAAkCC,EAAY/N,YAE/E6N,EAAwBG,QAAQD,EAAYjO,UAAWiO,EAAYhO,cAGrE,IAKIkO,EALAC,EAA2B,GAO/B,GANAlT,KAAKyS,aAAa3S,SAASlF,SAAQ,SAAkCmY,GACnEG,EAAyB1T,KAAKuT,EAAYjO,UAAWiO,EAAYhO,cAK9D+N,EAAgC,CACnC,IAAIK,EAAQ,CAACnD,QAAiBxR,GAM9B,IAJAzE,MAAMZ,UAAU6Z,QAAQja,MAAMoa,EAAON,GACrCM,EAAQA,EAAM1R,OAAOyR,GAErBD,EAAUtJ,QAAQC,QAAQhK,GACnBuT,EAAMnY,QACXiY,EAAUA,EAAQhD,KAAKkD,EAAMC,QAASD,EAAMC,SAG9C,OAAOH,EAKT,IADA,IAAII,EAAYzT,EACTiT,EAAwB7X,QAAQ,CACrC,IAAIsY,EAAcT,EAAwBO,QACtCG,EAAaV,EAAwBO,QACzC,IACEC,EAAYC,EAAYD,GACxB,MAAOvS,GACPyS,EAAWzS,GACX,OAIJ,IACEmS,EAAUjD,GAAgBqD,GAC1B,MAAOvS,GACP,OAAO6I,QAAQE,OAAO/I,GAGxB,KAAOoS,EAAyBlY,QAC9BiY,EAAUA,EAAQhD,KAAKiD,EAAyBE,QAASF,EAAyBE,SAGpF,OAAOH,GAGTV,GAAMpZ,UAAUqa,OAAS,SAAgB5T,GACvCA,EAASuQ,GAAYnQ,KAAK+N,SAAUnO,GACpC,IAAImL,EAAWnD,EAAchI,EAAOiI,QAASjI,EAAO0E,KACpD,OAAOD,EAAS0G,EAAUnL,EAAOmE,OAAQnE,EAAOoM,mBAIlDvQ,EAAMb,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BmR,GAE/EwG,GAAMpZ,UAAU4S,GAAU,SAASzH,EAAK1E,GACtC,OAAOI,KAAKH,QAAQsQ,GAAYvQ,GAAU,GAAI,CAC5CmM,OAAQA,EACRzH,IAAKA,EACL0F,MAAOpK,GAAU,IAAIoK,YAK3BvO,EAAMb,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BmR,GAGrE,SAAS0H,EAAmBC,GAC1B,OAAO,SAAoBpP,EAAK0F,EAAMpK,GACpC,OAAOI,KAAKH,QAAQsQ,GAAYvQ,GAAU,GAAI,CAC5CmM,OAAQA,EACRvG,QAASkO,EAAS,CAChB,eAAgB,uBACd,GACJpP,IAAKA,EACL0F,KAAMA,MAKZuI,GAAMpZ,UAAU4S,GAAU0H,IAE1BlB,GAAMpZ,UAAU4S,EAAS,QAAU0H,GAAmB,MAGxD,IAAAE,GAAiBpB,GCjKjB,SAASqB,GAAYC,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAI3R,UAAU,gCAGtB,IAAI4R,EAEJ9T,KAAKiT,QAAU,IAAItJ,SAAQ,SAAyBC,GAClDkK,EAAiBlK,KAGnB,IAAIjI,EAAQ3B,KAGZA,KAAKiT,QAAQhD,MAAK,SAAS1C,GACzB,GAAK5L,EAAMoS,WAAX,CAIA,IAFA,IAAIjZ,EAAI6G,EAAMoS,WAAW/Y,OAElBF,KAAM,GACX6G,EAAMoS,WAAWjZ,GAAGyS,GAEtB5L,EAAMoS,WAAa,SAIrB/T,KAAKiT,QAAQhD,KAAO,SAAS+D,GAC3B,IAAIC,EAEAhB,EAAU,IAAItJ,SAAQ,SAASC,GACjCjI,EAAM8L,UAAU7D,GAChBqK,EAAWrK,KACVqG,KAAK+D,GAMR,OAJAf,EAAQ1F,OAAS,WACf5L,EAAM0I,YAAY4J,IAGbhB,GAGTY,GAAS,SAAgBnU,EAASE,EAAQC,GACpC8B,EAAMuO,SAKVvO,EAAMuO,OAAS,IAAI5G,EAAc5J,EAASE,EAAQC,GAClDiU,EAAenS,EAAMuO,YAOzB0D,GAAYza,UAAU4W,iBAAmB,WACvC,GAAI/P,KAAKkQ,OACP,MAAMlQ,KAAKkQ,QAQf0D,GAAYza,UAAUsU,UAAY,SAAmByG,GAC/ClU,KAAKkQ,OACPgE,EAASlU,KAAKkQ,QAIZlQ,KAAK+T,WACP/T,KAAK+T,WAAWvU,KAAK0U,GAErBlU,KAAK+T,WAAa,CAACG,IAQvBN,GAAYza,UAAUkR,YAAc,SAAqB6J,GACvD,GAAKlU,KAAK+T,WAAV,CAGA,IAAIzQ,EAAQtD,KAAK+T,WAAWrV,QAAQwV,IACrB,IAAX5Q,GACFtD,KAAK+T,WAAWI,OAAO7Q,EAAO,KAQlCsQ,GAAYrR,OAAS,WACnB,IAAIgL,EAIJ,MAAO,CACL5L,MAJU,IAAIiS,IAAY,SAAkBQ,GAC5C7G,EAAS6G,KAIT7G,OAAQA,IAIZ,IAAA8G,GAAiBT,GCpFjB,IAAIU,GAnBJ,SAASC,EAAeC,GACtB,IAAI5E,EAAU,IAAI2C,GAAMiC,GACpBC,EAAW7b,EAAK2Z,GAAMpZ,UAAU0G,QAAS+P,GAa7C,OAVAnU,EAAMuB,OAAOyX,EAAUlC,GAAMpZ,UAAWyW,GAGxCnU,EAAMuB,OAAOyX,EAAU7E,GAGvB6E,EAASpb,OAAS,SAAgBmZ,GAChC,OAAO+B,EAAepE,GAAYqE,EAAehC,KAG5CiC,EAIGF,CAAexG,IAG3BuG,GAAM/B,MAAQA,GAGd+B,GAAMhL,cAAgB2E,EACtBqG,GAAMV,YAAcc,GACpBJ,GAAMzE,SAAW8E,GACjBL,GAAMjD,QAAUuD,GAChBN,GAAMrQ,WAAa4Q,EAGnBP,GAAM7U,WAAaqV,EAGnBR,GAAMS,OAAST,GAAMhL,cAGrBgL,GAAMU,IAAM,SAAaC,GACvB,OAAOtL,QAAQqL,IAAIC,IAErBX,GAAMY,OCjCW,SAAgBC,GAC/B,OAAO,SAAcvW,GACnB,OAAOuW,EAASpc,MAAM,KAAM6F,KDkChC0V,GAAMc,aEhDW,SAAsBC,GACrC,OAAO5Z,EAAMtB,SAASkb,KAAsC,IAAzBA,EAAQD,cFiD7Cd,GAAMgB,WAAa,SAAShc,GAC1B,OAAOgV,EAAe7S,EAAMF,WAAWjC,GAAS,IAAIwC,SAASxC,GAASA,IAG1D,IAAAic,GAAGjB,GAGjBkB,GAAyBlB"} \ No newline at end of file diff --git a/node_modules/axios/dist/esm/axios.js b/node_modules/axios/dist/esm/axios.js new file mode 100644 index 0000000..60a6c99 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.js @@ -0,0 +1,2369 @@ +// axios v0.28.1 Copyright (c) 2024 Matt Zabriskie +var bind = function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +}; + +// utils is a library of generic helper functions non-specific to axios + +var toString = Object.prototype.toString; + +// eslint-disable-next-line func-names +var kindOf = (function(cache) { + // eslint-disable-next-line func-names + return function(thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; +})(Object.create(null)); + +function kindOfTest(type) { + type = type.toLowerCase(); + return function isKindOf(thing) { + return kindOf(thing) === type; + }; +} + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ +function isArray(val) { + return Array.isArray(val); +} + +/** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ +function isUndefined(val) { + return typeof val === 'undefined'; +} + +/** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +var isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ +function isString(val) { + return typeof val === 'string'; +} + +/** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ +function isNumber(val) { + return typeof val === 'number'; +} + +/** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ +function isObject(val) { + return val !== null && typeof val === 'object'; +} + +/** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ +function isPlainObject(val) { + if (kindOf(val) !== 'object') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; +} + +/** + * Determine if a value is a empty Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a empty Object, otherwise false + */ +function isEmptyObject(val) { + return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; +} + +/** + * Determine if a value is a Date + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ +var isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ +var isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +function isFunction(val) { + return toString.call(val) === '[object Function]'; +} + +/** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ +function isStream(val) { + return isObject(val) && isFunction(val.pipe); +} + +/** + * Determine if a value is a FormData + * + * @param {Object} thing The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ +function isFormData(thing) { + var pattern = '[object FormData]'; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || + toString.call(thing) === pattern || + (isFunction(thing.toString) && thing.toString() === pattern) + ); +} + +/** + * Determine if a value is a URLSearchParams object + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +var isURLSearchParams = kindOfTest('URLSearchParams'); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ +function trim(str) { + return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); +} + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ +function isStandardBrowserEnv() { + var product; + if (typeof navigator !== 'undefined' && ( + (product = navigator.product) === 'ReactNative' || + product === 'NativeScript' || + product === 'NS') + ) { + return false; + } + + return typeof window !== 'undefined' && typeof document !== 'undefined'; +} + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ +function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } +} + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ +function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; +} + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ +function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + */ + +function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + props && Object.assign(constructor.prototype, props); +} + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * @returns {Object} + */ + +function toFlatObject(sourceObj, destObj, filter, propFilter) { + var props; + var i; + var prop; + var merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && Object.getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +} + +/* + * determines whether a string ends with the characters of a specified string + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * @returns {boolean} + */ +function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +} + + +/** + * Returns new array from array like object or null if failed + * @param {*} [thing] + * @returns {?Array} + */ +function toArray(thing) { + if (!thing) return null; + if (isArray(thing)) return thing; + var i = thing.length; + if (!isNumber(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +} + +// eslint-disable-next-line func-names +var isTypedArray = (function(TypedArray) { + // eslint-disable-next-line func-names + return function(thing) { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array)); + +function forEachEntry(obj, fn) { + var generator = obj && obj[Symbol.iterator]; + + var iterator = generator.call(obj); + + var result; + + while ((result = iterator.next()) && !result.done) { + var pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +} + +function matchAll(regExp, str) { + var matches; + var arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +} + +var isHTMLForm = kindOfTest('HTMLFormElement'); + +var hasOwnProperty = (function resolver(_hasOwnProperty) { + return function(obj, prop) { + return _hasOwnProperty.call(obj, prop); + }; +})(Object.prototype.hasOwnProperty); + +var utils = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isPlainObject: isPlainObject, + isEmptyObject: isEmptyObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + isTypedArray: isTypedArray, + isFileList: isFileList, + forEachEntry: forEachEntry, + matchAll: matchAll, + isHTMLForm: isHTMLForm, + hasOwnProperty: hasOwnProperty +}; + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + response && (this.response = response); +} + +utils.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code, + status: this.response && this.response.status ? this.response.status : null + }; + } +}); + +var prototype$1 = AxiosError.prototype; +var descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' +// eslint-disable-next-line func-names +].forEach(function(code) { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = function(error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype$1); + + utils.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +var AxiosError_1 = AxiosError; + +/* eslint-env browser */ +var browser$1 = typeof self == 'object' ? self.FormData : window.FormData; + +// eslint-disable-next-line strict +var FormData$1 = browser$1; + +function isVisitable(thing) { + return utils.isPlainObject(thing) || utils.isArray(thing); +} + +function removeBrackets(key) { + return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +function isFlatArray(arr) { + return utils.isArray(arr) && !arr.some(isVisitable); +} + +var predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +function isSpecCompliant(thing) { + return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]; +} + +/** + * Convert a data object to FormData + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * @returns {Object} + **/ + +function toFormData(obj, formData, options) { + if (!utils.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData$1 || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils.isUndefined(source[option]); + }); + + var metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + var visitor = options.visitor || defaultVisitor; + var dots = options.dots; + var indexes = options.indexes; + var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + var useBlob = _Blob && isSpecCompliant(formData); + + if (!utils.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils.isBlob(value)) { + throw new AxiosError_1('Blob is not supported. Use a Buffer instead.'); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + var arr = value; + + if (value && !path && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils.isArray(value) && isFlatArray(value)) || + (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !utils.isUndefined(el) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + var stack = []; + + var exposedHelpers = Object.assign(predicates, { + defaultVisitor: defaultVisitor, + convertValue: convertValue, + isVisitable: isVisitable + }); + + function build(value, path) { + if (utils.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils.forEach(value, function each(el, key) { + var result = !utils.isUndefined(el) && visitor.call( + formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +var toFormData_1 = toFormData; + +function encode$1(str) { + var charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'\(\)~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData_1(params, this, options); +} + +var prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + var _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +var AxiosURLSearchParams_1 = AxiosURLSearchParams; + +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?object} options + * @returns {string} The formatted url + */ +var buildURL = function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var hashmarkIndex = url.indexOf('#'); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + var _encode = options && options.encode || encode; + + var serializeFn = options && options.serialize; + + var serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams_1(params, options).toString(_encode); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +}; + +function InterceptorManager() { + this.handlers = []; +} + +/** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ +InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; +}; + +/** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ +InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } +}; + +/** + * Clear all interceptors from the stack + */ +InterceptorManager.prototype.clear = function clear() { + if (this.handlers) { + this.handlers = []; + } +}; + +/** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ +InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); +}; + +var InterceptorManager_1 = InterceptorManager; + +var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); +}; + +var transitional = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; + +var URLSearchParams_1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams_1; + +var FormData_1 = FormData; + +var browser = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams_1, + FormData: FormData_1, + Blob: Blob + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; + +var platform = browser; + +var toURLEncodedForm = function toURLEncodedForm(data, options) { + return toFormData_1(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); +}; + +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils.matchAll(/\w+|\[(\w*)]/g, name).map(function(match) { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +function arrayToObject(arr) { + var obj = {}; + var keys = Object.keys(arr); + var i; + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + var name = path[index++]; + var isNumericKey = Number.isFinite(+name); + var isLast = index >= path.length; + name = !name && utils.isArray(target) ? target.length : name; + + if (isLast) { + if (utils.hasOwnProperty(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils.isObject(target[name])) { + target[name] = []; + } + + var result = buildPath(path, value, target[name], index); + + if (result && utils.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { + var obj = {}; + + utils.forEachEntry(formData, function(name, value) { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +var formDataToJSON_1 = formDataToJSON; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ +var settle = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError_1( + 'Request failed with status code ' + response.status, + [AxiosError_1.ERR_BAD_REQUEST, AxiosError_1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +}; + +var cookies = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() +); + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +var isAbsoluteURL = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +}; + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ +var combineURLs = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +}; + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ +var buildFullPath = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +}; + +// Headers whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]; + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ +var parseHeaders = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.slice(0, i)).toLowerCase(); + val = utils.trim(line.slice(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; +}; + +var isURLSameOrigin = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() +); + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + */ +function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError_1.call(this, message == null ? 'canceled' : message, AxiosError_1.ERR_CANCELED, config, request); + this.name = 'CanceledError'; +} + +utils.inherits(CanceledError, AxiosError_1, { + __CANCEL__: true +}); + +var CanceledError_1 = CanceledError; + +var parseProtocol = function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +}; + +var xhr = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + var responseType = config.responseType; + var withXSRFToken = config.withXSRFToken; + var onCanceled; + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled); + } + + if (config.signal) { + config.signal.removeEventListener('abort', onCanceled); + } + } + + if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError_1('Request aborted', AxiosError_1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError_1('Network Error', AxiosError_1.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional$1 = config.transitional || transitional; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError_1( + timeoutErrorMessage, + transitional$1.clarifyTimeoutError ? AxiosError_1.ETIMEDOUT : AxiosError_1.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)); + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) { + // Add xsrf header + var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName); + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = config.responseType; + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function(cancel) { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError_1(null, config, request) : cancel); + request.abort(); + request = null; + }; + + config.cancelToken && config.cancelToken.subscribe(onCanceled); + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + } + } + + // false, 0 (zero number), and '' (empty string) are valid JSON values + if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') { + requestData = null; + } + + var protocol = parseProtocol(fullPath); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError_1('Unsupported protocol ' + protocol + ':', AxiosError_1.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData); + }); +}; + +var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' +}; + +function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } +} + +function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = xhr; + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = xhr; + } + return adapter; +} + +function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +var defaults = { + + transitional: transitional, + + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + + var contentType = headers && headers['Content-Type'] || ''; + var hasJSONContentType = contentType.indexOf('application/json') > -1; + var isObjectPayload = utils.isObject(data); + + if (isObjectPayload && utils.isHTMLForm(data)) { + data = new FormData(data); + } + + var isFormData = utils.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON_1(data)) : data; + } + + if (utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + + var isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + var _FormData = this.env && this.env.FormData; + + return toFormData_1( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + setContentTypeIfUnset(headers, 'application/json'); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var JSONRequested = this.responseType === 'json'; + + if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError_1.from(e, AxiosError_1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + } + } +}; + +utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); +}); + +var defaults_1 = defaults; + +/** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Number} status HTTP status code + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ +var transformData = function transformData(data, headers, status, fns) { + var context = this || defaults_1; + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn.call(context, data, headers, status); + }); + + return data; +}; + +var isCancel = function isCancel(value) { + return !!(value && value.__CANCEL__); +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError_1(); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ +var dispatchRequest = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData.call( + config, + config.data, + config.headers, + null, + config.transformRequest + ); + + normalizeHeaderName(config.headers, 'Accept'); + normalizeHeaderName(config.headers, 'Content-Type'); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults_1.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + response.data, + response.headers, + response.status, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + reason.response.data, + reason.response.headers, + reason.response.status, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); +}; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ +var mergeConfig = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isEmptyObject(source)) { + return utils.merge({}, target); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(prop) { + if (prop in config2) { + return getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + return getMergedValue(undefined, config1[prop]); + } + } + + var mergeMap = { + 'url': valueFromConfig2, + 'method': valueFromConfig2, + 'data': valueFromConfig2, + 'baseURL': defaultToConfig2, + 'transformRequest': defaultToConfig2, + 'transformResponse': defaultToConfig2, + 'paramsSerializer': defaultToConfig2, + 'timeout': defaultToConfig2, + 'timeoutMessage': defaultToConfig2, + 'withCredentials': defaultToConfig2, + 'withXSRFToken': defaultToConfig2, + 'adapter': defaultToConfig2, + 'responseType': defaultToConfig2, + 'xsrfCookieName': defaultToConfig2, + 'xsrfHeaderName': defaultToConfig2, + 'onUploadProgress': defaultToConfig2, + 'onDownloadProgress': defaultToConfig2, + 'decompress': defaultToConfig2, + 'maxContentLength': defaultToConfig2, + 'maxBodyLength': defaultToConfig2, + 'beforeRedirect': defaultToConfig2, + 'transport': defaultToConfig2, + 'httpAgent': defaultToConfig2, + 'httpsAgent': defaultToConfig2, + 'cancelToken': defaultToConfig2, + 'socketPath': defaultToConfig2, + 'responseEncoding': defaultToConfig2, + 'validateStatus': mergeDirectKeys + }; + + utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties; + var configValue = merge(prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +}; + +var data = { + "version": "0.28.1" +}; + +var VERSION = data.version; + + +var validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +var deprecatedWarnings = {}; + +/** + * Transitional option validator + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function(value, opt, opts) { + if (validator === false) { + throw new AxiosError_1( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError_1.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +/** + * Assert object's properties type + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError_1('options must be an object', AxiosError_1.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError_1('option ' + opt + ' must be ' + result, AxiosError_1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError_1('Unknown option ' + opt, AxiosError_1.ERR_BAD_OPTION); + } + } +} + +var validator = { + assertOptions: assertOptions, + validators: validators$1 +}; + +var validators = validator.validators; +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ +function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager_1(), + response: new InterceptorManager_1() + }; +} + +/** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + */ +Axios.prototype.request = function request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + var transitional = config.transitional; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + var paramsSerializer = config.paramsSerializer; + + if (paramsSerializer !== undefined) { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + + utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer}); + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + var promise; + + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest, undefined]; + + Array.prototype.unshift.apply(chain, requestInterceptorChain); + chain = chain.concat(responseInterceptorChain); + + promise = Promise.resolve(config); + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + } + + + var newConfig = config; + while (requestInterceptorChain.length) { + var onFulfilled = requestInterceptorChain.shift(); + var onRejected = requestInterceptorChain.shift(); + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected(error); + break; + } + } + + try { + promise = dispatchRequest(newConfig); + } catch (error) { + return Promise.reject(error); + } + + while (responseInterceptorChain.length) { + promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); + } + + return promise; +}; + +Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url); + return buildURL(fullPath, config.params, config.paramsSerializer); +}; + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +var Axios_1 = Axios; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ +function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function(cancel) { + if (!token._listeners) return; + + var i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function(onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function(resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError_1(message, config, request); + resolvePromise(token.reason); + }); +} + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } +}; + +/** + * Subscribe to the cancel signal + */ + +CancelToken.prototype.subscribe = function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } +}; + +/** + * Unsubscribe from the cancel signal + */ + +CancelToken.prototype.unsubscribe = function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } +}; + +/** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ +CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; +}; + +var CancelToken_1 = CancelToken; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ +var spread = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +}; + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +var isAxiosError = function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); +}; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + var context = new Axios_1(defaultConfig); + var instance = bind(Axios_1.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios_1.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +var axios = createInstance(defaults_1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios_1; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError_1; +axios.CancelToken = CancelToken_1; +axios.isCancel = isCancel; +axios.VERSION = data.version; +axios.toFormData = toFormData_1; + +// Expose AxiosError class +axios.AxiosError = AxiosError_1; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +axios.formToJSON = function(thing) { + return formDataToJSON_1(utils.isHTMLForm(thing) ? new FormData(thing) : thing); +}; + +var axios_1 = axios; + +// Allow use of default import syntax in TypeScript +var _default = axios; +axios_1.default = _default; + +export { axios_1 as default }; +//# sourceMappingURL=axios.js.map diff --git a/node_modules/axios/dist/esm/axios.js.map b/node_modules/axios/dist/esm/axios.js.map new file mode 100644 index 0000000..d9bfa36 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.js","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../node_modules/form-data/lib/browser.js","../../lib/env/classes/FormData.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/helpers/normalizeHeaderName.js","../../lib/defaults/transitional.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/index.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/core/settle.js","../../lib/helpers/cookies.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/helpers/parseHeaders.js","../../lib/helpers/isURLSameOrigin.js","../../lib/cancel/CanceledError.js","../../lib/helpers/parseProtocol.js","../../lib/adapters/xhr.js","../../lib/defaults/index.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/core/dispatchRequest.js","../../lib/core/mergeConfig.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/axios.js"],"sourcesContent":["'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n return fn.apply(thisArg, arguments);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar bind = require('./helpers/bind');\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n// eslint-disable-next-line func-names\r\nvar kindOf = (function(cache) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n var str = toString.call(thing);\r\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\r\n };\r\n})(Object.create(null));\r\n\r\nfunction kindOfTest(type) {\r\n type = type.toLowerCase();\r\n return function isKindOf(thing) {\r\n return kindOf(thing) === type;\r\n };\r\n}\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return Array.isArray(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Buffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Buffer, otherwise false\r\n */\r\nfunction isBuffer(val) {\r\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\r\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\r\n\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a plain Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a plain Object, otherwise false\r\n */\r\nfunction isPlainObject(val) {\r\n if (kindOf(val) !== 'object') {\r\n return false;\r\n }\r\n\r\n var prototype = Object.getPrototypeOf(val);\r\n return prototype === null || prototype === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a empty Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a empty Object, otherwise false\r\n */\r\nfunction isEmptyObject(val) {\r\n return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nvar isDate = kindOfTest('Date');\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFile = kindOfTest('File');\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nvar isBlob = kindOfTest('Blob');\r\n\r\n/**\r\n * Determine if a value is a FileList\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFileList = kindOfTest('FileList');\r\n\r\n/**\r\n * Determine if a value is a Function\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Function, otherwise false\r\n */\r\nfunction isFunction(val) {\r\n return toString.call(val) === '[object Function]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Stream\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Stream, otherwise false\r\n */\r\nfunction isStream(val) {\r\n return isObject(val) && isFunction(val.pipe);\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} thing The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(thing) {\r\n var pattern = '[object FormData]';\r\n return thing && (\r\n (typeof FormData === 'function' && thing instanceof FormData) ||\r\n toString.call(thing) === pattern ||\r\n (isFunction(thing.toString) && thing.toString() === pattern)\r\n );\r\n}\r\n\r\n/**\r\n * Determine if a value is a URLSearchParams object\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\r\n */\r\nvar isURLSearchParams = kindOfTest('URLSearchParams');\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * navigator.product -> 'ReactNative'\r\n * nativescript\r\n * navigator.product -> 'NativeScript' or 'NS'\r\n */\r\nfunction isStandardBrowserEnv() {\r\n var product;\r\n if (typeof navigator !== 'undefined' && (\r\n (product = navigator.product) === 'ReactNative' ||\r\n product === 'NativeScript' ||\r\n product === 'NS')\r\n ) {\r\n return false;\r\n }\r\n\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object') {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (isPlainObject(result[key]) && isPlainObject(val)) {\r\n result[key] = merge(result[key], val);\r\n } else if (isPlainObject(val)) {\r\n result[key] = merge({}, val);\r\n } else if (isArray(val)) {\r\n result[key] = val.slice();\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Extends object a by mutably adding to it the properties of object b.\r\n *\r\n * @param {Object} a The object to be extended\r\n * @param {Object} b The object to copy properties from\r\n * @param {Object} thisArg The object to bind function to\r\n * @return {Object} The resulting value of object a\r\n */\r\nfunction extend(a, b, thisArg) {\r\n forEach(b, function assignValue(val, key) {\r\n if (thisArg && typeof val === 'function') {\r\n a[key] = bind(val, thisArg);\r\n } else {\r\n a[key] = val;\r\n }\r\n });\r\n return a;\r\n}\r\n\r\n/**\r\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\r\n *\r\n * @param {string} content with BOM\r\n * @return {string} content value without BOM\r\n */\r\nfunction stripBOM(content) {\r\n if (content.charCodeAt(0) === 0xFEFF) {\r\n content = content.slice(1);\r\n }\r\n return content;\r\n}\r\n\r\n/**\r\n * Inherit the prototype methods from one constructor into another\r\n * @param {function} constructor\r\n * @param {function} superConstructor\r\n * @param {object} [props]\r\n * @param {object} [descriptors]\r\n */\r\n\r\nfunction inherits(constructor, superConstructor, props, descriptors) {\r\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\r\n constructor.prototype.constructor = constructor;\r\n props && Object.assign(constructor.prototype, props);\r\n}\r\n\r\n/**\r\n * Resolve object with deep prototype chain to a flat object\r\n * @param {Object} sourceObj source object\r\n * @param {Object} [destObj]\r\n * @param {Function|Boolean} [filter]\r\n * @param {Function} [propFilter]\r\n * @returns {Object}\r\n */\r\n\r\nfunction toFlatObject(sourceObj, destObj, filter, propFilter) {\r\n var props;\r\n var i;\r\n var prop;\r\n var merged = {};\r\n\r\n destObj = destObj || {};\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n if (sourceObj == null) return destObj;\r\n\r\n do {\r\n props = Object.getOwnPropertyNames(sourceObj);\r\n i = props.length;\r\n while (i-- > 0) {\r\n prop = props[i];\r\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\r\n destObj[prop] = sourceObj[prop];\r\n merged[prop] = true;\r\n }\r\n }\r\n sourceObj = filter !== false && Object.getPrototypeOf(sourceObj);\r\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\r\n\r\n return destObj;\r\n}\r\n\r\n/*\r\n * determines whether a string ends with the characters of a specified string\r\n * @param {String} str\r\n * @param {String} searchString\r\n * @param {Number} [position= 0]\r\n * @returns {boolean}\r\n */\r\nfunction endsWith(str, searchString, position) {\r\n str = String(str);\r\n if (position === undefined || position > str.length) {\r\n position = str.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = str.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n}\r\n\r\n\r\n/**\r\n * Returns new array from array like object or null if failed\r\n * @param {*} [thing]\r\n * @returns {?Array}\r\n */\r\nfunction toArray(thing) {\r\n if (!thing) return null;\r\n if (isArray(thing)) return thing;\r\n var i = thing.length;\r\n if (!isNumber(i)) return null;\r\n var arr = new Array(i);\r\n while (i-- > 0) {\r\n arr[i] = thing[i];\r\n }\r\n return arr;\r\n}\r\n\r\n// eslint-disable-next-line func-names\r\nvar isTypedArray = (function(TypedArray) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n return TypedArray && thing instanceof TypedArray;\r\n };\r\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\r\n\r\nfunction forEachEntry(obj, fn) {\r\n var generator = obj && obj[Symbol.iterator];\r\n\r\n var iterator = generator.call(obj);\r\n\r\n var result;\r\n\r\n while ((result = iterator.next()) && !result.done) {\r\n var pair = result.value;\r\n fn.call(obj, pair[0], pair[1]);\r\n }\r\n}\r\n\r\nfunction matchAll(regExp, str) {\r\n var matches;\r\n var arr = [];\r\n\r\n while ((matches = regExp.exec(str)) !== null) {\r\n arr.push(matches);\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nvar isHTMLForm = kindOfTest('HTMLFormElement');\r\n\r\nvar hasOwnProperty = (function resolver(_hasOwnProperty) {\r\n return function(obj, prop) {\r\n return _hasOwnProperty.call(obj, prop);\r\n };\r\n})(Object.prototype.hasOwnProperty);\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isBuffer: isBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isPlainObject: isPlainObject,\r\n isEmptyObject: isEmptyObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isFunction: isFunction,\r\n isStream: isStream,\r\n isURLSearchParams: isURLSearchParams,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n extend: extend,\r\n trim: trim,\r\n stripBOM: stripBOM,\r\n inherits: inherits,\r\n toFlatObject: toFlatObject,\r\n kindOf: kindOf,\r\n kindOfTest: kindOfTest,\r\n endsWith: endsWith,\r\n toArray: toArray,\r\n isTypedArray: isTypedArray,\r\n isFileList: isFileList,\r\n forEachEntry: forEachEntry,\r\n matchAll: matchAll,\r\n isHTMLForm: isHTMLForm,\r\n hasOwnProperty: hasOwnProperty\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Create an Error with the specified message, config, error code, request and response.\r\n *\r\n * @param {string} message The error message.\r\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\r\n * @param {Object} [config] The config.\r\n * @param {Object} [request] The request.\r\n * @param {Object} [response] The response.\r\n * @returns {Error} The created error.\r\n */\r\nfunction AxiosError(message, code, config, request, response) {\r\n Error.call(this);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error()).stack;\r\n }\r\n\r\n this.message = message;\r\n this.name = 'AxiosError';\r\n code && (this.code = code);\r\n config && (this.config = config);\r\n request && (this.request = request);\r\n response && (this.response = response);\r\n}\r\n\r\nutils.inherits(AxiosError, Error, {\r\n toJSON: function toJSON() {\r\n return {\r\n // Standard\r\n message: this.message,\r\n name: this.name,\r\n // Microsoft\r\n description: this.description,\r\n number: this.number,\r\n // Mozilla\r\n fileName: this.fileName,\r\n lineNumber: this.lineNumber,\r\n columnNumber: this.columnNumber,\r\n stack: this.stack,\r\n // Axios\r\n config: this.config,\r\n code: this.code,\r\n status: this.response && this.response.status ? this.response.status : null\r\n };\r\n }\r\n});\r\n\r\nvar prototype = AxiosError.prototype;\r\nvar descriptors = {};\r\n\r\n[\r\n 'ERR_BAD_OPTION_VALUE',\r\n 'ERR_BAD_OPTION',\r\n 'ECONNABORTED',\r\n 'ETIMEDOUT',\r\n 'ERR_NETWORK',\r\n 'ERR_FR_TOO_MANY_REDIRECTS',\r\n 'ERR_DEPRECATED',\r\n 'ERR_BAD_RESPONSE',\r\n 'ERR_BAD_REQUEST',\r\n 'ERR_CANCELED',\r\n 'ERR_NOT_SUPPORT',\r\n 'ERR_INVALID_URL'\r\n// eslint-disable-next-line func-names\r\n].forEach(function(code) {\r\n descriptors[code] = {value: code};\r\n});\r\n\r\nObject.defineProperties(AxiosError, descriptors);\r\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\r\n\r\n// eslint-disable-next-line func-names\r\nAxiosError.from = function(error, code, config, request, response, customProps) {\r\n var axiosError = Object.create(prototype);\r\n\r\n utils.toFlatObject(error, axiosError, function filter(obj) {\r\n return obj !== Error.prototype;\r\n });\r\n\r\n AxiosError.call(axiosError, error.message, code, config, request, response);\r\n\r\n axiosError.cause = error;\r\n\r\n axiosError.name = error.name;\r\n\r\n customProps && Object.assign(axiosError, customProps);\r\n\r\n return axiosError;\r\n};\r\n\r\nmodule.exports = AxiosError;\r\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","// eslint-disable-next-line strict\r\nmodule.exports = require('form-data');\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar envFormData = require('../env/classes/FormData');\r\n\r\nfunction isVisitable(thing) {\r\n return utils.isPlainObject(thing) || utils.isArray(thing);\r\n}\r\n\r\nfunction removeBrackets(key) {\r\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\r\n}\r\n\r\nfunction renderKey(path, key, dots) {\r\n if (!path) return key;\r\n return path.concat(key).map(function each(token, i) {\r\n // eslint-disable-next-line no-param-reassign\r\n token = removeBrackets(token);\r\n return !dots && i ? '[' + token + ']' : token;\r\n }).join(dots ? '.' : '');\r\n}\r\n\r\nfunction isFlatArray(arr) {\r\n return utils.isArray(arr) && !arr.some(isVisitable);\r\n}\r\n\r\nvar predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\r\n return /^is[A-Z]/.test(prop);\r\n});\r\n\r\nfunction isSpecCompliant(thing) {\r\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\r\n}\r\n\r\n/**\r\n * Convert a data object to FormData\r\n * @param {Object} obj\r\n * @param {?Object} [formData]\r\n * @param {?Object} [options]\r\n * @param {Function} [options.visitor]\r\n * @param {Boolean} [options.metaTokens = true]\r\n * @param {Boolean} [options.dots = false]\r\n * @param {?Boolean} [options.indexes = false]\r\n * @returns {Object}\r\n **/\r\n\r\nfunction toFormData(obj, formData, options) {\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('target must be an object');\r\n }\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n formData = formData || new (envFormData || FormData)();\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n options = utils.toFlatObject(options, {\r\n metaTokens: true,\r\n dots: false,\r\n indexes: false\r\n }, false, function defined(option, source) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n return !utils.isUndefined(source[option]);\r\n });\r\n\r\n var metaTokens = options.metaTokens;\r\n // eslint-disable-next-line no-use-before-define\r\n var visitor = options.visitor || defaultVisitor;\r\n var dots = options.dots;\r\n var indexes = options.indexes;\r\n var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\r\n var useBlob = _Blob && isSpecCompliant(formData);\r\n\r\n if (!utils.isFunction(visitor)) {\r\n throw new TypeError('visitor must be a function');\r\n }\r\n\r\n function convertValue(value) {\r\n if (value === null) return '';\r\n\r\n if (utils.isDate(value)) {\r\n return value.toISOString();\r\n }\r\n\r\n if (!useBlob && utils.isBlob(value)) {\r\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\r\n }\r\n\r\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\r\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n *\r\n * @param {*} value\r\n * @param {String|Number} key\r\n * @param {Array} path\r\n * @this {FormData}\r\n * @returns {boolean} return true to visit the each prop of the value recursively\r\n */\r\n function defaultVisitor(value, key, path) {\r\n var arr = value;\r\n\r\n if (value && !path && typeof value === 'object') {\r\n if (utils.endsWith(key, '{}')) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = metaTokens ? key : key.slice(0, -2);\r\n // eslint-disable-next-line no-param-reassign\r\n value = JSON.stringify(value);\r\n } else if (\r\n (utils.isArray(value) && isFlatArray(value)) ||\r\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\r\n )) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = removeBrackets(key);\r\n\r\n arr.forEach(function each(el, index) {\r\n !utils.isUndefined(el) && formData.append(\r\n // eslint-disable-next-line no-nested-ternary\r\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\r\n convertValue(el)\r\n );\r\n });\r\n return false;\r\n }\r\n }\r\n\r\n if (isVisitable(value)) {\r\n return true;\r\n }\r\n\r\n formData.append(renderKey(path, key, dots), convertValue(value));\r\n\r\n return false;\r\n }\r\n\r\n var stack = [];\r\n\r\n var exposedHelpers = Object.assign(predicates, {\r\n defaultVisitor: defaultVisitor,\r\n convertValue: convertValue,\r\n isVisitable: isVisitable\r\n });\r\n\r\n function build(value, path) {\r\n if (utils.isUndefined(value)) return;\r\n\r\n if (stack.indexOf(value) !== -1) {\r\n throw Error('Circular reference detected in ' + path.join('.'));\r\n }\r\n\r\n stack.push(value);\r\n\r\n utils.forEach(value, function each(el, key) {\r\n var result = !utils.isUndefined(el) && visitor.call(\r\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\r\n );\r\n\r\n if (result === true) {\r\n build(el, path ? path.concat(key) : [key]);\r\n }\r\n });\r\n\r\n stack.pop();\r\n }\r\n\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('data must be an object');\r\n }\r\n\r\n build(obj);\r\n\r\n return formData;\r\n}\r\n\r\nmodule.exports = toFormData;\r\n","'use strict';\r\n\r\nvar toFormData = require('./toFormData');\r\n\r\nfunction encode(str) {\r\n var charMap = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+',\r\n '%00': '\\x00'\r\n };\r\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function replacer(match) {\r\n return charMap[match];\r\n });\r\n}\r\n\r\nfunction AxiosURLSearchParams(params, options) {\r\n this._pairs = [];\r\n\r\n params && toFormData(params, this, options);\r\n}\r\n\r\nvar prototype = AxiosURLSearchParams.prototype;\r\n\r\nprototype.append = function append(name, value) {\r\n this._pairs.push([name, value]);\r\n};\r\n\r\nprototype.toString = function toString(encoder) {\r\n var _encode = encoder ? function(value) {\r\n return encoder.call(this, value, encode);\r\n } : encode;\r\n\r\n return this._pairs.map(function each(pair) {\r\n return _encode(pair[0]) + '=' + _encode(pair[1]);\r\n }, '').join('&');\r\n};\r\n\r\nmodule.exports = AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosURLSearchParams = require('../helpers/AxiosURLSearchParams');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @param {?object} options\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, options) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var hashmarkIndex = url.indexOf('#');\r\n\r\n if (hashmarkIndex !== -1) {\r\n url = url.slice(0, hashmarkIndex);\r\n }\r\n\r\n var _encode = options && options.encode || encode;\r\n\r\n var serializeFn = options && options.serialize;\r\n\r\n var serializedParams;\r\n\r\n if (serializeFn) {\r\n serializedParams = serializeFn(params, options);\r\n } else {\r\n serializedParams = utils.isURLSearchParams(params) ?\r\n params.toString() :\r\n new AxiosURLSearchParams(params, options).toString(_encode);\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected,\r\n synchronous: options ? options.synchronous : false,\r\n runWhen: options ? options.runWhen : null\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Clear all interceptors from the stack\r\n */\r\nInterceptorManager.prototype.clear = function clear() {\r\n if (this.handlers) {\r\n this.handlers = [];\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\r\n utils.forEach(headers, function processHeader(value, name) {\r\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\r\n headers[normalizedName] = value;\r\n delete headers[name];\r\n }\r\n });\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n silentJSONParsing: true,\r\n forcedJSONParsing: true,\r\n clarifyTimeoutError: false\r\n};\r\n","'use strict';\r\n\r\nvar AxiosURLSearchParams = require('../../../helpers/AxiosURLSearchParams');\r\n\r\nmodule.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nmodule.exports = FormData;\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n isBrowser: true,\r\n classes: {\r\n URLSearchParams: require('./classes/URLSearchParams'),\r\n FormData: require('./classes/FormData'),\r\n Blob: Blob\r\n },\r\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = require('./node/');\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar toFormData = require('./toFormData');\r\nvar platform = require('../platform/');\r\n\r\nmodule.exports = function toURLEncodedForm(data, options) {\r\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\r\n visitor: function(value, key, path, helpers) {\r\n if (platform.isNode && utils.isBuffer(value)) {\r\n this.append(key, value.toString('base64'));\r\n return false;\r\n }\r\n\r\n return helpers.defaultVisitor.apply(this, arguments);\r\n }\r\n }, options));\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nfunction parsePropPath(name) {\r\n // foo[x][y][z]\r\n // foo.x.y.z\r\n // foo-x-y-z\r\n // foo x y z\r\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(function(match) {\r\n return match[0] === '[]' ? '' : match[1] || match[0];\r\n });\r\n}\r\n\r\nfunction arrayToObject(arr) {\r\n var obj = {};\r\n var keys = Object.keys(arr);\r\n var i;\r\n var len = keys.length;\r\n var key;\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n obj[key] = arr[key];\r\n }\r\n return obj;\r\n}\r\n\r\nfunction formDataToJSON(formData) {\r\n function buildPath(path, value, target, index) {\r\n var name = path[index++];\r\n var isNumericKey = Number.isFinite(+name);\r\n var isLast = index >= path.length;\r\n name = !name && utils.isArray(target) ? target.length : name;\r\n\r\n if (isLast) {\r\n if (utils.hasOwnProperty(target, name)) {\r\n target[name] = [target[name], value];\r\n } else {\r\n target[name] = value;\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (!target[name] || !utils.isObject(target[name])) {\r\n target[name] = [];\r\n }\r\n\r\n var result = buildPath(path, value, target[name], index);\r\n\r\n if (result && utils.isArray(target[name])) {\r\n target[name] = arrayToObject(target[name]);\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\r\n var obj = {};\r\n\r\n utils.forEachEntry(formData, function(name, value) {\r\n buildPath(parsePropPath(name), value, obj, 0);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nmodule.exports = formDataToJSON;\r\n","'use strict';\r\n\r\nvar AxiosError = require('./AxiosError');\r\n\r\n/**\r\n * Resolve or reject a Promise based on response status.\r\n *\r\n * @param {Function} resolve A function that resolves the promise.\r\n * @param {Function} reject A function that rejects the promise.\r\n * @param {object} response The response.\r\n */\r\nmodule.exports = function settle(resolve, reject, response) {\r\n var validateStatus = response.config.validateStatus;\r\n if (!response.status || !validateStatus || validateStatus(response.status)) {\r\n resolve(response);\r\n } else {\r\n reject(new AxiosError(\r\n 'Request failed with status code ' + response.status,\r\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\r\n response.config,\r\n response.request,\r\n response\r\n ));\r\n }\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return relativeURL\r\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\r\n : baseURL;\r\n};\r\n","'use strict';\r\n\r\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\r\nvar combineURLs = require('../helpers/combineURLs');\r\n\r\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n * @returns {string} The combined full path\r\n */\r\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\r\n if (baseURL && !isAbsoluteURL(requestedURL)) {\r\n return combineURLs(baseURL, requestedURL);\r\n }\r\n return requestedURL;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n// Headers whose duplicates are ignored by node\r\n// c.f. https://nodejs.org/api/http.html#http_message_headers\r\nvar ignoreDuplicateOf = [\r\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\r\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\r\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\r\n 'referer', 'retry-after', 'user-agent'\r\n];\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.slice(0, i)).toLowerCase();\r\n val = utils.trim(line.slice(i + 1));\r\n\r\n if (key) {\r\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\r\n return;\r\n }\r\n if (key === 'set-cookie') {\r\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\r\n } else {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar AxiosError = require('../core/AxiosError');\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * A `CanceledError` is an object that is thrown when an operation is canceled.\r\n *\r\n * @class\r\n * @param {string=} message The message.\r\n * @param {Object=} config The config.\r\n * @param {Object=} request The request.\r\n */\r\nfunction CanceledError(message, config, request) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\r\n this.name = 'CanceledError';\r\n}\r\n\r\nutils.inherits(CanceledError, AxiosError, {\r\n __CANCEL__: true\r\n});\r\n\r\nmodule.exports = CanceledError;\r\n","'use strict';\r\n\r\nmodule.exports = function parseProtocol(url) {\r\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\r\n return match && match[1] || '';\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar settle = require('./../core/settle');\r\nvar cookies = require('./../helpers/cookies');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar buildFullPath = require('../core/buildFullPath');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar transitionalDefaults = require('../defaults/transitional');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar parseProtocol = require('../helpers/parseProtocol');\r\nvar platform = require('../platform');\r\n\r\nmodule.exports = function xhrAdapter(config) {\r\n return new Promise(function dispatchXhrRequest(resolve, reject) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n var responseType = config.responseType;\r\n var withXSRFToken = config.withXSRFToken;\r\n var onCanceled;\r\n function done() {\r\n if (config.cancelToken) {\r\n config.cancelToken.unsubscribe(onCanceled);\r\n }\r\n\r\n if (config.signal) {\r\n config.signal.removeEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n\r\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n function onloadend() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\r\n request.responseText : request.response;\r\n var response = {\r\n data: responseData,\r\n status: request.status,\r\n statusText: request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n settle(function _resolve(value) {\r\n resolve(value);\r\n done();\r\n }, function _reject(err) {\r\n reject(err);\r\n done();\r\n }, response);\r\n\r\n // Clean up request\r\n request = null;\r\n }\r\n\r\n if ('onloadend' in request) {\r\n // Use onloadend if available\r\n request.onloadend = onloadend;\r\n } else {\r\n // Listen for ready state to emulate onloadend\r\n request.onreadystatechange = function handleLoad() {\r\n if (!request || request.readyState !== 4) {\r\n return;\r\n }\r\n\r\n // The request errored out and we didn't get a response, this will be\r\n // handled by onerror instead\r\n // With one exception: request that using file: protocol, most browsers\r\n // will return status as 0 even though it's a successful request\r\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\r\n return;\r\n }\r\n // readystate handler is calling before onerror or ontimeout handlers,\r\n // so we should call onloadend on the next 'tick'\r\n setTimeout(onloadend);\r\n };\r\n }\r\n\r\n // Handle browser request cancellation (as opposed to a manual cancellation)\r\n request.onabort = function handleAbort() {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle timeout\r\n request.ontimeout = function handleTimeout() {\r\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\r\n var transitional = config.transitional || transitionalDefaults;\r\n if (config.timeoutErrorMessage) {\r\n timeoutErrorMessage = config.timeoutErrorMessage;\r\n }\r\n reject(new AxiosError(\r\n timeoutErrorMessage,\r\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\r\n config,\r\n request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n // Add xsrf header\r\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\r\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\r\n // Add xsrf header\r\n var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (!utils.isUndefined(config.withCredentials)) {\r\n request.withCredentials = !!config.withCredentials;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (responseType && responseType !== 'json') {\r\n request.responseType = config.responseType;\r\n }\r\n\r\n // Handle progress if needed\r\n if (typeof config.onDownloadProgress === 'function') {\r\n request.addEventListener('progress', config.onDownloadProgress);\r\n }\r\n\r\n // Not all browsers support upload events\r\n if (typeof config.onUploadProgress === 'function' && request.upload) {\r\n request.upload.addEventListener('progress', config.onUploadProgress);\r\n }\r\n\r\n if (config.cancelToken || config.signal) {\r\n // Handle cancellation\r\n // eslint-disable-next-line func-names\r\n onCanceled = function(cancel) {\r\n if (!request) {\r\n return;\r\n }\r\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\r\n request.abort();\r\n request = null;\r\n };\r\n\r\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\r\n if (config.signal) {\r\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n // false, 0 (zero number), and '' (empty string) are valid JSON values\r\n if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') {\r\n requestData = null;\r\n }\r\n\r\n var protocol = parseProtocol(fullPath);\r\n\r\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\r\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\r\n return;\r\n }\r\n\r\n\r\n // Send the request\r\n request.send(requestData);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar transitionalDefaults = require('./transitional');\r\nvar toFormData = require('../helpers/toFormData');\r\nvar toURLEncodedForm = require('../helpers/toURLEncodedForm');\r\nvar platform = require('../platform');\r\nvar formDataToJSON = require('../helpers/formDataToJSON');\r\n\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nfunction setContentTypeIfUnset(headers, value) {\r\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = value;\r\n }\r\n}\r\n\r\nfunction getDefaultAdapter() {\r\n var adapter;\r\n if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n return adapter;\r\n}\r\n\r\nfunction stringifySafely(rawValue, parser, encoder) {\r\n if (utils.isString(rawValue)) {\r\n try {\r\n (parser || JSON.parse)(rawValue);\r\n return utils.trim(rawValue);\r\n } catch (e) {\r\n if (e.name !== 'SyntaxError') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return (encoder || JSON.stringify)(rawValue);\r\n}\r\n\r\nvar defaults = {\r\n\r\n transitional: transitionalDefaults,\r\n\r\n adapter: getDefaultAdapter(),\r\n\r\n transformRequest: [function transformRequest(data, headers) {\r\n normalizeHeaderName(headers, 'Accept');\r\n normalizeHeaderName(headers, 'Content-Type');\r\n\r\n var contentType = headers && headers['Content-Type'] || '';\r\n var hasJSONContentType = contentType.indexOf('application/json') > -1;\r\n var isObjectPayload = utils.isObject(data);\r\n\r\n if (isObjectPayload && utils.isHTMLForm(data)) {\r\n data = new FormData(data);\r\n }\r\n\r\n var isFormData = utils.isFormData(data);\r\n\r\n if (isFormData) {\r\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\r\n }\r\n\r\n if (utils.isArrayBuffer(data) ||\r\n utils.isBuffer(data) ||\r\n utils.isStream(data) ||\r\n utils.isFile(data) ||\r\n utils.isBlob(data)\r\n ) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isURLSearchParams(data)) {\r\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\r\n return data.toString();\r\n }\r\n\r\n var isFileList;\r\n\r\n if (isObjectPayload) {\r\n if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {\r\n return toURLEncodedForm(data, this.formSerializer).toString();\r\n }\r\n\r\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\r\n var _FormData = this.env && this.env.FormData;\r\n\r\n return toFormData(\r\n isFileList ? {'files[]': data} : data,\r\n _FormData && new _FormData(),\r\n this.formSerializer\r\n );\r\n }\r\n }\r\n\r\n if (isObjectPayload || hasJSONContentType ) {\r\n setContentTypeIfUnset(headers, 'application/json');\r\n return stringifySafely(data);\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponse(data) {\r\n var transitional = this.transitional || defaults.transitional;\r\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\r\n var JSONRequested = this.responseType === 'json';\r\n\r\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\r\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\r\n var strictJSONParsing = !silentJSONParsing && JSONRequested;\r\n\r\n try {\r\n return JSON.parse(data);\r\n } catch (e) {\r\n if (strictJSONParsing) {\r\n if (e.name === 'SyntaxError') {\r\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\r\n }\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n /**\r\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\r\n * timeout is not created.\r\n */\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN',\r\n\r\n maxContentLength: -1,\r\n maxBodyLength: -1,\r\n\r\n env: {\r\n FormData: platform.classes.FormData,\r\n Blob: platform.classes.Blob\r\n },\r\n\r\n validateStatus: function validateStatus(status) {\r\n return status >= 200 && status < 300;\r\n },\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n }\r\n }\r\n};\r\n\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n defaults.headers[method] = {};\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\r\n});\r\n\r\nmodule.exports = defaults;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar defaults = require('../defaults');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Number} status HTTP status code\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, status, fns) {\r\n var context = this || defaults;\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn.call(context, data, headers, status);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function isCancel(value) {\r\n return !!(value && value.__CANCEL__);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar transformData = require('./transformData');\r\nvar isCancel = require('../cancel/isCancel');\r\nvar defaults = require('../defaults');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nfunction throwIfCancellationRequested(config) {\r\n if (config.cancelToken) {\r\n config.cancelToken.throwIfRequested();\r\n }\r\n\r\n if (config.signal && config.signal.aborted) {\r\n throw new CanceledError();\r\n }\r\n}\r\n\r\n/**\r\n * Dispatch a request to the server using the configured adapter.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Ensure headers exist\r\n config.headers = config.headers || {};\r\n\r\n // Transform request data\r\n config.data = transformData.call(\r\n config,\r\n config.data,\r\n config.headers,\r\n null,\r\n config.transformRequest\r\n );\r\n\r\n normalizeHeaderName(config.headers, 'Accept');\r\n normalizeHeaderName(config.headers, 'Content-Type');\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n var adapter = config.adapter || defaults.adapter;\r\n\r\n return adapter(config).then(function onAdapterResolution(response) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n response.data = transformData.call(\r\n config,\r\n response.data,\r\n response.headers,\r\n response.status,\r\n config.transformResponse\r\n );\r\n\r\n return response;\r\n }, function onAdapterRejection(reason) {\r\n if (!isCancel(reason)) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n if (reason && reason.response) {\r\n reason.response.data = transformData.call(\r\n config,\r\n reason.response.data,\r\n reason.response.headers,\r\n reason.response.status,\r\n config.transformResponse\r\n );\r\n }\r\n }\r\n\r\n return Promise.reject(reason);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Config-specific merge-function which creates a new config-object\r\n * by merging two configuration objects together.\r\n *\r\n * @param {Object} config1\r\n * @param {Object} config2\r\n * @returns {Object} New object resulting from merging config2 to config1\r\n */\r\nmodule.exports = function mergeConfig(config1, config2) {\r\n // eslint-disable-next-line no-param-reassign\r\n config2 = config2 || {};\r\n var config = {};\r\n\r\n function getMergedValue(target, source) {\r\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\r\n return utils.merge(target, source);\r\n } else if (utils.isEmptyObject(source)) {\r\n return utils.merge({}, target);\r\n } else if (utils.isPlainObject(source)) {\r\n return utils.merge({}, source);\r\n } else if (utils.isArray(source)) {\r\n return source.slice();\r\n }\r\n return source;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDeepProperties(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function valueFromConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function defaultToConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDirectKeys(prop) {\r\n if (prop in config2) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (prop in config1) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n var mergeMap = {\r\n 'url': valueFromConfig2,\r\n 'method': valueFromConfig2,\r\n 'data': valueFromConfig2,\r\n 'baseURL': defaultToConfig2,\r\n 'transformRequest': defaultToConfig2,\r\n 'transformResponse': defaultToConfig2,\r\n 'paramsSerializer': defaultToConfig2,\r\n 'timeout': defaultToConfig2,\r\n 'timeoutMessage': defaultToConfig2,\r\n 'withCredentials': defaultToConfig2,\r\n 'withXSRFToken': defaultToConfig2,\r\n 'adapter': defaultToConfig2,\r\n 'responseType': defaultToConfig2,\r\n 'xsrfCookieName': defaultToConfig2,\r\n 'xsrfHeaderName': defaultToConfig2,\r\n 'onUploadProgress': defaultToConfig2,\r\n 'onDownloadProgress': defaultToConfig2,\r\n 'decompress': defaultToConfig2,\r\n 'maxContentLength': defaultToConfig2,\r\n 'maxBodyLength': defaultToConfig2,\r\n 'beforeRedirect': defaultToConfig2,\r\n 'transport': defaultToConfig2,\r\n 'httpAgent': defaultToConfig2,\r\n 'httpsAgent': defaultToConfig2,\r\n 'cancelToken': defaultToConfig2,\r\n 'socketPath': defaultToConfig2,\r\n 'responseEncoding': defaultToConfig2,\r\n 'validateStatus': mergeDirectKeys\r\n };\r\n\r\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\r\n var merge = mergeMap[prop] || mergeDeepProperties;\r\n var configValue = merge(prop);\r\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\r\n });\r\n\r\n return config;\r\n};\r\n","module.exports = {\n \"version\": \"0.28.1\"\n};","'use strict';\r\n\r\nvar VERSION = require('../env/data').version;\r\nvar AxiosError = require('../core/AxiosError');\r\n\r\nvar validators = {};\r\n\r\n// eslint-disable-next-line func-names\r\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\r\n validators[type] = function validator(thing) {\r\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\r\n };\r\n});\r\n\r\nvar deprecatedWarnings = {};\r\n\r\n/**\r\n * Transitional option validator\r\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\r\n * @param {string?} version - deprecated version / removed since version\r\n * @param {string?} message - some message with additional info\r\n * @returns {function}\r\n */\r\nvalidators.transitional = function transitional(validator, version, message) {\r\n function formatMessage(opt, desc) {\r\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\r\n }\r\n\r\n // eslint-disable-next-line func-names\r\n return function(value, opt, opts) {\r\n if (validator === false) {\r\n throw new AxiosError(\r\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\r\n AxiosError.ERR_DEPRECATED\r\n );\r\n }\r\n\r\n if (version && !deprecatedWarnings[opt]) {\r\n deprecatedWarnings[opt] = true;\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n formatMessage(\r\n opt,\r\n ' has been deprecated since v' + version + ' and will be removed in the near future'\r\n )\r\n );\r\n }\r\n\r\n return validator ? validator(value, opt, opts) : true;\r\n };\r\n};\r\n\r\n/**\r\n * Assert object's properties type\r\n * @param {object} options\r\n * @param {object} schema\r\n * @param {boolean?} allowUnknown\r\n */\r\n\r\nfunction assertOptions(options, schema, allowUnknown) {\r\n if (typeof options !== 'object') {\r\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n var keys = Object.keys(options);\r\n var i = keys.length;\r\n while (i-- > 0) {\r\n var opt = keys[i];\r\n var validator = schema[opt];\r\n if (validator) {\r\n var value = options[opt];\r\n var result = value === undefined || validator(value, opt, options);\r\n if (result !== true) {\r\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n continue;\r\n }\r\n if (allowUnknown !== true) {\r\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n assertOptions: assertOptions,\r\n validators: validators\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('../helpers/buildURL');\r\nvar InterceptorManager = require('./InterceptorManager');\r\nvar dispatchRequest = require('./dispatchRequest');\r\nvar mergeConfig = require('./mergeConfig');\r\nvar buildFullPath = require('./buildFullPath');\r\nvar validator = require('../helpers/validator');\r\n\r\nvar validators = validator.validators;\r\n/**\r\n * Create a new instance of Axios\r\n *\r\n * @param {Object} instanceConfig The default config for the instance\r\n */\r\nfunction Axios(instanceConfig) {\r\n this.defaults = instanceConfig;\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\n/**\r\n * Dispatch a request\r\n *\r\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\r\n * @param {?Object} config\r\n */\r\nAxios.prototype.request = function request(configOrUrl, config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof configOrUrl === 'string') {\r\n config = config || {};\r\n config.url = configOrUrl;\r\n } else {\r\n config = configOrUrl || {};\r\n }\r\n\r\n config = mergeConfig(this.defaults, config);\r\n\r\n // Set config.method\r\n if (config.method) {\r\n config.method = config.method.toLowerCase();\r\n } else if (this.defaults.method) {\r\n config.method = this.defaults.method.toLowerCase();\r\n } else {\r\n config.method = 'get';\r\n }\r\n\r\n var transitional = config.transitional;\r\n\r\n if (transitional !== undefined) {\r\n validator.assertOptions(transitional, {\r\n silentJSONParsing: validators.transitional(validators.boolean),\r\n forcedJSONParsing: validators.transitional(validators.boolean),\r\n clarifyTimeoutError: validators.transitional(validators.boolean)\r\n }, false);\r\n }\r\n\r\n var paramsSerializer = config.paramsSerializer;\r\n\r\n if (paramsSerializer !== undefined) {\r\n validator.assertOptions(paramsSerializer, {\r\n encode: validators.function,\r\n serialize: validators.function\r\n }, true);\r\n }\r\n\r\n utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer});\r\n\r\n // filter out skipped interceptors\r\n var requestInterceptorChain = [];\r\n var synchronousRequestInterceptors = true;\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\r\n return;\r\n }\r\n\r\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\r\n\r\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var responseInterceptorChain = [];\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var promise;\r\n\r\n if (!synchronousRequestInterceptors) {\r\n var chain = [dispatchRequest, undefined];\r\n\r\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\r\n chain = chain.concat(responseInterceptorChain);\r\n\r\n promise = Promise.resolve(config);\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n\r\n var newConfig = config;\r\n while (requestInterceptorChain.length) {\r\n var onFulfilled = requestInterceptorChain.shift();\r\n var onRejected = requestInterceptorChain.shift();\r\n try {\r\n newConfig = onFulfilled(newConfig);\r\n } catch (error) {\r\n onRejected(error);\r\n break;\r\n }\r\n }\r\n\r\n try {\r\n promise = dispatchRequest(newConfig);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n while (responseInterceptorChain.length) {\r\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nAxios.prototype.getUri = function getUri(config) {\r\n config = mergeConfig(this.defaults, config);\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n return buildURL(fullPath, config.params, config.paramsSerializer);\r\n};\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n url: url,\r\n data: (config || {}).data\r\n }));\r\n };\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n\r\n function generateHTTPMethod(isForm) {\r\n return function httpMethod(url, data, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n headers: isForm ? {\r\n 'Content-Type': 'multipart/form-data'\r\n } : {},\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n }\r\n\r\n Axios.prototype[method] = generateHTTPMethod();\r\n\r\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\r\n});\r\n\r\nmodule.exports = Axios;\r\n","'use strict';\r\n\r\nvar CanceledError = require('./CanceledError');\r\n\r\n/**\r\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\r\n *\r\n * @class\r\n * @param {Function} executor The executor function.\r\n */\r\nfunction CancelToken(executor) {\r\n if (typeof executor !== 'function') {\r\n throw new TypeError('executor must be a function.');\r\n }\r\n\r\n var resolvePromise;\r\n\r\n this.promise = new Promise(function promiseExecutor(resolve) {\r\n resolvePromise = resolve;\r\n });\r\n\r\n var token = this;\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then(function(cancel) {\r\n if (!token._listeners) return;\r\n\r\n var i = token._listeners.length;\r\n\r\n while (i-- > 0) {\r\n token._listeners[i](cancel);\r\n }\r\n token._listeners = null;\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then = function(onfulfilled) {\r\n var _resolve;\r\n // eslint-disable-next-line func-names\r\n var promise = new Promise(function(resolve) {\r\n token.subscribe(resolve);\r\n _resolve = resolve;\r\n }).then(onfulfilled);\r\n\r\n promise.cancel = function reject() {\r\n token.unsubscribe(_resolve);\r\n };\r\n\r\n return promise;\r\n };\r\n\r\n executor(function cancel(message, config, request) {\r\n if (token.reason) {\r\n // Cancellation has already been requested\r\n return;\r\n }\r\n\r\n token.reason = new CanceledError(message, config, request);\r\n resolvePromise(token.reason);\r\n });\r\n}\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\r\n if (this.reason) {\r\n throw this.reason;\r\n }\r\n};\r\n\r\n/**\r\n * Subscribe to the cancel signal\r\n */\r\n\r\nCancelToken.prototype.subscribe = function subscribe(listener) {\r\n if (this.reason) {\r\n listener(this.reason);\r\n return;\r\n }\r\n\r\n if (this._listeners) {\r\n this._listeners.push(listener);\r\n } else {\r\n this._listeners = [listener];\r\n }\r\n};\r\n\r\n/**\r\n * Unsubscribe from the cancel signal\r\n */\r\n\r\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\r\n if (!this._listeners) {\r\n return;\r\n }\r\n var index = this._listeners.indexOf(listener);\r\n if (index !== -1) {\r\n this._listeners.splice(index, 1);\r\n }\r\n};\r\n\r\n/**\r\n * Returns an object that contains a new `CancelToken` and a function that, when called,\r\n * cancels the `CancelToken`.\r\n */\r\nCancelToken.source = function source() {\r\n var cancel;\r\n var token = new CancelToken(function executor(c) {\r\n cancel = c;\r\n });\r\n return {\r\n token: token,\r\n cancel: cancel\r\n };\r\n};\r\n\r\nmodule.exports = CancelToken;\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Determines whether the payload is an error thrown by Axios\r\n *\r\n * @param {*} payload The value to test\r\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\r\n */\r\nmodule.exports = function isAxiosError(payload) {\r\n return utils.isObject(payload) && (payload.isAxiosError === true);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\nvar bind = require('./helpers/bind');\r\nvar Axios = require('./core/Axios');\r\nvar mergeConfig = require('./core/mergeConfig');\r\nvar defaults = require('./defaults');\r\nvar formDataToJSON = require('./helpers/formDataToJSON');\r\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n * @return {Axios} A new instance of Axios\r\n */\r\nfunction createInstance(defaultConfig) {\r\n var context = new Axios(defaultConfig);\r\n var instance = bind(Axios.prototype.request, context);\r\n\r\n // Copy axios.prototype to instance\r\n utils.extend(instance, Axios.prototype, context);\r\n\r\n // Copy context to instance\r\n utils.extend(instance, context);\r\n\r\n // Factory for creating new instances\r\n instance.create = function create(instanceConfig) {\r\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\r\n };\r\n\r\n return instance;\r\n}\r\n\r\n// Create the default instance to be exported\r\nvar axios = createInstance(defaults);\r\n\r\n// Expose Axios class to allow class inheritance\r\naxios.Axios = Axios;\r\n\r\n// Expose Cancel & CancelToken\r\naxios.CanceledError = require('./cancel/CanceledError');\r\naxios.CancelToken = require('./cancel/CancelToken');\r\naxios.isCancel = require('./cancel/isCancel');\r\naxios.VERSION = require('./env/data').version;\r\naxios.toFormData = require('./helpers/toFormData');\r\n\r\n// Expose AxiosError class\r\naxios.AxiosError = require('../lib/core/AxiosError');\r\n\r\n// alias for CanceledError for backward compatibility\r\naxios.Cancel = axios.CanceledError;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose isAxiosError\r\naxios.isAxiosError = require('./helpers/isAxiosError');\r\n\r\naxios.formToJSON = function(thing) {\r\n return formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\r\n};\r\n\r\nmodule.exports = axios;\r\n\r\n// Allow use of default import syntax in TypeScript\r\nmodule.exports.default = axios;\r\n"],"names":["prototype","browser","FormData","require$$0","envFormData","AxiosError","encode","toFormData","AxiosURLSearchParams","require$$1","transitional","transitionalDefaults","CanceledError","formDataToJSON","defaults","validators","InterceptorManager","Axios","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/esm/axios.min.js b/node_modules/axios/dist/esm/axios.min.js new file mode 100644 index 0000000..6a2e467 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.min.js @@ -0,0 +1,2 @@ +var e,t=function(e,t){return function(){return e.apply(t,arguments)}},r=Object.prototype.toString,n=(e=Object.create(null),function(t){var n=r.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())});function o(e){return e=e.toLowerCase(),function(t){return n(t)===e}}function i(e){return Array.isArray(e)}function s(e){return void 0===e}var a=o("ArrayBuffer");function u(e){return"number"==typeof e}function c(e){return null!==e&&"object"==typeof e}function f(e){if("object"!==n(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var l=o("Date"),p=o("File"),d=o("Blob"),h=o("FileList");function m(e){return"[object Function]"===r.call(e)}var y=o("URLSearchParams");function v(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var r=0,n=e.length;r0;)s=o[i],n&&!n(s,e,t)||a[s]||(t[s]=e[s],a[s]=!0);e=!1!==r&&Object.getPrototypeOf(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:n,kindOfTest:o,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;if(i(e))return e;var t=e.length;if(!u(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},isTypedArray:E,isFileList:h,forEachEntry:function(e,t){for(var r,n=(e&&e[Symbol.iterator]).call(e);(r=n.next())&&!r.done;){var o=r.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var r,n=[];null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:w,hasOwnProperty:O};function S(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}R.inherits(S,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var A=S.prototype,T={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){T[e]={value:e}})),Object.defineProperties(S,T),Object.defineProperty(A,"isAxiosError",{value:!0}),S.from=function(e,t,r,n,o,i){var s=Object.create(A);return R.toFlatObject(e,s,(function(e){return e!==Error.prototype})),S.call(s,e.message,t,r,n,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};var j=S,N="object"==typeof self?self.FormData:window.FormData;function x(e){return R.isPlainObject(e)||R.isArray(e)}function _(e){return R.endsWith(e,"[]")?e.slice(0,-2):e}function P(e,t,r){return e?e.concat(t).map((function(e,t){return e=_(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}var B=R.toFlatObject(R,{},null,(function(e){return/^is[A-Z]/.test(e)}));var C=function(e,t,r){if(!R.isObject(e))throw new TypeError("target must be an object");t=t||new(N||FormData);var n,o=(r=R.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!R.isUndefined(t[e])}))).metaTokens,i=r.visitor||f,s=r.dots,a=r.indexes,u=(r.Blob||"undefined"!=typeof Blob&&Blob)&&((n=t)&&R.isFunction(n.append)&&"FormData"===n[Symbol.toStringTag]&&n[Symbol.iterator]);if(!R.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(R.isDate(e))return e.toISOString();if(!u&&R.isBlob(e))throw new j("Blob is not supported. Use a Buffer instead.");return R.isArrayBuffer(e)||R.isTypedArray(e)?u&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function f(e,r,n){var i=e;if(e&&!n&&"object"==typeof e)if(R.endsWith(r,"{}"))r=o?r:r.slice(0,-2),e=JSON.stringify(e);else if(R.isArray(e)&&function(e){return R.isArray(e)&&!e.some(x)}(e)||R.isFileList(e)||R.endsWith(r,"[]")&&(i=R.toArray(e)))return r=_(r),i.forEach((function(e,n){!R.isUndefined(e)&&t.append(!0===a?P([r],n,s):null===a?r:r+"[]",c(e))})),!1;return!!x(e)||(t.append(P(n,r,s),c(e)),!1)}var l=[],p=Object.assign(B,{defaultVisitor:f,convertValue:c,isVisitable:x});if(!R.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!R.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),R.forEach(r,(function(r,o){!0===(!R.isUndefined(r)&&i.call(t,r,R.isString(o)?o.trim():o,n,p))&&e(r,n?n.concat(o):[o])})),l.pop()}}(e),t};function F(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function U(e,t){this._pairs=[],e&&C(e,this,t)}var D=U.prototype;D.append=function(e,t){this._pairs.push([e,t])},D.toString=function(e){var t=e?function(t){return e.call(this,t,F)}:F;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var L=U;function k(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var q=function(e,t,r){if(!t)return e;var n=e.indexOf("#");-1!==n&&(e=e.slice(0,n));var o,i=r&&r.encode||k,s=r&&r.serialize;return(o=s?s(t,r):R.isURLSearchParams(t)?t.toString():new L(t,r).toString(i))&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e};function I(){this.handlers=[]}I.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},I.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},I.prototype.clear=function(){this.handlers&&(this.handlers=[])},I.prototype.forEach=function(e){R.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var z=I,M=function(e,t){R.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))},H={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},J={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:L,FormData:FormData,Blob:Blob},protocols:["http","https","file","blob","url","data"]};var V=function(e){function t(e,r,n,o){var i=e[o++],s=Number.isFinite(+i),a=o>=e.length;return i=!i&&R.isArray(n)?n.length:i,a?(R.hasOwnProperty(n,i)?n[i]=[n[i],r]:n[i]=r,!s):(n[i]&&R.isObject(n[i])||(n[i]=[]),t(e,r,n[i],o)&&R.isArray(n[i])&&(n[i]=function(e){var t,r,n={},o=Object.keys(e),i=o.length;for(t=0;t=0)return;f[o]="set-cookie"===o?(f[o]?f[o]:[]).concat([i]):f[o]?f[o]+", "+i:i}})),f):f):null;!function(e,t,r){var n=r.config.validateStatus;r.status&&n&&!n(r.status)?t(new j("Request failed with status code "+r.status,[j.ERR_BAD_REQUEST,j.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}((function(e){t(e),u()}),(function(e){r(e),u()}),{data:s&&"text"!==s&&"json"!==s?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:l,config:e,request:c}),c=null}}if(c.open(e.method.toUpperCase(),q(p,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=d:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(d)},c.onabort=function(){c&&(r(new j("Request aborted",j.ECONNABORTED,e,c)),c=null)},c.onerror=function(){r(new j("Network Error",j.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||H;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new j(t,n.clarifyTimeoutError?j.ETIMEDOUT:j.ECONNABORTED,e,c)),c=null},R.isStandardBrowserEnv()&&(a&&R.isFunction(a)&&(a=a(e)),a||!1!==a&&$(p))){var h=e.xsrfHeaderName&&e.xsrfCookieName&&W.read(e.xsrfCookieName);h&&(i[e.xsrfHeaderName]=h)}"setRequestHeader"in c&&R.forEach(i,(function(e,t){void 0===o&&"content-type"===t.toLowerCase()?delete i[t]:c.setRequestHeader(t,e)})),R.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),s&&"json"!==s&&(c.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&c.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(t){c&&(r(!t||t.type?new G(null,e,c):t),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),o||!1===o||0===o||""===o||(o=null);var m,y=(m=/^([-+\w]{1,25})(:?\/\/|:)/.exec(p))&&m[1]||"";y&&-1===J.protocols.indexOf(y)?r(new j("Unsupported protocol "+y+":",j.ERR_BAD_REQUEST,e)):c.send(o)}))},Z={"Content-Type":"application/x-www-form-urlencoded"};function ee(e,t){!R.isUndefined(e)&&R.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var te,re={transitional:H,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(te=Y),te),transformRequest:[function(e,t){M(t,"Accept"),M(t,"Content-Type");var r,n=t&&t["Content-Type"]||"",o=n.indexOf("application/json")>-1,i=R.isObject(e);if(i&&R.isHTMLForm(e)&&(e=new FormData(e)),R.isFormData(e))return o?JSON.stringify(V(e)):e;if(R.isArrayBuffer(e)||R.isBuffer(e)||R.isStream(e)||R.isFile(e)||R.isBlob(e))return e;if(R.isArrayBufferView(e))return e.buffer;if(R.isURLSearchParams(e))return ee(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(i){if(-1!==n.indexOf("application/x-www-form-urlencoded"))return function(e,t){return C(e,new J.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return J.isNode&&R.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((r=R.isFileList(e))||n.indexOf("multipart/form-data")>-1){var s=this.env&&this.env.FormData;return C(r?{"files[]":e}:e,s&&new s,this.formSerializer)}}return i||o?(ee(t,"application/json"),function(e,t,r){if(R.isString(e))try{return(t||JSON.parse)(e),R.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||re.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&R.isString(e)&&(r&&!this.responseType||n)){var o=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw j.from(e,j.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:J.classes.FormData,Blob:J.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};R.forEach(["delete","get","head"],(function(e){re.headers[e]={}})),R.forEach(["post","put","patch"],(function(e){re.headers[e]=R.merge(Z)}));var ne=re,oe=function(e,t,r,n){var o=this||ne;return R.forEach(n,(function(n){e=n.call(o,e,t,r)})),e},ie=function(e){return!(!e||!e.__CANCEL__)};function se(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new G}var ae=function(e){return se(e),e.headers=e.headers||{},e.data=oe.call(e,e.data,e.headers,null,e.transformRequest),M(e.headers,"Accept"),M(e.headers,"Content-Type"),e.headers=R.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),R.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||ne.adapter)(e).then((function(t){return se(e),t.data=oe.call(e,t.data,t.headers,t.status,e.transformResponse),t}),(function(t){return ie(t)||(se(e),t&&t.response&&(t.response.data=oe.call(e,t.response.data,t.response.headers,t.response.status,e.transformResponse))),Promise.reject(t)}))},ue=function(e,t){t=t||{};var r={};function n(e,t){return R.isPlainObject(e)&&R.isPlainObject(t)?R.merge(e,t):R.isEmptyObject(t)?R.merge({},e):R.isPlainObject(t)?R.merge({},t):R.isArray(t)?t.slice():t}function o(r){return R.isUndefined(t[r])?R.isUndefined(e[r])?void 0:n(void 0,e[r]):n(e[r],t[r])}function i(e){if(!R.isUndefined(t[e]))return n(void 0,t[e])}function s(r){return R.isUndefined(t[r])?R.isUndefined(e[r])?void 0:n(void 0,e[r]):n(void 0,t[r])}function a(r){return r in t?n(e[r],t[r]):r in e?n(void 0,e[r]):void 0}var u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a};return R.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=u[e]||o,n=t(e);R.isUndefined(n)&&t!==a||(r[e]=n)})),r},ce="0.28.1",fe=ce,le={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){le[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var pe={};le.transitional=function(e,t,r){function n(e,t){return"[Axios v"+fe+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,o,i){if(!1===e)throw new j(n(o," has been removed"+(t?" in "+t:"")),j.ERR_DEPRECATED);return t&&!pe[o]&&(pe[o]=!0,console.warn(n(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,o,i)}};var de={assertOptions:function(e,t,r){if("object"!=typeof e)throw new j("options must be an object",j.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),o=n.length;o-- >0;){var i=n[o],s=t[i];if(s){var a=e[i],u=void 0===a||s(a,i,e);if(!0!==u)throw new j("option "+i+" must be "+u,j.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new j("Unknown option "+i,j.ERR_BAD_OPTION)}},validators:le},he=de.validators;function me(e){this.defaults=e,this.interceptors={request:new z,response:new z}}me.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=ue(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&de.assertOptions(r,{silentJSONParsing:he.transitional(he.boolean),forcedJSONParsing:he.transitional(he.boolean),clarifyTimeoutError:he.transitional(he.boolean)},!1);var n=t.paramsSerializer;void 0!==n&&de.assertOptions(n,{encode:he.function,serialize:he.function},!0),R.isFunction(n)&&(t.paramsSerializer={serialize:n});var o=[],i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,o.unshift(e.fulfilled,e.rejected))}));var s,a=[];if(this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)})),!i){var u=[ae,void 0];for(Array.prototype.unshift.apply(u,o),u=u.concat(a),s=Promise.resolve(t);u.length;)s=s.then(u.shift(),u.shift());return s}for(var c=t;o.length;){var f=o.shift(),l=o.shift();try{c=f(c)}catch(e){l(e);break}}try{s=ae(c)}catch(e){return Promise.reject(e)}for(;a.length;)s=s.then(a.shift(),a.shift());return s},me.prototype.getUri=function(e){e=ue(this.defaults,e);var t=X(e.baseURL,e.url);return q(t,e.params,e.paramsSerializer)},R.forEach(["delete","get","head","options"],(function(e){me.prototype[e]=function(t,r){return this.request(ue(r||{},{method:e,url:t,data:(r||{}).data}))}})),R.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,o){return this.request(ue(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}me.prototype[e]=t(),me.prototype[e+"Form"]=t(!0)}));var ye=me;function ve(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){for(var t=r._listeners.length;t-- >0;)r._listeners[t](e);r._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,n,o){r.reason||(r.reason=new G(e,n,o),t(r.reason))}))}ve.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},ve.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},ve.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},ve.source=function(){var e;return{token:new ve((function(t){e=t})),cancel:e}};var be=ve;var Ee=function e(r){var n=new ye(r),o=t(ye.prototype.request,n);return R.extend(o,ye.prototype,n),R.extend(o,n),o.create=function(t){return e(ue(r,t))},o}(ne);Ee.Axios=ye,Ee.CanceledError=G,Ee.CancelToken=be,Ee.isCancel=ie,Ee.VERSION=ce,Ee.toFormData=C,Ee.AxiosError=j,Ee.Cancel=Ee.CanceledError,Ee.all=function(e){return Promise.all(e)},Ee.spread=function(e){return function(t){return e.apply(null,t)}},Ee.isAxiosError=function(e){return R.isObject(e)&&!0===e.isAxiosError},Ee.formToJSON=function(e){return V(R.isHTMLForm(e)?new FormData(e):e)};var ge=Ee,we=Ee;ge.default=we;export{ge as default}; +//# sourceMappingURL=axios.min.js.map diff --git a/node_modules/axios/dist/esm/axios.min.js.map b/node_modules/axios/dist/esm/axios.min.js.map new file mode 100644 index 0000000..44c12c0 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/env/classes/FormData.js","../../node_modules/form-data/lib/browser.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/helpers/normalizeHeaderName.js","../../lib/defaults/transitional.js","../../lib/platform/index.js","../../lib/platform/browser/index.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/helpers/formDataToJSON.js","../../lib/helpers/cookies.js","../../lib/core/buildFullPath.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/helpers/parseHeaders.js","../../lib/helpers/isURLSameOrigin.js","../../lib/cancel/CanceledError.js","../../lib/adapters/xhr.js","../../lib/core/settle.js","../../lib/helpers/parseProtocol.js","../../lib/defaults/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/core/dispatchRequest.js","../../lib/core/mergeConfig.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/axios.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js"],"sourcesContent":["'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n return fn.apply(thisArg, arguments);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar bind = require('./helpers/bind');\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n// eslint-disable-next-line func-names\r\nvar kindOf = (function(cache) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n var str = toString.call(thing);\r\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\r\n };\r\n})(Object.create(null));\r\n\r\nfunction kindOfTest(type) {\r\n type = type.toLowerCase();\r\n return function isKindOf(thing) {\r\n return kindOf(thing) === type;\r\n };\r\n}\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return Array.isArray(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Buffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Buffer, otherwise false\r\n */\r\nfunction isBuffer(val) {\r\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\r\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\r\n\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a plain Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a plain Object, otherwise false\r\n */\r\nfunction isPlainObject(val) {\r\n if (kindOf(val) !== 'object') {\r\n return false;\r\n }\r\n\r\n var prototype = Object.getPrototypeOf(val);\r\n return prototype === null || prototype === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a empty Object\r\n *\r\n * @param {Object} val The value to test\r\n * @return {boolean} True if value is a empty Object, otherwise false\r\n */\r\nfunction isEmptyObject(val) {\r\n return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nvar isDate = kindOfTest('Date');\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFile = kindOfTest('File');\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nvar isBlob = kindOfTest('Blob');\r\n\r\n/**\r\n * Determine if a value is a FileList\r\n *\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nvar isFileList = kindOfTest('FileList');\r\n\r\n/**\r\n * Determine if a value is a Function\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Function, otherwise false\r\n */\r\nfunction isFunction(val) {\r\n return toString.call(val) === '[object Function]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Stream\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Stream, otherwise false\r\n */\r\nfunction isStream(val) {\r\n return isObject(val) && isFunction(val.pipe);\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} thing The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(thing) {\r\n var pattern = '[object FormData]';\r\n return thing && (\r\n (typeof FormData === 'function' && thing instanceof FormData) ||\r\n toString.call(thing) === pattern ||\r\n (isFunction(thing.toString) && thing.toString() === pattern)\r\n );\r\n}\r\n\r\n/**\r\n * Determine if a value is a URLSearchParams object\r\n * @function\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\r\n */\r\nvar isURLSearchParams = kindOfTest('URLSearchParams');\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * navigator.product -> 'ReactNative'\r\n * nativescript\r\n * navigator.product -> 'NativeScript' or 'NS'\r\n */\r\nfunction isStandardBrowserEnv() {\r\n var product;\r\n if (typeof navigator !== 'undefined' && (\r\n (product = navigator.product) === 'ReactNative' ||\r\n product === 'NativeScript' ||\r\n product === 'NS')\r\n ) {\r\n return false;\r\n }\r\n\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object') {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (isPlainObject(result[key]) && isPlainObject(val)) {\r\n result[key] = merge(result[key], val);\r\n } else if (isPlainObject(val)) {\r\n result[key] = merge({}, val);\r\n } else if (isArray(val)) {\r\n result[key] = val.slice();\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Extends object a by mutably adding to it the properties of object b.\r\n *\r\n * @param {Object} a The object to be extended\r\n * @param {Object} b The object to copy properties from\r\n * @param {Object} thisArg The object to bind function to\r\n * @return {Object} The resulting value of object a\r\n */\r\nfunction extend(a, b, thisArg) {\r\n forEach(b, function assignValue(val, key) {\r\n if (thisArg && typeof val === 'function') {\r\n a[key] = bind(val, thisArg);\r\n } else {\r\n a[key] = val;\r\n }\r\n });\r\n return a;\r\n}\r\n\r\n/**\r\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\r\n *\r\n * @param {string} content with BOM\r\n * @return {string} content value without BOM\r\n */\r\nfunction stripBOM(content) {\r\n if (content.charCodeAt(0) === 0xFEFF) {\r\n content = content.slice(1);\r\n }\r\n return content;\r\n}\r\n\r\n/**\r\n * Inherit the prototype methods from one constructor into another\r\n * @param {function} constructor\r\n * @param {function} superConstructor\r\n * @param {object} [props]\r\n * @param {object} [descriptors]\r\n */\r\n\r\nfunction inherits(constructor, superConstructor, props, descriptors) {\r\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\r\n constructor.prototype.constructor = constructor;\r\n props && Object.assign(constructor.prototype, props);\r\n}\r\n\r\n/**\r\n * Resolve object with deep prototype chain to a flat object\r\n * @param {Object} sourceObj source object\r\n * @param {Object} [destObj]\r\n * @param {Function|Boolean} [filter]\r\n * @param {Function} [propFilter]\r\n * @returns {Object}\r\n */\r\n\r\nfunction toFlatObject(sourceObj, destObj, filter, propFilter) {\r\n var props;\r\n var i;\r\n var prop;\r\n var merged = {};\r\n\r\n destObj = destObj || {};\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n if (sourceObj == null) return destObj;\r\n\r\n do {\r\n props = Object.getOwnPropertyNames(sourceObj);\r\n i = props.length;\r\n while (i-- > 0) {\r\n prop = props[i];\r\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\r\n destObj[prop] = sourceObj[prop];\r\n merged[prop] = true;\r\n }\r\n }\r\n sourceObj = filter !== false && Object.getPrototypeOf(sourceObj);\r\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\r\n\r\n return destObj;\r\n}\r\n\r\n/*\r\n * determines whether a string ends with the characters of a specified string\r\n * @param {String} str\r\n * @param {String} searchString\r\n * @param {Number} [position= 0]\r\n * @returns {boolean}\r\n */\r\nfunction endsWith(str, searchString, position) {\r\n str = String(str);\r\n if (position === undefined || position > str.length) {\r\n position = str.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = str.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n}\r\n\r\n\r\n/**\r\n * Returns new array from array like object or null if failed\r\n * @param {*} [thing]\r\n * @returns {?Array}\r\n */\r\nfunction toArray(thing) {\r\n if (!thing) return null;\r\n if (isArray(thing)) return thing;\r\n var i = thing.length;\r\n if (!isNumber(i)) return null;\r\n var arr = new Array(i);\r\n while (i-- > 0) {\r\n arr[i] = thing[i];\r\n }\r\n return arr;\r\n}\r\n\r\n// eslint-disable-next-line func-names\r\nvar isTypedArray = (function(TypedArray) {\r\n // eslint-disable-next-line func-names\r\n return function(thing) {\r\n return TypedArray && thing instanceof TypedArray;\r\n };\r\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\r\n\r\nfunction forEachEntry(obj, fn) {\r\n var generator = obj && obj[Symbol.iterator];\r\n\r\n var iterator = generator.call(obj);\r\n\r\n var result;\r\n\r\n while ((result = iterator.next()) && !result.done) {\r\n var pair = result.value;\r\n fn.call(obj, pair[0], pair[1]);\r\n }\r\n}\r\n\r\nfunction matchAll(regExp, str) {\r\n var matches;\r\n var arr = [];\r\n\r\n while ((matches = regExp.exec(str)) !== null) {\r\n arr.push(matches);\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nvar isHTMLForm = kindOfTest('HTMLFormElement');\r\n\r\nvar hasOwnProperty = (function resolver(_hasOwnProperty) {\r\n return function(obj, prop) {\r\n return _hasOwnProperty.call(obj, prop);\r\n };\r\n})(Object.prototype.hasOwnProperty);\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isBuffer: isBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isPlainObject: isPlainObject,\r\n isEmptyObject: isEmptyObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isFunction: isFunction,\r\n isStream: isStream,\r\n isURLSearchParams: isURLSearchParams,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n extend: extend,\r\n trim: trim,\r\n stripBOM: stripBOM,\r\n inherits: inherits,\r\n toFlatObject: toFlatObject,\r\n kindOf: kindOf,\r\n kindOfTest: kindOfTest,\r\n endsWith: endsWith,\r\n toArray: toArray,\r\n isTypedArray: isTypedArray,\r\n isFileList: isFileList,\r\n forEachEntry: forEachEntry,\r\n matchAll: matchAll,\r\n isHTMLForm: isHTMLForm,\r\n hasOwnProperty: hasOwnProperty\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Create an Error with the specified message, config, error code, request and response.\r\n *\r\n * @param {string} message The error message.\r\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\r\n * @param {Object} [config] The config.\r\n * @param {Object} [request] The request.\r\n * @param {Object} [response] The response.\r\n * @returns {Error} The created error.\r\n */\r\nfunction AxiosError(message, code, config, request, response) {\r\n Error.call(this);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error()).stack;\r\n }\r\n\r\n this.message = message;\r\n this.name = 'AxiosError';\r\n code && (this.code = code);\r\n config && (this.config = config);\r\n request && (this.request = request);\r\n response && (this.response = response);\r\n}\r\n\r\nutils.inherits(AxiosError, Error, {\r\n toJSON: function toJSON() {\r\n return {\r\n // Standard\r\n message: this.message,\r\n name: this.name,\r\n // Microsoft\r\n description: this.description,\r\n number: this.number,\r\n // Mozilla\r\n fileName: this.fileName,\r\n lineNumber: this.lineNumber,\r\n columnNumber: this.columnNumber,\r\n stack: this.stack,\r\n // Axios\r\n config: this.config,\r\n code: this.code,\r\n status: this.response && this.response.status ? this.response.status : null\r\n };\r\n }\r\n});\r\n\r\nvar prototype = AxiosError.prototype;\r\nvar descriptors = {};\r\n\r\n[\r\n 'ERR_BAD_OPTION_VALUE',\r\n 'ERR_BAD_OPTION',\r\n 'ECONNABORTED',\r\n 'ETIMEDOUT',\r\n 'ERR_NETWORK',\r\n 'ERR_FR_TOO_MANY_REDIRECTS',\r\n 'ERR_DEPRECATED',\r\n 'ERR_BAD_RESPONSE',\r\n 'ERR_BAD_REQUEST',\r\n 'ERR_CANCELED',\r\n 'ERR_NOT_SUPPORT',\r\n 'ERR_INVALID_URL'\r\n// eslint-disable-next-line func-names\r\n].forEach(function(code) {\r\n descriptors[code] = {value: code};\r\n});\r\n\r\nObject.defineProperties(AxiosError, descriptors);\r\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\r\n\r\n// eslint-disable-next-line func-names\r\nAxiosError.from = function(error, code, config, request, response, customProps) {\r\n var axiosError = Object.create(prototype);\r\n\r\n utils.toFlatObject(error, axiosError, function filter(obj) {\r\n return obj !== Error.prototype;\r\n });\r\n\r\n AxiosError.call(axiosError, error.message, code, config, request, response);\r\n\r\n axiosError.cause = error;\r\n\r\n axiosError.name = error.name;\r\n\r\n customProps && Object.assign(axiosError, customProps);\r\n\r\n return axiosError;\r\n};\r\n\r\nmodule.exports = AxiosError;\r\n","// eslint-disable-next-line strict\r\nmodule.exports = require('form-data');\r\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar envFormData = require('../env/classes/FormData');\r\n\r\nfunction isVisitable(thing) {\r\n return utils.isPlainObject(thing) || utils.isArray(thing);\r\n}\r\n\r\nfunction removeBrackets(key) {\r\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\r\n}\r\n\r\nfunction renderKey(path, key, dots) {\r\n if (!path) return key;\r\n return path.concat(key).map(function each(token, i) {\r\n // eslint-disable-next-line no-param-reassign\r\n token = removeBrackets(token);\r\n return !dots && i ? '[' + token + ']' : token;\r\n }).join(dots ? '.' : '');\r\n}\r\n\r\nfunction isFlatArray(arr) {\r\n return utils.isArray(arr) && !arr.some(isVisitable);\r\n}\r\n\r\nvar predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\r\n return /^is[A-Z]/.test(prop);\r\n});\r\n\r\nfunction isSpecCompliant(thing) {\r\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\r\n}\r\n\r\n/**\r\n * Convert a data object to FormData\r\n * @param {Object} obj\r\n * @param {?Object} [formData]\r\n * @param {?Object} [options]\r\n * @param {Function} [options.visitor]\r\n * @param {Boolean} [options.metaTokens = true]\r\n * @param {Boolean} [options.dots = false]\r\n * @param {?Boolean} [options.indexes = false]\r\n * @returns {Object}\r\n **/\r\n\r\nfunction toFormData(obj, formData, options) {\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('target must be an object');\r\n }\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n formData = formData || new (envFormData || FormData)();\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n options = utils.toFlatObject(options, {\r\n metaTokens: true,\r\n dots: false,\r\n indexes: false\r\n }, false, function defined(option, source) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n return !utils.isUndefined(source[option]);\r\n });\r\n\r\n var metaTokens = options.metaTokens;\r\n // eslint-disable-next-line no-use-before-define\r\n var visitor = options.visitor || defaultVisitor;\r\n var dots = options.dots;\r\n var indexes = options.indexes;\r\n var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\r\n var useBlob = _Blob && isSpecCompliant(formData);\r\n\r\n if (!utils.isFunction(visitor)) {\r\n throw new TypeError('visitor must be a function');\r\n }\r\n\r\n function convertValue(value) {\r\n if (value === null) return '';\r\n\r\n if (utils.isDate(value)) {\r\n return value.toISOString();\r\n }\r\n\r\n if (!useBlob && utils.isBlob(value)) {\r\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\r\n }\r\n\r\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\r\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n *\r\n * @param {*} value\r\n * @param {String|Number} key\r\n * @param {Array} path\r\n * @this {FormData}\r\n * @returns {boolean} return true to visit the each prop of the value recursively\r\n */\r\n function defaultVisitor(value, key, path) {\r\n var arr = value;\r\n\r\n if (value && !path && typeof value === 'object') {\r\n if (utils.endsWith(key, '{}')) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = metaTokens ? key : key.slice(0, -2);\r\n // eslint-disable-next-line no-param-reassign\r\n value = JSON.stringify(value);\r\n } else if (\r\n (utils.isArray(value) && isFlatArray(value)) ||\r\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\r\n )) {\r\n // eslint-disable-next-line no-param-reassign\r\n key = removeBrackets(key);\r\n\r\n arr.forEach(function each(el, index) {\r\n !utils.isUndefined(el) && formData.append(\r\n // eslint-disable-next-line no-nested-ternary\r\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\r\n convertValue(el)\r\n );\r\n });\r\n return false;\r\n }\r\n }\r\n\r\n if (isVisitable(value)) {\r\n return true;\r\n }\r\n\r\n formData.append(renderKey(path, key, dots), convertValue(value));\r\n\r\n return false;\r\n }\r\n\r\n var stack = [];\r\n\r\n var exposedHelpers = Object.assign(predicates, {\r\n defaultVisitor: defaultVisitor,\r\n convertValue: convertValue,\r\n isVisitable: isVisitable\r\n });\r\n\r\n function build(value, path) {\r\n if (utils.isUndefined(value)) return;\r\n\r\n if (stack.indexOf(value) !== -1) {\r\n throw Error('Circular reference detected in ' + path.join('.'));\r\n }\r\n\r\n stack.push(value);\r\n\r\n utils.forEach(value, function each(el, key) {\r\n var result = !utils.isUndefined(el) && visitor.call(\r\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\r\n );\r\n\r\n if (result === true) {\r\n build(el, path ? path.concat(key) : [key]);\r\n }\r\n });\r\n\r\n stack.pop();\r\n }\r\n\r\n if (!utils.isObject(obj)) {\r\n throw new TypeError('data must be an object');\r\n }\r\n\r\n build(obj);\r\n\r\n return formData;\r\n}\r\n\r\nmodule.exports = toFormData;\r\n","'use strict';\r\n\r\nvar toFormData = require('./toFormData');\r\n\r\nfunction encode(str) {\r\n var charMap = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+',\r\n '%00': '\\x00'\r\n };\r\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function replacer(match) {\r\n return charMap[match];\r\n });\r\n}\r\n\r\nfunction AxiosURLSearchParams(params, options) {\r\n this._pairs = [];\r\n\r\n params && toFormData(params, this, options);\r\n}\r\n\r\nvar prototype = AxiosURLSearchParams.prototype;\r\n\r\nprototype.append = function append(name, value) {\r\n this._pairs.push([name, value]);\r\n};\r\n\r\nprototype.toString = function toString(encoder) {\r\n var _encode = encoder ? function(value) {\r\n return encoder.call(this, value, encode);\r\n } : encode;\r\n\r\n return this._pairs.map(function each(pair) {\r\n return _encode(pair[0]) + '=' + _encode(pair[1]);\r\n }, '').join('&');\r\n};\r\n\r\nmodule.exports = AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar AxiosURLSearchParams = require('../helpers/AxiosURLSearchParams');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @param {?object} options\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, options) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var hashmarkIndex = url.indexOf('#');\r\n\r\n if (hashmarkIndex !== -1) {\r\n url = url.slice(0, hashmarkIndex);\r\n }\r\n\r\n var _encode = options && options.encode || encode;\r\n\r\n var serializeFn = options && options.serialize;\r\n\r\n var serializedParams;\r\n\r\n if (serializeFn) {\r\n serializedParams = serializeFn(params, options);\r\n } else {\r\n serializedParams = utils.isURLSearchParams(params) ?\r\n params.toString() :\r\n new AxiosURLSearchParams(params, options).toString(_encode);\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected,\r\n synchronous: options ? options.synchronous : false,\r\n runWhen: options ? options.runWhen : null\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Clear all interceptors from the stack\r\n */\r\nInterceptorManager.prototype.clear = function clear() {\r\n if (this.handlers) {\r\n this.handlers = [];\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\r\n utils.forEach(headers, function processHeader(value, name) {\r\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\r\n headers[normalizedName] = value;\r\n delete headers[name];\r\n }\r\n });\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n silentJSONParsing: true,\r\n forcedJSONParsing: true,\r\n clarifyTimeoutError: false\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = require('./node/');\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n isBrowser: true,\r\n classes: {\r\n URLSearchParams: require('./classes/URLSearchParams'),\r\n FormData: require('./classes/FormData'),\r\n Blob: Blob\r\n },\r\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\r\n};\r\n","'use strict';\r\n\r\nvar AxiosURLSearchParams = require('../../../helpers/AxiosURLSearchParams');\r\n\r\nmodule.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\r\n","'use strict';\r\n\r\nmodule.exports = FormData;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\nfunction parsePropPath(name) {\r\n // foo[x][y][z]\r\n // foo.x.y.z\r\n // foo-x-y-z\r\n // foo x y z\r\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(function(match) {\r\n return match[0] === '[]' ? '' : match[1] || match[0];\r\n });\r\n}\r\n\r\nfunction arrayToObject(arr) {\r\n var obj = {};\r\n var keys = Object.keys(arr);\r\n var i;\r\n var len = keys.length;\r\n var key;\r\n for (i = 0; i < len; i++) {\r\n key = keys[i];\r\n obj[key] = arr[key];\r\n }\r\n return obj;\r\n}\r\n\r\nfunction formDataToJSON(formData) {\r\n function buildPath(path, value, target, index) {\r\n var name = path[index++];\r\n var isNumericKey = Number.isFinite(+name);\r\n var isLast = index >= path.length;\r\n name = !name && utils.isArray(target) ? target.length : name;\r\n\r\n if (isLast) {\r\n if (utils.hasOwnProperty(target, name)) {\r\n target[name] = [target[name], value];\r\n } else {\r\n target[name] = value;\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (!target[name] || !utils.isObject(target[name])) {\r\n target[name] = [];\r\n }\r\n\r\n var result = buildPath(path, value, target[name], index);\r\n\r\n if (result && utils.isArray(target[name])) {\r\n target[name] = arrayToObject(target[name]);\r\n }\r\n\r\n return !isNumericKey;\r\n }\r\n\r\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\r\n var obj = {};\r\n\r\n utils.forEachEntry(formData, function(name, value) {\r\n buildPath(parsePropPath(name), value, obj, 0);\r\n });\r\n\r\n return obj;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nmodule.exports = formDataToJSON;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\r\nvar combineURLs = require('../helpers/combineURLs');\r\n\r\n/**\r\n * Creates a new URL by combining the baseURL with the requestedURL,\r\n * only when the requestedURL is not already an absolute URL.\r\n * If the requestURL is absolute, this function returns the requestedURL untouched.\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} requestedURL Absolute or relative URL to combine\r\n * @returns {string} The combined full path\r\n */\r\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\r\n if (baseURL && !isAbsoluteURL(requestedURL)) {\r\n return combineURLs(baseURL, requestedURL);\r\n }\r\n return requestedURL;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return relativeURL\r\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\r\n : baseURL;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n// Headers whose duplicates are ignored by node\r\n// c.f. https://nodejs.org/api/http.html#http_message_headers\r\nvar ignoreDuplicateOf = [\r\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\r\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\r\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\r\n 'referer', 'retry-after', 'user-agent'\r\n];\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.slice(0, i)).toLowerCase();\r\n val = utils.trim(line.slice(i + 1));\r\n\r\n if (key) {\r\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\r\n return;\r\n }\r\n if (key === 'set-cookie') {\r\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\r\n } else {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar AxiosError = require('../core/AxiosError');\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * A `CanceledError` is an object that is thrown when an operation is canceled.\r\n *\r\n * @class\r\n * @param {string=} message The message.\r\n * @param {Object=} config The config.\r\n * @param {Object=} request The request.\r\n */\r\nfunction CanceledError(message, config, request) {\r\n // eslint-disable-next-line no-eq-null,eqeqeq\r\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\r\n this.name = 'CanceledError';\r\n}\r\n\r\nutils.inherits(CanceledError, AxiosError, {\r\n __CANCEL__: true\r\n});\r\n\r\nmodule.exports = CanceledError;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar settle = require('./../core/settle');\r\nvar cookies = require('./../helpers/cookies');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar buildFullPath = require('../core/buildFullPath');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar transitionalDefaults = require('../defaults/transitional');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar parseProtocol = require('../helpers/parseProtocol');\r\nvar platform = require('../platform');\r\n\r\nmodule.exports = function xhrAdapter(config) {\r\n return new Promise(function dispatchXhrRequest(resolve, reject) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n var responseType = config.responseType;\r\n var withXSRFToken = config.withXSRFToken;\r\n var onCanceled;\r\n function done() {\r\n if (config.cancelToken) {\r\n config.cancelToken.unsubscribe(onCanceled);\r\n }\r\n\r\n if (config.signal) {\r\n config.signal.removeEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n\r\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n function onloadend() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\r\n request.responseText : request.response;\r\n var response = {\r\n data: responseData,\r\n status: request.status,\r\n statusText: request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n settle(function _resolve(value) {\r\n resolve(value);\r\n done();\r\n }, function _reject(err) {\r\n reject(err);\r\n done();\r\n }, response);\r\n\r\n // Clean up request\r\n request = null;\r\n }\r\n\r\n if ('onloadend' in request) {\r\n // Use onloadend if available\r\n request.onloadend = onloadend;\r\n } else {\r\n // Listen for ready state to emulate onloadend\r\n request.onreadystatechange = function handleLoad() {\r\n if (!request || request.readyState !== 4) {\r\n return;\r\n }\r\n\r\n // The request errored out and we didn't get a response, this will be\r\n // handled by onerror instead\r\n // With one exception: request that using file: protocol, most browsers\r\n // will return status as 0 even though it's a successful request\r\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\r\n return;\r\n }\r\n // readystate handler is calling before onerror or ontimeout handlers,\r\n // so we should call onloadend on the next 'tick'\r\n setTimeout(onloadend);\r\n };\r\n }\r\n\r\n // Handle browser request cancellation (as opposed to a manual cancellation)\r\n request.onabort = function handleAbort() {\r\n if (!request) {\r\n return;\r\n }\r\n\r\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle timeout\r\n request.ontimeout = function handleTimeout() {\r\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\r\n var transitional = config.transitional || transitionalDefaults;\r\n if (config.timeoutErrorMessage) {\r\n timeoutErrorMessage = config.timeoutErrorMessage;\r\n }\r\n reject(new AxiosError(\r\n timeoutErrorMessage,\r\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\r\n config,\r\n request));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n // Add xsrf header\r\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\r\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\r\n // Add xsrf header\r\n var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (!utils.isUndefined(config.withCredentials)) {\r\n request.withCredentials = !!config.withCredentials;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (responseType && responseType !== 'json') {\r\n request.responseType = config.responseType;\r\n }\r\n\r\n // Handle progress if needed\r\n if (typeof config.onDownloadProgress === 'function') {\r\n request.addEventListener('progress', config.onDownloadProgress);\r\n }\r\n\r\n // Not all browsers support upload events\r\n if (typeof config.onUploadProgress === 'function' && request.upload) {\r\n request.upload.addEventListener('progress', config.onUploadProgress);\r\n }\r\n\r\n if (config.cancelToken || config.signal) {\r\n // Handle cancellation\r\n // eslint-disable-next-line func-names\r\n onCanceled = function(cancel) {\r\n if (!request) {\r\n return;\r\n }\r\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\r\n request.abort();\r\n request = null;\r\n };\r\n\r\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\r\n if (config.signal) {\r\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\r\n }\r\n }\r\n\r\n // false, 0 (zero number), and '' (empty string) are valid JSON values\r\n if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') {\r\n requestData = null;\r\n }\r\n\r\n var protocol = parseProtocol(fullPath);\r\n\r\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\r\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\r\n return;\r\n }\r\n\r\n\r\n // Send the request\r\n request.send(requestData);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar AxiosError = require('./AxiosError');\r\n\r\n/**\r\n * Resolve or reject a Promise based on response status.\r\n *\r\n * @param {Function} resolve A function that resolves the promise.\r\n * @param {Function} reject A function that rejects the promise.\r\n * @param {object} response The response.\r\n */\r\nmodule.exports = function settle(resolve, reject, response) {\r\n var validateStatus = response.config.validateStatus;\r\n if (!response.status || !validateStatus || validateStatus(response.status)) {\r\n resolve(response);\r\n } else {\r\n reject(new AxiosError(\r\n 'Request failed with status code ' + response.status,\r\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\r\n response.config,\r\n response.request,\r\n response\r\n ));\r\n }\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function parseProtocol(url) {\r\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\r\n return match && match[1] || '';\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\nvar AxiosError = require('../core/AxiosError');\r\nvar transitionalDefaults = require('./transitional');\r\nvar toFormData = require('../helpers/toFormData');\r\nvar toURLEncodedForm = require('../helpers/toURLEncodedForm');\r\nvar platform = require('../platform');\r\nvar formDataToJSON = require('../helpers/formDataToJSON');\r\n\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nfunction setContentTypeIfUnset(headers, value) {\r\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = value;\r\n }\r\n}\r\n\r\nfunction getDefaultAdapter() {\r\n var adapter;\r\n if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n return adapter;\r\n}\r\n\r\nfunction stringifySafely(rawValue, parser, encoder) {\r\n if (utils.isString(rawValue)) {\r\n try {\r\n (parser || JSON.parse)(rawValue);\r\n return utils.trim(rawValue);\r\n } catch (e) {\r\n if (e.name !== 'SyntaxError') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return (encoder || JSON.stringify)(rawValue);\r\n}\r\n\r\nvar defaults = {\r\n\r\n transitional: transitionalDefaults,\r\n\r\n adapter: getDefaultAdapter(),\r\n\r\n transformRequest: [function transformRequest(data, headers) {\r\n normalizeHeaderName(headers, 'Accept');\r\n normalizeHeaderName(headers, 'Content-Type');\r\n\r\n var contentType = headers && headers['Content-Type'] || '';\r\n var hasJSONContentType = contentType.indexOf('application/json') > -1;\r\n var isObjectPayload = utils.isObject(data);\r\n\r\n if (isObjectPayload && utils.isHTMLForm(data)) {\r\n data = new FormData(data);\r\n }\r\n\r\n var isFormData = utils.isFormData(data);\r\n\r\n if (isFormData) {\r\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\r\n }\r\n\r\n if (utils.isArrayBuffer(data) ||\r\n utils.isBuffer(data) ||\r\n utils.isStream(data) ||\r\n utils.isFile(data) ||\r\n utils.isBlob(data)\r\n ) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isURLSearchParams(data)) {\r\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\r\n return data.toString();\r\n }\r\n\r\n var isFileList;\r\n\r\n if (isObjectPayload) {\r\n if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {\r\n return toURLEncodedForm(data, this.formSerializer).toString();\r\n }\r\n\r\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\r\n var _FormData = this.env && this.env.FormData;\r\n\r\n return toFormData(\r\n isFileList ? {'files[]': data} : data,\r\n _FormData && new _FormData(),\r\n this.formSerializer\r\n );\r\n }\r\n }\r\n\r\n if (isObjectPayload || hasJSONContentType ) {\r\n setContentTypeIfUnset(headers, 'application/json');\r\n return stringifySafely(data);\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponse(data) {\r\n var transitional = this.transitional || defaults.transitional;\r\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\r\n var JSONRequested = this.responseType === 'json';\r\n\r\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\r\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\r\n var strictJSONParsing = !silentJSONParsing && JSONRequested;\r\n\r\n try {\r\n return JSON.parse(data);\r\n } catch (e) {\r\n if (strictJSONParsing) {\r\n if (e.name === 'SyntaxError') {\r\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\r\n }\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n return data;\r\n }],\r\n\r\n /**\r\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\r\n * timeout is not created.\r\n */\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN',\r\n\r\n maxContentLength: -1,\r\n maxBodyLength: -1,\r\n\r\n env: {\r\n FormData: platform.classes.FormData,\r\n Blob: platform.classes.Blob\r\n },\r\n\r\n validateStatus: function validateStatus(status) {\r\n return status >= 200 && status < 300;\r\n },\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n }\r\n }\r\n};\r\n\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n defaults.headers[method] = {};\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\r\n});\r\n\r\nmodule.exports = defaults;\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\nvar toFormData = require('./toFormData');\r\nvar platform = require('../platform/');\r\n\r\nmodule.exports = function toURLEncodedForm(data, options) {\r\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\r\n visitor: function(value, key, path, helpers) {\r\n if (platform.isNode && utils.isBuffer(value)) {\r\n this.append(key, value.toString('base64'));\r\n return false;\r\n }\r\n\r\n return helpers.defaultVisitor.apply(this, arguments);\r\n }\r\n }, options));\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar defaults = require('../defaults');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Number} status HTTP status code\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, status, fns) {\r\n var context = this || defaults;\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn.call(context, data, headers, status);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function isCancel(value) {\r\n return !!(value && value.__CANCEL__);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar transformData = require('./transformData');\r\nvar isCancel = require('../cancel/isCancel');\r\nvar defaults = require('../defaults');\r\nvar CanceledError = require('../cancel/CanceledError');\r\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nfunction throwIfCancellationRequested(config) {\r\n if (config.cancelToken) {\r\n config.cancelToken.throwIfRequested();\r\n }\r\n\r\n if (config.signal && config.signal.aborted) {\r\n throw new CanceledError();\r\n }\r\n}\r\n\r\n/**\r\n * Dispatch a request to the server using the configured adapter.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Ensure headers exist\r\n config.headers = config.headers || {};\r\n\r\n // Transform request data\r\n config.data = transformData.call(\r\n config,\r\n config.data,\r\n config.headers,\r\n null,\r\n config.transformRequest\r\n );\r\n\r\n normalizeHeaderName(config.headers, 'Accept');\r\n normalizeHeaderName(config.headers, 'Content-Type');\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n var adapter = config.adapter || defaults.adapter;\r\n\r\n return adapter(config).then(function onAdapterResolution(response) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n response.data = transformData.call(\r\n config,\r\n response.data,\r\n response.headers,\r\n response.status,\r\n config.transformResponse\r\n );\r\n\r\n return response;\r\n }, function onAdapterRejection(reason) {\r\n if (!isCancel(reason)) {\r\n throwIfCancellationRequested(config);\r\n\r\n // Transform response data\r\n if (reason && reason.response) {\r\n reason.response.data = transformData.call(\r\n config,\r\n reason.response.data,\r\n reason.response.headers,\r\n reason.response.status,\r\n config.transformResponse\r\n );\r\n }\r\n }\r\n\r\n return Promise.reject(reason);\r\n });\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('../utils');\r\n\r\n/**\r\n * Config-specific merge-function which creates a new config-object\r\n * by merging two configuration objects together.\r\n *\r\n * @param {Object} config1\r\n * @param {Object} config2\r\n * @returns {Object} New object resulting from merging config2 to config1\r\n */\r\nmodule.exports = function mergeConfig(config1, config2) {\r\n // eslint-disable-next-line no-param-reassign\r\n config2 = config2 || {};\r\n var config = {};\r\n\r\n function getMergedValue(target, source) {\r\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\r\n return utils.merge(target, source);\r\n } else if (utils.isEmptyObject(source)) {\r\n return utils.merge({}, target);\r\n } else if (utils.isPlainObject(source)) {\r\n return utils.merge({}, source);\r\n } else if (utils.isArray(source)) {\r\n return source.slice();\r\n }\r\n return source;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDeepProperties(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function valueFromConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function defaultToConfig2(prop) {\r\n if (!utils.isUndefined(config2[prop])) {\r\n return getMergedValue(undefined, config2[prop]);\r\n } else if (!utils.isUndefined(config1[prop])) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n function mergeDirectKeys(prop) {\r\n if (prop in config2) {\r\n return getMergedValue(config1[prop], config2[prop]);\r\n } else if (prop in config1) {\r\n return getMergedValue(undefined, config1[prop]);\r\n }\r\n }\r\n\r\n var mergeMap = {\r\n 'url': valueFromConfig2,\r\n 'method': valueFromConfig2,\r\n 'data': valueFromConfig2,\r\n 'baseURL': defaultToConfig2,\r\n 'transformRequest': defaultToConfig2,\r\n 'transformResponse': defaultToConfig2,\r\n 'paramsSerializer': defaultToConfig2,\r\n 'timeout': defaultToConfig2,\r\n 'timeoutMessage': defaultToConfig2,\r\n 'withCredentials': defaultToConfig2,\r\n 'withXSRFToken': defaultToConfig2,\r\n 'adapter': defaultToConfig2,\r\n 'responseType': defaultToConfig2,\r\n 'xsrfCookieName': defaultToConfig2,\r\n 'xsrfHeaderName': defaultToConfig2,\r\n 'onUploadProgress': defaultToConfig2,\r\n 'onDownloadProgress': defaultToConfig2,\r\n 'decompress': defaultToConfig2,\r\n 'maxContentLength': defaultToConfig2,\r\n 'maxBodyLength': defaultToConfig2,\r\n 'beforeRedirect': defaultToConfig2,\r\n 'transport': defaultToConfig2,\r\n 'httpAgent': defaultToConfig2,\r\n 'httpsAgent': defaultToConfig2,\r\n 'cancelToken': defaultToConfig2,\r\n 'socketPath': defaultToConfig2,\r\n 'responseEncoding': defaultToConfig2,\r\n 'validateStatus': mergeDirectKeys\r\n };\r\n\r\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\r\n var merge = mergeMap[prop] || mergeDeepProperties;\r\n var configValue = merge(prop);\r\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\r\n });\r\n\r\n return config;\r\n};\r\n","module.exports = {\n \"version\": \"0.28.1\"\n};","'use strict';\r\n\r\nvar VERSION = require('../env/data').version;\r\nvar AxiosError = require('../core/AxiosError');\r\n\r\nvar validators = {};\r\n\r\n// eslint-disable-next-line func-names\r\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\r\n validators[type] = function validator(thing) {\r\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\r\n };\r\n});\r\n\r\nvar deprecatedWarnings = {};\r\n\r\n/**\r\n * Transitional option validator\r\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\r\n * @param {string?} version - deprecated version / removed since version\r\n * @param {string?} message - some message with additional info\r\n * @returns {function}\r\n */\r\nvalidators.transitional = function transitional(validator, version, message) {\r\n function formatMessage(opt, desc) {\r\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\r\n }\r\n\r\n // eslint-disable-next-line func-names\r\n return function(value, opt, opts) {\r\n if (validator === false) {\r\n throw new AxiosError(\r\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\r\n AxiosError.ERR_DEPRECATED\r\n );\r\n }\r\n\r\n if (version && !deprecatedWarnings[opt]) {\r\n deprecatedWarnings[opt] = true;\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n formatMessage(\r\n opt,\r\n ' has been deprecated since v' + version + ' and will be removed in the near future'\r\n )\r\n );\r\n }\r\n\r\n return validator ? validator(value, opt, opts) : true;\r\n };\r\n};\r\n\r\n/**\r\n * Assert object's properties type\r\n * @param {object} options\r\n * @param {object} schema\r\n * @param {boolean?} allowUnknown\r\n */\r\n\r\nfunction assertOptions(options, schema, allowUnknown) {\r\n if (typeof options !== 'object') {\r\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n var keys = Object.keys(options);\r\n var i = keys.length;\r\n while (i-- > 0) {\r\n var opt = keys[i];\r\n var validator = schema[opt];\r\n if (validator) {\r\n var value = options[opt];\r\n var result = value === undefined || validator(value, opt, options);\r\n if (result !== true) {\r\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\r\n }\r\n continue;\r\n }\r\n if (allowUnknown !== true) {\r\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n assertOptions: assertOptions,\r\n validators: validators\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('../helpers/buildURL');\r\nvar InterceptorManager = require('./InterceptorManager');\r\nvar dispatchRequest = require('./dispatchRequest');\r\nvar mergeConfig = require('./mergeConfig');\r\nvar buildFullPath = require('./buildFullPath');\r\nvar validator = require('../helpers/validator');\r\n\r\nvar validators = validator.validators;\r\n/**\r\n * Create a new instance of Axios\r\n *\r\n * @param {Object} instanceConfig The default config for the instance\r\n */\r\nfunction Axios(instanceConfig) {\r\n this.defaults = instanceConfig;\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\n/**\r\n * Dispatch a request\r\n *\r\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\r\n * @param {?Object} config\r\n */\r\nAxios.prototype.request = function request(configOrUrl, config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof configOrUrl === 'string') {\r\n config = config || {};\r\n config.url = configOrUrl;\r\n } else {\r\n config = configOrUrl || {};\r\n }\r\n\r\n config = mergeConfig(this.defaults, config);\r\n\r\n // Set config.method\r\n if (config.method) {\r\n config.method = config.method.toLowerCase();\r\n } else if (this.defaults.method) {\r\n config.method = this.defaults.method.toLowerCase();\r\n } else {\r\n config.method = 'get';\r\n }\r\n\r\n var transitional = config.transitional;\r\n\r\n if (transitional !== undefined) {\r\n validator.assertOptions(transitional, {\r\n silentJSONParsing: validators.transitional(validators.boolean),\r\n forcedJSONParsing: validators.transitional(validators.boolean),\r\n clarifyTimeoutError: validators.transitional(validators.boolean)\r\n }, false);\r\n }\r\n\r\n var paramsSerializer = config.paramsSerializer;\r\n\r\n if (paramsSerializer !== undefined) {\r\n validator.assertOptions(paramsSerializer, {\r\n encode: validators.function,\r\n serialize: validators.function\r\n }, true);\r\n }\r\n\r\n utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer});\r\n\r\n // filter out skipped interceptors\r\n var requestInterceptorChain = [];\r\n var synchronousRequestInterceptors = true;\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\r\n return;\r\n }\r\n\r\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\r\n\r\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var responseInterceptorChain = [];\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n var promise;\r\n\r\n if (!synchronousRequestInterceptors) {\r\n var chain = [dispatchRequest, undefined];\r\n\r\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\r\n chain = chain.concat(responseInterceptorChain);\r\n\r\n promise = Promise.resolve(config);\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n\r\n var newConfig = config;\r\n while (requestInterceptorChain.length) {\r\n var onFulfilled = requestInterceptorChain.shift();\r\n var onRejected = requestInterceptorChain.shift();\r\n try {\r\n newConfig = onFulfilled(newConfig);\r\n } catch (error) {\r\n onRejected(error);\r\n break;\r\n }\r\n }\r\n\r\n try {\r\n promise = dispatchRequest(newConfig);\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n\r\n while (responseInterceptorChain.length) {\r\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nAxios.prototype.getUri = function getUri(config) {\r\n config = mergeConfig(this.defaults, config);\r\n var fullPath = buildFullPath(config.baseURL, config.url);\r\n return buildURL(fullPath, config.params, config.paramsSerializer);\r\n};\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n url: url,\r\n data: (config || {}).data\r\n }));\r\n };\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n\r\n function generateHTTPMethod(isForm) {\r\n return function httpMethod(url, data, config) {\r\n return this.request(mergeConfig(config || {}, {\r\n method: method,\r\n headers: isForm ? {\r\n 'Content-Type': 'multipart/form-data'\r\n } : {},\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n }\r\n\r\n Axios.prototype[method] = generateHTTPMethod();\r\n\r\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\r\n});\r\n\r\nmodule.exports = Axios;\r\n","'use strict';\r\n\r\nvar CanceledError = require('./CanceledError');\r\n\r\n/**\r\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\r\n *\r\n * @class\r\n * @param {Function} executor The executor function.\r\n */\r\nfunction CancelToken(executor) {\r\n if (typeof executor !== 'function') {\r\n throw new TypeError('executor must be a function.');\r\n }\r\n\r\n var resolvePromise;\r\n\r\n this.promise = new Promise(function promiseExecutor(resolve) {\r\n resolvePromise = resolve;\r\n });\r\n\r\n var token = this;\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then(function(cancel) {\r\n if (!token._listeners) return;\r\n\r\n var i = token._listeners.length;\r\n\r\n while (i-- > 0) {\r\n token._listeners[i](cancel);\r\n }\r\n token._listeners = null;\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this.promise.then = function(onfulfilled) {\r\n var _resolve;\r\n // eslint-disable-next-line func-names\r\n var promise = new Promise(function(resolve) {\r\n token.subscribe(resolve);\r\n _resolve = resolve;\r\n }).then(onfulfilled);\r\n\r\n promise.cancel = function reject() {\r\n token.unsubscribe(_resolve);\r\n };\r\n\r\n return promise;\r\n };\r\n\r\n executor(function cancel(message, config, request) {\r\n if (token.reason) {\r\n // Cancellation has already been requested\r\n return;\r\n }\r\n\r\n token.reason = new CanceledError(message, config, request);\r\n resolvePromise(token.reason);\r\n });\r\n}\r\n\r\n/**\r\n * Throws a `CanceledError` if cancellation has been requested.\r\n */\r\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\r\n if (this.reason) {\r\n throw this.reason;\r\n }\r\n};\r\n\r\n/**\r\n * Subscribe to the cancel signal\r\n */\r\n\r\nCancelToken.prototype.subscribe = function subscribe(listener) {\r\n if (this.reason) {\r\n listener(this.reason);\r\n return;\r\n }\r\n\r\n if (this._listeners) {\r\n this._listeners.push(listener);\r\n } else {\r\n this._listeners = [listener];\r\n }\r\n};\r\n\r\n/**\r\n * Unsubscribe from the cancel signal\r\n */\r\n\r\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\r\n if (!this._listeners) {\r\n return;\r\n }\r\n var index = this._listeners.indexOf(listener);\r\n if (index !== -1) {\r\n this._listeners.splice(index, 1);\r\n }\r\n};\r\n\r\n/**\r\n * Returns an object that contains a new `CancelToken` and a function that, when called,\r\n * cancels the `CancelToken`.\r\n */\r\nCancelToken.source = function source() {\r\n var cancel;\r\n var token = new CancelToken(function executor(c) {\r\n cancel = c;\r\n });\r\n return {\r\n token: token,\r\n cancel: cancel\r\n };\r\n};\r\n\r\nmodule.exports = CancelToken;\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\nvar bind = require('./helpers/bind');\r\nvar Axios = require('./core/Axios');\r\nvar mergeConfig = require('./core/mergeConfig');\r\nvar defaults = require('./defaults');\r\nvar formDataToJSON = require('./helpers/formDataToJSON');\r\n/**\r\n * Create an instance of Axios\r\n *\r\n * @param {Object} defaultConfig The default config for the instance\r\n * @return {Axios} A new instance of Axios\r\n */\r\nfunction createInstance(defaultConfig) {\r\n var context = new Axios(defaultConfig);\r\n var instance = bind(Axios.prototype.request, context);\r\n\r\n // Copy axios.prototype to instance\r\n utils.extend(instance, Axios.prototype, context);\r\n\r\n // Copy context to instance\r\n utils.extend(instance, context);\r\n\r\n // Factory for creating new instances\r\n instance.create = function create(instanceConfig) {\r\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\r\n };\r\n\r\n return instance;\r\n}\r\n\r\n// Create the default instance to be exported\r\nvar axios = createInstance(defaults);\r\n\r\n// Expose Axios class to allow class inheritance\r\naxios.Axios = Axios;\r\n\r\n// Expose Cancel & CancelToken\r\naxios.CanceledError = require('./cancel/CanceledError');\r\naxios.CancelToken = require('./cancel/CancelToken');\r\naxios.isCancel = require('./cancel/isCancel');\r\naxios.VERSION = require('./env/data').version;\r\naxios.toFormData = require('./helpers/toFormData');\r\n\r\n// Expose AxiosError class\r\naxios.AxiosError = require('../lib/core/AxiosError');\r\n\r\n// alias for CanceledError for backward compatibility\r\naxios.Cancel = axios.CanceledError;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose isAxiosError\r\naxios.isAxiosError = require('./helpers/isAxiosError');\r\n\r\naxios.formToJSON = function(thing) {\r\n return formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\r\n};\r\n\r\nmodule.exports = axios;\r\n\r\n// Allow use of default import syntax in TypeScript\r\nmodule.exports.default = axios;\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Determines whether the payload is an error thrown by Axios\r\n *\r\n * @param {*} payload The value to test\r\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\r\n */\r\nmodule.exports = function isAxiosError(payload) {\r\n return utils.isObject(payload) && (payload.isAxiosError === true);\r\n};\r\n"],"names":["cache","bind","fn","thisArg","apply","arguments","toString","Object","prototype","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","isArray","val","Array","isUndefined","isArrayBuffer","isNumber","isObject","isPlainObject","getPrototypeOf","isDate","isFile","isBlob","isFileList","isFunction","isURLSearchParams","forEach","obj","i","l","length","key","hasOwnProperty","TypedArray","isTypedArray","Uint8Array","_hasOwnProperty","isHTMLForm","prop","utils","isBuffer","constructor","isFormData","pattern","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isEmptyObject","keys","isStream","pipe","isStandardBrowserEnv","product","navigator","window","document","merge","result","assignValue","extend","a","b","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","getOwnPropertyNames","endsWith","searchString","position","String","undefined","lastIndex","indexOf","toArray","arr","forEachEntry","iterator","Symbol","next","done","pair","value","matchAll","regExp","matches","exec","push","AxiosError","message","code","config","request","response","Error","this","captureStackTrace","stack","name","toJSON","description","number","fileName","lineNumber","columnNumber","status","defineProperties","defineProperty","from","error","customProps","axiosError","cause","AxiosError_1","self","isVisitable","removeBrackets","renderKey","path","dots","concat","map","token","join","predicates","test","toFormData_1","formData","options","TypeError","envFormData","metaTokens","indexes","option","source","visitor","defaultVisitor","useBlob","Blob","append","toStringTag","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","toFormData","encoder","_encode","AxiosURLSearchParams_1","buildURL","url","hashmarkIndex","serializedParams","serializeFn","serialize","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","h","InterceptorManager_1","normalizeHeaderName","headers","normalizedName","toUpperCase","transitional","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform","isBrowser","classes","URLSearchParams","protocols","formDataToJSON_1","buildPath","target","isNumericKey","Number","isFinite","isLast","len","arrayToObject","entries","parsePropPath","cookies","write","expires","domain","secure","cookie","Date","toGMTString","read","RegExp","decodeURIComponent","remove","now","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","ignoreDuplicateOf","isURLSameOrigin","originURL","msie","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","location","requestURL","parsed","CanceledError","ERR_CANCELED","__CANCEL__","CanceledError_1","xhr","Promise","resolve","reject","onCanceled","requestData","data","requestHeaders","responseType","withXSRFToken","cancelToken","unsubscribe","signal","removeEventListener","XMLHttpRequest","auth","username","password","unescape","Authorization","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","split","line","validateStatus","ERR_BAD_REQUEST","ERR_BAD_RESPONSE","Math","floor","settle","err","responseText","statusText","open","method","paramsSerializer","timeout","onreadystatechange","readyState","responseURL","setTimeout","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","transitionalDefaults","ETIMEDOUT","xsrfValue","xsrfHeaderName","xsrfCookieName","setRequestHeader","withCredentials","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","subscribe","aborted","send","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","process","require$$0","transformRequest","contentType","hasJSONContentType","isObjectPayload","formDataToJSON","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","e","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","maxContentLength","maxBodyLength","common","Accept","defaults_1","transformData","fns","context","isCancel","throwIfCancellationRequested","throwIfRequested","dispatchRequest","then","reason","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","boolean","function","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","shift","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","Axios_1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","listener","splice","c","CancelToken_1","axios","createInstance","defaultConfig","instance","require$$1","require$$2","require$$3","require$$4","require$$5","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","axios_1","_default"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/index.d.ts b/node_modules/axios/index.d.ts new file mode 100644 index 0000000..4ef1a65 --- /dev/null +++ b/node_modules/axios/index.d.ts @@ -0,0 +1,340 @@ +// TypeScript Version: 4.1 +type HeaderValue = string | string[] | number | boolean; + +type AxiosHeaders = Record>; + +type MethodsHeaders = { + [Key in Method as Lowercase]: AxiosHeaders; +}; + +interface CommonHeaders { + common: AxiosHeaders; +} + +export type AxiosRequestHeaders = Partial; + +export type AxiosResponseHeaders = Partial> & { + "set-cookie"?: string[] +}; + +export interface AxiosRequestTransformer { + (data: any, headers: AxiosRequestHeaders): any; +} + +export interface AxiosResponseTransformer { + (data: any, headers?: AxiosResponseHeaders, status?: number): any; +} + +export interface AxiosAdapter { + (config: AxiosRequestConfig): AxiosPromise; +} + +export interface AxiosBasicCredentials { + username: string; + password: string; +} + +export interface AxiosProxyConfig { + host: string; + port: number; + auth?: { + username: string; + password: string; + }; + protocol?: string; +} + +export type Method = + | 'get' | 'GET' + | 'delete' | 'DELETE' + | 'head' | 'HEAD' + | 'options' | 'OPTIONS' + | 'post' | 'POST' + | 'put' | 'PUT' + | 'patch' | 'PATCH' + | 'purge' | 'PURGE' + | 'link' | 'LINK' + | 'unlink' | 'UNLINK'; + +export type ResponseType = + | 'arraybuffer' + | 'blob' + | 'document' + | 'json' + | 'text' + | 'stream'; + + export type responseEncoding = + | 'ascii' | 'ASCII' + | 'ansi' | 'ANSI' + | 'binary' | 'BINARY' + | 'base64' | 'BASE64' + | 'base64url' | 'BASE64URL' + | 'hex' | 'HEX' + | 'latin1' | 'LATIN1' + | 'ucs-2' | 'UCS-2' + | 'ucs2' | 'UCS2' + | 'utf-8' | 'UTF-8' + | 'utf8' | 'UTF8' + | 'utf16le' | 'UTF16LE'; + +export interface TransitionalOptions { + silentJSONParsing?: boolean; + forcedJSONParsing?: boolean; + clarifyTimeoutError?: boolean; +} + +export interface GenericAbortSignal { + aborted: boolean; + onabort: ((...args: any) => any) | null; + addEventListener: (...args: any) => any; + removeEventListener: (...args: any) => any; +} + +export interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; +} + +export interface SerializerVisitor { + ( + this: GenericFormData, + value: any, + key: string | number, + path: null | Array, + helpers: FormDataVisitorHelpers + ): boolean; +} + +export interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; +} + +// tslint:disable-next-line +export interface FormSerializerOptions extends SerializerOptions { +} + +export interface ParamEncoder { + (value: any, defaultEncoder: (value: any) => any): any; +} + +export interface CustomParamsSerializer { + (params: Record, options?: ParamsSerializerOptions): string; +} + +export interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; +} + +export interface AxiosRequestConfig { + url?: string; + method?: Method | string; + baseURL?: string; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: AxiosRequestHeaders; + params?: any; + paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer; + data?: D; + timeout?: number; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapter; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + responseEncoding?: responseEncoding | string; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: ProgressEvent) => void; + onDownloadProgress?: (progressEvent: ProgressEvent) => void; + maxContentLength?: number; + validateStatus?: ((status: number) => boolean) | null; + maxBodyLength?: number; + maxRedirects?: number; + beforeRedirect?: (options: Record, responseDetails: {headers: Record}) => void; + socketPath?: string | null; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken; + decompress?: boolean; + transitional?: TransitionalOptions; + signal?: GenericAbortSignal; + insecureHTTPParser?: boolean; + env?: { + FormData?: new (...args: any[]) => object; + }; + formSerializer?: FormSerializerOptions; + withXSRFToken?: boolean | ((config: AxiosRequestConfig) => boolean | undefined); +} + +export interface HeadersDefaults { + common: AxiosRequestHeaders; + delete: AxiosRequestHeaders; + get: AxiosRequestHeaders; + head: AxiosRequestHeaders; + post: AxiosRequestHeaders; + put: AxiosRequestHeaders; + patch: AxiosRequestHeaders; + options?: AxiosRequestHeaders; + purge?: AxiosRequestHeaders; + link?: AxiosRequestHeaders; + unlink?: AxiosRequestHeaders; +} + +export interface AxiosDefaults extends Omit, 'headers'> { + headers: HeadersDefaults; +} + +export interface CreateAxiosDefaults extends Omit, 'headers'> { + headers?: AxiosRequestHeaders | Partial; +} + +export interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: AxiosResponseHeaders; + config: AxiosRequestConfig; + request?: any; +} + +export class AxiosError extends Error { + constructor( + message?: string, + code?: string, + config?: AxiosRequestConfig, + request?: any, + response?: AxiosResponse + ); + + config?: AxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + isAxiosError: boolean; + status?: number; + toJSON: () => object; + cause?: Error; + static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_DEPRECATED = "ERR_DEPRECATED"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} + +export class CanceledError extends AxiosError { +} + +export type AxiosPromise = Promise>; + +export interface CancelStatic { + new (message?: string): Cancel; +} + +export interface Cancel { + message: string | undefined; +} + +export interface Canceler { + (message?: string, config?: AxiosRequestConfig, request?: any): void; +} + +export interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; +} + +export interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; +} + +export interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; +} + +export interface AxiosInterceptorOptions { + synchronous?: boolean; + runWhen?: (config: AxiosRequestConfig) => boolean; +} + +export interface AxiosInterceptorManager { + use(onFulfilled?: (value: V) => T | Promise, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions): number; + eject(id: number): void; +} + +export class Axios { + constructor(config?: AxiosRequestConfig); + defaults: AxiosDefaults; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri(config?: AxiosRequestConfig): string; + request, D = any>(config: AxiosRequestConfig): Promise; + get, D = any>(url: string, config?: AxiosRequestConfig): Promise; + delete, D = any>(url: string, config?: AxiosRequestConfig): Promise; + head, D = any>(url: string, config?: AxiosRequestConfig): Promise; + options, D = any>(url: string, config?: AxiosRequestConfig): Promise; + post, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + put, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + patch, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + postForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + putForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + patchForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; +} + +export interface AxiosInstance extends Axios { + , D = any>(config: AxiosRequestConfig): AxiosPromise; + , D = any>(url: string, config?: AxiosRequestConfig): AxiosPromise; + + defaults: Omit & { + headers: HeadersDefaults & { + [key: string]: string | number | boolean | undefined + } + }; +} + +export interface GenericFormData { + append(name: string, value: any, options?: any): any; +} + +export interface GenericHTMLFormElement { + name: string; + method: string; + submit(): void; +} + +export interface AxiosStatic extends AxiosInstance { + create(config?: CreateAxiosDefaults): AxiosInstance; + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + Axios: typeof Axios; + AxiosError: typeof AxiosError; + readonly VERSION: string; + isCancel(value: any): value is Cancel; + all(values: Array>): Promise; + spread(callback: (...args: T[]) => R): (array: T[]) => R; + isAxiosError(payload: any): payload is AxiosError; + toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; + formToJSON(form: GenericFormData|GenericHTMLFormElement): object; +} + +declare const axios: AxiosStatic; + +export default axios; diff --git a/node_modules/axios/index.js b/node_modules/axios/index.js new file mode 100644 index 0000000..79dfd09 --- /dev/null +++ b/node_modules/axios/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/axios'); \ No newline at end of file diff --git a/node_modules/axios/lib/adapters/README.md b/node_modules/axios/lib/adapters/README.md new file mode 100644 index 0000000..68f1118 --- /dev/null +++ b/node_modules/axios/lib/adapters/README.md @@ -0,0 +1,37 @@ +# axios // adapters + +The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received. + +## Example + +```js +var settle = require('./../core/settle'); + +module.exports = function myAdapter(config) { + // At this point: + // - config has been merged with defaults + // - request transformers have already run + // - request interceptors have already run + + // Make the request using config provided + // Upon response settle the Promise + + return new Promise(function(resolve, reject) { + + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // From here: + // - response transformers will run + // - response interceptors will run + }); +} +``` diff --git a/node_modules/axios/lib/adapters/http.js b/node_modules/axios/lib/adapters/http.js new file mode 100644 index 0000000..fc87251 --- /dev/null +++ b/node_modules/axios/lib/adapters/http.js @@ -0,0 +1,463 @@ +'use strict'; + +var utils = require('./../utils'); +var settle = require('./../core/settle'); +var buildFullPath = require('../core/buildFullPath'); +var buildURL = require('./../helpers/buildURL'); +var getProxyForUrl = require('proxy-from-env').getProxyForUrl; +var http = require('http'); +var https = require('https'); +var httpFollow = require('follow-redirects/http'); +var httpsFollow = require('follow-redirects/https'); +var url = require('url'); +var zlib = require('zlib'); +var VERSION = require('./../env/data').version; +var transitionalDefaults = require('../defaults/transitional'); +var AxiosError = require('../core/AxiosError'); +var CanceledError = require('../cancel/CanceledError'); +var platform = require('../platform'); +var fromDataURI = require('../helpers/fromDataURI'); +var stream = require('stream'); + +var isHttps = /https:?/; + +var supportedProtocols = platform.protocols.map(function(protocol) { + return protocol + ':'; +}); + +function dispatchBeforeRedirect(options) { + if (options.beforeRedirects.proxy) { + options.beforeRedirects.proxy(options); + } + if (options.beforeRedirects.config) { + options.beforeRedirects.config(options); + } +} + +/** + * + * @param {http.ClientRequestArgs} options + * @param {AxiosProxyConfig} configProxy + * @param {string} location + */ +function setProxy(options, configProxy, location) { + var proxy = configProxy; + if (!proxy && proxy !== false) { + var proxyUrl = getProxyForUrl(location); + if (proxyUrl) { + proxy = url.parse(proxyUrl); + // replace 'host' since the proxy object is not a URL object + proxy.host = proxy.hostname; + } + } + if (proxy) { + // Basic proxy authorization + if (proxy.auth) { + // Support proxy auth object form + if (proxy.auth.username || proxy.auth.password) { + proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || ''); + } + var base64 = Buffer + .from(proxy.auth, 'utf8') + .toString('base64'); + options.headers['Proxy-Authorization'] = 'Basic ' + base64; + } + + options.headers.host = options.hostname + (options.port ? ':' + options.port : ''); + options.hostname = proxy.host; + options.host = proxy.host; + options.port = proxy.port; + options.path = location; + if (proxy.protocol) { + options.protocol = proxy.protocol; + } + } + + options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) { + // Configure proxy for redirected request, passing the original config proxy to apply + // the exact same logic as if the redirected request was performed by axios directly. + setProxy(redirectOptions, configProxy, redirectOptions.href); + }; +} + +/*eslint consistent-return:0*/ +module.exports = function httpAdapter(config) { + return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) { + var onCanceled; + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled); + } + + if (config.signal) { + config.signal.removeEventListener('abort', onCanceled); + } + } + var resolve = function resolve(value) { + done(); + resolvePromise(value); + }; + var rejected = false; + var reject = function reject(value) { + done(); + rejected = true; + rejectPromise(value); + }; + var data = config.data; + var responseType = config.responseType; + var responseEncoding = config.responseEncoding; + var method = config.method.toUpperCase(); + + // Parse url + var fullPath = buildFullPath(config.baseURL, config.url); + var parsed = url.parse(fullPath); + var protocol = parsed.protocol || supportedProtocols[0]; + + if (protocol === 'data:') { + var convertedData; + + if (method !== 'GET') { + return settle(resolve, reject, { + status: 405, + statusText: 'method not allowed', + headers: {}, + config: config + }); + } + + try { + convertedData = fromDataURI(config.url, responseType === 'blob', { + Blob: config.env && config.env.Blob + }); + } catch (err) { + throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config); + } + + if (responseType === 'text') { + convertedData = convertedData.toString(responseEncoding); + + if (!responseEncoding || responseEncoding === 'utf8') { + data = utils.stripBOM(convertedData); + } + } else if (responseType === 'stream') { + convertedData = stream.Readable.from(convertedData); + } + + return settle(resolve, reject, { + data: convertedData, + status: 200, + statusText: 'OK', + headers: {}, + config: config + }); + } + + if (supportedProtocols.indexOf(protocol) === -1) { + return reject(new AxiosError( + 'Unsupported protocol ' + protocol, + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + var headers = config.headers; + var headerNames = {}; + + Object.keys(headers).forEach(function storeLowerName(name) { + headerNames[name.toLowerCase()] = name; + }); + + // Set User-Agent (required by some servers) + // See https://github.com/axios/axios/issues/69 + if ('user-agent' in headerNames) { + // User-Agent is specified; handle case where no UA header is desired + if (!headers[headerNames['user-agent']]) { + delete headers[headerNames['user-agent']]; + } + // Otherwise, use specified value + } else { + // Only set header if it hasn't been set in config + headers['User-Agent'] = 'axios/' + VERSION; + } + + // support for https://www.npmjs.com/package/form-data api + if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) { + Object.assign(headers, data.getHeaders()); + } else if (data && !utils.isStream(data)) { + if (Buffer.isBuffer(data)) { + // Nothing to do... + } else if (utils.isArrayBuffer(data)) { + data = Buffer.from(new Uint8Array(data)); + } else if (utils.isString(data)) { + data = Buffer.from(data, 'utf-8'); + } else { + return reject(new AxiosError( + 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { + return reject(new AxiosError( + 'Request body larger than maxBodyLength limit', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + // Add Content-Length header if data exists + if (!headerNames['content-length']) { + headers['Content-Length'] = data.length; + } + } + + // HTTP basic authentication + var auth = undefined; + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password || ''; + auth = username + ':' + password; + } + + if (!auth && parsed.auth) { + var urlAuth = parsed.auth.split(':'); + var urlUsername = urlAuth[0] || ''; + var urlPassword = urlAuth[1] || ''; + auth = urlUsername + ':' + urlPassword; + } + + if (auth && headerNames.authorization) { + delete headers[headerNames.authorization]; + } + + try { + buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''); + } catch (err) { + var customErr = new Error(err.message); + customErr.config = config; + customErr.url = config.url; + customErr.exists = true; + reject(customErr); + } + + var options = { + path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''), + method: method, + headers: headers, + agents: { http: config.httpAgent, https: config.httpsAgent }, + auth: auth, + protocol: protocol, + beforeRedirect: dispatchBeforeRedirect, + beforeRedirects: {} + }; + + if (config.socketPath) { + options.socketPath = config.socketPath; + } else { + options.hostname = parsed.hostname; + options.port = parsed.port; + setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); + } + + var transport; + var isHttpsRequest = isHttps.test(options.protocol); + options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; + if (config.transport) { + transport = config.transport; + } else if (config.maxRedirects === 0) { + transport = isHttpsRequest ? https : http; + } else { + if (config.maxRedirects) { + options.maxRedirects = config.maxRedirects; + } + if (config.beforeRedirect) { + options.beforeRedirects.config = config.beforeRedirect; + } + transport = isHttpsRequest ? httpsFollow : httpFollow; + } + + if (config.maxBodyLength > -1) { + options.maxBodyLength = config.maxBodyLength; + } else { + // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited + options.maxBodyLength = Infinity; + } + + if (config.insecureHTTPParser) { + options.insecureHTTPParser = config.insecureHTTPParser; + } + + // Create the request + var req = transport.request(options, function handleResponse(res) { + if (req.aborted) return; + + // uncompress the response body transparently if required + var responseStream = res; + + // return the last request in case of redirects + var lastRequest = res.req || req; + + // if decompress disabled we should not decompress + if (config.decompress !== false) { + // if no content, but headers still say that it is encoded, + // remove the header not confuse downstream operations + if (data && data.length === 0 && res.headers['content-encoding']) { + delete res.headers['content-encoding']; + } + + switch (res.headers['content-encoding']) { + /*eslint default-case:0*/ + case 'gzip': + case 'compress': + case 'deflate': + // add the unzipper to the body stream processing pipeline + responseStream = responseStream.pipe(zlib.createUnzip()); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + } + } + + var response = { + status: res.statusCode, + statusText: res.statusMessage, + headers: res.headers, + config: config, + request: lastRequest + }; + + if (responseType === 'stream') { + response.data = responseStream; + settle(resolve, reject, response); + } else { + var responseBuffer = []; + var totalResponseBytes = 0; + responseStream.on('data', function handleStreamData(chunk) { + responseBuffer.push(chunk); + totalResponseBytes += chunk.length; + + // make sure the content length is not over the maxContentLength if specified + if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { + // stream.destroy() emit aborted event before calling reject() on Node.js v16 + rejected = true; + responseStream.destroy(); + reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError.ERR_BAD_RESPONSE, config, lastRequest)); + } + }); + + responseStream.on('aborted', function handlerStreamAborted() { + if (rejected) { + return; + } + responseStream.destroy(); + reject(new AxiosError( + 'maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError.ERR_BAD_RESPONSE, + config, + lastRequest + )); + }); + + responseStream.on('error', function handleStreamError(err) { + if (req.aborted) return; + reject(AxiosError.from(err, null, config, lastRequest)); + }); + + responseStream.on('end', function handleStreamEnd() { + try { + var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); + if (responseType !== 'arraybuffer') { + responseData = responseData.toString(responseEncoding); + if (!responseEncoding || responseEncoding === 'utf8') { + responseData = utils.stripBOM(responseData); + } + } + response.data = responseData; + } catch (err) { + reject(AxiosError.from(err, null, config, response.request, response)); + } + settle(resolve, reject, response); + }); + } + }); + + // Handle errors + req.on('error', function handleRequestError(err) { + // @todo remove + // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return; + reject(AxiosError.from(err, null, config, req)); + }); + + // set tcp keep alive to prevent drop connection by peer + req.on('socket', function handleRequestSocket(socket) { + // default interval of sending ack packet is 1 minute + socket.setKeepAlive(true, 1000 * 60); + }); + + // Handle request timeout + if (config.timeout) { + // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. + var timeout = parseInt(config.timeout, 10); + + if (isNaN(timeout)) { + reject(new AxiosError( + 'error trying to parse `config.timeout` to int', + AxiosError.ERR_BAD_OPTION_VALUE, + config, + req + )); + + return; + } + + // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. + // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. + // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. + // And then these socket which be hang up will devouring CPU little by little. + // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. + req.setTimeout(timeout, function handleRequestTimeout() { + req.abort(); + var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + req + )); + }); + } + + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function(cancel) { + if (req.aborted) return; + + req.abort(); + reject(!cancel || cancel.type ? new CanceledError(null, config, req) : cancel); + }; + + config.cancelToken && config.cancelToken.subscribe(onCanceled); + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + } + } + + + // Send the request + if (utils.isStream(data)) { + data.on('error', function handleStreamError(err) { + reject(AxiosError.from(err, config, null, req)); + }).pipe(req); + } else { + req.end(data); + } + }); +}; diff --git a/node_modules/axios/lib/adapters/xhr.js b/node_modules/axios/lib/adapters/xhr.js new file mode 100644 index 0000000..f26e0f3 --- /dev/null +++ b/node_modules/axios/lib/adapters/xhr.js @@ -0,0 +1,226 @@ +'use strict'; + +var utils = require('./../utils'); +var settle = require('./../core/settle'); +var cookies = require('./../helpers/cookies'); +var buildURL = require('./../helpers/buildURL'); +var buildFullPath = require('../core/buildFullPath'); +var parseHeaders = require('./../helpers/parseHeaders'); +var isURLSameOrigin = require('./../helpers/isURLSameOrigin'); +var transitionalDefaults = require('../defaults/transitional'); +var AxiosError = require('../core/AxiosError'); +var CanceledError = require('../cancel/CanceledError'); +var parseProtocol = require('../helpers/parseProtocol'); +var platform = require('../platform'); + +module.exports = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + var responseType = config.responseType; + var withXSRFToken = config.withXSRFToken; + var onCanceled; + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled); + } + + if (config.signal) { + config.signal.removeEventListener('abort', onCanceled); + } + } + + if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)); + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) { + // Add xsrf header + var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName); + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = config.responseType; + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function(cancel) { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + request.abort(); + request = null; + }; + + config.cancelToken && config.cancelToken.subscribe(onCanceled); + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + } + } + + // false, 0 (zero number), and '' (empty string) are valid JSON values + if (!requestData && requestData !== false && requestData !== 0 && requestData !== '') { + requestData = null; + } + + var protocol = parseProtocol(fullPath); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData); + }); +}; diff --git a/node_modules/axios/lib/axios.js b/node_modules/axios/lib/axios.js new file mode 100644 index 0000000..bbbe301 --- /dev/null +++ b/node_modules/axios/lib/axios.js @@ -0,0 +1,68 @@ +'use strict'; + +var utils = require('./utils'); +var bind = require('./helpers/bind'); +var Axios = require('./core/Axios'); +var mergeConfig = require('./core/mergeConfig'); +var defaults = require('./defaults'); +var formDataToJSON = require('./helpers/formDataToJSON'); +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + var context = new Axios(defaultConfig); + var instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +var axios = createInstance(defaults); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios; + +// Expose Cancel & CancelToken +axios.CanceledError = require('./cancel/CanceledError'); +axios.CancelToken = require('./cancel/CancelToken'); +axios.isCancel = require('./cancel/isCancel'); +axios.VERSION = require('./env/data').version; +axios.toFormData = require('./helpers/toFormData'); + +// Expose AxiosError class +axios.AxiosError = require('../lib/core/AxiosError'); + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; +axios.spread = require('./helpers/spread'); + +// Expose isAxiosError +axios.isAxiosError = require('./helpers/isAxiosError'); + +axios.formToJSON = function(thing) { + return formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing); +}; + +module.exports = axios; + +// Allow use of default import syntax in TypeScript +module.exports.default = axios; diff --git a/node_modules/axios/lib/cancel/CancelToken.js b/node_modules/axios/lib/cancel/CancelToken.js new file mode 100644 index 0000000..c2fe64c --- /dev/null +++ b/node_modules/axios/lib/cancel/CancelToken.js @@ -0,0 +1,118 @@ +'use strict'; + +var CanceledError = require('./CanceledError'); + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ +function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function(cancel) { + if (!token._listeners) return; + + var i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function(onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function(resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError(message, config, request); + resolvePromise(token.reason); + }); +} + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } +}; + +/** + * Subscribe to the cancel signal + */ + +CancelToken.prototype.subscribe = function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } +}; + +/** + * Unsubscribe from the cancel signal + */ + +CancelToken.prototype.unsubscribe = function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } +}; + +/** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ +CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; +}; + +module.exports = CancelToken; diff --git a/node_modules/axios/lib/cancel/CanceledError.js b/node_modules/axios/lib/cancel/CanceledError.js new file mode 100644 index 0000000..1bac50e --- /dev/null +++ b/node_modules/axios/lib/cancel/CanceledError.js @@ -0,0 +1,24 @@ +'use strict'; + +var AxiosError = require('../core/AxiosError'); +var utils = require('../utils'); + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + */ +function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + this.name = 'CanceledError'; +} + +utils.inherits(CanceledError, AxiosError, { + __CANCEL__: true +}); + +module.exports = CanceledError; diff --git a/node_modules/axios/lib/cancel/isCancel.js b/node_modules/axios/lib/cancel/isCancel.js new file mode 100644 index 0000000..051f3ae --- /dev/null +++ b/node_modules/axios/lib/cancel/isCancel.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function isCancel(value) { + return !!(value && value.__CANCEL__); +}; diff --git a/node_modules/axios/lib/core/Axios.js b/node_modules/axios/lib/core/Axios.js new file mode 100644 index 0000000..8441089 --- /dev/null +++ b/node_modules/axios/lib/core/Axios.js @@ -0,0 +1,172 @@ +'use strict'; + +var utils = require('./../utils'); +var buildURL = require('../helpers/buildURL'); +var InterceptorManager = require('./InterceptorManager'); +var dispatchRequest = require('./dispatchRequest'); +var mergeConfig = require('./mergeConfig'); +var buildFullPath = require('./buildFullPath'); +var validator = require('../helpers/validator'); + +var validators = validator.validators; +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ +function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; +} + +/** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + */ +Axios.prototype.request = function request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + var transitional = config.transitional; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + var paramsSerializer = config.paramsSerializer; + + if (paramsSerializer !== undefined) { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + + utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer}); + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + var promise; + + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest, undefined]; + + Array.prototype.unshift.apply(chain, requestInterceptorChain); + chain = chain.concat(responseInterceptorChain); + + promise = Promise.resolve(config); + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + } + + + var newConfig = config; + while (requestInterceptorChain.length) { + var onFulfilled = requestInterceptorChain.shift(); + var onRejected = requestInterceptorChain.shift(); + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected(error); + break; + } + } + + try { + promise = dispatchRequest(newConfig); + } catch (error) { + return Promise.reject(error); + } + + while (responseInterceptorChain.length) { + promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); + } + + return promise; +}; + +Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url); + return buildURL(fullPath, config.params, config.paramsSerializer); +}; + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +module.exports = Axios; diff --git a/node_modules/axios/lib/core/AxiosError.js b/node_modules/axios/lib/core/AxiosError.js new file mode 100644 index 0000000..291dc33 --- /dev/null +++ b/node_modules/axios/lib/core/AxiosError.js @@ -0,0 +1,97 @@ +'use strict'; + +var utils = require('../utils'); + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + response && (this.response = response); +} + +utils.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code, + status: this.response && this.response.status ? this.response.status : null + }; + } +}); + +var prototype = AxiosError.prototype; +var descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' +// eslint-disable-next-line func-names +].forEach(function(code) { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = function(error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype); + + utils.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +module.exports = AxiosError; diff --git a/node_modules/axios/lib/core/InterceptorManager.js b/node_modules/axios/lib/core/InterceptorManager.js new file mode 100644 index 0000000..c3e10ef --- /dev/null +++ b/node_modules/axios/lib/core/InterceptorManager.js @@ -0,0 +1,63 @@ +'use strict'; + +var utils = require('./../utils'); + +function InterceptorManager() { + this.handlers = []; +} + +/** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ +InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; +}; + +/** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ +InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } +}; + +/** + * Clear all interceptors from the stack + */ +InterceptorManager.prototype.clear = function clear() { + if (this.handlers) { + this.handlers = []; + } +}; + +/** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ +InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); +}; + +module.exports = InterceptorManager; diff --git a/node_modules/axios/lib/core/README.md b/node_modules/axios/lib/core/README.md new file mode 100644 index 0000000..84559ce --- /dev/null +++ b/node_modules/axios/lib/core/README.md @@ -0,0 +1,8 @@ +# axios // core + +The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are: + +- Dispatching requests + - Requests sent via `adapters/` (see lib/adapters/README.md) +- Managing interceptors +- Handling config diff --git a/node_modules/axios/lib/core/buildFullPath.js b/node_modules/axios/lib/core/buildFullPath.js new file mode 100644 index 0000000..00b2b05 --- /dev/null +++ b/node_modules/axios/lib/core/buildFullPath.js @@ -0,0 +1,20 @@ +'use strict'; + +var isAbsoluteURL = require('../helpers/isAbsoluteURL'); +var combineURLs = require('../helpers/combineURLs'); + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ +module.exports = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +}; diff --git a/node_modules/axios/lib/core/dispatchRequest.js b/node_modules/axios/lib/core/dispatchRequest.js new file mode 100644 index 0000000..6ac7bc0 --- /dev/null +++ b/node_modules/axios/lib/core/dispatchRequest.js @@ -0,0 +1,94 @@ +'use strict'; + +var utils = require('./../utils'); +var transformData = require('./transformData'); +var isCancel = require('../cancel/isCancel'); +var defaults = require('../defaults'); +var CanceledError = require('../cancel/CanceledError'); +var normalizeHeaderName = require('../helpers/normalizeHeaderName'); + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError(); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ +module.exports = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData.call( + config, + config.data, + config.headers, + null, + config.transformRequest + ); + + normalizeHeaderName(config.headers, 'Accept'); + normalizeHeaderName(config.headers, 'Content-Type'); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + response.data, + response.headers, + response.status, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + reason.response.data, + reason.response.headers, + reason.response.status, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); +}; diff --git a/node_modules/axios/lib/core/mergeConfig.js b/node_modules/axios/lib/core/mergeConfig.js new file mode 100644 index 0000000..0caf333 --- /dev/null +++ b/node_modules/axios/lib/core/mergeConfig.js @@ -0,0 +1,103 @@ +'use strict'; + +var utils = require('../utils'); + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ +module.exports = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isEmptyObject(source)) { + return utils.merge({}, target); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(prop) { + if (prop in config2) { + return getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + return getMergedValue(undefined, config1[prop]); + } + } + + var mergeMap = { + 'url': valueFromConfig2, + 'method': valueFromConfig2, + 'data': valueFromConfig2, + 'baseURL': defaultToConfig2, + 'transformRequest': defaultToConfig2, + 'transformResponse': defaultToConfig2, + 'paramsSerializer': defaultToConfig2, + 'timeout': defaultToConfig2, + 'timeoutMessage': defaultToConfig2, + 'withCredentials': defaultToConfig2, + 'withXSRFToken': defaultToConfig2, + 'adapter': defaultToConfig2, + 'responseType': defaultToConfig2, + 'xsrfCookieName': defaultToConfig2, + 'xsrfHeaderName': defaultToConfig2, + 'onUploadProgress': defaultToConfig2, + 'onDownloadProgress': defaultToConfig2, + 'decompress': defaultToConfig2, + 'maxContentLength': defaultToConfig2, + 'maxBodyLength': defaultToConfig2, + 'beforeRedirect': defaultToConfig2, + 'transport': defaultToConfig2, + 'httpAgent': defaultToConfig2, + 'httpsAgent': defaultToConfig2, + 'cancelToken': defaultToConfig2, + 'socketPath': defaultToConfig2, + 'responseEncoding': defaultToConfig2, + 'validateStatus': mergeDirectKeys + }; + + utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties; + var configValue = merge(prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +}; diff --git a/node_modules/axios/lib/core/settle.js b/node_modules/axios/lib/core/settle.js new file mode 100644 index 0000000..bbb9afa --- /dev/null +++ b/node_modules/axios/lib/core/settle.js @@ -0,0 +1,25 @@ +'use strict'; + +var AxiosError = require('./AxiosError'); + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ +module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +}; diff --git a/node_modules/axios/lib/core/transformData.js b/node_modules/axios/lib/core/transformData.js new file mode 100644 index 0000000..d54ccea --- /dev/null +++ b/node_modules/axios/lib/core/transformData.js @@ -0,0 +1,23 @@ +'use strict'; + +var utils = require('./../utils'); +var defaults = require('../defaults'); + +/** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Number} status HTTP status code + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ +module.exports = function transformData(data, headers, status, fns) { + var context = this || defaults; + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn.call(context, data, headers, status); + }); + + return data; +}; diff --git a/node_modules/axios/lib/defaults/index.js b/node_modules/axios/lib/defaults/index.js new file mode 100644 index 0000000..9c78865 --- /dev/null +++ b/node_modules/axios/lib/defaults/index.js @@ -0,0 +1,175 @@ +'use strict'; + +var utils = require('../utils'); +var normalizeHeaderName = require('../helpers/normalizeHeaderName'); +var AxiosError = require('../core/AxiosError'); +var transitionalDefaults = require('./transitional'); +var toFormData = require('../helpers/toFormData'); +var toURLEncodedForm = require('../helpers/toURLEncodedForm'); +var platform = require('../platform'); +var formDataToJSON = require('../helpers/formDataToJSON'); + +var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' +}; + +function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } +} + +function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = require('../adapters/xhr'); + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = require('../adapters/http'); + } + return adapter; +} + +function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +var defaults = { + + transitional: transitionalDefaults, + + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + + var contentType = headers && headers['Content-Type'] || ''; + var hasJSONContentType = contentType.indexOf('application/json') > -1; + var isObjectPayload = utils.isObject(data); + + if (isObjectPayload && utils.isHTMLForm(data)) { + data = new FormData(data); + } + + var isFormData = utils.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + + var isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + var _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + setContentTypeIfUnset(headers, 'application/json'); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var JSONRequested = this.responseType === 'json'; + + if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + } + } +}; + +utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); +}); + +module.exports = defaults; diff --git a/node_modules/axios/lib/defaults/transitional.js b/node_modules/axios/lib/defaults/transitional.js new file mode 100644 index 0000000..601dd7e --- /dev/null +++ b/node_modules/axios/lib/defaults/transitional.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; diff --git a/node_modules/axios/lib/env/README.md b/node_modules/axios/lib/env/README.md new file mode 100644 index 0000000..b41baff --- /dev/null +++ b/node_modules/axios/lib/env/README.md @@ -0,0 +1,3 @@ +# axios // env + +The `data.js` file is updated automatically when the package version is upgrading. Please do not edit it manually. diff --git a/node_modules/axios/lib/env/classes/FormData.js b/node_modules/axios/lib/env/classes/FormData.js new file mode 100644 index 0000000..a8e6bdf --- /dev/null +++ b/node_modules/axios/lib/env/classes/FormData.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line strict +module.exports = require('form-data'); diff --git a/node_modules/axios/lib/env/data.js b/node_modules/axios/lib/env/data.js new file mode 100644 index 0000000..92c2eb2 --- /dev/null +++ b/node_modules/axios/lib/env/data.js @@ -0,0 +1,3 @@ +module.exports = { + "version": "0.28.1" +}; \ No newline at end of file diff --git a/node_modules/axios/lib/helpers/AxiosURLSearchParams.js b/node_modules/axios/lib/helpers/AxiosURLSearchParams.js new file mode 100644 index 0000000..7c49f18 --- /dev/null +++ b/node_modules/axios/lib/helpers/AxiosURLSearchParams.js @@ -0,0 +1,42 @@ +'use strict'; + +var toFormData = require('./toFormData'); + +function encode(str) { + var charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'\(\)~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +var prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + var _encode = encoder ? function(value) { + return encoder.call(this, value, encode); + } : encode; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +module.exports = AxiosURLSearchParams; diff --git a/node_modules/axios/lib/helpers/README.md b/node_modules/axios/lib/helpers/README.md new file mode 100644 index 0000000..4ae3419 --- /dev/null +++ b/node_modules/axios/lib/helpers/README.md @@ -0,0 +1,7 @@ +# axios // helpers + +The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like: + +- Browser polyfills +- Managing cookies +- Parsing HTTP headers diff --git a/node_modules/axios/lib/helpers/bind.js b/node_modules/axios/lib/helpers/bind.js new file mode 100644 index 0000000..730f606 --- /dev/null +++ b/node_modules/axios/lib/helpers/bind.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +}; diff --git a/node_modules/axios/lib/helpers/buildURL.js b/node_modules/axios/lib/helpers/buildURL.js new file mode 100644 index 0000000..9be8196 --- /dev/null +++ b/node_modules/axios/lib/helpers/buildURL.js @@ -0,0 +1,55 @@ +'use strict'; + +var utils = require('../utils'); +var AxiosURLSearchParams = require('../helpers/AxiosURLSearchParams'); + +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?object} options + * @returns {string} The formatted url + */ +module.exports = function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var hashmarkIndex = url.indexOf('#'); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + var _encode = options && options.encode || encode; + + var serializeFn = options && options.serialize; + + var serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, options).toString(_encode); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +}; diff --git a/node_modules/axios/lib/helpers/combineURLs.js b/node_modules/axios/lib/helpers/combineURLs.js new file mode 100644 index 0000000..f1b58a5 --- /dev/null +++ b/node_modules/axios/lib/helpers/combineURLs.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ +module.exports = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +}; diff --git a/node_modules/axios/lib/helpers/cookies.js b/node_modules/axios/lib/helpers/cookies.js new file mode 100644 index 0000000..5a8a666 --- /dev/null +++ b/node_modules/axios/lib/helpers/cookies.js @@ -0,0 +1,53 @@ +'use strict'; + +var utils = require('./../utils'); + +module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() +); diff --git a/node_modules/axios/lib/helpers/deprecatedMethod.js b/node_modules/axios/lib/helpers/deprecatedMethod.js new file mode 100644 index 0000000..ed40965 --- /dev/null +++ b/node_modules/axios/lib/helpers/deprecatedMethod.js @@ -0,0 +1,24 @@ +'use strict'; + +/*eslint no-console:0*/ + +/** + * Supply a warning to the developer that a method they are using + * has been deprecated. + * + * @param {string} method The name of the deprecated method + * @param {string} [instead] The alternate method to use if applicable + * @param {string} [docs] The documentation URL to get further details + */ +module.exports = function deprecatedMethod(method, instead, docs) { + try { + console.warn( + 'DEPRECATED method `' + method + '`.' + + (instead ? ' Use `' + instead + '` instead.' : '') + + ' This method will be removed in a future release.'); + + if (docs) { + console.warn('For more information about usage see ' + docs); + } + } catch (e) { /* Ignore */ } +}; diff --git a/node_modules/axios/lib/helpers/formDataToJSON.js b/node_modules/axios/lib/helpers/formDataToJSON.js new file mode 100644 index 0000000..45a1036 --- /dev/null +++ b/node_modules/axios/lib/helpers/formDataToJSON.js @@ -0,0 +1,71 @@ +'use strict'; + +var utils = require('../utils'); + +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils.matchAll(/\w+|\[(\w*)]/g, name).map(function(match) { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +function arrayToObject(arr) { + var obj = {}; + var keys = Object.keys(arr); + var i; + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + var name = path[index++]; + var isNumericKey = Number.isFinite(+name); + var isLast = index >= path.length; + name = !name && utils.isArray(target) ? target.length : name; + + if (isLast) { + if (utils.hasOwnProperty(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils.isObject(target[name])) { + target[name] = []; + } + + var result = buildPath(path, value, target[name], index); + + if (result && utils.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { + var obj = {}; + + utils.forEachEntry(formData, function(name, value) { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +module.exports = formDataToJSON; diff --git a/node_modules/axios/lib/helpers/fromDataURI.js b/node_modules/axios/lib/helpers/fromDataURI.js new file mode 100644 index 0000000..3ee2ab9 --- /dev/null +++ b/node_modules/axios/lib/helpers/fromDataURI.js @@ -0,0 +1,51 @@ +'use strict'; + +var AxiosError = require('../core/AxiosError'); +var parseProtocol = require('./parseProtocol'); +var platform = require('../platform'); + +var DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/; + +/** + * Parse data uri to a Buffer or Blob + * @param {String} uri + * @param {?Boolean} asBlob + * @param {?Object} options + * @param {?Function} options.Blob + * @returns {Buffer|Blob} + */ +module.exports = function fromDataURI(uri, asBlob, options) { + var _Blob = options && options.Blob || platform.classes.Blob; + var protocol = parseProtocol(uri); + + if (asBlob === undefined && _Blob) { + asBlob = true; + } + + if (protocol === 'data') { + uri = protocol.length ? uri.slice(protocol.length + 1) : uri; + + var match = DATA_URL_PATTERN.exec(uri); + + if (!match) { + throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL); + } + + var mime = match[1]; + var isBase64 = match[2]; + var body = match[3]; + var buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8'); + + if (asBlob) { + if (!_Blob) { + throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT); + } + + return new _Blob([buffer], {type: mime}); + } + + return buffer; + } + + throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT); +}; diff --git a/node_modules/axios/lib/helpers/isAbsoluteURL.js b/node_modules/axios/lib/helpers/isAbsoluteURL.js new file mode 100644 index 0000000..43fea78 --- /dev/null +++ b/node_modules/axios/lib/helpers/isAbsoluteURL.js @@ -0,0 +1,14 @@ +'use strict'; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +}; diff --git a/node_modules/axios/lib/helpers/isAxiosError.js b/node_modules/axios/lib/helpers/isAxiosError.js new file mode 100644 index 0000000..a037bec --- /dev/null +++ b/node_modules/axios/lib/helpers/isAxiosError.js @@ -0,0 +1,13 @@ +'use strict'; + +var utils = require('./../utils'); + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +module.exports = function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); +}; diff --git a/node_modules/axios/lib/helpers/isURLSameOrigin.js b/node_modules/axios/lib/helpers/isURLSameOrigin.js new file mode 100644 index 0000000..eff059d --- /dev/null +++ b/node_modules/axios/lib/helpers/isURLSameOrigin.js @@ -0,0 +1,68 @@ +'use strict'; + +var utils = require('./../utils'); + +module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() +); diff --git a/node_modules/axios/lib/helpers/normalizeHeaderName.js b/node_modules/axios/lib/helpers/normalizeHeaderName.js new file mode 100644 index 0000000..738c9fe --- /dev/null +++ b/node_modules/axios/lib/helpers/normalizeHeaderName.js @@ -0,0 +1,12 @@ +'use strict'; + +var utils = require('../utils'); + +module.exports = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); +}; diff --git a/node_modules/axios/lib/helpers/null.js b/node_modules/axios/lib/helpers/null.js new file mode 100644 index 0000000..859bace --- /dev/null +++ b/node_modules/axios/lib/helpers/null.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line strict +module.exports = null; diff --git a/node_modules/axios/lib/helpers/parseHeaders.js b/node_modules/axios/lib/helpers/parseHeaders.js new file mode 100644 index 0000000..9b4bfc6 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseHeaders.js @@ -0,0 +1,53 @@ +'use strict'; + +var utils = require('./../utils'); + +// Headers whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]; + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ +module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.slice(0, i)).toLowerCase(); + val = utils.trim(line.slice(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; +}; diff --git a/node_modules/axios/lib/helpers/parseProtocol.js b/node_modules/axios/lib/helpers/parseProtocol.js new file mode 100644 index 0000000..10f3f02 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseProtocol.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +}; diff --git a/node_modules/axios/lib/helpers/spread.js b/node_modules/axios/lib/helpers/spread.js new file mode 100644 index 0000000..25e3cdd --- /dev/null +++ b/node_modules/axios/lib/helpers/spread.js @@ -0,0 +1,27 @@ +'use strict'; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ +module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +}; diff --git a/node_modules/axios/lib/helpers/toFormData.js b/node_modules/axios/lib/helpers/toFormData.js new file mode 100644 index 0000000..6dcb9d2 --- /dev/null +++ b/node_modules/axios/lib/helpers/toFormData.js @@ -0,0 +1,179 @@ +'use strict'; + +var utils = require('../utils'); +var AxiosError = require('../core/AxiosError'); +var envFormData = require('../env/classes/FormData'); + +function isVisitable(thing) { + return utils.isPlainObject(thing) || utils.isArray(thing); +} + +function removeBrackets(key) { + return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +function isFlatArray(arr) { + return utils.isArray(arr) && !arr.some(isVisitable); +} + +var predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +function isSpecCompliant(thing) { + return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]; +} + +/** + * Convert a data object to FormData + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * @returns {Object} + **/ + +function toFormData(obj, formData, options) { + if (!utils.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (envFormData || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils.isUndefined(source[option]); + }); + + var metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + var visitor = options.visitor || defaultVisitor; + var dots = options.dots; + var indexes = options.indexes; + var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + var useBlob = _Blob && isSpecCompliant(formData); + + if (!utils.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils.isBlob(value)) { + throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + var arr = value; + + if (value && !path && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils.isArray(value) && isFlatArray(value)) || + (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !utils.isUndefined(el) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + var stack = []; + + var exposedHelpers = Object.assign(predicates, { + defaultVisitor: defaultVisitor, + convertValue: convertValue, + isVisitable: isVisitable + }); + + function build(value, path) { + if (utils.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils.forEach(value, function each(el, key) { + var result = !utils.isUndefined(el) && visitor.call( + formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +module.exports = toFormData; diff --git a/node_modules/axios/lib/helpers/toURLEncodedForm.js b/node_modules/axios/lib/helpers/toURLEncodedForm.js new file mode 100644 index 0000000..947a39a --- /dev/null +++ b/node_modules/axios/lib/helpers/toURLEncodedForm.js @@ -0,0 +1,18 @@ +'use strict'; + +var utils = require('../utils'); +var toFormData = require('./toFormData'); +var platform = require('../platform/'); + +module.exports = function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); +}; diff --git a/node_modules/axios/lib/helpers/validator.js b/node_modules/axios/lib/helpers/validator.js new file mode 100644 index 0000000..8095b90 --- /dev/null +++ b/node_modules/axios/lib/helpers/validator.js @@ -0,0 +1,86 @@ +'use strict'; + +var VERSION = require('../env/data').version; +var AxiosError = require('../core/AxiosError'); + +var validators = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { + validators[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +var deprecatedWarnings = {}; + +/** + * Transitional option validator + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * @returns {function} + */ +validators.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function(value, opt, opts) { + if (validator === false) { + throw new AxiosError( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +/** + * Assert object's properties type + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } +} + +module.exports = { + assertOptions: assertOptions, + validators: validators +}; diff --git a/node_modules/axios/lib/platform/browser/classes/FormData.js b/node_modules/axios/lib/platform/browser/classes/FormData.js new file mode 100644 index 0000000..6af83c9 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/FormData.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = FormData; diff --git a/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js b/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js new file mode 100644 index 0000000..65f63d8 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js @@ -0,0 +1,5 @@ +'use strict'; + +var AxiosURLSearchParams = require('../../../helpers/AxiosURLSearchParams'); + +module.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; diff --git a/node_modules/axios/lib/platform/browser/index.js b/node_modules/axios/lib/platform/browser/index.js new file mode 100644 index 0000000..c81eb27 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/index.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = { + isBrowser: true, + classes: { + URLSearchParams: require('./classes/URLSearchParams'), + FormData: require('./classes/FormData'), + Blob: Blob + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; diff --git a/node_modules/axios/lib/platform/index.js b/node_modules/axios/lib/platform/index.js new file mode 100644 index 0000000..8560532 --- /dev/null +++ b/node_modules/axios/lib/platform/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./node/'); diff --git a/node_modules/axios/lib/platform/node/classes/FormData.js b/node_modules/axios/lib/platform/node/classes/FormData.js new file mode 100644 index 0000000..a186bc0 --- /dev/null +++ b/node_modules/axios/lib/platform/node/classes/FormData.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('form-data'); diff --git a/node_modules/axios/lib/platform/node/classes/URLSearchParams.js b/node_modules/axios/lib/platform/node/classes/URLSearchParams.js new file mode 100644 index 0000000..1ae3fc5 --- /dev/null +++ b/node_modules/axios/lib/platform/node/classes/URLSearchParams.js @@ -0,0 +1,5 @@ +'use strict'; + +var url = require('url'); + +module.exports = url.URLSearchParams; diff --git a/node_modules/axios/lib/platform/node/index.js b/node_modules/axios/lib/platform/node/index.js new file mode 100644 index 0000000..b41ff36 --- /dev/null +++ b/node_modules/axios/lib/platform/node/index.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = { + isNode: true, + classes: { + URLSearchParams: require('./classes/URLSearchParams'), + FormData: require('./classes/FormData'), + Blob: typeof Blob !== 'undefined' && Blob || null + }, + protocols: [ 'http', 'https', 'file', 'data' ] +}; diff --git a/node_modules/axios/lib/utils.js b/node_modules/axios/lib/utils.js new file mode 100644 index 0000000..9b79cf7 --- /dev/null +++ b/node_modules/axios/lib/utils.js @@ -0,0 +1,522 @@ +'use strict'; + +var bind = require('./helpers/bind'); + +// utils is a library of generic helper functions non-specific to axios + +var toString = Object.prototype.toString; + +// eslint-disable-next-line func-names +var kindOf = (function(cache) { + // eslint-disable-next-line func-names + return function(thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; +})(Object.create(null)); + +function kindOfTest(type) { + type = type.toLowerCase(); + return function isKindOf(thing) { + return kindOf(thing) === type; + }; +} + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ +function isArray(val) { + return Array.isArray(val); +} + +/** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ +function isUndefined(val) { + return typeof val === 'undefined'; +} + +/** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +var isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ +function isString(val) { + return typeof val === 'string'; +} + +/** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ +function isNumber(val) { + return typeof val === 'number'; +} + +/** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ +function isObject(val) { + return val !== null && typeof val === 'object'; +} + +/** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ +function isPlainObject(val) { + if (kindOf(val) !== 'object') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; +} + +/** + * Determine if a value is a empty Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a empty Object, otherwise false + */ +function isEmptyObject(val) { + return val && Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; +} + +/** + * Determine if a value is a Date + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ +var isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ +var isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +function isFunction(val) { + return toString.call(val) === '[object Function]'; +} + +/** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ +function isStream(val) { + return isObject(val) && isFunction(val.pipe); +} + +/** + * Determine if a value is a FormData + * + * @param {Object} thing The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ +function isFormData(thing) { + var pattern = '[object FormData]'; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || + toString.call(thing) === pattern || + (isFunction(thing.toString) && thing.toString() === pattern) + ); +} + +/** + * Determine if a value is a URLSearchParams object + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +var isURLSearchParams = kindOfTest('URLSearchParams'); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ +function trim(str) { + return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); +} + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ +function isStandardBrowserEnv() { + var product; + if (typeof navigator !== 'undefined' && ( + (product = navigator.product) === 'ReactNative' || + product === 'NativeScript' || + product === 'NS') + ) { + return false; + } + + return typeof window !== 'undefined' && typeof document !== 'undefined'; +} + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ +function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } +} + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ +function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; +} + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ +function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + */ + +function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + props && Object.assign(constructor.prototype, props); +} + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * @returns {Object} + */ + +function toFlatObject(sourceObj, destObj, filter, propFilter) { + var props; + var i; + var prop; + var merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && Object.getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +} + +/* + * determines whether a string ends with the characters of a specified string + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * @returns {boolean} + */ +function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +} + + +/** + * Returns new array from array like object or null if failed + * @param {*} [thing] + * @returns {?Array} + */ +function toArray(thing) { + if (!thing) return null; + if (isArray(thing)) return thing; + var i = thing.length; + if (!isNumber(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +} + +// eslint-disable-next-line func-names +var isTypedArray = (function(TypedArray) { + // eslint-disable-next-line func-names + return function(thing) { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array)); + +function forEachEntry(obj, fn) { + var generator = obj && obj[Symbol.iterator]; + + var iterator = generator.call(obj); + + var result; + + while ((result = iterator.next()) && !result.done) { + var pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +} + +function matchAll(regExp, str) { + var matches; + var arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +} + +var isHTMLForm = kindOfTest('HTMLFormElement'); + +var hasOwnProperty = (function resolver(_hasOwnProperty) { + return function(obj, prop) { + return _hasOwnProperty.call(obj, prop); + }; +})(Object.prototype.hasOwnProperty); + +module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isPlainObject: isPlainObject, + isEmptyObject: isEmptyObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + isTypedArray: isTypedArray, + isFileList: isFileList, + forEachEntry: forEachEntry, + matchAll: matchAll, + isHTMLForm: isHTMLForm, + hasOwnProperty: hasOwnProperty +}; diff --git a/node_modules/axios/package.json b/node_modules/axios/package.json new file mode 100644 index 0000000..6212fb0 --- /dev/null +++ b/node_modules/axios/package.json @@ -0,0 +1,100 @@ +{ + "name": "axios", + "version": "0.28.1", + "description": "Promise based HTTP client for the browser and node.js", + "main": "index.js", + "types": "index.d.ts", + "scripts": { + "test": "node bin/ssl_hotfix.js grunt test && node bin/ssl_hotfix.js dtslint --localTs node_modules/typescript/lib", + "start": "node ./sandbox/server.js", + "preversion": "grunt version && npm test", + "build": "cross-env NODE_ENV=production grunt build", + "examples": "node ./examples/server.js", + "coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "fix": "eslint --fix lib/**/*.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/axios/axios.git" + }, + "keywords": [ + "xhr", + "http", + "ajax", + "promise", + "node" + ], + "author": "Matt Zabriskie", + "license": "MIT", + "bugs": { + "url": "https://github.com/axios/axios/issues" + }, + "homepage": "https://axios-http.com", + "devDependencies": { + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^15.1.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.0.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "abortcontroller-polyfill": "^1.7.3", + "body-parser": "^1.20.0", + "coveralls": "^3.1.1", + "cross-env": "^7.0.3", + "dtslint": "^4.2.1", + "es6-promise": "^4.2.8", + "express": "^4.18.1", + "formidable": "^2.0.1", + "grunt": "^1.4.1", + "grunt-banner": "^0.6.0", + "grunt-cli": "^1.4.3", + "grunt-contrib-clean": "^2.0.0", + "grunt-contrib-watch": "^1.1.0", + "grunt-eslint": "^24.0.0", + "grunt-karma": "^4.0.2", + "grunt-mocha-test": "^0.13.3", + "grunt-shell": "^3.0.1", + "grunt-webpack": "^5.0.0", + "istanbul-instrumenter-loader": "^3.0.1", + "jasmine-core": "^2.4.1", + "karma": "^6.3.17", + "karma-chrome-launcher": "^3.1.1", + "karma-firefox-launcher": "^2.1.2", + "karma-jasmine": "^1.1.1", + "karma-jasmine-ajax": "^0.1.13", + "karma-safari-launcher": "^1.0.0", + "karma-sauce-launcher": "^4.3.6", + "karma-sinon": "^1.0.5", + "karma-sourcemap-loader": "^0.3.8", + "karma-webpack": "^4.0.2", + "load-grunt-tasks": "^5.1.0", + "minimist": "^1.2.6", + "mocha": "^8.2.1", + "multer": "^1.4.4", + "rollup": "^2.67.0", + "rollup-plugin-terser": "^7.0.2", + "sinon": "^4.5.0", + "terser-webpack-plugin": "^4.2.3", + "typescript": "^4.6.3", + "url-search-params": "^0.10.0", + "webpack": "^4.44.2", + "webpack-dev-server": "^3.11.0" + }, + "browser": { + "./lib/adapters/http.js": "./lib/adapters/xhr.js", + "./lib/platform/node/index.js": "./lib/platform/browser/index.js" + }, + "jsdelivr": "dist/axios.min.js", + "unpkg": "dist/axios.min.js", + "typings": "./index.d.ts", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "bundlesize": [ + { + "path": "./dist/axios.min.js", + "threshold": "5kB" + } + ] +} diff --git a/node_modules/axios/rollup.config.js b/node_modules/axios/rollup.config.js new file mode 100644 index 0000000..d05a44b --- /dev/null +++ b/node_modules/axios/rollup.config.js @@ -0,0 +1,60 @@ +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import {terser} from "rollup-plugin-terser"; +import json from '@rollup/plugin-json'; + +const lib = require("./package.json"); +const outputFileName = 'axios'; +const name = "axios"; +const input = './lib/axios.js'; + +const buildConfig = (config) => { + + const build = ({minified}) => ({ + input, + ...config, + output: { + ...config.output, + file: `${config.output.file}.${minified ? "min.js" : "js"}` + }, + plugins: [ + json(), + resolve({browser: true}), + commonjs(), + minified && terser(), + ...(config.plugins || []), + ] + }); + + return [ + build({minified: false}), + build({minified: true}), + ]; +}; + +export default async () => { + const year = new Date().getFullYear(); + const banner = `// ${lib.name} v${lib.version} Copyright (c) ${year} ${lib.author}`; + + return [ + ...buildConfig({ + output: { + file: `dist/${outputFileName}`, + name, + format: "umd", + exports: "default", + banner + } + }), + + ...buildConfig({ + output: { + file: `dist/esm/${outputFileName}`, + format: "esm", + preferConst: true, + exports: "named", + banner + } + }) + ] +}; diff --git a/node_modules/axios/tsconfig.json b/node_modules/axios/tsconfig.json new file mode 100644 index 0000000..6665188 --- /dev/null +++ b/node_modules/axios/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "es2015", + "lib": ["dom", "es2015"], + "types": [], + "moduleResolution": "node", + "strict": true, + "noEmit": true, + "baseUrl": ".", + "paths": { + "axios": ["."] + } + } +} diff --git a/node_modules/axios/tslint.json b/node_modules/axios/tslint.json new file mode 100644 index 0000000..3ec44a7 --- /dev/null +++ b/node_modules/axios/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "dtslint/dtslint.json", + "rules": { + "no-unnecessary-generics": false + } +} diff --git a/node_modules/bufferutil/LICENSE b/node_modules/bufferutil/LICENSE new file mode 100644 index 0000000..1da5b96 --- /dev/null +++ b/node_modules/bufferutil/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Einar Otto Stangvik +Copyright (c) 2013 Arnout Kazemier and contributors +Copyright (c) 2016 Luigi Pinca and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/bufferutil/README.md b/node_modules/bufferutil/README.md new file mode 100644 index 0000000..feb6318 --- /dev/null +++ b/node_modules/bufferutil/README.md @@ -0,0 +1,79 @@ +# bufferutil + +[![Version npm](https://img.shields.io/npm/v/bufferutil.svg?logo=npm)](https://www.npmjs.com/package/bufferutil) +[![Linux/macOS/Windows Build](https://img.shields.io/github/actions/workflow/status/websockets/bufferutil/ci.yml?branch=master&label=build&logo=github)](https://github.com/websockets/bufferutil/actions?query=workflow%3ACI+branch%3Amaster) + +`bufferutil` is what makes `ws` fast. It provides some utilities to efficiently +perform some operations such as masking and unmasking the data payload of +WebSocket frames. + +## Installation + +``` +npm install bufferutil --save-optional +``` + +The `--save-optional` flag tells npm to save the package in your package.json +under the +[`optionalDependencies`](https://docs.npmjs.com/files/package.json#optionaldependencies) +key. + +## API + +The module exports two functions. To maximize performance, parameters are not +validated. It is the caller's responsibility to ensure that they are correct. + +### `bufferUtil.mask(source, mask, output, offset, length)` + +Masks a buffer using the given masking-key as specified by the WebSocket +protocol. + +#### Arguments + +- `source` - The buffer to mask. +- `mask` - A buffer representing the masking-key. +- `output` - The buffer where to store the result. +- `offset` - The offset at which to start writing. +- `length` - The number of bytes to mask. + +#### Example + +```js +'use strict'; + +const bufferUtil = require('bufferutil'); +const crypto = require('crypto'); + +const source = crypto.randomBytes(10); +const mask = crypto.randomBytes(4); + +bufferUtil.mask(source, mask, source, 0, source.length); +``` + +### `bufferUtil.unmask(buffer, mask)` + +Unmasks a buffer using the given masking-key as specified by the WebSocket +protocol. + +#### Arguments + +- `buffer` - The buffer to unmask. +- `mask` - A buffer representing the masking-key. + +#### Example + +```js +'use strict'; + +const bufferUtil = require('bufferutil'); +const crypto = require('crypto'); + +const buffer = crypto.randomBytes(10); +const mask = crypto.randomBytes(4); + +bufferUtil.unmask(buffer, mask); +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/bufferutil/binding.gyp b/node_modules/bufferutil/binding.gyp new file mode 100644 index 0000000..cb8bb99 --- /dev/null +++ b/node_modules/bufferutil/binding.gyp @@ -0,0 +1,32 @@ +{ + 'variables': { + 'openssl_fips': '' + }, + 'targets': [ + { + 'target_name': 'bufferutil', + 'sources': ['src/bufferutil.c'], + 'cflags': ['-std=c99'], + 'conditions': [ + ["OS=='mac'", { + 'variables': { + 'clang_version': + '&1 | perl -ne \'print $1 if /clang version ([0-9]+(\\.[0-9]+){2,})/\')' + }, + 'xcode_settings': { + 'MACOSX_DEPLOYMENT_TARGET': '10.7' + }, + 'conditions': [ + # Use Perl v-strings to compare versions. + ['clang_version and { + for (var i = 0; i < length; i++) { + output[offset + i] = source[i] ^ mask[i & 3]; + } +}; + +/** + * Unmasks a buffer using the given mask. + * + * @param {Buffer} buffer The buffer to unmask + * @param {Buffer} mask The mask to use + * @public + */ +const unmask = (buffer, mask) => { + // Required until https://github.com/nodejs/node/issues/9006 is resolved. + const length = buffer.length; + for (var i = 0; i < length; i++) { + buffer[i] ^= mask[i & 3]; + } +}; + +module.exports = { mask, unmask }; diff --git a/node_modules/bufferutil/index.js b/node_modules/bufferutil/index.js new file mode 100644 index 0000000..8c30561 --- /dev/null +++ b/node_modules/bufferutil/index.js @@ -0,0 +1,7 @@ +'use strict'; + +try { + module.exports = require('node-gyp-build')(__dirname); +} catch (e) { + module.exports = require('./fallback'); +} diff --git a/node_modules/bufferutil/package.json b/node_modules/bufferutil/package.json new file mode 100644 index 0000000..0d77b90 --- /dev/null +++ b/node_modules/bufferutil/package.json @@ -0,0 +1,36 @@ +{ + "name": "bufferutil", + "version": "4.0.9", + "description": "WebSocket buffer utils", + "main": "index.js", + "engines": { + "node": ">=6.14.2" + }, + "scripts": { + "install": "node-gyp-build", + "prebuild": "prebuildify --napi --strip --target=8.11.2", + "prebuild-darwin-x64+arm64": "prebuildify --arch x64+arm64 --napi --strip --target=8.11.2", + "test": "mocha" + }, + "repository": { + "type": "git", + "url": "https://github.com/websockets/bufferutil" + }, + "keywords": [ + "bufferutil" + ], + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/websockets/bufferutil/issues" + }, + "homepage": "https://github.com/websockets/bufferutil", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "devDependencies": { + "mocha": "^11.0.1", + "node-gyp": "^11.0.0", + "prebuildify": "^6.0.0" + } +} diff --git a/node_modules/bufferutil/prebuilds/darwin-x64+arm64/bufferutil.node b/node_modules/bufferutil/prebuilds/darwin-x64+arm64/bufferutil.node new file mode 100644 index 0000000000000000000000000000000000000000..ad68cd1dd2bcbd6f79cb0e52c786369198f636d8 GIT binary patch literal 66976 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 literal 0 HcmV?d00001 diff --git a/node_modules/bufferutil/prebuilds/win32-ia32/bufferutil.node b/node_modules/bufferutil/prebuilds/win32-ia32/bufferutil.node new file mode 100644 index 0000000000000000000000000000000000000000..4c93be101d3479c26629fef5a9fbc8ade5d925c3 GIT binary patch literal 126976 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%0AUQ!YX{Ke-s}TU#f?ce=7Y{A7hc5 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 literal 0 HcmV?d00001 diff --git a/node_modules/bufferutil/src/bufferutil.c b/node_modules/bufferutil/src/bufferutil.c new file mode 100644 index 0000000..b89f8dd --- /dev/null +++ b/node_modules/bufferutil/src/bufferutil.c @@ -0,0 +1,171 @@ +#define NAPI_VERSION 1 +#include +#include + +napi_value Mask(napi_env env, napi_callback_info info) { + napi_status status; + size_t argc = 5; + napi_value argv[5]; + + status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL); + assert(status == napi_ok); + + uint8_t *source; + uint8_t *mask; + uint8_t *destination; + uint32_t offset; + uint32_t length; + + status = napi_get_buffer_info(env, argv[0], (void **)&source, NULL); + assert(status == napi_ok); + + status = napi_get_buffer_info(env, argv[1], (void **)&mask, NULL); + assert(status == napi_ok); + + status = napi_get_buffer_info(env, argv[2], (void **)&destination, NULL); + assert(status == napi_ok); + + status = napi_get_value_uint32(env, argv[3], &offset); + assert(status == napi_ok); + + status = napi_get_value_uint32(env, argv[4], &length); + assert(status == napi_ok); + + destination += offset; + uint32_t index = 0; + + // + // Alignment preamble. + // + while (index < length && ((size_t)source % 8)) { + *destination++ = *source++ ^ mask[index % 4]; + index++; + } + + length -= index; + if (!length) + return NULL; + + // + // Realign mask and convert to 64 bit. + // + uint8_t maskAlignedArray[8]; + + for (uint8_t i = 0; i < 8; i++, index++) { + maskAlignedArray[i] = mask[index % 4]; + } + + // + // Apply 64 bit mask in 8 byte chunks. + // + uint32_t loop = length / 8; + uint64_t *pMask8 = (uint64_t *)maskAlignedArray; + + while (loop--) { + uint64_t *pFrom8 = (uint64_t *)source; + uint64_t *pTo8 = (uint64_t *)destination; + *pTo8 = *pFrom8 ^ *pMask8; + source += 8; + destination += 8; + } + + // + // Apply mask to remaining data. + // + uint8_t *pmaskAlignedArray = maskAlignedArray; + + length %= 8; + while (length--) { + *destination++ = *source++ ^ *pmaskAlignedArray++; + } + + return NULL; +} + +napi_value Unmask(napi_env env, napi_callback_info info) { + napi_status status; + size_t argc = 2; + napi_value argv[2]; + + status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL); + assert(status == napi_ok); + + uint8_t *source; + size_t length; + uint8_t *mask; + + status = napi_get_buffer_info(env, argv[0], (void **)&source, &length); + assert(status == napi_ok); + + status = napi_get_buffer_info(env, argv[1], (void **)&mask, NULL); + assert(status == napi_ok); + + uint32_t index = 0; + + // + // Alignment preamble. + // + while (index < length && ((size_t)source % 8)) { + *source++ ^= mask[index % 4]; + index++; + } + + length -= index; + if (!length) + return NULL; + + // + // Realign mask and convert to 64 bit. + // + uint8_t maskAlignedArray[8]; + + for (uint8_t i = 0; i < 8; i++, index++) { + maskAlignedArray[i] = mask[index % 4]; + } + + // + // Apply 64 bit mask in 8 byte chunks. + // + uint32_t loop = length / 8; + uint64_t *pMask8 = (uint64_t *)maskAlignedArray; + + while (loop--) { + uint64_t *pSource8 = (uint64_t *)source; + *pSource8 ^= *pMask8; + source += 8; + } + + // + // Apply mask to remaining data. + // + uint8_t *pmaskAlignedArray = maskAlignedArray; + + length %= 8; + while (length--) { + *source++ ^= *pmaskAlignedArray++; + } + + return NULL; +} + +napi_value Init(napi_env env, napi_value exports) { + napi_status status; + napi_value mask; + napi_value unmask; + + status = napi_create_function(env, NULL, 0, Mask, NULL, &mask); + assert(status == napi_ok); + + status = napi_create_function(env, NULL, 0, Unmask, NULL, &unmask); + assert(status == napi_ok); + + status = napi_set_named_property(env, exports, "mask", mask); + assert(status == napi_ok); + + status = napi_set_named_property(env, exports, "unmask", unmask); + assert(status == napi_ok); + + return exports; +} + +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) diff --git a/node_modules/call-bind-apply-helpers/.eslintrc b/node_modules/call-bind-apply-helpers/.eslintrc new file mode 100644 index 0000000..201e859 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + "no-extra-parens": 0, + "no-magic-numbers": 0, + }, +} diff --git a/node_modules/call-bind-apply-helpers/.github/FUNDING.yml b/node_modules/call-bind-apply-helpers/.github/FUNDING.yml new file mode 100644 index 0000000..0011e9d --- /dev/null +++ b/node_modules/call-bind-apply-helpers/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/call-bind-apply-helpers +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/call-bind-apply-helpers/.nycrc b/node_modules/call-bind-apply-helpers/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/call-bind-apply-helpers/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/call-bind-apply-helpers/CHANGELOG.md b/node_modules/call-bind-apply-helpers/CHANGELOG.md new file mode 100644 index 0000000..2484942 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.1...v1.0.2) - 2025-02-12 + +### Commits + +- [types] improve inferred types [`e6f9586`](https://github.com/ljharb/call-bind-apply-helpers/commit/e6f95860a3c72879cb861a858cdfb8138fbedec1) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`e43d540`](https://github.com/ljharb/call-bind-apply-helpers/commit/e43d5409f97543bfbb11f345d47d8ce4e066d8c1) + +## [v1.0.1](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.0...v1.0.1) - 2024-12-08 + +### Commits + +- [types] `reflectApply`: fix types [`4efc396`](https://github.com/ljharb/call-bind-apply-helpers/commit/4efc3965351a4f02cc55e836fa391d3d11ef2ef8) +- [Fix] `reflectApply`: oops, Reflect is not a function [`83cc739`](https://github.com/ljharb/call-bind-apply-helpers/commit/83cc7395de6b79b7730bdf092f1436f0b1263c75) +- [Dev Deps] update `@arethetypeswrong/cli` [`80bd5d3`](https://github.com/ljharb/call-bind-apply-helpers/commit/80bd5d3ae58b4f6b6995ce439dd5a1bcb178a940) + +## v1.0.0 - 2024-12-05 + +### Commits + +- Initial implementation, tests, readme [`7879629`](https://github.com/ljharb/call-bind-apply-helpers/commit/78796290f9b7430c9934d6f33d94ae9bc89fce04) +- Initial commit [`3f1dc16`](https://github.com/ljharb/call-bind-apply-helpers/commit/3f1dc164afc43285631b114a5f9dd9137b2b952f) +- npm init [`081df04`](https://github.com/ljharb/call-bind-apply-helpers/commit/081df048c312fcee400922026f6e97281200a603) +- Only apps should have lockfiles [`5b9ca0f`](https://github.com/ljharb/call-bind-apply-helpers/commit/5b9ca0fe8101ebfaf309c549caac4e0a017ed930) diff --git a/node_modules/call-bind-apply-helpers/LICENSE b/node_modules/call-bind-apply-helpers/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/call-bind-apply-helpers/README.md b/node_modules/call-bind-apply-helpers/README.md new file mode 100644 index 0000000..8fc0dae --- /dev/null +++ b/node_modules/call-bind-apply-helpers/README.md @@ -0,0 +1,62 @@ +# call-bind-apply-helpers [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Helper functions around Function call/apply/bind, for use in `call-bind`. + +The only packages that should likely ever use this package directly are `call-bind` and `get-intrinsic`. +Please use `call-bind` unless you have a very good reason not to. + +## Getting started + +```sh +npm install --save call-bind-apply-helpers +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBindBasic = require('call-bind-apply-helpers'); + +function f(a, b) { + assert.equal(this, 1); + assert.equal(a, 2); + assert.equal(b, 3); + assert.equal(arguments.length, 2); +} + +const fBound = callBindBasic([f, 1]); + +delete Function.prototype.call; +delete Function.prototype.bind; + +fBound(2, 3); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bind-apply-helpers +[npm-version-svg]: https://versionbadg.es/ljharb/call-bind-apply-helpers.svg +[deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers.svg +[deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers +[dev-deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bind-apply-helpers.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bind-apply-helpers.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bind-apply-helpers.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bind-apply-helpers +[codecov-image]: https://codecov.io/gh/ljharb/call-bind-apply-helpers/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind-apply-helpers/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind-apply-helpers +[actions-url]: https://github.com/ljharb/call-bind-apply-helpers/actions diff --git a/node_modules/call-bind-apply-helpers/actualApply.d.ts b/node_modules/call-bind-apply-helpers/actualApply.d.ts new file mode 100644 index 0000000..b87286a --- /dev/null +++ b/node_modules/call-bind-apply-helpers/actualApply.d.ts @@ -0,0 +1 @@ +export = Reflect.apply; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/actualApply.js b/node_modules/call-bind-apply-helpers/actualApply.js new file mode 100644 index 0000000..ffa5135 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/actualApply.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); + +var $apply = require('./functionApply'); +var $call = require('./functionCall'); +var $reflectApply = require('./reflectApply'); + +/** @type {import('./actualApply')} */ +module.exports = $reflectApply || bind.call($call, $apply); diff --git a/node_modules/call-bind-apply-helpers/applyBind.d.ts b/node_modules/call-bind-apply-helpers/applyBind.d.ts new file mode 100644 index 0000000..d176c1a --- /dev/null +++ b/node_modules/call-bind-apply-helpers/applyBind.d.ts @@ -0,0 +1,19 @@ +import actualApply from './actualApply'; + +type TupleSplitHead = T['length'] extends N + ? T + : T extends [...infer R, any] + ? TupleSplitHead + : never + +type TupleSplitTail = O['length'] extends N + ? T + : T extends [infer F, ...infer R] + ? TupleSplitTail<[...R], N, [...O, F]> + : never + +type TupleSplit = [TupleSplitHead, TupleSplitTail] + +declare function applyBind(...args: TupleSplit, 2>[1]): ReturnType; + +export = applyBind; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/applyBind.js b/node_modules/call-bind-apply-helpers/applyBind.js new file mode 100644 index 0000000..d2b7723 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/applyBind.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); +var $apply = require('./functionApply'); +var actualApply = require('./actualApply'); + +/** @type {import('./applyBind')} */ +module.exports = function applyBind() { + return actualApply(bind, $apply, arguments); +}; diff --git a/node_modules/call-bind-apply-helpers/functionApply.d.ts b/node_modules/call-bind-apply-helpers/functionApply.d.ts new file mode 100644 index 0000000..1f6e11b --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionApply.d.ts @@ -0,0 +1 @@ +export = Function.prototype.apply; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/functionApply.js b/node_modules/call-bind-apply-helpers/functionApply.js new file mode 100644 index 0000000..c71df9c --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionApply')} */ +module.exports = Function.prototype.apply; diff --git a/node_modules/call-bind-apply-helpers/functionCall.d.ts b/node_modules/call-bind-apply-helpers/functionCall.d.ts new file mode 100644 index 0000000..15e93df --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionCall.d.ts @@ -0,0 +1 @@ +export = Function.prototype.call; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/functionCall.js b/node_modules/call-bind-apply-helpers/functionCall.js new file mode 100644 index 0000000..7a8d873 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionCall.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionCall')} */ +module.exports = Function.prototype.call; diff --git a/node_modules/call-bind-apply-helpers/index.d.ts b/node_modules/call-bind-apply-helpers/index.d.ts new file mode 100644 index 0000000..541516b --- /dev/null +++ b/node_modules/call-bind-apply-helpers/index.d.ts @@ -0,0 +1,64 @@ +type RemoveFromTuple< + Tuple extends readonly unknown[], + RemoveCount extends number, + Index extends 1[] = [] +> = Index["length"] extends RemoveCount + ? Tuple + : Tuple extends [infer First, ...infer Rest] + ? RemoveFromTuple + : Tuple; + +type ConcatTuples< + Prefix extends readonly unknown[], + Suffix extends readonly unknown[] +> = [...Prefix, ...Suffix]; + +type ExtractFunctionParams = T extends (this: infer TThis, ...args: infer P extends readonly unknown[]) => infer R + ? { thisArg: TThis; params: P; returnType: R } + : never; + +type BindFunction< + T extends (this: any, ...args: any[]) => any, + TThis, + TBoundArgs extends readonly unknown[], + ReceiverBound extends boolean +> = ExtractFunctionParams extends { + thisArg: infer OrigThis; + params: infer P extends readonly unknown[]; + returnType: infer R; +} + ? ReceiverBound extends true + ? (...args: RemoveFromTuple>) => R extends [OrigThis, ...infer Rest] + ? [TThis, ...Rest] // Replace `this` with `thisArg` + : R + : >>( + thisArg: U, + ...args: RemainingArgs + ) => R extends [OrigThis, ...infer Rest] + ? [U, ...ConcatTuples] // Preserve bound args in return type + : R + : never; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[], + const TThis extends Extracted["thisArg"] +>( + args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[] +>( + args: [fn: T, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind( + args: [fn: Exclude, ...rest: TArgs] +): never; + +// export as namespace callBind; +export = callBind; diff --git a/node_modules/call-bind-apply-helpers/index.js b/node_modules/call-bind-apply-helpers/index.js new file mode 100644 index 0000000..2f6dab4 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/index.js @@ -0,0 +1,15 @@ +'use strict'; + +var bind = require('function-bind'); +var $TypeError = require('es-errors/type'); + +var $call = require('./functionCall'); +var $actualApply = require('./actualApply'); + +/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ +module.exports = function callBindBasic(args) { + if (args.length < 1 || typeof args[0] !== 'function') { + throw new $TypeError('a function is required'); + } + return $actualApply(bind, $call, args); +}; diff --git a/node_modules/call-bind-apply-helpers/package.json b/node_modules/call-bind-apply-helpers/package.json new file mode 100644 index 0000000..923b8be --- /dev/null +++ b/node_modules/call-bind-apply-helpers/package.json @@ -0,0 +1,85 @@ +{ + "name": "call-bind-apply-helpers", + "version": "1.0.2", + "description": "Helper functions around Function call/apply/bind, for use in `call-bind`", + "main": "index.js", + "exports": { + ".": "./index.js", + "./actualApply": "./actualApply.js", + "./applyBind": "./applyBind.js", + "./functionApply": "./functionApply.js", + "./functionCall": "./functionCall.js", + "./reflectApply": "./reflectApply.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bind-apply-helpers.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bind-apply-helpers/issues" + }, + "homepage": "https://github.com/ljharb/call-bind-apply-helpers#readme", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.3", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/for-each": "^0.3.3", + "@types/function-bind": "^1.1.10", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "has-strict-mode": "^1.1.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/call-bind-apply-helpers/reflectApply.d.ts b/node_modules/call-bind-apply-helpers/reflectApply.d.ts new file mode 100644 index 0000000..6b2ae76 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/reflectApply.d.ts @@ -0,0 +1,3 @@ +declare const reflectApply: false | typeof Reflect.apply; + +export = reflectApply; diff --git a/node_modules/call-bind-apply-helpers/reflectApply.js b/node_modules/call-bind-apply-helpers/reflectApply.js new file mode 100644 index 0000000..3d03caa --- /dev/null +++ b/node_modules/call-bind-apply-helpers/reflectApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./reflectApply')} */ +module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; diff --git a/node_modules/call-bind-apply-helpers/test/index.js b/node_modules/call-bind-apply-helpers/test/index.js new file mode 100644 index 0000000..1cdc89e --- /dev/null +++ b/node_modules/call-bind-apply-helpers/test/index.js @@ -0,0 +1,63 @@ +'use strict'; + +var callBind = require('../'); +var hasStrictMode = require('has-strict-mode')(); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var v = require('es-value-fixtures'); + +var test = require('tape'); + +test('callBindBasic', function (t) { + forEach(v.nonFunctions, function (nonFunction) { + t['throws']( + // @ts-expect-error + function () { callBind([nonFunction]); }, + TypeError, + inspect(nonFunction) + ' is not a function' + ); + }); + + var sentinel = { sentinel: true }; + /** @type {(this: T, a: A, b: B) => [T | undefined, A, B]} */ + var func = function (a, b) { + // eslint-disable-next-line no-invalid-this + return [!hasStrictMode && this === global ? undefined : this, a, b]; + }; + t.equal(func.length, 2, 'original function length is 2'); + + /** type {(thisArg: unknown, a: number, b: number) => [unknown, number, number]} */ + var bound = callBind([func]); + /** type {((a: number, b: number) => [typeof sentinel, typeof a, typeof b])} */ + var boundR = callBind([func, sentinel]); + /** type {((b: number) => [typeof sentinel, number, typeof b])} */ + var boundArg = callBind([func, sentinel, /** @type {const} */ (1)]); + + // @ts-expect-error + t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with no args'); + + // @ts-expect-error + t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); + // @ts-expect-error + t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func too few args'); + // @ts-expect-error + t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); + // @ts-expect-error + t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); + + t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); + t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with right args'); + t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); + t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); + + // @ts-expect-error + t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); + // @ts-expect-error + t.deepEqual(bound(1, 2, 3, 4), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args'); + // @ts-expect-error + t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); + // @ts-expect-error + t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); + + t.end(); +}); diff --git a/node_modules/call-bind-apply-helpers/tsconfig.json b/node_modules/call-bind-apply-helpers/tsconfig.json new file mode 100644 index 0000000..aef9993 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} \ No newline at end of file diff --git a/node_modules/combined-stream/License b/node_modules/combined-stream/License new file mode 100644 index 0000000..4804b7a --- /dev/null +++ b/node_modules/combined-stream/License @@ -0,0 +1,19 @@ +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/combined-stream/Readme.md b/node_modules/combined-stream/Readme.md new file mode 100644 index 0000000..9e367b5 --- /dev/null +++ b/node_modules/combined-stream/Readme.md @@ -0,0 +1,138 @@ +# combined-stream + +A stream that emits multiple other streams one after another. + +**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`. + +- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module. + +- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another. + +## Installation + +``` bash +npm install combined-stream +``` + +## Usage + +Here is a simple example that shows how you can use combined-stream to combine +two files into one: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create(); +combinedStream.append(fs.createReadStream('file1.txt')); +combinedStream.append(fs.createReadStream('file2.txt')); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +While the example above works great, it will pause all source streams until +they are needed. If you don't want that to happen, you can set `pauseStreams` +to `false`: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create({pauseStreams: false}); +combinedStream.append(fs.createReadStream('file1.txt')); +combinedStream.append(fs.createReadStream('file2.txt')); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +However, what if you don't have all the source streams yet, or you don't want +to allocate the resources (file descriptors, memory, etc.) for them right away? +Well, in that case you can simply provide a callback that supplies the stream +by calling a `next()` function: + +``` javascript +var CombinedStream = require('combined-stream'); +var fs = require('fs'); + +var combinedStream = CombinedStream.create(); +combinedStream.append(function(next) { + next(fs.createReadStream('file1.txt')); +}); +combinedStream.append(function(next) { + next(fs.createReadStream('file2.txt')); +}); + +combinedStream.pipe(fs.createWriteStream('combined.txt')); +``` + +## API + +### CombinedStream.create([options]) + +Returns a new combined stream object. Available options are: + +* `maxDataSize` +* `pauseStreams` + +The effect of those options is described below. + +### combinedStream.pauseStreams = `true` + +Whether to apply back pressure to the underlaying streams. If set to `false`, +the underlaying streams will never be paused. If set to `true`, the +underlaying streams will be paused right after being appended, as well as when +`delayedStream.pipe()` wants to throttle. + +### combinedStream.maxDataSize = `2 * 1024 * 1024` + +The maximum amount of bytes (or characters) to buffer for all source streams. +If this value is exceeded, `combinedStream` emits an `'error'` event. + +### combinedStream.dataSize = `0` + +The amount of bytes (or characters) currently buffered by `combinedStream`. + +### combinedStream.append(stream) + +Appends the given `stream` to the combinedStream object. If `pauseStreams` is +set to `true, this stream will also be paused right away. + +`streams` can also be a function that takes one parameter called `next`. `next` +is a function that must be invoked in order to provide the `next` stream, see +example above. + +Regardless of how the `stream` is appended, combined-stream always attaches an +`'error'` listener to it, so you don't have to do that manually. + +Special case: `stream` can also be a String or Buffer. + +### combinedStream.write(data) + +You should not call this, `combinedStream` takes care of piping the appended +streams into itself for you. + +### combinedStream.resume() + +Causes `combinedStream` to start drain the streams it manages. The function is +idempotent, and also emits a `'resume'` event each time which usually goes to +the stream that is currently being drained. + +### combinedStream.pause(); + +If `combinedStream.pauseStreams` is set to `false`, this does nothing. +Otherwise a `'pause'` event is emitted, this goes to the stream that is +currently being drained, so you can use it to apply back pressure. + +### combinedStream.end(); + +Sets `combinedStream.writable` to false, emits an `'end'` event, and removes +all streams from the queue. + +### combinedStream.destroy(); + +Same as `combinedStream.end()`, except it emits a `'close'` event instead of +`'end'`. + +## License + +combined-stream is licensed under the MIT license. diff --git a/node_modules/combined-stream/lib/combined_stream.js b/node_modules/combined-stream/lib/combined_stream.js new file mode 100644 index 0000000..125f097 --- /dev/null +++ b/node_modules/combined-stream/lib/combined_stream.js @@ -0,0 +1,208 @@ +var util = require('util'); +var Stream = require('stream').Stream; +var DelayedStream = require('delayed-stream'); + +module.exports = CombinedStream; +function CombinedStream() { + this.writable = false; + this.readable = true; + this.dataSize = 0; + this.maxDataSize = 2 * 1024 * 1024; + this.pauseStreams = true; + + this._released = false; + this._streams = []; + this._currentStream = null; + this._insideLoop = false; + this._pendingNext = false; +} +util.inherits(CombinedStream, Stream); + +CombinedStream.create = function(options) { + var combinedStream = new this(); + + options = options || {}; + for (var option in options) { + combinedStream[option] = options[option]; + } + + return combinedStream; +}; + +CombinedStream.isStreamLike = function(stream) { + return (typeof stream !== 'function') + && (typeof stream !== 'string') + && (typeof stream !== 'boolean') + && (typeof stream !== 'number') + && (!Buffer.isBuffer(stream)); +}; + +CombinedStream.prototype.append = function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + + if (isStreamLike) { + if (!(stream instanceof DelayedStream)) { + var newStream = DelayedStream.create(stream, { + maxDataSize: Infinity, + pauseStream: this.pauseStreams, + }); + stream.on('data', this._checkDataSize.bind(this)); + stream = newStream; + } + + this._handleErrors(stream); + + if (this.pauseStreams) { + stream.pause(); + } + } + + this._streams.push(stream); + return this; +}; + +CombinedStream.prototype.pipe = function(dest, options) { + Stream.prototype.pipe.call(this, dest, options); + this.resume(); + return dest; +}; + +CombinedStream.prototype._getNext = function() { + this._currentStream = null; + + if (this._insideLoop) { + this._pendingNext = true; + return; // defer call + } + + this._insideLoop = true; + try { + do { + this._pendingNext = false; + this._realGetNext(); + } while (this._pendingNext); + } finally { + this._insideLoop = false; + } +}; + +CombinedStream.prototype._realGetNext = function() { + var stream = this._streams.shift(); + + + if (typeof stream == 'undefined') { + this.end(); + return; + } + + if (typeof stream !== 'function') { + this._pipeNext(stream); + return; + } + + var getStream = stream; + getStream(function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('data', this._checkDataSize.bind(this)); + this._handleErrors(stream); + } + + this._pipeNext(stream); + }.bind(this)); +}; + +CombinedStream.prototype._pipeNext = function(stream) { + this._currentStream = stream; + + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('end', this._getNext.bind(this)); + stream.pipe(this, {end: false}); + return; + } + + var value = stream; + this.write(value); + this._getNext(); +}; + +CombinedStream.prototype._handleErrors = function(stream) { + var self = this; + stream.on('error', function(err) { + self._emitError(err); + }); +}; + +CombinedStream.prototype.write = function(data) { + this.emit('data', data); +}; + +CombinedStream.prototype.pause = function() { + if (!this.pauseStreams) { + return; + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); + this.emit('pause'); +}; + +CombinedStream.prototype.resume = function() { + if (!this._released) { + this._released = true; + this.writable = true; + this._getNext(); + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); + this.emit('resume'); +}; + +CombinedStream.prototype.end = function() { + this._reset(); + this.emit('end'); +}; + +CombinedStream.prototype.destroy = function() { + this._reset(); + this.emit('close'); +}; + +CombinedStream.prototype._reset = function() { + this.writable = false; + this._streams = []; + this._currentStream = null; +}; + +CombinedStream.prototype._checkDataSize = function() { + this._updateDataSize(); + if (this.dataSize <= this.maxDataSize) { + return; + } + + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; + this._emitError(new Error(message)); +}; + +CombinedStream.prototype._updateDataSize = function() { + this.dataSize = 0; + + var self = this; + this._streams.forEach(function(stream) { + if (!stream.dataSize) { + return; + } + + self.dataSize += stream.dataSize; + }); + + if (this._currentStream && this._currentStream.dataSize) { + this.dataSize += this._currentStream.dataSize; + } +}; + +CombinedStream.prototype._emitError = function(err) { + this._reset(); + this.emit('error', err); +}; diff --git a/node_modules/combined-stream/package.json b/node_modules/combined-stream/package.json new file mode 100644 index 0000000..6982b6d --- /dev/null +++ b/node_modules/combined-stream/package.json @@ -0,0 +1,25 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "combined-stream", + "description": "A stream that emits multiple other streams one after another.", + "version": "1.0.8", + "homepage": "https://github.com/felixge/node-combined-stream", + "repository": { + "type": "git", + "url": "git://github.com/felixge/node-combined-stream.git" + }, + "main": "./lib/combined_stream", + "scripts": { + "test": "node test/run.js" + }, + "engines": { + "node": ">= 0.8" + }, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "devDependencies": { + "far": "~0.0.7" + }, + "license": "MIT" +} diff --git a/node_modules/combined-stream/yarn.lock b/node_modules/combined-stream/yarn.lock new file mode 100644 index 0000000..7edf418 --- /dev/null +++ b/node_modules/combined-stream/yarn.lock @@ -0,0 +1,17 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +far@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7" + dependencies: + oop "0.0.3" + +oop@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401" diff --git a/node_modules/commander/esm.mjs b/node_modules/commander/esm.mjs new file mode 100644 index 0000000..60bf252 --- /dev/null +++ b/node_modules/commander/esm.mjs @@ -0,0 +1,4 @@ +import commander from './index.js'; + +// wrapper to provide named exports for ESM. +export const { program, Option, Command, CommanderError, InvalidOptionArgumentError, Help, createCommand } = commander; diff --git a/node_modules/commander/package-support.json b/node_modules/commander/package-support.json new file mode 100644 index 0000000..4eabb97 --- /dev/null +++ b/node_modules/commander/package-support.json @@ -0,0 +1,16 @@ +{ + "versions": [ + { + "version": "*", + "target": { + "node": "supported" + }, + "response": { + "type": "time-permitting" + }, + "backing": { + "npm-funding": true + } + } + ] +} diff --git a/node_modules/debug/LICENSE b/node_modules/debug/LICENSE new file mode 100644 index 0000000..1a9820e --- /dev/null +++ b/node_modules/debug/LICENSE @@ -0,0 +1,20 @@ +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk +Copyright (c) 2018-2021 Josh Junon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/debug/README.md b/node_modules/debug/README.md new file mode 100644 index 0000000..9ebdfbf --- /dev/null +++ b/node_modules/debug/README.md @@ -0,0 +1,481 @@ +# debug +[![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows command prompt notes + +##### CMD + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Example: + +```cmd +set DEBUG=* & node app.js +``` + +##### PowerShell (VS Code default) + +PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Example: + +```cmd +$env:DEBUG='app';node app.js +``` + +Then, run the program to be debugged as usual. + +npm script example: +```js + "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", +``` + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + +In Chromium-based web browsers (e.g. Brave, Chrome, and Electron), the JavaScript console will—by default—only show messages logged by `debug` if the "Verbose" log level is _enabled_. + + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Extend +You can simply extend debugger +```js +const log = require('debug')('auth'); + +//creates new debug instance with extended namespace +const logSign = log.extend('sign'); +const logLogin = log.extend('login'); + +log('hello'); // auth hello +logSign('hello'); //auth:sign hello +logLogin('hello'); //auth:login hello +``` + +## Set dynamically + +You can also enable debug dynamically by calling the `enable()` method : + +```js +let debug = require('debug'); + +console.log(1, debug.enabled('test')); + +debug.enable('test'); +console.log(2, debug.enabled('test')); + +debug.disable(); +console.log(3, debug.enabled('test')); + +``` + +print : +``` +1 false +2 true +3 false +``` + +Usage : +`enable(namespaces)` +`namespaces` can include modes separated by a colon and wildcards. + +Note that calling `enable()` completely overrides previously set DEBUG variable : + +``` +$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' +=> false +``` + +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + +## Usage in child processes + +Due to the way `debug` detects if the output is a TTY or not, colors are not shown in child processes when `stderr` is piped. A solution is to pass the `DEBUG_COLORS=1` environment variable to the child process. +For example: + +```javascript +worker = fork(WORKER_WRAP_PATH, [workerPath], { + stdio: [ + /* stdin: */ 0, + /* stdout: */ 'pipe', + /* stderr: */ 'pipe', + 'ipc', + ], + env: Object.assign({}, process.env, { + DEBUG_COLORS: 1 // without this settings, colors won't be shown + }), +}); + +worker.stderr.pipe(process.stderr, { end: false }); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + - Josh Junon + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> +Copyright (c) 2018-2021 Josh Junon + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/debug/package.json b/node_modules/debug/package.json new file mode 100644 index 0000000..ee8abb5 --- /dev/null +++ b/node_modules/debug/package.json @@ -0,0 +1,64 @@ +{ + "name": "debug", + "version": "4.4.3", + "repository": { + "type": "git", + "url": "git://github.com/debug-js/debug.git" + }, + "description": "Lightweight debugging utility for Node.js and the browser", + "keywords": [ + "debug", + "log", + "debugger" + ], + "files": [ + "src", + "LICENSE", + "README.md" + ], + "author": "Josh Junon (https://github.com/qix-)", + "contributors": [ + "TJ Holowaychuk ", + "Nathan Rajlich (http://n8.io)", + "Andrew Rhyne " + ], + "license": "MIT", + "scripts": { + "lint": "xo", + "test": "npm run test:node && npm run test:browser && npm run lint", + "test:node": "mocha test.js test.node.js", + "test:browser": "karma start --single-run", + "test:coverage": "cat ./coverage/lcov.info | coveralls" + }, + "dependencies": { + "ms": "^2.1.3" + }, + "devDependencies": { + "brfs": "^2.0.1", + "browserify": "^16.2.3", + "coveralls": "^3.0.2", + "karma": "^3.1.4", + "karma-browserify": "^6.0.0", + "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "sinon": "^14.0.0", + "xo": "^0.23.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + }, + "main": "./src/index.js", + "browser": "./src/browser.js", + "engines": { + "node": ">=6.0" + }, + "xo": { + "rules": { + "import/extensions": "off" + } + } +} diff --git a/node_modules/debug/src/browser.js b/node_modules/debug/src/browser.js new file mode 100644 index 0000000..5993451 --- /dev/null +++ b/node_modules/debug/src/browser.js @@ -0,0 +1,272 @@ +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + let m; + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + // eslint-disable-next-line no-return-assign + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ +exports.log = console.debug || console.log || (() => {}); + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; diff --git a/node_modules/debug/src/common.js b/node_modules/debug/src/common.js new file mode 100644 index 0000000..141cb57 --- /dev/null +++ b/node_modules/debug/src/common.js @@ -0,0 +1,292 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + const split = (typeof namespaces === 'string' ? namespaces : '') + .trim() + .replace(/\s+/g, ',') + .split(',') + .filter(Boolean); + + for (const ns of split) { + if (ns[0] === '-') { + createDebug.skips.push(ns.slice(1)); + } else { + createDebug.names.push(ns); + } + } + } + + /** + * Checks if the given string matches a namespace template, honoring + * asterisks as wildcards. + * + * @param {String} search + * @param {String} template + * @return {Boolean} + */ + function matchesTemplate(search, template) { + let searchIndex = 0; + let templateIndex = 0; + let starIndex = -1; + let matchIndex = 0; + + while (searchIndex < search.length) { + if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) { + // Match character or proceed with wildcard + if (template[templateIndex] === '*') { + starIndex = templateIndex; + matchIndex = searchIndex; + templateIndex++; // Skip the '*' + } else { + searchIndex++; + templateIndex++; + } + } else if (starIndex !== -1) { // eslint-disable-line no-negated-condition + // Backtrack to the last '*' and try to match more characters + templateIndex = starIndex + 1; + matchIndex++; + searchIndex = matchIndex; + } else { + return false; // No match + } + } + + // Handle trailing '*' in template + while (templateIndex < template.length && template[templateIndex] === '*') { + templateIndex++; + } + + return templateIndex === template.length; + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names, + ...createDebug.skips.map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + for (const skip of createDebug.skips) { + if (matchesTemplate(name, skip)) { + return false; + } + } + + for (const ns of createDebug.names) { + if (matchesTemplate(name, ns)) { + return true; + } + } + + return false; + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; diff --git a/node_modules/debug/src/index.js b/node_modules/debug/src/index.js new file mode 100644 index 0000000..bf4c57f --- /dev/null +++ b/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/node_modules/debug/src/node.js b/node_modules/debug/src/node.js new file mode 100644 index 0000000..715560a --- /dev/null +++ b/node_modules/debug/src/node.js @@ -0,0 +1,263 @@ +/** + * Module dependencies. + */ + +const tty = require('tty'); +const util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + */ + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' +); + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = require('supports-color'); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); +} + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} + +/** + * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr. + */ + +function log(...args) { + return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); +}; + +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; diff --git a/node_modules/delayed-stream/.npmignore b/node_modules/delayed-stream/.npmignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/node_modules/delayed-stream/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/delayed-stream/License b/node_modules/delayed-stream/License new file mode 100644 index 0000000..4804b7a --- /dev/null +++ b/node_modules/delayed-stream/License @@ -0,0 +1,19 @@ +Copyright (c) 2011 Debuggable Limited + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/delayed-stream/Makefile b/node_modules/delayed-stream/Makefile new file mode 100644 index 0000000..b4ff85a --- /dev/null +++ b/node_modules/delayed-stream/Makefile @@ -0,0 +1,7 @@ +SHELL := /bin/bash + +test: + @./test/run.js + +.PHONY: test + diff --git a/node_modules/delayed-stream/Readme.md b/node_modules/delayed-stream/Readme.md new file mode 100644 index 0000000..aca36f9 --- /dev/null +++ b/node_modules/delayed-stream/Readme.md @@ -0,0 +1,141 @@ +# delayed-stream + +Buffers events from a stream until you are ready to handle them. + +## Installation + +``` bash +npm install delayed-stream +``` + +## Usage + +The following example shows how to write a http echo server that delays its +response by 1000 ms. + +``` javascript +var DelayedStream = require('delayed-stream'); +var http = require('http'); + +http.createServer(function(req, res) { + var delayed = DelayedStream.create(req); + + setTimeout(function() { + res.writeHead(200); + delayed.pipe(res); + }, 1000); +}); +``` + +If you are not using `Stream#pipe`, you can also manually release the buffered +events by calling `delayedStream.resume()`: + +``` javascript +var delayed = DelayedStream.create(req); + +setTimeout(function() { + // Emit all buffered events and resume underlaying source + delayed.resume(); +}, 1000); +``` + +## Implementation + +In order to use this meta stream properly, here are a few things you should +know about the implementation. + +### Event Buffering / Proxying + +All events of the `source` stream are hijacked by overwriting the `source.emit` +method. Until node implements a catch-all event listener, this is the only way. + +However, delayed-stream still continues to emit all events it captures on the +`source`, regardless of whether you have released the delayed stream yet or +not. + +Upon creation, delayed-stream captures all `source` events and stores them in +an internal event buffer. Once `delayedStream.release()` is called, all +buffered events are emitted on the `delayedStream`, and the event buffer is +cleared. After that, delayed-stream merely acts as a proxy for the underlaying +source. + +### Error handling + +Error events on `source` are buffered / proxied just like any other events. +However, `delayedStream.create` attaches a no-op `'error'` listener to the +`source`. This way you only have to handle errors on the `delayedStream` +object, rather than in two places. + +### Buffer limits + +delayed-stream provides a `maxDataSize` property that can be used to limit +the amount of data being buffered. In order to protect you from bad `source` +streams that don't react to `source.pause()`, this feature is enabled by +default. + +## API + +### DelayedStream.create(source, [options]) + +Returns a new `delayedStream`. Available options are: + +* `pauseStream` +* `maxDataSize` + +The description for those properties can be found below. + +### delayedStream.source + +The `source` stream managed by this object. This is useful if you are +passing your `delayedStream` around, and you still want to access properties +on the `source` object. + +### delayedStream.pauseStream = true + +Whether to pause the underlaying `source` when calling +`DelayedStream.create()`. Modifying this property afterwards has no effect. + +### delayedStream.maxDataSize = 1024 * 1024 + +The amount of data to buffer before emitting an `error`. + +If the underlaying source is emitting `Buffer` objects, the `maxDataSize` +refers to bytes. + +If the underlaying source is emitting JavaScript strings, the size refers to +characters. + +If you know what you are doing, you can set this property to `Infinity` to +disable this feature. You can also modify this property during runtime. + +### delayedStream.dataSize = 0 + +The amount of data buffered so far. + +### delayedStream.readable + +An ECMA5 getter that returns the value of `source.readable`. + +### delayedStream.resume() + +If the `delayedStream` has not been released so far, `delayedStream.release()` +is called. + +In either case, `source.resume()` is called. + +### delayedStream.pause() + +Calls `source.pause()`. + +### delayedStream.pipe(dest) + +Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. + +### delayedStream.release() + +Emits and clears all events that have been buffered up so far. This does not +resume the underlaying source, use `delayedStream.resume()` instead. + +## License + +delayed-stream is licensed under the MIT license. diff --git a/node_modules/delayed-stream/lib/delayed_stream.js b/node_modules/delayed-stream/lib/delayed_stream.js new file mode 100644 index 0000000..b38fc85 --- /dev/null +++ b/node_modules/delayed-stream/lib/delayed_stream.js @@ -0,0 +1,107 @@ +var Stream = require('stream').Stream; +var util = require('util'); + +module.exports = DelayedStream; +function DelayedStream() { + this.source = null; + this.dataSize = 0; + this.maxDataSize = 1024 * 1024; + this.pauseStream = true; + + this._maxDataSizeExceeded = false; + this._released = false; + this._bufferedEvents = []; +} +util.inherits(DelayedStream, Stream); + +DelayedStream.create = function(source, options) { + var delayedStream = new this(); + + options = options || {}; + for (var option in options) { + delayedStream[option] = options[option]; + } + + delayedStream.source = source; + + var realEmit = source.emit; + source.emit = function() { + delayedStream._handleEmit(arguments); + return realEmit.apply(source, arguments); + }; + + source.on('error', function() {}); + if (delayedStream.pauseStream) { + source.pause(); + } + + return delayedStream; +}; + +Object.defineProperty(DelayedStream.prototype, 'readable', { + configurable: true, + enumerable: true, + get: function() { + return this.source.readable; + } +}); + +DelayedStream.prototype.setEncoding = function() { + return this.source.setEncoding.apply(this.source, arguments); +}; + +DelayedStream.prototype.resume = function() { + if (!this._released) { + this.release(); + } + + this.source.resume(); +}; + +DelayedStream.prototype.pause = function() { + this.source.pause(); +}; + +DelayedStream.prototype.release = function() { + this._released = true; + + this._bufferedEvents.forEach(function(args) { + this.emit.apply(this, args); + }.bind(this)); + this._bufferedEvents = []; +}; + +DelayedStream.prototype.pipe = function() { + var r = Stream.prototype.pipe.apply(this, arguments); + this.resume(); + return r; +}; + +DelayedStream.prototype._handleEmit = function(args) { + if (this._released) { + this.emit.apply(this, args); + return; + } + + if (args[0] === 'data') { + this.dataSize += args[1].length; + this._checkIfMaxDataSizeExceeded(); + } + + this._bufferedEvents.push(args); +}; + +DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { + if (this._maxDataSizeExceeded) { + return; + } + + if (this.dataSize <= this.maxDataSize) { + return; + } + + this._maxDataSizeExceeded = true; + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' + this.emit('error', new Error(message)); +}; diff --git a/node_modules/delayed-stream/package.json b/node_modules/delayed-stream/package.json new file mode 100644 index 0000000..eea3291 --- /dev/null +++ b/node_modules/delayed-stream/package.json @@ -0,0 +1,27 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "contributors": [ + "Mike Atkins " + ], + "name": "delayed-stream", + "description": "Buffers events from a stream until you are ready to handle them.", + "license": "MIT", + "version": "1.0.0", + "homepage": "https://github.com/felixge/node-delayed-stream", + "repository": { + "type": "git", + "url": "git://github.com/felixge/node-delayed-stream.git" + }, + "main": "./lib/delayed_stream", + "engines": { + "node": ">=0.4.0" + }, + "scripts": { + "test": "make test" + }, + "dependencies": {}, + "devDependencies": { + "fake": "0.2.0", + "far": "0.0.1" + } +} diff --git a/node_modules/dunder-proto/.eslintrc b/node_modules/dunder-proto/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/dunder-proto/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/dunder-proto/.github/FUNDING.yml b/node_modules/dunder-proto/.github/FUNDING.yml new file mode 100644 index 0000000..8a1d7b0 --- /dev/null +++ b/node_modules/dunder-proto/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/dunder-proto +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/dunder-proto/.nycrc b/node_modules/dunder-proto/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/dunder-proto/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/dunder-proto/CHANGELOG.md b/node_modules/dunder-proto/CHANGELOG.md new file mode 100644 index 0000000..9b8b2f8 --- /dev/null +++ b/node_modules/dunder-proto/CHANGELOG.md @@ -0,0 +1,24 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.1](https://github.com/es-shims/dunder-proto/compare/v1.0.0...v1.0.1) - 2024-12-16 + +### Commits + +- [Fix] do not crash when `--disable-proto=throw` [`6c367d9`](https://github.com/es-shims/dunder-proto/commit/6c367d919bc1604778689a297bbdbfea65752847) +- [Tests] ensure noproto tests only use the current version of dunder-proto [`b02365b`](https://github.com/es-shims/dunder-proto/commit/b02365b9cf889c4a2cac7be0c3cfc90a789af36c) +- [Dev Deps] update `@arethetypeswrong/cli`, `@types/tape` [`e3c5c3b`](https://github.com/es-shims/dunder-proto/commit/e3c5c3bd81cf8cef7dff2eca19e558f0e307f666) +- [Deps] update `call-bind-apply-helpers` [`19f1da0`](https://github.com/es-shims/dunder-proto/commit/19f1da028b8dd0d05c85bfd8f7eed2819b686450) + +## v1.0.0 - 2024-12-06 + +### Commits + +- Initial implementation, tests, readme, types [`a5b74b0`](https://github.com/es-shims/dunder-proto/commit/a5b74b0082f5270cb0905cd9a2e533cee7498373) +- Initial commit [`73fb5a3`](https://github.com/es-shims/dunder-proto/commit/73fb5a353b51ac2ab00c9fdeb0114daffd4c07a8) +- npm init [`80152dc`](https://github.com/es-shims/dunder-proto/commit/80152dc98155da4eb046d9f67a87ed96e8280a1d) +- Only apps should have lockfiles [`03e6660`](https://github.com/es-shims/dunder-proto/commit/03e6660a1d70dc401f3e217a031475ec537243dd) diff --git a/node_modules/dunder-proto/LICENSE b/node_modules/dunder-proto/LICENSE new file mode 100644 index 0000000..34995e7 --- /dev/null +++ b/node_modules/dunder-proto/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/dunder-proto/README.md b/node_modules/dunder-proto/README.md new file mode 100644 index 0000000..44b80a2 --- /dev/null +++ b/node_modules/dunder-proto/README.md @@ -0,0 +1,54 @@ +# dunder-proto [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +If available, the `Object.prototype.__proto__` accessor and mutator, call-bound. + +## Getting started + +```sh +npm install --save dunder-proto +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const getDunder = require('dunder-proto/get'); +const setDunder = require('dunder-proto/set'); + +const obj = {}; + +assert.equal('toString' in obj, true); +assert.equal(getDunder(obj), Object.prototype); + +setDunder(obj, null); + +assert.equal('toString' in obj, false); +assert.equal(getDunder(obj), null); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/dunder-proto +[npm-version-svg]: https://versionbadg.es/es-shims/dunder-proto.svg +[deps-svg]: https://david-dm.org/es-shims/dunder-proto.svg +[deps-url]: https://david-dm.org/es-shims/dunder-proto +[dev-deps-svg]: https://david-dm.org/es-shims/dunder-proto/dev-status.svg +[dev-deps-url]: https://david-dm.org/es-shims/dunder-proto#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/dunder-proto.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/dunder-proto.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/dunder-proto.svg +[downloads-url]: https://npm-stat.com/charts.html?package=dunder-proto +[codecov-image]: https://codecov.io/gh/es-shims/dunder-proto/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/es-shims/dunder-proto/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/dunder-proto +[actions-url]: https://github.com/es-shims/dunder-proto/actions diff --git a/node_modules/dunder-proto/get.d.ts b/node_modules/dunder-proto/get.d.ts new file mode 100644 index 0000000..c7e14d2 --- /dev/null +++ b/node_modules/dunder-proto/get.d.ts @@ -0,0 +1,5 @@ +declare function getDunderProto(target: {}): object | null; + +declare const x: false | typeof getDunderProto; + +export = x; \ No newline at end of file diff --git a/node_modules/dunder-proto/get.js b/node_modules/dunder-proto/get.js new file mode 100644 index 0000000..45093df --- /dev/null +++ b/node_modules/dunder-proto/get.js @@ -0,0 +1,30 @@ +'use strict'; + +var callBind = require('call-bind-apply-helpers'); +var gOPD = require('gopd'); + +var hasProtoAccessor; +try { + // eslint-disable-next-line no-extra-parens, no-proto + hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype; +} catch (e) { + if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') { + throw e; + } +} + +// eslint-disable-next-line no-extra-parens +var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__')); + +var $Object = Object; +var $getPrototypeOf = $Object.getPrototypeOf; + +/** @type {import('./get')} */ +module.exports = desc && typeof desc.get === 'function' + ? callBind([desc.get]) + : typeof $getPrototypeOf === 'function' + ? /** @type {import('./get')} */ function getDunder(value) { + // eslint-disable-next-line eqeqeq + return $getPrototypeOf(value == null ? value : $Object(value)); + } + : false; diff --git a/node_modules/dunder-proto/package.json b/node_modules/dunder-proto/package.json new file mode 100644 index 0000000..04a4036 --- /dev/null +++ b/node_modules/dunder-proto/package.json @@ -0,0 +1,76 @@ +{ + "name": "dunder-proto", + "version": "1.0.1", + "description": "If available, the `Object.prototype.__proto__` accessor and mutator, call-bound", + "main": false, + "exports": { + "./get": "./get.js", + "./set": "./set.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/es-shims/dunder-proto.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/es-shims/dunder-proto/issues" + }, + "homepage": "https://github.com/es-shims/dunder-proto#readme", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.1", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.2", + "@types/tape": "^5.7.0", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "testling": { + "files": "test/index.js" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/dunder-proto/set.d.ts b/node_modules/dunder-proto/set.d.ts new file mode 100644 index 0000000..16bfdfe --- /dev/null +++ b/node_modules/dunder-proto/set.d.ts @@ -0,0 +1,5 @@ +declare function setDunderProto

(target: {}, proto: P): P; + +declare const x: false | typeof setDunderProto; + +export = x; \ No newline at end of file diff --git a/node_modules/dunder-proto/set.js b/node_modules/dunder-proto/set.js new file mode 100644 index 0000000..6085b6e --- /dev/null +++ b/node_modules/dunder-proto/set.js @@ -0,0 +1,35 @@ +'use strict'; + +var callBind = require('call-bind-apply-helpers'); +var gOPD = require('gopd'); +var $TypeError = require('es-errors/type'); + +/** @type {{ __proto__?: object | null }} */ +var obj = {}; +try { + obj.__proto__ = null; // eslint-disable-line no-proto +} catch (e) { + if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') { + throw e; + } +} + +var hasProtoMutator = !('toString' in obj); + +// eslint-disable-next-line no-extra-parens +var desc = gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__')); + +/** @type {import('./set')} */ +module.exports = hasProtoMutator && ( +// eslint-disable-next-line no-extra-parens + (!!desc && typeof desc.set === 'function' && /** @type {import('./set')} */ (callBind([desc.set]))) + || /** @type {import('./set')} */ function setDunder(object, proto) { + // this is node v0.10 or older, which doesn't have Object.setPrototypeOf and has undeniable __proto__ + if (object == null) { // eslint-disable-line eqeqeq + throw new $TypeError('set Object.prototype.__proto__ called on null or undefined'); + } + // eslint-disable-next-line no-proto, no-param-reassign, no-extra-parens + /** @type {{ __proto__?: object | null }} */ (object).__proto__ = proto; + return proto; + } +); diff --git a/node_modules/dunder-proto/test/get.js b/node_modules/dunder-proto/test/get.js new file mode 100644 index 0000000..253f183 --- /dev/null +++ b/node_modules/dunder-proto/test/get.js @@ -0,0 +1,34 @@ +'use strict'; + +var test = require('tape'); + +var getDunderProto = require('../get'); + +test('getDunderProto', { skip: !getDunderProto }, function (t) { + if (!getDunderProto) { + throw 'should never happen; this is just for type narrowing'; // eslint-disable-line no-throw-literal + } + + // @ts-expect-error + t['throws'](function () { getDunderProto(); }, TypeError, 'throws if no argument'); + // @ts-expect-error + t['throws'](function () { getDunderProto(undefined); }, TypeError, 'throws with undefined'); + // @ts-expect-error + t['throws'](function () { getDunderProto(null); }, TypeError, 'throws with null'); + + t.equal(getDunderProto({}), Object.prototype); + t.equal(getDunderProto([]), Array.prototype); + t.equal(getDunderProto(function () {}), Function.prototype); + t.equal(getDunderProto(/./g), RegExp.prototype); + t.equal(getDunderProto(42), Number.prototype); + t.equal(getDunderProto(true), Boolean.prototype); + t.equal(getDunderProto('foo'), String.prototype); + + t.end(); +}); + +test('no dunder proto', { skip: !!getDunderProto }, function (t) { + t.notOk('__proto__' in Object.prototype, 'no __proto__ in Object.prototype'); + + t.end(); +}); diff --git a/node_modules/dunder-proto/test/index.js b/node_modules/dunder-proto/test/index.js new file mode 100644 index 0000000..08ff36f --- /dev/null +++ b/node_modules/dunder-proto/test/index.js @@ -0,0 +1,4 @@ +'use strict'; + +require('./get'); +require('./set'); diff --git a/node_modules/dunder-proto/test/set.js b/node_modules/dunder-proto/test/set.js new file mode 100644 index 0000000..c3bfe4d --- /dev/null +++ b/node_modules/dunder-proto/test/set.js @@ -0,0 +1,50 @@ +'use strict'; + +var test = require('tape'); + +var setDunderProto = require('../set'); + +test('setDunderProto', { skip: !setDunderProto }, function (t) { + if (!setDunderProto) { + throw 'should never happen; this is just for type narrowing'; // eslint-disable-line no-throw-literal + } + + // @ts-expect-error + t['throws'](function () { setDunderProto(); }, TypeError, 'throws if no arguments'); + // @ts-expect-error + t['throws'](function () { setDunderProto(undefined); }, TypeError, 'throws with undefined and nothing'); + // @ts-expect-error + t['throws'](function () { setDunderProto(undefined, undefined); }, TypeError, 'throws with undefined and undefined'); + // @ts-expect-error + t['throws'](function () { setDunderProto(null); }, TypeError, 'throws with null and undefined'); + // @ts-expect-error + t['throws'](function () { setDunderProto(null, undefined); }, TypeError, 'throws with null and undefined'); + + /** @type {{ inherited?: boolean }} */ + var obj = {}; + t.ok('toString' in obj, 'object initially has toString'); + + setDunderProto(obj, null); + t.notOk('toString' in obj, 'object no longer has toString'); + + t.notOk('inherited' in obj, 'object lacks inherited property'); + setDunderProto(obj, { inherited: true }); + t.equal(obj.inherited, true, 'object has inherited property'); + + t.end(); +}); + +test('no dunder proto', { skip: !!setDunderProto }, function (t) { + if ('__proto__' in Object.prototype) { + t['throws']( + // @ts-expect-error + function () { ({}).__proto__ = null; }, // eslint-disable-line no-proto + Error, + 'throws when setting Object.prototype.__proto__' + ); + } else { + t.notOk('__proto__' in Object.prototype, 'no __proto__ in Object.prototype'); + } + + t.end(); +}); diff --git a/node_modules/dunder-proto/tsconfig.json b/node_modules/dunder-proto/tsconfig.json new file mode 100644 index 0000000..dabbe23 --- /dev/null +++ b/node_modules/dunder-proto/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ES2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/es-define-property/.eslintrc b/node_modules/es-define-property/.eslintrc new file mode 100644 index 0000000..46f3b12 --- /dev/null +++ b/node_modules/es-define-property/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": ["error", { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/es-define-property/.github/FUNDING.yml b/node_modules/es-define-property/.github/FUNDING.yml new file mode 100644 index 0000000..4445451 --- /dev/null +++ b/node_modules/es-define-property/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/es-define-property +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/es-define-property/.nycrc b/node_modules/es-define-property/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/es-define-property/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/es-define-property/CHANGELOG.md b/node_modules/es-define-property/CHANGELOG.md new file mode 100644 index 0000000..5f60cc0 --- /dev/null +++ b/node_modules/es-define-property/CHANGELOG.md @@ -0,0 +1,29 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.1](https://github.com/ljharb/es-define-property/compare/v1.0.0...v1.0.1) - 2024-12-06 + +### Commits + +- [types] use shared tsconfig [`954a663`](https://github.com/ljharb/es-define-property/commit/954a66360326e508a0e5daa4b07493d58f5e110e) +- [actions] split out node 10-20, and 20+ [`3a8e84b`](https://github.com/ljharb/es-define-property/commit/3a8e84b23883f26ff37b3e82ff283834228e18c6) +- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/get-intrinsic`, `@types/tape`, `auto-changelog`, `gopd`, `tape` [`86ae27b`](https://github.com/ljharb/es-define-property/commit/86ae27bb8cc857b23885136fad9cbe965ae36612) +- [Refactor] avoid using `get-intrinsic` [`02480c0`](https://github.com/ljharb/es-define-property/commit/02480c0353ef6118965282977c3864aff53d98b1) +- [Tests] replace `aud` with `npm audit` [`f6093ff`](https://github.com/ljharb/es-define-property/commit/f6093ff74ab51c98015c2592cd393bd42478e773) +- [Tests] configure testling [`7139e66`](https://github.com/ljharb/es-define-property/commit/7139e66959247a56086d9977359caef27c6849e7) +- [Dev Deps] update `tape` [`b901b51`](https://github.com/ljharb/es-define-property/commit/b901b511a75e001a40ce1a59fef7d9ffcfc87482) +- [Tests] fix types in tests [`469d269`](https://github.com/ljharb/es-define-property/commit/469d269fd141b1e773ec053a9fa35843493583e0) +- [Dev Deps] add missing peer dep [`733acfb`](https://github.com/ljharb/es-define-property/commit/733acfb0c4c96edf337e470b89a25a5b3724c352) + +## v1.0.0 - 2024-02-12 + +### Commits + +- Initial implementation, tests, readme, types [`3e154e1`](https://github.com/ljharb/es-define-property/commit/3e154e11a2fee09127220f5e503bf2c0a31dd480) +- Initial commit [`07d98de`](https://github.com/ljharb/es-define-property/commit/07d98de34a4dc31ff5e83a37c0c3f49e0d85cd50) +- npm init [`c4eb634`](https://github.com/ljharb/es-define-property/commit/c4eb6348b0d3886aac36cef34ad2ee0665ea6f3e) +- Only apps should have lockfiles [`7af86ec`](https://github.com/ljharb/es-define-property/commit/7af86ec1d311ec0b17fdfe616a25f64276903856) diff --git a/node_modules/es-define-property/LICENSE b/node_modules/es-define-property/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/es-define-property/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-define-property/README.md b/node_modules/es-define-property/README.md new file mode 100644 index 0000000..9b291bd --- /dev/null +++ b/node_modules/es-define-property/README.md @@ -0,0 +1,49 @@ +# es-define-property [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +`Object.defineProperty`, but not IE 8's broken one. + +## Example + +```js +const assert = require('assert'); + +const $defineProperty = require('es-define-property'); + +if ($defineProperty) { + assert.equal($defineProperty, Object.defineProperty); +} else if (Object.defineProperty) { + assert.equal($defineProperty, false, 'this is IE 8'); +} else { + assert.equal($defineProperty, false, 'this is an ES3 engine'); +} +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/es-define-property +[npm-version-svg]: https://versionbadg.es/ljharb/es-define-property.svg +[deps-svg]: https://david-dm.org/ljharb/es-define-property.svg +[deps-url]: https://david-dm.org/ljharb/es-define-property +[dev-deps-svg]: https://david-dm.org/ljharb/es-define-property/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/es-define-property#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-define-property.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-define-property.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-define-property.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-define-property +[codecov-image]: https://codecov.io/gh/ljharb/es-define-property/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/es-define-property/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/es-define-property +[actions-url]: https://github.com/ljharb/es-define-property/actions diff --git a/node_modules/es-define-property/index.d.ts b/node_modules/es-define-property/index.d.ts new file mode 100644 index 0000000..6012247 --- /dev/null +++ b/node_modules/es-define-property/index.d.ts @@ -0,0 +1,3 @@ +declare const defineProperty: false | typeof Object.defineProperty; + +export = defineProperty; \ No newline at end of file diff --git a/node_modules/es-define-property/index.js b/node_modules/es-define-property/index.js new file mode 100644 index 0000000..e0a2925 --- /dev/null +++ b/node_modules/es-define-property/index.js @@ -0,0 +1,14 @@ +'use strict'; + +/** @type {import('.')} */ +var $defineProperty = Object.defineProperty || false; +if ($defineProperty) { + try { + $defineProperty({}, 'a', { value: 1 }); + } catch (e) { + // IE 8 has a broken defineProperty + $defineProperty = false; + } +} + +module.exports = $defineProperty; diff --git a/node_modules/es-define-property/package.json b/node_modules/es-define-property/package.json new file mode 100644 index 0000000..fbed187 --- /dev/null +++ b/node_modules/es-define-property/package.json @@ -0,0 +1,81 @@ +{ + "name": "es-define-property", + "version": "1.0.1", + "description": "`Object.defineProperty`, but not IE 8's broken one.", + "main": "index.js", + "types": "./index.d.ts", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/es-define-property.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "object", + "define", + "property", + "defineProperty", + "Object.defineProperty" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/es-define-property/issues" + }, + "homepage": "https://github.com/ljharb/es-define-property#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.2", + "@types/gopd": "^1.0.3", + "@types/tape": "^5.6.5", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "gopd": "^1.2.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/es-define-property/test/index.js b/node_modules/es-define-property/test/index.js new file mode 100644 index 0000000..b4b4688 --- /dev/null +++ b/node_modules/es-define-property/test/index.js @@ -0,0 +1,56 @@ +'use strict'; + +var $defineProperty = require('../'); + +var test = require('tape'); +var gOPD = require('gopd'); + +test('defineProperty: supported', { skip: !$defineProperty }, function (t) { + t.plan(4); + + t.equal(typeof $defineProperty, 'function', 'defineProperty is supported'); + if ($defineProperty && gOPD) { // this `if` check is just to shut TS up + /** @type {{ a: number, b?: number, c?: number }} */ + var o = { a: 1 }; + + $defineProperty(o, 'b', { enumerable: true, value: 2 }); + t.deepEqual( + gOPD(o, 'b'), + { + configurable: false, + enumerable: true, + value: 2, + writable: false + }, + 'property descriptor is as expected' + ); + + $defineProperty(o, 'c', { enumerable: false, value: 3, writable: true }); + t.deepEqual( + gOPD(o, 'c'), + { + configurable: false, + enumerable: false, + value: 3, + writable: true + }, + 'property descriptor is as expected' + ); + } + + t.equal($defineProperty, Object.defineProperty, 'defineProperty is Object.defineProperty'); + + t.end(); +}); + +test('defineProperty: not supported', { skip: !!$defineProperty }, function (t) { + t.notOk($defineProperty, 'defineProperty is not supported'); + + t.match( + typeof $defineProperty, + /^(?:undefined|boolean)$/, + '`typeof defineProperty` is `undefined` or `boolean`' + ); + + t.end(); +}); diff --git a/node_modules/es-define-property/tsconfig.json b/node_modules/es-define-property/tsconfig.json new file mode 100644 index 0000000..5a49992 --- /dev/null +++ b/node_modules/es-define-property/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2022", + }, + "exclude": [ + "coverage", + "test/list-exports" + ], +} diff --git a/node_modules/es-errors/.eslintrc b/node_modules/es-errors/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/es-errors/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/es-errors/.github/FUNDING.yml b/node_modules/es-errors/.github/FUNDING.yml new file mode 100644 index 0000000..f1b8805 --- /dev/null +++ b/node_modules/es-errors/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/es-errors +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/es-errors/CHANGELOG.md b/node_modules/es-errors/CHANGELOG.md new file mode 100644 index 0000000..204a9e9 --- /dev/null +++ b/node_modules/es-errors/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.3.0](https://github.com/ljharb/es-errors/compare/v1.2.1...v1.3.0) - 2024-02-05 + +### Commits + +- [New] add `EvalError` and `URIError` [`1927627`](https://github.com/ljharb/es-errors/commit/1927627ba68cb6c829d307231376c967db53acdf) + +## [v1.2.1](https://github.com/ljharb/es-errors/compare/v1.2.0...v1.2.1) - 2024-02-04 + +### Commits + +- [Fix] add missing `exports` entry [`5bb5f28`](https://github.com/ljharb/es-errors/commit/5bb5f280f98922701109d6ebb82eea2257cecc7e) + +## [v1.2.0](https://github.com/ljharb/es-errors/compare/v1.1.0...v1.2.0) - 2024-02-04 + +### Commits + +- [New] add `ReferenceError` [`6d8cf5b`](https://github.com/ljharb/es-errors/commit/6d8cf5bbb6f3f598d02cf6f30e468ba2caa8e143) + +## [v1.1.0](https://github.com/ljharb/es-errors/compare/v1.0.0...v1.1.0) - 2024-02-04 + +### Commits + +- [New] add base Error [`2983ab6`](https://github.com/ljharb/es-errors/commit/2983ab65f7bc5441276cb021dc3aa03c78881698) + +## v1.0.0 - 2024-02-03 + +### Commits + +- Initial implementation, tests, readme, type [`8f47631`](https://github.com/ljharb/es-errors/commit/8f476317e9ad76f40ad648081829b1a1a3a1288b) +- Initial commit [`ea5d099`](https://github.com/ljharb/es-errors/commit/ea5d099ef18e550509ab9e2be000526afd81c385) +- npm init [`6f5ebf9`](https://github.com/ljharb/es-errors/commit/6f5ebf9cead474dadd72b9e63dad315820a089ae) +- Only apps should have lockfiles [`e1a0aeb`](https://github.com/ljharb/es-errors/commit/e1a0aeb7b80f5cfc56be54d6b2100e915d47def8) +- [meta] add `sideEffects` flag [`a9c7d46`](https://github.com/ljharb/es-errors/commit/a9c7d460a492f1d8a241c836bc25a322a19cc043) diff --git a/node_modules/es-errors/LICENSE b/node_modules/es-errors/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/es-errors/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-errors/README.md b/node_modules/es-errors/README.md new file mode 100644 index 0000000..8dbfacf --- /dev/null +++ b/node_modules/es-errors/README.md @@ -0,0 +1,55 @@ +# es-errors [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A simple cache for a few of the JS Error constructors. + +## Example + +```js +const assert = require('assert'); + +const Base = require('es-errors'); +const Eval = require('es-errors/eval'); +const Range = require('es-errors/range'); +const Ref = require('es-errors/ref'); +const Syntax = require('es-errors/syntax'); +const Type = require('es-errors/type'); +const URI = require('es-errors/uri'); + +assert.equal(Base, Error); +assert.equal(Eval, EvalError); +assert.equal(Range, RangeError); +assert.equal(Ref, ReferenceError); +assert.equal(Syntax, SyntaxError); +assert.equal(Type, TypeError); +assert.equal(URI, URIError); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/es-errors +[npm-version-svg]: https://versionbadg.es/ljharb/es-errors.svg +[deps-svg]: https://david-dm.org/ljharb/es-errors.svg +[deps-url]: https://david-dm.org/ljharb/es-errors +[dev-deps-svg]: https://david-dm.org/ljharb/es-errors/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/es-errors#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-errors.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-errors.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-errors.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-errors +[codecov-image]: https://codecov.io/gh/ljharb/es-errors/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/es-errors/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/es-errors +[actions-url]: https://github.com/ljharb/es-errors/actions diff --git a/node_modules/es-errors/eval.d.ts b/node_modules/es-errors/eval.d.ts new file mode 100644 index 0000000..e4210e0 --- /dev/null +++ b/node_modules/es-errors/eval.d.ts @@ -0,0 +1,3 @@ +declare const EvalError: EvalErrorConstructor; + +export = EvalError; diff --git a/node_modules/es-errors/eval.js b/node_modules/es-errors/eval.js new file mode 100644 index 0000000..725ccb6 --- /dev/null +++ b/node_modules/es-errors/eval.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./eval')} */ +module.exports = EvalError; diff --git a/node_modules/es-errors/index.d.ts b/node_modules/es-errors/index.d.ts new file mode 100644 index 0000000..69bdbc9 --- /dev/null +++ b/node_modules/es-errors/index.d.ts @@ -0,0 +1,3 @@ +declare const Error: ErrorConstructor; + +export = Error; diff --git a/node_modules/es-errors/index.js b/node_modules/es-errors/index.js new file mode 100644 index 0000000..cc0c521 --- /dev/null +++ b/node_modules/es-errors/index.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('.')} */ +module.exports = Error; diff --git a/node_modules/es-errors/package.json b/node_modules/es-errors/package.json new file mode 100644 index 0000000..ff8c2a5 --- /dev/null +++ b/node_modules/es-errors/package.json @@ -0,0 +1,80 @@ +{ + "name": "es-errors", + "version": "1.3.0", + "description": "A simple cache for a few of the JS Error constructors.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./eval": "./eval.js", + "./range": "./range.js", + "./ref": "./ref.js", + "./syntax": "./syntax.js", + "./type": "./type.js", + "./uri": "./uri.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "aud --production", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/es-errors.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "error", + "typeerror", + "syntaxerror", + "rangeerror" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/es-errors/issues" + }, + "homepage": "https://github.com/ljharb/es-errors#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eclint": "^2.8.1", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/es-errors/range.d.ts b/node_modules/es-errors/range.d.ts new file mode 100644 index 0000000..3a12e86 --- /dev/null +++ b/node_modules/es-errors/range.d.ts @@ -0,0 +1,3 @@ +declare const RangeError: RangeErrorConstructor; + +export = RangeError; diff --git a/node_modules/es-errors/range.js b/node_modules/es-errors/range.js new file mode 100644 index 0000000..2044fe0 --- /dev/null +++ b/node_modules/es-errors/range.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./range')} */ +module.exports = RangeError; diff --git a/node_modules/es-errors/ref.d.ts b/node_modules/es-errors/ref.d.ts new file mode 100644 index 0000000..a13107e --- /dev/null +++ b/node_modules/es-errors/ref.d.ts @@ -0,0 +1,3 @@ +declare const ReferenceError: ReferenceErrorConstructor; + +export = ReferenceError; diff --git a/node_modules/es-errors/ref.js b/node_modules/es-errors/ref.js new file mode 100644 index 0000000..d7c430f --- /dev/null +++ b/node_modules/es-errors/ref.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./ref')} */ +module.exports = ReferenceError; diff --git a/node_modules/es-errors/syntax.d.ts b/node_modules/es-errors/syntax.d.ts new file mode 100644 index 0000000..6a0c53c --- /dev/null +++ b/node_modules/es-errors/syntax.d.ts @@ -0,0 +1,3 @@ +declare const SyntaxError: SyntaxErrorConstructor; + +export = SyntaxError; diff --git a/node_modules/es-errors/syntax.js b/node_modules/es-errors/syntax.js new file mode 100644 index 0000000..5f5fdde --- /dev/null +++ b/node_modules/es-errors/syntax.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./syntax')} */ +module.exports = SyntaxError; diff --git a/node_modules/es-errors/test/index.js b/node_modules/es-errors/test/index.js new file mode 100644 index 0000000..1ff0277 --- /dev/null +++ b/node_modules/es-errors/test/index.js @@ -0,0 +1,19 @@ +'use strict'; + +var test = require('tape'); + +var E = require('../'); +var R = require('../range'); +var Ref = require('../ref'); +var S = require('../syntax'); +var T = require('../type'); + +test('errors', function (t) { + t.equal(E, Error); + t.equal(R, RangeError); + t.equal(Ref, ReferenceError); + t.equal(S, SyntaxError); + t.equal(T, TypeError); + + t.end(); +}); diff --git a/node_modules/es-errors/tsconfig.json b/node_modules/es-errors/tsconfig.json new file mode 100644 index 0000000..99dfeb6 --- /dev/null +++ b/node_modules/es-errors/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": ["types"], /* Specify multiple folders that act like `./node_modules/@types`. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow `import x from y` when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/es-errors/type.d.ts b/node_modules/es-errors/type.d.ts new file mode 100644 index 0000000..576fb51 --- /dev/null +++ b/node_modules/es-errors/type.d.ts @@ -0,0 +1,3 @@ +declare const TypeError: TypeErrorConstructor + +export = TypeError; diff --git a/node_modules/es-errors/type.js b/node_modules/es-errors/type.js new file mode 100644 index 0000000..9769e44 --- /dev/null +++ b/node_modules/es-errors/type.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./type')} */ +module.exports = TypeError; diff --git a/node_modules/es-errors/uri.d.ts b/node_modules/es-errors/uri.d.ts new file mode 100644 index 0000000..c3261c9 --- /dev/null +++ b/node_modules/es-errors/uri.d.ts @@ -0,0 +1,3 @@ +declare const URIError: URIErrorConstructor; + +export = URIError; diff --git a/node_modules/es-errors/uri.js b/node_modules/es-errors/uri.js new file mode 100644 index 0000000..e9cd1c7 --- /dev/null +++ b/node_modules/es-errors/uri.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./uri')} */ +module.exports = URIError; diff --git a/node_modules/es-object-atoms/.eslintrc b/node_modules/es-object-atoms/.eslintrc new file mode 100644 index 0000000..d90a1bc --- /dev/null +++ b/node_modules/es-object-atoms/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "eqeqeq": ["error", "allow-null"], + "id-length": "off", + "new-cap": ["error", { + "capIsNewExceptions": [ + "RequireObjectCoercible", + "ToObject", + ], + }], + }, +} diff --git a/node_modules/es-object-atoms/.github/FUNDING.yml b/node_modules/es-object-atoms/.github/FUNDING.yml new file mode 100644 index 0000000..352bfda --- /dev/null +++ b/node_modules/es-object-atoms/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/es-object +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/es-object-atoms/CHANGELOG.md b/node_modules/es-object-atoms/CHANGELOG.md new file mode 100644 index 0000000..fdd2abe --- /dev/null +++ b/node_modules/es-object-atoms/CHANGELOG.md @@ -0,0 +1,37 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.1](https://github.com/ljharb/es-object-atoms/compare/v1.1.0...v1.1.1) - 2025-01-14 + +### Commits + +- [types] `ToObject`: improve types [`cfe8c8a`](https://github.com/ljharb/es-object-atoms/commit/cfe8c8a105c44820cb22e26f62d12ef0ad9715c8) + +## [v1.1.0](https://github.com/ljharb/es-object-atoms/compare/v1.0.1...v1.1.0) - 2025-01-14 + +### Commits + +- [New] add `isObject` [`51e4042`](https://github.com/ljharb/es-object-atoms/commit/51e4042df722eb3165f40dc5f4bf33d0197ecb07) + +## [v1.0.1](https://github.com/ljharb/es-object-atoms/compare/v1.0.0...v1.0.1) - 2025-01-13 + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/tape`, `auto-changelog`, `tape` [`38ab9eb`](https://github.com/ljharb/es-object-atoms/commit/38ab9eb00b62c2f4668644f5e513d9b414ebd595) +- [types] improve types [`7d1beb8`](https://github.com/ljharb/es-object-atoms/commit/7d1beb887958b78b6a728a210a1c8370ab7e2aa1) +- [Tests] replace `aud` with `npm audit` [`25863ba`](https://github.com/ljharb/es-object-atoms/commit/25863baf99178f1d1ad33d1120498db28631907e) +- [Dev Deps] add missing peer dep [`c012309`](https://github.com/ljharb/es-object-atoms/commit/c0123091287e6132d6f4240496340c427433df28) + +## v1.0.0 - 2024-03-16 + +### Commits + +- Initial implementation, tests, readme, types [`f1499db`](https://github.com/ljharb/es-object-atoms/commit/f1499db7d3e1741e64979c61d645ab3137705e82) +- Initial commit [`99eedc7`](https://github.com/ljharb/es-object-atoms/commit/99eedc7b5fde38a50a28d3c8b724706e3e4c5f6a) +- [meta] rename repo [`fc851fa`](https://github.com/ljharb/es-object-atoms/commit/fc851fa70616d2d182aaf0bd02c2ed7084dea8fa) +- npm init [`b909377`](https://github.com/ljharb/es-object-atoms/commit/b909377c50049bd0ec575562d20b0f9ebae8947f) +- Only apps should have lockfiles [`7249edd`](https://github.com/ljharb/es-object-atoms/commit/7249edd2178c1b9ddfc66ffcc6d07fdf0d28efc1) diff --git a/node_modules/es-object-atoms/LICENSE b/node_modules/es-object-atoms/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/es-object-atoms/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-object-atoms/README.md b/node_modules/es-object-atoms/README.md new file mode 100644 index 0000000..447695b --- /dev/null +++ b/node_modules/es-object-atoms/README.md @@ -0,0 +1,63 @@ +# es-object-atoms [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +ES Object-related atoms: Object, ToObject, RequireObjectCoercible. + +## Example + +```js +const assert = require('assert'); + +const $Object = require('es-object-atoms'); +const isObject = require('es-object-atoms/isObject'); +const ToObject = require('es-object-atoms/ToObject'); +const RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); + +assert.equal($Object, Object); +assert.throws(() => ToObject(null), TypeError); +assert.throws(() => ToObject(undefined), TypeError); +assert.throws(() => RequireObjectCoercible(null), TypeError); +assert.throws(() => RequireObjectCoercible(undefined), TypeError); + +assert.equal(isObject(undefined), false); +assert.equal(isObject(null), false); +assert.equal(isObject({}), true); +assert.equal(isObject([]), true); +assert.equal(isObject(function () {}), true); + +assert.deepEqual(RequireObjectCoercible(true), true); +assert.deepEqual(ToObject(true), Object(true)); + +const obj = {}; +assert.equal(RequireObjectCoercible(obj), obj); +assert.equal(ToObject(obj), obj); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/es-object-atoms +[npm-version-svg]: https://versionbadg.es/ljharb/es-object-atoms.svg +[deps-svg]: https://david-dm.org/ljharb/es-object-atoms.svg +[deps-url]: https://david-dm.org/ljharb/es-object-atoms +[dev-deps-svg]: https://david-dm.org/ljharb/es-object-atoms/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/es-object-atoms#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-object-atoms.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-object-atoms.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-object.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-object-atoms +[codecov-image]: https://codecov.io/gh/ljharb/es-object-atoms/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/es-object-atoms/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/es-object-atoms +[actions-url]: https://github.com/ljharb/es-object-atoms/actions diff --git a/node_modules/es-object-atoms/RequireObjectCoercible.d.ts b/node_modules/es-object-atoms/RequireObjectCoercible.d.ts new file mode 100644 index 0000000..7e26c45 --- /dev/null +++ b/node_modules/es-object-atoms/RequireObjectCoercible.d.ts @@ -0,0 +1,3 @@ +declare function RequireObjectCoercible(value: T, optMessage?: string): T; + +export = RequireObjectCoercible; diff --git a/node_modules/es-object-atoms/RequireObjectCoercible.js b/node_modules/es-object-atoms/RequireObjectCoercible.js new file mode 100644 index 0000000..8e191c6 --- /dev/null +++ b/node_modules/es-object-atoms/RequireObjectCoercible.js @@ -0,0 +1,11 @@ +'use strict'; + +var $TypeError = require('es-errors/type'); + +/** @type {import('./RequireObjectCoercible')} */ +module.exports = function RequireObjectCoercible(value) { + if (value == null) { + throw new $TypeError((arguments.length > 0 && arguments[1]) || ('Cannot call method on ' + value)); + } + return value; +}; diff --git a/node_modules/es-object-atoms/ToObject.d.ts b/node_modules/es-object-atoms/ToObject.d.ts new file mode 100644 index 0000000..d6dd302 --- /dev/null +++ b/node_modules/es-object-atoms/ToObject.d.ts @@ -0,0 +1,7 @@ +declare function ToObject(value: number): Number; +declare function ToObject(value: boolean): Boolean; +declare function ToObject(value: string): String; +declare function ToObject(value: bigint): BigInt; +declare function ToObject(value: T): T; + +export = ToObject; diff --git a/node_modules/es-object-atoms/ToObject.js b/node_modules/es-object-atoms/ToObject.js new file mode 100644 index 0000000..2b99a7d --- /dev/null +++ b/node_modules/es-object-atoms/ToObject.js @@ -0,0 +1,10 @@ +'use strict'; + +var $Object = require('./'); +var RequireObjectCoercible = require('./RequireObjectCoercible'); + +/** @type {import('./ToObject')} */ +module.exports = function ToObject(value) { + RequireObjectCoercible(value); + return $Object(value); +}; diff --git a/node_modules/es-object-atoms/index.d.ts b/node_modules/es-object-atoms/index.d.ts new file mode 100644 index 0000000..8bdbfc8 --- /dev/null +++ b/node_modules/es-object-atoms/index.d.ts @@ -0,0 +1,3 @@ +declare const Object: ObjectConstructor; + +export = Object; diff --git a/node_modules/es-object-atoms/index.js b/node_modules/es-object-atoms/index.js new file mode 100644 index 0000000..1d33cef --- /dev/null +++ b/node_modules/es-object-atoms/index.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('.')} */ +module.exports = Object; diff --git a/node_modules/es-object-atoms/isObject.d.ts b/node_modules/es-object-atoms/isObject.d.ts new file mode 100644 index 0000000..43bee3b --- /dev/null +++ b/node_modules/es-object-atoms/isObject.d.ts @@ -0,0 +1,3 @@ +declare function isObject(x: unknown): x is object; + +export = isObject; diff --git a/node_modules/es-object-atoms/isObject.js b/node_modules/es-object-atoms/isObject.js new file mode 100644 index 0000000..ec49bf1 --- /dev/null +++ b/node_modules/es-object-atoms/isObject.js @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {import('./isObject')} */ +module.exports = function isObject(x) { + return !!x && (typeof x === 'function' || typeof x === 'object'); +}; diff --git a/node_modules/es-object-atoms/package.json b/node_modules/es-object-atoms/package.json new file mode 100644 index 0000000..f4cec71 --- /dev/null +++ b/node_modules/es-object-atoms/package.json @@ -0,0 +1,80 @@ +{ + "name": "es-object-atoms", + "version": "1.1.1", + "description": "ES Object-related atoms: Object, ToObject, RequireObjectCoercible", + "main": "index.js", + "exports": { + ".": "./index.js", + "./RequireObjectCoercible": "./RequireObjectCoercible.js", + "./isObject": "./isObject.js", + "./ToObject": "./ToObject.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "npx npm@\">= 10.2\" audit --production", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/es-object-atoms.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "object", + "toobject", + "coercible" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/es-object-atoms/issues" + }, + "homepage": "https://github.com/ljharb/es-object-atoms#readme", + "dependencies": { + "es-errors": "^1.3.0" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "eclint": "^2.8.1", + "encoding": "^0.1.13", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/es-object-atoms/test/index.js b/node_modules/es-object-atoms/test/index.js new file mode 100644 index 0000000..430b705 --- /dev/null +++ b/node_modules/es-object-atoms/test/index.js @@ -0,0 +1,38 @@ +'use strict'; + +var test = require('tape'); + +var $Object = require('../'); +var isObject = require('../isObject'); +var ToObject = require('../ToObject'); +var RequireObjectCoercible = require('..//RequireObjectCoercible'); + +test('errors', function (t) { + t.equal($Object, Object); + // @ts-expect-error + t['throws'](function () { ToObject(null); }, TypeError); + // @ts-expect-error + t['throws'](function () { ToObject(undefined); }, TypeError); + // @ts-expect-error + t['throws'](function () { RequireObjectCoercible(null); }, TypeError); + // @ts-expect-error + t['throws'](function () { RequireObjectCoercible(undefined); }, TypeError); + + t.deepEqual(RequireObjectCoercible(true), true); + t.deepEqual(ToObject(true), Object(true)); + t.deepEqual(ToObject(42), Object(42)); + var f = function () {}; + t.equal(ToObject(f), f); + + t.equal(isObject(undefined), false); + t.equal(isObject(null), false); + t.equal(isObject({}), true); + t.equal(isObject([]), true); + t.equal(isObject(function () {}), true); + + var obj = {}; + t.equal(RequireObjectCoercible(obj), obj); + t.equal(ToObject(obj), obj); + + t.end(); +}); diff --git a/node_modules/es-object-atoms/tsconfig.json b/node_modules/es-object-atoms/tsconfig.json new file mode 100644 index 0000000..1f73cb7 --- /dev/null +++ b/node_modules/es-object-atoms/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es5", + }, +} diff --git a/node_modules/es-set-tostringtag/.eslintrc b/node_modules/es-set-tostringtag/.eslintrc new file mode 100644 index 0000000..2612ed8 --- /dev/null +++ b/node_modules/es-set-tostringtag/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/es-set-tostringtag/.nycrc b/node_modules/es-set-tostringtag/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/es-set-tostringtag/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/es-set-tostringtag/CHANGELOG.md b/node_modules/es-set-tostringtag/CHANGELOG.md new file mode 100644 index 0000000..00bdc03 --- /dev/null +++ b/node_modules/es-set-tostringtag/CHANGELOG.md @@ -0,0 +1,67 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v2.1.0](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.3...v2.1.0) - 2025-01-01 + +### Commits + +- [actions] split out node 10-20, and 20+ [`ede033c`](https://github.com/es-shims/es-set-tostringtag/commit/ede033cc4e506c3966d2d482d4ac5987e329162a) +- [types] use shared config [`28ef164`](https://github.com/es-shims/es-set-tostringtag/commit/28ef164ad7c5bc21837c79f7ef25542a1f258ade) +- [New] add `nonConfigurable` option [`3bee3f0`](https://github.com/es-shims/es-set-tostringtag/commit/3bee3f04caddd318f3932912212ed20b2d62aad7) +- [Fix] validate boolean option argument [`3c8a609`](https://github.com/es-shims/es-set-tostringtag/commit/3c8a609c795a305ccca163f0ff6956caa88cdc0e) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/get-intrinsic`, `@types/tape`, `auto-changelog`, `tape` [`501a969`](https://github.com/es-shims/es-set-tostringtag/commit/501a96998484226e07f5ffd447e8f305a998f1d8) +- [Tests] add coverage [`18af289`](https://github.com/es-shims/es-set-tostringtag/commit/18af2897b4e937373c9b8c8831bc338932246470) +- [readme] document `force` option [`bd446a1`](https://github.com/es-shims/es-set-tostringtag/commit/bd446a107b71a2270278442e5124f45590d3ee64) +- [Tests] use `@arethetypeswrong/cli` [`7c2c2fa`](https://github.com/es-shims/es-set-tostringtag/commit/7c2c2fa3cca0f4d263603adb75426b239514598f) +- [Tests] replace `aud` with `npm audit` [`9e372d7`](https://github.com/es-shims/es-set-tostringtag/commit/9e372d7e6db3dab405599a14d9074a99a03b8242) +- [Deps] update `get-intrinsic` [`7df1216`](https://github.com/es-shims/es-set-tostringtag/commit/7df12167295385c2a547410e687cb0c04f3a34b9) +- [Deps] update `hasown` [`993a7d2`](https://github.com/es-shims/es-set-tostringtag/commit/993a7d200e2059fd857ec1a25d0a49c2c34ae6e2) +- [Dev Deps] add missing peer dep [`148ed8d`](https://github.com/es-shims/es-set-tostringtag/commit/148ed8db99a7a94f9af3823fd083e6e437fa1587) + +## [v2.0.3](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.2...v2.0.3) - 2024-02-20 + +### Commits + +- add types [`d538513`](https://github.com/es-shims/es-set-tostringtag/commit/d5385133592a32a0a416cb535327918af7fbc4ad) +- [Deps] update `get-intrinsic`, `has-tostringtag`, `hasown` [`d129b29`](https://github.com/es-shims/es-set-tostringtag/commit/d129b29536bccc8a9d03a47887ca4d1f7ad0c5b9) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`132ed23`](https://github.com/es-shims/es-set-tostringtag/commit/132ed23c964a41ed55e4ab4a5a2c3fe185e821c1) +- [Tests] fix hasOwn require [`f89c831`](https://github.com/es-shims/es-set-tostringtag/commit/f89c831fe5f3edf1f979c597b56fee1be6111f56) + +## [v2.0.2](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.1...v2.0.2) - 2023-10-20 + +### Commits + +- [Refactor] use `hasown` instead of `has` [`0cc6c4e`](https://github.com/es-shims/es-set-tostringtag/commit/0cc6c4e61fd13e8f00b85424ae6e541ebf289e74) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`70e447c`](https://github.com/es-shims/es-set-tostringtag/commit/70e447cf9f82b896ddf359fda0a0498c16cf3ed2) +- [Deps] update `get-intrinsic` [`826aab7`](https://github.com/es-shims/es-set-tostringtag/commit/826aab76180392871c8efa99acc0f0bbf775c64e) + +## [v2.0.1](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.0...v2.0.1) - 2023-01-05 + +### Fixed + +- [Fix] move `has` to prod deps [`#2`](https://github.com/es-shims/es-set-tostringtag/issues/2) + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config` [`b9eecd2`](https://github.com/es-shims/es-set-tostringtag/commit/b9eecd23c10b7b43ba75089ac8ff8cc6b295798b) + +## [v2.0.0](https://github.com/es-shims/es-set-tostringtag/compare/v1.0.0...v2.0.0) - 2022-12-21 + +### Commits + +- [Tests] refactor tests [`168dcfb`](https://github.com/es-shims/es-set-tostringtag/commit/168dcfbb535c279dc48ccdc89419155125aaec18) +- [Breaking] do not set toStringTag if it is already set [`226ab87`](https://github.com/es-shims/es-set-tostringtag/commit/226ab874192c625d9e5f0e599d3f60d2b2aa83b5) +- [New] add `force` option to set even if already set [`1abd4ec`](https://github.com/es-shims/es-set-tostringtag/commit/1abd4ecb282f19718c4518284b0293a343564505) + +## v1.0.0 - 2022-12-21 + +### Commits + +- Initial implementation, tests, readme [`a0e1147`](https://github.com/es-shims/es-set-tostringtag/commit/a0e11473f79a233b46374525c962ea1b4d42418a) +- Initial commit [`ffd4aff`](https://github.com/es-shims/es-set-tostringtag/commit/ffd4afffbeebf29aff0d87a7cfc3f7844e09fe68) +- npm init [`fffe5bd`](https://github.com/es-shims/es-set-tostringtag/commit/fffe5bd1d1146d084730a387a9c672371f4a8fff) +- Only apps should have lockfiles [`d363871`](https://github.com/es-shims/es-set-tostringtag/commit/d36387139465623e161a15dbd39120537f150c62) diff --git a/node_modules/es-set-tostringtag/LICENSE b/node_modules/es-set-tostringtag/LICENSE new file mode 100644 index 0000000..c2a8460 --- /dev/null +++ b/node_modules/es-set-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-set-tostringtag/README.md b/node_modules/es-set-tostringtag/README.md new file mode 100644 index 0000000..c27bc9f --- /dev/null +++ b/node_modules/es-set-tostringtag/README.md @@ -0,0 +1,53 @@ +# es-set-tostringtag [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A helper to optimistically set Symbol.toStringTag, when possible. + +## Example +Most common usage: +```js +var assert = require('assert'); +var setToStringTag = require('es-set-tostringtag'); + +var obj = {}; + +assert.equal(Object.prototype.toString.call(obj), '[object Object]'); + +setToStringTag(obj, 'tagged!'); + +assert.equal(Object.prototype.toString.call(obj), '[object tagged!]'); +``` + +## Options +An optional options argument can be provided as the third argument. The available options are: + +### `force` +If the `force` option is set to `true`, the toStringTag will be set even if it is already set. + +### `nonConfigurable` +If the `nonConfigurable` option is set to `true`, the toStringTag will be defined as non-configurable when possible. + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.com/package/es-set-tostringtag +[npm-version-svg]: https://versionbadg.es/es-shims/es-set-tostringtag.svg +[deps-svg]: https://david-dm.org/es-shims/es-set-tostringtag.svg +[deps-url]: https://david-dm.org/es-shims/es-set-tostringtag +[dev-deps-svg]: https://david-dm.org/es-shims/es-set-tostringtag/dev-status.svg +[dev-deps-url]: https://david-dm.org/es-shims/es-set-tostringtag#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-set-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-set-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-set-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-set-tostringtag +[codecov-image]: https://codecov.io/gh/es-shims/es-set-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/es-shims/es-set-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/es-set-tostringtag +[actions-url]: https://github.com/es-shims/es-set-tostringtag/actions diff --git a/node_modules/es-set-tostringtag/index.d.ts b/node_modules/es-set-tostringtag/index.d.ts new file mode 100644 index 0000000..c9a8fc4 --- /dev/null +++ b/node_modules/es-set-tostringtag/index.d.ts @@ -0,0 +1,10 @@ +declare function setToStringTag( + object: object & { [Symbol.toStringTag]?: unknown }, + value: string | unknown, + options?: { + force?: boolean; + nonConfigurable?: boolean; + }, +): void; + +export = setToStringTag; \ No newline at end of file diff --git a/node_modules/es-set-tostringtag/index.js b/node_modules/es-set-tostringtag/index.js new file mode 100644 index 0000000..6b6b49c --- /dev/null +++ b/node_modules/es-set-tostringtag/index.js @@ -0,0 +1,35 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); + +var hasToStringTag = require('has-tostringtag/shams')(); +var hasOwn = require('hasown'); +var $TypeError = require('es-errors/type'); + +var toStringTag = hasToStringTag ? Symbol.toStringTag : null; + +/** @type {import('.')} */ +module.exports = function setToStringTag(object, value) { + var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force; + var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable; + if ( + (typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean') + || (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean') + ) { + throw new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans'); + } + if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) { + if ($defineProperty) { + $defineProperty(object, toStringTag, { + configurable: !nonConfigurable, + enumerable: false, + value: value, + writable: false + }); + } else { + object[toStringTag] = value; // eslint-disable-line no-param-reassign + } + } +}; diff --git a/node_modules/es-set-tostringtag/package.json b/node_modules/es-set-tostringtag/package.json new file mode 100644 index 0000000..277c3e5 --- /dev/null +++ b/node_modules/es-set-tostringtag/package.json @@ -0,0 +1,78 @@ +{ + "name": "es-set-tostringtag", + "version": "2.1.0", + "description": "A helper to optimistically set Symbol.toStringTag, when possible.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@\">= 10.2\" audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/es-shims/es-set-tostringtag.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/es-shims/es-set-tostringtag/issues" + }, + "homepage": "https://github.com/es-shims/es-set-tostringtag#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.2", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/get-intrinsic": "^1.2.3", + "@types/has-symbols": "^1.0.2", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "testling": { + "files": "./test/index.js" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/es-set-tostringtag/test/index.js b/node_modules/es-set-tostringtag/test/index.js new file mode 100644 index 0000000..f1757b3 --- /dev/null +++ b/node_modules/es-set-tostringtag/test/index.js @@ -0,0 +1,85 @@ +'use strict'; + +var test = require('tape'); +var hasToStringTag = require('has-tostringtag/shams')(); +var hasOwn = require('hasown'); + +var setToStringTag = require('../'); + +test('setToStringTag', function (t) { + t.equal(typeof setToStringTag, 'function', 'is a function'); + + /** @type {{ [Symbol.toStringTag]?: typeof sentinel }} */ + var obj = {}; + var sentinel = {}; + + setToStringTag(obj, sentinel); + + t['throws']( + // @ts-expect-error + function () { setToStringTag(obj, sentinel, { force: 'yes' }); }, + TypeError, + 'throws if options is not an object' + ); + + t.test('has Symbol.toStringTag', { skip: !hasToStringTag }, function (st) { + st.ok(hasOwn(obj, Symbol.toStringTag), 'has toStringTag property'); + + st.equal(obj[Symbol.toStringTag], sentinel, 'toStringTag property is as expected'); + + st.equal(String(obj), '[object Object]', 'toStringTag works'); + + /** @type {{ [Symbol.toStringTag]?: string }} */ + var tagged = {}; + tagged[Symbol.toStringTag] = 'already tagged'; + st.equal(String(tagged), '[object already tagged]', 'toStringTag works'); + + setToStringTag(tagged, 'new tag'); + st.equal(String(tagged), '[object already tagged]', 'toStringTag is unchanged'); + + setToStringTag(tagged, 'new tag', { force: true }); + st.equal(String(tagged), '[object new tag]', 'toStringTag is changed with force: true'); + + st.deepEqual( + Object.getOwnPropertyDescriptor(tagged, Symbol.toStringTag), + { + configurable: true, + enumerable: false, + value: 'new tag', + writable: false + }, + 'has expected property descriptor' + ); + + setToStringTag(tagged, 'new tag', { force: true, nonConfigurable: true }); + st.deepEqual( + Object.getOwnPropertyDescriptor(tagged, Symbol.toStringTag), + { + configurable: false, + enumerable: false, + value: 'new tag', + writable: false + }, + 'is nonconfigurable' + ); + + st.end(); + }); + + t.test('does not have Symbol.toStringTag', { skip: hasToStringTag }, function (st) { + var passed = true; + for (var key in obj) { // eslint-disable-line no-restricted-syntax + if (hasOwn(obj, key)) { + st.fail('object has own key ' + key); + passed = false; + } + } + if (passed) { + st.ok(true, 'object has no enumerable own keys'); + } + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/es-set-tostringtag/tsconfig.json b/node_modules/es-set-tostringtag/tsconfig.json new file mode 100644 index 0000000..d9a6668 --- /dev/null +++ b/node_modules/es-set-tostringtag/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/follow-redirects/LICENSE b/node_modules/follow-redirects/LICENSE new file mode 100644 index 0000000..742cbad --- /dev/null +++ b/node_modules/follow-redirects/LICENSE @@ -0,0 +1,18 @@ +Copyright 2014–present Olivier Lalonde , James Talmage , Ruben Verborgh + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/follow-redirects/README.md b/node_modules/follow-redirects/README.md new file mode 100644 index 0000000..eb869a6 --- /dev/null +++ b/node_modules/follow-redirects/README.md @@ -0,0 +1,155 @@ +## Follow Redirects + +Drop-in replacement for Node's `http` and `https` modules that automatically follows redirects. + +[![npm version](https://img.shields.io/npm/v/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Build Status](https://github.com/follow-redirects/follow-redirects/workflows/CI/badge.svg)](https://github.com/follow-redirects/follow-redirects/actions) +[![Coverage Status](https://coveralls.io/repos/follow-redirects/follow-redirects/badge.svg?branch=master)](https://coveralls.io/r/follow-redirects/follow-redirects?branch=master) +[![npm downloads](https://img.shields.io/npm/dm/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Sponsor on GitHub](https://img.shields.io/static/v1?label=Sponsor&message=%F0%9F%92%96&logo=GitHub)](https://github.com/sponsors/RubenVerborgh) + +`follow-redirects` provides [request](https://nodejs.org/api/http.html#http_http_request_options_callback) and [get](https://nodejs.org/api/http.html#http_http_get_options_callback) + methods that behave identically to those found on the native [http](https://nodejs.org/api/http.html#http_http_request_options_callback) and [https](https://nodejs.org/api/https.html#https_https_request_options_callback) + modules, with the exception that they will seamlessly follow redirects. + +```javascript +const { http, https } = require('follow-redirects'); + +http.get('http://bit.ly/900913', response => { + response.on('data', chunk => { + console.log(chunk); + }); +}).on('error', err => { + console.error(err); +}); +``` + +You can inspect the final redirected URL through the `responseUrl` property on the `response`. +If no redirection happened, `responseUrl` is the original request URL. + +```javascript +const request = https.request({ + host: 'bitly.com', + path: '/UHfDGO', +}, response => { + console.log(response.responseUrl); + // 'http://duckduckgo.com/robots.txt' +}); +request.end(); +``` + +## Options +### Global options +Global options are set directly on the `follow-redirects` module: + +```javascript +const followRedirects = require('follow-redirects'); +followRedirects.maxRedirects = 10; +followRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB +``` + +The following global options are supported: + +- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. + +### Per-request options +Per-request options are set by passing an `options` object: + +```javascript +const url = require('url'); +const { http, https } = require('follow-redirects'); + +const options = url.parse('http://bit.ly/900913'); +options.maxRedirects = 10; +options.beforeRedirect = (options, response, request) => { + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + + // response.headers = the redirect response headers + // response.statusCode = the redirect response code (eg. 301, 307, etc.) + + // request.url = the requested URL that resulted in a redirect + // request.headers = the headers in the request that resulted in a redirect + // request.method = the method of the request that resulted in a redirect + if (options.hostname === "example.com") { + options.auth = "user:password"; + } +}; +http.request(options); +``` + +In addition to the [standard HTTP](https://nodejs.org/api/http.html#http_http_request_options_callback) and [HTTPS options](https://nodejs.org/api/https.html#https_https_request_options_callback), +the following per-request options are supported: +- `followRedirects` (default: `true`) – whether redirects should be followed. + +- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. + +- `beforeRedirect` (default: `undefined`) – optionally change the request `options` on redirects, or abort the request by throwing an error. + +- `agents` (default: `undefined`) – sets the `agent` option per protocol, since HTTP and HTTPS use different agents. Example value: `{ http: new http.Agent(), https: new https.Agent() }` + +- `trackRedirects` (default: `false`) – whether to store the redirected response details into the `redirects` array on the response object. + + +### Advanced usage +By default, `follow-redirects` will use the Node.js default implementations +of [`http`](https://nodejs.org/api/http.html) +and [`https`](https://nodejs.org/api/https.html). +To enable features such as caching and/or intermediate request tracking, +you might instead want to wrap `follow-redirects` around custom protocol implementations: + +```javascript +const { http, https } = require('follow-redirects').wrap({ + http: require('your-custom-http'), + https: require('your-custom-https'), +}); +``` + +Such custom protocols only need an implementation of the `request` method. + +## Browser Usage + +Due to the way the browser works, +the `http` and `https` browser equivalents perform redirects by default. + +By requiring `follow-redirects` this way: +```javascript +const http = require('follow-redirects/http'); +const https = require('follow-redirects/https'); +``` +you can easily tell webpack and friends to replace +`follow-redirect` by the built-in versions: + +```json +{ + "follow-redirects/http" : "http", + "follow-redirects/https" : "https" +} +``` + +## Contributing + +Pull Requests are always welcome. Please [file an issue](https://github.com/follow-redirects/follow-redirects/issues) + detailing your proposal before you invest your valuable time. Additional features and bug fixes should be accompanied + by tests. You can run the test suite locally with a simple `npm test` command. + +## Debug Logging + +`follow-redirects` uses the excellent [debug](https://www.npmjs.com/package/debug) for logging. To turn on logging + set the environment variable `DEBUG=follow-redirects` for debug output from just this module. When running the test + suite it is sometimes advantageous to set `DEBUG=*` to see output from the express server as well. + +## Authors + +- [Ruben Verborgh](https://ruben.verborgh.org/) +- [Olivier Lalonde](mailto:olalonde@gmail.com) +- [James Talmage](mailto:james@talmage.io) + +## License + +[MIT License](https://github.com/follow-redirects/follow-redirects/blob/master/LICENSE) diff --git a/node_modules/follow-redirects/debug.js b/node_modules/follow-redirects/debug.js new file mode 100644 index 0000000..decb77d --- /dev/null +++ b/node_modules/follow-redirects/debug.js @@ -0,0 +1,15 @@ +var debug; + +module.exports = function () { + if (!debug) { + try { + /* eslint global-require: off */ + debug = require("debug")("follow-redirects"); + } + catch (error) { /* */ } + if (typeof debug !== "function") { + debug = function () { /* */ }; + } + } + debug.apply(null, arguments); +}; diff --git a/node_modules/follow-redirects/http.js b/node_modules/follow-redirects/http.js new file mode 100644 index 0000000..695e356 --- /dev/null +++ b/node_modules/follow-redirects/http.js @@ -0,0 +1 @@ +module.exports = require("./").http; diff --git a/node_modules/follow-redirects/https.js b/node_modules/follow-redirects/https.js new file mode 100644 index 0000000..d21c921 --- /dev/null +++ b/node_modules/follow-redirects/https.js @@ -0,0 +1 @@ +module.exports = require("./").https; diff --git a/node_modules/follow-redirects/index.js b/node_modules/follow-redirects/index.js new file mode 100644 index 0000000..a30b32c --- /dev/null +++ b/node_modules/follow-redirects/index.js @@ -0,0 +1,686 @@ +var url = require("url"); +var URL = url.URL; +var http = require("http"); +var https = require("https"); +var Writable = require("stream").Writable; +var assert = require("assert"); +var debug = require("./debug"); + +// Preventive platform detection +// istanbul ignore next +(function detectUnsupportedEnvironment() { + var looksLikeNode = typeof process !== "undefined"; + var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined"; + var looksLikeV8 = isFunction(Error.captureStackTrace); + if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) { + console.warn("The follow-redirects package should be excluded from browser builds."); + } +}()); + +// Whether to use the native URL object or the legacy url module +var useNativeURL = false; +try { + assert(new URL("")); +} +catch (error) { + useNativeURL = error.code === "ERR_INVALID_URL"; +} + +// URL fields to preserve in copy operations +var preservedUrlFields = [ + "auth", + "host", + "hostname", + "href", + "path", + "pathname", + "port", + "protocol", + "query", + "search", + "hash", +]; + +// Create handlers that pass events from native requests +var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; +var eventHandlers = Object.create(null); +events.forEach(function (event) { + eventHandlers[event] = function (arg1, arg2, arg3) { + this._redirectable.emit(event, arg1, arg2, arg3); + }; +}); + +// Error types with codes +var InvalidUrlError = createErrorType( + "ERR_INVALID_URL", + "Invalid URL", + TypeError +); +var RedirectionError = createErrorType( + "ERR_FR_REDIRECTION_FAILURE", + "Redirected request failed" +); +var TooManyRedirectsError = createErrorType( + "ERR_FR_TOO_MANY_REDIRECTS", + "Maximum number of redirects exceeded", + RedirectionError +); +var MaxBodyLengthExceededError = createErrorType( + "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", + "Request body larger than maxBodyLength limit" +); +var WriteAfterEndError = createErrorType( + "ERR_STREAM_WRITE_AFTER_END", + "write after end" +); + +// istanbul ignore next +var destroy = Writable.prototype.destroy || noop; + +// An HTTP(S) request that can be redirected +function RedirectableRequest(options, responseCallback) { + // Initialize the request + Writable.call(this); + this._sanitizeOptions(options); + this._options = options; + this._ended = false; + this._ending = false; + this._redirectCount = 0; + this._redirects = []; + this._requestBodyLength = 0; + this._requestBodyBuffers = []; + + // Attach a callback if passed + if (responseCallback) { + this.on("response", responseCallback); + } + + // React to responses of native requests + var self = this; + this._onNativeResponse = function (response) { + try { + self._processResponse(response); + } + catch (cause) { + self.emit("error", cause instanceof RedirectionError ? + cause : new RedirectionError({ cause: cause })); + } + }; + + // Perform the first request + this._performRequest(); +} +RedirectableRequest.prototype = Object.create(Writable.prototype); + +RedirectableRequest.prototype.abort = function () { + destroyRequest(this._currentRequest); + this._currentRequest.abort(); + this.emit("abort"); +}; + +RedirectableRequest.prototype.destroy = function (error) { + destroyRequest(this._currentRequest, error); + destroy.call(this, error); + return this; +}; + +// Writes buffered data to the current native request +RedirectableRequest.prototype.write = function (data, encoding, callback) { + // Writing is not allowed if end has been called + if (this._ending) { + throw new WriteAfterEndError(); + } + + // Validate input and shift parameters if necessary + if (!isString(data) && !isBuffer(data)) { + throw new TypeError("data should be a string, Buffer or Uint8Array"); + } + if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } + + // Ignore empty buffers, since writing them doesn't invoke the callback + // https://github.com/nodejs/node/issues/22066 + if (data.length === 0) { + if (callback) { + callback(); + } + return; + } + // Only write when we don't exceed the maximum body length + if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { + this._requestBodyLength += data.length; + this._requestBodyBuffers.push({ data: data, encoding: encoding }); + this._currentRequest.write(data, encoding, callback); + } + // Error when we exceed the maximum body length + else { + this.emit("error", new MaxBodyLengthExceededError()); + this.abort(); + } +}; + +// Ends the current native request +RedirectableRequest.prototype.end = function (data, encoding, callback) { + // Shift parameters if necessary + if (isFunction(data)) { + callback = data; + data = encoding = null; + } + else if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } + + // Write data if needed and end + if (!data) { + this._ended = this._ending = true; + this._currentRequest.end(null, null, callback); + } + else { + var self = this; + var currentRequest = this._currentRequest; + this.write(data, encoding, function () { + self._ended = true; + currentRequest.end(null, null, callback); + }); + this._ending = true; + } +}; + +// Sets a header value on the current native request +RedirectableRequest.prototype.setHeader = function (name, value) { + this._options.headers[name] = value; + this._currentRequest.setHeader(name, value); +}; + +// Clears a header value on the current native request +RedirectableRequest.prototype.removeHeader = function (name) { + delete this._options.headers[name]; + this._currentRequest.removeHeader(name); +}; + +// Global timeout for all underlying requests +RedirectableRequest.prototype.setTimeout = function (msecs, callback) { + var self = this; + + // Destroys the socket on timeout + function destroyOnTimeout(socket) { + socket.setTimeout(msecs); + socket.removeListener("timeout", socket.destroy); + socket.addListener("timeout", socket.destroy); + } + + // Sets up a timer to trigger a timeout event + function startTimer(socket) { + if (self._timeout) { + clearTimeout(self._timeout); + } + self._timeout = setTimeout(function () { + self.emit("timeout"); + clearTimer(); + }, msecs); + destroyOnTimeout(socket); + } + + // Stops a timeout from triggering + function clearTimer() { + // Clear the timeout + if (self._timeout) { + clearTimeout(self._timeout); + self._timeout = null; + } + + // Clean up all attached listeners + self.removeListener("abort", clearTimer); + self.removeListener("error", clearTimer); + self.removeListener("response", clearTimer); + self.removeListener("close", clearTimer); + if (callback) { + self.removeListener("timeout", callback); + } + if (!self.socket) { + self._currentRequest.removeListener("socket", startTimer); + } + } + + // Attach callback if passed + if (callback) { + this.on("timeout", callback); + } + + // Start the timer if or when the socket is opened + if (this.socket) { + startTimer(this.socket); + } + else { + this._currentRequest.once("socket", startTimer); + } + + // Clean up on events + this.on("socket", destroyOnTimeout); + this.on("abort", clearTimer); + this.on("error", clearTimer); + this.on("response", clearTimer); + this.on("close", clearTimer); + + return this; +}; + +// Proxy all other public ClientRequest methods +[ + "flushHeaders", "getHeader", + "setNoDelay", "setSocketKeepAlive", +].forEach(function (method) { + RedirectableRequest.prototype[method] = function (a, b) { + return this._currentRequest[method](a, b); + }; +}); + +// Proxy all public ClientRequest properties +["aborted", "connection", "socket"].forEach(function (property) { + Object.defineProperty(RedirectableRequest.prototype, property, { + get: function () { return this._currentRequest[property]; }, + }); +}); + +RedirectableRequest.prototype._sanitizeOptions = function (options) { + // Ensure headers are always present + if (!options.headers) { + options.headers = {}; + } + + // Since http.request treats host as an alias of hostname, + // but the url module interprets host as hostname plus port, + // eliminate the host property to avoid confusion. + if (options.host) { + // Use hostname if set, because it has precedence + if (!options.hostname) { + options.hostname = options.host; + } + delete options.host; + } + + // Complete the URL object when necessary + if (!options.pathname && options.path) { + var searchPos = options.path.indexOf("?"); + if (searchPos < 0) { + options.pathname = options.path; + } + else { + options.pathname = options.path.substring(0, searchPos); + options.search = options.path.substring(searchPos); + } + } +}; + + +// Executes the next native request (initial or redirect) +RedirectableRequest.prototype._performRequest = function () { + // Load the native protocol + var protocol = this._options.protocol; + var nativeProtocol = this._options.nativeProtocols[protocol]; + if (!nativeProtocol) { + throw new TypeError("Unsupported protocol " + protocol); + } + + // If specified, use the agent corresponding to the protocol + // (HTTP and HTTPS use different types of agents) + if (this._options.agents) { + var scheme = protocol.slice(0, -1); + this._options.agent = this._options.agents[scheme]; + } + + // Create the native request and set up its event handlers + var request = this._currentRequest = + nativeProtocol.request(this._options, this._onNativeResponse); + request._redirectable = this; + for (var event of events) { + request.on(event, eventHandlers[event]); + } + + // RFC7230§5.3.1: When making a request directly to an origin server, […] + // a client MUST send only the absolute path […] as the request-target. + this._currentUrl = /^\//.test(this._options.path) ? + url.format(this._options) : + // When making a request to a proxy, […] + // a client MUST send the target URI in absolute-form […]. + this._options.path; + + // End a redirected request + // (The first request must be ended explicitly with RedirectableRequest#end) + if (this._isRedirect) { + // Write the request entity and end + var i = 0; + var self = this; + var buffers = this._requestBodyBuffers; + (function writeNext(error) { + // Only write if this request has not been redirected yet + // istanbul ignore else + if (request === self._currentRequest) { + // Report any write errors + // istanbul ignore if + if (error) { + self.emit("error", error); + } + // Write the next buffer if there are still left + else if (i < buffers.length) { + var buffer = buffers[i++]; + // istanbul ignore else + if (!request.finished) { + request.write(buffer.data, buffer.encoding, writeNext); + } + } + // End the request if `end` has been called on us + else if (self._ended) { + request.end(); + } + } + }()); + } +}; + +// Processes a response from the current native request +RedirectableRequest.prototype._processResponse = function (response) { + // Store the redirected response + var statusCode = response.statusCode; + if (this._options.trackRedirects) { + this._redirects.push({ + url: this._currentUrl, + headers: response.headers, + statusCode: statusCode, + }); + } + + // RFC7231§6.4: The 3xx (Redirection) class of status code indicates + // that further action needs to be taken by the user agent in order to + // fulfill the request. If a Location header field is provided, + // the user agent MAY automatically redirect its request to the URI + // referenced by the Location field value, + // even if the specific status code is not understood. + + // If the response is not a redirect; return it as-is + var location = response.headers.location; + if (!location || this._options.followRedirects === false || + statusCode < 300 || statusCode >= 400) { + response.responseUrl = this._currentUrl; + response.redirects = this._redirects; + this.emit("response", response); + + // Clean up + this._requestBodyBuffers = []; + return; + } + + // The response is a redirect, so abort the current request + destroyRequest(this._currentRequest); + // Discard the remainder of the response to avoid waiting for data + response.destroy(); + + // RFC7231§6.4: A client SHOULD detect and intervene + // in cyclical redirections (i.e., "infinite" redirection loops). + if (++this._redirectCount > this._options.maxRedirects) { + throw new TooManyRedirectsError(); + } + + // Store the request headers if applicable + var requestHeaders; + var beforeRedirect = this._options.beforeRedirect; + if (beforeRedirect) { + requestHeaders = Object.assign({ + // The Host header was set by nativeProtocol.request + Host: response.req.getHeader("host"), + }, this._options.headers); + } + + // RFC7231§6.4: Automatic redirection needs to done with + // care for methods not known to be safe, […] + // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change + // the request method from POST to GET for the subsequent request. + var method = this._options.method; + if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || + // RFC7231§6.4.4: The 303 (See Other) status code indicates that + // the server is redirecting the user agent to a different resource […] + // A user agent can perform a retrieval request targeting that URI + // (a GET or HEAD request if using HTTP) […] + (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { + this._options.method = "GET"; + // Drop a possible entity and headers related to it + this._requestBodyBuffers = []; + removeMatchingHeaders(/^content-/i, this._options.headers); + } + + // Drop the Host header, as the redirect might lead to a different host + var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); + + // If the redirect is relative, carry over the host of the last request + var currentUrlParts = parseUrl(this._currentUrl); + var currentHost = currentHostHeader || currentUrlParts.host; + var currentUrl = /^\w+:/.test(location) ? this._currentUrl : + url.format(Object.assign(currentUrlParts, { host: currentHost })); + + // Create the redirected request + var redirectUrl = resolveUrl(location, currentUrl); + debug("redirecting to", redirectUrl.href); + this._isRedirect = true; + spreadUrlObject(redirectUrl, this._options); + + // Drop confidential headers when redirecting to a less secure protocol + // or to a different domain that is not a superdomain + if (redirectUrl.protocol !== currentUrlParts.protocol && + redirectUrl.protocol !== "https:" || + redirectUrl.host !== currentHost && + !isSubdomain(redirectUrl.host, currentHost)) { + removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); + } + + // Evaluate the beforeRedirect callback + if (isFunction(beforeRedirect)) { + var responseDetails = { + headers: response.headers, + statusCode: statusCode, + }; + var requestDetails = { + url: currentUrl, + method: method, + headers: requestHeaders, + }; + beforeRedirect(this._options, responseDetails, requestDetails); + this._sanitizeOptions(this._options); + } + + // Perform the redirected request + this._performRequest(); +}; + +// Wraps the key/value object of protocols with redirect functionality +function wrap(protocols) { + // Default settings + var exports = { + maxRedirects: 21, + maxBodyLength: 10 * 1024 * 1024, + }; + + // Wrap each protocol + var nativeProtocols = {}; + Object.keys(protocols).forEach(function (scheme) { + var protocol = scheme + ":"; + var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; + var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); + + // Executes a request, following redirects + function request(input, options, callback) { + // Parse parameters, ensuring that input is an object + if (isURL(input)) { + input = spreadUrlObject(input); + } + else if (isString(input)) { + input = spreadUrlObject(parseUrl(input)); + } + else { + callback = options; + options = validateUrl(input); + input = { protocol: protocol }; + } + if (isFunction(options)) { + callback = options; + options = null; + } + + // Set defaults + options = Object.assign({ + maxRedirects: exports.maxRedirects, + maxBodyLength: exports.maxBodyLength, + }, input, options); + options.nativeProtocols = nativeProtocols; + if (!isString(options.host) && !isString(options.hostname)) { + options.hostname = "::1"; + } + + assert.equal(options.protocol, protocol, "protocol mismatch"); + debug("options", options); + return new RedirectableRequest(options, callback); + } + + // Executes a GET request, following redirects + function get(input, options, callback) { + var wrappedRequest = wrappedProtocol.request(input, options, callback); + wrappedRequest.end(); + return wrappedRequest; + } + + // Expose the properties on the wrapped protocol + Object.defineProperties(wrappedProtocol, { + request: { value: request, configurable: true, enumerable: true, writable: true }, + get: { value: get, configurable: true, enumerable: true, writable: true }, + }); + }); + return exports; +} + +function noop() { /* empty */ } + +function parseUrl(input) { + var parsed; + // istanbul ignore else + if (useNativeURL) { + parsed = new URL(input); + } + else { + // Ensure the URL is valid and absolute + parsed = validateUrl(url.parse(input)); + if (!isString(parsed.protocol)) { + throw new InvalidUrlError({ input }); + } + } + return parsed; +} + +function resolveUrl(relative, base) { + // istanbul ignore next + return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative)); +} + +function validateUrl(input) { + if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) { + throw new InvalidUrlError({ input: input.href || input }); + } + if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) { + throw new InvalidUrlError({ input: input.href || input }); + } + return input; +} + +function spreadUrlObject(urlObject, target) { + var spread = target || {}; + for (var key of preservedUrlFields) { + spread[key] = urlObject[key]; + } + + // Fix IPv6 hostname + if (spread.hostname.startsWith("[")) { + spread.hostname = spread.hostname.slice(1, -1); + } + // Ensure port is a number + if (spread.port !== "") { + spread.port = Number(spread.port); + } + // Concatenate path + spread.path = spread.search ? spread.pathname + spread.search : spread.pathname; + + return spread; +} + +function removeMatchingHeaders(regex, headers) { + var lastValue; + for (var header in headers) { + if (regex.test(header)) { + lastValue = headers[header]; + delete headers[header]; + } + } + return (lastValue === null || typeof lastValue === "undefined") ? + undefined : String(lastValue).trim(); +} + +function createErrorType(code, message, baseClass) { + // Create constructor + function CustomError(properties) { + // istanbul ignore else + if (isFunction(Error.captureStackTrace)) { + Error.captureStackTrace(this, this.constructor); + } + Object.assign(this, properties || {}); + this.code = code; + this.message = this.cause ? message + ": " + this.cause.message : message; + } + + // Attach constructor and set default properties + CustomError.prototype = new (baseClass || Error)(); + Object.defineProperties(CustomError.prototype, { + constructor: { + value: CustomError, + enumerable: false, + }, + name: { + value: "Error [" + code + "]", + enumerable: false, + }, + }); + return CustomError; +} + +function destroyRequest(request, error) { + for (var event of events) { + request.removeListener(event, eventHandlers[event]); + } + request.on("error", noop); + request.destroy(error); +} + +function isSubdomain(subdomain, domain) { + assert(isString(subdomain) && isString(domain)); + var dot = subdomain.length - domain.length - 1; + return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); +} + +function isString(value) { + return typeof value === "string" || value instanceof String; +} + +function isFunction(value) { + return typeof value === "function"; +} + +function isBuffer(value) { + return typeof value === "object" && ("length" in value); +} + +function isURL(value) { + return URL && value instanceof URL; +} + +// Exports +module.exports = wrap({ http: http, https: https }); +module.exports.wrap = wrap; diff --git a/node_modules/follow-redirects/package.json b/node_modules/follow-redirects/package.json new file mode 100644 index 0000000..a2689fa --- /dev/null +++ b/node_modules/follow-redirects/package.json @@ -0,0 +1,58 @@ +{ + "name": "follow-redirects", + "version": "1.15.11", + "description": "HTTP and HTTPS modules that follow redirects.", + "license": "MIT", + "main": "index.js", + "files": [ + "*.js" + ], + "engines": { + "node": ">=4.0" + }, + "scripts": { + "lint": "eslint *.js test", + "test": "nyc mocha" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/follow-redirects/follow-redirects.git" + }, + "homepage": "https://github.com/follow-redirects/follow-redirects", + "bugs": { + "url": "https://github.com/follow-redirects/follow-redirects/issues" + }, + "keywords": [ + "http", + "https", + "url", + "redirect", + "client", + "location", + "utility" + ], + "author": "Ruben Verborgh (https://ruben.verborgh.org/)", + "contributors": [ + "Olivier Lalonde (http://www.syskall.com)", + "James Talmage " + ], + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "peerDependenciesMeta": { + "debug": { + "optional": true + } + }, + "devDependencies": { + "concat-stream": "^2.0.0", + "eslint": "^5.16.0", + "express": "^4.16.4", + "lolex": "^3.1.0", + "mocha": "^6.0.2", + "nyc": "^14.1.1" + } +} diff --git a/node_modules/form-data/CHANGELOG.md b/node_modules/form-data/CHANGELOG.md new file mode 100644 index 0000000..449dd43 --- /dev/null +++ b/node_modules/form-data/CHANGELOG.md @@ -0,0 +1,601 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v4.0.4](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4) - 2025-07-16 + +### Commits + +- [meta] add `auto-changelog` [`811f682`](https://github.com/form-data/form-data/commit/811f68282fab0315209d0e2d1c44b6c32ea0d479) +- [Tests] handle predict-v8-randomness failures in node < 17 and node > 23 [`1d11a76`](https://github.com/form-data/form-data/commit/1d11a76434d101f22fdb26b8aef8615f28b98402) +- [Fix] Switch to using `crypto` random for boundary values [`3d17230`](https://github.com/form-data/form-data/commit/3d1723080e6577a66f17f163ecd345a21d8d0fd0) +- [Tests] fix linting errors [`5e34080`](https://github.com/form-data/form-data/commit/5e340800b5f8914213e4e0378c084aae71cfd73a) +- [meta] actually ensure the readme backup isn’t published [`316c82b`](https://github.com/form-data/form-data/commit/316c82ba93fd4985af757b771b9a1f26d3b709ef) +- [Dev Deps] update `@ljharb/eslint-config` [`58c25d7`](https://github.com/form-data/form-data/commit/58c25d76406a5b0dfdf54045cf252563f2bbda8d) +- [meta] fix readme capitalization [`2300ca1`](https://github.com/form-data/form-data/commit/2300ca19595b0ee96431e868fe2a40db79e41c61) + +## [v4.0.3](https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3) - 2025-06-05 + +### Fixed + +- [Fix] `append`: avoid a crash on nullish values [`#577`](https://github.com/form-data/form-data/issues/577) + +### Commits + +- [eslint] use a shared config [`426ba9a`](https://github.com/form-data/form-data/commit/426ba9ac440f95d1998dac9a5cd8d738043b048f) +- [eslint] fix some spacing issues [`2094191`](https://github.com/form-data/form-data/commit/20941917f0e9487e68c564ebc3157e23609e2939) +- [Refactor] use `hasown` [`81ab41b`](https://github.com/form-data/form-data/commit/81ab41b46fdf34f5d89d7ff30b513b0925febfaa) +- [Fix] validate boundary type in `setBoundary()` method [`8d8e469`](https://github.com/form-data/form-data/commit/8d8e4693093519f7f18e3c597d1e8df8c493de9e) +- [Tests] add tests to check the behavior of `getBoundary` with non-strings [`837b8a1`](https://github.com/form-data/form-data/commit/837b8a1f7562bfb8bda74f3fc538adb7a5858995) +- [Dev Deps] remove unused deps [`870e4e6`](https://github.com/form-data/form-data/commit/870e4e665935e701bf983a051244ab928e62d58e) +- [meta] remove local commit hooks [`e6e83cc`](https://github.com/form-data/form-data/commit/e6e83ccb545a5619ed6cd04f31d5c2f655eb633e) +- [Dev Deps] update `eslint` [`4066fd6`](https://github.com/form-data/form-data/commit/4066fd6f65992b62fa324a6474a9292a4f88c916) +- [meta] fix scripts to use prepublishOnly [`c4bbb13`](https://github.com/form-data/form-data/commit/c4bbb13c0ef669916657bc129341301b1d331d75) + +## [v4.0.2](https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2) - 2025-02-14 + +### Merged + +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) + +### Fixed + +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) +- [Fix] set `Symbol.toStringTag` when available [`#396`](https://github.com/form-data/form-data/issues/396) + +### Commits + +- Merge tags v2.5.3 and v3.0.3 [`92613b9`](https://github.com/form-data/form-data/commit/92613b9208556eb4ebc482fdf599fae111626fb6) +- [Tests] migrate from travis to GHA [`806eda7`](https://github.com/form-data/form-data/commit/806eda77740e6e3c67c7815afb216f2e1f187ba5) +- [Tests] migrate from travis to GHA [`8fdb3bc`](https://github.com/form-data/form-data/commit/8fdb3bc6b5d001f8909a9fca391d1d1d97ef1d79) +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`7fecefe`](https://github.com/form-data/form-data/commit/7fecefe4ba8f775634aff86a698776ad95ecffb5) +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`6e682d4`](https://github.com/form-data/form-data/commit/6e682d4bd41de7e80de41e3c4ee10f23fcc3dd00) +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`df3c1e6`](https://github.com/form-data/form-data/commit/df3c1e6f0937f47a782dc4573756a54987f31dde) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `cross-spawn`, `eslint`, `formidable`, `in-publish`, `pkgfiles`, `pre-commit`, `puppeteer`, `request`, `tape`, `typescript` [`8261fcb`](https://github.com/form-data/form-data/commit/8261fcb8bf5944d30ae3bd04b91b71d6a9932ef4) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `cross-spawn`, `eslint`, `formidable`, `in-publish`, `pkgfiles`, `pre-commit`, `puppeteer`, `request`, `tape`, `typescript` [`fb66cb7`](https://github.com/form-data/form-data/commit/fb66cb740e29fb170eee947d4be6fdf82d6659af) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `eslint`, `formidable`, `in-publish`, `phantomjs-prebuilt`, `pkgfiles`, `pre-commit`, `request`, `tape`, `typescript` [`819f6b7`](https://github.com/form-data/form-data/commit/819f6b7a543306a891fca37c3a06d0ff4a734422) +- [eslint] clean up ignores [`3217b3d`](https://github.com/form-data/form-data/commit/3217b3ded8e382e51171d5c74c6038a21cc54440) +- [eslint] clean up ignores [`3a9d480`](https://github.com/form-data/form-data/commit/3a9d480232dbcbc07260ad84c3da4975d9a3ae9e) +- [Fix] `Buffer.from` and `Buffer.alloc` require node 4+ [`c499f76`](https://github.com/form-data/form-data/commit/c499f76f1faac1ddbf210c45217038e4c1e02337) +- Only apps should have lockfiles [`b82f590`](https://github.com/form-data/form-data/commit/b82f59093cdbadb4b7ec0922d33ae7ab048b82ff) +- Only apps should have lockfiles [`b170ee2`](https://github.com/form-data/form-data/commit/b170ee2b22b4c695c363b811c0c553d2fb1bbd79) +- [Deps] update `combined-stream`, `mime-types` [`6b1ca1d`](https://github.com/form-data/form-data/commit/6b1ca1dc7362a1b1c3a99a885516cca4b7eb817f) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`e5df7f2`](https://github.com/form-data/form-data/commit/e5df7f24383342264bd73dee3274818a40d04065) +- [Deps] update `mime-types` [`5a5bafe`](https://github.com/form-data/form-data/commit/5a5bafee894fead10da49e1fa2b084e17f2e1034) +- Bumped version 2.5.3 [`9457283`](https://github.com/form-data/form-data/commit/9457283e1dce6122adc908fdd7442cfc54cabe7a) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`9dbe192`](https://github.com/form-data/form-data/commit/9dbe192be3db215eac4d9c0b980470a5c2c030c6) +- Merge tags v2.5.2 and v3.0.2 [`d53265d`](https://github.com/form-data/form-data/commit/d53265d86c5153f535ec68eb107548b1b2883576) +- Bumped version 2.5.2 [`7020dd4`](https://github.com/form-data/form-data/commit/7020dd4c1260370abc40e86e3dfe49c5d576fbda) +- [Dev Deps] downgrade `cross-spawn` [`3fc1a9b`](https://github.com/form-data/form-data/commit/3fc1a9b62ddf1fe77a2bd6bd3476e4c0a9e01a88) +- fix: move util.isArray to Array.isArray (#564) [`edb555a`](https://github.com/form-data/form-data/commit/edb555a811f6f7e4668db4831551cf41c1de1cac) +- fix: move util.isArray to Array.isArray (#564) [`10418d1`](https://github.com/form-data/form-data/commit/10418d1fe4b0d65fe020eafe3911feb5ad5e2bd6) + +## [v4.0.1](https://github.com/form-data/form-data/compare/v4.0.0...v4.0.1) - 2024-10-10 + +### Commits + +- [Tests] migrate from travis to GHA [`757b4e3`](https://github.com/form-data/form-data/commit/757b4e32e95726aec9bdcc771fb5a3b564d88034) +- [eslint] clean up ignores [`e8f0d80`](https://github.com/form-data/form-data/commit/e8f0d80cd7cd424d1488532621ec40a33218b30b) +- fix (npmignore): ignore temporary build files [`335ad19`](https://github.com/form-data/form-data/commit/335ad19c6e17dc2d7298ffe0e9b37ba63600e94b) +- fix: move util.isArray to Array.isArray [`440d3be`](https://github.com/form-data/form-data/commit/440d3bed752ac2f9213b4c2229dbccefe140e5fa) + +## [v4.0.0](https://github.com/form-data/form-data/compare/v3.0.3...v4.0.0) - 2021-02-15 + +### Merged + +- Handle custom stream [`#382`](https://github.com/form-data/form-data/pull/382) + +### Commits + +- Fix typo [`e705c0a`](https://github.com/form-data/form-data/commit/e705c0a1fdaf90d21501f56460b93e43a18bd435) +- Update README for custom stream behavior [`6dd8624`](https://github.com/form-data/form-data/commit/6dd8624b2999e32768d62752c9aae5845a803b0d) + +## [v3.0.3](https://github.com/form-data/form-data/compare/v3.0.2...v3.0.3) - 2025-02-14 + +### Merged + +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) + +### Fixed + +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) + +### Commits + +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`7fecefe`](https://github.com/form-data/form-data/commit/7fecefe4ba8f775634aff86a698776ad95ecffb5) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `cross-spawn`, `eslint`, `formidable`, `in-publish`, `pkgfiles`, `pre-commit`, `puppeteer`, `request`, `tape`, `typescript` [`8261fcb`](https://github.com/form-data/form-data/commit/8261fcb8bf5944d30ae3bd04b91b71d6a9932ef4) +- Only apps should have lockfiles [`b82f590`](https://github.com/form-data/form-data/commit/b82f59093cdbadb4b7ec0922d33ae7ab048b82ff) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`e5df7f2`](https://github.com/form-data/form-data/commit/e5df7f24383342264bd73dee3274818a40d04065) +- [Deps] update `mime-types` [`5a5bafe`](https://github.com/form-data/form-data/commit/5a5bafee894fead10da49e1fa2b084e17f2e1034) + +## [v3.0.2](https://github.com/form-data/form-data/compare/v3.0.1...v3.0.2) - 2024-10-10 + +### Merged + +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) + +### Commits + +- [Tests] migrate from travis to GHA [`8fdb3bc`](https://github.com/form-data/form-data/commit/8fdb3bc6b5d001f8909a9fca391d1d1d97ef1d79) +- [eslint] clean up ignores [`3217b3d`](https://github.com/form-data/form-data/commit/3217b3ded8e382e51171d5c74c6038a21cc54440) +- fix: move util.isArray to Array.isArray (#564) [`edb555a`](https://github.com/form-data/form-data/commit/edb555a811f6f7e4668db4831551cf41c1de1cac) + +## [v3.0.1](https://github.com/form-data/form-data/compare/v3.0.0...v3.0.1) - 2021-02-15 + +### Merged + +- Fix typo: ads -> adds [`#451`](https://github.com/form-data/form-data/pull/451) + +### Commits + +- feat: add setBoundary method [`55d90ce`](https://github.com/form-data/form-data/commit/55d90ce4a4c22b0ea0647991d85cb946dfb7395b) + +## [v3.0.0](https://github.com/form-data/form-data/compare/v2.5.3...v3.0.0) - 2019-11-05 + +### Merged + +- Update Readme.md [`#449`](https://github.com/form-data/form-data/pull/449) +- Update package.json [`#448`](https://github.com/form-data/form-data/pull/448) +- fix memory leak [`#447`](https://github.com/form-data/form-data/pull/447) +- form-data: Replaced PhantomJS Dependency [`#442`](https://github.com/form-data/form-data/pull/442) +- Fix constructor options in Typescript definitions [`#446`](https://github.com/form-data/form-data/pull/446) +- Fix the getHeaders method signatures [`#434`](https://github.com/form-data/form-data/pull/434) +- Update combined-stream (fixes #422) [`#424`](https://github.com/form-data/form-data/pull/424) + +### Fixed + +- Merge pull request #424 from botgram/update-combined-stream [`#422`](https://github.com/form-data/form-data/issues/422) +- Update combined-stream (fixes #422) [`#422`](https://github.com/form-data/form-data/issues/422) + +### Commits + +- Add readable stream options to constructor type [`80c8f74`](https://github.com/form-data/form-data/commit/80c8f746bcf4c0418ae35fbedde12fb8c01e2748) +- Fixed: getHeaders method signatures [`f4ca7f8`](https://github.com/form-data/form-data/commit/f4ca7f8e31f7e07df22c1aeb8e0a32a7055a64ca) +- Pass options to constructor if not used with new [`4bde68e`](https://github.com/form-data/form-data/commit/4bde68e12de1ba90fefad2e7e643f6375b902763) +- Make userHeaders optional [`2b4e478`](https://github.com/form-data/form-data/commit/2b4e4787031490942f2d1ee55c56b85a250875a7) + +## [v2.5.3](https://github.com/form-data/form-data/compare/v2.5.2...v2.5.3) - 2025-02-14 + +### Merged + +- [Fix] set `Symbol.toStringTag` when available [`#573`](https://github.com/form-data/form-data/pull/573) + +### Fixed + +- [Fix] set `Symbol.toStringTag` when available (#573) [`#396`](https://github.com/form-data/form-data/issues/396) + +### Commits + +- [Refactor] use `Object.prototype.hasOwnProperty.call` [`6e682d4`](https://github.com/form-data/form-data/commit/6e682d4bd41de7e80de41e3c4ee10f23fcc3dd00) +- [Dev Deps] update `@types/node`, `browserify`, `coveralls`, `eslint`, `formidable`, `in-publish`, `phantomjs-prebuilt`, `pkgfiles`, `pre-commit`, `request`, `tape`, `typescript` [`819f6b7`](https://github.com/form-data/form-data/commit/819f6b7a543306a891fca37c3a06d0ff4a734422) +- Only apps should have lockfiles [`b170ee2`](https://github.com/form-data/form-data/commit/b170ee2b22b4c695c363b811c0c553d2fb1bbd79) +- [Deps] update `combined-stream`, `mime-types` [`6b1ca1d`](https://github.com/form-data/form-data/commit/6b1ca1dc7362a1b1c3a99a885516cca4b7eb817f) +- Bumped version 2.5.3 [`9457283`](https://github.com/form-data/form-data/commit/9457283e1dce6122adc908fdd7442cfc54cabe7a) +- [Dev Deps] pin `request` which via `tough-cookie` ^2.4 depends on `psl` [`9dbe192`](https://github.com/form-data/form-data/commit/9dbe192be3db215eac4d9c0b980470a5c2c030c6) + +## [v2.5.2](https://github.com/form-data/form-data/compare/v2.5.1...v2.5.2) - 2024-10-10 + +### Merged + +- fix (npmignore): ignore temporary build files [`#532`](https://github.com/form-data/form-data/pull/532) + +### Commits + +- [Tests] migrate from travis to GHA [`806eda7`](https://github.com/form-data/form-data/commit/806eda77740e6e3c67c7815afb216f2e1f187ba5) +- [eslint] clean up ignores [`3a9d480`](https://github.com/form-data/form-data/commit/3a9d480232dbcbc07260ad84c3da4975d9a3ae9e) +- [Fix] `Buffer.from` and `Buffer.alloc` require node 4+ [`c499f76`](https://github.com/form-data/form-data/commit/c499f76f1faac1ddbf210c45217038e4c1e02337) +- Bumped version 2.5.2 [`7020dd4`](https://github.com/form-data/form-data/commit/7020dd4c1260370abc40e86e3dfe49c5d576fbda) +- [Dev Deps] downgrade `cross-spawn` [`3fc1a9b`](https://github.com/form-data/form-data/commit/3fc1a9b62ddf1fe77a2bd6bd3476e4c0a9e01a88) +- fix: move util.isArray to Array.isArray (#564) [`10418d1`](https://github.com/form-data/form-data/commit/10418d1fe4b0d65fe020eafe3911feb5ad5e2bd6) + +## [v2.5.1](https://github.com/form-data/form-data/compare/v2.5.0...v2.5.1) - 2019-08-28 + +### Merged + +- Fix error in callback signatures [`#435`](https://github.com/form-data/form-data/pull/435) +- -Fixed: Eerror in the documentations as indicated in #439 [`#440`](https://github.com/form-data/form-data/pull/440) +- Add constructor options to TypeScript defs [`#437`](https://github.com/form-data/form-data/pull/437) + +### Commits + +- Add remaining combined-stream options to typedef [`4d41a32`](https://github.com/form-data/form-data/commit/4d41a32c0b3f85f8bbc9cf17df43befd2d5fc305) +- Bumped version 2.5.1 [`8ce81f5`](https://github.com/form-data/form-data/commit/8ce81f56cccf5466363a5eff135ad394a929f59b) +- Bump rimraf to 2.7.1 [`a6bc2d4`](https://github.com/form-data/form-data/commit/a6bc2d4296dbdee5d84cbab7c69bcd0eea7a12e2) + +## [v2.5.0](https://github.com/form-data/form-data/compare/v2.4.0...v2.5.0) - 2019-07-03 + +### Merged + +- - Added: public methods with information and examples to readme [`#429`](https://github.com/form-data/form-data/pull/429) +- chore: move @types/node to devDep [`#431`](https://github.com/form-data/form-data/pull/431) +- Switched windows tests from AppVeyor to Travis [`#430`](https://github.com/form-data/form-data/pull/430) +- feat(typings): migrate TS typings #427 [`#428`](https://github.com/form-data/form-data/pull/428) +- enhance the method of path.basename, handle undefined case [`#421`](https://github.com/form-data/form-data/pull/421) + +### Commits + +- - Added: public methods with information and examples to the readme file. [`21323f3`](https://github.com/form-data/form-data/commit/21323f3b4043a167046a4a2554c5f2825356c423) +- feat(typings): migrate TS typings [`a3c0142`](https://github.com/form-data/form-data/commit/a3c0142ed91b0c7dcaf89c4f618776708f1f70a9) +- - Fixed: Typos [`37350fa`](https://github.com/form-data/form-data/commit/37350fa250782f156a998ec1fa9671866d40ac49) +- Switched to Travis Windows from Appveyor [`fc61c73`](https://github.com/form-data/form-data/commit/fc61c7381fad12662df16dbc3e7621c91b886f03) +- - Fixed: rendering of subheaders [`e93ed8d`](https://github.com/form-data/form-data/commit/e93ed8df9d7f22078bc3a2c24889e9dfa11e192d) +- Updated deps and readme [`e3d8628`](https://github.com/form-data/form-data/commit/e3d8628728f6e4817ab97deeed92f0c822661b89) +- Updated dependencies [`19add50`](https://github.com/form-data/form-data/commit/19add50afb7de66c70d189f422d16f1b886616e2) +- Bumped version to 2.5.0 [`905f173`](https://github.com/form-data/form-data/commit/905f173a3f785e8d312998e765634ee451ca5f42) +- - Fixed: filesize is not a valid option? knownLength should be used for streams [`d88f912`](https://github.com/form-data/form-data/commit/d88f912b75b666b47f8674467516eade69d2d5be) +- Bump notion of modern node to node8 [`508b626`](https://github.com/form-data/form-data/commit/508b626bf1b460d3733d3420dc1cfd001617f6ac) +- enhance the method of path.basename [`faaa68a`](https://github.com/form-data/form-data/commit/faaa68a297be7d4fca0ac4709d5b93afc1f78b5c) + +## [v2.4.0](https://github.com/form-data/form-data/compare/v2.3.2...v2.4.0) - 2019-06-19 + +### Merged + +- Added "getBuffer" method and updated certificates [`#419`](https://github.com/form-data/form-data/pull/419) +- docs(readme): add axios integration document [`#425`](https://github.com/form-data/form-data/pull/425) +- Allow newer versions of combined-stream [`#402`](https://github.com/form-data/form-data/pull/402) + +### Commits + +- Updated: Certificate [`e90a76a`](https://github.com/form-data/form-data/commit/e90a76ab3dcaa63a6f3045f8255bfbb9c25a3e4e) +- Updated build/test/badges [`8512eef`](https://github.com/form-data/form-data/commit/8512eef436e28372f5bc88de3ca76a9cb46e6847) +- Bumped version 2.4.0 [`0f8da06`](https://github.com/form-data/form-data/commit/0f8da06c0b4c997bd2f6b09d78290d339616a950) +- docs(readme): remove unnecessary bracket [`4e3954d`](https://github.com/form-data/form-data/commit/4e3954dde304d27e3b95371d8c78002f3af5d5b2) +- Bumped version to 2.3.3 [`b16916a`](https://github.com/form-data/form-data/commit/b16916a568a0d06f3f8a16c31f9a8b89b7844094) + +## [v2.3.2](https://github.com/form-data/form-data/compare/v2.3.1...v2.3.2) - 2018-02-13 + +### Merged + +- Pulling in fixed combined-stream [`#379`](https://github.com/form-data/form-data/pull/379) + +### Commits + +- All the dev dependencies are breaking in old versions of node :'( [`c7dba6a`](https://github.com/form-data/form-data/commit/c7dba6a139d872d173454845e25e1850ed6b72b4) +- Updated badges [`19b6c7a`](https://github.com/form-data/form-data/commit/19b6c7a8a5c40f47f91c8a8da3e5e4dc3c449fa3) +- Try tests in node@4 [`872a326`](https://github.com/form-data/form-data/commit/872a326ab13e2740b660ff589b75232c3a85fcc9) +- Pull in final version [`9d44871`](https://github.com/form-data/form-data/commit/9d44871073d647995270b19dbc26f65671ce15c7) + +## [v2.3.1](https://github.com/form-data/form-data/compare/v2.3.0...v2.3.1) - 2017-08-24 + +### Commits + +- Updated readme with custom options example [`8e0a569`](https://github.com/form-data/form-data/commit/8e0a5697026016fe171e93bec43c2205279e23ca) +- Added support (tests) for node 8 [`d1d6f4a`](https://github.com/form-data/form-data/commit/d1d6f4ad4670d8ba84cc85b28e522ca0e93eb362) + +## [v2.3.0](https://github.com/form-data/form-data/compare/v2.2.0...v2.3.0) - 2017-08-24 + +### Merged + +- Added custom `options` support [`#368`](https://github.com/form-data/form-data/pull/368) +- Allow form.submit with url string param to use https [`#249`](https://github.com/form-data/form-data/pull/249) +- Proper header production [`#357`](https://github.com/form-data/form-data/pull/357) +- Fix wrong MIME type in example [`#285`](https://github.com/form-data/form-data/pull/285) + +### Commits + +- allow form.submit with url string param to use https [`c0390dc`](https://github.com/form-data/form-data/commit/c0390dcc623e15215308fa2bb0225aa431d9381e) +- update tests for url parsing [`eec0e80`](https://github.com/form-data/form-data/commit/eec0e807889d46697abd39a89ad9bf39996ba787) +- Uses for in to assign properties instead of Object.assign [`f6854ed`](https://github.com/form-data/form-data/commit/f6854edd85c708191bb9c89615a09fd0a9afe518) +- Adds test to check for option override [`61762f2`](https://github.com/form-data/form-data/commit/61762f2c5262e576d6a7f778b4ebab6546ef8582) +- Removes the 2mb maxDataSize limitation [`dc171c3`](https://github.com/form-data/form-data/commit/dc171c3ba49ac9b8813636fd4159d139b812315b) +- Ignore .DS_Store [`e8a05d3`](https://github.com/form-data/form-data/commit/e8a05d33361f7dca8927fe1d96433d049843de24) + +## [v2.2.0](https://github.com/form-data/form-data/compare/v2.1.4...v2.2.0) - 2017-06-11 + +### Merged + +- Filename can be a nested path [`#355`](https://github.com/form-data/form-data/pull/355) + +### Commits + +- Bumped version number. [`d7398c3`](https://github.com/form-data/form-data/commit/d7398c3e7cd81ed12ecc0b84363721bae467db02) + +## [v2.1.4](https://github.com/form-data/form-data/compare/2.1.3...v2.1.4) - 2017-04-08 + +## [2.1.3](https://github.com/form-data/form-data/compare/v2.1.3...2.1.3) - 2017-04-08 + +## [v2.1.3](https://github.com/form-data/form-data/compare/v2.1.2...v2.1.3) - 2017-04-08 + +### Merged + +- toString should output '[object FormData]' [`#346`](https://github.com/form-data/form-data/pull/346) + +## [v2.1.2](https://github.com/form-data/form-data/compare/v2.1.1...v2.1.2) - 2016-11-07 + +### Merged + +- #271 Added check for self and window objects + tests [`#282`](https://github.com/form-data/form-data/pull/282) + +### Commits + +- Added check for self and window objects + tests [`c99e4ec`](https://github.com/form-data/form-data/commit/c99e4ec32cd14d83776f2bdcc5a4e7384131c1b1) + +## [v2.1.1](https://github.com/form-data/form-data/compare/v2.1.0...v2.1.1) - 2016-10-03 + +### Merged + +- Bumped dependencies. [`#270`](https://github.com/form-data/form-data/pull/270) +- Update browser.js shim to use self instead of window [`#267`](https://github.com/form-data/form-data/pull/267) +- Boilerplate code rediction [`#265`](https://github.com/form-data/form-data/pull/265) +- eslint@3.7.0 [`#266`](https://github.com/form-data/form-data/pull/266) + +### Commits + +- code duplicates removed [`e9239fb`](https://github.com/form-data/form-data/commit/e9239fbe7d3c897b29fe3bde857d772469541c01) +- Changed according to requests [`aa99246`](https://github.com/form-data/form-data/commit/aa9924626bd9168334d73fea568c0ad9d8fbaa96) +- chore(package): update eslint to version 3.7.0 [`090a859`](https://github.com/form-data/form-data/commit/090a859835016cab0de49629140499e418db9c3a) + +## [v2.1.0](https://github.com/form-data/form-data/compare/v2.0.0...v2.1.0) - 2016-09-25 + +### Merged + +- Added `hasKnownLength` public method [`#263`](https://github.com/form-data/form-data/pull/263) + +### Commits + +- Added hasKnownLength public method [`655b959`](https://github.com/form-data/form-data/commit/655b95988ef2ed3399f8796b29b2a8673c1df11c) + +## [v2.0.0](https://github.com/form-data/form-data/compare/v1.0.0...v2.0.0) - 2016-09-16 + +### Merged + +- Replaced async with asynckit [`#258`](https://github.com/form-data/form-data/pull/258) +- Pre-release house cleaning [`#247`](https://github.com/form-data/form-data/pull/247) + +### Commits + +- Replaced async with asynckit. Modernized [`1749b78`](https://github.com/form-data/form-data/commit/1749b78d50580fbd080e65c1eb9702ad4f4fc0c0) +- Ignore .bak files [`c08190a`](https://github.com/form-data/form-data/commit/c08190a87d3e22a528b6e32b622193742a4c2672) +- Trying to be more chatty. :) [`c79eabb`](https://github.com/form-data/form-data/commit/c79eabb24eaf761069255a44abf4f540cfd47d40) + +## [v1.0.0](https://github.com/form-data/form-data/compare/v1.0.0-rc4...v1.0.0) - 2016-08-26 + +### Merged + +- Allow custom header fields to be set as an object. [`#190`](https://github.com/form-data/form-data/pull/190) +- v1.0.0-rc4 [`#182`](https://github.com/form-data/form-data/pull/182) +- Avoid undefined variable reference in older browsers [`#176`](https://github.com/form-data/form-data/pull/176) +- More housecleaning [`#164`](https://github.com/form-data/form-data/pull/164) +- More cleanup [`#159`](https://github.com/form-data/form-data/pull/159) +- Added windows testing. Some cleanup. [`#158`](https://github.com/form-data/form-data/pull/158) +- Housecleaning. Added test coverage. [`#156`](https://github.com/form-data/form-data/pull/156) +- Second iteration of cleanup. [`#145`](https://github.com/form-data/form-data/pull/145) + +### Commits + +- Pre-release house cleaning [`440d72b`](https://github.com/form-data/form-data/commit/440d72b5fd44dd132f42598c3183d46e5f35ce71) +- Updated deps, updated docs [`54b6114`](https://github.com/form-data/form-data/commit/54b61143e9ce66a656dd537a1e7b31319a4991be) +- make docs up-to-date [`5e383d7`](https://github.com/form-data/form-data/commit/5e383d7f1466713f7fcef58a6817e0cb466c8ba7) +- Added missing deps [`fe04862`](https://github.com/form-data/form-data/commit/fe04862000b2762245e2db69d5207696a08c1174) + +## [v1.0.0-rc4](https://github.com/form-data/form-data/compare/v1.0.0-rc3...v1.0.0-rc4) - 2016-03-15 + +### Merged + +- Housecleaning, preparing for the release [`#144`](https://github.com/form-data/form-data/pull/144) +- lib: emit error when failing to get length [`#127`](https://github.com/form-data/form-data/pull/127) +- Cleaning up for Codacity 2. [`#143`](https://github.com/form-data/form-data/pull/143) +- Cleaned up codacity concerns. [`#142`](https://github.com/form-data/form-data/pull/142) +- Should throw type error without new operator. [`#129`](https://github.com/form-data/form-data/pull/129) + +### Commits + +- More cleanup [`94b6565`](https://github.com/form-data/form-data/commit/94b6565bb98a387335c72feff5ed5c10da0a7f6f) +- Shuffling things around [`3c2f172`](https://github.com/form-data/form-data/commit/3c2f172eaddf0979b3eef5c73985d1a6fd3eee4a) +- Second iteration of cleanup. [`347c88e`](https://github.com/form-data/form-data/commit/347c88ef9a99a66b9bcf4278497425db2f0182b2) +- Housecleaning [`c335610`](https://github.com/form-data/form-data/commit/c3356100c054a4695e4dec8ed7072775cd745616) +- More housecleaning [`f573321`](https://github.com/form-data/form-data/commit/f573321824aae37ba2052a92cc889d533d9f8fb8) +- Trying to make far run on windows. + cleanup [`e426dfc`](https://github.com/form-data/form-data/commit/e426dfcefb07ee307d8a15dec04044cce62413e6) +- Playing with appveyor [`c9458a7`](https://github.com/form-data/form-data/commit/c9458a7c328782b19859bc1745e7d6b2005ede86) +- Updated dev dependencies. [`ceebe88`](https://github.com/form-data/form-data/commit/ceebe88872bb22da0a5a98daf384e3cc232928d3) +- Replaced win-spawn with cross-spawn [`405a69e`](https://github.com/form-data/form-data/commit/405a69ee34e235ee6561b5ff0140b561be40d1cc) +- Updated readme badges. [`12f282a`](https://github.com/form-data/form-data/commit/12f282a1310fcc2f70cc5669782283929c32a63d) +- Making paths windows friendly. [`f4bddc5`](https://github.com/form-data/form-data/commit/f4bddc5955e2472f8e23c892c9b4d7a08fcb85a3) +- [WIP] trying things for greater sanity [`8ad1f02`](https://github.com/form-data/form-data/commit/8ad1f02b0b3db4a0b00c5d6145ed69bcb7558213) +- Bending under Codacy [`bfff3bb`](https://github.com/form-data/form-data/commit/bfff3bb36052dc83f429949b4e6f9b146a49d996) +- Another attempt to make windows friendly [`f3eb628`](https://github.com/form-data/form-data/commit/f3eb628974ccb91ba0020f41df490207eeed77f6) +- Updated dependencies. [`f73996e`](https://github.com/form-data/form-data/commit/f73996e0508ee2d4b2b376276adfac1de4188ac2) +- Missed travis changes. [`67ee79f`](https://github.com/form-data/form-data/commit/67ee79f964fdabaf300bd41b0af0c1cfaca07687) +- Restructured badges. [`48444a1`](https://github.com/form-data/form-data/commit/48444a1ff156ba2c2c3cfd11047c2f2fd92d4474) +- Add similar type error as the browser for attempting to use form-data without new. [`5711320`](https://github.com/form-data/form-data/commit/5711320fb7c8cc620cfc79b24c7721526e23e539) +- Took out codeclimate-test-reporter [`a7e0c65`](https://github.com/form-data/form-data/commit/a7e0c6522afe85ca9974b0b4e1fca9c77c3e52b1) +- One more [`8e84cff`](https://github.com/form-data/form-data/commit/8e84cff3370526ecd3e175fd98e966242d81993c) + +## [v1.0.0-rc3](https://github.com/form-data/form-data/compare/v1.0.0-rc2...v1.0.0-rc3) - 2015-07-29 + +### Merged + +- House cleaning. Added `pre-commit`. [`#140`](https://github.com/form-data/form-data/pull/140) +- Allow custom content-type without setting a filename. [`#138`](https://github.com/form-data/form-data/pull/138) +- Add node-fetch to alternative submission methods. [`#132`](https://github.com/form-data/form-data/pull/132) +- Update dependencies [`#130`](https://github.com/form-data/form-data/pull/130) +- Switching to container based TravisCI [`#136`](https://github.com/form-data/form-data/pull/136) +- Default content-type to 'application/octect-stream' [`#128`](https://github.com/form-data/form-data/pull/128) +- Allow filename as third option of .append [`#125`](https://github.com/form-data/form-data/pull/125) + +### Commits + +- Allow custom content-type without setting a filename [`c8a77cc`](https://github.com/form-data/form-data/commit/c8a77cc0cf16d15f1ebf25272beaab639ce89f76) +- Fixed ranged test. [`a5ac58c`](https://github.com/form-data/form-data/commit/a5ac58cbafd0909f32fe8301998f689314fd4859) +- Allow filename as third option of #append [`d081005`](https://github.com/form-data/form-data/commit/d0810058c84764b3c463a18b15ebb37864de9260) +- Allow custom content-type without setting a filename [`8cb9709`](https://github.com/form-data/form-data/commit/8cb9709e5f1809cfde0cd707dbabf277138cd771) + +## [v1.0.0-rc2](https://github.com/form-data/form-data/compare/v1.0.0-rc1...v1.0.0-rc2) - 2015-07-21 + +### Merged + +- #109 Append proper line break [`#123`](https://github.com/form-data/form-data/pull/123) +- Add shim for browser (browserify/webpack). [`#122`](https://github.com/form-data/form-data/pull/122) +- Update license field [`#115`](https://github.com/form-data/form-data/pull/115) + +### Commits + +- Add shim for browser. [`87c33f4`](https://github.com/form-data/form-data/commit/87c33f4269a2211938f80ab3e53835362b1afee8) +- Bump version [`a3f5d88`](https://github.com/form-data/form-data/commit/a3f5d8872c810ce240c7d3838c69c3c9fcecc111) + +## [v1.0.0-rc1](https://github.com/form-data/form-data/compare/0.2...v1.0.0-rc1) - 2015-06-13 + +### Merged + +- v1.0.0-rc1 [`#114`](https://github.com/form-data/form-data/pull/114) +- Updated test targets [`#102`](https://github.com/form-data/form-data/pull/102) +- Remove duplicate plus sign [`#94`](https://github.com/form-data/form-data/pull/94) + +### Commits + +- Made https test local. Updated deps. [`afe1959`](https://github.com/form-data/form-data/commit/afe1959ec711f23e57038ab5cb20fedd86271f29) +- Proper self-signed ssl [`4d5ec50`](https://github.com/form-data/form-data/commit/4d5ec50e81109ad2addf3dbb56dc7c134df5ff87) +- Update HTTPS handling for modern days [`2c11b01`](https://github.com/form-data/form-data/commit/2c11b01ce2c06e205c84d7154fa2f27b66c94f3b) +- Made tests more local [`09633fa`](https://github.com/form-data/form-data/commit/09633fa249e7ce3ac581543aafe16ee9039a823b) +- Auto create tmp folder for Formidable [`28714b7`](https://github.com/form-data/form-data/commit/28714b7f71ad556064cdff88fabe6b92bd407ddd) +- remove duplicate plus sign [`36e09c6`](https://github.com/form-data/form-data/commit/36e09c695b0514d91a23f5cd64e6805404776fc7) + +## [0.2](https://github.com/form-data/form-data/compare/0.1.4...0.2) - 2014-12-06 + +### Merged + +- Bumped version [`#96`](https://github.com/form-data/form-data/pull/96) +- Replace mime library. [`#95`](https://github.com/form-data/form-data/pull/95) +- #71 Respect bytes range in a read stream. [`#73`](https://github.com/form-data/form-data/pull/73) + +## [0.1.4](https://github.com/form-data/form-data/compare/0.1.3...0.1.4) - 2014-06-23 + +### Merged + +- Updated version. [`#76`](https://github.com/form-data/form-data/pull/76) +- #71 Respect bytes range in a read stream. [`#75`](https://github.com/form-data/form-data/pull/75) + +## [0.1.3](https://github.com/form-data/form-data/compare/0.1.2...0.1.3) - 2014-06-17 + +### Merged + +- Updated versions. [`#69`](https://github.com/form-data/form-data/pull/69) +- Added custom headers support [`#60`](https://github.com/form-data/form-data/pull/60) +- Added test for Request. Small fixes. [`#56`](https://github.com/form-data/form-data/pull/56) + +### Commits + +- Added test for the custom header functionality [`bd50685`](https://github.com/form-data/form-data/commit/bd506855af62daf728ef1718cae88ed23bb732f3) +- Documented custom headers option [`77a024a`](https://github.com/form-data/form-data/commit/77a024a9375f93c246c35513d80f37d5e11d35ff) +- Removed 0.6 support. [`aee8dce`](https://github.com/form-data/form-data/commit/aee8dce604c595cfaacfc6efb12453d1691ac0d6) + +## [0.1.2](https://github.com/form-data/form-data/compare/0.1.1...0.1.2) - 2013-10-02 + +### Merged + +- Fixed default https port assignment, added tests. [`#52`](https://github.com/form-data/form-data/pull/52) +- #45 Added tests for multi-submit. Updated readme. [`#49`](https://github.com/form-data/form-data/pull/49) +- #47 return request from .submit() [`#48`](https://github.com/form-data/form-data/pull/48) + +### Commits + +- Bumped version. [`2b761b2`](https://github.com/form-data/form-data/commit/2b761b256ae607fc2121621f12c2e1042be26baf) + +## [0.1.1](https://github.com/form-data/form-data/compare/0.1.0...0.1.1) - 2013-08-21 + +### Merged + +- Added license type and reference to package.json [`#46`](https://github.com/form-data/form-data/pull/46) + +### Commits + +- #47 return request from .submit() [`1d61c2d`](https://github.com/form-data/form-data/commit/1d61c2da518bd5e136550faa3b5235bb540f1e06) +- #47 Updated readme. [`e3dae15`](https://github.com/form-data/form-data/commit/e3dae1526bd3c3b9d7aff6075abdaac12c3cc60f) + +## [0.1.0](https://github.com/form-data/form-data/compare/0.0.10...0.1.0) - 2013-07-08 + +### Merged + +- Update master to 0.1.0 [`#44`](https://github.com/form-data/form-data/pull/44) +- 0.1.0 - Added error handling. Streamlined edge cases behavior. [`#43`](https://github.com/form-data/form-data/pull/43) +- Pointed badges back to mothership. [`#39`](https://github.com/form-data/form-data/pull/39) +- Updated node-fake to support 0.11 tests. [`#37`](https://github.com/form-data/form-data/pull/37) +- Updated tests to play nice with 0.10 [`#36`](https://github.com/form-data/form-data/pull/36) +- #32 Added .npmignore [`#34`](https://github.com/form-data/form-data/pull/34) +- Spring cleaning [`#30`](https://github.com/form-data/form-data/pull/30) + +### Commits + +- Added error handling. Streamlined edge cases behavior. [`4da496e`](https://github.com/form-data/form-data/commit/4da496e577cb9bc0fd6c94cbf9333a0082ce353a) +- Made tests more deterministic. [`7fc009b`](https://github.com/form-data/form-data/commit/7fc009b8a2cc9232514a44b2808b9f89ce68f7d2) +- Fixed styling. [`d373b41`](https://github.com/form-data/form-data/commit/d373b417e779024bc3326073e176383cd08c0b18) +- #40 Updated Readme.md regarding getLengthSync() [`efb373f`](https://github.com/form-data/form-data/commit/efb373fd63814d977960e0299d23c92cd876cfef) +- Updated readme. [`527e3a6`](https://github.com/form-data/form-data/commit/527e3a63b032cb6f576f597ad7ff2ebcf8a0b9b4) + +## [0.0.10](https://github.com/form-data/form-data/compare/0.0.9...0.0.10) - 2013-05-08 + +### Commits + +- Updated tests to play nice with 0.10. [`932b39b`](https://github.com/form-data/form-data/commit/932b39b773e49edcb2c5d2e58fe389ab6c42f47c) +- Added dependency tracking. [`3131d7f`](https://github.com/form-data/form-data/commit/3131d7f6996cd519d50547e4de1587fd80d0fa07) + +## 0.0.9 - 2013-04-29 + +### Merged + +- Custom params for form.submit() should cover most edge cases. [`#22`](https://github.com/form-data/form-data/pull/22) +- Updated Readme and version number. [`#20`](https://github.com/form-data/form-data/pull/20) +- Allow custom headers and pre-known length in parts [`#17`](https://github.com/form-data/form-data/pull/17) +- Bumped version number. [`#12`](https://github.com/form-data/form-data/pull/12) +- Fix for #10 [`#11`](https://github.com/form-data/form-data/pull/11) +- Bumped version number. [`#8`](https://github.com/form-data/form-data/pull/8) +- Added support for https destination, http-response and mikeal's request streams. [`#7`](https://github.com/form-data/form-data/pull/7) +- Updated git url. [`#6`](https://github.com/form-data/form-data/pull/6) +- Version bump. [`#5`](https://github.com/form-data/form-data/pull/5) +- Changes to support custom content-type and getLengthSync. [`#4`](https://github.com/form-data/form-data/pull/4) +- make .submit(url) use host from url, not 'localhost' [`#2`](https://github.com/form-data/form-data/pull/2) +- Make package.json JSON [`#1`](https://github.com/form-data/form-data/pull/1) + +### Fixed + +- Add MIT license [`#14`](https://github.com/form-data/form-data/issues/14) + +### Commits + +- Spring cleaning. [`850ba1b`](https://github.com/form-data/form-data/commit/850ba1b649b6856b0fa87bbcb04bc70ece0137a6) +- Added custom request params to form.submit(). Made tests more stable. [`de3502f`](https://github.com/form-data/form-data/commit/de3502f6c4a509f6ed12a7dd9dc2ce9c2e0a8d23) +- Basic form (no files) working [`6ffdc34`](https://github.com/form-data/form-data/commit/6ffdc343e8594cfc2efe1e27653ea39d8980a14e) +- Got initial test to pass [`9a59d08`](https://github.com/form-data/form-data/commit/9a59d08c024479fd3c9d99ba2f0893a47b3980f0) +- Implement initial getLength [`9060c91`](https://github.com/form-data/form-data/commit/9060c91b861a6573b73beddd11e866db422b5830) +- Make getLength work with file streams [`6f6b1e9`](https://github.com/form-data/form-data/commit/6f6b1e9b65951e6314167db33b446351702f5558) +- Implemented a simplistic submit() function [`41e9cc1`](https://github.com/form-data/form-data/commit/41e9cc124124721e53bc1d1459d45db1410c44e6) +- added test for custom headers and content-length in parts (felixge/node-form-data/17) [`b16d14e`](https://github.com/form-data/form-data/commit/b16d14e693670f5d52babec32cdedd1aa07c1aa4) +- Fixed code styling. [`5847424`](https://github.com/form-data/form-data/commit/5847424c666970fc2060acd619e8a78678888a82) +- #29 Added custom filename and content-type options to support identity-less streams. [`adf8b4a`](https://github.com/form-data/form-data/commit/adf8b4a41530795682cd3e35ffaf26b30288ccda) +- Initial Readme and package.json [`8c744e5`](https://github.com/form-data/form-data/commit/8c744e58be4014bdf432e11b718ed87f03e217af) +- allow append() to completely override header and boundary [`3fb2ad4`](https://github.com/form-data/form-data/commit/3fb2ad491f66e4b4ff16130be25b462820b8c972) +- Syntax highlighting [`ab3a6a5`](https://github.com/form-data/form-data/commit/ab3a6a5ed1ab77a2943ce3befcb2bb3cd9ff0330) +- Updated Readme.md [`de8f441`](https://github.com/form-data/form-data/commit/de8f44122ca754cbfedc0d2748e84add5ff0b669) +- Added examples to Readme file. [`c406ac9`](https://github.com/form-data/form-data/commit/c406ac921d299cbc130464ed19338a9ef97cb650) +- pass options.knownLength to set length at beginning, w/o waiting for async size calculation [`e2ac039`](https://github.com/form-data/form-data/commit/e2ac0397ff7c37c3dca74fa9925b55f832e4fa0b) +- Updated dependencies and added test command. [`09bd7cd`](https://github.com/form-data/form-data/commit/09bd7cd86f1ad7a58df1b135eb6eef0d290894b4) +- Bumped version. Updated readme. [`4581140`](https://github.com/form-data/form-data/commit/4581140f322758c6fc92019d342c7d7d6c94af5c) +- Test runner [`1707ebb`](https://github.com/form-data/form-data/commit/1707ebbd180856e6ed44e80c46b02557e2425762) +- Added .npmignore, bumped version. [`2e033e0`](https://github.com/form-data/form-data/commit/2e033e0e4be7c1457be090cd9b2996f19d8fb665) +- FormData.prototype.append takes and passes along options (for header) [`b519203`](https://github.com/form-data/form-data/commit/b51920387ed4da7b4e106fc07b9459f26b5ae2f0) +- Make package.json JSON [`bf1b58d`](https://github.com/form-data/form-data/commit/bf1b58df794b10fda86ed013eb9237b1e5032085) +- Add dependencies to package.json [`7413d0b`](https://github.com/form-data/form-data/commit/7413d0b4cf5546312d47ea426db8180619083974) +- Add convenient submit() interface [`55855e4`](https://github.com/form-data/form-data/commit/55855e4bea14585d4a3faf9e7318a56696adbc7d) +- Fix content type [`08b6ae3`](https://github.com/form-data/form-data/commit/08b6ae337b23ef1ba457ead72c9b133047df213c) +- Combatting travis rvm calls. [`409adfd`](https://github.com/form-data/form-data/commit/409adfd100a3cf4968a632c05ba58d92d262d144) +- Fixed Issue #2 [`b3a5d66`](https://github.com/form-data/form-data/commit/b3a5d661739dcd6921b444b81d5cb3c32fab655d) +- Fix for #10. [`bab70b9`](https://github.com/form-data/form-data/commit/bab70b9e803e17287632762073d227d6c59989e0) +- Trying workarounds for formidable - 0.6 "love". [`25782a3`](https://github.com/form-data/form-data/commit/25782a3f183d9c30668ec2bca6247ed83f10611c) +- change whitespace to conform with felixge's style guide [`9fa34f4`](https://github.com/form-data/form-data/commit/9fa34f433bece85ef73086a874c6f0164ab7f1f6) +- Add async to deps [`b7d1a6b`](https://github.com/form-data/form-data/commit/b7d1a6b10ee74be831de24ed76843e5a6935f155) +- typo [`7860a9c`](https://github.com/form-data/form-data/commit/7860a9c8a582f0745ce0e4a0549f4bffc29c0b50) +- Bumped version. [`fa36c1b`](https://github.com/form-data/form-data/commit/fa36c1b4229c34b85d7efd41908429b6d1da3bfc) +- Updated .gitignore [`de567bd`](https://github.com/form-data/form-data/commit/de567bde620e53b8e9b0ed3506e79491525ec558) +- Don't rely on resume() being called by pipe [`1deae47`](https://github.com/form-data/form-data/commit/1deae47e042bcd170bd5dbe2b4a4fa5356bb8aa2) +- One more wrong content type [`28f166d`](https://github.com/form-data/form-data/commit/28f166d443e2eb77f2559324014670674b97e46e) +- Another typo [`b959b6a`](https://github.com/form-data/form-data/commit/b959b6a2be061cac17f8d329b89cea109f0f32be) +- Typo [`698fa0a`](https://github.com/form-data/form-data/commit/698fa0aa5dbf4eeb77377415acc202a6fbe3f4a2) +- Being simply dumb. [`b614db8`](https://github.com/form-data/form-data/commit/b614db85702061149fbd98418605106975e72ade) +- Fixed typo in the filename. [`30af6be`](https://github.com/form-data/form-data/commit/30af6be13fb0c9e92b32e935317680b9d7599928) diff --git a/node_modules/form-data/License b/node_modules/form-data/License new file mode 100644 index 0000000..c7ff12a --- /dev/null +++ b/node_modules/form-data/License @@ -0,0 +1,19 @@ +Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/node_modules/form-data/README.md b/node_modules/form-data/README.md new file mode 100644 index 0000000..55afcad --- /dev/null +++ b/node_modules/form-data/README.md @@ -0,0 +1,355 @@ +# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) + +A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. + +The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface + +[![Linux Build](https://img.shields.io/travis/form-data/form-data/v4.0.4.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v4.0.4.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/travis/form-data/form-data/v4.0.4.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data) + +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v4.0.4.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) + +## Install + +``` +npm install --save form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +var FormData = require('form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +Also you can use http-response stream: + +``` javascript +var FormData = require('form-data'); +var http = require('http'); + +var form = new FormData(); + +http.request('http://nodejs.org/images/logo.png', function (response) { + form.append('my_field', 'my value'); + form.append('my_buffer', new Buffer(10)); + form.append('my_logo', response); +}); +``` + +Or @mikeal's [request](https://github.com/request/request) stream: + +``` javascript +var FormData = require('form-data'); +var request = require('request'); + +var form = new FormData(); + +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_logo', request('http://nodejs.org/images/logo.png')); +``` + +In order to submit this form to a web application, call ```submit(url, [callback])``` method: + +``` javascript +form.submit('http://example.org/', function (err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +}); + +``` + +For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. + +### Custom options + +You can provide custom options, such as `maxDataSize`: + +``` javascript +var FormData = require('form-data'); + +var form = new FormData({ maxDataSize: 20971520 }); +form.append('my_field', 'my value'); +form.append('my_buffer', /* something big */); +``` + +List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) + +### Alternative submission methods + +You can use node's http client interface: + +``` javascript +var http = require('http'); + +var request = http.request({ + method: 'post', + host: 'example.org', + path: '/upload', + headers: form.getHeaders() +}); + +form.pipe(request); + +request.on('response', function (res) { + console.log(res.statusCode); +}); +``` + +Or if you would prefer the `'Content-Length'` header to be set for you: + +``` javascript +form.submit('example.org/upload', function (err, res) { + console.log(res.statusCode); +}); +``` + +To use custom headers and pre-known length in parts: + +``` javascript +var CRLF = '\r\n'; +var form = new FormData(); + +var options = { + header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, + knownLength: 1 +}; + +form.append('my_buffer', buffer, options); + +form.submit('http://example.com/', function (err, res) { + if (err) throw err; + console.log('Done'); +}); +``` + +Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: + +``` javascript +someModule.stream(function (err, stdout, stderr) { + if (err) throw err; + + var form = new FormData(); + + form.append('file', stdout, { + filename: 'unicycle.jpg', // ... or: + filepath: 'photos/toys/unicycle.jpg', + contentType: 'image/jpeg', + knownLength: 19806 + }); + + form.submit('http://example.com/', function (err, res) { + if (err) throw err; + console.log('Done'); + }); +}); +``` + +The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). + +For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: + +``` javascript +form.submit({ + host: 'example.com', + path: '/probably.php?extra=params', + auth: 'username:password' +}, function (err, res) { + console.log(res.statusCode); +}); +``` + +In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: + +``` javascript +form.submit({ + host: 'example.com', + path: '/surelynot.php', + headers: { 'x-test-header': 'test-header-value' } +}, function (err, res) { + console.log(res.statusCode); +}); +``` + +### Methods + +- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). +- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) +- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) +- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary) +- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) +- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) +- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) +- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength) +- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-) +- [_String_ toString()](https://github.com/form-data/form-data#string-tostring) + +#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] ) +Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user. +```javascript +var form = new FormData(); +form.append('my_string', 'my value'); +form.append('my_integer', 1); +form.append('my_boolean', true); +form.append('my_buffer', new Buffer(10)); +form.append('my_array_as_json', JSON.stringify(['bird', 'cute'])); +``` + +You may provide a string for options, or an object. +```javascript +// Set filename by providing a string for options +form.append('my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg'); + +// provide an object. +form.append('my_file', fs.createReadStream('/foo/bar.jpg'), { filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806 }); +``` + +#### _Headers_ getHeaders( [**Headers** _userHeaders_] ) +This method adds the correct `content-type` header to the provided array of `userHeaders`. + +#### _String_ getBoundary() +Return the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers +for example: +```javascript +--------------------------515890814546601021194782 +``` + +#### _Void_ setBoundary(String _boundary_) +Set the boundary string, overriding the default behavior described above. + +_Note: The boundary must be unique and may not appear in the data._ + +#### _Buffer_ getBuffer() +Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data. +```javascript +var form = new FormData(); +form.append('my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73])); +form.append('my_file', fs.readFileSync('/foo/bar.jpg')); + +axios.post('https://example.com/path/to/api', form.getBuffer(), form.getHeaders()); +``` +**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error. + +#### _Integer_ getLengthSync() +Same as `getLength` but synchronous. + +_Note: getLengthSync __doesn't__ calculate streams length._ + +#### _Integer_ getLength(**function** _callback_ ) +Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated +```javascript +this.getLength(function (err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + ... +}.bind(this)); +``` + +#### _Boolean_ hasKnownLength() +Checks if the length of added values is known. + +#### _Request_ submit(_params_, **function** _callback_ ) +Submit the form to a web application. +```javascript +var form = new FormData(); +form.append('my_string', 'Hello World'); + +form.submit('http://example.com/', function (err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +} ); +``` + +#### _String_ toString() +Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead. + +### Integration with other libraries + +#### Request + +Form submission using [request](https://github.com/request/request): + +```javascript +var formData = { + my_field: 'my_value', + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), +}; + +request.post({url:'http://service.com/upload', formData: formData}, function (err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). + +#### node-fetch + +You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function (res) { + return res.json(); + }).then(function (json) { + console.log(json); + }); +``` + +#### axios + +In Node.js you can post a file using [axios](https://github.com/axios/axios): +```javascript +const form = new FormData(); +const stream = fs.createReadStream(PATH_TO_FILE); + +form.append('image', stream); + +// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders` +const formHeaders = form.getHeaders(); + +axios.post('http://example.com', form, { + headers: { + ...formHeaders, + }, +}) + .then(response => response) + .catch(error => error) +``` + +## Notes + +- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```). +- ```submit``` will not add `content-length` if form length is unknown or not calculable. +- Starting version `2.x` FormData has dropped support for `node@0.10.x`. +- Starting version `3.x` FormData has dropped support for `node@4.x`. + +## License + +Form-Data is released under the [MIT](License) license. diff --git a/node_modules/form-data/index.d.ts b/node_modules/form-data/index.d.ts new file mode 100644 index 0000000..295e9e9 --- /dev/null +++ b/node_modules/form-data/index.d.ts @@ -0,0 +1,62 @@ +// Definitions by: Carlos Ballesteros Velasco +// Leon Yu +// BendingBender +// Maple Miao + +/// +import * as stream from 'stream'; +import * as http from 'http'; + +export = FormData; + +// Extracted because @types/node doesn't export interfaces. +interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + read?(this: stream.Readable, size: number): void; + destroy?(this: stream.Readable, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean; +} + +interface Options extends ReadableOptions { + writable?: boolean; + readable?: boolean; + dataSize?: number; + maxDataSize?: number; + pauseStreams?: boolean; +} + +declare class FormData extends stream.Readable { + constructor(options?: Options); + append(key: string, value: any, options?: FormData.AppendOptions | string): void; + getHeaders(userHeaders?: FormData.Headers): FormData.Headers; + submit( + params: string | FormData.SubmitOptions, + callback?: (error: Error | null, response: http.IncomingMessage) => void + ): http.ClientRequest; + getBuffer(): Buffer; + setBoundary(boundary: string): void; + getBoundary(): string; + getLength(callback: (err: Error | null, length: number) => void): void; + getLengthSync(): number; + hasKnownLength(): boolean; +} + +declare namespace FormData { + interface Headers { + [key: string]: any; + } + + interface AppendOptions { + header?: string | Headers; + knownLength?: number; + filename?: string; + filepath?: string; + contentType?: string; + } + + interface SubmitOptions extends http.RequestOptions { + protocol?: 'https:' | 'http:'; + } +} diff --git a/node_modules/form-data/lib/browser.js b/node_modules/form-data/lib/browser.js new file mode 100644 index 0000000..8950a91 --- /dev/null +++ b/node_modules/form-data/lib/browser.js @@ -0,0 +1,4 @@ +'use strict'; + +/* eslint-env browser */ +module.exports = typeof self === 'object' ? self.FormData : window.FormData; diff --git a/node_modules/form-data/lib/form_data.js b/node_modules/form-data/lib/form_data.js new file mode 100644 index 0000000..8f5f4b5 --- /dev/null +++ b/node_modules/form-data/lib/form_data.js @@ -0,0 +1,494 @@ +'use strict'; + +var CombinedStream = require('combined-stream'); +var util = require('util'); +var path = require('path'); +var http = require('http'); +var https = require('https'); +var parseUrl = require('url').parse; +var fs = require('fs'); +var Stream = require('stream').Stream; +var crypto = require('crypto'); +var mime = require('mime-types'); +var asynckit = require('asynckit'); +var setToStringTag = require('es-set-tostringtag'); +var hasOwn = require('hasown'); +var populate = require('./populate.js'); + +/** + * Create readable "multipart/form-data" streams. + * Can be used to submit forms + * and file uploads to other web applications. + * + * @constructor + * @param {object} options - Properties to be added/overriden for FormData and CombinedStream + */ +function FormData(options) { + if (!(this instanceof FormData)) { + return new FormData(options); + } + + this._overheadLength = 0; + this._valueLength = 0; + this._valuesToMeasure = []; + + CombinedStream.call(this); + + options = options || {}; // eslint-disable-line no-param-reassign + for (var option in options) { // eslint-disable-line no-restricted-syntax + this[option] = options[option]; + } +} + +// make it a Stream +util.inherits(FormData, CombinedStream); + +FormData.LINE_BREAK = '\r\n'; +FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; + +FormData.prototype.append = function (field, value, options) { + options = options || {}; // eslint-disable-line no-param-reassign + + // allow filename as single option + if (typeof options === 'string') { + options = { filename: options }; // eslint-disable-line no-param-reassign + } + + var append = CombinedStream.prototype.append.bind(this); + + // all that streamy business can't handle numbers + if (typeof value === 'number' || value == null) { + value = String(value); // eslint-disable-line no-param-reassign + } + + // https://github.com/felixge/node-form-data/issues/38 + if (Array.isArray(value)) { + /* + * Please convert your array into string + * the way web server expects it + */ + this._error(new Error('Arrays are not supported.')); + return; + } + + var header = this._multiPartHeader(field, value, options); + var footer = this._multiPartFooter(); + + append(header); + append(value); + append(footer); + + // pass along options.knownLength + this._trackLength(header, value, options); +}; + +FormData.prototype._trackLength = function (header, value, options) { + var valueLength = 0; + + /* + * used w/ getLengthSync(), when length is known. + * e.g. for streaming directly from a remote server, + * w/ a known file a size, and not wanting to wait for + * incoming file to finish to get its size. + */ + if (options.knownLength != null) { + valueLength += Number(options.knownLength); + } else if (Buffer.isBuffer(value)) { + valueLength = value.length; + } else if (typeof value === 'string') { + valueLength = Buffer.byteLength(value); + } + + this._valueLength += valueLength; + + // @check why add CRLF? does this account for custom/multiple CRLFs? + this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length; + + // empty or either doesn't have path or not an http response or not a stream + if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) { + return; + } + + // no need to bother with the length + if (!options.knownLength) { + this._valuesToMeasure.push(value); + } +}; + +FormData.prototype._lengthRetriever = function (value, callback) { + if (hasOwn(value, 'fd')) { + // take read range into a account + // `end` = Infinity –> read file till the end + // + // TODO: Looks like there is bug in Node fs.createReadStream + // it doesn't respect `end` options without `start` options + // Fix it when node fixes it. + // https://github.com/joyent/node/issues/7819 + if (value.end != undefined && value.end != Infinity && value.start != undefined) { + // when end specified + // no need to calculate range + // inclusive, starts with 0 + callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return + + // not that fast snoopy + } else { + // still need to fetch file size from fs + fs.stat(value.path, function (err, stat) { + if (err) { + callback(err); + return; + } + + // update final size based on the range options + var fileSize = stat.size - (value.start ? value.start : 0); + callback(null, fileSize); + }); + } + + // or http response + } else if (hasOwn(value, 'httpVersion')) { + callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return + + // or request stream http://github.com/mikeal/request + } else if (hasOwn(value, 'httpModule')) { + // wait till response come back + value.on('response', function (response) { + value.pause(); + callback(null, Number(response.headers['content-length'])); + }); + value.resume(); + + // something else + } else { + callback('Unknown stream'); // eslint-disable-line callback-return + } +}; + +FormData.prototype._multiPartHeader = function (field, value, options) { + /* + * custom header specified (as string)? + * it becomes responsible for boundary + * (e.g. to handle extra CRLFs on .NET servers) + */ + if (typeof options.header === 'string') { + return options.header; + } + + var contentDisposition = this._getContentDisposition(value, options); + var contentType = this._getContentType(value, options); + + var contents = ''; + var headers = { + // add custom disposition as third element or keep it two elements if not + 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), + // if no content type. allow it to be empty array + 'Content-Type': [].concat(contentType || []) + }; + + // allow custom headers. + if (typeof options.header === 'object') { + populate(headers, options.header); + } + + var header; + for (var prop in headers) { // eslint-disable-line no-restricted-syntax + if (hasOwn(headers, prop)) { + header = headers[prop]; + + // skip nullish headers. + if (header == null) { + continue; // eslint-disable-line no-restricted-syntax, no-continue + } + + // convert all headers to arrays. + if (!Array.isArray(header)) { + header = [header]; + } + + // add non-empty headers. + if (header.length) { + contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; + } + } + } + + return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; +}; + +FormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return + var filename; + + if (typeof options.filepath === 'string') { + // custom filepath for relative paths + filename = path.normalize(options.filepath).replace(/\\/g, '/'); + } else if (options.filename || (value && (value.name || value.path))) { + /* + * custom filename take precedence + * formidable and the browser add a name property + * fs- and request- streams have path property + */ + filename = path.basename(options.filename || (value && (value.name || value.path))); + } else if (value && value.readable && hasOwn(value, 'httpVersion')) { + // or try http response + filename = path.basename(value.client._httpMessage.path || ''); + } + + if (filename) { + return 'filename="' + filename + '"'; + } +}; + +FormData.prototype._getContentType = function (value, options) { + // use custom content-type above all + var contentType = options.contentType; + + // or try `name` from formidable, browser + if (!contentType && value && value.name) { + contentType = mime.lookup(value.name); + } + + // or try `path` from fs-, request- streams + if (!contentType && value && value.path) { + contentType = mime.lookup(value.path); + } + + // or if it's http-reponse + if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) { + contentType = value.headers['content-type']; + } + + // or guess it from the filepath or filename + if (!contentType && (options.filepath || options.filename)) { + contentType = mime.lookup(options.filepath || options.filename); + } + + // fallback to the default content type if `value` is not simple value + if (!contentType && value && typeof value === 'object') { + contentType = FormData.DEFAULT_CONTENT_TYPE; + } + + return contentType; +}; + +FormData.prototype._multiPartFooter = function () { + return function (next) { + var footer = FormData.LINE_BREAK; + + var lastPart = this._streams.length === 0; + if (lastPart) { + footer += this._lastBoundary(); + } + + next(footer); + }.bind(this); +}; + +FormData.prototype._lastBoundary = function () { + return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; +}; + +FormData.prototype.getHeaders = function (userHeaders) { + var header; + var formHeaders = { + 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + }; + + for (header in userHeaders) { // eslint-disable-line no-restricted-syntax + if (hasOwn(userHeaders, header)) { + formHeaders[header.toLowerCase()] = userHeaders[header]; + } + } + + return formHeaders; +}; + +FormData.prototype.setBoundary = function (boundary) { + if (typeof boundary !== 'string') { + throw new TypeError('FormData boundary must be a string'); + } + this._boundary = boundary; +}; + +FormData.prototype.getBoundary = function () { + if (!this._boundary) { + this._generateBoundary(); + } + + return this._boundary; +}; + +FormData.prototype.getBuffer = function () { + var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap + var boundary = this.getBoundary(); + + // Create the form content. Add Line breaks to the end of data. + for (var i = 0, len = this._streams.length; i < len; i++) { + if (typeof this._streams[i] !== 'function') { + // Add content to the buffer. + if (Buffer.isBuffer(this._streams[i])) { + dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]); + } else { + dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]); + } + + // Add break after content. + if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) { + dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]); + } + } + } + + // Add the footer and return the Buffer object. + return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]); +}; + +FormData.prototype._generateBoundary = function () { + // This generates a 50 character boundary similar to those used by Firefox. + + // They are optimized for boyer-moore parsing. + this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex'); +}; + +// Note: getLengthSync DOESN'T calculate streams length +// As workaround one can calculate file size manually and add it as knownLength option +FormData.prototype.getLengthSync = function () { + var knownLength = this._overheadLength + this._valueLength; + + // Don't get confused, there are 3 "internal" streams for each keyval pair so it basically checks if there is any value added to the form + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + // https://github.com/form-data/form-data/issues/40 + if (!this.hasKnownLength()) { + /* + * Some async length retrievers are present + * therefore synchronous length calculation is false. + * Please use getLength(callback) to get proper length + */ + this._error(new Error('Cannot calculate proper length in synchronous way.')); + } + + return knownLength; +}; + +// Public API to check if length of added values is known +// https://github.com/form-data/form-data/issues/196 +// https://github.com/form-data/form-data/issues/262 +FormData.prototype.hasKnownLength = function () { + var hasKnownLength = true; + + if (this._valuesToMeasure.length) { + hasKnownLength = false; + } + + return hasKnownLength; +}; + +FormData.prototype.getLength = function (cb) { + var knownLength = this._overheadLength + this._valueLength; + + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + if (!this._valuesToMeasure.length) { + process.nextTick(cb.bind(this, null, knownLength)); + return; + } + + asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) { + if (err) { + cb(err); + return; + } + + values.forEach(function (length) { + knownLength += length; + }); + + cb(null, knownLength); + }); +}; + +FormData.prototype.submit = function (params, cb) { + var request; + var options; + var defaults = { method: 'post' }; + + // parse provided url if it's string or treat it as options object + if (typeof params === 'string') { + params = parseUrl(params); // eslint-disable-line no-param-reassign + /* eslint sort-keys: 0 */ + options = populate({ + port: params.port, + path: params.pathname, + host: params.hostname, + protocol: params.protocol + }, defaults); + } else { // use custom params + options = populate(params, defaults); + // if no port provided use default one + if (!options.port) { + options.port = options.protocol === 'https:' ? 443 : 80; + } + } + + // put that good code in getHeaders to some use + options.headers = this.getHeaders(params.headers); + + // https if specified, fallback to http in any other case + if (options.protocol === 'https:') { + request = https.request(options); + } else { + request = http.request(options); + } + + // get content length and fire away + this.getLength(function (err, length) { + if (err && err !== 'Unknown stream') { + this._error(err); + return; + } + + // add content length + if (length) { + request.setHeader('Content-Length', length); + } + + this.pipe(request); + if (cb) { + var onResponse; + + var callback = function (error, responce) { + request.removeListener('error', callback); + request.removeListener('response', onResponse); + + return cb.call(this, error, responce); // eslint-disable-line no-invalid-this + }; + + onResponse = callback.bind(this, null); + + request.on('error', callback); + request.on('response', onResponse); + } + }.bind(this)); + + return request; +}; + +FormData.prototype._error = function (err) { + if (!this.error) { + this.error = err; + this.pause(); + this.emit('error', err); + } +}; + +FormData.prototype.toString = function () { + return '[object FormData]'; +}; +setToStringTag(FormData, 'FormData'); + +// Public API +module.exports = FormData; diff --git a/node_modules/form-data/lib/populate.js b/node_modules/form-data/lib/populate.js new file mode 100644 index 0000000..55ac3bb --- /dev/null +++ b/node_modules/form-data/lib/populate.js @@ -0,0 +1,10 @@ +'use strict'; + +// populates missing values +module.exports = function (dst, src) { + Object.keys(src).forEach(function (prop) { + dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign + }); + + return dst; +}; diff --git a/node_modules/form-data/package.json b/node_modules/form-data/package.json new file mode 100644 index 0000000..e8d1e7d --- /dev/null +++ b/node_modules/form-data/package.json @@ -0,0 +1,82 @@ +{ + "author": "Felix Geisendörfer (http://debuggable.com/)", + "name": "form-data", + "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", + "version": "4.0.4", + "repository": { + "type": "git", + "url": "git://github.com/form-data/form-data.git" + }, + "main": "./lib/form_data", + "browser": "./lib/browser", + "typings": "./index.d.ts", + "scripts": { + "pretest": "npm run lint", + "pretests-only": "rimraf coverage test/tmp", + "tests-only": "istanbul cover test/run.js", + "posttests-only": "istanbul report lcov text", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "lint": "eslint --ext=js,mjs .", + "report": "istanbul report lcov text", + "ci-lint": "is-node-modern 8 && npm run lint || is-node-not-modern 8", + "ci-test": "npm run tests-only && npm run browser && npm run report", + "predebug": "rimraf coverage test/tmp", + "debug": "verbose=1 ./test/run.js", + "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", + "check": "istanbul check-coverage coverage/coverage*.json", + "files": "pkgfiles --sort=name", + "get-version": "node -e \"console.log(require('./package.json').version)\"", + "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md", + "postupdate-readme": "mv README.md.bak READ.ME.md.bak", + "restore-readme": "mv READ.ME.md.bak README.md", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepack": "npm run update-readme", + "postpack": "npm run restore-readme", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "engines": { + "node": ">= 6" + }, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.2.0", + "auto-changelog": "^2.5.0", + "browserify": "^13.3.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^3.1.1", + "cross-spawn": "^6.0.6", + "eslint": "=8.8.0", + "fake": "^0.2.2", + "far": "^0.0.7", + "formidable": "^1.2.6", + "in-publish": "^2.0.1", + "is-node-modern": "^1.0.0", + "istanbul": "^0.4.5", + "obake": "^0.1.2", + "pkgfiles": "^2.3.2", + "pre-commit": "^1.2.2", + "predict-v8-randomness": "^1.0.35", + "puppeteer": "^1.20.0", + "request": "~2.87.0", + "rimraf": "^2.7.1", + "semver": "^6.3.1", + "tape": "^5.9.0" + }, + "license": "MIT", + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + } +} diff --git a/node_modules/function-bind/.eslintrc b/node_modules/function-bind/.eslintrc new file mode 100644 index 0000000..71a054f --- /dev/null +++ b/node_modules/function-bind/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "indent": [2, 4], + "no-new-func": [1], + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "max-lines-per-function": 0, + "strict": [0] + }, + }, + ], +} diff --git a/node_modules/function-bind/.github/FUNDING.yml b/node_modules/function-bind/.github/FUNDING.yml new file mode 100644 index 0000000..7448219 --- /dev/null +++ b/node_modules/function-bind/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/function-bind +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/function-bind/.github/SECURITY.md b/node_modules/function-bind/.github/SECURITY.md new file mode 100644 index 0000000..82e4285 --- /dev/null +++ b/node_modules/function-bind/.github/SECURITY.md @@ -0,0 +1,3 @@ +# Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. diff --git a/node_modules/function-bind/.nycrc b/node_modules/function-bind/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/function-bind/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/function-bind/CHANGELOG.md b/node_modules/function-bind/CHANGELOG.md new file mode 100644 index 0000000..f9e6cc0 --- /dev/null +++ b/node_modules/function-bind/CHANGELOG.md @@ -0,0 +1,136 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.2](https://github.com/ljharb/function-bind/compare/v1.1.1...v1.1.2) - 2023-10-12 + +### Merged + +- Point to the correct file [`#16`](https://github.com/ljharb/function-bind/pull/16) + +### Commits + +- [Tests] migrate tests to Github Actions [`4f8b57c`](https://github.com/ljharb/function-bind/commit/4f8b57c02f2011fe9ae353d5e74e8745f0988af8) +- [Tests] remove `jscs` [`90eb2ed`](https://github.com/ljharb/function-bind/commit/90eb2edbeefd5b76cd6c3a482ea3454db169b31f) +- [meta] update `.gitignore` [`53fcdc3`](https://github.com/ljharb/function-bind/commit/53fcdc371cd66634d6e9b71c836a50f437e89fed) +- [Tests] up to `node` `v11.10`, `v10.15`, `v9.11`, `v8.15`, `v6.16`, `v4.9`; use `nvm install-latest-npm`; run audit script in tests [`1fe8f6e`](https://github.com/ljharb/function-bind/commit/1fe8f6e9aed0dfa8d8b3cdbd00c7f5ea0cd2b36e) +- [meta] add `auto-changelog` [`1921fcb`](https://github.com/ljharb/function-bind/commit/1921fcb5b416b63ffc4acad051b6aad5722f777d) +- [Robustness] remove runtime dependency on all builtins except `.apply` [`f743e61`](https://github.com/ljharb/function-bind/commit/f743e61aa6bb2360358c04d4884c9db853d118b7) +- Docs: enable badges; update wording [`503cb12`](https://github.com/ljharb/function-bind/commit/503cb12d998b5f91822776c73332c7adcd6355dd) +- [readme] update badges [`290c5db`](https://github.com/ljharb/function-bind/commit/290c5dbbbda7264efaeb886552a374b869a4bb48) +- [Tests] switch to nyc for coverage [`ea360ba`](https://github.com/ljharb/function-bind/commit/ea360ba907fc2601ed18d01a3827fa2d3533cdf8) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`cae5e9e`](https://github.com/ljharb/function-bind/commit/cae5e9e07a5578dc6df26c03ee22851ce05b943c) +- [meta] add `funding` field; create FUNDING.yml [`c9f4274`](https://github.com/ljharb/function-bind/commit/c9f4274aa80ea3aae9657a3938fdba41a3b04ca6) +- [Tests] fix eslint errors from #15 [`f69aaa2`](https://github.com/ljharb/function-bind/commit/f69aaa2beb2fdab4415bfb885760a699d0b9c964) +- [actions] fix permissions [`99a0cd9`](https://github.com/ljharb/function-bind/commit/99a0cd9f3b5bac223a0d572f081834cd73314be7) +- [meta] use `npmignore` to autogenerate an npmignore file [`f03b524`](https://github.com/ljharb/function-bind/commit/f03b524ca91f75a109a5d062f029122c86ecd1ae) +- [Dev Deps] update `@ljharb/eslint‑config`, `eslint`, `tape` [`7af9300`](https://github.com/ljharb/function-bind/commit/7af930023ae2ce7645489532821e4fbbcd7a2280) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`64a9127`](https://github.com/ljharb/function-bind/commit/64a9127ab0bd331b93d6572eaf6e9971967fc08c) +- [Tests] use `aud` instead of `npm audit` [`e75069c`](https://github.com/ljharb/function-bind/commit/e75069c50010a8fcce2a9ce2324934c35fdb4386) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`d03555c`](https://github.com/ljharb/function-bind/commit/d03555ca59dea3b71ce710045e4303b9e2619e28) +- [meta] add `safe-publish-latest` [`9c8f809`](https://github.com/ljharb/function-bind/commit/9c8f8092aed027d7e80c94f517aa892385b64f09) +- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`baf6893`](https://github.com/ljharb/function-bind/commit/baf6893e27f5b59abe88bc1995e6f6ed1e527397) +- [meta] create SECURITY.md [`4db1779`](https://github.com/ljharb/function-bind/commit/4db17799f1f28ae294cb95e0081ca2b591c3911b) +- [Tests] add `npm run audit` [`c8b38ec`](https://github.com/ljharb/function-bind/commit/c8b38ec40ed3f85dabdee40ed4148f1748375bc2) +- Revert "Point to the correct file" [`05cdf0f`](https://github.com/ljharb/function-bind/commit/05cdf0fa205c6a3c5ba40bbedd1dfa9874f915c9) + +## [v1.1.1](https://github.com/ljharb/function-bind/compare/v1.1.0...v1.1.1) - 2017-08-28 + +### Commits + +- [Tests] up to `node` `v8`; newer npm breaks on older node; fix scripts [`817f7d2`](https://github.com/ljharb/function-bind/commit/817f7d28470fdbff8ef608d4d565dd4d1430bc5e) +- [Dev Deps] update `eslint`, `jscs`, `tape`, `@ljharb/eslint-config` [`854288b`](https://github.com/ljharb/function-bind/commit/854288b1b6f5c555f89aceb9eff1152510262084) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`83e639f`](https://github.com/ljharb/function-bind/commit/83e639ff74e6cd6921285bccec22c1bcf72311bd) +- Only apps should have lockfiles [`5ed97f5`](https://github.com/ljharb/function-bind/commit/5ed97f51235c17774e0832e122abda0f3229c908) +- Use a SPDX-compliant “license” field. [`5feefea`](https://github.com/ljharb/function-bind/commit/5feefea0dc0193993e83e5df01ded424403a5381) + +## [v1.1.0](https://github.com/ljharb/function-bind/compare/v1.0.2...v1.1.0) - 2016-02-14 + +### Commits + +- Update `eslint`, `tape`; use my personal shared `eslint` config [`9c9062a`](https://github.com/ljharb/function-bind/commit/9c9062abbe9dd70b59ea2c3a3c3a81f29b457097) +- Add `npm run eslint` [`dd96c56`](https://github.com/ljharb/function-bind/commit/dd96c56720034a3c1ffee10b8a59a6f7c53e24ad) +- [New] return the native `bind` when available. [`82186e0`](https://github.com/ljharb/function-bind/commit/82186e03d73e580f95ff167e03f3582bed90ed72) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`a3dd767`](https://github.com/ljharb/function-bind/commit/a3dd76720c795cb7f4586b0544efabf8aa107b8b) +- Update `eslint` [`3dae2f7`](https://github.com/ljharb/function-bind/commit/3dae2f7423de30a2d20313ddb1edc19660142fe9) +- Update `tape`, `covert`, `jscs` [`a181eee`](https://github.com/ljharb/function-bind/commit/a181eee0cfa24eb229c6e843a971f36e060a2f6a) +- [Tests] up to `node` `v5.6`, `v4.3` [`964929a`](https://github.com/ljharb/function-bind/commit/964929a6a4ddb36fb128de2bcc20af5e4f22e1ed) +- Test up to `io.js` `v2.1` [`2be7310`](https://github.com/ljharb/function-bind/commit/2be7310f2f74886a7124ca925be411117d41d5ea) +- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`45f3d68`](https://github.com/ljharb/function-bind/commit/45f3d6865c6ca93726abcef54febe009087af101) +- [Dev Deps] update `tape`, `jscs` [`6e1340d`](https://github.com/ljharb/function-bind/commit/6e1340d94642deaecad3e717825db641af4f8b1f) +- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`d9bad2b`](https://github.com/ljharb/function-bind/commit/d9bad2b778b1b3a6dd2876087b88b3acf319f8cc) +- Update `eslint` [`935590c`](https://github.com/ljharb/function-bind/commit/935590caa024ab356102e4858e8fc315b2ccc446) +- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`8c9a1ef`](https://github.com/ljharb/function-bind/commit/8c9a1efd848e5167887aa8501857a0940a480c57) +- Test on `io.js` `v2.2` [`9a3a38c`](https://github.com/ljharb/function-bind/commit/9a3a38c92013aed6e108666e7bd40969b84ac86e) +- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`69afc26`](https://github.com/ljharb/function-bind/commit/69afc2617405b147dd2a8d8ae73ca9e9283f18b4) +- [Dev Deps] Update `tape`, `eslint` [`36c1be0`](https://github.com/ljharb/function-bind/commit/36c1be0ab12b45fe5df6b0fdb01a5d5137fd0115) +- Update `tape`, `jscs` [`98d8303`](https://github.com/ljharb/function-bind/commit/98d8303cd5ca1c6b8f985469f86b0d44d7d45f6e) +- Update `jscs` [`9633a4e`](https://github.com/ljharb/function-bind/commit/9633a4e9fbf82051c240855166e468ba8ba0846f) +- Update `tape`, `jscs` [`c80ef0f`](https://github.com/ljharb/function-bind/commit/c80ef0f46efc9791e76fa50de4414092ac147831) +- Test up to `io.js` `v3.0` [`7e2c853`](https://github.com/ljharb/function-bind/commit/7e2c8537d52ab9cf5a655755561d8917684c0df4) +- Test on `io.js` `v2.4` [`5a199a2`](https://github.com/ljharb/function-bind/commit/5a199a27ba46795ba5eaf0845d07d4b8232895c9) +- Test on `io.js` `v2.3` [`a511b88`](https://github.com/ljharb/function-bind/commit/a511b8896de0bddf3b56862daa416c701f4d0453) +- Fixing a typo from 822b4e1938db02dc9584aa434fd3a45cb20caf43 [`732d6b6`](https://github.com/ljharb/function-bind/commit/732d6b63a9b33b45230e630dbcac7a10855d3266) +- Update `jscs` [`da52a48`](https://github.com/ljharb/function-bind/commit/da52a4886c06d6490f46ae30b15e4163ba08905d) +- Lock covert to v1.0.0. [`d6150fd`](https://github.com/ljharb/function-bind/commit/d6150fda1e6f486718ebdeff823333d9e48e7430) + +## [v1.0.2](https://github.com/ljharb/function-bind/compare/v1.0.1...v1.0.2) - 2014-10-04 + +## [v1.0.1](https://github.com/ljharb/function-bind/compare/v1.0.0...v1.0.1) - 2014-10-03 + +### Merged + +- make CI build faster [`#3`](https://github.com/ljharb/function-bind/pull/3) + +### Commits + +- Using my standard jscs.json [`d8ee94c`](https://github.com/ljharb/function-bind/commit/d8ee94c993eff0a84cf5744fe6a29627f5cffa1a) +- Adding `npm run lint` [`7571ab7`](https://github.com/ljharb/function-bind/commit/7571ab7dfdbd99b25a1dbb2d232622bd6f4f9c10) +- Using consistent indentation [`e91a1b1`](https://github.com/ljharb/function-bind/commit/e91a1b13a61e99ec1e530e299b55508f74218a95) +- Updating jscs [`7e17892`](https://github.com/ljharb/function-bind/commit/7e1789284bc629bc9c1547a61c9b227bbd8c7a65) +- Using consistent quotes [`c50b57f`](https://github.com/ljharb/function-bind/commit/c50b57fcd1c5ec38320979c837006069ebe02b77) +- Adding keywords [`cb94631`](https://github.com/ljharb/function-bind/commit/cb946314eed35f21186a25fb42fc118772f9ee00) +- Directly export a function expression instead of using a declaration, and relying on hoisting. [`5a33c5f`](https://github.com/ljharb/function-bind/commit/5a33c5f45642de180e0d207110bf7d1843ceb87c) +- Naming npm URL and badge in README; use SVG [`2aef8fc`](https://github.com/ljharb/function-bind/commit/2aef8fcb79d54e63a58ae557c4e60949e05d5e16) +- Naming deps URLs in README [`04228d7`](https://github.com/ljharb/function-bind/commit/04228d766670ee45ca24e98345c1f6a7621065b5) +- Naming travis-ci URLs in README; using SVG [`62c810c`](https://github.com/ljharb/function-bind/commit/62c810c2f54ced956cd4d4ab7b793055addfe36e) +- Make sure functions are invoked correctly (also passing coverage tests) [`2b289b4`](https://github.com/ljharb/function-bind/commit/2b289b4dfbf037ffcfa4dc95eb540f6165e9e43a) +- Removing the strict mode pragmas; they make tests fail. [`1aa701d`](https://github.com/ljharb/function-bind/commit/1aa701d199ddc3782476e8f7eef82679be97b845) +- Adding myself as a contributor [`85fd57b`](https://github.com/ljharb/function-bind/commit/85fd57b0860e5a7af42de9a287f3f265fc6d72fc) +- Adding strict mode pragmas [`915b08e`](https://github.com/ljharb/function-bind/commit/915b08e084c86a722eafe7245e21db74aa21ca4c) +- Adding devDeps URLs to README [`4ccc731`](https://github.com/ljharb/function-bind/commit/4ccc73112c1769859e4ca3076caf4086b3cba2cd) +- Fixing the description. [`a7a472c`](https://github.com/ljharb/function-bind/commit/a7a472cf649af515c635cf560fc478fbe48999c8) +- Using a function expression instead of a function declaration. [`b5d3e4e`](https://github.com/ljharb/function-bind/commit/b5d3e4ea6aaffc63888953eeb1fbc7ff45f1fa14) +- Updating tape [`f086be6`](https://github.com/ljharb/function-bind/commit/f086be6029fb56dde61a258c1340600fa174d1e0) +- Updating jscs [`5f9bdb3`](https://github.com/ljharb/function-bind/commit/5f9bdb375ab13ba48f30852aab94029520c54d71) +- Updating jscs [`9b409ba`](https://github.com/ljharb/function-bind/commit/9b409ba6118e23395a4e5d83ef39152aab9d3bfc) +- Run coverage as part of tests. [`8e1b6d4`](https://github.com/ljharb/function-bind/commit/8e1b6d459f047d1bd4fee814e01247c984c80bd0) +- Run linter as part of tests [`c1ca83f`](https://github.com/ljharb/function-bind/commit/c1ca83f832df94587d09e621beba682fabfaa987) +- Updating covert [`701e837`](https://github.com/ljharb/function-bind/commit/701e83774b57b4d3ef631e1948143f43a72f4bb9) + +## [v1.0.0](https://github.com/ljharb/function-bind/compare/v0.2.0...v1.0.0) - 2014-08-09 + +### Commits + +- Make sure old and unstable nodes don't fail Travis [`27adca3`](https://github.com/ljharb/function-bind/commit/27adca34a4ab6ad67b6dfde43942a1b103ce4d75) +- Fixing an issue when the bound function is called as a constructor in ES3. [`e20122d`](https://github.com/ljharb/function-bind/commit/e20122d267d92ce553859b280cbbea5d27c07731) +- Adding `npm run coverage` [`a2e29c4`](https://github.com/ljharb/function-bind/commit/a2e29c4ecaef9e2f6cd1603e868c139073375502) +- Updating tape [`b741168`](https://github.com/ljharb/function-bind/commit/b741168b12b235b1717ff696087645526b69213c) +- Upgrading tape [`63631a0`](https://github.com/ljharb/function-bind/commit/63631a04c7fbe97cc2fa61829cc27246d6986f74) +- Updating tape [`363cb46`](https://github.com/ljharb/function-bind/commit/363cb46dafb23cb3e347729a22f9448051d78464) + +## v0.2.0 - 2014-03-23 + +### Commits + +- Updating test coverage to match es5-shim. [`aa94d44`](https://github.com/ljharb/function-bind/commit/aa94d44b8f9d7f69f10e060db7709aa7a694e5d4) +- initial [`942ee07`](https://github.com/ljharb/function-bind/commit/942ee07e94e542d91798137bc4b80b926137e066) +- Setting the bound function's length properly. [`079f46a`](https://github.com/ljharb/function-bind/commit/079f46a2d3515b7c0b308c2c13fceb641f97ca25) +- Ensuring that some older browsers will throw when given a regex. [`36ac55b`](https://github.com/ljharb/function-bind/commit/36ac55b87f460d4330253c92870aa26fbfe8227f) +- Removing npm scripts that don't have dependencies [`9d2be60`](https://github.com/ljharb/function-bind/commit/9d2be600002cb8bc8606f8f3585ad3e05868c750) +- Updating tape [`297a4ac`](https://github.com/ljharb/function-bind/commit/297a4acc5464db381940aafb194d1c88f4e678f3) +- Skipping length tests for now. [`d9891ea`](https://github.com/ljharb/function-bind/commit/d9891ea4d2aaffa69f408339cdd61ff740f70565) +- don't take my tea [`dccd930`](https://github.com/ljharb/function-bind/commit/dccd930bfd60ea10cb178d28c97550c3bc8c1e07) diff --git a/node_modules/function-bind/LICENSE b/node_modules/function-bind/LICENSE new file mode 100644 index 0000000..62d6d23 --- /dev/null +++ b/node_modules/function-bind/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/node_modules/function-bind/README.md b/node_modules/function-bind/README.md new file mode 100644 index 0000000..814c20b --- /dev/null +++ b/node_modules/function-bind/README.md @@ -0,0 +1,46 @@ +# function-bind [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] + +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Implementation of function.prototype.bind + +Old versions of phantomjs, Internet Explorer < 9, and node < 0.6 don't support `Function.prototype.bind`. + +## Example + +```js +Function.prototype.bind = require("function-bind") +``` + +## Installation + +`npm install function-bind` + +## Contributors + + - Raynos + +## MIT Licenced + +[package-url]: https://npmjs.org/package/function-bind +[npm-version-svg]: https://versionbadg.es/Raynos/function-bind.svg +[deps-svg]: https://david-dm.org/Raynos/function-bind.svg +[deps-url]: https://david-dm.org/Raynos/function-bind +[dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg +[dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/function-bind.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/function-bind.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/function-bind.svg +[downloads-url]: https://npm-stat.com/charts.html?package=function-bind +[codecov-image]: https://codecov.io/gh/Raynos/function-bind/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/Raynos/function-bind/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/Raynos/function-bind +[actions-url]: https://github.com/Raynos/function-bind/actions diff --git a/node_modules/function-bind/implementation.js b/node_modules/function-bind/implementation.js new file mode 100644 index 0000000..fd4384c --- /dev/null +++ b/node_modules/function-bind/implementation.js @@ -0,0 +1,84 @@ +'use strict'; + +/* eslint no-invalid-this: 1 */ + +var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; +var toStr = Object.prototype.toString; +var max = Math.max; +var funcType = '[object Function]'; + +var concatty = function concatty(a, b) { + var arr = []; + + for (var i = 0; i < a.length; i += 1) { + arr[i] = a[i]; + } + for (var j = 0; j < b.length; j += 1) { + arr[j + a.length] = b[j]; + } + + return arr; +}; + +var slicy = function slicy(arrLike, offset) { + var arr = []; + for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { + arr[j] = arrLike[i]; + } + return arr; +}; + +var joiny = function (arr, joiner) { + var str = ''; + for (var i = 0; i < arr.length; i += 1) { + str += arr[i]; + if (i + 1 < arr.length) { + str += joiner; + } + } + return str; +}; + +module.exports = function bind(that) { + var target = this; + if (typeof target !== 'function' || toStr.apply(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slicy(arguments, 1); + + var bound; + var binder = function () { + if (this instanceof bound) { + var result = target.apply( + this, + concatty(args, arguments) + ); + if (Object(result) === result) { + return result; + } + return this; + } + return target.apply( + that, + concatty(args, arguments) + ); + + }; + + var boundLength = max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0; i < boundLength; i++) { + boundArgs[i] = '$' + i; + } + + bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); + + if (target.prototype) { + var Empty = function Empty() {}; + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + + return bound; +}; diff --git a/node_modules/function-bind/index.js b/node_modules/function-bind/index.js new file mode 100644 index 0000000..3bb6b96 --- /dev/null +++ b/node_modules/function-bind/index.js @@ -0,0 +1,5 @@ +'use strict'; + +var implementation = require('./implementation'); + +module.exports = Function.prototype.bind || implementation; diff --git a/node_modules/function-bind/package.json b/node_modules/function-bind/package.json new file mode 100644 index 0000000..6185963 --- /dev/null +++ b/node_modules/function-bind/package.json @@ -0,0 +1,87 @@ +{ + "name": "function-bind", + "version": "1.1.2", + "description": "Implementation of Function.prototype.bind", + "keywords": [ + "function", + "bind", + "shim", + "es5" + ], + "author": "Raynos ", + "repository": { + "type": "git", + "url": "https://github.com/Raynos/function-bind.git" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "main": "index", + "homepage": "https://github.com/Raynos/function-bind", + "contributors": [ + { + "name": "Raynos" + }, + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "bugs": { + "url": "https://github.com/Raynos/function-bind/issues", + "email": "raynos2@gmail.com" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.3", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.1" + }, + "license": "MIT", + "scripts": { + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepack": "npmignore --auto --commentLines=autogenerated", + "pretest": "npm run lint", + "test": "npm run tests-only", + "posttest": "aud --production", + "tests-only": "nyc tape 'test/**/*.js'", + "lint": "eslint --ext=js,mjs .", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "ie/8..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/function-bind/test/.eslintrc b/node_modules/function-bind/test/.eslintrc new file mode 100644 index 0000000..8a56d5b --- /dev/null +++ b/node_modules/function-bind/test/.eslintrc @@ -0,0 +1,9 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "max-statements-per-line": [2, { "max": 2 }], + "no-invalid-this": 0, + "no-magic-numbers": 0, + } +} diff --git a/node_modules/function-bind/test/index.js b/node_modules/function-bind/test/index.js new file mode 100644 index 0000000..2edecce --- /dev/null +++ b/node_modules/function-bind/test/index.js @@ -0,0 +1,252 @@ +// jscs:disable requireUseStrict + +var test = require('tape'); + +var functionBind = require('../implementation'); +var getCurrentContext = function () { return this; }; + +test('functionBind is a function', function (t) { + t.equal(typeof functionBind, 'function'); + t.end(); +}); + +test('non-functions', function (t) { + var nonFunctions = [true, false, [], {}, 42, 'foo', NaN, /a/g]; + t.plan(nonFunctions.length); + for (var i = 0; i < nonFunctions.length; ++i) { + try { functionBind.call(nonFunctions[i]); } catch (ex) { + t.ok(ex instanceof TypeError, 'throws when given ' + String(nonFunctions[i])); + } + } + t.end(); +}); + +test('without a context', function (t) { + t.test('binds properly', function (st) { + var args, context; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }) + }; + namespace.func(1, 2, 3); + st.deepEqual(args, [1, 2, 3]); + st.equal(context, getCurrentContext.call()); + st.end(); + }); + + t.test('binds properly, and still supplies bound arguments', function (st) { + var args, context; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }, undefined, 1, 2, 3) + }; + namespace.func(4, 5, 6); + st.deepEqual(args, [1, 2, 3, 4, 5, 6]); + st.equal(context, getCurrentContext.call()); + st.end(); + }); + + t.test('returns properly', function (st) { + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, null) + }; + var context = namespace.func(1, 2, 3); + st.equal(context, getCurrentContext.call(), 'returned context is namespaced context'); + st.deepEqual(args, [1, 2, 3], 'passed arguments are correct'); + st.end(); + }); + + t.test('returns properly with bound arguments', function (st) { + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, null, 1, 2, 3) + }; + var context = namespace.func(4, 5, 6); + st.equal(context, getCurrentContext.call(), 'returned context is namespaced context'); + st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct'); + st.end(); + }); + + t.test('called as a constructor', function (st) { + var thunkify = function (value) { + return function () { return value; }; + }; + st.test('returns object value', function (sst) { + var expectedReturnValue = [1, 2, 3]; + var Constructor = functionBind.call(thunkify(expectedReturnValue), null); + var result = new Constructor(); + sst.equal(result, expectedReturnValue); + sst.end(); + }); + + st.test('does not return primitive value', function (sst) { + var Constructor = functionBind.call(thunkify(42), null); + var result = new Constructor(); + sst.notEqual(result, 42); + sst.end(); + }); + + st.test('object from bound constructor is instance of original and bound constructor', function (sst) { + var A = function (x) { + this.name = x || 'A'; + }; + var B = functionBind.call(A, null, 'B'); + + var result = new B(); + sst.ok(result instanceof B, 'result is instance of bound constructor'); + sst.ok(result instanceof A, 'result is instance of original constructor'); + sst.end(); + }); + + st.end(); + }); + + t.end(); +}); + +test('with a context', function (t) { + t.test('with no bound arguments', function (st) { + var args, context; + var boundContext = {}; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }, boundContext) + }; + namespace.func(1, 2, 3); + st.equal(context, boundContext, 'binds a context properly'); + st.deepEqual(args, [1, 2, 3], 'supplies passed arguments'); + st.end(); + }); + + t.test('with bound arguments', function (st) { + var args, context; + var boundContext = {}; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }, boundContext, 1, 2, 3) + }; + namespace.func(4, 5, 6); + st.equal(context, boundContext, 'binds a context properly'); + st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'supplies bound and passed arguments'); + st.end(); + }); + + t.test('returns properly', function (st) { + var boundContext = {}; + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, boundContext) + }; + var context = namespace.func(1, 2, 3); + st.equal(context, boundContext, 'returned context is bound context'); + st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context'); + st.deepEqual(args, [1, 2, 3], 'passed arguments are correct'); + st.end(); + }); + + t.test('returns properly with bound arguments', function (st) { + var boundContext = {}; + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, boundContext, 1, 2, 3) + }; + var context = namespace.func(4, 5, 6); + st.equal(context, boundContext, 'returned context is bound context'); + st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context'); + st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct'); + st.end(); + }); + + t.test('passes the correct arguments when called as a constructor', function (st) { + var expected = { name: 'Correct' }; + var namespace = { + Func: functionBind.call(function (arg) { + return arg; + }, { name: 'Incorrect' }) + }; + var returned = new namespace.Func(expected); + st.equal(returned, expected, 'returns the right arg when called as a constructor'); + st.end(); + }); + + t.test('has the new instance\'s context when called as a constructor', function (st) { + var actualContext; + var expectedContext = { foo: 'bar' }; + var namespace = { + Func: functionBind.call(function () { + actualContext = this; + }, expectedContext) + }; + var result = new namespace.Func(); + st.equal(result instanceof namespace.Func, true); + st.notEqual(actualContext, expectedContext); + st.end(); + }); + + t.end(); +}); + +test('bound function length', function (t) { + t.test('sets a correct length without thisArg', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }); + st.equal(subject.length, 3); + st.equal(subject(1, 2, 3), 6); + st.end(); + }); + + t.test('sets a correct length with thisArg', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}); + st.equal(subject.length, 3); + st.equal(subject(1, 2, 3), 6); + st.end(); + }); + + t.test('sets a correct length without thisArg and first argument', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1); + st.equal(subject.length, 2); + st.equal(subject(2, 3), 6); + st.end(); + }); + + t.test('sets a correct length with thisArg and first argument', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1); + st.equal(subject.length, 2); + st.equal(subject(2, 3), 6); + st.end(); + }); + + t.test('sets a correct length without thisArg and too many arguments', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1, 2, 3, 4); + st.equal(subject.length, 0); + st.equal(subject(), 6); + st.end(); + }); + + t.test('sets a correct length with thisArg and too many arguments', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1, 2, 3, 4); + st.equal(subject.length, 0); + st.equal(subject(), 6); + st.end(); + }); +}); diff --git a/node_modules/get-intrinsic/.eslintrc b/node_modules/get-intrinsic/.eslintrc new file mode 100644 index 0000000..235fb79 --- /dev/null +++ b/node_modules/get-intrinsic/.eslintrc @@ -0,0 +1,42 @@ +{ + "root": true, + + "extends": "@ljharb", + + "env": { + "es6": true, + "es2017": true, + "es2020": true, + "es2021": true, + "es2022": true, + }, + + "globals": { + "Float16Array": false, + }, + + "rules": { + "array-bracket-newline": 0, + "complexity": 0, + "eqeqeq": [2, "allow-null"], + "func-name-matching": 0, + "id-length": 0, + "max-lines": 0, + "max-lines-per-function": [2, 90], + "max-params": [2, 4], + "max-statements": 0, + "max-statements-per-line": [2, { "max": 2 }], + "multiline-comment-style": 0, + "no-magic-numbers": 0, + "sort-keys": 0, + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "new-cap": 0, + }, + }, + ], +} diff --git a/node_modules/get-intrinsic/.github/FUNDING.yml b/node_modules/get-intrinsic/.github/FUNDING.yml new file mode 100644 index 0000000..8e8da0d --- /dev/null +++ b/node_modules/get-intrinsic/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/get-intrinsic +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/get-intrinsic/.nycrc b/node_modules/get-intrinsic/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/get-intrinsic/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/get-intrinsic/CHANGELOG.md b/node_modules/get-intrinsic/CHANGELOG.md new file mode 100644 index 0000000..ce1dd98 --- /dev/null +++ b/node_modules/get-intrinsic/CHANGELOG.md @@ -0,0 +1,186 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.3.0](https://github.com/ljharb/get-intrinsic/compare/v1.2.7...v1.3.0) - 2025-02-22 + +### Commits + +- [Dev Deps] update `es-abstract`, `es-value-fixtures`, `for-each`, `object-inspect` [`9b61553`](https://github.com/ljharb/get-intrinsic/commit/9b61553c587f1c1edbd435597e88c7d387da97dd) +- [Deps] update `call-bind-apply-helpers`, `es-object-atoms`, `get-proto` [`a341fee`](https://github.com/ljharb/get-intrinsic/commit/a341fee0f39a403b0f0069e82c97642d5eb11043) +- [New] add `Float16Array` [`de22116`](https://github.com/ljharb/get-intrinsic/commit/de22116b492fb989a0341bceb6e573abfaed73dc) + +## [v1.2.7](https://github.com/ljharb/get-intrinsic/compare/v1.2.6...v1.2.7) - 2025-01-02 + +### Commits + +- [Refactor] use `get-proto` directly [`00ab955`](https://github.com/ljharb/get-intrinsic/commit/00ab95546a0980c8ad42a84253daaa8d2adcedf9) +- [Deps] update `math-intrinsics` [`c716cdd`](https://github.com/ljharb/get-intrinsic/commit/c716cdd6bbe36b438057025561b8bb5a879ac8a0) +- [Dev Deps] update `call-bound`, `es-abstract` [`dc648a6`](https://github.com/ljharb/get-intrinsic/commit/dc648a67eb359037dff8d8619bfa71d86debccb1) + +## [v1.2.6](https://github.com/ljharb/get-intrinsic/compare/v1.2.5...v1.2.6) - 2024-12-11 + +### Commits + +- [Refactor] use `math-intrinsics` [`841be86`](https://github.com/ljharb/get-intrinsic/commit/841be8641a9254c4c75483b30c8871b5d5065926) +- [Refactor] use `es-object-atoms` [`42057df`](https://github.com/ljharb/get-intrinsic/commit/42057dfa16f66f64787e66482af381cc6f31d2c1) +- [Deps] update `call-bind-apply-helpers` [`45afa24`](https://github.com/ljharb/get-intrinsic/commit/45afa24a9ee4d6d3c172db1f555b16cb27843ef4) +- [Dev Deps] update `call-bound` [`9cba9c6`](https://github.com/ljharb/get-intrinsic/commit/9cba9c6e70212bc163b7a5529cb25df46071646f) + +## [v1.2.5](https://github.com/ljharb/get-intrinsic/compare/v1.2.4...v1.2.5) - 2024-12-06 + +### Commits + +- [actions] split out node 10-20, and 20+ [`6e2b9dd`](https://github.com/ljharb/get-intrinsic/commit/6e2b9dd23902665681ebe453256ccfe21d7966f0) +- [Refactor] use `dunder-proto` and `call-bind-apply-helpers` instead of `has-proto` [`c095d17`](https://github.com/ljharb/get-intrinsic/commit/c095d179ad0f4fbfff20c8a3e0cb4fe668018998) +- [Refactor] use `gopd` [`9841d5b`](https://github.com/ljharb/get-intrinsic/commit/9841d5b35f7ab4fd2d193f0c741a50a077920e90) +- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `es-abstract`, `es-value-fixtures`, `gopd`, `mock-property`, `object-inspect`, `tape` [`2d07e01`](https://github.com/ljharb/get-intrinsic/commit/2d07e01310cee2cbaedfead6903df128b1f5d425) +- [Deps] update `gopd`, `has-proto`, `has-symbols`, `hasown` [`974d8bf`](https://github.com/ljharb/get-intrinsic/commit/974d8bf5baad7939eef35c25cc1dd88c10a30fa6) +- [Dev Deps] update `call-bind`, `es-abstract`, `tape` [`df9dde1`](https://github.com/ljharb/get-intrinsic/commit/df9dde178186631ab8a3165ede056549918ce4bc) +- [Refactor] cache `es-define-property` as well [`43ef543`](https://github.com/ljharb/get-intrinsic/commit/43ef543cb02194401420e3a914a4ca9168691926) +- [Deps] update `has-proto`, `has-symbols`, `hasown` [`ad4949d`](https://github.com/ljharb/get-intrinsic/commit/ad4949d5467316505aad89bf75f9417ed782f7af) +- [Tests] use `call-bound` directly [`ad5c406`](https://github.com/ljharb/get-intrinsic/commit/ad5c4069774bfe90e520a35eead5fe5ca9d69e80) +- [Deps] update `has-proto`, `hasown` [`45414ca`](https://github.com/ljharb/get-intrinsic/commit/45414caa312333a2798953682c68f85c550627dd) +- [Tests] replace `aud` with `npm audit` [`18d3509`](https://github.com/ljharb/get-intrinsic/commit/18d3509f79460e7924da70409ee81e5053087523) +- [Deps] update `es-define-property` [`aadaa3b`](https://github.com/ljharb/get-intrinsic/commit/aadaa3b2188d77ad9bff394ce5d4249c49eb21f5) +- [Dev Deps] add missing peer dep [`c296a16`](https://github.com/ljharb/get-intrinsic/commit/c296a16246d0c9a5981944f4cc5cf61fbda0cf6a) + +## [v1.2.4](https://github.com/ljharb/get-intrinsic/compare/v1.2.3...v1.2.4) - 2024-02-05 + +### Commits + +- [Refactor] use all 7 <+ ES6 Errors from `es-errors` [`bcac811`](https://github.com/ljharb/get-intrinsic/commit/bcac811abdc1c982e12abf848a410d6aae148d14) + +## [v1.2.3](https://github.com/ljharb/get-intrinsic/compare/v1.2.2...v1.2.3) - 2024-02-03 + +### Commits + +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`f11db9c`](https://github.com/ljharb/get-intrinsic/commit/f11db9c4fb97d87bbd53d3c73ac6b3db3613ad3b) +- [Dev Deps] update `aud`, `es-abstract`, `mock-property`, `npmignore` [`b7ac7d1`](https://github.com/ljharb/get-intrinsic/commit/b7ac7d1616fefb03877b1aed0c8f8d61aad32b6c) +- [meta] simplify `exports` [`faa0cc6`](https://github.com/ljharb/get-intrinsic/commit/faa0cc618e2830ffb51a8202490b0c215d965cbc) +- [meta] add missing `engines.node` [`774dd0b`](https://github.com/ljharb/get-intrinsic/commit/774dd0b3e8f741c3f05a6322d124d6087f146af1) +- [Dev Deps] update `tape` [`5828e8e`](https://github.com/ljharb/get-intrinsic/commit/5828e8e4a04e69312e87a36c0ea39428a7a4c3d8) +- [Robustness] use null objects for lookups [`eb9a11f`](https://github.com/ljharb/get-intrinsic/commit/eb9a11fa9eb3e13b193fcc05a7fb814341b1a7b7) +- [meta] add `sideEffects` flag [`89bcc7a`](https://github.com/ljharb/get-intrinsic/commit/89bcc7a42e19bf07b7c21e3094d5ab177109e6d2) + +## [v1.2.2](https://github.com/ljharb/get-intrinsic/compare/v1.2.1...v1.2.2) - 2023-10-20 + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `call-bind`, `es-abstract`, `mock-property`, `object-inspect`, `tape` [`f51bcf2`](https://github.com/ljharb/get-intrinsic/commit/f51bcf26412d58d17ce17c91c9afd0ad271f0762) +- [Refactor] use `hasown` instead of `has` [`18d14b7`](https://github.com/ljharb/get-intrinsic/commit/18d14b799bea6b5765e1cec91890830cbcdb0587) +- [Deps] update `function-bind` [`6e109c8`](https://github.com/ljharb/get-intrinsic/commit/6e109c81e03804cc5e7824fb64353cdc3d8ee2c7) + +## [v1.2.1](https://github.com/ljharb/get-intrinsic/compare/v1.2.0...v1.2.1) - 2023-05-13 + +### Commits + +- [Fix] avoid a crash in envs without `__proto__` [`7bad8d0`](https://github.com/ljharb/get-intrinsic/commit/7bad8d061bf8721733b58b73a2565af2b6756b64) +- [Dev Deps] update `es-abstract` [`c60e6b7`](https://github.com/ljharb/get-intrinsic/commit/c60e6b7b4cf9660c7f27ed970970fd55fac48dc5) + +## [v1.2.0](https://github.com/ljharb/get-intrinsic/compare/v1.1.3...v1.2.0) - 2023-01-19 + +### Commits + +- [actions] update checkout action [`ca6b12f`](https://github.com/ljharb/get-intrinsic/commit/ca6b12f31eaacea4ea3b055e744cd61623385ffb) +- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `tape` [`41a3727`](https://github.com/ljharb/get-intrinsic/commit/41a3727d0026fa04273ae216a5f8e12eefd72da8) +- [Fix] ensure `Error.prototype` is undeniable [`c511e97`](https://github.com/ljharb/get-intrinsic/commit/c511e97ae99c764c4524b540dee7a70757af8da3) +- [Dev Deps] update `aud`, `es-abstract`, `tape` [`1bef8a8`](https://github.com/ljharb/get-intrinsic/commit/1bef8a8fd439ebb80863199b6189199e0851ac67) +- [Dev Deps] update `aud`, `es-abstract` [`0d41f16`](https://github.com/ljharb/get-intrinsic/commit/0d41f16bcd500bc28b7bfc98043ebf61ea081c26) +- [New] add `BigInt64Array` and `BigUint64Array` [`a6cca25`](https://github.com/ljharb/get-intrinsic/commit/a6cca25f29635889b7e9bd669baf9e04be90e48c) +- [Tests] use `gopd` [`ecf7722`](https://github.com/ljharb/get-intrinsic/commit/ecf7722240d15cfd16edda06acf63359c10fb9bd) + +## [v1.1.3](https://github.com/ljharb/get-intrinsic/compare/v1.1.2...v1.1.3) - 2022-09-12 + +### Commits + +- [Dev Deps] update `es-abstract`, `es-value-fixtures`, `tape` [`07ff291`](https://github.com/ljharb/get-intrinsic/commit/07ff291816406ebe5a12d7f16965bde0942dd688) +- [Fix] properly check for % signs [`50ac176`](https://github.com/ljharb/get-intrinsic/commit/50ac1760fe99c227e64eabde76e9c0e44cd881b5) + +## [v1.1.2](https://github.com/ljharb/get-intrinsic/compare/v1.1.1...v1.1.2) - 2022-06-08 + +### Fixed + +- [Fix] properly validate against extra % signs [`#16`](https://github.com/ljharb/get-intrinsic/issues/16) + +### Commits + +- [actions] reuse common workflows [`0972547`](https://github.com/ljharb/get-intrinsic/commit/0972547efd0abc863fe4c445a6ca7eb4f8c6901d) +- [meta] use `npmignore` to autogenerate an npmignore file [`5ba0b51`](https://github.com/ljharb/get-intrinsic/commit/5ba0b51d8d8d4f1c31d426d74abc0770fd106bad) +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`c364492`](https://github.com/ljharb/get-intrinsic/commit/c364492af4af51333e6f81c0bf21fd3d602c3661) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `es-abstract`, `object-inspect`, `tape` [`dc04dad`](https://github.com/ljharb/get-intrinsic/commit/dc04dad86f6e5608775a2640cb0db5927ae29ed9) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `safe-publish-latest`, `tape` [`1c14059`](https://github.com/ljharb/get-intrinsic/commit/1c1405984e86dd2dc9366c15d8a0294a96a146a5) +- [Tests] use `mock-property` [`b396ef0`](https://github.com/ljharb/get-intrinsic/commit/b396ef05bb73b1d699811abd64b0d9b97997fdda) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`c2c758d`](https://github.com/ljharb/get-intrinsic/commit/c2c758d3b90af4fef0a76910d8d3c292ec8d1d3e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`29e3c09`](https://github.com/ljharb/get-intrinsic/commit/29e3c091c2bf3e17099969847e8729d0e46896de) +- [actions] update codecov uploader [`8cbc141`](https://github.com/ljharb/get-intrinsic/commit/8cbc1418940d7a8941f3a7985cbc4ac095c5e13d) +- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`10b6f5c`](https://github.com/ljharb/get-intrinsic/commit/10b6f5c02593fb3680c581d696ac124e30652932) +- [readme] add github actions/codecov badges [`4e25400`](https://github.com/ljharb/get-intrinsic/commit/4e25400d9f51ae9eb059cbe22d9144e70ea214e8) +- [Tests] use `for-each` instead of `foreach` [`c05b957`](https://github.com/ljharb/get-intrinsic/commit/c05b957ad9a7bc7721af7cc9e9be1edbfe057496) +- [Dev Deps] update `es-abstract` [`29b05ae`](https://github.com/ljharb/get-intrinsic/commit/29b05aec3e7330e9ad0b8e0f685a9112c20cdd97) +- [meta] use `prepublishOnly` script for npm 7+ [`95c285d`](https://github.com/ljharb/get-intrinsic/commit/95c285da810516057d3bbfa871176031af38f05d) +- [Deps] update `has-symbols` [`593cb4f`](https://github.com/ljharb/get-intrinsic/commit/593cb4fb38e7922e40e42c183f45274b636424cd) +- [readme] fix repo URLs [`1c8305b`](https://github.com/ljharb/get-intrinsic/commit/1c8305b5365827c9b6fc785434aac0e1328ff2f5) +- [Deps] update `has-symbols` [`c7138b6`](https://github.com/ljharb/get-intrinsic/commit/c7138b6c6d73132d859471fb8c13304e1e7c8b20) +- [Dev Deps] remove unused `has-bigints` [`bd63aff`](https://github.com/ljharb/get-intrinsic/commit/bd63aff6ad8f3a986c557fcda2914187bdaab359) + +## [v1.1.1](https://github.com/ljharb/get-intrinsic/compare/v1.1.0...v1.1.1) - 2021-02-03 + +### Fixed + +- [meta] export `./package.json` [`#9`](https://github.com/ljharb/get-intrinsic/issues/9) + +### Commits + +- [readme] flesh out the readme; use `evalmd` [`d12f12c`](https://github.com/ljharb/get-intrinsic/commit/d12f12c15345a0a0772cc65a7c64369529abd614) +- [eslint] set up proper globals config [`5a8c098`](https://github.com/ljharb/get-intrinsic/commit/5a8c0984e3319d1ac0e64b102f8ec18b64e79f36) +- [Dev Deps] update `eslint` [`7b9a5c0`](https://github.com/ljharb/get-intrinsic/commit/7b9a5c0d31a90ca1a1234181c74988fb046701cd) + +## [v1.1.0](https://github.com/ljharb/get-intrinsic/compare/v1.0.2...v1.1.0) - 2021-01-25 + +### Fixed + +- [Refactor] delay `Function` eval until syntax-derived values are requested [`#3`](https://github.com/ljharb/get-intrinsic/issues/3) + +### Commits + +- [Tests] migrate tests to Github Actions [`2ab762b`](https://github.com/ljharb/get-intrinsic/commit/2ab762b48164aea8af37a40ba105bbc8246ab8c4) +- [meta] do not publish github action workflow files [`5e7108e`](https://github.com/ljharb/get-intrinsic/commit/5e7108e4768b244d48d9567ba4f8a6cab9c65b8e) +- [Tests] add some coverage [`01ac7a8`](https://github.com/ljharb/get-intrinsic/commit/01ac7a87ac29738567e8524cd8c9e026b1fa8cb3) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `call-bind`, `es-abstract`, `tape`; add `call-bind` [`911b672`](https://github.com/ljharb/get-intrinsic/commit/911b672fbffae433a96924c6ce013585e425f4b7) +- [Refactor] rearrange evalled constructors a bit [`7e7e4bf`](https://github.com/ljharb/get-intrinsic/commit/7e7e4bf583f3799c8ac1c6c5e10d2cb553957347) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`0199968`](https://github.com/ljharb/get-intrinsic/commit/01999687a263ffce0a3cb011dfbcb761754aedbc) + +## [v1.0.2](https://github.com/ljharb/get-intrinsic/compare/v1.0.1...v1.0.2) - 2020-12-17 + +### Commits + +- [Fix] Throw for non‑existent intrinsics [`68f873b`](https://github.com/ljharb/get-intrinsic/commit/68f873b013c732a05ad6f5fc54f697e55515461b) +- [Fix] Throw for non‑existent segments in the intrinsic path [`8325dee`](https://github.com/ljharb/get-intrinsic/commit/8325deee43128f3654d3399aa9591741ebe17b21) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-bigints`, `object-inspect` [`0c227a7`](https://github.com/ljharb/get-intrinsic/commit/0c227a7d8b629166f25715fd242553892e458525) +- [meta] do not lint coverage output [`70d2419`](https://github.com/ljharb/get-intrinsic/commit/70d24199b620043cd9110fc5f426d214ebe21dc9) + +## [v1.0.1](https://github.com/ljharb/get-intrinsic/compare/v1.0.0...v1.0.1) - 2020-10-30 + +### Commits + +- [Tests] gather coverage data on every job [`d1d280d`](https://github.com/ljharb/get-intrinsic/commit/d1d280dec714e3f0519cc877dbcb193057d9cac6) +- [Fix] add missing dependencies [`5031771`](https://github.com/ljharb/get-intrinsic/commit/5031771bb1095b38be88ce7c41d5de88718e432e) +- [Tests] use `es-value-fixtures` [`af48765`](https://github.com/ljharb/get-intrinsic/commit/af48765a23c5323fb0b6b38dbf00eb5099c7bebc) + +## v1.0.0 - 2020-10-29 + +### Commits + +- Implementation [`bbce57c`](https://github.com/ljharb/get-intrinsic/commit/bbce57c6f33d05b2d8d3efa273ceeb3ee01127bb) +- Tests [`17b4f0d`](https://github.com/ljharb/get-intrinsic/commit/17b4f0d56dea6b4059b56fc30ef3ee4d9500ebc2) +- Initial commit [`3153294`](https://github.com/ljharb/get-intrinsic/commit/31532948de363b0a27dd9fd4649e7b7028ec4b44) +- npm init [`fb326c4`](https://github.com/ljharb/get-intrinsic/commit/fb326c4d2817c8419ec31de1295f06bb268a7902) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`48862fb`](https://github.com/ljharb/get-intrinsic/commit/48862fb2508c8f6a57968e6d08b7c883afc9d550) +- [meta] add `auto-changelog` [`5f28ad0`](https://github.com/ljharb/get-intrinsic/commit/5f28ad019e060a353d8028f9f2591a9cc93074a1) +- [meta] add "funding"; create `FUNDING.yml` [`c2bbdde`](https://github.com/ljharb/get-intrinsic/commit/c2bbddeba73a875be61484ee4680b129a6d4e0a1) +- [Tests] add `npm run lint` [`0a84b98`](https://github.com/ljharb/get-intrinsic/commit/0a84b98b22b7cf7a748666f705b0003a493c35fd) +- Only apps should have lockfiles [`9586c75`](https://github.com/ljharb/get-intrinsic/commit/9586c75866c1ee678e4d5d4dbbdef6997e511b05) diff --git a/node_modules/get-intrinsic/LICENSE b/node_modules/get-intrinsic/LICENSE new file mode 100644 index 0000000..48f05d0 --- /dev/null +++ b/node_modules/get-intrinsic/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/get-intrinsic/README.md b/node_modules/get-intrinsic/README.md new file mode 100644 index 0000000..3aa0bba --- /dev/null +++ b/node_modules/get-intrinsic/README.md @@ -0,0 +1,71 @@ +# get-intrinsic [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Get and robustly cache all JS language-level intrinsics at first require time. + +See the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference. + +## Example + +```js +var GetIntrinsic = require('get-intrinsic'); +var assert = require('assert'); + +// static methods +assert.equal(GetIntrinsic('%Math.pow%'), Math.pow); +assert.equal(Math.pow(2, 3), 8); +assert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8); +delete Math.pow; +assert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8); + +// instance methods +var arr = [1]; +assert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push); +assert.deepEqual(arr, [1]); + +arr.push(2); +assert.deepEqual(arr, [1, 2]); + +GetIntrinsic('%Array.prototype.push%').call(arr, 3); +assert.deepEqual(arr, [1, 2, 3]); + +delete Array.prototype.push; +GetIntrinsic('%Array.prototype.push%').call(arr, 4); +assert.deepEqual(arr, [1, 2, 3, 4]); + +// missing features +delete JSON.parse; // to simulate a real intrinsic that is missing in the environment +assert.throws(() => GetIntrinsic('%JSON.parse%')); +assert.equal(undefined, GetIntrinsic('%JSON.parse%', true)); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/get-intrinsic +[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg +[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg +[deps-url]: https://david-dm.org/ljharb/get-intrinsic +[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg +[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic +[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic +[actions-url]: https://github.com/ljharb/get-intrinsic/actions diff --git a/node_modules/get-intrinsic/index.js b/node_modules/get-intrinsic/index.js new file mode 100644 index 0000000..bd1d94b --- /dev/null +++ b/node_modules/get-intrinsic/index.js @@ -0,0 +1,378 @@ +'use strict'; + +var undefined; + +var $Object = require('es-object-atoms'); + +var $Error = require('es-errors'); +var $EvalError = require('es-errors/eval'); +var $RangeError = require('es-errors/range'); +var $ReferenceError = require('es-errors/ref'); +var $SyntaxError = require('es-errors/syntax'); +var $TypeError = require('es-errors/type'); +var $URIError = require('es-errors/uri'); + +var abs = require('math-intrinsics/abs'); +var floor = require('math-intrinsics/floor'); +var max = require('math-intrinsics/max'); +var min = require('math-intrinsics/min'); +var pow = require('math-intrinsics/pow'); +var round = require('math-intrinsics/round'); +var sign = require('math-intrinsics/sign'); + +var $Function = Function; + +// eslint-disable-next-line consistent-return +var getEvalledConstructor = function (expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); + } catch (e) {} +}; + +var $gOPD = require('gopd'); +var $defineProperty = require('es-define-property'); + +var throwTypeError = function () { + throw new $TypeError(); +}; +var ThrowTypeError = $gOPD + ? (function () { + try { + // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties + arguments.callee; // IE 8 does not throw here + return throwTypeError; + } catch (calleeThrows) { + try { + // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') + return $gOPD(arguments, 'callee').get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }()) + : throwTypeError; + +var hasSymbols = require('has-symbols')(); + +var getProto = require('get-proto'); +var $ObjectGPO = require('get-proto/Object.getPrototypeOf'); +var $ReflectGPO = require('get-proto/Reflect.getPrototypeOf'); + +var $apply = require('call-bind-apply-helpers/functionApply'); +var $call = require('call-bind-apply-helpers/functionCall'); + +var needsEval = {}; + +var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); + +var INTRINSICS = { + __proto__: null, + '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, + '%Array%': Array, + '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, + '%AsyncFromSyncIteratorPrototype%': undefined, + '%AsyncFunction%': needsEval, + '%AsyncGenerator%': needsEval, + '%AsyncGeneratorFunction%': needsEval, + '%AsyncIteratorPrototype%': needsEval, + '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, + '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, + '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, + '%Boolean%': Boolean, + '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '%Date%': Date, + '%decodeURI%': decodeURI, + '%decodeURIComponent%': decodeURIComponent, + '%encodeURI%': encodeURI, + '%encodeURIComponent%': encodeURIComponent, + '%Error%': $Error, + '%eval%': eval, // eslint-disable-line no-eval + '%EvalError%': $EvalError, + '%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array, + '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, + '%Function%': $Function, + '%GeneratorFunction%': needsEval, + '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '%isFinite%': isFinite, + '%isNaN%': isNaN, + '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, + '%JSON%': typeof JSON === 'object' ? JSON : undefined, + '%Map%': typeof Map === 'undefined' ? undefined : Map, + '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), + '%Math%': Math, + '%Number%': Number, + '%Object%': $Object, + '%Object.getOwnPropertyDescriptor%': $gOPD, + '%parseFloat%': parseFloat, + '%parseInt%': parseInt, + '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '%RangeError%': $RangeError, + '%ReferenceError%': $ReferenceError, + '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '%RegExp%': RegExp, + '%Set%': typeof Set === 'undefined' ? undefined : Set, + '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), + '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '%String%': String, + '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, + '%Symbol%': hasSymbols ? Symbol : undefined, + '%SyntaxError%': $SyntaxError, + '%ThrowTypeError%': ThrowTypeError, + '%TypedArray%': TypedArray, + '%TypeError%': $TypeError, + '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '%URIError%': $URIError, + '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, + '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet, + + '%Function.prototype.call%': $call, + '%Function.prototype.apply%': $apply, + '%Object.defineProperty%': $defineProperty, + '%Object.getPrototypeOf%': $ObjectGPO, + '%Math.abs%': abs, + '%Math.floor%': floor, + '%Math.max%': max, + '%Math.min%': min, + '%Math.pow%': pow, + '%Math.round%': round, + '%Math.sign%': sign, + '%Reflect.getPrototypeOf%': $ReflectGPO +}; + +if (getProto) { + try { + null.error; // eslint-disable-line no-unused-expressions + } catch (e) { + // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 + var errorProto = getProto(getProto(e)); + INTRINSICS['%Error.prototype%'] = errorProto; + } +} + +var doEval = function doEval(name) { + var value; + if (name === '%AsyncFunction%') { + value = getEvalledConstructor('async function () {}'); + } else if (name === '%GeneratorFunction%') { + value = getEvalledConstructor('function* () {}'); + } else if (name === '%AsyncGeneratorFunction%') { + value = getEvalledConstructor('async function* () {}'); + } else if (name === '%AsyncGenerator%') { + var fn = doEval('%AsyncGeneratorFunction%'); + if (fn) { + value = fn.prototype; + } + } else if (name === '%AsyncIteratorPrototype%') { + var gen = doEval('%AsyncGenerator%'); + if (gen && getProto) { + value = getProto(gen.prototype); + } + } + + INTRINSICS[name] = value; + + return value; +}; + +var LEGACY_ALIASES = { + __proto__: null, + '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], + '%ArrayPrototype%': ['Array', 'prototype'], + '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], + '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], + '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], + '%ArrayProto_values%': ['Array', 'prototype', 'values'], + '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], + '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], + '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], + '%BooleanPrototype%': ['Boolean', 'prototype'], + '%DataViewPrototype%': ['DataView', 'prototype'], + '%DatePrototype%': ['Date', 'prototype'], + '%ErrorPrototype%': ['Error', 'prototype'], + '%EvalErrorPrototype%': ['EvalError', 'prototype'], + '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], + '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], + '%FunctionPrototype%': ['Function', 'prototype'], + '%Generator%': ['GeneratorFunction', 'prototype'], + '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], + '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], + '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], + '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], + '%JSONParse%': ['JSON', 'parse'], + '%JSONStringify%': ['JSON', 'stringify'], + '%MapPrototype%': ['Map', 'prototype'], + '%NumberPrototype%': ['Number', 'prototype'], + '%ObjectPrototype%': ['Object', 'prototype'], + '%ObjProto_toString%': ['Object', 'prototype', 'toString'], + '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], + '%PromisePrototype%': ['Promise', 'prototype'], + '%PromiseProto_then%': ['Promise', 'prototype', 'then'], + '%Promise_all%': ['Promise', 'all'], + '%Promise_reject%': ['Promise', 'reject'], + '%Promise_resolve%': ['Promise', 'resolve'], + '%RangeErrorPrototype%': ['RangeError', 'prototype'], + '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], + '%RegExpPrototype%': ['RegExp', 'prototype'], + '%SetPrototype%': ['Set', 'prototype'], + '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], + '%StringPrototype%': ['String', 'prototype'], + '%SymbolPrototype%': ['Symbol', 'prototype'], + '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], + '%TypedArrayPrototype%': ['TypedArray', 'prototype'], + '%TypeErrorPrototype%': ['TypeError', 'prototype'], + '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], + '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], + '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], + '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], + '%URIErrorPrototype%': ['URIError', 'prototype'], + '%WeakMapPrototype%': ['WeakMap', 'prototype'], + '%WeakSetPrototype%': ['WeakSet', 'prototype'] +}; + +var bind = require('function-bind'); +var hasOwn = require('hasown'); +var $concat = bind.call($call, Array.prototype.concat); +var $spliceApply = bind.call($apply, Array.prototype.splice); +var $replace = bind.call($call, String.prototype.replace); +var $strSlice = bind.call($call, String.prototype.slice); +var $exec = bind.call($call, RegExp.prototype.exec); + +/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ +var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; +var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ +var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + if (first === '%' && last !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); + } else if (last === '%' && first !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); + } + var result = []; + $replace(string, rePropName, function (match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; + }); + return result; +}; +/* end adaptation */ + +var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = '%' + alias[0] + '%'; + } + + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === 'undefined' && !allowMissing) { + throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + + return { + alias: alias, + name: intrinsicName, + value: value + }; + } + + throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== 'string' || name.length === 0) { + throw new $TypeError('intrinsic name must be a non-empty string'); + } + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + + if ($exec(/^%?[^%]*%?$/, name) === null) { + throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); + } + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; + + var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + if ( + ( + (first === '"' || first === "'" || first === '`') + || (last === '"' || last === "'" || last === '`') + ) + && first !== last + ) { + throw new $SyntaxError('property names with quotes must have matching quotes'); + } + if (part === 'constructor' || !isOwn) { + skipFurtherCaching = true; + } + + intrinsicBaseName += '.' + part; + intrinsicRealName = '%' + intrinsicBaseName + '%'; + + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); + } + return void undefined; + } + if ($gOPD && (i + 1) >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + + // By convention, when a data property is converted to an accessor + // property to emulate a data property that does not suffer from + // the override mistake, that accessor's getter is marked with + // an `originalValue` property. Here, when we detect this, we + // uphold the illusion by pretending to see that original data + // property, i.e., returning the value rather than the getter + // itself. + if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; +}; diff --git a/node_modules/get-intrinsic/package.json b/node_modules/get-intrinsic/package.json new file mode 100644 index 0000000..2828e73 --- /dev/null +++ b/node_modules/get-intrinsic/package.json @@ -0,0 +1,97 @@ +{ + "name": "get-intrinsic", + "version": "1.3.0", + "description": "Get and robustly cache all JS language-level intrinsics at first require time", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/get-intrinsic.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "es", + "js", + "intrinsic", + "getintrinsic", + "es-abstract" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/get-intrinsic/issues" + }, + "homepage": "https://github.com/ljharb/get-intrinsic#readme", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "auto-changelog": "^2.5.0", + "call-bound": "^1.0.3", + "encoding": "^0.1.13", + "es-abstract": "^1.23.9", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "make-async-function": "^1.0.0", + "make-async-generator-function": "^1.0.0", + "make-generator-function": "^2.0.0", + "mock-property": "^1.1.0", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "testling": { + "files": "test/GetIntrinsic.js" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/get-intrinsic/test/GetIntrinsic.js b/node_modules/get-intrinsic/test/GetIntrinsic.js new file mode 100644 index 0000000..d9c0f30 --- /dev/null +++ b/node_modules/get-intrinsic/test/GetIntrinsic.js @@ -0,0 +1,274 @@ +'use strict'; + +var GetIntrinsic = require('../'); + +var test = require('tape'); +var forEach = require('for-each'); +var debug = require('object-inspect'); +var generatorFns = require('make-generator-function')(); +var asyncFns = require('make-async-function').list(); +var asyncGenFns = require('make-async-generator-function')(); +var mockProperty = require('mock-property'); + +var callBound = require('call-bound'); +var v = require('es-value-fixtures'); +var $gOPD = require('gopd'); +var DefinePropertyOrThrow = require('es-abstract/2023/DefinePropertyOrThrow'); + +var $isProto = callBound('%Object.prototype.isPrototypeOf%'); + +test('export', function (t) { + t.equal(typeof GetIntrinsic, 'function', 'it is a function'); + t.equal(GetIntrinsic.length, 2, 'function has length of 2'); + + t.end(); +}); + +test('throws', function (t) { + t['throws']( + function () { GetIntrinsic('not an intrinsic'); }, + SyntaxError, + 'nonexistent intrinsic throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic(''); }, + TypeError, + 'empty string intrinsic throws a type error' + ); + + t['throws']( + function () { GetIntrinsic('.'); }, + SyntaxError, + '"just a dot" intrinsic throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic('%String'); }, + SyntaxError, + 'Leading % without trailing % throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic('String%'); }, + SyntaxError, + 'Trailing % without leading % throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic("String['prototype]"); }, + SyntaxError, + 'Dynamic property access is disallowed for intrinsics (unterminated string)' + ); + + t['throws']( + function () { GetIntrinsic('%Proxy.prototype.undefined%'); }, + TypeError, + "Throws when middle part doesn't exist (%Proxy.prototype.undefined%)" + ); + + t['throws']( + function () { GetIntrinsic('%Array.prototype%garbage%'); }, + SyntaxError, + 'Throws with extra percent signs' + ); + + t['throws']( + function () { GetIntrinsic('%Array.prototype%push%'); }, + SyntaxError, + 'Throws with extra percent signs, even on an existing intrinsic' + ); + + forEach(v.nonStrings, function (nonString) { + t['throws']( + function () { GetIntrinsic(nonString); }, + TypeError, + debug(nonString) + ' is not a String' + ); + }); + + forEach(v.nonBooleans, function (nonBoolean) { + t['throws']( + function () { GetIntrinsic('%', nonBoolean); }, + TypeError, + debug(nonBoolean) + ' is not a Boolean' + ); + }); + + forEach([ + 'toString', + 'propertyIsEnumerable', + 'hasOwnProperty' + ], function (objectProtoMember) { + t['throws']( + function () { GetIntrinsic(objectProtoMember); }, + SyntaxError, + debug(objectProtoMember) + ' is not an intrinsic' + ); + }); + + t.end(); +}); + +test('base intrinsics', function (t) { + t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object'); + t.equal(GetIntrinsic('Object'), Object, 'Object yields Object'); + t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array'); + t.equal(GetIntrinsic('Array'), Array, 'Array yields Array'); + + t.end(); +}); + +test('dotted paths', function (t) { + t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString'); + t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString'); + t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push'); + t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push'); + + test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { + var original = GetIntrinsic('%ObjProto_toString%'); + + forEach([ + '%Object.prototype.toString%', + 'Object.prototype.toString', + '%ObjectPrototype.toString%', + 'ObjectPrototype.toString', + '%ObjProto_toString%', + 'ObjProto_toString' + ], function (name) { + DefinePropertyOrThrow(Object.prototype, 'toString', { + '[[Value]]': function toString() { + return original.apply(this, arguments); + } + }); + st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString'); + }); + + DefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': original }); + st.end(); + }); + + test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { + var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%'); + + forEach([ + '%Object.prototype.propertyIsEnumerable%', + 'Object.prototype.propertyIsEnumerable', + '%ObjectPrototype.propertyIsEnumerable%', + 'ObjectPrototype.propertyIsEnumerable' + ], function (name) { + var restore = mockProperty(Object.prototype, 'propertyIsEnumerable', { + value: function propertyIsEnumerable() { + return original.apply(this, arguments); + } + }); + st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable'); + + restore(); + }); + + st.end(); + }); + + test('dotted path reports correct error', function (st) { + st['throws'](function () { + GetIntrinsic('%NonExistentIntrinsic.prototype.property%'); + }, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%'); + + st['throws'](function () { + GetIntrinsic('%NonExistentIntrinsicPrototype.property%'); + }, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%'); + + st.end(); + }); + + t.end(); +}); + +test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) { + var actual = $gOPD(Map.prototype, 'size'); + t.ok(actual, 'Map.prototype.size has a descriptor'); + t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function'); + t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it'); + t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it'); + + t.end(); +}); + +test('generator functions', { skip: !generatorFns.length }, function (t) { + var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%'); + var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%'); + var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%'); + + forEach(generatorFns, function (genFn) { + var fnName = genFn.name; + fnName = fnName ? "'" + fnName + "'" : 'genFn'; + + t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%'); + t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName); + t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype'); + }); + + t.end(); +}); + +test('async functions', { skip: !asyncFns.length }, function (t) { + var $AsyncFunction = GetIntrinsic('%AsyncFunction%'); + var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%'); + + forEach(asyncFns, function (asyncFn) { + var fnName = asyncFn.name; + fnName = fnName ? "'" + fnName + "'" : 'asyncFn'; + + t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%'); + t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName); + }); + + t.end(); +}); + +test('async generator functions', { skip: asyncGenFns.length === 0 }, function (t) { + var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%'); + var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%'); + var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%'); + + forEach(asyncGenFns, function (asyncGenFn) { + var fnName = asyncGenFn.name; + fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn'; + + t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%'); + t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName); + t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype'); + }); + + t.end(); +}); + +test('%ThrowTypeError%', function (t) { + var $ThrowTypeError = GetIntrinsic('%ThrowTypeError%'); + + t.equal(typeof $ThrowTypeError, 'function', 'is a function'); + t['throws']( + $ThrowTypeError, + TypeError, + '%ThrowTypeError% throws a TypeError' + ); + + t.end(); +}); + +test('allowMissing', { skip: asyncGenFns.length > 0 }, function (t) { + t['throws']( + function () { GetIntrinsic('%AsyncGeneratorPrototype%'); }, + TypeError, + 'throws when missing' + ); + + t.equal( + GetIntrinsic('%AsyncGeneratorPrototype%', true), + undefined, + 'does not throw when allowMissing' + ); + + t.end(); +}); diff --git a/node_modules/get-proto/.eslintrc b/node_modules/get-proto/.eslintrc new file mode 100644 index 0000000..1d21a8a --- /dev/null +++ b/node_modules/get-proto/.eslintrc @@ -0,0 +1,10 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "id-length": "off", + "sort-keys": "off", + }, +} diff --git a/node_modules/get-proto/.github/FUNDING.yml b/node_modules/get-proto/.github/FUNDING.yml new file mode 100644 index 0000000..93183ef --- /dev/null +++ b/node_modules/get-proto/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/get-proto +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/get-proto/.nycrc b/node_modules/get-proto/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/get-proto/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/get-proto/CHANGELOG.md b/node_modules/get-proto/CHANGELOG.md new file mode 100644 index 0000000..5860229 --- /dev/null +++ b/node_modules/get-proto/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.1](https://github.com/ljharb/get-proto/compare/v1.0.0...v1.0.1) - 2025-01-02 + +### Commits + +- [Fix] for the `Object.getPrototypeOf` window, throw for non-objects [`7fe6508`](https://github.com/ljharb/get-proto/commit/7fe6508b71419ebe1976bedb86001d1feaeaa49a) + +## v1.0.0 - 2025-01-01 + +### Commits + +- Initial implementation, tests, readme, types [`5c70775`](https://github.com/ljharb/get-proto/commit/5c707751e81c3deeb2cf980d185fc7fd43611415) +- Initial commit [`7c65c2a`](https://github.com/ljharb/get-proto/commit/7c65c2ad4e33d5dae2f219ebe1a046ae2256972c) +- npm init [`0b8cf82`](https://github.com/ljharb/get-proto/commit/0b8cf824c9634e4a34ef7dd2a2cdc5be6ac79518) +- Only apps should have lockfiles [`a6d1bff`](https://github.com/ljharb/get-proto/commit/a6d1bffc364f5828377cea7194558b2dbef7aea2) diff --git a/node_modules/get-proto/LICENSE b/node_modules/get-proto/LICENSE new file mode 100644 index 0000000..eeabd1c --- /dev/null +++ b/node_modules/get-proto/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/get-proto/Object.getPrototypeOf.d.ts b/node_modules/get-proto/Object.getPrototypeOf.d.ts new file mode 100644 index 0000000..028b3ff --- /dev/null +++ b/node_modules/get-proto/Object.getPrototypeOf.d.ts @@ -0,0 +1,5 @@ +declare function getProto(object: O): object | null; + +declare const x: typeof getProto | null; + +export = x; \ No newline at end of file diff --git a/node_modules/get-proto/Object.getPrototypeOf.js b/node_modules/get-proto/Object.getPrototypeOf.js new file mode 100644 index 0000000..c2cbbdf --- /dev/null +++ b/node_modules/get-proto/Object.getPrototypeOf.js @@ -0,0 +1,6 @@ +'use strict'; + +var $Object = require('es-object-atoms'); + +/** @type {import('./Object.getPrototypeOf')} */ +module.exports = $Object.getPrototypeOf || null; diff --git a/node_modules/get-proto/README.md b/node_modules/get-proto/README.md new file mode 100644 index 0000000..f8b4cce --- /dev/null +++ b/node_modules/get-proto/README.md @@ -0,0 +1,50 @@ +# get-proto [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Robustly get the [[Prototype]] of an object. Uses the best available method. + +## Getting started + +```sh +npm install --save get-proto +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const getProto = require('get-proto'); + +const a = { a: 1, b: 2, [Symbol.toStringTag]: 'foo' }; +const b = { c: 3, __proto__: a }; + +assert.equal(getProto(b), a); +assert.equal(getProto(a), Object.prototype); +assert.equal(getProto({ __proto__: null }), null); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/get-proto +[npm-version-svg]: https://versionbadg.es/ljharb/get-proto.svg +[deps-svg]: https://david-dm.org/ljharb/get-proto.svg +[deps-url]: https://david-dm.org/ljharb/get-proto +[dev-deps-svg]: https://david-dm.org/ljharb/get-proto/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/get-proto#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/get-proto.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/get-proto.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/get-proto.svg +[downloads-url]: https://npm-stat.com/charts.html?package=get-proto +[codecov-image]: https://codecov.io/gh/ljharb/get-proto/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/get-proto/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-proto +[actions-url]: https://github.com/ljharb/get-proto/actions diff --git a/node_modules/get-proto/Reflect.getPrototypeOf.d.ts b/node_modules/get-proto/Reflect.getPrototypeOf.d.ts new file mode 100644 index 0000000..2388fe0 --- /dev/null +++ b/node_modules/get-proto/Reflect.getPrototypeOf.d.ts @@ -0,0 +1,3 @@ +declare const x: typeof Reflect.getPrototypeOf | null; + +export = x; \ No newline at end of file diff --git a/node_modules/get-proto/Reflect.getPrototypeOf.js b/node_modules/get-proto/Reflect.getPrototypeOf.js new file mode 100644 index 0000000..e6c51be --- /dev/null +++ b/node_modules/get-proto/Reflect.getPrototypeOf.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./Reflect.getPrototypeOf')} */ +module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null; diff --git a/node_modules/get-proto/index.d.ts b/node_modules/get-proto/index.d.ts new file mode 100644 index 0000000..2c021f3 --- /dev/null +++ b/node_modules/get-proto/index.d.ts @@ -0,0 +1,5 @@ +declare function getProto(object: O): object | null; + +declare const x: typeof getProto | null; + +export = x; diff --git a/node_modules/get-proto/index.js b/node_modules/get-proto/index.js new file mode 100644 index 0000000..7e5747b --- /dev/null +++ b/node_modules/get-proto/index.js @@ -0,0 +1,27 @@ +'use strict'; + +var reflectGetProto = require('./Reflect.getPrototypeOf'); +var originalGetProto = require('./Object.getPrototypeOf'); + +var getDunderProto = require('dunder-proto/get'); + +/** @type {import('.')} */ +module.exports = reflectGetProto + ? function getProto(O) { + // @ts-expect-error TS can't narrow inside a closure, for some reason + return reflectGetProto(O); + } + : originalGetProto + ? function getProto(O) { + if (!O || (typeof O !== 'object' && typeof O !== 'function')) { + throw new TypeError('getProto: not an object'); + } + // @ts-expect-error TS can't narrow inside a closure, for some reason + return originalGetProto(O); + } + : getDunderProto + ? function getProto(O) { + // @ts-expect-error TS can't narrow inside a closure, for some reason + return getDunderProto(O); + } + : null; diff --git a/node_modules/get-proto/package.json b/node_modules/get-proto/package.json new file mode 100644 index 0000000..9c35cec --- /dev/null +++ b/node_modules/get-proto/package.json @@ -0,0 +1,81 @@ +{ + "name": "get-proto", + "version": "1.0.1", + "description": "Robustly get the [[Prototype]] of an object", + "main": "index.js", + "exports": { + ".": "./index.js", + "./Reflect.getPrototypeOf": "./Reflect.getPrototypeOf.js", + "./Object.getPrototypeOf": "./Object.getPrototypeOf.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "npx npm@\">=10.2\" audit --production", + "tests-only": "nyc tape 'test/**/*.js'", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/get-proto.git" + }, + "keywords": [ + "get", + "proto", + "prototype", + "getPrototypeOf", + "[[Prototype]]" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/get-proto/issues" + }, + "homepage": "https://github.com/ljharb/get-proto#readme", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.2", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "testling": { + "files": "test/index.js" + } +} diff --git a/node_modules/get-proto/test/index.js b/node_modules/get-proto/test/index.js new file mode 100644 index 0000000..5a2ece2 --- /dev/null +++ b/node_modules/get-proto/test/index.js @@ -0,0 +1,68 @@ +'use strict'; + +var test = require('tape'); + +var getProto = require('../'); + +test('getProto', function (t) { + t.equal(typeof getProto, 'function', 'is a function'); + + t.test('can get', { skip: !getProto }, function (st) { + if (getProto) { // TS doesn't understand tape's skip + var proto = { b: 2 }; + st.equal(getProto(proto), Object.prototype, 'proto: returns the [[Prototype]]'); + + st.test('nullish value', function (s2t) { + // @ts-expect-error + s2t['throws'](function () { return getProto(undefined); }, TypeError, 'undefined is not an object'); + // @ts-expect-error + s2t['throws'](function () { return getProto(null); }, TypeError, 'null is not an object'); + s2t.end(); + }); + + // @ts-expect-error + st['throws'](function () { getProto(true); }, 'throws for true'); + // @ts-expect-error + st['throws'](function () { getProto(false); }, 'throws for false'); + // @ts-expect-error + st['throws'](function () { getProto(42); }, 'throws for 42'); + // @ts-expect-error + st['throws'](function () { getProto(NaN); }, 'throws for NaN'); + // @ts-expect-error + st['throws'](function () { getProto(0); }, 'throws for +0'); + // @ts-expect-error + st['throws'](function () { getProto(-0); }, 'throws for -0'); + // @ts-expect-error + st['throws'](function () { getProto(Infinity); }, 'throws for ∞'); + // @ts-expect-error + st['throws'](function () { getProto(-Infinity); }, 'throws for -∞'); + // @ts-expect-error + st['throws'](function () { getProto(''); }, 'throws for empty string'); + // @ts-expect-error + st['throws'](function () { getProto('foo'); }, 'throws for non-empty string'); + st.equal(getProto(/a/g), RegExp.prototype); + st.equal(getProto(new Date()), Date.prototype); + st.equal(getProto(function () {}), Function.prototype); + st.equal(getProto([]), Array.prototype); + st.equal(getProto({}), Object.prototype); + + var nullObject = { __proto__: null }; + if ('toString' in nullObject) { + st.comment('no null objects in this engine'); + st.equal(getProto(nullObject), Object.prototype, '"null" object has Object.prototype as [[Prototype]]'); + } else { + st.equal(getProto(nullObject), null, 'null object has null [[Prototype]]'); + } + } + + st.end(); + }); + + t.test('can not get', { skip: !!getProto }, function (st) { + st.equal(getProto, null); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/get-proto/tsconfig.json b/node_modules/get-proto/tsconfig.json new file mode 100644 index 0000000..60fb90e --- /dev/null +++ b/node_modules/get-proto/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + //"target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/gopd/.eslintrc b/node_modules/gopd/.eslintrc new file mode 100644 index 0000000..e2550c0 --- /dev/null +++ b/node_modules/gopd/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-style": [2, "declaration"], + "id-length": 0, + "multiline-comment-style": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/gopd/.github/FUNDING.yml b/node_modules/gopd/.github/FUNDING.yml new file mode 100644 index 0000000..94a44a8 --- /dev/null +++ b/node_modules/gopd/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/gopd +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/gopd/CHANGELOG.md b/node_modules/gopd/CHANGELOG.md new file mode 100644 index 0000000..87f5727 --- /dev/null +++ b/node_modules/gopd/CHANGELOG.md @@ -0,0 +1,45 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.0](https://github.com/ljharb/gopd/compare/v1.1.0...v1.2.0) - 2024-12-03 + +### Commits + +- [New] add `gOPD` entry point; remove `get-intrinsic` [`5b61232`](https://github.com/ljharb/gopd/commit/5b61232dedea4591a314bcf16101b1961cee024e) + +## [v1.1.0](https://github.com/ljharb/gopd/compare/v1.0.1...v1.1.0) - 2024-11-29 + +### Commits + +- [New] add types [`f585e39`](https://github.com/ljharb/gopd/commit/f585e397886d270e4ba84e53d226e4f9ca2eb0e6) +- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `tape` [`0b8e4fd`](https://github.com/ljharb/gopd/commit/0b8e4fded64397a7726a9daa144a6cc9a5e2edfa) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`48378b2`](https://github.com/ljharb/gopd/commit/48378b2443f09a4f7efbd0fb6c3ee845a6cabcf3) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`78099ee`](https://github.com/ljharb/gopd/commit/78099eeed41bfdc134c912280483689cc8861c31) +- [Tests] replace `aud` with `npm audit` [`4e0d0ac`](https://github.com/ljharb/gopd/commit/4e0d0ac47619d24a75318a8e1f543ee04b2a2632) +- [meta] add missing `engines.node` [`1443316`](https://github.com/ljharb/gopd/commit/14433165d07835c680155b3dfd62d9217d735eca) +- [Deps] update `get-intrinsic` [`eee5f51`](https://github.com/ljharb/gopd/commit/eee5f51769f3dbaf578b70e2a3199116b01aa670) +- [Deps] update `get-intrinsic` [`550c378`](https://github.com/ljharb/gopd/commit/550c3780e3a9c77b62565712a001b4ed64ea61f5) +- [Dev Deps] add missing peer dep [`8c2ecf8`](https://github.com/ljharb/gopd/commit/8c2ecf848122e4e30abfc5b5086fb48b390dce75) + +## [v1.0.1](https://github.com/ljharb/gopd/compare/v1.0.0...v1.0.1) - 2022-11-01 + +### Commits + +- [Fix] actually export gOPD instead of dP [`4b624bf`](https://github.com/ljharb/gopd/commit/4b624bfbeff788c5e3ff16d9443a83627847234f) + +## v1.0.0 - 2022-11-01 + +### Commits + +- Initial implementation, tests, readme [`0911e01`](https://github.com/ljharb/gopd/commit/0911e012cd642092bd88b732c161c58bf4f20bea) +- Initial commit [`b84e33f`](https://github.com/ljharb/gopd/commit/b84e33f5808a805ac57ff88d4247ad935569acbe) +- [actions] add reusable workflows [`12ae28a`](https://github.com/ljharb/gopd/commit/12ae28ae5f50f86e750215b6e2188901646d0119) +- npm init [`280118b`](https://github.com/ljharb/gopd/commit/280118badb45c80b4483836b5cb5315bddf6e582) +- [meta] add `auto-changelog` [`bb78de5`](https://github.com/ljharb/gopd/commit/bb78de5639a180747fb290c28912beaaf1615709) +- [meta] create FUNDING.yml; add `funding` in package.json [`11c22e6`](https://github.com/ljharb/gopd/commit/11c22e6355bb01f24e7fac4c9bb3055eb5b25002) +- [meta] use `npmignore` to autogenerate an npmignore file [`4f4537a`](https://github.com/ljharb/gopd/commit/4f4537a843b39f698c52f072845092e6fca345bb) +- Only apps should have lockfiles [`c567022`](https://github.com/ljharb/gopd/commit/c567022a18573aa7951cf5399445d9840e23e98b) diff --git a/node_modules/gopd/LICENSE b/node_modules/gopd/LICENSE new file mode 100644 index 0000000..6abfe14 --- /dev/null +++ b/node_modules/gopd/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/gopd/README.md b/node_modules/gopd/README.md new file mode 100644 index 0000000..784e56a --- /dev/null +++ b/node_modules/gopd/README.md @@ -0,0 +1,40 @@ +# gopd [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation. + +## Usage + +```javascript +var gOPD = require('gopd'); +var assert = require('assert'); + +if (gOPD) { + assert.equal(typeof gOPD, 'function', 'descriptors supported'); + // use gOPD like Object.getOwnPropertyDescriptor here +} else { + assert.ok(!gOPD, 'descriptors not supported'); +} +``` + +[package-url]: https://npmjs.org/package/gopd +[npm-version-svg]: https://versionbadg.es/ljharb/gopd.svg +[deps-svg]: https://david-dm.org/ljharb/gopd.svg +[deps-url]: https://david-dm.org/ljharb/gopd +[dev-deps-svg]: https://david-dm.org/ljharb/gopd/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/gopd#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/gopd.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/gopd.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/gopd.svg +[downloads-url]: https://npm-stat.com/charts.html?package=gopd +[codecov-image]: https://codecov.io/gh/ljharb/gopd/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/gopd/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/gopd +[actions-url]: https://github.com/ljharb/gopd/actions diff --git a/node_modules/gopd/gOPD.d.ts b/node_modules/gopd/gOPD.d.ts new file mode 100644 index 0000000..def48a3 --- /dev/null +++ b/node_modules/gopd/gOPD.d.ts @@ -0,0 +1 @@ +export = Object.getOwnPropertyDescriptor; diff --git a/node_modules/gopd/gOPD.js b/node_modules/gopd/gOPD.js new file mode 100644 index 0000000..cf9616c --- /dev/null +++ b/node_modules/gopd/gOPD.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./gOPD')} */ +module.exports = Object.getOwnPropertyDescriptor; diff --git a/node_modules/gopd/index.d.ts b/node_modules/gopd/index.d.ts new file mode 100644 index 0000000..e228065 --- /dev/null +++ b/node_modules/gopd/index.d.ts @@ -0,0 +1,5 @@ +declare function gOPD(obj: O, prop: K): PropertyDescriptor | undefined; + +declare const fn: typeof gOPD | undefined | null; + +export = fn; \ No newline at end of file diff --git a/node_modules/gopd/index.js b/node_modules/gopd/index.js new file mode 100644 index 0000000..a4081b0 --- /dev/null +++ b/node_modules/gopd/index.js @@ -0,0 +1,15 @@ +'use strict'; + +/** @type {import('.')} */ +var $gOPD = require('./gOPD'); + +if ($gOPD) { + try { + $gOPD([], 'length'); + } catch (e) { + // IE 8 has a broken gOPD + $gOPD = null; + } +} + +module.exports = $gOPD; diff --git a/node_modules/gopd/package.json b/node_modules/gopd/package.json new file mode 100644 index 0000000..01c5ffa --- /dev/null +++ b/node_modules/gopd/package.json @@ -0,0 +1,77 @@ +{ + "name": "gopd", + "version": "1.2.0", + "description": "`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./gOPD": "./gOPD.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "tsc -p . && attw -P", + "lint": "eslint --ext=js,mjs .", + "postlint": "evalmd README.md", + "pretest": "npm run lint", + "tests-only": "tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/gopd.git" + }, + "keywords": [ + "ecmascript", + "javascript", + "getownpropertydescriptor", + "property", + "descriptor" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/gopd/issues" + }, + "homepage": "https://github.com/ljharb/gopd#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.0", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.0", + "@types/tape": "^5.6.5", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/gopd/test/index.js b/node_modules/gopd/test/index.js new file mode 100644 index 0000000..6f43453 --- /dev/null +++ b/node_modules/gopd/test/index.js @@ -0,0 +1,36 @@ +'use strict'; + +var test = require('tape'); +var gOPD = require('../'); + +test('gOPD', function (t) { + t.test('supported', { skip: !gOPD }, function (st) { + st.equal(typeof gOPD, 'function', 'is a function'); + + var obj = { x: 1 }; + st.ok('x' in obj, 'property exists'); + + // @ts-expect-error TS can't figure out narrowing from `skip` + var desc = gOPD(obj, 'x'); + st.deepEqual( + desc, + { + configurable: true, + enumerable: true, + value: 1, + writable: true + }, + 'descriptor is as expected' + ); + + st.end(); + }); + + t.test('not supported', { skip: !!gOPD }, function (st) { + st.notOk(gOPD, 'is falsy'); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/gopd/tsconfig.json b/node_modules/gopd/tsconfig.json new file mode 100644 index 0000000..d9a6668 --- /dev/null +++ b/node_modules/gopd/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/has-symbols/.eslintrc b/node_modules/has-symbols/.eslintrc new file mode 100644 index 0000000..2d9a66a --- /dev/null +++ b/node_modules/has-symbols/.eslintrc @@ -0,0 +1,11 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "max-statements-per-line": [2, { "max": 2 }], + "no-magic-numbers": 0, + "multiline-comment-style": 0, + } +} diff --git a/node_modules/has-symbols/.github/FUNDING.yml b/node_modules/has-symbols/.github/FUNDING.yml new file mode 100644 index 0000000..04cf87e --- /dev/null +++ b/node_modules/has-symbols/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-symbols +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/has-symbols/.nycrc b/node_modules/has-symbols/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/has-symbols/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/has-symbols/CHANGELOG.md b/node_modules/has-symbols/CHANGELOG.md new file mode 100644 index 0000000..cc3cf83 --- /dev/null +++ b/node_modules/has-symbols/CHANGELOG.md @@ -0,0 +1,91 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.0](https://github.com/inspect-js/has-symbols/compare/v1.0.3...v1.1.0) - 2024-12-02 + +### Commits + +- [actions] update workflows [`548c0bf`](https://github.com/inspect-js/has-symbols/commit/548c0bf8c9b1235458df7a1c0490b0064647a282) +- [actions] further shard; update action deps [`bec56bb`](https://github.com/inspect-js/has-symbols/commit/bec56bb0fb44b43a786686b944875a3175cf3ff3) +- [meta] use `npmignore` to autogenerate an npmignore file [`ac81032`](https://github.com/inspect-js/has-symbols/commit/ac81032809157e0a079e5264e9ce9b6f1275777e) +- [New] add types [`6469cbf`](https://github.com/inspect-js/has-symbols/commit/6469cbff1866cfe367b2b3d181d9296ec14b2a3d) +- [actions] update rebase action to use reusable workflow [`9c9d4d0`](https://github.com/inspect-js/has-symbols/commit/9c9d4d0d8938e4b267acdf8e421f4e92d1716d72) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`adb5887`](https://github.com/inspect-js/has-symbols/commit/adb5887ca9444849b08beb5caaa9e1d42320cdfb) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`13ec198`](https://github.com/inspect-js/has-symbols/commit/13ec198ec80f1993a87710af1606a1970b22c7cb) +- [Dev Deps] update `auto-changelog`, `core-js`, `tape` [`941be52`](https://github.com/inspect-js/has-symbols/commit/941be5248387cab1da72509b22acf3fdb223f057) +- [Tests] replace `aud` with `npm audit` [`74f49e9`](https://github.com/inspect-js/has-symbols/commit/74f49e9a9d17a443020784234a1c53ce765b3559) +- [Dev Deps] update `npmignore` [`9c0ac04`](https://github.com/inspect-js/has-symbols/commit/9c0ac0452a834f4c2a4b54044f2d6a89f17e9a70) +- [Dev Deps] add missing peer dep [`52337a5`](https://github.com/inspect-js/has-symbols/commit/52337a5621cced61f846f2afdab7707a8132cc12) + +## [v1.0.3](https://github.com/inspect-js/has-symbols/compare/v1.0.2...v1.0.3) - 2022-03-01 + +### Commits + +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`518b28f`](https://github.com/inspect-js/has-symbols/commit/518b28f6c5a516cbccae30794e40aa9f738b1693) +- [meta] add `bugs` and `homepage` fields; reorder package.json [`c480b13`](https://github.com/inspect-js/has-symbols/commit/c480b13fd6802b557e1cef9749872cb5fdeef744) +- [actions] reuse common workflows [`01d0ee0`](https://github.com/inspect-js/has-symbols/commit/01d0ee0a8d97c0947f5edb73eb722027a77b2b07) +- [actions] update codecov uploader [`6424ebe`](https://github.com/inspect-js/has-symbols/commit/6424ebe86b2c9c7c3d2e9bd4413a4e4f168cb275) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`dfa7e7f`](https://github.com/inspect-js/has-symbols/commit/dfa7e7ff38b594645d8c8222aab895157fa7e282) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0c8d436`](https://github.com/inspect-js/has-symbols/commit/0c8d43685c45189cea9018191d4fd7eca91c9d02) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`9026554`](https://github.com/inspect-js/has-symbols/commit/902655442a1bf88e72b42345494ef0c60f5d36ab) +- [readme] add actions and codecov badges [`eaa9682`](https://github.com/inspect-js/has-symbols/commit/eaa9682f990f481d3acf7a1c7600bec36f7b3adc) +- [Dev Deps] update `eslint`, `tape` [`bc7a3ba`](https://github.com/inspect-js/has-symbols/commit/bc7a3ba46f27b7743f8a2579732d59d1b9ac791e) +- [Dev Deps] update `eslint`, `auto-changelog` [`0ace00a`](https://github.com/inspect-js/has-symbols/commit/0ace00af08a88cdd1e6ce0d60357d941c60c2d9f) +- [meta] use `prepublishOnly` script for npm 7+ [`093f72b`](https://github.com/inspect-js/has-symbols/commit/093f72bc2b0ed00c781f444922a5034257bf561d) +- [Tests] test on all 16 minors [`9b80d3d`](https://github.com/inspect-js/has-symbols/commit/9b80d3d9102529f04c20ec5b1fcc6e38426c6b03) + +## [v1.0.2](https://github.com/inspect-js/has-symbols/compare/v1.0.1...v1.0.2) - 2021-02-27 + +### Fixed + +- [Fix] use a universal way to get the original Symbol [`#11`](https://github.com/inspect-js/has-symbols/issues/11) + +### Commits + +- [Tests] migrate tests to Github Actions [`90ae798`](https://github.com/inspect-js/has-symbols/commit/90ae79820bdfe7bc703d67f5f3c5e205f98556d3) +- [meta] do not publish github action workflow files [`29e60a1`](https://github.com/inspect-js/has-symbols/commit/29e60a1b7c25c7f1acf7acff4a9320d0d10c49b4) +- [Tests] run `nyc` on all tests [`8476b91`](https://github.com/inspect-js/has-symbols/commit/8476b915650d360915abe2522505abf4b0e8f0ae) +- [readme] fix repo URLs, remove defunct badges [`126288e`](https://github.com/inspect-js/has-symbols/commit/126288ecc1797c0a40247a6b78bcb2e0bc5d7036) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `core-js`, `get-own-property-symbols` [`d84bdfa`](https://github.com/inspect-js/has-symbols/commit/d84bdfa48ac5188abbb4904b42614cd6c030940a) +- [Tests] fix linting errors [`0df3070`](https://github.com/inspect-js/has-symbols/commit/0df3070b981b6c9f2ee530c09189a7f5c6def839) +- [actions] add "Allow Edits" workflow [`1e6bc29`](https://github.com/inspect-js/has-symbols/commit/1e6bc29b188f32b9648657b07eda08504be5aa9c) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`36cea2a`](https://github.com/inspect-js/has-symbols/commit/36cea2addd4e6ec435f35a2656b4e9ef82498e9b) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1278338`](https://github.com/inspect-js/has-symbols/commit/127833801865fbc2cc8979beb9ca869c7bfe8222) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1493254`](https://github.com/inspect-js/has-symbols/commit/1493254eda13db5fb8fc5e4a3e8324b3d196029d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js` [`b090bf2`](https://github.com/inspect-js/has-symbols/commit/b090bf214d3679a30edc1e2d729d466ab5183e1d) +- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`4addb7a`](https://github.com/inspect-js/has-symbols/commit/4addb7ab4dc73f927ae99928d68817554fc21dc0) +- [Dev Deps] update `auto-changelog`, `tape` [`81d0baf`](https://github.com/inspect-js/has-symbols/commit/81d0baf3816096a89a8558e8043895f7a7d10d8b) +- [Dev Deps] update `auto-changelog`; add `aud` [`1a4e561`](https://github.com/inspect-js/has-symbols/commit/1a4e5612c25d91c3a03d509721d02630bc4fe3da) +- [readme] remove unused testling URLs [`3000941`](https://github.com/inspect-js/has-symbols/commit/3000941f958046e923ed8152edb1ef4a599e6fcc) +- [Tests] only audit prod deps [`692e974`](https://github.com/inspect-js/has-symbols/commit/692e9743c912410e9440207631a643a34b4741a1) +- [Dev Deps] update `@ljharb/eslint-config` [`51c946c`](https://github.com/inspect-js/has-symbols/commit/51c946c7f6baa793ec5390bb5a45cdce16b4ba76) + +## [v1.0.1](https://github.com/inspect-js/has-symbols/compare/v1.0.0...v1.0.1) - 2019-11-16 + +### Commits + +- [Tests] use shared travis-ci configs [`ce396c9`](https://github.com/inspect-js/has-symbols/commit/ce396c9419ff11c43d0da5d05cdbb79f7fb42229) +- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v4.9`; use `nvm install-latest-npm` [`0690732`](https://github.com/inspect-js/has-symbols/commit/0690732801f47ab429f39ba1962f522d5c462d6b) +- [meta] add `auto-changelog` [`2163d0b`](https://github.com/inspect-js/has-symbols/commit/2163d0b7f36343076b8f947cd1667dd1750f26fc) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `safe-publish-latest`, `tape` [`8e0951f`](https://github.com/inspect-js/has-symbols/commit/8e0951f1a7a2e52068222b7bb73511761e6e4d9c) +- [actions] add automatic rebasing / merge commit blocking [`b09cdb7`](https://github.com/inspect-js/has-symbols/commit/b09cdb7cd7ee39e7a769878f56e2d6066f5ccd1d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `core-js`, `get-own-property-symbols`, `tape` [`1dd42cd`](https://github.com/inspect-js/has-symbols/commit/1dd42cd86183ed0c50f99b1062345c458babca91) +- [meta] create FUNDING.yml [`aa57a17`](https://github.com/inspect-js/has-symbols/commit/aa57a17b19708906d1927f821ea8e73394d84ca4) +- Only apps should have lockfiles [`a2d8bea`](https://github.com/inspect-js/has-symbols/commit/a2d8bea23a97d15c09eaf60f5b107fcf9a4d57aa) +- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`9e96cb7`](https://github.com/inspect-js/has-symbols/commit/9e96cb783746cbed0c10ef78e599a8eaa7ebe193) +- [meta] add `funding` field [`a0b32cf`](https://github.com/inspect-js/has-symbols/commit/a0b32cf68e803f963c1639b6d47b0a9d6440bab0) +- [Dev Deps] update `safe-publish-latest` [`cb9f0a5`](https://github.com/inspect-js/has-symbols/commit/cb9f0a521a3a1790f1064d437edd33bb6c3d6af0) + +## v1.0.0 - 2016-09-19 + +### Commits + +- Tests. [`ecb6eb9`](https://github.com/inspect-js/has-symbols/commit/ecb6eb934e4883137f3f93b965ba5e0a98df430d) +- package.json [`88a337c`](https://github.com/inspect-js/has-symbols/commit/88a337cee0864a0da35f5d19e69ff0ef0150e46a) +- Initial commit [`42e1e55`](https://github.com/inspect-js/has-symbols/commit/42e1e5502536a2b8ac529c9443984acd14836b1c) +- Initial implementation. [`33f5cc6`](https://github.com/inspect-js/has-symbols/commit/33f5cc6cdff86e2194b081ee842bfdc63caf43fb) +- read me [`01f1170`](https://github.com/inspect-js/has-symbols/commit/01f1170188ff7cb1558aa297f6ba5b516c6d7b0c) diff --git a/node_modules/has-symbols/LICENSE b/node_modules/has-symbols/LICENSE new file mode 100644 index 0000000..df31cbf --- /dev/null +++ b/node_modules/has-symbols/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/has-symbols/README.md b/node_modules/has-symbols/README.md new file mode 100644 index 0000000..33905f0 --- /dev/null +++ b/node_modules/has-symbols/README.md @@ -0,0 +1,46 @@ +# has-symbols [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has Symbol support. Supports spec, or shams. + +## Example + +```js +var hasSymbols = require('has-symbols'); + +hasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable. + +var hasSymbolsKinda = require('has-symbols/shams'); +hasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-symbols +[2]: https://versionbadg.es/inspect-js/has-symbols.svg +[5]: https://david-dm.org/inspect-js/has-symbols.svg +[6]: https://david-dm.org/inspect-js/has-symbols +[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies +[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-symbols.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols +[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols +[actions-url]: https://github.com/inspect-js/has-symbols/actions diff --git a/node_modules/has-symbols/index.d.ts b/node_modules/has-symbols/index.d.ts new file mode 100644 index 0000000..9b98595 --- /dev/null +++ b/node_modules/has-symbols/index.d.ts @@ -0,0 +1,3 @@ +declare function hasNativeSymbols(): boolean; + +export = hasNativeSymbols; \ No newline at end of file diff --git a/node_modules/has-symbols/index.js b/node_modules/has-symbols/index.js new file mode 100644 index 0000000..fa65265 --- /dev/null +++ b/node_modules/has-symbols/index.js @@ -0,0 +1,14 @@ +'use strict'; + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; +var hasSymbolSham = require('./shams'); + +/** @type {import('.')} */ +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { return false; } + if (typeof Symbol !== 'function') { return false; } + if (typeof origSymbol('foo') !== 'symbol') { return false; } + if (typeof Symbol('bar') !== 'symbol') { return false; } + + return hasSymbolSham(); +}; diff --git a/node_modules/has-symbols/package.json b/node_modules/has-symbols/package.json new file mode 100644 index 0000000..d835e20 --- /dev/null +++ b/node_modules/has-symbols/package.json @@ -0,0 +1,111 @@ +{ + "name": "has-symbols", + "version": "1.1.0", + "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.", + "main": "index.js", + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "tests-only": "npm run test:stock && npm run test:shams", + "test:stock": "nyc node test", + "test:staging": "nyc node --harmony --es-staging test", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git://github.com/inspect-js/has-symbols.git" + }, + "keywords": [ + "Symbol", + "symbols", + "typeof", + "sham", + "polyfill", + "native", + "core-js", + "ES6" + ], + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/has-symbols/issues" + }, + "homepage": "https://github.com/ljharb/has-symbols#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.0", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.0", + "@types/core-js": "^2.5.8", + "@types/tape": "^5.6.5", + "auto-changelog": "^2.5.0", + "core-js": "^2.6.12", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "get-own-property-symbols": "^0.9.5", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "types" + ] + } +} diff --git a/node_modules/has-symbols/shams.d.ts b/node_modules/has-symbols/shams.d.ts new file mode 100644 index 0000000..8d0bf24 --- /dev/null +++ b/node_modules/has-symbols/shams.d.ts @@ -0,0 +1,3 @@ +declare function hasSymbolShams(): boolean; + +export = hasSymbolShams; \ No newline at end of file diff --git a/node_modules/has-symbols/shams.js b/node_modules/has-symbols/shams.js new file mode 100644 index 0000000..f97b474 --- /dev/null +++ b/node_modules/has-symbols/shams.js @@ -0,0 +1,45 @@ +'use strict'; + +/** @type {import('./shams')} */ +/* eslint complexity: [2, 18], max-statements: [2, 33] */ +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } + if (typeof Symbol.iterator === 'symbol') { return true; } + + /** @type {{ [k in symbol]?: unknown }} */ + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + if (typeof sym === 'string') { return false; } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } + + // temp disabled per https://github.com/ljharb/object.assign/issues/17 + // if (sym instanceof Symbol) { return false; } + // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 + // if (!(symObj instanceof Symbol)) { return false; } + + // if (typeof Symbol.prototype.toString !== 'function') { return false; } + // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } + + var symVal = 42; + obj[sym] = symVal; + for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } + + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { return false; } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + // eslint-disable-next-line no-extra-parens + var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym)); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } + } + + return true; +}; diff --git a/node_modules/has-symbols/test/index.js b/node_modules/has-symbols/test/index.js new file mode 100644 index 0000000..352129c --- /dev/null +++ b/node_modules/has-symbols/test/index.js @@ -0,0 +1,22 @@ +'use strict'; + +var test = require('tape'); +var hasSymbols = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbols, 'function', 'is a function'); + t.equal(typeof hasSymbols(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbols are supported', { skip: !hasSymbols() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbols are not supported', { skip: hasSymbols() }, function (t) { + t.equal(typeof Symbol, 'undefined', 'global Symbol is undefined'); + t.equal(typeof Object.getOwnPropertySymbols, 'undefined', 'Object.getOwnPropertySymbols does not exist'); + t.end(); +}); diff --git a/node_modules/has-symbols/test/shams/core-js.js b/node_modules/has-symbols/test/shams/core-js.js new file mode 100644 index 0000000..1a29024 --- /dev/null +++ b/node_modules/has-symbols/test/shams/core-js.js @@ -0,0 +1,29 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error TS is stupid and doesn't know about top level return + return; +} + +var hasSymbols = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling'); + require('core-js/fn/symbol'); + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasSymbolsAfter = hasSymbols(); + t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-symbols/test/shams/get-own-property-symbols.js b/node_modules/has-symbols/test/shams/get-own-property-symbols.js new file mode 100644 index 0000000..e0296f8 --- /dev/null +++ b/node_modules/has-symbols/test/shams/get-own-property-symbols.js @@ -0,0 +1,29 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error TS is stupid and doesn't know about top level return + return; +} + +var hasSymbols = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling'); + + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasSymbolsAfter = hasSymbols(); + t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-symbols/test/tests.js b/node_modules/has-symbols/test/tests.js new file mode 100644 index 0000000..66a2cb8 --- /dev/null +++ b/node_modules/has-symbols/test/tests.js @@ -0,0 +1,58 @@ +'use strict'; + +/** @type {(t: import('tape').Test) => false | void} */ +// eslint-disable-next-line consistent-return +module.exports = function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + + if (typeof Symbol !== 'function') { return false; } + + t.notEqual(Symbol(), Symbol(), 'two symbols are not equal'); + + /* + t.equal( + Symbol.prototype.toString.call(Symbol('foo')), + Symbol.prototype.toString.call(Symbol('foo')), + 'two symbols with the same description stringify the same' + ); + */ + + /* + var foo = Symbol('foo'); + + t.notEqual( + String(foo), + String(Symbol('bar')), + 'two symbols with different descriptions do not stringify the same' + ); + */ + + t.equal(typeof Symbol.prototype.toString, 'function', 'Symbol#toString is a function'); + // t.equal(String(foo), Symbol.prototype.toString.call(foo), 'Symbol#toString equals String of the same symbol'); + + t.equal(typeof Object.getOwnPropertySymbols, 'function', 'Object.getOwnPropertySymbols is a function'); + + /** @type {{ [k in symbol]?: unknown }} */ + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + t.notEqual(typeof sym, 'string', 'Symbol is not a string'); + t.equal(Object.prototype.toString.call(sym), '[object Symbol]', 'symbol primitive Object#toStrings properly'); + t.equal(Object.prototype.toString.call(symObj), '[object Symbol]', 'symbol primitive Object#toStrings properly'); + + var symVal = 42; + obj[sym] = symVal; + // eslint-disable-next-line no-restricted-syntax, no-unused-vars + for (var _ in obj) { t.fail('symbol property key was found in for..in of object'); } + + t.deepEqual(Object.keys(obj), [], 'no enumerable own keys on symbol-valued object'); + t.deepEqual(Object.getOwnPropertyNames(obj), [], 'no own names on symbol-valued object'); + t.deepEqual(Object.getOwnPropertySymbols(obj), [sym], 'one own symbol on symbol-valued object'); + t.equal(Object.prototype.propertyIsEnumerable.call(obj, sym), true, 'symbol is enumerable'); + t.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), { + configurable: true, + enumerable: true, + value: 42, + writable: true + }, 'property descriptor is correct'); +}; diff --git a/node_modules/has-symbols/tsconfig.json b/node_modules/has-symbols/tsconfig.json new file mode 100644 index 0000000..ba99af4 --- /dev/null +++ b/node_modules/has-symbols/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ES2021", + "maxNodeModuleJsDepth": 0, + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/has-tostringtag/.eslintrc b/node_modules/has-tostringtag/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/has-tostringtag/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/has-tostringtag/.github/FUNDING.yml b/node_modules/has-tostringtag/.github/FUNDING.yml new file mode 100644 index 0000000..7a450e7 --- /dev/null +++ b/node_modules/has-tostringtag/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-tostringtag +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/has-tostringtag/.nycrc b/node_modules/has-tostringtag/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/has-tostringtag/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/has-tostringtag/CHANGELOG.md b/node_modules/has-tostringtag/CHANGELOG.md new file mode 100644 index 0000000..eb186ec --- /dev/null +++ b/node_modules/has-tostringtag/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/inspect-js/has-tostringtag/compare/v1.0.1...v1.0.2) - 2024-02-01 + +### Fixed + +- [Fix] move `has-symbols` back to prod deps [`#3`](https://github.com/inspect-js/has-tostringtag/issues/3) + +## [v1.0.1](https://github.com/inspect-js/has-tostringtag/compare/v1.0.0...v1.0.1) - 2024-02-01 + +### Commits + +- [patch] add types [`9276414`](https://github.com/inspect-js/has-tostringtag/commit/9276414b22fab3eeb234688841722c4be113201f) +- [meta] use `npmignore` to autogenerate an npmignore file [`5c0dcd1`](https://github.com/inspect-js/has-tostringtag/commit/5c0dcd1ff66419562a30d1fd88b966cc36bce5fc) +- [actions] reuse common workflows [`dee9509`](https://github.com/inspect-js/has-tostringtag/commit/dee950904ab5719b62cf8d73d2ac950b09093266) +- [actions] update codecov uploader [`b8cb3a0`](https://github.com/inspect-js/has-tostringtag/commit/b8cb3a0b8ffbb1593012c4c2daa45fb25642825d) +- [Tests] generate coverage [`be5b288`](https://github.com/inspect-js/has-tostringtag/commit/be5b28889e2735cdbcef387f84c2829995f2f05e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`69a0827`](https://github.com/inspect-js/has-tostringtag/commit/69a0827974e9b877b2c75b70b057555da8f25a65) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`4c9e210`](https://github.com/inspect-js/has-tostringtag/commit/4c9e210a5682f0557a3235d36b68ce809d7fb825) +- [actions] update rebase action to use reusable workflow [`ca8dcd3`](https://github.com/inspect-js/has-tostringtag/commit/ca8dcd3a6f3f5805d7e3fd461b654aedba0946e7) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `npmignore`, `tape` [`07f3eaf`](https://github.com/inspect-js/has-tostringtag/commit/07f3eafa45dd98208c94479737da77f9a69b94c4) +- [Deps] update `has-symbols` [`999e009`](https://github.com/inspect-js/has-tostringtag/commit/999e0095a7d1749a58f55472ec8bf8108cdfdcf3) +- [Tests] remove staging tests since they fail on modern node [`9d9526b`](https://github.com/inspect-js/has-tostringtag/commit/9d9526b1dc1ca7f2292b52efda4c3d857b0e39bd) + +## v1.0.0 - 2021-08-05 + +### Commits + +- Tests [`6b6f573`](https://github.com/inspect-js/has-tostringtag/commit/6b6f5734dc2058badb300ff0783efdad95fe1a65) +- Initial commit [`2f8190e`](https://github.com/inspect-js/has-tostringtag/commit/2f8190e799fac32ba9b95a076c0255e01d7ce475) +- [meta] do not publish github action workflow files [`6e08cc4`](https://github.com/inspect-js/has-tostringtag/commit/6e08cc4e0fea7ec71ef66e70734b2af2c4a8b71b) +- readme [`94bed6c`](https://github.com/inspect-js/has-tostringtag/commit/94bed6c9560cbbfda034f8d6c260bb7b0db33c1a) +- npm init [`be67840`](https://github.com/inspect-js/has-tostringtag/commit/be67840ab92ee7adb98bcc65261975543f815fa5) +- Implementation [`c4914ec`](https://github.com/inspect-js/has-tostringtag/commit/c4914ecc51ddee692c85b471ae0a5d8123030fbf) +- [meta] use `auto-changelog` [`4aaf768`](https://github.com/inspect-js/has-tostringtag/commit/4aaf76895ae01d7b739f2b19f967ef2372506cd7) +- Only apps should have lockfiles [`bc4d99e`](https://github.com/inspect-js/has-tostringtag/commit/bc4d99e4bf494afbaa235c5f098df6e642edf724) +- [meta] add `safe-publish-latest` [`6523c05`](https://github.com/inspect-js/has-tostringtag/commit/6523c05c9b87140f3ae74c9daf91633dd9ff4e1f) diff --git a/node_modules/has-tostringtag/LICENSE b/node_modules/has-tostringtag/LICENSE new file mode 100644 index 0000000..7948bc0 --- /dev/null +++ b/node_modules/has-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/has-tostringtag/README.md b/node_modules/has-tostringtag/README.md new file mode 100644 index 0000000..67a5e92 --- /dev/null +++ b/node_modules/has-tostringtag/README.md @@ -0,0 +1,46 @@ +# has-tostringtag [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams. + +## Example + +```js +var hasSymbolToStringTag = require('has-tostringtag'); + +hasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable. + +var hasSymbolToStringTagKinda = require('has-tostringtag/shams'); +hasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-tostringtag +[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg +[5]: https://david-dm.org/inspect-js/has-tostringtag.svg +[6]: https://david-dm.org/inspect-js/has-tostringtag +[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies +[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag +[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag +[actions-url]: https://github.com/inspect-js/has-tostringtag/actions diff --git a/node_modules/has-tostringtag/index.d.ts b/node_modules/has-tostringtag/index.d.ts new file mode 100644 index 0000000..a61bc60 --- /dev/null +++ b/node_modules/has-tostringtag/index.d.ts @@ -0,0 +1,3 @@ +declare function hasToStringTag(): boolean; + +export = hasToStringTag; diff --git a/node_modules/has-tostringtag/index.js b/node_modules/has-tostringtag/index.js new file mode 100644 index 0000000..77bfa00 --- /dev/null +++ b/node_modules/has-tostringtag/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasSymbols = require('has-symbols'); + +/** @type {import('.')} */ +module.exports = function hasToStringTag() { + return hasSymbols() && typeof Symbol.toStringTag === 'symbol'; +}; diff --git a/node_modules/has-tostringtag/package.json b/node_modules/has-tostringtag/package.json new file mode 100644 index 0000000..e5b0300 --- /dev/null +++ b/node_modules/has-tostringtag/package.json @@ -0,0 +1,108 @@ +{ + "name": "has-tostringtag", + "version": "1.0.2", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", + "license": "MIT", + "main": "index.js", + "types": "./index.d.ts", + "exports": { + ".": [ + { + "types": "./index.d.ts", + "default": "./index.js" + }, + "./index.js" + ], + "./shams": [ + { + "types": "./shams.d.ts", + "default": "./shams.js" + }, + "./shams.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "aud --production", + "tests-only": "npm run test:stock && npm run test:shams", + "test:stock": "nyc node test", + "test:staging": "nyc node --harmony --es-staging test", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "lint": "eslint --ext=js,mjs .", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/has-tostringtag.git" + }, + "bugs": { + "url": "https://github.com/inspect-js/has-tostringtag/issues" + }, + "homepage": "https://github.com/inspect-js/has-tostringtag#readme", + "keywords": [ + "javascript", + "ecmascript", + "symbol", + "symbols", + "tostringtag", + "Symbol.toStringTag" + ], + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/has-symbols": "^1.0.2", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "core-js": "^2.6.12", + "eslint": "=8.8.0", + "get-own-property-symbols": "^0.9.5", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "dependencies": { + "has-symbols": "^1.0.3" + } +} diff --git a/node_modules/has-tostringtag/shams.d.ts b/node_modules/has-tostringtag/shams.d.ts new file mode 100644 index 0000000..ea4aeec --- /dev/null +++ b/node_modules/has-tostringtag/shams.d.ts @@ -0,0 +1,3 @@ +declare function hasToStringTagShams(): boolean; + +export = hasToStringTagShams; diff --git a/node_modules/has-tostringtag/shams.js b/node_modules/has-tostringtag/shams.js new file mode 100644 index 0000000..809580d --- /dev/null +++ b/node_modules/has-tostringtag/shams.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasSymbols = require('has-symbols/shams'); + +/** @type {import('.')} */ +module.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; +}; diff --git a/node_modules/has-tostringtag/test/index.js b/node_modules/has-tostringtag/test/index.js new file mode 100644 index 0000000..0679afd --- /dev/null +++ b/node_modules/has-tostringtag/test/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var test = require('tape'); +var hasSymbolToStringTag = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbolToStringTag, 'function', 'is a function'); + t.equal(typeof hasSymbolToStringTag(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbol.toStringTag exists', { skip: !hasSymbolToStringTag() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbol.toStringTag does not exist', { skip: hasSymbolToStringTag() }, function (t) { + t.equal(typeof Symbol === 'undefined' ? 'undefined' : typeof Symbol.toStringTag, 'undefined', 'global Symbol.toStringTag is undefined'); + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/shams/core-js.js b/node_modules/has-tostringtag/test/shams/core-js.js new file mode 100644 index 0000000..7ab214d --- /dev/null +++ b/node_modules/has-tostringtag/test/shams/core-js.js @@ -0,0 +1,31 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol') { + test('has native Symbol.toStringTag support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol.toStringTag, 'symbol'); + t.end(); + }); + // @ts-expect-error CJS has top-level return + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + // @ts-expect-error no types defined + require('core-js/fn/symbol'); + // @ts-expect-error no types defined + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js new file mode 100644 index 0000000..c8af44c --- /dev/null +++ b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js @@ -0,0 +1,30 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error CJS has top-level return + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + + // @ts-expect-error no types defined + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/tests.js b/node_modules/has-tostringtag/test/tests.js new file mode 100644 index 0000000..2aa0d48 --- /dev/null +++ b/node_modules/has-tostringtag/test/tests.js @@ -0,0 +1,15 @@ +'use strict'; + +// eslint-disable-next-line consistent-return +module.exports = /** @type {(t: import('tape').Test) => void | false} */ function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + t.ok(Symbol.toStringTag, 'Symbol.toStringTag exists'); + + if (typeof Symbol !== 'function' || !Symbol.toStringTag) { return false; } + + /** @type {{ [Symbol.toStringTag]?: 'test'}} */ + var obj = {}; + obj[Symbol.toStringTag] = 'test'; + + t.equal(Object.prototype.toString.call(obj), '[object test]'); +}; diff --git a/node_modules/has-tostringtag/tsconfig.json b/node_modules/has-tostringtag/tsconfig.json new file mode 100644 index 0000000..2002ce5 --- /dev/null +++ b/node_modules/has-tostringtag/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/hasown/.eslintrc b/node_modules/hasown/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/hasown/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/hasown/.github/FUNDING.yml b/node_modules/hasown/.github/FUNDING.yml new file mode 100644 index 0000000..d68c8b7 --- /dev/null +++ b/node_modules/hasown/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/hasown +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/hasown/.nycrc b/node_modules/hasown/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/hasown/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/hasown/CHANGELOG.md b/node_modules/hasown/CHANGELOG.md new file mode 100644 index 0000000..2b0a980 --- /dev/null +++ b/node_modules/hasown/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v2.0.2](https://github.com/inspect-js/hasOwn/compare/v2.0.1...v2.0.2) - 2024-03-10 + +### Commits + +- [types] use shared config [`68e9d4d`](https://github.com/inspect-js/hasOwn/commit/68e9d4dab6facb4f05f02c6baea94a3f2a4e44b2) +- [actions] remove redundant finisher; use reusable workflow [`241a68e`](https://github.com/inspect-js/hasOwn/commit/241a68e13ea1fe52bec5ba7f74144befc31fae7b) +- [Tests] increase coverage [`4125c0d`](https://github.com/inspect-js/hasOwn/commit/4125c0d6121db56ae30e38346dfb0c000b04f0a7) +- [Tests] skip `npm ls` in old node due to TS [`01b9282`](https://github.com/inspect-js/hasOwn/commit/01b92822f9971dea031eafdd14767df41d61c202) +- [types] improve predicate type [`d340f85`](https://github.com/inspect-js/hasOwn/commit/d340f85ce02e286ef61096cbbb6697081d40a12b) +- [Dev Deps] update `tape` [`70089fc`](https://github.com/inspect-js/hasOwn/commit/70089fcf544e64acc024cbe60f5a9b00acad86de) +- [Tests] use `@arethetypeswrong/cli` [`50b272c`](https://github.com/inspect-js/hasOwn/commit/50b272c829f40d053a3dd91c9796e0ac0b2af084) + +## [v2.0.1](https://github.com/inspect-js/hasOwn/compare/v2.0.0...v2.0.1) - 2024-02-10 + +### Commits + +- [types] use a handwritten d.ts file; fix exported type [`012b989`](https://github.com/inspect-js/hasOwn/commit/012b9898ccf91dc441e2ebf594ff70270a5fda58) +- [Dev Deps] update `@types/function-bind`, `@types/mock-property`, `@types/tape`, `aud`, `mock-property`, `npmignore`, `tape`, `typescript` [`977a56f`](https://github.com/inspect-js/hasOwn/commit/977a56f51a1f8b20566f3c471612137894644025) +- [meta] add `sideEffects` flag [`3a60b7b`](https://github.com/inspect-js/hasOwn/commit/3a60b7bf42fccd8c605e5f145a6fcc83b13cb46f) + +## [v2.0.0](https://github.com/inspect-js/hasOwn/compare/v1.0.1...v2.0.0) - 2023-10-19 + +### Commits + +- revamped implementation, tests, readme [`72bf8b3`](https://github.com/inspect-js/hasOwn/commit/72bf8b338e77a638f0a290c63ffaed18339c36b4) +- [meta] revamp package.json [`079775f`](https://github.com/inspect-js/hasOwn/commit/079775fb1ec72c1c6334069593617a0be3847458) +- Only apps should have lockfiles [`6640e23`](https://github.com/inspect-js/hasOwn/commit/6640e233d1bb8b65260880f90787637db157d215) + +## v1.0.1 - 2023-10-10 + +### Commits + +- Initial commit [`8dbfde6`](https://github.com/inspect-js/hasOwn/commit/8dbfde6e8fb0ebb076fab38d138f2984eb340a62) diff --git a/node_modules/hasown/LICENSE b/node_modules/hasown/LICENSE new file mode 100644 index 0000000..0314929 --- /dev/null +++ b/node_modules/hasown/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/hasown/README.md b/node_modules/hasown/README.md new file mode 100644 index 0000000..f759b8a --- /dev/null +++ b/node_modules/hasown/README.md @@ -0,0 +1,40 @@ +# hasown [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A robust, ES3 compatible, "has own property" predicate. + +## Example + +```js +const assert = require('assert'); +const hasOwn = require('hasown'); + +assert.equal(hasOwn({}, 'toString'), false); +assert.equal(hasOwn([], 'length'), true); +assert.equal(hasOwn({ a: 42 }, 'a'), true); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/hasown +[npm-version-svg]: https://versionbadg.es/inspect-js/hasown.svg +[deps-svg]: https://david-dm.org/inspect-js/hasOwn.svg +[deps-url]: https://david-dm.org/inspect-js/hasOwn +[dev-deps-svg]: https://david-dm.org/inspect-js/hasOwn/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/hasOwn#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/hasown.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/hasown.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/hasown.svg +[downloads-url]: https://npm-stat.com/charts.html?package=hasown +[codecov-image]: https://codecov.io/gh/inspect-js/hasOwn/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/hasOwn/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/hasOwn +[actions-url]: https://github.com/inspect-js/hasOwn/actions diff --git a/node_modules/hasown/index.d.ts b/node_modules/hasown/index.d.ts new file mode 100644 index 0000000..aafdf3b --- /dev/null +++ b/node_modules/hasown/index.d.ts @@ -0,0 +1,3 @@ +declare function hasOwn(o: O, p: K): o is O & Record; + +export = hasOwn; diff --git a/node_modules/hasown/index.js b/node_modules/hasown/index.js new file mode 100644 index 0000000..34e6059 --- /dev/null +++ b/node_modules/hasown/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var call = Function.prototype.call; +var $hasOwn = Object.prototype.hasOwnProperty; +var bind = require('function-bind'); + +/** @type {import('.')} */ +module.exports = bind.call(call, $hasOwn); diff --git a/node_modules/hasown/package.json b/node_modules/hasown/package.json new file mode 100644 index 0000000..8502e13 --- /dev/null +++ b/node_modules/hasown/package.json @@ -0,0 +1,92 @@ +{ + "name": "hasown", + "version": "2.0.2", + "description": "A robust, ES3 compatible, \"has own property\" predicate.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "types": "index.d.ts", + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "npm run tsc", + "pretest": "npm run lint", + "tsc": "tsc -p .", + "posttsc": "attw -P", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/hasOwn.git" + }, + "keywords": [ + "has", + "hasOwnProperty", + "hasOwn", + "has-own", + "own", + "has", + "property", + "in", + "javascript", + "ecmascript" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/inspect-js/hasOwn/issues" + }, + "homepage": "https://github.com/inspect-js/hasOwn#readme", + "dependencies": { + "function-bind": "^1.1.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.15.1", + "@ljharb/eslint-config": "^21.1.0", + "@ljharb/tsconfig": "^0.2.0", + "@types/function-bind": "^1.1.10", + "@types/mock-property": "^1.0.2", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "mock-property": "^1.0.3", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.5", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "test" + ] + } +} diff --git a/node_modules/hasown/tsconfig.json b/node_modules/hasown/tsconfig.json new file mode 100644 index 0000000..0930c56 --- /dev/null +++ b/node_modules/hasown/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@ljharb/tsconfig", + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/math-intrinsics/.eslintrc b/node_modules/math-intrinsics/.eslintrc new file mode 100644 index 0000000..d90a1bc --- /dev/null +++ b/node_modules/math-intrinsics/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "eqeqeq": ["error", "allow-null"], + "id-length": "off", + "new-cap": ["error", { + "capIsNewExceptions": [ + "RequireObjectCoercible", + "ToObject", + ], + }], + }, +} diff --git a/node_modules/math-intrinsics/.github/FUNDING.yml b/node_modules/math-intrinsics/.github/FUNDING.yml new file mode 100644 index 0000000..868f4ff --- /dev/null +++ b/node_modules/math-intrinsics/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/math-intrinsics +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/math-intrinsics/CHANGELOG.md b/node_modules/math-intrinsics/CHANGELOG.md new file mode 100644 index 0000000..9cf48f5 --- /dev/null +++ b/node_modules/math-intrinsics/CHANGELOG.md @@ -0,0 +1,24 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.0](https://github.com/es-shims/math-intrinsics/compare/v1.0.0...v1.1.0) - 2024-12-18 + +### Commits + +- [New] add `round` [`7cfb044`](https://github.com/es-shims/math-intrinsics/commit/7cfb04460c0fbdf1ca101eecbac3f59d11994130) +- [Tests] add attw [`e96be8f`](https://github.com/es-shims/math-intrinsics/commit/e96be8fbf58449eafe976446a0470e6ea561ad8d) +- [Dev Deps] update `@types/tape` [`30d0023`](https://github.com/es-shims/math-intrinsics/commit/30d00234ce8a3fa0094a61cd55d6686eb91e36ec) + +## v1.0.0 - 2024-12-11 + +### Commits + +- Initial implementation, tests, readme, types [`b898caa`](https://github.com/es-shims/math-intrinsics/commit/b898caae94e9994a94a42b8740f7bbcfd0a868fe) +- Initial commit [`02745b0`](https://github.com/es-shims/math-intrinsics/commit/02745b03a62255af8a332771987b55d127538d9c) +- [New] add `constants/maxArrayLength`, `mod` [`b978178`](https://github.com/es-shims/math-intrinsics/commit/b978178a57685bd23ed1c7efe2137f3784f5fcc5) +- npm init [`a39fc57`](https://github.com/es-shims/math-intrinsics/commit/a39fc57e5639a645d0bd52a0dc56202480223be2) +- Only apps should have lockfiles [`9451580`](https://github.com/es-shims/math-intrinsics/commit/94515800fb34db4f3cc7e99290042d45609ac7bd) diff --git a/node_modules/math-intrinsics/LICENSE b/node_modules/math-intrinsics/LICENSE new file mode 100644 index 0000000..34995e7 --- /dev/null +++ b/node_modules/math-intrinsics/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/math-intrinsics/README.md b/node_modules/math-intrinsics/README.md new file mode 100644 index 0000000..4a66dcf --- /dev/null +++ b/node_modules/math-intrinsics/README.md @@ -0,0 +1,50 @@ +# math-intrinsics [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +ES Math-related intrinsics and helpers, robustly cached. + + - `abs` + - `floor` + - `isFinite` + - `isInteger` + - `isNaN` + - `isNegativeZero` + - `max` + - `min` + - `mod` + - `pow` + - `round` + - `sign` + - `constants/maxArrayLength` + - `constants/maxSafeInteger` + - `constants/maxValue` + + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/math-intrinsics +[npm-version-svg]: https://versionbadg.es/es-shims/math-intrinsics.svg +[deps-svg]: https://david-dm.org/es-shims/math-intrinsics.svg +[deps-url]: https://david-dm.org/es-shims/math-intrinsics +[dev-deps-svg]: https://david-dm.org/es-shims/math-intrinsics/dev-status.svg +[dev-deps-url]: https://david-dm.org/es-shims/math-intrinsics#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/math-intrinsics.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/math-intrinsics.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-object.svg +[downloads-url]: https://npm-stat.com/charts.html?package=math-intrinsics +[codecov-image]: https://codecov.io/gh/es-shims/math-intrinsics/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/es-shims/math-intrinsics/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/math-intrinsics +[actions-url]: https://github.com/es-shims/math-intrinsics/actions diff --git a/node_modules/math-intrinsics/abs.d.ts b/node_modules/math-intrinsics/abs.d.ts new file mode 100644 index 0000000..14ad9c6 --- /dev/null +++ b/node_modules/math-intrinsics/abs.d.ts @@ -0,0 +1 @@ +export = Math.abs; \ No newline at end of file diff --git a/node_modules/math-intrinsics/abs.js b/node_modules/math-intrinsics/abs.js new file mode 100644 index 0000000..a751424 --- /dev/null +++ b/node_modules/math-intrinsics/abs.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./abs')} */ +module.exports = Math.abs; diff --git a/node_modules/math-intrinsics/constants/maxArrayLength.d.ts b/node_modules/math-intrinsics/constants/maxArrayLength.d.ts new file mode 100644 index 0000000..b92d46b --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxArrayLength.d.ts @@ -0,0 +1,3 @@ +declare const MAX_ARRAY_LENGTH: 4294967295; + +export = MAX_ARRAY_LENGTH; \ No newline at end of file diff --git a/node_modules/math-intrinsics/constants/maxArrayLength.js b/node_modules/math-intrinsics/constants/maxArrayLength.js new file mode 100644 index 0000000..cfc6aff --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxArrayLength.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./maxArrayLength')} */ +module.exports = 4294967295; // Math.pow(2, 32) - 1; diff --git a/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts b/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts new file mode 100644 index 0000000..fee3f62 --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts @@ -0,0 +1,3 @@ +declare const MAX_SAFE_INTEGER: 9007199254740991; + +export = MAX_SAFE_INTEGER; \ No newline at end of file diff --git a/node_modules/math-intrinsics/constants/maxSafeInteger.js b/node_modules/math-intrinsics/constants/maxSafeInteger.js new file mode 100644 index 0000000..b568ad3 --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxSafeInteger.js @@ -0,0 +1,5 @@ +'use strict'; + +/** @type {import('./maxSafeInteger')} */ +// eslint-disable-next-line no-extra-parens +module.exports = /** @type {import('./maxSafeInteger')} */ (Number.MAX_SAFE_INTEGER) || 9007199254740991; // Math.pow(2, 53) - 1; diff --git a/node_modules/math-intrinsics/constants/maxValue.d.ts b/node_modules/math-intrinsics/constants/maxValue.d.ts new file mode 100644 index 0000000..292cb82 --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxValue.d.ts @@ -0,0 +1,3 @@ +declare const MAX_VALUE: 1.7976931348623157e+308; + +export = MAX_VALUE; diff --git a/node_modules/math-intrinsics/constants/maxValue.js b/node_modules/math-intrinsics/constants/maxValue.js new file mode 100644 index 0000000..a2202dc --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxValue.js @@ -0,0 +1,5 @@ +'use strict'; + +/** @type {import('./maxValue')} */ +// eslint-disable-next-line no-extra-parens +module.exports = /** @type {import('./maxValue')} */ (Number.MAX_VALUE) || 1.7976931348623157e+308; diff --git a/node_modules/math-intrinsics/floor.d.ts b/node_modules/math-intrinsics/floor.d.ts new file mode 100644 index 0000000..9265236 --- /dev/null +++ b/node_modules/math-intrinsics/floor.d.ts @@ -0,0 +1 @@ +export = Math.floor; \ No newline at end of file diff --git a/node_modules/math-intrinsics/floor.js b/node_modules/math-intrinsics/floor.js new file mode 100644 index 0000000..ab0e5d7 --- /dev/null +++ b/node_modules/math-intrinsics/floor.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./floor')} */ +module.exports = Math.floor; diff --git a/node_modules/math-intrinsics/isFinite.d.ts b/node_modules/math-intrinsics/isFinite.d.ts new file mode 100644 index 0000000..6daae33 --- /dev/null +++ b/node_modules/math-intrinsics/isFinite.d.ts @@ -0,0 +1,3 @@ +declare function isFinite(x: unknown): x is number | bigint; + +export = isFinite; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isFinite.js b/node_modules/math-intrinsics/isFinite.js new file mode 100644 index 0000000..b201a5a --- /dev/null +++ b/node_modules/math-intrinsics/isFinite.js @@ -0,0 +1,12 @@ +'use strict'; + +var $isNaN = require('./isNaN'); + +/** @type {import('./isFinite')} */ +module.exports = function isFinite(x) { + return (typeof x === 'number' || typeof x === 'bigint') + && !$isNaN(x) + && x !== Infinity + && x !== -Infinity; +}; + diff --git a/node_modules/math-intrinsics/isInteger.d.ts b/node_modules/math-intrinsics/isInteger.d.ts new file mode 100644 index 0000000..13935a8 --- /dev/null +++ b/node_modules/math-intrinsics/isInteger.d.ts @@ -0,0 +1,3 @@ +declare function isInteger(argument: unknown): argument is number; + +export = isInteger; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isInteger.js b/node_modules/math-intrinsics/isInteger.js new file mode 100644 index 0000000..4b1b9a5 --- /dev/null +++ b/node_modules/math-intrinsics/isInteger.js @@ -0,0 +1,16 @@ +'use strict'; + +var $abs = require('./abs'); +var $floor = require('./floor'); + +var $isNaN = require('./isNaN'); +var $isFinite = require('./isFinite'); + +/** @type {import('./isInteger')} */ +module.exports = function isInteger(argument) { + if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { + return false; + } + var absValue = $abs(argument); + return $floor(absValue) === absValue; +}; diff --git a/node_modules/math-intrinsics/isNaN.d.ts b/node_modules/math-intrinsics/isNaN.d.ts new file mode 100644 index 0000000..c1d4c55 --- /dev/null +++ b/node_modules/math-intrinsics/isNaN.d.ts @@ -0,0 +1 @@ +export = Number.isNaN; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isNaN.js b/node_modules/math-intrinsics/isNaN.js new file mode 100644 index 0000000..e36475c --- /dev/null +++ b/node_modules/math-intrinsics/isNaN.js @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {import('./isNaN')} */ +module.exports = Number.isNaN || function isNaN(a) { + return a !== a; +}; diff --git a/node_modules/math-intrinsics/isNegativeZero.d.ts b/node_modules/math-intrinsics/isNegativeZero.d.ts new file mode 100644 index 0000000..7ad8819 --- /dev/null +++ b/node_modules/math-intrinsics/isNegativeZero.d.ts @@ -0,0 +1,3 @@ +declare function isNegativeZero(x: unknown): boolean; + +export = isNegativeZero; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isNegativeZero.js b/node_modules/math-intrinsics/isNegativeZero.js new file mode 100644 index 0000000..b69adcc --- /dev/null +++ b/node_modules/math-intrinsics/isNegativeZero.js @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {import('./isNegativeZero')} */ +module.exports = function isNegativeZero(x) { + return x === 0 && 1 / x === 1 / -0; +}; diff --git a/node_modules/math-intrinsics/max.d.ts b/node_modules/math-intrinsics/max.d.ts new file mode 100644 index 0000000..ad6f43e --- /dev/null +++ b/node_modules/math-intrinsics/max.d.ts @@ -0,0 +1 @@ +export = Math.max; \ No newline at end of file diff --git a/node_modules/math-intrinsics/max.js b/node_modules/math-intrinsics/max.js new file mode 100644 index 0000000..edb55df --- /dev/null +++ b/node_modules/math-intrinsics/max.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./max')} */ +module.exports = Math.max; diff --git a/node_modules/math-intrinsics/min.d.ts b/node_modules/math-intrinsics/min.d.ts new file mode 100644 index 0000000..fd90f2d --- /dev/null +++ b/node_modules/math-intrinsics/min.d.ts @@ -0,0 +1 @@ +export = Math.min; \ No newline at end of file diff --git a/node_modules/math-intrinsics/min.js b/node_modules/math-intrinsics/min.js new file mode 100644 index 0000000..5a4a7c7 --- /dev/null +++ b/node_modules/math-intrinsics/min.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./min')} */ +module.exports = Math.min; diff --git a/node_modules/math-intrinsics/mod.d.ts b/node_modules/math-intrinsics/mod.d.ts new file mode 100644 index 0000000..549dbd4 --- /dev/null +++ b/node_modules/math-intrinsics/mod.d.ts @@ -0,0 +1,3 @@ +declare function mod(number: number, modulo: number): number; + +export = mod; \ No newline at end of file diff --git a/node_modules/math-intrinsics/mod.js b/node_modules/math-intrinsics/mod.js new file mode 100644 index 0000000..4a98362 --- /dev/null +++ b/node_modules/math-intrinsics/mod.js @@ -0,0 +1,9 @@ +'use strict'; + +var $floor = require('./floor'); + +/** @type {import('./mod')} */ +module.exports = function mod(number, modulo) { + var remain = number % modulo; + return $floor(remain >= 0 ? remain : remain + modulo); +}; diff --git a/node_modules/math-intrinsics/package.json b/node_modules/math-intrinsics/package.json new file mode 100644 index 0000000..0676273 --- /dev/null +++ b/node_modules/math-intrinsics/package.json @@ -0,0 +1,86 @@ +{ + "name": "math-intrinsics", + "version": "1.1.0", + "description": "ES Math-related intrinsics and helpers, robustly cached.", + "main": false, + "exports": { + "./abs": "./abs.js", + "./floor": "./floor.js", + "./isFinite": "./isFinite.js", + "./isInteger": "./isInteger.js", + "./isNaN": "./isNaN.js", + "./isNegativeZero": "./isNegativeZero.js", + "./max": "./max.js", + "./min": "./min.js", + "./mod": "./mod.js", + "./pow": "./pow.js", + "./sign": "./sign.js", + "./round": "./round.js", + "./constants/maxArrayLength": "./constants/maxArrayLength.js", + "./constants/maxSafeInteger": "./constants/maxSafeInteger.js", + "./constants/maxValue": "./constants/maxValue.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "npx npm@'>= 10.2' audit --production", + "prelint": "evalmd README.md && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/es-shims/math-intrinsics.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/es-shims/math-intrinsics/issues" + }, + "homepage": "https://github.com/es-shims/math-intrinsics#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.1", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.2", + "@types/for-each": "^0.3.3", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "eclint": "^2.8.1", + "es-value-fixtures": "^1.5.0", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.3", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/math-intrinsics/pow.d.ts b/node_modules/math-intrinsics/pow.d.ts new file mode 100644 index 0000000..5873c44 --- /dev/null +++ b/node_modules/math-intrinsics/pow.d.ts @@ -0,0 +1 @@ +export = Math.pow; \ No newline at end of file diff --git a/node_modules/math-intrinsics/pow.js b/node_modules/math-intrinsics/pow.js new file mode 100644 index 0000000..c0a4103 --- /dev/null +++ b/node_modules/math-intrinsics/pow.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./pow')} */ +module.exports = Math.pow; diff --git a/node_modules/math-intrinsics/round.d.ts b/node_modules/math-intrinsics/round.d.ts new file mode 100644 index 0000000..da1fde3 --- /dev/null +++ b/node_modules/math-intrinsics/round.d.ts @@ -0,0 +1 @@ +export = Math.round; \ No newline at end of file diff --git a/node_modules/math-intrinsics/round.js b/node_modules/math-intrinsics/round.js new file mode 100644 index 0000000..b792156 --- /dev/null +++ b/node_modules/math-intrinsics/round.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./round')} */ +module.exports = Math.round; diff --git a/node_modules/math-intrinsics/sign.d.ts b/node_modules/math-intrinsics/sign.d.ts new file mode 100644 index 0000000..c49ceca --- /dev/null +++ b/node_modules/math-intrinsics/sign.d.ts @@ -0,0 +1,3 @@ +declare function sign(x: number): number; + +export = sign; \ No newline at end of file diff --git a/node_modules/math-intrinsics/sign.js b/node_modules/math-intrinsics/sign.js new file mode 100644 index 0000000..9e5173c --- /dev/null +++ b/node_modules/math-intrinsics/sign.js @@ -0,0 +1,11 @@ +'use strict'; + +var $isNaN = require('./isNaN'); + +/** @type {import('./sign')} */ +module.exports = function sign(number) { + if ($isNaN(number) || number === 0) { + return number; + } + return number < 0 ? -1 : +1; +}; diff --git a/node_modules/math-intrinsics/test/index.js b/node_modules/math-intrinsics/test/index.js new file mode 100644 index 0000000..0f90a5d --- /dev/null +++ b/node_modules/math-intrinsics/test/index.js @@ -0,0 +1,192 @@ +'use strict'; + +var test = require('tape'); +var v = require('es-value-fixtures'); +var forEach = require('for-each'); +var inspect = require('object-inspect'); + +var abs = require('../abs'); +var floor = require('../floor'); +var isFinite = require('../isFinite'); +var isInteger = require('../isInteger'); +var isNaN = require('../isNaN'); +var isNegativeZero = require('../isNegativeZero'); +var max = require('../max'); +var min = require('../min'); +var mod = require('../mod'); +var pow = require('../pow'); +var round = require('../round'); +var sign = require('../sign'); + +var maxArrayLength = require('../constants/maxArrayLength'); +var maxSafeInteger = require('../constants/maxSafeInteger'); +var maxValue = require('../constants/maxValue'); + +test('abs', function (t) { + t.equal(abs(-1), 1, 'abs(-1) === 1'); + t.equal(abs(+1), 1, 'abs(+1) === 1'); + t.equal(abs(+0), +0, 'abs(+0) === +0'); + t.equal(abs(-0), +0, 'abs(-0) === +0'); + + t.end(); +}); + +test('floor', function (t) { + t.equal(floor(-1.1), -2, 'floor(-1.1) === -2'); + t.equal(floor(+1.1), 1, 'floor(+1.1) === 1'); + t.equal(floor(+0), +0, 'floor(+0) === +0'); + t.equal(floor(-0), -0, 'floor(-0) === -0'); + t.equal(floor(-Infinity), -Infinity, 'floor(-Infinity) === -Infinity'); + t.equal(floor(Number(Infinity)), Number(Infinity), 'floor(+Infinity) === +Infinity'); + t.equal(floor(NaN), NaN, 'floor(NaN) === NaN'); + t.equal(floor(0), +0, 'floor(0) === +0'); + t.equal(floor(-0), -0, 'floor(-0) === -0'); + t.equal(floor(1), 1, 'floor(1) === 1'); + t.equal(floor(-1), -1, 'floor(-1) === -1'); + t.equal(floor(1.1), 1, 'floor(1.1) === 1'); + t.equal(floor(-1.1), -2, 'floor(-1.1) === -2'); + t.equal(floor(maxValue), maxValue, 'floor(maxValue) === maxValue'); + t.equal(floor(maxSafeInteger), maxSafeInteger, 'floor(maxSafeInteger) === maxSafeInteger'); + + t.end(); +}); + +test('isFinite', function (t) { + t.equal(isFinite(0), true, 'isFinite(+0) === true'); + t.equal(isFinite(-0), true, 'isFinite(-0) === true'); + t.equal(isFinite(1), true, 'isFinite(1) === true'); + t.equal(isFinite(Infinity), false, 'isFinite(Infinity) === false'); + t.equal(isFinite(-Infinity), false, 'isFinite(-Infinity) === false'); + t.equal(isFinite(NaN), false, 'isFinite(NaN) === false'); + + forEach(v.nonNumbers, function (nonNumber) { + t.equal(isFinite(nonNumber), false, 'isFinite(' + inspect(nonNumber) + ') === false'); + }); + + t.end(); +}); + +test('isInteger', function (t) { + forEach([].concat( + // @ts-expect-error TS sucks with concat + v.nonNumbers, + v.nonIntegerNumbers + ), function (nonInteger) { + t.equal(isInteger(nonInteger), false, 'isInteger(' + inspect(nonInteger) + ') === false'); + }); + + t.end(); +}); + +test('isNaN', function (t) { + forEach([].concat( + // @ts-expect-error TS sucks with concat + v.nonNumbers, + v.infinities, + v.zeroes, + v.integerNumbers + ), function (nonNaN) { + t.equal(isNaN(nonNaN), false, 'isNaN(' + inspect(nonNaN) + ') === false'); + }); + + t.equal(isNaN(NaN), true, 'isNaN(NaN) === true'); + + t.end(); +}); + +test('isNegativeZero', function (t) { + t.equal(isNegativeZero(-0), true, 'isNegativeZero(-0) === true'); + t.equal(isNegativeZero(+0), false, 'isNegativeZero(+0) === false'); + t.equal(isNegativeZero(1), false, 'isNegativeZero(1) === false'); + t.equal(isNegativeZero(-1), false, 'isNegativeZero(-1) === false'); + t.equal(isNegativeZero(NaN), false, 'isNegativeZero(NaN) === false'); + t.equal(isNegativeZero(Infinity), false, 'isNegativeZero(Infinity) === false'); + t.equal(isNegativeZero(-Infinity), false, 'isNegativeZero(-Infinity) === false'); + + forEach(v.nonNumbers, function (nonNumber) { + t.equal(isNegativeZero(nonNumber), false, 'isNegativeZero(' + inspect(nonNumber) + ') === false'); + }); + + t.end(); +}); + +test('max', function (t) { + t.equal(max(1, 2), 2, 'max(1, 2) === 2'); + t.equal(max(1, 2, 3), 3, 'max(1, 2, 3) === 3'); + t.equal(max(1, 2, 3, 4), 4, 'max(1, 2, 3, 4) === 4'); + t.equal(max(1, 2, 3, 4, 5), 5, 'max(1, 2, 3, 4, 5) === 5'); + t.equal(max(1, 2, 3, 4, 5, 6), 6, 'max(1, 2, 3, 4, 5, 6) === 6'); + t.equal(max(1, 2, 3, 4, 5, 6, 7), 7, 'max(1, 2, 3, 4, 5, 6, 7) === 7'); + + t.end(); +}); + +test('min', function (t) { + t.equal(min(1, 2), 1, 'min(1, 2) === 1'); + t.equal(min(1, 2, 3), 1, 'min(1, 2, 3) === 1'); + t.equal(min(1, 2, 3, 4), 1, 'min(1, 2, 3, 4) === 1'); + t.equal(min(1, 2, 3, 4, 5), 1, 'min(1, 2, 3, 4, 5) === 1'); + t.equal(min(1, 2, 3, 4, 5, 6), 1, 'min(1, 2, 3, 4, 5, 6) === 1'); + + t.end(); +}); + +test('mod', function (t) { + t.equal(mod(1, 2), 1, 'mod(1, 2) === 1'); + t.equal(mod(2, 2), 0, 'mod(2, 2) === 0'); + t.equal(mod(3, 2), 1, 'mod(3, 2) === 1'); + t.equal(mod(4, 2), 0, 'mod(4, 2) === 0'); + t.equal(mod(5, 2), 1, 'mod(5, 2) === 1'); + t.equal(mod(6, 2), 0, 'mod(6, 2) === 0'); + t.equal(mod(7, 2), 1, 'mod(7, 2) === 1'); + t.equal(mod(8, 2), 0, 'mod(8, 2) === 0'); + t.equal(mod(9, 2), 1, 'mod(9, 2) === 1'); + t.equal(mod(10, 2), 0, 'mod(10, 2) === 0'); + t.equal(mod(11, 2), 1, 'mod(11, 2) === 1'); + + t.end(); +}); + +test('pow', function (t) { + t.equal(pow(2, 2), 4, 'pow(2, 2) === 4'); + t.equal(pow(2, 3), 8, 'pow(2, 3) === 8'); + t.equal(pow(2, 4), 16, 'pow(2, 4) === 16'); + t.equal(pow(2, 5), 32, 'pow(2, 5) === 32'); + t.equal(pow(2, 6), 64, 'pow(2, 6) === 64'); + t.equal(pow(2, 7), 128, 'pow(2, 7) === 128'); + t.equal(pow(2, 8), 256, 'pow(2, 8) === 256'); + t.equal(pow(2, 9), 512, 'pow(2, 9) === 512'); + t.equal(pow(2, 10), 1024, 'pow(2, 10) === 1024'); + + t.end(); +}); + +test('round', function (t) { + t.equal(round(1.1), 1, 'round(1.1) === 1'); + t.equal(round(1.5), 2, 'round(1.5) === 2'); + t.equal(round(1.9), 2, 'round(1.9) === 2'); + + t.end(); +}); + +test('sign', function (t) { + t.equal(sign(-1), -1, 'sign(-1) === -1'); + t.equal(sign(+1), +1, 'sign(+1) === +1'); + t.equal(sign(+0), +0, 'sign(+0) === +0'); + t.equal(sign(-0), -0, 'sign(-0) === -0'); + t.equal(sign(NaN), NaN, 'sign(NaN) === NaN'); + t.equal(sign(Infinity), +1, 'sign(Infinity) === +1'); + t.equal(sign(-Infinity), -1, 'sign(-Infinity) === -1'); + t.equal(sign(maxValue), +1, 'sign(maxValue) === +1'); + t.equal(sign(maxSafeInteger), +1, 'sign(maxSafeInteger) === +1'); + + t.end(); +}); + +test('constants', function (t) { + t.equal(typeof maxArrayLength, 'number', 'typeof maxArrayLength === "number"'); + t.equal(typeof maxSafeInteger, 'number', 'typeof maxSafeInteger === "number"'); + t.equal(typeof maxValue, 'number', 'typeof maxValue === "number"'); + + t.end(); +}); diff --git a/node_modules/math-intrinsics/tsconfig.json b/node_modules/math-intrinsics/tsconfig.json new file mode 100644 index 0000000..b131000 --- /dev/null +++ b/node_modules/math-intrinsics/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@ljharb/tsconfig", +} diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md new file mode 100644 index 0000000..7436f64 --- /dev/null +++ b/node_modules/mime-db/HISTORY.md @@ -0,0 +1,507 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + +1.51.0 / 2021-11-08 +=================== + + * Add new upstream MIME types + * Mark `image/vnd.microsoft.icon` as compressible + * Mark `image/vnd.ms-dds` as compressible + +1.50.0 / 2021-09-15 +=================== + + * Add deprecated iWorks mime types and extensions + * Add new upstream MIME types + +1.49.0 / 2021-07-26 +=================== + + * Add extension `.trig` to `application/trig` + * Add new upstream MIME types + +1.48.0 / 2021-05-30 +=================== + + * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + * Add new upstream MIME types + * Mark `text/yaml` as compressible + +1.47.0 / 2021-04-01 +=================== + + * Add new upstream MIME types + * Remove ambigious extensions from IANA for `application/*+xml` types + * Update primary extension to `.es` for `application/ecmascript` + +1.46.0 / 2021-02-13 +=================== + + * Add extension `.amr` to `audio/amr` + * Add extension `.m4s` to `video/iso.segment` + * Add extension `.opus` to `audio/ogg` + * Add new upstream MIME types + +1.45.0 / 2020-09-22 +=================== + + * Add `application/ubjson` with extension `.ubj` + * Add `image/avif` with extension `.avif` + * Add `image/ktx2` with extension `.ktx2` + * Add extension `.dbf` to `application/vnd.dbf` + * Add extension `.rar` to `application/vnd.rar` + * Add extension `.td` to `application/urc-targetdesc+xml` + * Add new upstream MIME types + * Fix extension of `application/vnd.apple.keynote` to be `.key` + +1.44.0 / 2020-04-22 +=================== + + * Add charsets from IANA + * Add extension `.cjs` to `application/node` + * Add new upstream MIME types + +1.43.0 / 2020-01-05 +=================== + + * Add `application/x-keepass2` with extension `.kdbx` + * Add extension `.mxmf` to `audio/mobile-xmf` + * Add extensions from IANA for `application/*+xml` types + * Add new upstream MIME types + +1.42.0 / 2019-09-25 +=================== + + * Add `image/vnd.ms-dds` with extension `.dds` + * Add new upstream MIME types + * Remove compressible from `multipart/mixed` + +1.41.0 / 2019-08-30 +=================== + + * Add new upstream MIME types + * Add `application/toml` with extension `.toml` + * Mark `font/ttf` as compressible + +1.40.0 / 2019-04-20 +=================== + + * Add extensions from IANA for `model/*` types + * Add `text/mdx` with extension `.mdx` + +1.39.0 / 2019-04-04 +=================== + + * Add extensions `.siv` and `.sieve` to `application/sieve` + * Add new upstream MIME types + +1.38.0 / 2019-02-04 +=================== + + * Add extension `.nq` to `application/n-quads` + * Add extension `.nt` to `application/n-triples` + * Add new upstream MIME types + * Mark `text/less` as compressible + +1.37.0 / 2018-10-19 +=================== + + * Add extensions to HEIC image types + * Add new upstream MIME types + +1.36.0 / 2018-08-20 +=================== + + * Add Apple file extensions from IANA + * Add extensions from IANA for `image/*` types + * Add new upstream MIME types + +1.35.0 / 2018-07-15 +=================== + + * Add extension `.owl` to `application/rdf+xml` + * Add new upstream MIME types + - Removes extension `.woff` from `application/font-woff` + +1.34.0 / 2018-06-03 +=================== + + * Add extension `.csl` to `application/vnd.citationstyles.style+xml` + * Add extension `.es` to `application/ecmascript` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/turtle` + * Mark all XML-derived types as compressible + +1.33.0 / 2018-02-15 +=================== + + * Add extensions from IANA for `message/*` types + * Add new upstream MIME types + * Fix some incorrect OOXML types + * Remove `application/font-woff2` + +1.32.0 / 2017-11-29 +=================== + + * Add new upstream MIME types + * Update `text/hjson` to registered `application/hjson` + * Add `text/shex` with extension `.shex` + +1.31.0 / 2017-10-25 +=================== + + * Add `application/raml+yaml` with extension `.raml` + * Add `application/wasm` with extension `.wasm` + * Add new `font` type from IANA + * Add new upstream font extensions + * Add new upstream MIME types + * Add extensions for JPEG-2000 images + +1.30.0 / 2017-08-27 +=================== + + * Add `application/vnd.ms-outlook` + * Add `application/x-arj` + * Add extension `.mjs` to `application/javascript` + * Add glTF types and extensions + * Add new upstream MIME types + * Add `text/x-org` + * Add VirtualBox MIME types + * Fix `source` records for `video/*` types that are IANA + * Update `font/opentype` to registered `font/otf` + +1.29.0 / 2017-07-10 +=================== + + * Add `application/fido.trusted-apps+json` + * Add extension `.wadl` to `application/vnd.sun.wadl+xml` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/css` + +1.28.0 / 2017-05-14 +=================== + + * Add new upstream MIME types + * Add extension `.gz` to `application/gzip` + * Update extensions `.md` and `.markdown` to be `text/markdown` + +1.27.0 / 2017-03-16 +=================== + + * Add new upstream MIME types + * Add `image/apng` with extension `.apng` + +1.26.0 / 2017-01-14 +=================== + + * Add new upstream MIME types + * Add extension `.geojson` to `application/geo+json` + +1.25.0 / 2016-11-11 +=================== + + * Add new upstream MIME types + +1.24.0 / 2016-09-18 +=================== + + * Add `audio/mp3` + * Add new upstream MIME types + +1.23.0 / 2016-05-01 +=================== + + * Add new upstream MIME types + * Add extension `.3gpp` to `audio/3gpp` + +1.22.0 / 2016-02-15 +=================== + + * Add `text/slim` + * Add extension `.rng` to `application/xml` + * Add new upstream MIME types + * Fix extension of `application/dash+xml` to be `.mpd` + * Update primary extension to `.m4a` for `audio/mp4` + +1.21.0 / 2016-01-06 +=================== + + * Add Google document types + * Add new upstream MIME types + +1.20.0 / 2015-11-10 +=================== + + * Add `text/x-suse-ymp` + * Add new upstream MIME types + +1.19.0 / 2015-09-17 +=================== + + * Add `application/vnd.apple.pkpass` + * Add new upstream MIME types + +1.18.0 / 2015-09-03 +=================== + + * Add new upstream MIME types + +1.17.0 / 2015-08-13 +=================== + + * Add `application/x-msdos-program` + * Add `audio/g711-0` + * Add `image/vnd.mozilla.apng` + * Add extension `.exe` to `application/x-msdos-program` + +1.16.0 / 2015-07-29 +=================== + + * Add `application/vnd.uri-map` + +1.15.0 / 2015-07-13 +=================== + + * Add `application/x-httpd-php` + +1.14.0 / 2015-06-25 +=================== + + * Add `application/scim+json` + * Add `application/vnd.3gpp.ussd+xml` + * Add `application/vnd.biopax.rdf+xml` + * Add `text/x-processing` + +1.13.0 / 2015-06-07 +=================== + + * Add nginx as a source + * Add `application/x-cocoa` + * Add `application/x-java-archive-diff` + * Add `application/x-makeself` + * Add `application/x-perl` + * Add `application/x-pilot` + * Add `application/x-redhat-package-manager` + * Add `application/x-sea` + * Add `audio/x-m4a` + * Add `audio/x-realaudio` + * Add `image/x-jng` + * Add `text/mathml` + +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE new file mode 100644 index 0000000..0751cb1 --- /dev/null +++ b/node_modules/mime-db/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-db/README.md b/node_modules/mime-db/README.md new file mode 100644 index 0000000..5a8fcfe --- /dev/null +++ b/node_modules/mime-db/README.md @@ -0,0 +1,100 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a large database of mime types and information about them. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +### Database Download + +If you're crazy enough to use this in the browser, you can just grab the +JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to +replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) +as the JSON format may change in the future. + +``` +https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json +``` + +## Usage + +```js +var db = require('mime-db') + +// grab data on .js files +var data = db['application/javascript'] +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) + - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom-types.json` or +`src/custom-suffix.json`. + +The `src/custom-types.json` file is a JSON object with the MIME type as the +keys and the values being an object with the following keys: + +- `compressible` - leave out if you don't know, otherwise `true`/`false` to + indicate whether the data represented by the type is typically compressible. +- `extensions` - include an array of file extensions that are associated with + the type. +- `notes` - human-readable notes about the type, typically what the type is. +- `sources` - include an array of URLs of where the MIME type and the associated + extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); + links to type aggregating sites and Wikipedia are _not acceptable_. + +To update the build, run `npm run build`. + +### Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +If that is not possible / feasible, they can be added directly here as a +"custom" type. To do this, it is required to have a primary source that +definitively lists the media type. If an extension is going to be listed as +associateed with this media type, the source must definitively link the +media type and extension as well. + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci +[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://badgen.net/npm/node/mime-db +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-db +[npm-url]: https://npmjs.org/package/mime-db +[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json new file mode 100644 index 0000000..eb9c42c --- /dev/null +++ b/node_modules/mime-db/db.json @@ -0,0 +1,8519 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true + }, + "application/a2l": { + "source": "iana" + }, + "application/ace+cbor": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/at+jwt": { + "source": "iana" + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"] + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-dynamic-event-message": { + "source": "iana" + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"] + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/captive+json": { + "source": "iana", + "compressible": true + }, + "application/cbor": { + "source": "iana" + }, + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true + }, + "application/cfw": { + "source": "iana" + }, + "application/city+json": { + "source": "iana", + "compressible": true + }, + "application/clr": { + "source": "iana" + }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cpl"] + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana", + "compressible": true + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cwt": { + "source": "iana" + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"] + }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"] + }, + "application/dots+cbor": { + "source": "iana" + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["es","ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/elm+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana", + "compressible": true + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, + "application/express": { + "source": "iana", + "extensions": ["exp"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true + }, + "application/fits": { + "source": "iana" + }, + "application/flexfec": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/geo+json-seq": { + "source": "iana" + }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"] + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"] + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"] + }, + "application/manifest+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpf"] + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mipc": { + "source": "iana" + }, + "application/missing-blocks+cbor-seq": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true + }, + "application/msc-ivr+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msc-mixer+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/multipart-core": { + "source": "iana" + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"] + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-groupinfo": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"] + }, + "application/nss": { + "source": "iana" + }, + "application/oauth-authz-req+jwt": { + "source": "iana" + }, + "application/oblivious-dns-message": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true + }, + "application/oscore": { + "source": "iana" + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p21": { + "source": "iana" + }, + "application/p21+zip": { + "source": "iana", + "compressible": false + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"] + }, + "application/parityfec": { + "source": "iana" + }, + "application/passport": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pem-certificate-chain": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana", + "extensions": ["asc"] + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pidf-diff+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkcs8-encrypted": { + "source": "iana" + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana", + "compressible": true + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT" + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"] + }, + "application/pvd+json": { + "source": "iana", + "compressible": true + }, + "application/qsig": { + "source": "iana" + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf","owl"] + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"] + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-publication": { + "source": "iana" + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sarif+json": { + "source": "iana", + "compressible": true + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true + }, + "application/sbe": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/secevent+jwt": { + "source": "iana" + }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-etch+cbor": { + "source": "iana" + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv","sieve"] + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/sipc": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"] + }, + "application/spdx+json": { + "source": "iana", + "compressible": true + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"] + }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/td+json": { + "source": "iana", + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei","teicorpus"] + }, + "application/tetra_isi": { + "source": "iana" + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/token-introspection+jwt": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, + "application/trig": { + "source": "iana", + "extensions": ["trig"] + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"] + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"] + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["td"] + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana" + }, + "application/vnd.3gpp.5gnas": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gtpc": { + "source": "iana" + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana" + }, + "application/vnd.3gpp.lpp": { + "source": "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ngap": { + "source": "iana" + }, + "application/vnd.3gpp.pfcp": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.s1ap": { + "source": "iana" + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"] + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.arrow.file": { + "source": "iana" + }, + "application/vnd.apache.arrow.stream": { + "source": "iana" + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"] + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bint.med-content": { + "source": "iana" + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.ciedi": { + "source": "iana" + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"] + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana" + }, + "application/vnd.cryptomator.vault": { + "source": "iana" + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.d3m-dataset": { + "source": "iana" + }, + "application/vnd.d3m-problem": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"] + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume.movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.efi.img": { + "source": "iana" + }, + "application/vnd.efi.iso": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.slides": { + "source": "iana" + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las": { + "source": "iana" + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"] + }, + "application/vnd.laszip": { + "source": "iana" + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana", + "extensions": ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nebumind.line": { + "source": "iana" + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nimn": { + "source": "iana" + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.ocf+cbor": { + "source": "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+cbor": { + "source": "iana" + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { + "source": "iana" + }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"] + }, + "application/vnd.opentimestamps.ots": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { + "source": "iana" + }, + "application/vnd.patientecommsdoc": { + "source": "iana" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.psfs": { + "source": "iana" + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana", + "extensions": ["rar"] + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.resilient.logic": { + "source": "iana" + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sar": { + "source": "iana" + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shade-save-file": { + "source": "iana" + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shp": { + "source": "iana" + }, + "application/vnd.shx": { + "source": "iana" + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.snesdev-page-table": { + "source": "iana" + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sqlite3": { + "source": "iana" + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"] + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.dpp": { + "source": "iana" + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.youtube.yt": { + "source": "iana" + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"] + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"] + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wif"] + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-pki-message": { + "source": "iana" + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "iana", + "extensions": ["der","crt","pem"] + }, + "application/x-x509-ca-ra-cert": { + "source": "iana" + }, + "application/x-x509-next-ca-cert": { + "source": "iana" + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"] + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"] + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"] + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"] + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsl","xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "application/zstd": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/aac": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana", + "extensions": ["amr"] + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/flexfec": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/melp": { + "source": "iana" + }, + "audio/melp1200": { + "source": "iana" + }, + "audio/melp2400": { + "source": "iana" + }, + "audio/melp600": { + "source": "iana" + }, + "audio/mhas": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"] + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx","opus"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/scip": { + "source": "iana" + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sofa": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tetra_acelp_bb": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/tsvcis": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/usac": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"] + }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, + "image/apng": { + "compressible": false, + "extensions": ["apng"] + }, + "image/avci": { + "source": "iana", + "extensions": ["avci"] + }, + "image/avcs": { + "source": "iana", + "extensions": ["avcs"] + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"] + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"] + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"] + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"] + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"] + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm"] + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"] + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"] + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif","tiff"] + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"] + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"] + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "compressible": true, + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "compressible": true, + "extensions": ["dds"] + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"] + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"] + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"] + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification" + ] + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"] + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"] + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"] + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"] + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/e57": { + "source": "iana" + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"] + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"] + }, + "model/step": { + "source": "iana" + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"] + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"] + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.pytha.pyox": { + "source": "iana" + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"] + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"] + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"] + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"] + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/cql": { + "source": "iana" + }, + "text/cql-expression": { + "source": "iana" + }, + "text/cql-identifier": { + "source": "iana" + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fhirpath": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/gff3": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "compressible": true, + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana", + "charset": "UTF-8" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana", + "charset": "UTF-8" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/shaclc": { + "source": "iana" + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"] + }, + "text/strings": { + "source": "iana" + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"] + }, + "text/vnd.ficlab.flt": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.gml": { + "source": "iana" + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.hans": { + "source": "iana" + }, + "text/vnd.hgl": { + "source": "iana" + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sosi": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "compressible": true, + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "iana" + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "iana" + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"] + }, + "video/av1": { + "source": "iana" + }, + "video/bmpeg": { + "source": "iana" + }, + "video/bt656": { + "source": "iana" + }, + "video/celb": { + "source": "iana" + }, + "video/dv": { + "source": "iana" + }, + "video/encaprtp": { + "source": "iana" + }, + "video/ffv1": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"] + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "iana" + }, + "video/h263-2000": { + "source": "iana" + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "iana" + }, + "video/h264-svc": { + "source": "iana" + }, + "video/h265": { + "source": "iana" + }, + "video/iso.segment": { + "source": "iana", + "extensions": ["m4s"] + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "iana" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/jxsv": { + "source": "iana" + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "iana" + }, + "video/mp2p": { + "source": "iana" + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "iana" + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "iana" + }, + "video/mpv": { + "source": "iana" + }, + "video/nv": { + "source": "iana" + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "iana" + }, + "video/pointer": { + "source": "iana" + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "iana" + }, + "video/raw": { + "source": "iana" + }, + "video/rtp-enc-aescm128": { + "source": "iana" + }, + "video/rtploopback": { + "source": "iana" + }, + "video/rtx": { + "source": "iana" + }, + "video/scip": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" + }, + "video/smpte292m": { + "source": "iana" + }, + "video/ulpfec": { + "source": "iana" + }, + "video/vc1": { + "source": "iana" + }, + "video/vc2": { + "source": "iana" + }, + "video/vnd.cctv": { + "source": "iana" + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "iana" + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "iana" + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana" + }, + "video/vnd.motorola.video": { + "source": "iana" + }, + "video/vnd.motorola.videop": { + "source": "iana" + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" + }, + "video/vnd.nokia.videovoip": { + "source": "iana" + }, + "video/vnd.objectvideo": { + "source": "iana" + }, + "video/vnd.radgamettools.bink": { + "source": "iana" + }, + "video/vnd.radgamettools.smacker": { + "source": "iana" + }, + "video/vnd.sealed.mpeg1": { + "source": "iana" + }, + "video/vnd.sealed.mpeg4": { + "source": "iana" + }, + "video/vnd.sealed.swf": { + "source": "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana" + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"] + }, + "video/vnd.youtube.yt": { + "source": "iana" + }, + "video/vp8": { + "source": "iana" + }, + "video/vp9": { + "source": "iana" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js new file mode 100644 index 0000000..ec2be30 --- /dev/null +++ b/node_modules/mime-db/index.js @@ -0,0 +1,12 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json new file mode 100644 index 0000000..32c14b8 --- /dev/null +++ b/node_modules/mime-db/package.json @@ -0,0 +1,60 @@ +{ + "name": "mime-db", + "description": "Media Type Database", + "version": "1.52.0", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)", + "Robert Kieffer (http://github.com/broofa)" + ], + "license": "MIT", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "repository": "jshttp/mime-db", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.3", + "eslint": "7.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.1", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "media-typer": "1.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0", + "raw-body": "2.5.0", + "stream-to-array": "2.3.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md new file mode 100644 index 0000000..c5043b7 --- /dev/null +++ b/node_modules/mime-types/HISTORY.md @@ -0,0 +1,397 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + +2.1.34 / 2021-11-08 +=================== + + * deps: mime-db@1.51.0 + - Add new upstream MIME types + +2.1.33 / 2021-10-01 +=================== + + * deps: mime-db@1.50.0 + - Add deprecated iWorks mime types and extensions + - Add new upstream MIME types + +2.1.32 / 2021-07-27 +=================== + + * deps: mime-db@1.49.0 + - Add extension `.trig` to `application/trig` + - Add new upstream MIME types + +2.1.31 / 2021-06-01 +=================== + + * deps: mime-db@1.48.0 + - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + - Add new upstream MIME types + +2.1.30 / 2021-04-02 +=================== + + * deps: mime-db@1.47.0 + - Add extension `.amr` to `audio/amr` + - Remove ambigious extensions from IANA for `application/*+xml` types + - Update primary extension to `.es` for `application/ecmascript` + +2.1.29 / 2021-02-17 +=================== + + * deps: mime-db@1.46.0 + - Add extension `.amr` to `audio/amr` + - Add extension `.m4s` to `video/iso.segment` + - Add extension `.opus` to `audio/ogg` + - Add new upstream MIME types + +2.1.28 / 2021-01-01 +=================== + + * deps: mime-db@1.45.0 + - Add `application/ubjson` with extension `.ubj` + - Add `image/avif` with extension `.avif` + - Add `image/ktx2` with extension `.ktx2` + - Add extension `.dbf` to `application/vnd.dbf` + - Add extension `.rar` to `application/vnd.rar` + - Add extension `.td` to `application/urc-targetdesc+xml` + - Add new upstream MIME types + - Fix extension of `application/vnd.apple.keynote` to be `.key` + +2.1.27 / 2020-04-23 +=================== + + * deps: mime-db@1.44.0 + - Add charsets from IANA + - Add extension `.cjs` to `application/node` + - Add new upstream MIME types + +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + +2.1.15 / 2017-03-23 +=================== + + * deps: mime-db@~1.27.0 + - Add new mime types + - Add `image/apng` + +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/mime-types/LICENSE b/node_modules/mime-types/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-types/README.md b/node_modules/mime-types/README.md new file mode 100644 index 0000000..48d2fb4 --- /dev/null +++ b/node_modules/mime-types/README.md @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/node_modules/mime-types/index.js b/node_modules/mime-types/index.js new file mode 100644 index 0000000..b9f34d5 --- /dev/null +++ b/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var db = require('mime-db') +var extname = require('path').extname + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json new file mode 100644 index 0000000..bbef696 --- /dev/null +++ b/node_modules/mime-types/package.json @@ -0,0 +1,44 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "2.1.35", + "contributors": [ + "Douglas Christopher Wilson ", + "Jeremiah Senkpiel (https://searchbeam.jit.su)", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "keywords": [ + "mime", + "types" + ], + "repository": "jshttp/mime-types", + "dependencies": { + "mime-db": "1.52.0" + }, + "devDependencies": { + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js new file mode 100644 index 0000000..ea734fb --- /dev/null +++ b/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function (val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/node_modules/ms/license.md b/node_modules/ms/license.md new file mode 100644 index 0000000..fa5d39b --- /dev/null +++ b/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json new file mode 100644 index 0000000..4997189 --- /dev/null +++ b/node_modules/ms/package.json @@ -0,0 +1,38 @@ +{ + "name": "ms", + "version": "2.1.3", + "description": "Tiny millisecond conversion utility", + "repository": "vercel/ms", + "main": "./index", + "files": [ + "index.js" + ], + "scripts": { + "precommit": "lint-staged", + "lint": "eslint lib/* bin/*", + "test": "mocha tests.js" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "license": "MIT", + "devDependencies": { + "eslint": "4.18.2", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1", + "prettier": "2.0.5" + } +} diff --git a/node_modules/ms/readme.md b/node_modules/ms/readme.md new file mode 100644 index 0000000..0fc1abb --- /dev/null +++ b/node_modules/ms/readme.md @@ -0,0 +1,59 @@ +# ms + +![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/node_modules/node-gyp-build/LICENSE b/node_modules/node-gyp-build/LICENSE new file mode 100644 index 0000000..56fce08 --- /dev/null +++ b/node_modules/node-gyp-build/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/node-gyp-build/README.md b/node_modules/node-gyp-build/README.md new file mode 100644 index 0000000..f712ca6 --- /dev/null +++ b/node_modules/node-gyp-build/README.md @@ -0,0 +1,58 @@ +# node-gyp-build + +> Build tool and bindings loader for [`node-gyp`][node-gyp] that supports prebuilds. + +``` +npm install node-gyp-build +``` + +[![Test](https://github.com/prebuild/node-gyp-build/actions/workflows/test.yml/badge.svg)](https://github.com/prebuild/node-gyp-build/actions/workflows/test.yml) + +Use together with [`prebuildify`][prebuildify] to easily support prebuilds for your native modules. + +## Usage + +> **Note.** Prebuild names have changed in [`prebuildify@3`][prebuildify] and `node-gyp-build@4`. Please see the documentation below. + +`node-gyp-build` works similar to [`node-gyp build`][node-gyp] except that it will check if a build or prebuild is present before rebuilding your project. + +It's main intended use is as an npm install script and bindings loader for native modules that bundle prebuilds using [`prebuildify`][prebuildify]. + +First add `node-gyp-build` as an install script to your native project + +``` js +{ + ... + "scripts": { + "install": "node-gyp-build" + } +} +``` + +Then in your `index.js`, instead of using the [`bindings`](https://www.npmjs.com/package/bindings) module use `node-gyp-build` to load your binding. + +``` js +var binding = require('node-gyp-build')(__dirname) +``` + +If you do these two things and bundle prebuilds with [`prebuildify`][prebuildify] your native module will work for most platforms +without having to compile on install time AND will work in both node and electron without the need to recompile between usage. + +Users can override `node-gyp-build` and force compiling by doing `npm install --build-from-source`. + +Prebuilds will be attempted loaded from `MODULE_PATH/prebuilds/...` and then next `EXEC_PATH/prebuilds/...` (the latter allowing use with `zeit/pkg`) + +## Supported prebuild names + +If so desired you can bundle more specific flavors, for example `musl` builds to support Alpine, or targeting a numbered ARM architecture version. + +These prebuilds can be bundled in addition to generic prebuilds; `node-gyp-build` will try to find the most specific flavor first. Prebuild filenames are composed of _tags_. The runtime tag takes precedence, as does an `abi` tag over `napi`. For more details on tags, please see [`prebuildify`][prebuildify]. + +Values for the `libc` and `armv` tags are auto-detected but can be overridden through the `LIBC` and `ARM_VERSION` environment variables, respectively. + +## License + +MIT + +[prebuildify]: https://github.com/prebuild/prebuildify +[node-gyp]: https://www.npmjs.com/package/node-gyp diff --git a/node_modules/node-gyp-build/SECURITY.md b/node_modules/node-gyp-build/SECURITY.md new file mode 100644 index 0000000..da9c516 --- /dev/null +++ b/node_modules/node-gyp-build/SECURITY.md @@ -0,0 +1,5 @@ +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. diff --git a/node_modules/node-gyp-build/bin.js b/node_modules/node-gyp-build/bin.js new file mode 100644 index 0000000..c778e0a --- /dev/null +++ b/node_modules/node-gyp-build/bin.js @@ -0,0 +1,84 @@ +#!/usr/bin/env node + +var proc = require('child_process') +var os = require('os') +var path = require('path') + +if (!buildFromSource()) { + proc.exec('node-gyp-build-test', function (err, stdout, stderr) { + if (err) { + if (verbose()) console.error(stderr) + preinstall() + } + }) +} else { + preinstall() +} + +function build () { + var win32 = os.platform() === 'win32' + var shell = win32 + var args = [win32 ? 'node-gyp.cmd' : 'node-gyp', 'rebuild'] + + try { + var pkg = require('node-gyp/package.json') + args = [ + process.execPath, + path.join(require.resolve('node-gyp/package.json'), '..', typeof pkg.bin === 'string' ? pkg.bin : pkg.bin['node-gyp']), + 'rebuild' + ] + shell = false + } catch (_) {} + + proc.spawn(args[0], args.slice(1), { stdio: 'inherit', shell, windowsHide: true }).on('exit', function (code) { + if (code || !process.argv[3]) process.exit(code) + exec(process.argv[3]).on('exit', function (code) { + process.exit(code) + }) + }) +} + +function preinstall () { + if (!process.argv[2]) return build() + exec(process.argv[2]).on('exit', function (code) { + if (code) process.exit(code) + build() + }) +} + +function exec (cmd) { + if (process.platform !== 'win32') { + var shell = os.platform() === 'android' ? 'sh' : true + return proc.spawn(cmd, [], { + shell, + stdio: 'inherit' + }) + } + + return proc.spawn(cmd, [], { + windowsVerbatimArguments: true, + stdio: 'inherit', + shell: true, + windowsHide: true + }) +} + +function buildFromSource () { + return hasFlag('--build-from-source') || process.env.npm_config_build_from_source === 'true' +} + +function verbose () { + return hasFlag('--verbose') || process.env.npm_config_loglevel === 'verbose' +} + +// TODO (next major): remove in favor of env.npm_config_* which works since npm +// 0.1.8 while npm_config_argv will stop working in npm 7. See npm/rfcs#90 +function hasFlag (flag) { + if (!process.env.npm_config_argv) return false + + try { + return JSON.parse(process.env.npm_config_argv).original.indexOf(flag) !== -1 + } catch (_) { + return false + } +} diff --git a/node_modules/node-gyp-build/build-test.js b/node_modules/node-gyp-build/build-test.js new file mode 100644 index 0000000..b6622a5 --- /dev/null +++ b/node_modules/node-gyp-build/build-test.js @@ -0,0 +1,19 @@ +#!/usr/bin/env node + +process.env.NODE_ENV = 'test' + +var path = require('path') +var test = null + +try { + var pkg = require(path.join(process.cwd(), 'package.json')) + if (pkg.name && process.env[pkg.name.toUpperCase().replace(/-/g, '_')]) { + process.exit(0) + } + test = pkg.prebuild.test +} catch (err) { + // do nothing +} + +if (test) require(path.join(process.cwd(), test)) +else require('./')() diff --git a/node_modules/node-gyp-build/index.js b/node_modules/node-gyp-build/index.js new file mode 100644 index 0000000..07eb14f --- /dev/null +++ b/node_modules/node-gyp-build/index.js @@ -0,0 +1,6 @@ +const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line +if (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that + module.exports = runtimeRequire.addon.bind(runtimeRequire) +} else { // else use the runtime version here + module.exports = require('./node-gyp-build.js') +} diff --git a/node_modules/node-gyp-build/node-gyp-build.js b/node_modules/node-gyp-build/node-gyp-build.js new file mode 100644 index 0000000..76b96e1 --- /dev/null +++ b/node_modules/node-gyp-build/node-gyp-build.js @@ -0,0 +1,207 @@ +var fs = require('fs') +var path = require('path') +var os = require('os') + +// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression' +var runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line + +var vars = (process.config && process.config.variables) || {} +var prebuildsOnly = !!process.env.PREBUILDS_ONLY +var abi = process.versions.modules // TODO: support old node where this is undef +var runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node') + +var arch = process.env.npm_config_arch || os.arch() +var platform = process.env.npm_config_platform || os.platform() +var libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc') +var armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || '' +var uv = (process.versions.uv || '').split('.')[0] + +module.exports = load + +function load (dir) { + return runtimeRequire(load.resolve(dir)) +} + +load.resolve = load.path = function (dir) { + dir = path.resolve(dir || '.') + + try { + var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_') + if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD'] + } catch (err) {} + + if (!prebuildsOnly) { + var release = getFirst(path.join(dir, 'build/Release'), matchBuild) + if (release) return release + + var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild) + if (debug) return debug + } + + var prebuild = resolve(dir) + if (prebuild) return prebuild + + var nearby = resolve(path.dirname(process.execPath)) + if (nearby) return nearby + + var target = [ + 'platform=' + platform, + 'arch=' + arch, + 'runtime=' + runtime, + 'abi=' + abi, + 'uv=' + uv, + armv ? 'armv=' + armv : '', + 'libc=' + libc, + 'node=' + process.versions.node, + process.versions.electron ? 'electron=' + process.versions.electron : '', + typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line + ].filter(Boolean).join(' ') + + throw new Error('No native build was found for ' + target + '\n loaded from: ' + dir + '\n') + + function resolve (dir) { + // Find matching "prebuilds/-" directory + var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple) + var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0] + if (!tuple) return + + // Find most specific flavor first + var prebuilds = path.join(dir, 'prebuilds', tuple.name) + var parsed = readdirSync(prebuilds).map(parseTags) + var candidates = parsed.filter(matchTags(runtime, abi)) + var winner = candidates.sort(compareTags(runtime))[0] + if (winner) return path.join(prebuilds, winner.file) + } +} + +function readdirSync (dir) { + try { + return fs.readdirSync(dir) + } catch (err) { + return [] + } +} + +function getFirst (dir, filter) { + var files = readdirSync(dir).filter(filter) + return files[0] && path.join(dir, files[0]) +} + +function matchBuild (name) { + return /\.node$/.test(name) +} + +function parseTuple (name) { + // Example: darwin-x64+arm64 + var arr = name.split('-') + if (arr.length !== 2) return + + var platform = arr[0] + var architectures = arr[1].split('+') + + if (!platform) return + if (!architectures.length) return + if (!architectures.every(Boolean)) return + + return { name, platform, architectures } +} + +function matchTuple (platform, arch) { + return function (tuple) { + if (tuple == null) return false + if (tuple.platform !== platform) return false + return tuple.architectures.includes(arch) + } +} + +function compareTuples (a, b) { + // Prefer single-arch prebuilds over multi-arch + return a.architectures.length - b.architectures.length +} + +function parseTags (file) { + var arr = file.split('.') + var extension = arr.pop() + var tags = { file: file, specificity: 0 } + + if (extension !== 'node') return + + for (var i = 0; i < arr.length; i++) { + var tag = arr[i] + + if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') { + tags.runtime = tag + } else if (tag === 'napi') { + tags.napi = true + } else if (tag.slice(0, 3) === 'abi') { + tags.abi = tag.slice(3) + } else if (tag.slice(0, 2) === 'uv') { + tags.uv = tag.slice(2) + } else if (tag.slice(0, 4) === 'armv') { + tags.armv = tag.slice(4) + } else if (tag === 'glibc' || tag === 'musl') { + tags.libc = tag + } else { + continue + } + + tags.specificity++ + } + + return tags +} + +function matchTags (runtime, abi) { + return function (tags) { + if (tags == null) return false + if (tags.runtime && tags.runtime !== runtime && !runtimeAgnostic(tags)) return false + if (tags.abi && tags.abi !== abi && !tags.napi) return false + if (tags.uv && tags.uv !== uv) return false + if (tags.armv && tags.armv !== armv) return false + if (tags.libc && tags.libc !== libc) return false + + return true + } +} + +function runtimeAgnostic (tags) { + return tags.runtime === 'node' && tags.napi +} + +function compareTags (runtime) { + // Precedence: non-agnostic runtime, abi over napi, then by specificity. + return function (a, b) { + if (a.runtime !== b.runtime) { + return a.runtime === runtime ? -1 : 1 + } else if (a.abi !== b.abi) { + return a.abi ? -1 : 1 + } else if (a.specificity !== b.specificity) { + return a.specificity > b.specificity ? -1 : 1 + } else { + return 0 + } + } +} + +function isNwjs () { + return !!(process.versions && process.versions.nw) +} + +function isElectron () { + if (process.versions && process.versions.electron) return true + if (process.env.ELECTRON_RUN_AS_NODE) return true + return typeof window !== 'undefined' && window.process && window.process.type === 'renderer' +} + +function isAlpine (platform) { + return platform === 'linux' && fs.existsSync('/etc/alpine-release') +} + +// Exposed for unit tests +// TODO: move to lib +load.parseTags = parseTags +load.matchTags = matchTags +load.compareTags = compareTags +load.parseTuple = parseTuple +load.matchTuple = matchTuple +load.compareTuples = compareTuples diff --git a/node_modules/node-gyp-build/optional.js b/node_modules/node-gyp-build/optional.js new file mode 100644 index 0000000..8daa04a --- /dev/null +++ b/node_modules/node-gyp-build/optional.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node + +/* +I am only useful as an install script to make node-gyp not compile for purely optional native deps +*/ + +process.exit(0) diff --git a/node_modules/node-gyp-build/package.json b/node_modules/node-gyp-build/package.json new file mode 100644 index 0000000..6f6f28b --- /dev/null +++ b/node_modules/node-gyp-build/package.json @@ -0,0 +1,43 @@ +{ + "name": "node-gyp-build", + "version": "4.8.4", + "description": "Build tool and bindings loader for node-gyp that supports prebuilds", + "main": "index.js", + "imports": { + "fs": { + "bare": "builtin:fs", + "default": "fs" + }, + "path": { + "bare": "builtin:path", + "default": "path" + }, + "os": { + "bare": "builtin:os", + "default": "os" + } + }, + "devDependencies": { + "array-shuffle": "^1.0.1", + "standard": "^14.0.0", + "tape": "^5.0.0" + }, + "scripts": { + "test": "standard && node test" + }, + "bin": { + "node-gyp-build": "./bin.js", + "node-gyp-build-optional": "./optional.js", + "node-gyp-build-test": "./build-test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/prebuild/node-gyp-build.git" + }, + "author": "Mathias Buus (@mafintosh)", + "license": "MIT", + "bugs": { + "url": "https://github.com/prebuild/node-gyp-build/issues" + }, + "homepage": "https://github.com/prebuild/node-gyp-build" +} diff --git a/node_modules/proxy-from-env/.eslintrc b/node_modules/proxy-from-env/.eslintrc new file mode 100644 index 0000000..a51449b --- /dev/null +++ b/node_modules/proxy-from-env/.eslintrc @@ -0,0 +1,29 @@ +{ + "env": { + "node": true + }, + "rules": { + "array-bracket-spacing": [2, "never"], + "block-scoped-var": 2, + "brace-style": [2, "1tbs"], + "camelcase": 1, + "computed-property-spacing": [2, "never"], + "curly": 2, + "eol-last": 2, + "eqeqeq": [2, "smart"], + "max-depth": [1, 3], + "max-len": [1, 80], + "max-statements": [1, 15], + "new-cap": 1, + "no-extend-native": 2, + "no-mixed-spaces-and-tabs": 2, + "no-trailing-spaces": 2, + "no-unused-vars": 1, + "no-use-before-define": [2, "nofunc"], + "object-curly-spacing": [2, "never"], + "quotes": [2, "single", "avoid-escape"], + "semi": [2, "always"], + "keyword-spacing": [2, {"before": true, "after": true}], + "space-unary-ops": 2 + } +} diff --git a/node_modules/proxy-from-env/.travis.yml b/node_modules/proxy-from-env/.travis.yml new file mode 100644 index 0000000..64a05f9 --- /dev/null +++ b/node_modules/proxy-from-env/.travis.yml @@ -0,0 +1,10 @@ +language: node_js +node_js: + - node + - lts/* +script: + - npm run lint + # test-coverage will also run the tests, but does not print helpful output upon test failure. + # So we also run the tests separately. + - npm run test + - npm run test-coverage && cat coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf coverage diff --git a/node_modules/proxy-from-env/LICENSE b/node_modules/proxy-from-env/LICENSE new file mode 100644 index 0000000..8f25097 --- /dev/null +++ b/node_modules/proxy-from-env/LICENSE @@ -0,0 +1,20 @@ +The MIT License + +Copyright (C) 2016-2018 Rob Wu + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/proxy-from-env/README.md b/node_modules/proxy-from-env/README.md new file mode 100644 index 0000000..e82520c --- /dev/null +++ b/node_modules/proxy-from-env/README.md @@ -0,0 +1,131 @@ +# proxy-from-env + +[![Build Status](https://travis-ci.org/Rob--W/proxy-from-env.svg?branch=master)](https://travis-ci.org/Rob--W/proxy-from-env) +[![Coverage Status](https://coveralls.io/repos/github/Rob--W/proxy-from-env/badge.svg?branch=master)](https://coveralls.io/github/Rob--W/proxy-from-env?branch=master) + +`proxy-from-env` is a Node.js package that exports a function (`getProxyForUrl`) +that takes an input URL (a string or +[`url.parse`](https://nodejs.org/docs/latest/api/url.html#url_url_parsing)'s +return value) and returns the desired proxy URL (also a string) based on +standard proxy environment variables. If no proxy is set, an empty string is +returned. + +It is your responsibility to actually proxy the request using the given URL. + +Installation: + +```sh +npm install proxy-from-env +``` + +## Example +This example shows how the data for a URL can be fetched via the +[`http` module](https://nodejs.org/api/http.html), in a proxy-aware way. + +```javascript +var http = require('http'); +var parseUrl = require('url').parse; +var getProxyForUrl = require('proxy-from-env').getProxyForUrl; + +var some_url = 'http://example.com/something'; + +// // Example, if there is a proxy server at 10.0.0.1:1234, then setting the +// // http_proxy environment variable causes the request to go through a proxy. +// process.env.http_proxy = 'http://10.0.0.1:1234'; +// +// // But if the host to be proxied is listed in NO_PROXY, then the request is +// // not proxied (but a direct request is made). +// process.env.no_proxy = 'example.com'; + +var proxy_url = getProxyForUrl(some_url); // <-- Our magic. +if (proxy_url) { + // Should be proxied through proxy_url. + var parsed_some_url = parseUrl(some_url); + var parsed_proxy_url = parseUrl(proxy_url); + // A HTTP proxy is quite simple. It is similar to a normal request, except the + // path is an absolute URL, and the proxied URL's host is put in the header + // instead of the server's actual host. + httpOptions = { + protocol: parsed_proxy_url.protocol, + hostname: parsed_proxy_url.hostname, + port: parsed_proxy_url.port, + path: parsed_some_url.href, + headers: { + Host: parsed_some_url.host, // = host name + optional port. + }, + }; +} else { + // Direct request. + httpOptions = some_url; +} +http.get(httpOptions, function(res) { + var responses = []; + res.on('data', function(chunk) { responses.push(chunk); }); + res.on('end', function() { console.log(responses.join('')); }); +}); + +``` + +## Environment variables +The environment variables can be specified in lowercase or uppercase, with the +lowercase name having precedence over the uppercase variant. A variable that is +not set has the same meaning as a variable that is set but has no value. + +### NO\_PROXY + +`NO_PROXY` is a list of host names (optionally with a port). If the input URL +matches any of the entries in `NO_PROXY`, then the input URL should be fetched +by a direct request (i.e. without a proxy). + +Matching follows the following rules: + +- `NO_PROXY=*` disables all proxies. +- Space and commas may be used to separate the entries in the `NO_PROXY` list. +- If `NO_PROXY` does not contain any entries, then proxies are never disabled. +- If a port is added after the host name, then the ports must match. If the URL + does not have an explicit port name, the protocol's default port is used. +- Generally, the proxy is only disabled if the host name is an exact match for + an entry in the `NO_PROXY` list. The only exceptions are entries that start + with a dot or with a wildcard; then the proxy is disabled if the host name + ends with the entry. + +See `test.js` for examples of what should match and what does not. + +### \*\_PROXY + +The environment variable used for the proxy depends on the protocol of the URL. +For example, `https://example.com` uses the "https" protocol, and therefore the +proxy to be used is `HTTPS_PROXY` (_NOT_ `HTTP_PROXY`, which is _only_ used for +http:-URLs). + +The library is not limited to http(s), other schemes such as +`FTP_PROXY` (ftp:), +`WSS_PROXY` (wss:), +`WS_PROXY` (ws:) +are also supported. + +If present, `ALL_PROXY` is used as fallback if there is no other match. + + +## External resources +The exact way of parsing the environment variables is not codified in any +standard. This library is designed to be compatible with formats as expected by +existing software. +The following resources were used to determine the desired behavior: + +- cURL: + https://curl.haxx.se/docs/manpage.html#ENVIRONMENT + https://github.com/curl/curl/blob/4af40b3646d3b09f68e419f7ca866ff395d1f897/lib/url.c#L4446-L4514 + https://github.com/curl/curl/blob/4af40b3646d3b09f68e419f7ca866ff395d1f897/lib/url.c#L4608-L4638 + +- wget: + https://www.gnu.org/software/wget/manual/wget.html#Proxies + http://git.savannah.gnu.org/cgit/wget.git/tree/src/init.c?id=636a5f9a1c508aa39e35a3a8e9e54520a284d93d#n383 + http://git.savannah.gnu.org/cgit/wget.git/tree/src/retr.c?id=93c1517c4071c4288ba5a4b038e7634e4c6b5482#n1278 + +- W3: + https://www.w3.org/Daemon/User/Proxies/ProxyClients.html + +- Python's urllib: + https://github.com/python/cpython/blob/936135bb97fe04223aa30ca6e98eac8f3ed6b349/Lib/urllib/request.py#L755-L782 + https://github.com/python/cpython/blob/936135bb97fe04223aa30ca6e98eac8f3ed6b349/Lib/urllib/request.py#L2444-L2479 diff --git a/node_modules/proxy-from-env/index.js b/node_modules/proxy-from-env/index.js new file mode 100644 index 0000000..df75004 --- /dev/null +++ b/node_modules/proxy-from-env/index.js @@ -0,0 +1,108 @@ +'use strict'; + +var parseUrl = require('url').parse; + +var DEFAULT_PORTS = { + ftp: 21, + gopher: 70, + http: 80, + https: 443, + ws: 80, + wss: 443, +}; + +var stringEndsWith = String.prototype.endsWith || function(s) { + return s.length <= this.length && + this.indexOf(s, this.length - s.length) !== -1; +}; + +/** + * @param {string|object} url - The URL, or the result from url.parse. + * @return {string} The URL of the proxy that should handle the request to the + * given URL. If no proxy is set, this will be an empty string. + */ +function getProxyForUrl(url) { + var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {}; + var proto = parsedUrl.protocol; + var hostname = parsedUrl.host; + var port = parsedUrl.port; + if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') { + return ''; // Don't proxy URLs without a valid scheme or host. + } + + proto = proto.split(':', 1)[0]; + // Stripping ports in this way instead of using parsedUrl.hostname to make + // sure that the brackets around IPv6 addresses are kept. + hostname = hostname.replace(/:\d*$/, ''); + port = parseInt(port) || DEFAULT_PORTS[proto] || 0; + if (!shouldProxy(hostname, port)) { + return ''; // Don't proxy URLs that match NO_PROXY. + } + + var proxy = + getEnv('npm_config_' + proto + '_proxy') || + getEnv(proto + '_proxy') || + getEnv('npm_config_proxy') || + getEnv('all_proxy'); + if (proxy && proxy.indexOf('://') === -1) { + // Missing scheme in proxy, default to the requested URL's scheme. + proxy = proto + '://' + proxy; + } + return proxy; +} + +/** + * Determines whether a given URL should be proxied. + * + * @param {string} hostname - The host name of the URL. + * @param {number} port - The effective port of the URL. + * @returns {boolean} Whether the given URL should be proxied. + * @private + */ +function shouldProxy(hostname, port) { + var NO_PROXY = + (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase(); + if (!NO_PROXY) { + return true; // Always proxy if NO_PROXY is not set. + } + if (NO_PROXY === '*') { + return false; // Never proxy if wildcard is set. + } + + return NO_PROXY.split(/[,\s]/).every(function(proxy) { + if (!proxy) { + return true; // Skip zero-length hosts. + } + var parsedProxy = proxy.match(/^(.+):(\d+)$/); + var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy; + var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0; + if (parsedProxyPort && parsedProxyPort !== port) { + return true; // Skip if ports don't match. + } + + if (!/^[.*]/.test(parsedProxyHostname)) { + // No wildcards, so stop proxying if there is an exact match. + return hostname !== parsedProxyHostname; + } + + if (parsedProxyHostname.charAt(0) === '*') { + // Remove leading wildcard. + parsedProxyHostname = parsedProxyHostname.slice(1); + } + // Stop proxying if the hostname ends with the no_proxy host. + return !stringEndsWith.call(hostname, parsedProxyHostname); + }); +} + +/** + * Get the value for an environment variable. + * + * @param {string} key - The name of the environment variable. + * @return {string} The value of the environment variable. + * @private + */ +function getEnv(key) { + return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || ''; +} + +exports.getProxyForUrl = getProxyForUrl; diff --git a/node_modules/proxy-from-env/package.json b/node_modules/proxy-from-env/package.json new file mode 100644 index 0000000..be2b845 --- /dev/null +++ b/node_modules/proxy-from-env/package.json @@ -0,0 +1,34 @@ +{ + "name": "proxy-from-env", + "version": "1.1.0", + "description": "Offers getProxyForUrl to get the proxy URL for a URL, respecting the *_PROXY (e.g. HTTP_PROXY) and NO_PROXY environment variables.", + "main": "index.js", + "scripts": { + "lint": "eslint *.js", + "test": "mocha ./test.js --reporter spec", + "test-coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter spec" + }, + "repository": { + "type": "git", + "url": "https://github.com/Rob--W/proxy-from-env.git" + }, + "keywords": [ + "proxy", + "http_proxy", + "https_proxy", + "no_proxy", + "environment" + ], + "author": "Rob Wu (https://robwu.nl/)", + "license": "MIT", + "bugs": { + "url": "https://github.com/Rob--W/proxy-from-env/issues" + }, + "homepage": "https://github.com/Rob--W/proxy-from-env#readme", + "devDependencies": { + "coveralls": "^3.0.9", + "eslint": "^6.8.0", + "istanbul": "^0.4.5", + "mocha": "^7.1.0" + } +} diff --git a/node_modules/proxy-from-env/test.js b/node_modules/proxy-from-env/test.js new file mode 100644 index 0000000..abf6542 --- /dev/null +++ b/node_modules/proxy-from-env/test.js @@ -0,0 +1,483 @@ +/* eslint max-statements:0 */ +'use strict'; + +var assert = require('assert'); +var parseUrl = require('url').parse; + +var getProxyForUrl = require('./').getProxyForUrl; + +// Runs the callback with process.env temporarily set to env. +function runWithEnv(env, callback) { + var originalEnv = process.env; + process.env = env; + try { + callback(); + } finally { + process.env = originalEnv; + } +} + +// Defines a test case that checks whether getProxyForUrl(input) === expected. +function testProxyUrl(env, expected, input) { + assert(typeof env === 'object' && env !== null); + // Copy object to make sure that the in param does not get modified between + // the call of this function and the use of it below. + env = JSON.parse(JSON.stringify(env)); + + var title = 'getProxyForUrl(' + JSON.stringify(input) + ')' + + ' === ' + JSON.stringify(expected); + + // Save call stack for later use. + var stack = {}; + Error.captureStackTrace(stack, testProxyUrl); + // Only use the last stack frame because that shows where this function is + // called, and that is sufficient for our purpose. No need to flood the logs + // with an uninteresting stack trace. + stack = stack.stack.split('\n', 2)[1]; + + it(title, function() { + var actual; + runWithEnv(env, function() { + actual = getProxyForUrl(input); + }); + if (expected === actual) { + return; // Good! + } + try { + assert.strictEqual(expected, actual); // Create a formatted error message. + // Should not happen because previously we determined expected !== actual. + throw new Error('assert.strictEqual passed. This is impossible!'); + } catch (e) { + // Use the original stack trace, so we can see a helpful line number. + e.stack = e.message + stack; + throw e; + } + }); +} + +describe('getProxyForUrl', function() { + describe('No proxy variables', function() { + var env = {}; + testProxyUrl(env, '', 'http://example.com'); + testProxyUrl(env, '', 'https://example.com'); + testProxyUrl(env, '', 'ftp://example.com'); + }); + + describe('Invalid URLs', function() { + var env = {}; + env.ALL_PROXY = 'http://unexpected.proxy'; + testProxyUrl(env, '', 'bogus'); + testProxyUrl(env, '', '//example.com'); + testProxyUrl(env, '', '://example.com'); + testProxyUrl(env, '', '://'); + testProxyUrl(env, '', '/path'); + testProxyUrl(env, '', ''); + testProxyUrl(env, '', 'http:'); + testProxyUrl(env, '', 'http:/'); + testProxyUrl(env, '', 'http://'); + testProxyUrl(env, '', 'prototype://'); + testProxyUrl(env, '', 'hasOwnProperty://'); + testProxyUrl(env, '', '__proto__://'); + testProxyUrl(env, '', undefined); + testProxyUrl(env, '', null); + testProxyUrl(env, '', {}); + testProxyUrl(env, '', {host: 'x', protocol: 1}); + testProxyUrl(env, '', {host: 1, protocol: 'x'}); + }); + + describe('http_proxy and HTTP_PROXY', function() { + var env = {}; + env.HTTP_PROXY = 'http://http-proxy'; + + testProxyUrl(env, '', 'https://example'); + testProxyUrl(env, 'http://http-proxy', 'http://example'); + testProxyUrl(env, 'http://http-proxy', parseUrl('http://example')); + + // eslint-disable-next-line camelcase + env.http_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'http://example'); + }); + + describe('http_proxy with non-sensical value', function() { + var env = {}; + // Crazy values should be passed as-is. It is the responsibility of the + // one who launches the application that the value makes sense. + // TODO: Should we be stricter and perform validation? + env.HTTP_PROXY = 'Crazy \n!() { ::// }'; + testProxyUrl(env, 'Crazy \n!() { ::// }', 'http://wow'); + + // The implementation assumes that the HTTP_PROXY environment variable is + // somewhat reasonable, and if the scheme is missing, it is added. + // Garbage in, garbage out some would say... + env.HTTP_PROXY = 'crazy without colon slash slash'; + testProxyUrl(env, 'http://crazy without colon slash slash', 'http://wow'); + }); + + describe('https_proxy and HTTPS_PROXY', function() { + var env = {}; + // Assert that there is no fall back to http_proxy + env.HTTP_PROXY = 'http://unexpected.proxy'; + testProxyUrl(env, '', 'https://example'); + + env.HTTPS_PROXY = 'http://https-proxy'; + testProxyUrl(env, 'http://https-proxy', 'https://example'); + + // eslint-disable-next-line camelcase + env.https_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'https://example'); + }); + + describe('ftp_proxy', function() { + var env = {}; + // Something else than http_proxy / https, as a sanity check. + env.FTP_PROXY = 'http://ftp-proxy'; + + testProxyUrl(env, 'http://ftp-proxy', 'ftp://example'); + testProxyUrl(env, '', 'ftps://example'); + }); + + describe('all_proxy', function() { + var env = {}; + env.ALL_PROXY = 'http://catch-all'; + testProxyUrl(env, 'http://catch-all', 'https://example'); + + // eslint-disable-next-line camelcase + env.all_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'https://example'); + }); + + describe('all_proxy without scheme', function() { + var env = {}; + env.ALL_PROXY = 'noscheme'; + testProxyUrl(env, 'http://noscheme', 'http://example'); + testProxyUrl(env, 'https://noscheme', 'https://example'); + + // The module does not impose restrictions on the scheme. + testProxyUrl(env, 'bogus-scheme://noscheme', 'bogus-scheme://example'); + + // But the URL should still be valid. + testProxyUrl(env, '', 'bogus'); + }); + + describe('no_proxy empty', function() { + var env = {}; + env.HTTPS_PROXY = 'http://proxy'; + + // NO_PROXY set but empty. + env.NO_PROXY = ''; + testProxyUrl(env, 'http://proxy', 'https://example'); + + // No entries in NO_PROXY (comma). + env.NO_PROXY = ','; + testProxyUrl(env, 'http://proxy', 'https://example'); + + // No entries in NO_PROXY (whitespace). + env.NO_PROXY = ' '; + testProxyUrl(env, 'http://proxy', 'https://example'); + + // No entries in NO_PROXY (multiple whitespace / commas). + env.NO_PROXY = ',\t,,,\n, ,\r'; + testProxyUrl(env, 'http://proxy', 'https://example'); + }); + + describe('no_proxy=example (single host)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = 'example'; + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, '', 'http://example:80'); + testProxyUrl(env, '', 'http://example:0'); + testProxyUrl(env, '', 'http://example:1337'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, 'http://proxy', 'http://a.b.example'); + testProxyUrl(env, 'http://proxy', 'http://host/example'); + }); + + describe('no_proxy=sub.example (subdomain)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = 'sub.example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://example:80'); + testProxyUrl(env, 'http://proxy', 'http://example:0'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://no.sub.example'); + testProxyUrl(env, 'http://proxy', 'http://sub-example'); + testProxyUrl(env, 'http://proxy', 'http://example.sub'); + }); + + describe('no_proxy=example:80 (host + port)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = 'example:80'; + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, '', 'http://example:80'); + testProxyUrl(env, '', 'http://example:0'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, 'http://proxy', 'http://a.b.example'); + }); + + describe('no_proxy=.example (host suffix)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '.example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://example:80'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, '', 'http://sub.example:80'); + testProxyUrl(env, '', 'http://sub.example:1337'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, '', 'http://a.b.example'); + }); + + describe('no_proxy=*', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + env.NO_PROXY = '*'; + testProxyUrl(env, '', 'http://example.com'); + }); + + describe('no_proxy=*.example (host suffix with *.)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '*.example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://example:80'); + testProxyUrl(env, 'http://proxy', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, '', 'http://sub.example:80'); + testProxyUrl(env, '', 'http://sub.example:1337'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, '', 'http://a.b.example'); + }); + + describe('no_proxy=*example (substring suffix)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '*example'; + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, '', 'http://example:80'); + testProxyUrl(env, '', 'http://example:1337'); + testProxyUrl(env, '', 'http://sub.example'); + testProxyUrl(env, '', 'http://sub.example:80'); + testProxyUrl(env, '', 'http://sub.example:1337'); + testProxyUrl(env, '', 'http://prefexample'); + testProxyUrl(env, '', 'http://a.b.example'); + testProxyUrl(env, 'http://proxy', 'http://example.no'); + testProxyUrl(env, 'http://proxy', 'http://host/example'); + }); + + describe('no_proxy=.*example (arbitrary wildcards are NOT supported)', + function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '.*example'; + testProxyUrl(env, 'http://proxy', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://sub.example'); + testProxyUrl(env, 'http://proxy', 'http://prefexample'); + testProxyUrl(env, 'http://proxy', 'http://x.prefexample'); + testProxyUrl(env, 'http://proxy', 'http://a.b.example'); + }); + + describe('no_proxy=[::1],[::2]:80,10.0.0.1,10.0.0.2:80 (IP addresses)', + function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '[::1],[::2]:80,10.0.0.1,10.0.0.2:80'; + testProxyUrl(env, '', 'http://[::1]/'); + testProxyUrl(env, '', 'http://[::1]:80/'); + testProxyUrl(env, '', 'http://[::1]:1337/'); + + testProxyUrl(env, '', 'http://[::2]/'); + testProxyUrl(env, '', 'http://[::2]:80/'); + testProxyUrl(env, 'http://proxy', 'http://[::2]:1337/'); + + testProxyUrl(env, '', 'http://10.0.0.1/'); + testProxyUrl(env, '', 'http://10.0.0.1:80/'); + testProxyUrl(env, '', 'http://10.0.0.1:1337/'); + + testProxyUrl(env, '', 'http://10.0.0.2/'); + testProxyUrl(env, '', 'http://10.0.0.2:80/'); + testProxyUrl(env, 'http://proxy', 'http://10.0.0.2:1337/'); + }); + + describe('no_proxy=127.0.0.1/32 (CIDR is NOT supported)', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '127.0.0.1/32'; + testProxyUrl(env, 'http://proxy', 'http://127.0.0.1'); + testProxyUrl(env, 'http://proxy', 'http://127.0.0.1/32'); + }); + + describe('no_proxy=127.0.0.1 does NOT match localhost', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + + env.NO_PROXY = '127.0.0.1'; + testProxyUrl(env, '', 'http://127.0.0.1'); + // We're not performing DNS queries, so this shouldn't match. + testProxyUrl(env, 'http://proxy', 'http://localhost'); + }); + + describe('no_proxy with protocols that have a default port', function() { + var env = {}; + env.WS_PROXY = 'http://ws'; + env.WSS_PROXY = 'http://wss'; + env.HTTP_PROXY = 'http://http'; + env.HTTPS_PROXY = 'http://https'; + env.GOPHER_PROXY = 'http://gopher'; + env.FTP_PROXY = 'http://ftp'; + env.ALL_PROXY = 'http://all'; + + env.NO_PROXY = 'xxx:21,xxx:70,xxx:80,xxx:443'; + + testProxyUrl(env, '', 'http://xxx'); + testProxyUrl(env, '', 'http://xxx:80'); + testProxyUrl(env, 'http://http', 'http://xxx:1337'); + + testProxyUrl(env, '', 'ws://xxx'); + testProxyUrl(env, '', 'ws://xxx:80'); + testProxyUrl(env, 'http://ws', 'ws://xxx:1337'); + + testProxyUrl(env, '', 'https://xxx'); + testProxyUrl(env, '', 'https://xxx:443'); + testProxyUrl(env, 'http://https', 'https://xxx:1337'); + + testProxyUrl(env, '', 'wss://xxx'); + testProxyUrl(env, '', 'wss://xxx:443'); + testProxyUrl(env, 'http://wss', 'wss://xxx:1337'); + + testProxyUrl(env, '', 'gopher://xxx'); + testProxyUrl(env, '', 'gopher://xxx:70'); + testProxyUrl(env, 'http://gopher', 'gopher://xxx:1337'); + + testProxyUrl(env, '', 'ftp://xxx'); + testProxyUrl(env, '', 'ftp://xxx:21'); + testProxyUrl(env, 'http://ftp', 'ftp://xxx:1337'); + }); + + describe('no_proxy should not be case-sensitive', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + env.NO_PROXY = 'XXX,YYY,ZzZ'; + + testProxyUrl(env, '', 'http://xxx'); + testProxyUrl(env, '', 'http://XXX'); + testProxyUrl(env, '', 'http://yyy'); + testProxyUrl(env, '', 'http://YYY'); + testProxyUrl(env, '', 'http://ZzZ'); + testProxyUrl(env, '', 'http://zZz'); + }); + + describe('NPM proxy configuration', function() { + describe('npm_config_http_proxy should work', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://http-proxy'; + + testProxyUrl(env, '', 'https://example'); + testProxyUrl(env, 'http://http-proxy', 'http://example'); + + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'http://example'); + }); + // eslint-disable-next-line max-len + describe('npm_config_http_proxy should take precedence over HTTP_PROXY and npm_config_proxy', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://http-proxy'; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://unexpected-proxy'; + env.HTTP_PROXY = 'http://unexpected-proxy'; + + testProxyUrl(env, 'http://http-proxy', 'http://example'); + }); + describe('npm_config_https_proxy should work', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_http_proxy = 'http://unexpected.proxy'; + testProxyUrl(env, '', 'https://example'); + + // eslint-disable-next-line camelcase + env.npm_config_https_proxy = 'http://https-proxy'; + testProxyUrl(env, 'http://https-proxy', 'https://example'); + + // eslint-disable-next-line camelcase + env.npm_config_https_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'https://example'); + }); + // eslint-disable-next-line max-len + describe('npm_config_https_proxy should take precedence over HTTPS_PROXY and npm_config_proxy', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_https_proxy = 'http://https-proxy'; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://unexpected-proxy'; + env.HTTPS_PROXY = 'http://unexpected-proxy'; + + testProxyUrl(env, 'http://https-proxy', 'https://example'); + }); + describe('npm_config_proxy should work', function() { + var env = {}; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://http-proxy'; + testProxyUrl(env, 'http://http-proxy', 'http://example'); + testProxyUrl(env, 'http://http-proxy', 'https://example'); + + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://priority'; + testProxyUrl(env, 'http://priority', 'http://example'); + testProxyUrl(env, 'http://priority', 'https://example'); + }); + // eslint-disable-next-line max-len + describe('HTTP_PROXY and HTTPS_PROXY should take precedence over npm_config_proxy', function() { + var env = {}; + env.HTTP_PROXY = 'http://http-proxy'; + env.HTTPS_PROXY = 'http://https-proxy'; + // eslint-disable-next-line camelcase + env.npm_config_proxy = 'http://unexpected-proxy'; + testProxyUrl(env, 'http://http-proxy', 'http://example'); + testProxyUrl(env, 'http://https-proxy', 'https://example'); + }); + describe('npm_config_no_proxy should work', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + // eslint-disable-next-line camelcase + env.npm_config_no_proxy = 'example'; + + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://otherwebsite'); + }); + // eslint-disable-next-line max-len + describe('npm_config_no_proxy should take precedence over NO_PROXY', function() { + var env = {}; + env.HTTP_PROXY = 'http://proxy'; + env.NO_PROXY = 'otherwebsite'; + // eslint-disable-next-line camelcase + env.npm_config_no_proxy = 'example'; + + testProxyUrl(env, '', 'http://example'); + testProxyUrl(env, 'http://proxy', 'http://otherwebsite'); + }); + }); +}); diff --git a/node_modules/screeps-api/FUNDING.yml b/node_modules/screeps-api/FUNDING.yml new file mode 100644 index 0000000..526ff82 --- /dev/null +++ b/node_modules/screeps-api/FUNDING.yml @@ -0,0 +1,2 @@ +patreon: ags131 +github: [ags131] diff --git a/node_modules/screeps-api/dist/ScreepsAPI.js b/node_modules/screeps-api/dist/ScreepsAPI.js new file mode 100644 index 0000000..62209c1 --- /dev/null +++ b/node_modules/screeps-api/dist/ScreepsAPI.js @@ -0,0 +1,1537 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const WebSocket = require('ws'); +const URL = require('url'); +const events = require('events'); +const Debug = require('debug'); +const zlib = require('zlib'); +const axios = require('axios'); +const util = require('util'); +const fs = require('fs'); +const YAML = require('yamljs'); +const path = require('path'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +const WebSocket__default = /*#__PURE__*/_interopDefaultLegacy(WebSocket); +const URL__default = /*#__PURE__*/_interopDefaultLegacy(URL); +const Debug__default = /*#__PURE__*/_interopDefaultLegacy(Debug); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); +const axios__default = /*#__PURE__*/_interopDefaultLegacy(axios); +const util__default = /*#__PURE__*/_interopDefaultLegacy(util); +const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +const YAML__default = /*#__PURE__*/_interopDefaultLegacy(YAML); +const path__default = /*#__PURE__*/_interopDefaultLegacy(path); + +const debug = Debug__default['default']('screepsapi:socket'); + +const DEFAULTS$1 = { + reconnect: true, + resubscribe: true, + keepAlive: true, + maxRetries: 10, + maxRetryDelay: 60 * 1000 // in milli-seconds +}; + +class Socket extends events.EventEmitter { + constructor (ScreepsAPI) { + super(); + this.api = ScreepsAPI; + this.opts = Object.assign({}, DEFAULTS$1); + this.on('error', () => {}); // catch to prevent unhandled-exception errors + this.reset(); + this.on('auth', ev => { + if (ev.data.status === 'ok') { + while (this.__queue.length) { + this.emit(this.__queue.shift()); + } + clearInterval(this.keepAliveInter); + if (this.opts.keepAlive) { + this.keepAliveInter = setInterval(() => this.ws && this.ws.ping(1), 10000); + } + } + }); + } + + reset () { + this.authed = false; + this.connected = false; + this.reconnecting = false; + clearInterval(this.keepAliveInter); + this.keepAliveInter = 0; + this.__queue = []; // pending messages (to send once authenticated) + this.__subQueue = []; // pending subscriptions (to request once authenticated) + this.__subs = {}; // number of callbacks for each subscription + } + + async connect (opts = {}) { + Object.assign(this.opts, opts); + if (!this.api.token) { + throw new Error('No token! Call api.auth() before connecting the socket!') + } + return new Promise((resolve, reject) => { + const baseURL = this.api.opts.url.replace('http', 'ws'); + const wsurl = new URL.URL('socket/websocket', baseURL); + this.ws = new WebSocket__default['default'](wsurl); + this.ws.on('open', () => { + this.connected = true; + this.reconnecting = false; + if (this.opts.resubscribe) { + this.__subQueue.push(...Object.keys(this.__subs)); + } + debug('connected'); + this.emit('connected'); + resolve(this.auth(this.api.token)); + }); + this.ws.on('close', () => { + clearInterval(this.keepAliveInter); + this.authed = false; + this.connected = false; + debug('disconnected'); + this.emit('disconnected'); + if (this.opts.reconnect) { + this.reconnect().catch(() => { /* error emitted in reconnect() */ }); + } + }); + this.ws.on('error', (err) => { + this.ws.terminate(); + this.emit('error', err); + debug(`error ${err}`); + if (!this.connected) { + reject(err); + } + }); + this.ws.on('unexpected-response', (req, res) => { + const err = new Error(`WS Unexpected Response: ${res.statusCode} ${res.statusMessage}`); + this.emit('error', err); + reject(err); + }); + this.ws.on('message', (data) => this.handleMessage(data)); + }) + } + + async reconnect () { + if (this.reconnecting) { + return + } + this.reconnecting = true; + let retries = 0; + let retry; + do { + let time = Math.pow(2, retries) * 100; + if (time > this.opts.maxRetryDelay) time = this.opts.maxRetryDelay; + await this.sleep(time); + if (!this.reconnecting) return // reset() called in-between + try { + await this.connect(); + retry = false; + } catch (err) { + retry = true; + } + retries++; + debug(`reconnect ${retries}/${this.opts.maxRetries}`); + } while (retry && retries < this.opts.maxRetries) + if (retry) { + const err = new Error(`Reconnection failed after ${this.opts.maxRetries} retries`); + this.reconnecting = false; + debug('reconnect failed'); + this.emit('error', err); + throw err + } else { + // Resume existing subscriptions on the new socket + Object.keys(this.__subs).forEach(sub => this.subscribe(sub)); + } + } + + disconnect () { + debug('disconnect'); + clearInterval(this.keepAliveInter); + this.ws.removeAllListeners(); // remove listeners first or we may trigger reconnection & Co. + this.ws.terminate(); + this.reset(); + this.emit('disconnected'); + } + + sleep (time) { + return new Promise((resolve, reject) => { + setTimeout(resolve, time); + }) + } + + handleMessage (msg) { + msg = msg.data || msg; // Handle ws/browser difference + if (msg.slice(0, 3) === 'gz:') { msg = this.api.inflate(msg); } + debug(`message ${msg}`); + if (msg[0] === '[') { + msg = JSON.parse(msg); + let [, type, id, channel] = msg[0].match(/^(.+):(.+?)(?:\/(.+))?$/); + channel = channel || type; + const event = { channel, id, type, data: msg[1] }; + this.emit(msg[0], event); + this.emit(event.channel, event); + this.emit('message', event); + } else { + const [channel, ...data] = msg.split(' '); + const event = { type: 'server', channel, data }; + if (channel === 'auth') { event.data = { status: data[0], token: data[1] }; } + if (['protocol', 'time', 'package'].includes(channel)) { event.data = { [channel]: data[0] }; } + this.emit(channel, event); + this.emit('message', event); + } + } + + async gzip (bool) { + this.send(`gzip ${bool ? 'on' : 'off'}`); + } + + async send (data) { + if (!this.connected) { + this.__queue.push(data); + } else { + this.ws.send(data); + } + } + + auth (token) { + return new Promise((resolve, reject) => { + this.send(`auth ${token}`); + this.once('auth', (ev) => { + const { data } = ev; + if (data.status === 'ok') { + this.authed = true; + this.emit('token', data.token); + this.emit('authed'); + while (this.__subQueue.length) { + this.send(this.__subQueue.shift()); + } + resolve(); + } else { + reject(new Error('socket auth failed')); + } + }); + }) + } + + async subscribe (path, cb) { + if (!path) return + const userID = await this.api.userID(); + if (!path.match(/^(\w+):(.+?)$/)) { path = `user:${userID}/${path}`; } + if (this.authed) { + this.send(`subscribe ${path}`); + } else { + this.__subQueue.push(`subscribe ${path}`); + } + this.emit('subscribe', path); + this.__subs[path] = this.__subs[path] || 0; + this.__subs[path]++; + if (cb) this.on(path, cb); + } + + async unsubscribe (path) { + if (!path) return + const userID = await this.api.userID(); + if (!path.match(/^(\w+):(.+?)$/)) { path = `user:${userID}/${path}`; } + this.send(`unsubscribe ${path}`); + this.emit('unsubscribe', path); + if (this.__subs[path]) this.__subs[path]--; + } +} + +const debugHttp = Debug__default['default']('screepsapi:http'); +const debugRateLimit = Debug__default['default']('screepsapi:ratelimit'); + +const { format } = URL__default['default']; + +const gunzipAsync = util__default['default'].promisify(zlib__default['default'].gunzip); +const inflateAsync = util__default['default'].promisify(zlib__default['default'].inflate); + +const DEFAULT_SHARD = 'shard0'; +const OFFICIAL_HISTORY_INTERVAL = 100; +const PRIVATE_HISTORY_INTERVAL = 20; + +const sleep = ms => new Promise(resolve => setInterval(resolve, ms)); + +class RawAPI extends events.EventEmitter { + constructor (opts = {}) { + super(); + this.setServer(opts); + const self = this; + this.raw = { + + /** + * GET /api/version + * @returns {{ + * ok:1, package:number, protocol: number, + * serverData: { + * customObjectTypes, + * historyChunkSize:number, + * features, + * shards: string[] + * }, + * users:number + * }} + */ + version () { + return self.req('GET', '/api/version') + }, + /** + * GET /api/authmod + * @returns {Object} + */ + authmod () { + if (self.isOfficialServer()) { + return Promise.resolve({ name: 'official' }) + } + return self.req('GET', '/api/authmod') + }, + /** + * Official: + * GET /room-history/${shard}/${room}/${tick}.json + * Private: + * GET /room-history + * @param {string} room + * @param {number} tick + * @param {string} shard + * @returns {Object} A json file with history data + */ + history (room, tick, shard = DEFAULT_SHARD) { + if (self.isOfficialServer()) { + tick -= tick % OFFICIAL_HISTORY_INTERVAL; + return self.req('GET', `/room-history/${shard}/${room}/${tick}.json`) + } else { + tick -= tick % PRIVATE_HISTORY_INTERVAL; + return self.req('GET', '/room-history', { room, time: tick }) + } + }, + servers: { + /** + * POST /api/servers/list + * A list of community servers + * @returns {{ + * ok:number, + * servers:{ + * _id:string, + * settings:{ + * host:string, + * port:string, + * pass:string + * }, + * name:string, + * status:"active"|string + * likeCount:number + * }[] + * }} + */ + list () { + return self.req('POST', '/api/servers/list', {}) + } + }, + auth: { + /** + * POST /api/auth/signin + * @param {string} email + * @param {string} password + * @returns {{ok:number, token:string}} + */ + signin (email, password) { + return self.req('POST', '/api/auth/signin', { email, password }) + }, + /** + * POST /api/auth/steam-ticket + * @param {*} ticket + * @param {*} useNativeAuth + * @returns {Object} + */ + steamTicket (ticket, useNativeAuth = false) { + return self.req('POST', '/api/auth/steam-ticket', { ticket, useNativeAuth }) + }, + /** + * GET /api/auth/me + * @returns {{ + * ok: number; + * _id: string; + * email: string; + * username: string; + * cpu: number; + * badge: Badge; + * password: string; + * notifyPrefs: { sendOnline: any; errorsInterval: any; disabledOnMessages: any; disabled: any; interval: any }; + * gcl: number; + * credits: number; + * lastChargeTime: any; + * lastTweetTime: any; + * github: { id: any; username: any }; + * twitter: { username: string; followers_count: number }; + *}} + */ + me () { + return self.req('GET', '/api/auth/me') + }, + /** + * GET /api/auth/query-token + * @param {string} token + * @returns {Object} + */ + queryToken (token) { + return self.req('GET', '/api/auth/query-token', { token }) + } + }, + register: { + /** + * GET /api/register/check-email + * @param {string} email + * @returns {Object} + */ + checkEmail (email) { + return self.req('GET', '/api/register/check-email', { email }) + }, + /** + * GET /api/register/check-username + * @param {string} username + * @returns {Object} + */ + checkUsername (username) { + return self.req('GET', '/api/register/check-username', { username }) + }, + /** + * POST /api/register/set-username + * @param {string} username + * @returns {Object} + */ + setUsername (username) { + return self.req('POST', '/api/register/set-username', { username }) + }, + /** + * POST /api/register/submit + * @param {string} username + * @param {string} email + * @param {string} password + * @param {*} modules + * @returns {Object} + */ + submit (username, email, password, modules) { + return self.req('POST', '/api/register/submit', { username, email, password, modules }) + } + }, + userMessages: { + /** + * GET /api/user/messages/list?respondent={userId} + * @param {string} respondent the long `_id` of the user, not the username + * @returns {{ ok, messages: [ { _id, date, type, text, unread } ] }} + */ + list (respondent) { + return self.req('GET', '/api/user/messages/list', { respondent }) + }, + /** + * GET /api/user/messages/index + * @returns {{ ok, messages: [ { _id, message: { _id, user, respondent, date, type, text, unread } } ], users: { : { _id, username, badge: Badge } } }} + */ + index () { + return self.req('GET', '/api/user/messages/index') + }, + /** + * GET /api/user/messages/unread-count + * @returns {{ ok, count:number }} + */ + unreadCount () { + return self.req('GET', '/api/user/messages/unread-count') + }, + /** + * POST /api/user/messages/send + * @param {string} respondent the long `_id` of the user, not the username + * @param {string} text + * @returns {{ ok }} + */ + send (respondent, text) { + return self.req('POST', '/api/user/messages/send', { respondent, text }) + }, + /** + * POST /api/user/messages/mark-read + * @param {string} id + * @returns {Object} + */ + markRead (id) { + return self.req('POST', '/api/user/messages/mark-read', { id }) + } + }, + game: { + /** + * @typedef {"creepsLost"|"creepsProduced"|"energyConstruction"|"energyControl"|"energyCreeps"|"energyHarvested"} stat + * @param {string[]} rooms An array of room names + * @param {"owner0"|"claim0"|stat} statName + * @param {string} shard + * @returns {{ + * ok:number, + * stats: { + * [roomName:string]: { + * status, + * novice, + * own: { user, level }, + * : [ { user, value }] + * } + * } + * , users: { [userId:string]: { _id, username, badge: Badge } } }} + * The return type is not mapped correctly + */ + mapStats (rooms, statName, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/map-stats', { rooms, statName, shard }) + }, + /** + * POST /api/game/gen-unique-object-name + * @param {"flag"|"spawn"|string} type can be at least "flag" or "spawn" + * @param {string} shard + * @returns { ok, name:string } + */ + genUniqueObjectName (type, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/gen-unique-object-name', { type, shard }) + }, + /** + * POST /api/game/check-unique-object-name + * @param {string} type + * @param {string} name + * @param {string} shard + * @returns {Object} + */ + checkUniqueObjectName (type, name, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/check-unique-object-name', { type, name, shard }) + }, + /** + * @param {string} room + * @param {number} x + * @param {number} y + * @param {string} name + * @param {string?} shard + */ + placeSpawn (room, x, y, name, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/place-spawn', { name, room, x, y, shard }) + }, + /** + * POST /api/game/create-flag + * @param {string} room + * @param {number} x + * @param {number} y + * @param {string} name + * @param {FlagColor} color + * @param {FlagColor} secondaryColor + * @param {string} shard + * @returns {{ ok, result: { nModified, ok, upserted: [ { index, _id } ], n }, connection: { host, id, port } }} + * - if the name is new, result.upserted[0]._id is the game id of the created flag + * - if not, this moves the flag and the response does not contain the id (but the id doesn't change) + * - `connection` looks like some internal MongoDB thing that is irrelevant to us + */ + createFlag (room, x, y, name, color = 1, secondaryColor = 1, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/create-flag', { name, room, x, y, color, secondaryColor, shard }) + }, + /** + * POST/api/game/gen-unique-flag-name + * @param {string} shard + * @returns {Object} + */ + genUniqueFlagName (shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/gen-unique-flag-name', { shard }) + }, + /** + * POST /api/game/check-unique-flag-name + * @param {string} name + * @param {string} shard + * @returns {Object} + */ + checkUniqueFlagName (name, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/check-unique-flag-name', { name, shard }) + }, + /** + * POST /api/game/change-flag-color + * @param {FlagColor} color + * @param {FlagColor} secondaryColor + * @param {string} shard + * @returns {{ ok, result: { nModified, ok, n }, connection: { host, id, port } }} + */ + changeFlagColor (color = 1, secondaryColor = 1, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/change-flag-color', { color, secondaryColor, shard }) + }, + /** + * POST /api/game/remove-flag + * @param {string} room + * @param {string} name + * @param {string} shard + * @returns {Object} + */ + removeFlag (room, name, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/remove-flag', { name, room, shard }) + }, + /** + * POST /api/game/add-object-intent + * [Missing parameter] _id is the game id of the object to affect (except for destroying structures), room is the name of the room it's in + * this method is used for a variety of actions, depending on the `name` and `intent` parameters + * @example remove flag: name = "remove", intent = {} + * @example destroy structure: _id = "room", name = "destroyStructure", intent = [ {id: , roomName, , user: } ] +can destroy multiple structures at once + * @example suicide creep: name = "suicide", intent = {id: } + * @example unclaim controller: name = "unclaim", intent = {id: } +intent can be an empty object for suicide and unclaim, but the web interface sends the id in it, as described + * @example remove construction site: name = "remove", intent = {} + * @param {string} room + * @param {string} name + * @param {string} intent + * @param {string} shard + * @returns {{ ok, result: { nModified, ok, upserted: [ { index, _id } ], n }, connection: { host, id, port } }} + */ + addObjectIntent (room, name, intent, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/add-object-intent', { room, name, intent, shard }) + }, + /** + * POST /api/game/create-construction + * @param {string} room + * @param {number} x + * @param {number} y + * @param {string} structureType the same value as one of the in-game STRUCTURE_* constants ('road', 'spawn', etc.) + * @param {string} name + * @param {string} shard + * @returns {{ ok, result: { ok, n }, ops: [ { type, room, x, y, structureType, user, progress, progressTotal, _id } ], insertedCount, insertedIds }} + */ + createConstruction (room, x, y, structureType, name, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/create-construction', { room, x, y, structureType, name, shard }) + }, + /** + * POST /api/game/set-notify-when-attacked + * @param {string} _id + * @param {bool} enabled is either true or false (literal values, not strings) + * @param {string} shard + * @returns {{ ok, result: { ok, nModified, n }, connection: { id, host, port } }} + */ + setNotifyWhenAttacked (_id, enabled = true, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/set-notify-when-attacked', { _id, enabled, shard }) + }, + /** + * POST /api/game/create-invader + * @param {string} room + * @param {number} x + * @param {number} y + * @param {*} size + * @param {*} type + * @param {boolean} boosted + * @param {string} shard + * @returns {Object} + */ + createInvader (room, x, y, size, type, boosted = false, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/create-invader', { room, x, y, size, type, boosted, shard }) + }, + /** + * POST /api/game/remove-invader + * @param {string} _id + * @param {string} shard + * @returns {Object} + */ + removeInvader (_id, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/game/remove-invader', { _id, shard }) + }, + /** + * GET /api/game/time + * @param {string} shard + * @returns {{ ok:number, time:number }} + */ + time (shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/time', { shard }) + }, + /** + * GET /api/game/world-size + * @param {string} shard + * @returns {Object} + */ + worldSize (shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/world-size', { shard }) + }, + /** + * GET /api/game/room-decorations + * @param {string} room + * @param {string} shard + * @returns {Object} + */ + roomDecorations (room, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/room-decorations', { room, shard }) + }, + /** + * GET /api/game/room-objects + * @param {string} room + * @param {string} shard + * @returns {Object} + */ + roomObjects (room, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/room-objects', { room, shard }) + }, + /** + * @param {string} room + * @param {*} encoded can be anything non-empty + * @param {string} shard + * @returns {{ ok, terrain: [ { room:string, x:number, y:number, type:"wall"|"swamp" } ] } + * | { ok, terrain: [ { _id,room:string, terrain:string, type:"wall"|"swamp" } ] }} + * terrain is a string of digits, giving the terrain left-to-right and top-to-bottom + * 0: plain, 1: wall, 2: swamp, 3: also wall + */ + roomTerrain (room, encoded = 1, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/room-terrain', { room, encoded, shard }) + }, + /** + * @param {string} room + * @param {string} shard + * @returns {{ _id, status:"normal"|"out of borders"|string, novice:string }} + * `status` can at least be "normal" or "out of borders" + * if the room is in a novice area, novice will contain the Unix timestamp of the end of the protection (otherwise it is absent) + */ + roomStatus (room, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/room-status', { room, shard }) + }, + /** + * GET /api/game/room-overview + * @param {string} room + * @param {number} interval + * @param {string} shard + * @returns {Object} + */ + roomOverview (room, interval = 8, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/room-overview', { room, interval, shard }) + }, + market: { + /** + * GET /api/game/market/orders-index + * @param {string} shard + * @returns {{ok:1,list:[{_id:string,count:number}]}} + * - _id is the resource type, and there will only be one of each type. + * - `count` is the number of orders. + */ + ordersIndex (shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/market/orders-index', { shard }) + }, + /** + * GET /api/game/market/my-orders + * @returns {{ ok:number, list: [ { _id, created, user, active, type, amount, remainingAmount, resourceType, price, totalAmount, roomName } ] }} + * `resourceType` is one of the RESOURCE_* constants. + */ + myOrders () { + return self.req('GET', '/api/game/market/my-orders').then(self.mapToShard) + }, + /** + * GET /api/game/market/orders + * @param {string} resourceType one of the RESOURCE_* constants. + * @param {string} shard + * @returns {{ ok:number, list: [ { _id, created, user, active, type, amount, remainingAmount, resourceType, price, totalAmount, roomName } ] }} + * `resourceType` is one of the RESOURCE_* constants. + */ + orders (resourceType, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/market/orders', { resourceType, shard }) + }, + /** + * GET /api/game/market/stats + * @param {*} resourceType + * @param {string} shard + * @returns {Object} + */ + stats (resourceType, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/game/market/stats', { resourceType, shard }) + } + }, + shards: { + /** + * GET /api/game/shards/info + * @returns {{ok:number, shards:[{name:string,lastTicks:number[],cpuLimimt:number,rooms:number,users:number,tick:number}]}} + */ + info () { + return self.req('GET', '/api/game/shards/info') + } + } + }, + leaderboard: { + /** + * GET /api/leaderboard/list + * @param {number} limit + * @param {"world"|"power"} mode + * @param {number?} offset + * @param {string?} season + * @returns {{ ok, list: [ { _id, season, user, score, rank } ], count, users: { : { _id, username, badge: { type, color1, color2, color3, param, flip }, gcl } } }} + */ + list (limit = 10, mode = 'world', offset = 0, season) { + if (mode !== 'world' && mode !== 'power') throw new Error('incorrect mode parameter') + if (!season) season = self.currentSeason(); + return self.req('GET', '/api/leaderboard/list', { limit, mode, offset, season }) + }, + /** + * GET /api/leaderboard/find + * @param {string} username + * @param {"world"|string} mode + * @param {string?} season An optional date in the format YYYY-MM, if not supplied all ranks in all seasons is returned. + * @returns {{ ok, _id, season, user, score, rank }} + * - `user` (not `_id`) is the user's _id, as returned by `me` and `user/find` + * - `rank` is 0-based + */ + find (username, mode = 'world', season = '') { + return self.req('GET', '/api/leaderboard/find', { season, mode, username }) + }, + /** + * GET /api/leaderboard/seasons + * @returns {{ ok, seasons: [ { _id, name, date } ] }} + * The _id returned here is used for the season name in the other leaderboard calls + */ + seasons () { + return self.req('GET', '/api/leaderboard/seasons') + } + }, + user: { + /** + * @param {Badge} badge + * @returns {{ ok?:number,error?:string}} + */ + badge (badge) { + return self.req('POST', '/api/user/badge', { badge }) + }, + /** + * POST /api/user/respawn + * @returns {Object} + */ + respawn () { + return self.req('POST', '/api/user/respawn') + }, + /** + * POST /api/user/set-active-branch + * @param {string} branch + * @param {string} activeName + * @returns {Object} + */ + setActiveBranch (branch, activeName) { + return self.req('POST', '/api/user/set-active-branch', { branch, activeName }) + }, + /** + * POST /api/user/clone-branch + * @param {string} branch + * @param {string} newName + * @param {*} defaultModules + * @returns {Object} + */ + cloneBranch (branch, newName, defaultModules) { + return self.req('POST', '/api/user/clone-branch', { branch, newName, defaultModules }) + }, + /** + * POST /api/user/delete-branch + * @param {string} branch + * @returns {Object} + */ + deleteBranch (branch) { + return self.req('POST', '/api/user/delete-branch', { branch }) + }, + /** + * POST /api/user/notify-prefs + * @param {*} prefs + * @returns {Object} + */ + notifyPrefs (prefs) { + // disabled,disabledOnMessages,sendOnline,interval,errorsInterval + return self.req('POST', '/api/user/notify-prefs', prefs) + }, + /** + * POST /api/user/tutorial-done + * @returns {Object} + */ + tutorialDone () { + return self.req('POST', '/api/user/tutorial-done') + }, + /** + * POST /api/user/email + * @param {string} email + * @returns {Object} + */ + email (email) { + return self.req('POST', '/api/user/email', { email }) + }, + /** + * GET /api/user/world-start-room + * @param {string} shard + * @returns {Object} + */ + worldStartRoom (shard) { + return self.req('GET', '/api/user/world-start-room', { shard }) + }, + /** + * returns a world status + * - 'normal' + * - 'lost' when you loose all your spawns + * - 'empty' when you have respawned and not placed your spawn yet + * @returns {{ ok: number; status: "normal" | "lost" | "empty" }} */ + worldStatus () { + return self.req('GET', '/api/user/world-status') + }, + /** + * GET /api/user/branches + * @returns {{ ok:number, list: [{ + * _id: string; + * branch: string; + * activeWorld: boolean; + * activeSim: boolean; + * }]} + * } + */ + branches () { + return self.req('GET', '/api/user/branches') + }, + code: { + /** + * GET /api/user/code + * for pushing or pulling code, as documented at http://support.screeps.com/hc/en-us/articles/203022612 + * @param {string} branch + * @returns code + */ + get (branch) { + return self.req('GET', '/api/user/code', { branch }) + }, + /** + * POST /api/user/code + * for pushing or pulling code, as documented at http://support.screeps.com/hc/en-us/articles/203022612 + * @param {string} branch + * @param {*} modules + * @param {*} _hash + * @returns {Object} + */ + set (branch, modules, _hash) { + if (!_hash) _hash = Date.now(); + return self.req('POST', '/api/user/code', { branch, modules, _hash }) + } + }, + decorations: { + /** + * GET /api/user/decorations/inventory + * @returns {Object} + */ + inventory () { + return self.req('GET', '/api/user/decorations/inventory') + }, + /** + * GET /api/user/decorations/themes + * @returns {Object} + */ + themes () { + return self.req('GET', '/api/user/decorations/themes') + }, + /** + * POST /api/user/decorations/convert + * @param {*} decorations decorations is a string array of ids + * @returns {Object} + */ + convert (decorations) { + return self.req('POST', '/api/user/decorations/convert', { decorations }) + }, + /** + * POST /api/user/decorations/pixelize + * @param {number} count + * @param {string} theme + * @returns {Object} + */ + pixelize (count, theme = '') { + return self.req('POST', '/api/user/decorations/pixelize', { count, theme }) + }, + /** + * POST /api/user/decorations/activate + * @param {string} _id + * @param {*} active + * @returns {Object} + */ + activate (_id, active) { + return self.req('POST', '/api/user/decorations/activate', { _id, active }) + }, + /** + * POST /api/user/decorations/deactivate + * @param {*} decorations decorations is a string array of ids + * @returns {Object} + */ + deactivate (decorations) { + return self.req('POST', '/api/user/decorations/deactivate', { decorations }) + } + }, + /** + * GET /api/user/respawn-prohibited-rooms + * @returns {{ ok, rooms: [ ] }} + * - `room` is an array, but seems to always contain only one element + */ + respawnProhibitedRooms () { + return self.req('GET', '/api/user/respawn-prohibited-rooms') + }, + memory: { + /** + * GET /api/user/memory?path={path} + * @param {string} path the path may be empty or absent to retrieve all of Memory, Example: flags.Flag1 + * @param {string} shard + * @returns {string} gz: followed by base64-encoded gzipped JSON encoding of the requested memory path + */ + get (path, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/user/memory', { path, shard }) + }, + /** + * POST /api/user/memory + * @param {string} path the path may be empty or absent to retrieve all of Memory, Example: flags.Flag1 + * @param {*} value + * @param {string} shard + * @returns {{ ok, result: { ok, n }, ops: [ { user, expression, hidden } ], data, insertedCount, insertedIds }} + */ + set (path, value, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/user/memory', { path, value, shard }) + }, + segment: { + /** + * GET /api/user/memory-segment?segment=[0-99] + * @param {number} segment A number from 0-99 + * @param {string} shard + * @returns {{ ok, data: string }} + */ + get (segment, shard = DEFAULT_SHARD) { + return self.req('GET', '/api/user/memory-segment', { segment, shard }) + }, + /** + * POST /api/user/memory-segment + * @param {number} segment A number from 0-99 + * @param {*} data + * @param {string} shard + * @returns {Object} + */ + set (segment, data, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/user/memory-segment', { segment, data, shard }) + } + } + }, + /** + * GET /api/user/find?username={username} + * @param {string} username + * @returns {{ ok, user: { _id, username, badge: Badge, gcl } }} + */ + find (username) { + return self.req('GET', '/api/user/find', { username }) + }, + /** + * GET /api/user/find?id={userId} + * @param {string} id + * @returns {{ ok, user: { _id, username, badge: Badge, gcl } }} + */ + findById (id) { + return self.req('GET', '/api/user/find', { id }) + }, + /** + * GET /api/user/stats + * @param {number} interval + * @returns {Object} + */ + stats (interval) { + return self.req('GET', '/api/user/stats', { interval }) + }, + /** + * GET /api/user/rooms + * @param {string} id + * @returns {Object} + */ + rooms (id) { + return self.req('GET', '/api/user/rooms', { id }).then(self.mapToShard) + }, + /** + * GET /api/user/overview?interval={interval}&statName={statName} + * @param {number} interval + * @param {string} statName energyControl + * @returns {{{ ok, rooms: [ ], stats: { : [ { value, endTime } ] }, statsMax }}} + */ + overview (interval, statName) { + return self.req('GET', '/api/user/overview', { interval, statName }) + }, + /** + * GET /api/user/money-history + * @param {number} page Used for pagination + * @returns {{"ok":1,"page":0,"list":[ { _id, date, tick, user, type, balance, change, market: {} } ] }} + * - page used for pagination. + * - hasMore is true if there are more pages to view. + * - market + * - New Order- { order: { type, resourceType, price, totalAmount, roomName } } + * - Extended Order- { extendOrder: { orderId, addAmount } } + * - Fulfilled Order- { resourceType, roomName, targetRoomName, price, npc, amount } + * - Price Change - { changeOrderPrice: { orderId, oldPrice, newPrice } } + */ + moneyHistory (page = 0) { + return self.req('GET', '/api/user/money-history', { page }) + }, + /** + * POST /api/user/console + * @param {*} expression + * @param {string} shard + * @returns {{ ok, result: { ok, n }, ops: [ { user, expression, _id } ], insertedCount, insertedIds: [ ] }} + */ + console (expression, shard = DEFAULT_SHARD) { + return self.req('POST', '/api/user/console', { expression, shard }) + }, + /** + * GET /api/user/name + * @returns {Object} + */ + name () { + return self.req('GET', '/api/user/name') + } + }, + experimental: { + // https://screeps.com/api/experimental/pvp?start=14787157 seems to not be implemented in the api + /** + * @param {number} interval + * @returns {{ ok, time, rooms: [ { _id, lastPvpTime } ] }} + * time is the current server tick + * _id contains the room name for each room, and lastPvpTime contains the last tick pvp occurred + * if neither a valid interval nor a valid start argument is provided, the result of the call is still ok, but with an empty rooms array. + */ + pvp (interval = 100) { + return self.req('GET', '/api/experimental/pvp', { interval }).then(self.mapToShard) + }, + /** + * GET /api/experimental/nukes + * @returns {Object} + */ + nukes () { + return self.req('GET', '/api/experimental/nukes').then(self.mapToShard) + } + }, + warpath: { + /** + * GET /api/warpath/battles + * @param {number} interval + * @returns {Object} + */ + battles (interval = 100) { + return self.req('GET', '/api/warpath/battles', { interval }) + } + }, + scoreboard: { + /** + * GET /api/scoreboard/list + * @param {number} limit + * @param {number} offset + * @returns {Object} + */ + list (limit = 20, offset = 0) { + return self.req('GET', '/api/scoreboard/list', { limit, offset }) + } + } + }; + } + + currentSeason () { + const now = new Date(); + const year = now.getFullYear(); + let month = (now.getUTCMonth() + 1).toString(); + if (month.length === 1) month = `0${month}`; + return `${year}-${month}` + } + + isOfficialServer () { + return this.opts.url.match(/screeps\.com/) !== null + } + + mapToShard (res) { + if (!res.shards) { + res.shards = { + privSrv: res.list || res.rooms + }; + } + return res + } + + setServer (opts) { + if (!this.opts) { + this.opts = {}; + } + Object.assign(this.opts, opts); + if (opts.path && !opts.pathname) { + this.opts.pathname = this.opts.path; + } + if (!opts.url) { + this.opts.url = format(this.opts); + if (!this.opts.url.endsWith('/')) this.opts.url += '/'; + } + if (opts.token) { + this.token = opts.token; + } + this.http = axios__default['default'].create({ + baseURL: this.opts.url + }); + } + + async auth (email, password, opts = {}) { + this.setServer(opts); + if (email && password) { + Object.assign(this.opts, { email, password }); + } + const res = await this.raw.auth.signin(this.opts.email, this.opts.password); + this.emit('token', res.token); + this.emit('auth'); + this.__authed = true; + return res + } + + async req (method, path, body = {}) { + const opts = { + method, + url: path, + headers: {} + }; + debugHttp(`${method} ${path} ${JSON.stringify(body)}`); + if (this.token) { + Object.assign(opts.headers, { + 'X-Token': this.token, + 'X-Username': this.token + }); + } + if (method === 'GET') { + opts.params = body; + } else { + opts.data = body; + } + try { + const res = await this.http(opts); + const token = res.headers['x-token']; + if (token) { + this.emit('token', token); + } + const rateLimit = this.buildRateLimit(method, path, res); + this.emit('rateLimit', rateLimit); + debugRateLimit(`${method} ${path} ${rateLimit.remaining}/${rateLimit.limit} ${rateLimit.toReset}s`); + if (typeof res.data.data === 'string' && res.data.data.slice(0, 3) === 'gz:') { + res.data.data = await this.gz(res.data.data); + } + this.emit('response', res); + return res.data + } catch (err) { + const res = err.response || {}; + const rateLimit = this.buildRateLimit(method, path, res); + this.emit('rateLimit', rateLimit); + debugRateLimit(`${method} ${path} ${rateLimit.remaining}/${rateLimit.limit} ${rateLimit.toReset}s`); + if (res.status === 401) { + if (this.__authed && this.opts.email && this.opts.password) { + this.__authed = false; + await this.auth(this.opts.email, this.opts.password); + return this.req(method, path, body) + } else { + throw new Error('Not Authorized') + } + } + if (res.status === 429 && !res.headers['x-ratelimit-limit'] && this.opts.experimentalRetry429) { + await sleep(Math.floor(Math.random() * 500) + 200); + return this.req(method, path, body) + } + if (err.response) { + throw new Error(res.data) + } + throw new Error(err.message) + } + } + + async gz (data) { + const buf = Buffer.from(data.slice(3), 'base64'); + const ret = await gunzipAsync(buf); + return JSON.parse(ret.toString()) + } + + async inflate (data) { // es + const buf = Buffer.from(data.slice(3), 'base64'); + const ret = await inflateAsync(buf); + return JSON.parse(ret.toString()) + } + + buildRateLimit (method, path, res) { + const { + headers: { + 'x-ratelimit-limit': limit, + 'x-ratelimit-remaining': remaining, + 'x-ratelimit-reset': reset + } = {} + } = res; + return { + method, + path, + limit: +limit, + remaining: +remaining, + reset: +reset, + toReset: reset - Math.floor(Date.now() / 1000) + } + } +} + +/** + * @typedef {{ + * "color1": string; + * "color2": string; + * "color3": string; + * "flip": boolean; + * "param": number; + * "type": number|{ path1:string, path2:string}; + *}} Badge + */ + +/** + * @typedef {1|2|3|4|5|6|7|8|9|10} FlagColor + * - Red = 1, + * - Purple = 2, + * - Blue = 3, + * - Cyan = 4, + * - Green = 5, + * - Yellow = 6, + * - Orange = 7, + * - Brown = 8, + * - Grey = 9, + * - White = 10 + */ + +const readFileAsync = util__default['default'].promisify(fs__default['default'].readFile); + +class ConfigManager { + async refresh () { + this._config = null; + await this.getConfig(); + } + + async getServers () { + const conf = await this.getConfig(); + return Object.keys(conf.servers) + } + + async getConfig () { + if (this._config) { + return this._config + } + const paths = []; + if (process.env.SCREEPS_CONFIG) { + paths.push(process.env.SCREEPS_CONFIG); + } + const dirs = [__dirname, '']; + for (const dir of dirs) { + paths.push(path__default['default'].join(dir, '.screeps.yaml')); + paths.push(path__default['default'].join(dir, '.screeps.yml')); + } + if (process.platform === 'win32') { + paths.push(path__default['default'].join(process.env.APPDATA, 'screeps/config.yaml')); + paths.push(path__default['default'].join(process.env.APPDATA, 'screeps/config.yml')); + } else { + if (process.env.XDG_CONFIG_PATH) { + paths.push( + path__default['default'].join(process.env.XDG_CONFIG_HOME, 'screeps/config.yaml') + ); + paths.push( + path__default['default'].join(process.env.XDG_CONFIG_HOME, 'screeps/config.yml') + ); + } + if (process.env.HOME) { + paths.push(path__default['default'].join(process.env.HOME, '.config/screeps/config.yaml')); + paths.push(path__default['default'].join(process.env.HOME, '.config/screeps/config.yml')); + paths.push(path__default['default'].join(process.env.HOME, '.screeps.yaml')); + paths.push(path__default['default'].join(process.env.HOME, '.screeps.yml')); + } + } + for (const path of paths) { + const data = await this.loadConfig(path); + if (data) { + if (!data.servers) { + throw new Error( + `Invalid config: 'servers' object does not exist in '${path}'` + ) + } + this._config = data; + this.path = path; + return data + } + } + return null + } + + async loadConfig (file) { + try { + const contents = await readFileAsync(file, 'utf8'); + return YAML__default['default'].parse(contents) + } catch (e) { + if (e.code === 'ENOENT') { + return false + } else { + throw e + } + } + } +} + +const DEFAULTS = { + protocol: 'https', + hostname: 'screeps.com', + port: 443, + path: '/' +}; + +const configManager = new ConfigManager(); + +class ScreepsAPI extends RawAPI { + static async fromConfig (server = 'main', config = false, opts = {}) { + const data = await configManager.getConfig(); + + if (data) { + if (!data.servers[server]) { + throw new Error(`Server '${server}' does not exist in '${configManager.path}'`) + } + + const conf = data.servers[server]; + if (conf.ptr) conf.path = '/ptr'; + if (conf.season) conf.path = '/season'; + const api = new ScreepsAPI( + Object.assign( + { + hostname: conf.host, + port: conf.port, + protocol: conf.secure ? 'https' : 'http', + token: conf.token, + path: conf.path || '/' + }, + opts + ) + ); + + api.appConfig = (data.configs && data.configs[config]) || {}; + + if (!conf.token && conf.username && conf.password) { + await api.auth(conf.username, conf.password); + } + + return api + } + + throw new Error('No valid config found') + } + + constructor (opts) { + opts = Object.assign({}, DEFAULTS, opts); + super(opts); + this.on('token', token => { + this.token = token; + this.raw.token = token; + }); + const defaultLimit = (limit, period) => ({ + limit, + period, + remaining: limit, + reset: 0, + toReset: 0 + }); + this.rateLimits = { + global: defaultLimit(120, 'minute'), + GET: { + '/api/game/room-terrain': defaultLimit(360, 'hour'), + '/api/user/code': defaultLimit(60, 'hour'), + '/api/user/memory': defaultLimit(1440, 'day'), + '/api/user/memory-segment': defaultLimit(360, 'hour'), + '/api/game/market/orders-index': defaultLimit(60, 'hour'), + '/api/game/market/orders': defaultLimit(60, 'hour'), + '/api/game/market/my-orders': defaultLimit(60, 'hour'), + '/api/game/market/stats': defaultLimit(60, 'hour'), + '/api/game/user/money-history': defaultLimit(60, 'hour') + }, + POST: { + '/api/user/console': defaultLimit(360, 'hour'), + '/api/game/map-stats': defaultLimit(60, 'hour'), + '/api/user/code': defaultLimit(240, 'day'), + '/api/user/set-active-branch': defaultLimit(240, 'day'), + '/api/user/memory': defaultLimit(240, 'day'), + '/api/user/memory-segment': defaultLimit(60, 'hour') + } + }; + this.on('rateLimit', limits => { + const rate = + this.rateLimits[limits.method][limits.path] || this.rateLimits.global; + const copy = Object.assign({}, limits); + delete copy.path; + delete copy.method; + Object.assign(rate, copy); + }); + this.socket = new Socket(this); + } + + getRateLimit (method, path) { + return this.rateLimits[method][path] || this.rateLimits.global + } + + get rateLimitResetUrl () { + return `https://screeps.com/a/#!/account/auth-tokens/noratelimit?token=${this.token.slice( + 0, + 8 + )}` + } + + async me () { + if (this._user) return this._user + const tokenInfo = await this.tokenInfo(); + if (tokenInfo.full) { + this._user = await this.raw.auth.me(); + } else { + const { username } = await this.raw.user.name(); + const { user } = await this.raw.user.find(username); + this._user = user; + } + return this._user + } + + async tokenInfo () { + if (this._tokenInfo) { + return this._tokenInfo + } + if (this.opts.token) { + const { token } = await this.raw.auth.queryToken(this.token); + this._tokenInfo = token; + } else { + this._tokenInfo = { full: true }; + } + return this._tokenInfo + } + + async userID () { + const user = await this.me(); + return user._id + } + + get history () { + return this.raw.history + } + + get authmod () { + return this.raw.authmod + } + + get version () { + return this.raw.version + } + + get time () { + return this.raw.game.time + } + + get leaderboard () { + return this.raw.leaderboard + } + + get market () { + return this.raw.game.market + } + + get registerUser () { + return this.raw.register.submit + } + + get code () { + return this.raw.user.code + } + + get memory () { + return this.raw.user.memory + } + + get segment () { + return this.raw.user.memory.segment + } + + get console () { + return this.raw.user.console + } +} + +exports.ScreepsAPI = ScreepsAPI; diff --git a/node_modules/screeps-api/dist/types/ConfigManager.d.ts b/node_modules/screeps-api/dist/types/ConfigManager.d.ts new file mode 100644 index 0000000..1b1f82b --- /dev/null +++ b/node_modules/screeps-api/dist/types/ConfigManager.d.ts @@ -0,0 +1,8 @@ +export class ConfigManager { + refresh(): Promise; + _config: any; + getServers(): Promise; + getConfig(): Promise; + path: any; + loadConfig(file: any): Promise; +} diff --git a/node_modules/screeps-api/dist/types/RawAPI.d.ts b/node_modules/screeps-api/dist/types/RawAPI.d.ts new file mode 100644 index 0000000..0bc385f --- /dev/null +++ b/node_modules/screeps-api/dist/types/RawAPI.d.ts @@ -0,0 +1,1091 @@ +export class RawAPI extends EventEmitter { + constructor(opts?: {}); + raw: { + /** + * GET /api/version + * @returns {{ + * ok:1, package:number, protocol: number, + * serverData: { + * customObjectTypes, + * historyChunkSize:number, + * features, + * shards: string[] + * }, + * users:number + * }} + */ + version(): { + ok: 1; + package: number; + protocol: number; + serverData: { + customObjectTypes; + historyChunkSize: number; + features; + shards: string[]; + }; + users: number; + }; + /** + * GET /api/authmod + * @returns {Object} + */ + authmod(): any; + /** + * Official: + * GET /room-history/${shard}/${room}/${tick}.json + * Private: + * GET /room-history + * @param {string} room + * @param {number} tick + * @param {string} shard + * @returns {Object} A json file with history data + */ + history(room: string, tick: number, shard?: string): any; + servers: { + /** + * POST /api/servers/list + * A list of community servers + * @returns {{ + * ok:number, + * servers:{ + * _id:string, + * settings:{ + * host:string, + * port:string, + * pass:string + * }, + * name:string, + * status:"active"|string + * likeCount:number + * }[] + * }} + */ + list(): { + ok: number; + servers: { + _id: string; + settings: { + host: string; + port: string; + pass: string; + }; + name: string; + status: "active" | string; + likeCount: number; + }[]; + }; + }; + auth: { + /** + * POST /api/auth/signin + * @param {string} email + * @param {string} password + * @returns {{ok:number, token:string}} + */ + signin(email: string, password: string): { + ok: number; + token: string; + }; + /** + * POST /api/auth/steam-ticket + * @param {*} ticket + * @param {*} useNativeAuth + * @returns {Object} + */ + steamTicket(ticket: any, useNativeAuth?: any): any; + /** + * GET /api/auth/me + * @returns {{ + * ok: number; + * _id: string; + * email: string; + * username: string; + * cpu: number; + * badge: Badge; + * password: string; + * notifyPrefs: { sendOnline: any; errorsInterval: any; disabledOnMessages: any; disabled: any; interval: any }; + * gcl: number; + * credits: number; + * lastChargeTime: any; + * lastTweetTime: any; + * github: { id: any; username: any }; + * twitter: { username: string; followers_count: number }; + *}} + */ + me(): { + ok: number; + _id: string; + email: string; + username: string; + cpu: number; + badge: Badge; + password: string; + notifyPrefs: { + sendOnline: any; + errorsInterval: any; + disabledOnMessages: any; + disabled: any; + interval: any; + }; + gcl: number; + credits: number; + lastChargeTime: any; + lastTweetTime: any; + github: { + id: any; + username: any; + }; + twitter: { + username: string; + followers_count: number; + }; + }; + /** + * GET /api/auth/query-token + * @param {string} token + * @returns {Object} + */ + queryToken(token: string): any; + }; + register: { + /** + * GET /api/register/check-email + * @param {string} email + * @returns {Object} + */ + checkEmail(email: string): any; + /** + * GET /api/register/check-username + * @param {string} username + * @returns {Object} + */ + checkUsername(username: string): any; + /** + * POST /api/register/set-username + * @param {string} username + * @returns {Object} + */ + setUsername(username: string): any; + /** + * POST /api/register/submit + * @param {string} username + * @param {string} email + * @param {string} password + * @param {*} modules + * @returns {Object} + */ + submit(username: string, email: string, password: string, modules: any): any; + }; + userMessages: { + /** + * GET /api/user/messages/list?respondent={userId} + * @param {string} respondent the long `_id` of the user, not the username + * @returns {{ ok, messages: [ { _id, date, type, text, unread } ] }} + */ + list(respondent: string): { + ok; + messages: [{ + _id; + date; + type; + text; + unread; + }]; + }; + /** + * GET /api/user/messages/index + * @returns {{ ok, messages: [ { _id, message: { _id, user, respondent, date, type, text, unread } } ], users: { : { _id, username, badge: Badge } } }} + */ + index(): { + ok: any; + messages: [{ + _id: any; + message: { + _id: any; + user: any; + respondent: any; + date: any; + type: any; + text: any; + unread: any; + }; + }]; + users: { + (): any; + 's _id>: { _id, username, badge: Badge } } }}': any; + }; + }; + /** + * GET /api/user/messages/unread-count + * @returns {{ ok, count:number }} + */ + unreadCount(): { + ok; + count: number; + }; + /** + * POST /api/user/messages/send + * @param {string} respondent the long `_id` of the user, not the username + * @param {string} text + * @returns {{ ok }} + */ + send(respondent: string, text: string): { + ok; + }; + /** + * POST /api/user/messages/mark-read + * @param {string} id + * @returns {Object} + */ + markRead(id: string): any; + }; + game: { + /** + * @typedef {"creepsLost"|"creepsProduced"|"energyConstruction"|"energyControl"|"energyCreeps"|"energyHarvested"} stat + * @param {string[]} rooms An array of room names + * @param {"owner0"|"claim0"|stat} statName + * @param {string} shard + * @returns {{ + * ok:number, + * stats: { + * [roomName:string]: { + * status, + * novice, + * own: { user, level }, + * : [ { user, value }] + * } + * } + * , users: { [userId:string]: { _id, username, badge: Badge } } }} + * The return type is not mapped correctly + */ + mapStats(rooms: string[], statName: "owner0" | "claim0" | ("creepsLost" | "creepsProduced" | "energyConstruction" | "energyControl" | "energyCreeps" | "energyHarvested"), shard?: string): { + ok: number; + stats: { + [roomName: string]: { + (): [{ + user; + value; + }]; + status: any; + novice: any; + own: { + user: any; + level: any; + }; + }; + }; + users: { + [userId: string]: { + _id: any; + username: any; + badge: Badge; + }; + }; + }; + /** + * POST /api/game/gen-unique-object-name + * @param {"flag"|"spawn"|string} type can be at least "flag" or "spawn" + * @param {string} shard + * @returns { ok, name:string } + */ + genUniqueObjectName(type: "flag" | "spawn" | string, shard?: string): any; + /** + * POST /api/game/check-unique-object-name + * @param {string} type + * @param {string} name + * @param {string} shard + * @returns {Object} + */ + checkUniqueObjectName(type: string, name: string, shard?: string): any; + /** + * @param {string} room + * @param {number} x + * @param {number} y + * @param {string} name + * @param {string?} shard + */ + placeSpawn(room: string, x: number, y: number, name: string, shard?: string | null): any; + /** + * POST /api/game/create-flag + * @param {string} room + * @param {number} x + * @param {number} y + * @param {string} name + * @param {FlagColor} color + * @param {FlagColor} secondaryColor + * @param {string} shard + * @returns {{ ok, result: { nModified, ok, upserted: [ { index, _id } ], n }, connection: { host, id, port } }} + * - if the name is new, result.upserted[0]._id is the game id of the created flag + * - if not, this moves the flag and the response does not contain the id (but the id doesn't change) + * - `connection` looks like some internal MongoDB thing that is irrelevant to us + */ + createFlag(room: string, x: number, y: number, name: string, color?: FlagColor, secondaryColor?: FlagColor, shard?: string): { + ok; + result: { + nModified; + ok; + upserted: [{ + index; + _id; + }]; + n; + }; + connection: { + host; + id; + port; + }; + }; + /** + * POST/api/game/gen-unique-flag-name + * @param {string} shard + * @returns {Object} + */ + genUniqueFlagName(shard?: string): any; + /** + * POST /api/game/check-unique-flag-name + * @param {string} name + * @param {string} shard + * @returns {Object} + */ + checkUniqueFlagName(name: string, shard?: string): any; + /** + * POST /api/game/change-flag-color + * @param {FlagColor} color + * @param {FlagColor} secondaryColor + * @param {string} shard + * @returns {{ ok, result: { nModified, ok, n }, connection: { host, id, port } }} + */ + changeFlagColor(color?: FlagColor, secondaryColor?: FlagColor, shard?: string): { + ok; + result: { + nModified; + ok; + n; + }; + connection: { + host; + id; + port; + }; + }; + /** + * POST /api/game/remove-flag + * @param {string} room + * @param {string} name + * @param {string} shard + * @returns {Object} + */ + removeFlag(room: string, name: string, shard?: string): any; + /** + * POST /api/game/add-object-intent + * [Missing parameter] _id is the game id of the object to affect (except for destroying structures), room is the name of the room it's in + * this method is used for a variety of actions, depending on the `name` and `intent` parameters + * @example remove flag: name = "remove", intent = {} + * @example destroy structure: _id = "room", name = "destroyStructure", intent = [ {id: , roomName, , user: } ] + can destroy multiple structures at once + * @example suicide creep: name = "suicide", intent = {id: } + * @example unclaim controller: name = "unclaim", intent = {id: } + intent can be an empty object for suicide and unclaim, but the web interface sends the id in it, as described + * @example remove construction site: name = "remove", intent = {} + * @param {string} room + * @param {string} name + * @param {string} intent + * @param {string} shard + * @returns {{ ok, result: { nModified, ok, upserted: [ { index, _id } ], n }, connection: { host, id, port } }} + */ + addObjectIntent(room: string, name: string, intent: string, shard?: string): { + ok; + result: { + nModified; + ok; + upserted: [{ + index; + _id; + }]; + n; + }; + connection: { + host; + id; + port; + }; + }; + /** + * POST /api/game/create-construction + * @param {string} room + * @param {number} x + * @param {number} y + * @param {string} structureType the same value as one of the in-game STRUCTURE_* constants ('road', 'spawn', etc.) + * @param {string} name + * @param {string} shard + * @returns {{ ok, result: { ok, n }, ops: [ { type, room, x, y, structureType, user, progress, progressTotal, _id } ], insertedCount, insertedIds }} + */ + createConstruction(room: string, x: number, y: number, structureType: string, name: string, shard?: string): { + ok; + result: { + ok; + n; + }; + ops: [{ + type; + room; + x; + y; + structureType; + user; + progress; + progressTotal; + _id; + }]; + insertedCount; + insertedIds; + }; + /** + * POST /api/game/set-notify-when-attacked + * @param {string} _id + * @param {bool} enabled is either true or false (literal values, not strings) + * @param {string} shard + * @returns {{ ok, result: { ok, nModified, n }, connection: { id, host, port } }} + */ + setNotifyWhenAttacked(_id: string, enabled?: any, shard?: string): { + ok; + result: { + ok; + nModified; + n; + }; + connection: { + id; + host; + port; + }; + }; + /** + * POST /api/game/create-invader + * @param {string} room + * @param {number} x + * @param {number} y + * @param {*} size + * @param {*} type + * @param {boolean} boosted + * @param {string} shard + * @returns {Object} + */ + createInvader(room: string, x: number, y: number, size: any, type: any, boosted?: boolean, shard?: string): any; + /** + * POST /api/game/remove-invader + * @param {string} _id + * @param {string} shard + * @returns {Object} + */ + removeInvader(_id: string, shard?: string): any; + /** + * GET /api/game/time + * @param {string} shard + * @returns {{ ok:number, time:number }} + */ + time(shard?: string): { + ok: number; + time: number; + }; + /** + * GET /api/game/world-size + * @param {string} shard + * @returns {Object} + */ + worldSize(shard?: string): any; + /** + * GET /api/game/room-decorations + * @param {string} room + * @param {string} shard + * @returns {Object} + */ + roomDecorations(room: string, shard?: string): any; + /** + * GET /api/game/room-objects + * @param {string} room + * @param {string} shard + * @returns {Object} + */ + roomObjects(room: string, shard?: string): any; + /** + * @param {string} room + * @param {*} encoded can be anything non-empty + * @param {string} shard + * @returns {{ ok, terrain: [ { room:string, x:number, y:number, type:"wall"|"swamp" } ] } + * | { ok, terrain: [ { _id,room:string, terrain:string, type:"wall"|"swamp" } ] }} + * terrain is a string of digits, giving the terrain left-to-right and top-to-bottom + * 0: plain, 1: wall, 2: swamp, 3: also wall + */ + roomTerrain(room: string, encoded?: any, shard?: string): { + ok; + terrain: [{ + room: string; + x: number; + y: number; + type: "wall" | "swamp"; + }]; + } | { + ok; + terrain: [{ + _id; + room: string; + terrain: string; + type: "wall" | "swamp"; + }]; + }; + /** + * @param {string} room + * @param {string} shard + * @returns {{ _id, status:"normal"|"out of borders"|string, novice:string }} + * `status` can at least be "normal" or "out of borders" + * if the room is in a novice area, novice will contain the Unix timestamp of the end of the protection (otherwise it is absent) + */ + roomStatus(room: string, shard?: string): { + _id; + status: "normal" | "out of borders" | string; + novice: string; + }; + /** + * GET /api/game/room-overview + * @param {string} room + * @param {number} interval + * @param {string} shard + * @returns {Object} + */ + roomOverview(room: string, interval?: number, shard?: string): any; + market: { + /** + * GET /api/game/market/orders-index + * @param {string} shard + * @returns {{ok:1,list:[{_id:string,count:number}]}} + * - _id is the resource type, and there will only be one of each type. + * - `count` is the number of orders. + */ + ordersIndex(shard?: string): { + ok: 1; + list: [{ + _id: string; + count: number; + }]; + }; + /** + * GET /api/game/market/my-orders + * @returns {{ ok:number, list: [ { _id, created, user, active, type, amount, remainingAmount, resourceType, price, totalAmount, roomName } ] }} + * `resourceType` is one of the RESOURCE_* constants. + */ + myOrders(): { + ok: number; + list: [{ + _id; + created; + user; + active; + type; + amount; + remainingAmount; + resourceType; + price; + totalAmount; + roomName; + }]; + }; + /** + * GET /api/game/market/orders + * @param {string} resourceType one of the RESOURCE_* constants. + * @param {string} shard + * @returns {{ ok:number, list: [ { _id, created, user, active, type, amount, remainingAmount, resourceType, price, totalAmount, roomName } ] }} + * `resourceType` is one of the RESOURCE_* constants. + */ + orders(resourceType: string, shard?: string): { + ok: number; + list: [{ + _id; + created; + user; + active; + type; + amount; + remainingAmount; + resourceType; + price; + totalAmount; + roomName; + }]; + }; + /** + * GET /api/game/market/stats + * @param {*} resourceType + * @param {string} shard + * @returns {Object} + */ + stats(resourceType: any, shard?: string): any; + }; + shards: { + /** + * GET /api/game/shards/info + * @returns {{ok:number, shards:[{name:string,lastTicks:number[],cpuLimimt:number,rooms:number,users:number,tick:number}]}} + */ + info(): { + ok: number; + shards: [{ + name: string; + lastTicks: number[]; + cpuLimimt: number; + rooms: number; + users: number; + tick: number; + }]; + }; + }; + }; + leaderboard: { + /** + * GET /api/leaderboard/list + * @param {number} limit + * @param {"world"|"power"} mode + * @param {number?} offset + * @param {string?} season + * @returns {{ ok, list: [ { _id, season, user, score, rank } ], count, users: { : { _id, username, badge: { type, color1, color2, color3, param, flip }, gcl } } }} + */ + list(limit: number, mode: "world" | "power", offset: number | null, season: string | null): { + ok: any; + list: [{ + _id: any; + season: any; + user: any; + score: any; + rank: any; + }]; + count: any; + users: { + (): any; + 's _id>: { _id, username, badge: { type, color1, color2, color3, param, flip }, gcl } } }}': any; + }; + }; + /** + * GET /api/leaderboard/find + * @param {string} username + * @param {"world"|string} mode + * @param {string?} season An optional date in the format YYYY-MM, if not supplied all ranks in all seasons is returned. + * @returns {{ ok, _id, season, user, score, rank }} + * - `user` (not `_id`) is the user's _id, as returned by `me` and `user/find` + * - `rank` is 0-based + */ + find(username: string, mode?: "world" | string, season?: string | null): { + ok; + _id; + season; + user; + score; + rank; + }; + /** + * GET /api/leaderboard/seasons + * @returns {{ ok, seasons: [ { _id, name, date } ] }} + * The _id returned here is used for the season name in the other leaderboard calls + */ + seasons(): { + ok; + seasons: [{ + _id; + name; + date; + }]; + }; + }; + user: { + /** + * @param {Badge} badge + * @returns {{ ok?:number,error?:string}} + */ + badge(badge: Badge): { + ok?: number; + error?: string; + }; + /** + * POST /api/user/respawn + * @returns {Object} + */ + respawn(): any; + /** + * POST /api/user/set-active-branch + * @param {string} branch + * @param {string} activeName + * @returns {Object} + */ + setActiveBranch(branch: string, activeName: string): any; + /** + * POST /api/user/clone-branch + * @param {string} branch + * @param {string} newName + * @param {*} defaultModules + * @returns {Object} + */ + cloneBranch(branch: string, newName: string, defaultModules: any): any; + /** + * POST /api/user/delete-branch + * @param {string} branch + * @returns {Object} + */ + deleteBranch(branch: string): any; + /** + * POST /api/user/notify-prefs + * @param {*} prefs + * @returns {Object} + */ + notifyPrefs(prefs: any): any; + /** + * POST /api/user/tutorial-done + * @returns {Object} + */ + tutorialDone(): any; + /** + * POST /api/user/email + * @param {string} email + * @returns {Object} + */ + email(email: string): any; + /** + * GET /api/user/world-start-room + * @param {string} shard + * @returns {Object} + */ + worldStartRoom(shard: string): any; + /** + * returns a world status + * - 'normal' + * - 'lost' when you loose all your spawns + * - 'empty' when you have respawned and not placed your spawn yet + * @returns {{ ok: number; status: "normal" | "lost" | "empty" }} */ + worldStatus(): { + ok: number; + status: "normal" | "lost" | "empty"; + }; + /** + * GET /api/user/branches + * @returns {{ ok:number, list: [{ + * _id: string; + * branch: string; + * activeWorld: boolean; + * activeSim: boolean; + * }]} + * } + */ + branches(): { + ok: number; + list: [ + { + _id: string; + branch: string; + activeWorld: boolean; + activeSim: boolean; + } + ]; + }; + code: { + /** + * GET /api/user/code + * for pushing or pulling code, as documented at http://support.screeps.com/hc/en-us/articles/203022612 + * @param {string} branch + * @returns code + */ + get(branch: string): any; + /** + * POST /api/user/code + * for pushing or pulling code, as documented at http://support.screeps.com/hc/en-us/articles/203022612 + * @param {string} branch + * @param {*} modules + * @param {*} _hash + * @returns {Object} + */ + set(branch: string, modules: any, _hash: any): any; + }; + decorations: { + /** + * GET /api/user/decorations/inventory + * @returns {Object} + */ + inventory(): any; + /** + * GET /api/user/decorations/themes + * @returns {Object} + */ + themes(): any; + /** + * POST /api/user/decorations/convert + * @param {*} decorations decorations is a string array of ids + * @returns {Object} + */ + convert(decorations: any): any; + /** + * POST /api/user/decorations/pixelize + * @param {number} count + * @param {string} theme + * @returns {Object} + */ + pixelize(count: number, theme?: string): any; + /** + * POST /api/user/decorations/activate + * @param {string} _id + * @param {*} active + * @returns {Object} + */ + activate(_id: string, active: any): any; + /** + * POST /api/user/decorations/deactivate + * @param {*} decorations decorations is a string array of ids + * @returns {Object} + */ + deactivate(decorations: any): any; + }; + /** + * GET /api/user/respawn-prohibited-rooms + * @returns {{ ok, rooms: [ ] }} + * - `room` is an array, but seems to always contain only one element + */ + respawnProhibitedRooms(): { + ok; + rooms: []; + }; + memory: { + /** + * GET /api/user/memory?path={path} + * @param {string} path the path may be empty or absent to retrieve all of Memory, Example: flags.Flag1 + * @param {string} shard + * @returns {string} gz: followed by base64-encoded gzipped JSON encoding of the requested memory path + */ + get(path: string, shard?: string): string; + /** + * POST /api/user/memory + * @param {string} path the path may be empty or absent to retrieve all of Memory, Example: flags.Flag1 + * @param {*} value + * @param {string} shard + * @returns {{ ok, result: { ok, n }, ops: [ { user, expression, hidden } ], data, insertedCount, insertedIds }} + */ + set(path: string, value: any, shard?: string): { + ok; + result: { + ok; + n; + }; + ops: [{ + user; + expression; + hidden; + }]; + data; + insertedCount; + insertedIds; + }; + segment: { + /** + * GET /api/user/memory-segment?segment=[0-99] + * @param {number} segment A number from 0-99 + * @param {string} shard + * @returns {{ ok, data: string }} + */ + get(segment: number, shard?: string): { + ok; + data: string; + }; + /** + * POST /api/user/memory-segment + * @param {number} segment A number from 0-99 + * @param {*} data + * @param {string} shard + * @returns {Object} + */ + set(segment: number, data: any, shard?: string): any; + }; + }; + /** + * GET /api/user/find?username={username} + * @param {string} username + * @returns {{ ok, user: { _id, username, badge: Badge, gcl } }} + */ + find(username: string): { + ok; + user: { + _id; + username; + badge: Badge; + gcl; + }; + }; + /** + * GET /api/user/find?id={userId} + * @param {string} id + * @returns {{ ok, user: { _id, username, badge: Badge, gcl } }} + */ + findById(id: string): { + ok; + user: { + _id; + username; + badge: Badge; + gcl; + }; + }; + /** + * GET /api/user/stats + * @param {number} interval + * @returns {Object} + */ + stats(interval: number): any; + /** + * GET /api/user/rooms + * @param {string} id + * @returns {Object} + */ + rooms(id: string): any; + /** + * GET /api/user/overview?interval={interval}&statName={statName} + * @param {number} interval + * @param {string} statName energyControl + * @returns {{{ ok, rooms: [ ], stats: { : [ { value, endTime } ] }, statsMax }}} + */ + overview(interval: number, statName: string): {}; + /** + * GET /api/user/money-history + * @param {number} page Used for pagination + * @returns {{"ok":1,"page":0,"list":[ { _id, date, tick, user, type, balance, change, market: {} } ] }} + * - page used for pagination. + * - hasMore is true if there are more pages to view. + * - market + * - New Order- { order: { type, resourceType, price, totalAmount, roomName } } + * - Extended Order- { extendOrder: { orderId, addAmount } } + * - Fulfilled Order- { resourceType, roomName, targetRoomName, price, npc, amount } + * - Price Change - { changeOrderPrice: { orderId, oldPrice, newPrice } } + */ + moneyHistory(page?: number): { + "ok": 1; + "page": 0; + "list": [{ + _id; + date; + tick; + user; + type; + balance; + change; + market: {}; + }]; + }; + /** + * POST /api/user/console + * @param {*} expression + * @param {string} shard + * @returns {{ ok, result: { ok, n }, ops: [ { user, expression, _id } ], insertedCount, insertedIds: [ ] }} + */ + console(expression: any, shard?: string): { + ok: any; + result: { + ok: any; + n: any; + }; + ops: [{ + user: any; + expression: any; + _id: any; + }]; + insertedCount: any; + insertedIds: [() => any]; + }; + /** + * GET /api/user/name + * @returns {Object} + */ + name(): any; + }; + experimental: { + /** + * @param {number} interval + * @returns {{ ok, time, rooms: [ { _id, lastPvpTime } ] }} + * time is the current server tick + * _id contains the room name for each room, and lastPvpTime contains the last tick pvp occurred + * if neither a valid interval nor a valid start argument is provided, the result of the call is still ok, but with an empty rooms array. + */ + pvp(interval?: number): { + ok; + time; + rooms: [{ + _id; + lastPvpTime; + }]; + }; + /** + * GET /api/experimental/nukes + * @returns {Object} + */ + nukes(): any; + }; + warpath: { + /** + * GET /api/warpath/battles + * @param {number} interval + * @returns {Object} + */ + battles(interval?: number): any; + }; + scoreboard: { + /** + * GET /api/scoreboard/list + * @param {number} limit + * @param {number} offset + * @returns {Object} + */ + list(limit?: number, offset?: number): any; + }; + }; + currentSeason(): string; + isOfficialServer(): boolean; + mapToShard(res: any): any; + setServer(opts: any): void; + opts: {}; + token: any; + http: import("axios").AxiosInstance; + auth(email: any, password: any, opts?: {}): Promise<{ + ok: number; + token: string; + }>; + __authed: boolean; + req(method: any, path: any, body?: {}): any; + gz(data: any): Promise; + inflate(data: any): Promise; + buildRateLimit(method: any, path: any, res: any): { + method: any; + path: any; + limit: number; + remaining: number; + reset: number; + toReset: number; + }; +} +export type Badge = { + "color1": string; + "color2": string; + "color3": string; + "flip": boolean; + "param": number; + "type": number | { + path1: string; + path2: string; + }; +}; +/** + * - Red = 1, + * - Purple = 2, + * - Blue = 3, + * - Cyan = 4, + * - Green = 5, + * - Yellow = 6, + * - Orange = 7, + * - Brown = 8, + * - Grey = 9, + * - White = 10 + */ +export type FlagColor = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; +import { EventEmitter } from "events"; diff --git a/node_modules/screeps-api/dist/types/ScreepsAPI.d.ts b/node_modules/screeps-api/dist/types/ScreepsAPI.d.ts new file mode 100644 index 0000000..5d8ace0 --- /dev/null +++ b/node_modules/screeps-api/dist/types/ScreepsAPI.d.ts @@ -0,0 +1,286 @@ +export class ScreepsAPI extends RawAPI { + static fromConfig(server?: string, config?: boolean, opts?: {}): Promise; + constructor(opts: any); + rateLimits: { + global: { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + GET: { + '/api/game/room-terrain': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/code': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/memory': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/memory-segment': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/game/market/orders-index': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/game/market/orders': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/game/market/my-orders': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/game/market/stats': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/game/user/money-history': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + }; + POST: { + '/api/user/console': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/game/map-stats': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/code': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/set-active-branch': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/memory': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + '/api/user/memory-segment': { + limit: any; + period: any; + remaining: any; + reset: number; + toReset: number; + }; + }; + }; + socket: Socket; + getRateLimit(method: any, path: any): any; + get rateLimitResetUrl(): string; + me(): Promise<{ + _id: any; + username: any; + badge: import("./RawAPI").Badge; + gcl: any; + }>; + _user: { + _id: any; + username: any; + badge: import("./RawAPI").Badge; + gcl: any; + }; + tokenInfo(): Promise; + _tokenInfo: any; + userID(): Promise; + get history(): (room: string, tick: number, shard?: string) => any; + get authmod(): () => any; + get version(): () => { + ok: 1; + package: number; + protocol: number; + serverData: { + customObjectTypes: any; + historyChunkSize: number; + features: any; + shards: string[]; + }; + users: number; + }; + get time(): (shard?: string) => { + ok: number; + time: number; + }; + get leaderboard(): { + list(limit: number, mode: "world" | "power", offset: number, season: string): { + ok: any; + list: [{ + _id: any; + season: any; + user: any; + score: any; + rank: any; + }]; + count: any; + users: { + (): any; + 's _id>: { _id, username, badge: { type, color1, color2, color3, param, flip }, gcl } } }}': any; + }; + }; + find(username: string, mode?: string, season?: string): { + ok: any; + _id: any; + season: any; + user: any; + score: any; + rank: any; + }; + seasons(): { + ok: any; + seasons: [{ + _id: any; + name: any; + date: any; + }]; + }; + }; + get market(): { + ordersIndex(shard?: string): { + ok: 1; + list: [{ + _id: string; + count: number; + }]; + }; + myOrders(): { + ok: number; + list: [{ + _id: any; + created: any; + user: any; + active: any; + type: any; + amount: any; + remainingAmount: any; + resourceType: any; + price: any; + totalAmount: any; + roomName: any; + }]; + }; + orders(resourceType: string, shard?: string): { + ok: number; + list: [{ + _id: any; + created: any; + user: any; + active: any; + type: any; + amount: any; + remainingAmount: any; + resourceType: any; + price: any; + totalAmount: any; + roomName: any; + }]; + }; + stats(resourceType: any, shard?: string): any; + }; + get registerUser(): (username: string, email: string, password: string, modules: any) => any; + get code(): { + get(branch: string): any; + set(branch: string, modules: any, _hash: any): any; + }; + get memory(): { + get(path: string, shard?: string): string; + set(path: string, value: any, shard?: string): { + ok: any; + result: { + ok: any; + n: any; + }; + ops: [{ + user: any; + expression: any; + hidden: any; + }]; + data: any; + insertedCount: any; + insertedIds: any; + }; + segment: { + get(segment: number, shard?: string): { + ok: any; + data: string; + }; + set(segment: number, data: any, shard?: string): any; + }; + }; + get segment(): { + get(segment: number, shard?: string): { + ok: any; + data: string; + }; + set(segment: number, data: any, shard?: string): any; + }; + get console(): (expression: any, shard?: string) => { + ok: any; + result: { + ok: any; + n: any; + }; + ops: [{ + user: any; + expression: any; + _id: any; + }]; + insertedCount: any; + insertedIds: [() => any]; + }; +} +import { RawAPI } from "./RawAPI"; +import { Socket } from "./Socket"; diff --git a/node_modules/screeps-api/dist/types/Socket.d.ts b/node_modules/screeps-api/dist/types/Socket.d.ts new file mode 100644 index 0000000..67e6764 --- /dev/null +++ b/node_modules/screeps-api/dist/types/Socket.d.ts @@ -0,0 +1,31 @@ +export class Socket extends EventEmitter { + constructor(ScreepsAPI: any); + api: any; + opts: { + reconnect: boolean; + resubscribe: boolean; + keepAlive: boolean; + maxRetries: number; + maxRetryDelay: number; + }; + keepAliveInter: NodeJS.Timeout; + reset(): void; + authed: boolean; + connected: boolean; + reconnecting: boolean; + __queue: any[]; + __subQueue: any[]; + __subs: {}; + connect(opts?: {}): Promise; + ws: any; + reconnect(): Promise; + disconnect(): void; + sleep(time: any): Promise; + handleMessage(msg: any): void; + gzip(bool: any): Promise; + send(data: any): Promise; + auth(token: any): Promise; + subscribe(path: any, cb: any): Promise; + unsubscribe(path: any): Promise; +} +import { EventEmitter } from "events"; diff --git a/node_modules/screeps-api/dist/types/index.d.ts b/node_modules/screeps-api/dist/types/index.d.ts new file mode 100644 index 0000000..31cfe6b --- /dev/null +++ b/node_modules/screeps-api/dist/types/index.d.ts @@ -0,0 +1 @@ +export * from "./ScreepsAPI.js"; diff --git a/node_modules/screeps-api/dist/types/ws-browser.d.ts b/node_modules/screeps-api/dist/types/ws-browser.d.ts new file mode 100644 index 0000000..1cce635 --- /dev/null +++ b/node_modules/screeps-api/dist/types/ws-browser.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/node_modules/screeps-api/tsconfig.json b/node_modules/screeps-api/tsconfig.json new file mode 100644 index 0000000..59d5f98 --- /dev/null +++ b/node_modules/screeps-api/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationDir": "dist/types", + "rootDir": "src", + "allowJs": true, + }, + "include": ["src/**/*"], + "exclude": ["node_modules/**/*"] +} \ No newline at end of file diff --git a/node_modules/utf-8-validate/LICENSE b/node_modules/utf-8-validate/LICENSE new file mode 100644 index 0000000..710d09f --- /dev/null +++ b/node_modules/utf-8-validate/LICENSE @@ -0,0 +1,30 @@ +This project is licensed for use as follows: + +""" +Copyright (c) 2011 Einar Otto Stangvik (http://2x.io) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" + +This license applies to parts originating from +https://www.cl.cam.ac.uk/~mgk25/ucs/utf8_check.c: + +""" +Markus Kuhn -- 2005-03-30 +License: http://www.cl.cam.ac.uk/~mgk25/short-license.html +""" diff --git a/node_modules/utf-8-validate/README.md b/node_modules/utf-8-validate/README.md new file mode 100644 index 0000000..3a95ff8 --- /dev/null +++ b/node_modules/utf-8-validate/README.md @@ -0,0 +1,50 @@ +# utf-8-validate + +[![Version npm](https://img.shields.io/npm/v/utf-8-validate.svg?logo=npm)](https://www.npmjs.com/package/utf-8-validate) +[![Linux/macOS/Windows Build](https://img.shields.io/github/workflow/status/websockets/utf-8-validate/CI/master?label=build&logo=github)](https://github.com/websockets/utf-8-validate/actions?query=workflow%3ACI+branch%3Amaster) + +Check if a buffer contains valid UTF-8 encoded text. + +## Installation + +``` +npm install utf-8-validate --save-optional +``` + +The `--save-optional` flag tells npm to save the package in your package.json +under the +[`optionalDependencies`](https://docs.npmjs.com/files/package.json#optionaldependencies) +key. + +## API + +The module exports a single function which takes one argument. + +### `isValidUTF8(buffer)` + +Checks whether a buffer contains valid UTF-8. + +#### Arguments + +- `buffer` - The buffer to check. + +#### Return value + +`true` if the buffer contains only correct UTF-8, else `false`. + +#### Example + +```js +'use strict'; + +const isValidUTF8 = require('utf-8-validate'); + +const buf = Buffer.from([0xf0, 0x90, 0x80, 0x80]); + +console.log(isValidUTF8(buf)); +// => true +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/utf-8-validate/binding.gyp b/node_modules/utf-8-validate/binding.gyp new file mode 100644 index 0000000..30edf27 --- /dev/null +++ b/node_modules/utf-8-validate/binding.gyp @@ -0,0 +1,18 @@ +{ + 'targets': [ + { + 'target_name': 'validation', + 'sources': ['src/validation.c'], + 'cflags': ['-std=c99'], + 'conditions': [ + ["OS=='mac'", { + 'xcode_settings': { + 'MACOSX_DEPLOYMENT_TARGET': '10.7', + 'OTHER_CFLAGS': ['-arch x86_64', '-arch arm64'], + 'OTHER_LDFLAGS': ['-arch x86_64', '-arch arm64'] + } + }] + ] + } + ] +} diff --git a/node_modules/utf-8-validate/fallback.js b/node_modules/utf-8-validate/fallback.js new file mode 100644 index 0000000..c493d49 --- /dev/null +++ b/node_modules/utf-8-validate/fallback.js @@ -0,0 +1,62 @@ +'use strict'; + +/** + * Checks if a given buffer contains only correct UTF-8. + * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by + * Markus Kuhn. + * + * @param {Buffer} buf The buffer to check + * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` + * @public + */ +function isValidUTF8(buf) { + const len = buf.length; + let i = 0; + + while (i < len) { + if ((buf[i] & 0x80) === 0x00) { // 0xxxxxxx + i++; + } else if ((buf[i] & 0xe0) === 0xc0) { // 110xxxxx 10xxxxxx + if ( + i + 1 === len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i] & 0xfe) === 0xc0 // overlong + ) { + return false; + } + + i += 2; + } else if ((buf[i] & 0xf0) === 0xe0) { // 1110xxxx 10xxxxxx 10xxxxxx + if ( + i + 2 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80 || // overlong + buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0 // surrogate (U+D800 - U+DFFF) + ) { + return false; + } + + i += 3; + } else if ((buf[i] & 0xf8) === 0xf0) { // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + if ( + i + 3 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i + 3] & 0xc0) !== 0x80 || + buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80 || // overlong + buf[i] === 0xf4 && buf[i + 1] > 0x8f || buf[i] > 0xf4 // > U+10FFFF + ) { + return false; + } + + i += 4; + } else { + return false; + } + } + + return true; +} + +module.exports = isValidUTF8; diff --git a/node_modules/utf-8-validate/index.js b/node_modules/utf-8-validate/index.js new file mode 100644 index 0000000..8c30561 --- /dev/null +++ b/node_modules/utf-8-validate/index.js @@ -0,0 +1,7 @@ +'use strict'; + +try { + module.exports = require('node-gyp-build')(__dirname); +} catch (e) { + module.exports = require('./fallback'); +} diff --git a/node_modules/utf-8-validate/package.json b/node_modules/utf-8-validate/package.json new file mode 100644 index 0000000..149e652 --- /dev/null +++ b/node_modules/utf-8-validate/package.json @@ -0,0 +1,36 @@ +{ + "name": "utf-8-validate", + "version": "5.0.10", + "description": "Check if a buffer contains valid UTF-8", + "main": "index.js", + "engines": { + "node": ">=6.14.2" + }, + "scripts": { + "install": "node-gyp-build", + "prebuild": "prebuildify --napi --strip --target=14.0.0", + "prebuild-darwin-x64+arm64": "prebuildify --arch x64+arm64 --napi --strip --target=14.0.0", + "test": "mocha" + }, + "repository": { + "type": "git", + "url": "https://github.com/websockets/utf-8-validate" + }, + "keywords": [ + "utf-8-validate" + ], + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "bugs": { + "url": "https://github.com/websockets/utf-8-validate/issues" + }, + "homepage": "https://github.com/websockets/utf-8-validate", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "devDependencies": { + "mocha": "^10.0.0", + "node-gyp": "^9.1.0", + "prebuildify": "^5.0.0" + } +} diff --git a/node_modules/utf-8-validate/prebuilds/darwin-x64+arm64/node.napi.node b/node_modules/utf-8-validate/prebuilds/darwin-x64+arm64/node.napi.node new file mode 100644 index 0000000000000000000000000000000000000000..bed98d4a43a56135c659459c59f7e74e0b9ac269 GIT binary patch literal 116000 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 literal 0 HcmV?d00001 diff --git a/node_modules/utf-8-validate/prebuilds/linux-x64/node.napi.node b/node_modules/utf-8-validate/prebuilds/linux-x64/node.napi.node new file mode 100644 index 0000000000000000000000000000000000000000..bf547d8a764ac73f8da558f6af8793591467f3b0 GIT binary patch literal 6232 zcmc&&Z){W76~DGa2#~}E(Kh_)@H*IFT^|XMHKEO#0D%{jOq3-9tqre^?IbRV&Fp6g zlz}xTv}tCIF*dcGCb6xm(7qH+h^^~~8i82aX_DJ&Q>1NL+O3nVGS%%i76ME5JNMn= zJYGTDhiSXk^SS4D{@(lUJ@3AEytRG1+vO76JmL#NaupWRtOOH_Swo0s(IDpIf4NvD zb?42AKGqwmvLL2H_$5Fw%5fEyyjW%7Oefq@O-w4vcEplhMYScbsP@Ya)0`R#Q#A}x z1}(bAmE1{JOD{q&C0%N}-ZMkgAFh<_$LJ;t7EIahQP@$Q|7r6n#oa32o#w@-=7Xsk zjvU)k`0(J`@x?Cj=&IA1LpS&AtK9l6*UK-R|IFUa?>|N%NKQlH`9GWWdwgZh3kahr zU4m;%>#wiA`o~j8hw7G1PJDIm%9`sZj=qxlu=@SCKTxv{B}e-guIb_2N234*_g%O~y@<39f_ zQZEwniF-uOfd`F1Kt&n~j`_gh4cX$hR{ny&yw?gm{Vs>J8i z`YlNfqi--4H4RCh7fG1mcxT7ffmk%$8R!`ZTe90r zjNnj!90Ud;N5Y~l@nv*EU7gz-L^N<9V)TVgBiMsDy|Fo1rfCR>KKfpF z;W!j}HSelnDe|t`hVf*YegHAl<~>hpjZ@Gxmtlx6%(sSE)jc~oXViU(Mm5L7K0tPv z`mabg>ty6Hg}AT#7s zsgE_C0++uRBgpIcyE3l;-bLmq8qHrX!6n8+>fME28mPs$*1g_Zmj(JIee{N&>6p|r zU0K}42K^VUS-K4&eXMNFT6FZ$)_h$y|K!Z<>`2x-vIqA>A4@{NBL|ytee@6cV@kGC z$~tmzJeC~SUrVW`H(oq=ub$aep*Ox6@76~iE>G^!M{|G=6|8*fuEEy?fM)OME9COG z|FpvW7`fHXZQo3L1tP9rWPrVnGmJh#m_=A?wTuXX# zvL!W@^$uUdFf5=5VA4B0QUay`6qBj;%q~w`;~U;|0#mfjd!fDD)jB#34_U}l-jT;G zcw4!94x{;o>b7#v9JUEqYP#qh{v{%$rvK(0IY*&V*T3m~x&|^#LRrCuj=DeXnPzue z`zH&&C2kH_Y8s2L;2P3_H#yfl-GQ{u{zK@P~ zm4JU2`5*osJ95n>`!ulhyECb2Owm)8p}PVK)u)eDEiCh6v>iqJx}Czh{Rl=Q+2mdNSl1L5 z(NbPS#pEYnzl4N(tcahoBGytwDognnV3!}kpH{kA76Jjo^>+UVJj2d)*KhbSHut*g_sv+bY*2xx*H1t|6amMdkd8lbG?p}MYV5xbGp*A^nm_C@4Bg=-i$TAsh8&d#dxr%2u+Q$3?bYk}I7dZ?FMtf)n0rN(E8%}Sro5H*%~?qsH()5=Vo zRdQZGd{((f;b&DK#-CA%aGrh@Z-LV1cvuQD|Gi2d%T)48T@)3+LCLQxp2wx!{m%)% zH#-BLP!sT7MPE|%f}&Rx{f(l3R@CW-&!0}5d7d9Wk222ZQ0D&~-LZA+X8+o*o@CTa z`XAKlwb}6R?QXNpRSc?wj!1lcFnQ}f9m(~#P zPu`F8JR#p~&vk?;*A1x1#_N!Idhe$_%=Wx*nSNR+a{jExv=wry3Cwd{U`qK>bLMZM zLUbw_+jAXa%5{k2JI7B)4f4H3Ipn%lq6#PbyKp(}`+?D%aDC#s&y?#WRAh7B{~%Di z{Q*@Un5HbV(my{Zm_{A;MP<*F^JNFjGd<+6FAY#B-0w)3ydA2%rkuz7_B|F=jRlE_syvd%j0G{&MOXEQek`k zo-sj5p{=z@>7VVHUWUYOFVs1LKT7N>Sy~;oWBMzHJwFGZPzm-s?EMa&UK_|4=g;2( r$CW+DVKX%y%!&*k2R)_7^IdHbOQ;uy{{ZPe!#}1;;b`1XuVqej< literal 0 HcmV?d00001 diff --git a/node_modules/utf-8-validate/prebuilds/win32-ia32/node.napi.node b/node_modules/utf-8-validate/prebuilds/win32-ia32/node.napi.node new file mode 100644 index 0000000000000000000000000000000000000000..bb40b239d877c876cba0bf7d386d96c091c4a47c GIT binary patch literal 121856 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%0D* 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 F{{USO@H7Ab literal 0 HcmV?d00001 diff --git a/node_modules/utf-8-validate/src/validation.c b/node_modules/utf-8-validate/src/validation.c new file mode 100644 index 0000000..dd260b1 --- /dev/null +++ b/node_modules/utf-8-validate/src/validation.c @@ -0,0 +1,109 @@ +#define NAPI_VERSION 1 +#include +#include +#include + +napi_value IsValidUTF8(napi_env env, napi_callback_info info) { + napi_status status; + size_t argc = 1; + napi_value argv[1]; + + status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL); + assert(status == napi_ok); + + uint8_t *buf; + size_t len; + + status = napi_get_buffer_info(env, argv[0], (void **)&buf, &len); + assert(status == napi_ok); + + size_t i = 0; + + // + // This code has been taken from utf8_check.c which was developed by + // Markus Kuhn . + // + // For original code / licensing please refer to + // https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c + // + while (i < len) { + size_t j = i + 8; + + if (j <= len) { + // + // Read 8 bytes and check if they are ASCII. + // + uint64_t chunk; + memcpy(&chunk, buf + i, 8); + + if ((chunk & 0x8080808080808080) == 0x00) { + i = j; + continue; + } + } + + while ((buf[i] & 0x80) == 0x00) { // 0xxxxxxx + if (++i == len) { + goto exit; + } + } + + if ((buf[i] & 0xe0) == 0xc0) { // 110xxxxx 10xxxxxx + if ( + i + 1 == len || + (buf[i + 1] & 0xc0) != 0x80 || + (buf[i] & 0xfe) == 0xc0 // overlong + ) { + break; + } + + i += 2; + } else if ((buf[i] & 0xf0) == 0xe0) { // 1110xxxx 10xxxxxx 10xxxxxx + if ( + i + 2 >= len || + (buf[i + 1] & 0xc0) != 0x80 || + (buf[i + 2] & 0xc0) != 0x80 || + (buf[i] == 0xe0 && (buf[i + 1] & 0xe0) == 0x80) || // overlong + (buf[i] == 0xed && (buf[i + 1] & 0xe0) == 0xa0) // surrogate (U+D800 - U+DFFF) + ) { + break; + } + + i += 3; + } else if ((buf[i] & 0xf8) == 0xf0) { // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + if ( + i + 3 >= len || + (buf[i + 1] & 0xc0) != 0x80 || + (buf[i + 2] & 0xc0) != 0x80 || + (buf[i + 3] & 0xc0) != 0x80 || + (buf[i] == 0xf0 && (buf[i + 1] & 0xf0) == 0x80) || // overlong + (buf[i] == 0xf4 && buf[i + 1] > 0x8f) || buf[i] > 0xf4 // > U+10FFFF + ) { + break; + } + + i += 4; + } else { + break; + } + } + +exit:; + napi_value result; + status = napi_get_boolean(env, i == len, &result); + assert(status == napi_ok); + + return result; +} + +napi_value Init(napi_env env, napi_value exports) { + napi_status status; + napi_value isValidUTF8; + + status = napi_create_function(env, NULL, 0, IsValidUTF8, NULL, &isValidUTF8); + assert(status == napi_ok); + + return isValidUTF8; +} + +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) diff --git a/node_modules/ws/browser.js b/node_modules/ws/browser.js new file mode 100644 index 0000000..ca4f628 --- /dev/null +++ b/node_modules/ws/browser.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = function () { + throw new Error( + 'ws does not work in the browser. Browser clients must use the native ' + + 'WebSocket object' + ); +}; diff --git a/node_modules/ws/lib/limiter.js b/node_modules/ws/lib/limiter.js new file mode 100644 index 0000000..3fd3578 --- /dev/null +++ b/node_modules/ws/lib/limiter.js @@ -0,0 +1,55 @@ +'use strict'; + +const kDone = Symbol('kDone'); +const kRun = Symbol('kRun'); + +/** + * A very simple job queue with adjustable concurrency. Adapted from + * https://github.com/STRML/async-limiter + */ +class Limiter { + /** + * Creates a new `Limiter`. + * + * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed + * to run concurrently + */ + constructor(concurrency) { + this[kDone] = () => { + this.pending--; + this[kRun](); + }; + this.concurrency = concurrency || Infinity; + this.jobs = []; + this.pending = 0; + } + + /** + * Adds a job to the queue. + * + * @param {Function} job The job to run + * @public + */ + add(job) { + this.jobs.push(job); + this[kRun](); + } + + /** + * Removes a job from the queue and runs it if possible. + * + * @private + */ + [kRun]() { + if (this.pending === this.concurrency) return; + + if (this.jobs.length) { + const job = this.jobs.shift(); + + this.pending++; + job(this[kDone]); + } + } +} + +module.exports = Limiter; diff --git a/node_modules/ws/lib/stream.js b/node_modules/ws/lib/stream.js new file mode 100644 index 0000000..19e1bff --- /dev/null +++ b/node_modules/ws/lib/stream.js @@ -0,0 +1,180 @@ +'use strict'; + +const { Duplex } = require('stream'); + +/** + * Emits the `'close'` event on a stream. + * + * @param {Duplex} stream The stream. + * @private + */ +function emitClose(stream) { + stream.emit('close'); +} + +/** + * The listener of the `'end'` event. + * + * @private + */ +function duplexOnEnd() { + if (!this.destroyed && this._writableState.finished) { + this.destroy(); + } +} + +/** + * The listener of the `'error'` event. + * + * @param {Error} err The error + * @private + */ +function duplexOnError(err) { + this.removeListener('error', duplexOnError); + this.destroy(); + if (this.listenerCount('error') === 0) { + // Do not suppress the throwing behavior. + this.emit('error', err); + } +} + +/** + * Wraps a `WebSocket` in a duplex stream. + * + * @param {WebSocket} ws The `WebSocket` to wrap + * @param {Object} [options] The options for the `Duplex` constructor + * @return {Duplex} The duplex stream + * @public + */ +function createWebSocketStream(ws, options) { + let resumeOnReceiverDrain = true; + let terminateOnDestroy = true; + + function receiverOnDrain() { + if (resumeOnReceiverDrain) ws._socket.resume(); + } + + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + ws._receiver.removeAllListeners('drain'); + ws._receiver.on('drain', receiverOnDrain); + }); + } else { + ws._receiver.removeAllListeners('drain'); + ws._receiver.on('drain', receiverOnDrain); + } + + const duplex = new Duplex({ + ...options, + autoDestroy: false, + emitClose: false, + objectMode: false, + writableObjectMode: false + }); + + ws.on('message', function message(msg) { + if (!duplex.push(msg)) { + resumeOnReceiverDrain = false; + ws._socket.pause(); + } + }); + + ws.once('error', function error(err) { + if (duplex.destroyed) return; + + // Prevent `ws.terminate()` from being called by `duplex._destroy()`. + // + // - If the `'error'` event is emitted before the `'open'` event, then + // `ws.terminate()` is a noop as no socket is assigned. + // - Otherwise, the error is re-emitted by the listener of the `'error'` + // event of the `Receiver` object. The listener already closes the + // connection by calling `ws.close()`. This allows a close frame to be + // sent to the other peer. If `ws.terminate()` is called right after this, + // then the close frame might not be sent. + terminateOnDestroy = false; + duplex.destroy(err); + }); + + ws.once('close', function close() { + if (duplex.destroyed) return; + + duplex.push(null); + }); + + duplex._destroy = function (err, callback) { + if (ws.readyState === ws.CLOSED) { + callback(err); + process.nextTick(emitClose, duplex); + return; + } + + let called = false; + + ws.once('error', function error(err) { + called = true; + callback(err); + }); + + ws.once('close', function close() { + if (!called) callback(err); + process.nextTick(emitClose, duplex); + }); + + if (terminateOnDestroy) ws.terminate(); + }; + + duplex._final = function (callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._final(callback); + }); + return; + } + + // If the value of the `_socket` property is `null` it means that `ws` is a + // client websocket and the handshake failed. In fact, when this happens, a + // socket is never assigned to the websocket. Wait for the `'error'` event + // that will be emitted by the websocket. + if (ws._socket === null) return; + + if (ws._socket._writableState.finished) { + callback(); + if (duplex._readableState.endEmitted) duplex.destroy(); + } else { + ws._socket.once('finish', function finish() { + // `duplex` is not destroyed here because the `'end'` event will be + // emitted on `duplex` after this `'finish'` event. The EOF signaling + // `null` chunk is, in fact, pushed when the websocket emits `'close'`. + callback(); + }); + ws.close(); + } + }; + + duplex._read = function () { + if ( + (ws.readyState === ws.OPEN || ws.readyState === ws.CLOSING) && + !resumeOnReceiverDrain + ) { + resumeOnReceiverDrain = true; + if (!ws._receiver._writableState.needDrain) ws._socket.resume(); + } + }; + + duplex._write = function (chunk, encoding, callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._write(chunk, encoding, callback); + }); + return; + } + + ws.send(chunk, callback); + }; + + duplex.on('end', duplexOnEnd); + duplex.on('error', duplexOnError); + return duplex; +} + +module.exports = createWebSocketStream;