summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-09-23 23:13:31 +0200
committerFlorian Dold <florian@dold.me>2022-09-23 23:13:31 +0200
commit60a309444eb515d5a79369e6b7c42bf5576c3451 (patch)
tree340bd4da92eacbd5abef0138cb5f110fabebb1f5
parente065d93337c63668b56521d6d2100e2f014011a8 (diff)
downloadwallet-core-60a309444eb515d5a79369e6b7c42bf5576c3451.tar.gz
wallet-core-60a309444eb515d5a79369e6b7c42bf5576c3451.tar.bz2
wallet-core-60a309444eb515d5a79369e6b7c42bf5576c3451.zip
prebuilt v0.9.0-dev.24 (fixed!)
-rw-r--r--v0.9.0-dev.24/taler-wallet-embedded.js13851
1 files changed, 13251 insertions, 600 deletions
diff --git a/v0.9.0-dev.24/taler-wallet-embedded.js b/v0.9.0-dev.24/taler-wallet-embedded.js
index 10e9f55e3..77dc45a7b 100644
--- a/v0.9.0-dev.24/taler-wallet-embedded.js
+++ b/v0.9.0-dev.24/taler-wallet-embedded.js
@@ -9,12 +9,12 @@ var path$1 = require('path');
var readline = require('readline');
var require$$1$2 = require('http');
var require$$2 = require('https');
-var require$$0$1 = require('url');
+var require$$0$2 = require('url');
var require$$3 = require('stream');
var require$$4 = require('assert');
var require$$1 = require('tty');
var require$$1$1 = require('util');
-var require$$0 = require('os');
+var require$$0$1 = require('os');
var require$$8 = require('zlib');
var fs = require('fs');
var child_process = require('child_process');
@@ -45,15 +45,15 @@ var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
var readline__default = /*#__PURE__*/_interopDefaultLegacy(readline);
var require$$1__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$1$2);
var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2);
-var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
+var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$2);
var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3);
var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4);
var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
var require$$1__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$1$1);
-var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
+var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
var require$$8__default = /*#__PURE__*/_interopDefaultLegacy(require$$8);
-var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
+var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
var child_process__default = /*#__PURE__*/_interopDefaultLegacy(child_process);
/*! *****************************************************************************
@@ -10808,7 +10808,11 @@ const paytoPfx = "payto://";
function addPaytoQueryParams(s, params) {
const [acct, search] = s.slice(paytoPfx.length).split("?");
const searchParams = new URLSearchParams(search || "");
- for (const k of Object.keys(params)) {
+ const keys = Object.keys(params);
+ if (keys.length === 0) {
+ return paytoPfx + acct;
+ }
+ for (const k of keys) {
searchParams.set(k, params[k]);
}
return paytoPfx + acct + "?" + searchParams.toString();
@@ -11315,6 +11319,14 @@ const codecForGetWithdrawalDetailsForUri = () => buildCodecForObject()
const codecForListKnownBankAccounts = () => buildCodecForObject()
.property("currency", codecOptional(codecForString()))
.build("ListKnownBankAccountsRequest");
+const codecForAddKnownBankAccounts = () => buildCodecForObject()
+ .property("payto", (codecForString()))
+ .property("alias", (codecForString()))
+ .property("currency", (codecForString()))
+ .build("AddKnownBankAccountsRequest");
+const codecForForgetKnownBankAccounts = () => buildCodecForObject()
+ .property("payto", (codecForString()))
+ .build("ForgetKnownBankAccountsRequest");
const codecForGetExchangeWithdrawalInfo = () => buildCodecForObject()
.property("exchangeBaseUrl", codecForString())
.property("amount", codecForAmountJson())
@@ -14247,6 +14259,7 @@ function describeContents(options) {
keyPath: options.keyPath,
_dummy: undefined,
autoIncrement: options.autoIncrement,
+ versionAdded: options.versionAdded,
};
}
function describeIndex(name, keyPath, options = {}) {
@@ -14255,6 +14268,7 @@ function describeIndex(name, keyPath, options = {}) {
name,
multiEntry: options.multiEntry,
unique: options.unique,
+ versionAdded: options.versionAdded,
};
}
const storeWithIndexesSymbol = Symbol("StoreWithIndexesMark");
@@ -14791,7 +14805,7 @@ const CURRENT_DB_CONFIG_KEY = "currentMainDbName";
* backwards-compatible way or object stores and indices
* are added.
*/
-const WALLET_DB_MINOR_VERSION = 1;
+const WALLET_DB_MINOR_VERSION = 2;
var OperationStatusRange;
(function (OperationStatusRange) {
OperationStatusRange.ACTIVE_START = 10;
@@ -14819,6 +14833,10 @@ var WithdrawalGroupStatus;
*/
WithdrawalGroupStatus[WithdrawalGroupStatus["QueryingStatus"] = OperationStatusRange.ACTIVE_START + 2] = "QueryingStatus";
/**
+ * Ready for withdrawal.
+ */
+ WithdrawalGroupStatus[WithdrawalGroupStatus["Ready"] = OperationStatusRange.ACTIVE_START + 3] = "Ready";
+ /**
* The corresponding withdraw record has been created.
* No further processing is done, unless explicitly requested
* by the user.
@@ -15113,6 +15131,10 @@ const WalletStoresV1 = {
peerPushPaymentInitiations: describeStore("peerPushPaymentInitiations", describeContents({
keyPath: "pursePub",
}), {}),
+ bankAccounts: describeStore("bankAccounts", describeContents({
+ keyPath: "uri",
+ versionAdded: 2,
+ }), {}),
};
const walletMetadataStore = {
metaConfig: describeStore("metaConfig", describeContents({ keyPath: "key" }), {}),
@@ -15222,6 +15244,7 @@ async function importDb(db, object) {
*/
const logger$q = new Logger("db-utils.ts");
function upgradeFromStoreMap(storeMap, db, oldVersion, newVersion, upgradeTransaction) {
+ var _a, _b;
if (oldVersion === 0) {
for (const n in storeMap) {
const swi = storeMap[n];
@@ -15244,7 +15267,29 @@ function upgradeFromStoreMap(storeMap, db, oldVersion, newVersion, upgradeTransa
return;
}
logger$q.info(`upgrading database from ${oldVersion} to ${newVersion}`);
- throw Error("upgrade not supported");
+ for (const n in storeMap) {
+ const swi = storeMap[n];
+ const storeDesc = swi.store;
+ const storeAddedVersion = (_a = storeDesc.versionAdded) !== null && _a !== void 0 ? _a : 0;
+ if (storeAddedVersion <= oldVersion) {
+ continue;
+ }
+ const s = db.createObjectStore(swi.storeName, {
+ autoIncrement: storeDesc.autoIncrement,
+ keyPath: storeDesc.keyPath,
+ });
+ for (const indexName in swi.indexMap) {
+ const indexDesc = swi.indexMap[indexName];
+ const indexAddedVersion = (_b = indexDesc.versionAdded) !== null && _b !== void 0 ? _b : 0;
+ if (indexAddedVersion <= oldVersion) {
+ continue;
+ }
+ s.createIndex(indexDesc.name, indexDesc.keyPath, {
+ multiEntry: indexDesc.multiEntry,
+ unique: indexDesc.unique,
+ });
+ }
+ }
}
function promiseFromTransaction(transaction) {
return new Promise((resolve, reject) => {
@@ -24080,7 +24125,7 @@ var _a;
})();
/**
* Global indexeddb objects, either from the native or bridge-idb
- * implementation, depending on what is availabe in
+ * implementation, depending on what is available in
* the global environment.
*/
const GlobalIDB = {
@@ -26612,7 +26657,7 @@ async function updateWithdrawalDenoms(ws, exchangeBaseUrl) {
* and are big enough to withdraw with available denominations,
* create a new withdrawal group for the remaining amount.
*/
-async function queryReserve(ws, withdrawalGroupId) {
+async function queryReserve(ws, withdrawalGroupId, cancellationToken) {
const withdrawalGroup = await getWithdrawalGroupRecordTx(ws.db, {
withdrawalGroupId,
});
@@ -26626,6 +26671,7 @@ async function queryReserve(ws, withdrawalGroupId) {
logger$h.info(`querying reserve status via ${reserveUrl}`);
const resp = await ws.http.get(reserveUrl.href, {
timeout: getReserveRequestTimeout(),
+ cancellationToken,
});
const result = await readSuccessResponseJsonOrErrorCode(resp, codecForReserveStatus());
if (result.isError) {
@@ -26651,7 +26697,7 @@ async function queryReserve(ws, withdrawalGroupId) {
logger$h.warn(`withdrawal group ${withdrawalGroupId} not found`);
return;
}
- wg.status = WithdrawalGroupStatus.Finished;
+ wg.status = WithdrawalGroupStatus.Ready;
await tx.withdrawalGroups.put(wg);
});
return { ready: true };
@@ -26672,6 +26718,14 @@ async function processWithdrawalGroup(ws, withdrawalGroupId, options = {}) {
if (!withdrawalGroup) {
throw Error(`withdrawal group ${withdrawalGroupId} not found`);
}
+ const retryTag = RetryTags.forWithdrawal(withdrawalGroup);
+ // We're already running!
+ if (ws.activeLongpoll[retryTag]) {
+ logger$h.info("withdrawal group already in long-polling, returning!");
+ return {
+ type: OperationAttemptResultType.Longpoll,
+ };
+ }
switch (withdrawalGroup.status) {
case WithdrawalGroupStatus.RegisteringBank:
await processReserveBankStatus(ws, withdrawalGroupId);
@@ -26679,15 +26733,38 @@ async function processWithdrawalGroup(ws, withdrawalGroupId, options = {}) {
forceNow: true,
});
case WithdrawalGroupStatus.QueryingStatus: {
- const res = await queryReserve(ws, withdrawalGroupId);
- if (res.ready) {
- return await processWithdrawalGroup(ws, withdrawalGroupId, {
- forceNow: true,
- });
- }
+ const doQueryAsync = async () => {
+ if (ws.stopped) {
+ logger$h.info("not long-polling reserve, wallet already stopped");
+ await storeOperationPending(ws, retryTag);
+ return;
+ }
+ const cts = CancellationToken.create();
+ let res = undefined;
+ try {
+ ws.activeLongpoll[retryTag] = {
+ cancel: () => {
+ logger$h.info("cancel of reserve longpoll requested");
+ cts.cancel();
+ },
+ };
+ res = await queryReserve(ws, withdrawalGroupId, cts.token);
+ }
+ catch (e) {
+ await storeOperationError(ws, retryTag, getErrorDetailFromException(e));
+ return;
+ }
+ delete ws.activeLongpoll[retryTag];
+ logger$h.info(`active longpoll keys (2) ${Object.keys(ws.activeLongpoll)}`);
+ if (!res.ready) {
+ await storeOperationPending(ws, retryTag);
+ }
+ ws.latch.trigger();
+ };
+ doQueryAsync();
+ logger$h.info("returning early from withdrawal for long-polling in background");
return {
- type: OperationAttemptResultType.Pending,
- result: undefined,
+ type: OperationAttemptResultType.Longpoll,
};
}
case WithdrawalGroupStatus.WaitConfirmBank: {
@@ -26718,6 +26795,9 @@ async function processWithdrawalGroup(ws, withdrawalGroupId, options = {}) {
case WithdrawalGroupStatus.Finished:
// We can try to withdraw, nothing needs to be done with the reserve.
break;
+ case WithdrawalGroupStatus.Ready:
+ // Continue with the actual withdrawal!
+ break;
default:
throw new InvariantViolatedError(`unknown reserve record status: ${withdrawalGroup.status}`);
}
@@ -27305,9 +27385,13 @@ async function createManualWithdrawal(ws, req) {
.runReadWrite(async (tx) => {
return await getFundingPaytoUris(tx, withdrawalGroup.withdrawalGroupId);
});
- // Start withdrawal in the background.
- await processWithdrawalGroup(ws, withdrawalGroupId, { forceNow: true }).catch((err) => {
- logger$h.error("Processing withdrawal (after creation) failed:", err);
+ // Start withdrawal in the background (do not await!)
+ // FIXME: We could also interrupt the task look if it is waiting and
+ // rely on retry handling to re-process the withdrawal group.
+ runOperationWithErrorReporting(ws, RetryTags.forWithdrawal(withdrawalGroup), async () => {
+ return await processWithdrawalGroup(ws, withdrawalGroupId, {
+ forceNow: true,
+ });
});
return {
reservePub: withdrawalGroup.reservePub,
@@ -32631,85 +32715,6 @@ async function testPay(ws, args) {
/*
This file is part of GNU Taler
- (C) 2019 GNUnet e.V.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-class AsyncOpMemoMap {
- constructor() {
- this.n = 0;
- this.memoMap = {};
- }
- cleanUp(key, n) {
- const r = this.memoMap[key];
- if (r && r.n === n) {
- delete this.memoMap[key];
- }
- }
- memo(key, pg) {
- const res = this.memoMap[key];
- if (res) {
- return res.p;
- }
- const n = this.n++;
- // Wrap the operation in case it immediately throws
- const p = Promise.resolve().then(() => pg());
- this.memoMap[key] = {
- p,
- n,
- t: new Date().getTime(),
- };
- return p.finally(() => {
- this.cleanUp(key, n);
- });
- }
- clear() {
- this.memoMap = {};
- }
-}
-class AsyncOpMemoSingle {
- constructor() {
- this.n = 0;
- }
- cleanUp(n) {
- if (this.memoEntry && this.memoEntry.n === n) {
- this.memoEntry = undefined;
- }
- }
- memo(pg) {
- const res = this.memoEntry;
- if (res) {
- return res.p;
- }
- const n = this.n++;
- // Wrap the operation in case it immediately throws
- const p = Promise.resolve().then(() => pg());
- p.finally(() => {
- this.cleanUp(n);
- });
- this.memoEntry = {
- p,
- n,
- t: new Date().getTime(),
- };
- return p;
- }
- clear() {
- this.memoEntry = undefined;
- }
-}
-
-/*
- This file is part of GNU Taler
(C) 2021 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
@@ -32990,23 +32995,17 @@ async function storeOperationPending(ws, pendingTaskId) {
await tx.operationRetries.put(retryRecord);
});
}
-/**
- * Execute one operation based on the pending operation info record.
- *
- * Store success/failure result in the database.
- */
-async function processOnePendingOperation(ws, pending, forceNow = false) {
- logger$6.trace(`running pending ${JSON.stringify(pending, undefined, 2)}`);
+async function runOperationWithErrorReporting(ws, opId, f) {
let maybeError;
try {
- const resp = await callOperationHandler(ws, pending, forceNow);
+ const resp = await f();
switch (resp.type) {
case OperationAttemptResultType.Error:
- return await storeOperationError(ws, pending.id, resp.errorDetail);
+ return await storeOperationError(ws, opId, resp.errorDetail);
case OperationAttemptResultType.Finished:
- return await storeOperationFinished(ws, pending.id);
+ return await storeOperationFinished(ws, opId);
case OperationAttemptResultType.Pending:
- return await storeOperationPending(ws, pending.id);
+ return await storeOperationPending(ws, opId);
case OperationAttemptResultType.Longpoll:
break;
}
@@ -33016,7 +33015,7 @@ async function processOnePendingOperation(ws, pending, forceNow = false) {
logger$6.warn("operation processed resulted in error");
logger$6.warn(`error was: ${j2s(e.errorDetail)}`);
maybeError = e.errorDetail;
- return await storeOperationError(ws, pending.id, maybeError);
+ return await storeOperationError(ws, opId, maybeError);
}
else if (e instanceof Error) {
// This is a bug, as we expect pending operations to always
@@ -33027,12 +33026,12 @@ async function processOnePendingOperation(ws, pending, forceNow = false) {
maybeError = makeErrorDetail(TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, {
stack: e.stack,
}, `unexpected exception (message: ${e.message})`);
- return await storeOperationError(ws, pending.id, maybeError);
+ return await storeOperationError(ws, opId, maybeError);
}
else {
logger$6.error("Uncaught exception, value is not even an error.");
maybeError = makeErrorDetail(TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, {}, `unexpected exception (not even an error)`);
- return await storeOperationError(ws, pending.id, maybeError);
+ return await storeOperationError(ws, opId, maybeError);
}
}
}
@@ -33045,7 +33044,10 @@ async function runPending(ws, forceNow = false) {
if (!forceNow && !AbsoluteTime.isExpired(p.timestampDue)) {
continue;
}
- await processOnePendingOperation(ws, p, forceNow);
+ await runOperationWithErrorReporting(ws, p.id, async () => {
+ logger$6.trace(`running pending ${JSON.stringify(p, undefined, 2)}`);
+ return await callOperationHandler(ws, p, forceNow);
+ });
}
}
/**
@@ -33054,6 +33056,7 @@ async function runPending(ws, forceNow = false) {
* Looks up pending operations from the wallet, runs them, repeat.
*/
async function runTaskLoop(ws, opts = {}) {
+ logger$6.info(`running task loop opts=${j2s(opts)}`);
let retriesExceeded = false;
for (let iteration = 0; !ws.stopped; iteration++) {
const pending = await getPendingOperations(ws);
@@ -33109,7 +33112,10 @@ async function runTaskLoop(ws, opts = {}) {
if (!AbsoluteTime.isExpired(p.timestampDue)) {
continue;
}
- await processOnePendingOperation(ws, p);
+ await runOperationWithErrorReporting(ws, p.id, async () => {
+ logger$6.trace(`running pending ${JSON.stringify(p, undefined, 2)}`);
+ return await callOperationHandler(ws, p);
+ });
ws.notify({
type: NotificationType.PendingOperationProcessed,
});
@@ -33195,26 +33201,57 @@ async function getExchangeTos(ws, exchangeBaseUrl, acceptedFormat) {
* previous withdrawals.
*/
async function listKnownBankAccounts(ws, currency) {
- const accounts = {};
+ const accounts = [];
await ws.db
- .mktx((x) => [x.withdrawalGroups])
+ .mktx((x) => [x.bankAccounts])
.runReadOnly(async (tx) => {
- const withdrawalGroups = await tx.withdrawalGroups.iter().toArray();
- for (const r of withdrawalGroups) {
- const amount = r.rawWithdrawalAmount;
- if (currency && currency !== amount.currency) {
+ const knownAccounts = await tx.bankAccounts.iter().toArray();
+ for (const r of knownAccounts) {
+ if (currency && currency !== r.currency) {
continue;
}
- if (r.senderWire) {
- const payto = parsePaytoUri(r.senderWire);
- if (payto) {
- accounts[r.senderWire] = payto;
- }
+ const payto = parsePaytoUri(r.uri);
+ if (payto) {
+ accounts.push({
+ uri: payto,
+ alias: r.alias,
+ kyc_completed: r.kycCompleted,
+ currency: r.currency,
+ });
}
}
});
return { accounts };
}
+/**
+ */
+async function addKnownBankAccounts(ws, payto, alias, currency) {
+ await ws.db
+ .mktx((x) => [x.bankAccounts])
+ .runReadWrite(async (tx) => {
+ tx.bankAccounts.put({
+ uri: payto,
+ alias: alias,
+ currency: currency,
+ kycCompleted: false,
+ });
+ });
+ return;
+}
+/**
+ */
+async function forgetKnownBankAccounts(ws, payto) {
+ await ws.db
+ .mktx((x) => [x.bankAccounts])
+ .runReadWrite(async (tx) => {
+ const account = await tx.bankAccounts.get(payto);
+ if (!account) {
+ throw Error(`account not found: ${payto}`);
+ }
+ tx.bankAccounts.delete(account.uri);
+ });
+ return;
+}
async function getExchanges(ws) {
const exchanges = [];
await ws.db
@@ -33570,6 +33607,16 @@ async function dispatchRequestInternal(ws, operation, payload) {
const req = codecForListKnownBankAccounts().decode(payload);
return await listKnownBankAccounts(ws, req.currency);
}
+ case "addKnownBankAccounts": {
+ const req = codecForAddKnownBankAccounts().decode(payload);
+ await addKnownBankAccounts(ws, req.payto, req.alias, req.currency);
+ return {};
+ }
+ case "forgetKnownBankAccounts": {
+ const req = codecForForgetKnownBankAccounts().decode(payload);
+ await forgetKnownBankAccounts(ws, req.payto);
+ return {};
+ }
case "getWithdrawalDetailsForUri": {
const req = codecForGetWithdrawalDetailsForUri().decode(payload);
return await getWithdrawalDetailsForUri(ws, req.talerWithdrawUri);
@@ -33935,12 +33982,10 @@ class InternalWalletStateImpl {
this.db = db;
this.http = http;
this.timer = timer;
- this.memoProcessReserve = new AsyncOpMemoMap();
- this.memoMakePlanchet = new AsyncOpMemoMap();
- this.memoGetPending = new AsyncOpMemoSingle();
- this.memoGetBalance = new AsyncOpMemoSingle();
- this.memoProcessRefresh = new AsyncOpMemoMap();
- this.memoProcessRecoup = new AsyncOpMemoMap();
+ /**
+ * @see {@link InternalWalletState.activeLongpoll}
+ */
+ this.activeLongpoll = {};
this.merchantInfoCache = {};
this.insecureTrustExchange = false;
this.batchWithdrawal = false;
@@ -34002,9 +34047,14 @@ class InternalWalletStateImpl {
* Stop ongoing processing.
*/
stop() {
+ logger$6.info("stopping (at internal wallet state)");
this.stopped = true;
this.timerGroup.stopCurrentAndFutureTimers();
this.cryptoDispatcher.stop();
+ for (const key of Object.keys(this.activeLongpoll)) {
+ logger$6.info(`cancelling active longpoll ${key}`);
+ this.activeLongpoll[key].cancel();
+ }
}
async runUntilDone(req = {}) {
await runTaskLoop(this, Object.assign(Object.assign({}, req), { stopWhenDone: true }));
@@ -34236,6 +34286,22 @@ var bind$1 = bind$2;
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
*
@@ -34270,22 +34336,12 @@ function 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
*/
-function isArrayBuffer(val) {
- return toString.call(val) === '[object ArrayBuffer]';
-}
+var isArrayBuffer = kindOfTest('ArrayBuffer');
-/**
- * Determine if a value is a FormData
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an FormData, otherwise false
- */
-function isFormData(val) {
- return toString.call(val) === '[object FormData]';
-}
/**
* Determine if a value is a view on an ArrayBuffer
@@ -34340,7 +34396,7 @@ function isObject(val) {
* @return {boolean} True if value is a plain Object, otherwise false
*/
function isPlainObject(val) {
- if (toString.call(val) !== '[object Object]') {
+ if (kindOf(val) !== 'object') {
return false;
}
@@ -34351,32 +34407,38 @@ function isPlainObject(val) {
/**
* 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
*/
-function isDate(val) {
- return toString.call(val) === '[object Date]';
-}
+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
*/
-function isFile(val) {
- return toString.call(val) === '[object File]';
-}
+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
*/
-function isBlob(val) {
- return toString.call(val) === '[object Blob]';
-}
+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
@@ -34399,14 +34461,27 @@ function isStream(val) {
}
/**
- * Determine if a value is a URLSearchParams object
+ * 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
*/
-function isURLSearchParams(val) {
- return toString.call(val) === '[object URLSearchParams]';
-}
+var isURLSearchParams = kindOfTest('URLSearchParams');
/**
* Trim excess whitespace off the beginning and end of a string
@@ -34553,7 +34628,95 @@ function stripBOM(content) {
return content;
}
-var utils$8 = {
+/**
+ * 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} [filter]
+ * @returns {Object}
+ */
+
+function toFlatObject(sourceObj, destObj, filter) {
+ var props;
+ var i;
+ var prop;
+ var merged = {};
+
+ destObj = destObj || {};
+
+ do {
+ props = Object.getOwnPropertyNames(sourceObj);
+ i = props.length;
+ while (i-- > 0) {
+ prop = props[i];
+ if (!merged[prop]) {
+ destObj[prop] = sourceObj[prop];
+ merged[prop] = true;
+ }
+ }
+ sourceObj = 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
+ * @param {*} [thing]
+ * @returns {Array}
+ */
+function toArray(thing) {
+ if (!thing) return null;
+ var i = thing.length;
+ if (isUndefined(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));
+
+var utils$9 = {
isArray: isArray,
isArrayBuffer: isArrayBuffer,
isBuffer: isBuffer,
@@ -34575,10 +34738,18 @@ var utils$8 = {
merge: merge,
extend: extend,
trim: trim,
- stripBOM: stripBOM
+ stripBOM: stripBOM,
+ inherits: inherits,
+ toFlatObject: toFlatObject,
+ kindOf: kindOf,
+ kindOfTest: kindOfTest,
+ endsWith: endsWith,
+ toArray: toArray,
+ isTypedArray: isTypedArray,
+ isFileList: isFileList
};
-var utils$7 = utils$8;
+var utils$8 = utils$9;
function encode(val) {
return encodeURIComponent(val).
@@ -34606,26 +34777,26 @@ var buildURL$1 = function buildURL(url, params, paramsSerializer) {
var serializedParams;
if (paramsSerializer) {
serializedParams = paramsSerializer(params);
- } else if (utils$7.isURLSearchParams(params)) {
+ } else if (utils$8.isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
var parts = [];
- utils$7.forEach(params, function serialize(val, key) {
+ utils$8.forEach(params, function serialize(val, key) {
if (val === null || typeof val === 'undefined') {
return;
}
- if (utils$7.isArray(val)) {
+ if (utils$8.isArray(val)) {
key = key + '[]';
} else {
val = [val];
}
- utils$7.forEach(val, function parseValue(v) {
- if (utils$7.isDate(v)) {
+ utils$8.forEach(val, function parseValue(v) {
+ if (utils$8.isDate(v)) {
v = v.toISOString();
- } else if (utils$7.isObject(v)) {
+ } else if (utils$8.isObject(v)) {
v = JSON.stringify(v);
}
parts.push(encode(key) + '=' + encode(v));
@@ -34647,7 +34818,7 @@ var buildURL$1 = function buildURL(url, params, paramsSerializer) {
return url;
};
-var utils$6 = utils$8;
+var utils$7 = utils$9;
function InterceptorManager$1() {
this.handlers = [];
@@ -34691,7 +34862,7 @@ InterceptorManager$1.prototype.eject = function eject(id) {
* @param {Function} fn The function to call for each interceptor
*/
InterceptorManager$1.prototype.forEach = function forEach(fn) {
- utils$6.forEach(this.handlers, function forEachHandler(h) {
+ utils$7.forEach(this.handlers, function forEachHandler(h) {
if (h !== null) {
fn(h);
}
@@ -34700,10 +34871,10 @@ InterceptorManager$1.prototype.forEach = function forEach(fn) {
var InterceptorManager_1 = InterceptorManager$1;
-var utils$5 = utils$8;
+var utils$6 = utils$9;
-var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName) {
- utils$5.forEach(headers, function processHeader(value, name) {
+var normalizeHeaderName$1 = function normalizeHeaderName(headers, normalizedName) {
+ utils$6.forEach(headers, function processHeader(value, name) {
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
headers[normalizedName] = value;
delete headers[name];
@@ -34711,72 +34882,184 @@ var normalizeHeaderName = function normalizeHeaderName(headers, normalizedName)
});
};
-/**
- * Update an Error with the specified config, error code, and response.
- *
- * @param {Error} error The error to update.
- * @param {Object} config The config.
- * @param {string} [code] The error code (for example, 'ECONNABORTED').
- * @param {Object} [request] The request.
- * @param {Object} [response] The response.
- * @returns {Error} The error.
- */
-var enhanceError = function enhanceError(error, config, code, request, response) {
- error.config = config;
- if (code) {
- error.code = code;
- }
-
- error.request = request;
- error.response = response;
- error.isAxiosError = true;
-
- 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
- };
- };
- return error;
-};
-
-var createError;
-var hasRequiredCreateError;
+var AxiosError_1;
+var hasRequiredAxiosError;
-function requireCreateError () {
- if (hasRequiredCreateError) return createError;
- hasRequiredCreateError = 1;
+function requireAxiosError () {
+ if (hasRequiredAxiosError) return AxiosError_1;
+ hasRequiredAxiosError = 1;
- var enhanceError$1 = enhanceError;
+ var utils = utils$9;
/**
* Create an Error with the specified message, config, error code, request and response.
*
* @param {string} message The error message.
- * @param {Object} config The config.
* @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.
*/
- createError = function createError(message, config, code, request, response) {
- var error = new Error(message);
- return enhanceError$1(error, config, code, request, response);
+ function AxiosError(message, code, config, request, response) {
+ Error.call(this);
+ 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'
+ // 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.name = error.name;
+
+ customProps && Object.assign(axiosError, customProps);
+
+ return axiosError;
};
- return createError;
+
+ AxiosError_1 = AxiosError;
+ return AxiosError_1;
+}
+
+var transitional = {
+ silentJSONParsing: true,
+ forcedJSONParsing: true,
+ clarifyTimeoutError: false
+};
+
+var toFormData_1;
+var hasRequiredToFormData;
+
+function requireToFormData () {
+ if (hasRequiredToFormData) return toFormData_1;
+ hasRequiredToFormData = 1;
+
+ var utils = utils$9;
+
+ /**
+ * Convert a data object to FormData
+ * @param {Object} obj
+ * @param {?Object} [formData]
+ * @returns {Object}
+ **/
+
+ function toFormData(obj, formData) {
+ // eslint-disable-next-line no-param-reassign
+ formData = formData || new FormData();
+
+ var stack = [];
+
+ function convertValue(value) {
+ if (value === null) return '';
+
+ if (utils.isDate(value)) {
+ return value.toISOString();
+ }
+
+ if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
+ return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
+ }
+
+ return value;
+ }
+
+ function build(data, parentKey) {
+ if (utils.isPlainObject(data) || utils.isArray(data)) {
+ if (stack.indexOf(data) !== -1) {
+ throw Error('Circular reference detected in ' + parentKey);
+ }
+
+ stack.push(data);
+
+ utils.forEach(data, function each(value, key) {
+ if (utils.isUndefined(value)) return;
+ var fullKey = parentKey ? parentKey + '.' + key : key;
+ var arr;
+
+ if (value && !parentKey && typeof value === 'object') {
+ if (utils.endsWith(key, '{}')) {
+ // eslint-disable-next-line no-param-reassign
+ value = JSON.stringify(value);
+ } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
+ // eslint-disable-next-line func-names
+ arr.forEach(function(el) {
+ !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
+ });
+ return;
+ }
+ }
+
+ build(value, fullKey);
+ });
+
+ stack.pop();
+ } else {
+ formData.append(parentKey, convertValue(data));
+ }
+ }
+
+ build(obj);
+
+ return formData;
+ }
+
+ toFormData_1 = toFormData;
+ return toFormData_1;
}
var settle;
@@ -34786,7 +35069,7 @@ function requireSettle () {
if (hasRequiredSettle) return settle;
hasRequiredSettle = 1;
- var createError = requireCreateError();
+ var AxiosError = requireAxiosError();
/**
* Resolve or reject a Promise based on response status.
@@ -34800,10 +35083,10 @@ function requireSettle () {
if (!response.status || !validateStatus || validateStatus(response.status)) {
resolve(response);
} else {
- reject(createError(
+ 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,
- null,
response.request,
response
));
@@ -34819,7 +35102,7 @@ function requireCookies () {
if (hasRequiredCookies) return cookies;
hasRequiredCookies = 1;
- var utils = utils$8;
+ var utils = utils$9;
cookies = (
utils.isStandardBrowserEnv() ?
@@ -34873,77 +35156,50 @@ function requireCookies () {
return cookies;
}
-var isAbsoluteURL;
-var hasRequiredIsAbsoluteURL;
-
-function requireIsAbsoluteURL () {
- if (hasRequiredIsAbsoluteURL) return isAbsoluteURL;
- hasRequiredIsAbsoluteURL = 1;
-
- /**
- * 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
- */
- isAbsoluteURL = function isAbsoluteURL(url) {
- // A URL is considered absolute if it begins with "<scheme>://" 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);
- };
- return isAbsoluteURL;
-}
-
-var combineURLs;
-var hasRequiredCombineURLs;
-
-function requireCombineURLs () {
- if (hasRequiredCombineURLs) return combineURLs;
- hasRequiredCombineURLs = 1;
-
- /**
- * 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
- */
- combineURLs = function combineURLs(baseURL, relativeURL) {
- return relativeURL
- ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
- : baseURL;
- };
- return combineURLs;
-}
-
-var buildFullPath;
-var hasRequiredBuildFullPath;
+/**
+ * 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$1 = function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "<scheme>://" 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);
+};
-function requireBuildFullPath () {
- if (hasRequiredBuildFullPath) return buildFullPath;
- hasRequiredBuildFullPath = 1;
+/**
+ * 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$1 = function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+ : baseURL;
+};
- var isAbsoluteURL = requireIsAbsoluteURL();
- var combineURLs = requireCombineURLs();
+var isAbsoluteURL = isAbsoluteURL$1;
+var combineURLs = combineURLs$1;
- /**
- * 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
- */
- buildFullPath = function buildFullPath(baseURL, requestedURL) {
- if (baseURL && !isAbsoluteURL(requestedURL)) {
- return combineURLs(baseURL, requestedURL);
- }
- return requestedURL;
- };
- return buildFullPath;
-}
+/**
+ * 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$1 = function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL);
+ }
+ return requestedURL;
+};
var parseHeaders;
var hasRequiredParseHeaders;
@@ -34952,7 +35208,7 @@ function requireParseHeaders () {
if (hasRequiredParseHeaders) return parseHeaders;
hasRequiredParseHeaders = 1;
- var utils = utils$8;
+ var utils = utils$9;
// Headers whose duplicates are ignored by node
// c.f. https://nodejs.org/api/http.html#http_message_headers
@@ -35013,7 +35269,7 @@ function requireIsURLSameOrigin () {
if (hasRequiredIsURLSameOrigin) return isURLSameOrigin;
hasRequiredIsURLSameOrigin = 1;
- var utils = utils$8;
+ var utils = utils$9;
isURLSameOrigin = (
utils.isStandardBrowserEnv() ?
@@ -35082,31 +35338,48 @@ function requireIsURLSameOrigin () {
return isURLSameOrigin;
}
-var Cancel_1;
-var hasRequiredCancel;
+var CanceledError_1;
+var hasRequiredCanceledError;
-function requireCancel () {
- if (hasRequiredCancel) return Cancel_1;
- hasRequiredCancel = 1;
+function requireCanceledError () {
+ if (hasRequiredCanceledError) return CanceledError_1;
+ hasRequiredCanceledError = 1;
+
+ var AxiosError = requireAxiosError();
+ var utils = utils$9;
/**
- * A `Cancel` is an object that is thrown when an operation is canceled.
+ * A `CanceledError` is an object that is thrown when an operation is canceled.
*
* @class
* @param {string=} message The message.
*/
- function Cancel(message) {
- this.message = message;
+ function CanceledError(message) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);
+ this.name = 'CanceledError';
}
- Cancel.prototype.toString = function toString() {
- return 'Cancel' + (this.message ? ': ' + this.message : '');
- };
+ utils.inherits(CanceledError, AxiosError, {
+ __CANCEL__: true
+ });
- Cancel.prototype.__CANCEL__ = true;
+ CanceledError_1 = CanceledError;
+ return CanceledError_1;
+}
+
+var parseProtocol;
+var hasRequiredParseProtocol;
- Cancel_1 = Cancel;
- return Cancel_1;
+function requireParseProtocol () {
+ if (hasRequiredParseProtocol) return parseProtocol;
+ hasRequiredParseProtocol = 1;
+
+ parseProtocol = function parseProtocol(url) {
+ var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
+ return match && match[1] || '';
+ };
+ return parseProtocol;
}
var xhr;
@@ -35116,16 +35389,17 @@ function requireXhr () {
if (hasRequiredXhr) return xhr;
hasRequiredXhr = 1;
- var utils = utils$8;
+ var utils = utils$9;
var settle = requireSettle();
var cookies = requireCookies();
var buildURL = buildURL$1;
- var buildFullPath = requireBuildFullPath();
+ var buildFullPath = buildFullPath$1;
var parseHeaders = requireParseHeaders();
var isURLSameOrigin = requireIsURLSameOrigin();
- var createError = requireCreateError();
- var defaults = requireDefaults();
- var Cancel = requireCancel();
+ var transitionalDefaults = transitional;
+ var AxiosError = requireAxiosError();
+ var CanceledError = requireCanceledError();
+ var parseProtocol = requireParseProtocol();
xhr = function xhrAdapter(config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
@@ -35143,7 +35417,7 @@ function requireXhr () {
}
}
- if (utils.isFormData(requestData)) {
+ if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
delete requestHeaders['Content-Type']; // Let the browser set it
}
@@ -35157,6 +35431,7 @@ function requireXhr () {
}
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
@@ -35220,7 +35495,7 @@ function requireXhr () {
return;
}
- reject(createError('Request aborted', config, 'ECONNABORTED', request));
+ reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
// Clean up request
request = null;
@@ -35230,7 +35505,7 @@ function requireXhr () {
request.onerror = function handleError() {
// Real errors are hidden from us by the browser
// onerror should only fire if it's a network error
- reject(createError('Network Error', config, null, request));
+ reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));
// Clean up request
request = null;
@@ -35239,14 +35514,14 @@ function requireXhr () {
// Handle timeout
request.ontimeout = function handleTimeout() {
var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
- var transitional = config.transitional || defaults.transitional;
+ var transitional = config.transitional || transitionalDefaults;
if (config.timeoutErrorMessage) {
timeoutErrorMessage = config.timeoutErrorMessage;
}
- reject(createError(
+ reject(new AxiosError(
timeoutErrorMessage,
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
config,
- transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
request));
// Clean up request
@@ -35307,7 +35582,7 @@ function requireXhr () {
if (!request) {
return;
}
- reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);
+ reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
request.abort();
request = null;
};
@@ -35322,6 +35597,14 @@ function requireXhr () {
requestData = null;
}
+ var protocol = parseProtocol(fullPath);
+
+ if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {
+ reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
+ return;
+ }
+
+
// Send the request
request.send(requestData);
});
@@ -36584,6 +36867,11 @@ function requireFollowRedirects () {
};
});
+ var InvalidUrlError = createErrorType(
+ "ERR_INVALID_URL",
+ "Invalid URL",
+ TypeError
+ );
// Error types with codes
var RedirectionError = createErrorType(
"ERR_FR_REDIRECTION_FAILURE",
@@ -36644,10 +36932,10 @@ function requireFollowRedirects () {
}
// Validate input and shift parameters if necessary
- if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) {
+ if (!isString(data) && !isBuffer(data)) {
throw new TypeError("data should be a string, Buffer or Uint8Array");
}
- if (typeof encoding === "function") {
+ if (isFunction(encoding)) {
callback = encoding;
encoding = null;
}
@@ -36676,11 +36964,11 @@ function requireFollowRedirects () {
// Ends the current native request
RedirectableRequest.prototype.end = function (data, encoding, callback) {
// Shift parameters if necessary
- if (typeof data === "function") {
+ if (isFunction(data)) {
callback = data;
data = encoding = null;
}
- else if (typeof encoding === "function") {
+ else if (isFunction(encoding)) {
callback = encoding;
encoding = null;
}
@@ -36839,25 +37127,30 @@ function requireFollowRedirects () {
// If specified, use the agent corresponding to the protocol
// (HTTP and HTTPS use different types of agents)
if (this._options.agents) {
- var scheme = protocol.substr(0, protocol.length - 1);
+ var scheme = protocol.slice(0, -1);
this._options.agent = this._options.agents[scheme];
}
- // Create the native request
+ // Create the native request and set up its event handlers
var request = this._currentRequest =
nativeProtocol.request(this._options, this._onNativeResponse);
- this._currentUrl = url.format(this._options);
-
- // Set up event handlers
request._redirectable = this;
- for (var e = 0; e < events.length; e++) {
- request.on(events[e], eventHandlers[events[e]]);
+ 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.
+ // Write the request entity and end
var i = 0;
var self = this;
var buffers = this._requestBodyBuffers;
@@ -36905,97 +37198,120 @@ function requireFollowRedirects () {
// 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) {
- // Abort the current request
- abortRequest(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) {
- this.emit("error", new TooManyRedirectsError());
- return;
- }
+ if (!location || this._options.followRedirects === false ||
+ statusCode < 300 || statusCode >= 400) {
+ response.responseUrl = this._currentUrl;
+ response.redirects = this._redirects;
+ this.emit("response", response);
- // 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.
- 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);
- }
+ // Clean up
+ this._requestBodyBuffers = [];
+ return;
+ }
- // Drop the Host header, as the redirect might lead to a different host
- var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);
+ // The response is a redirect, so abort the current request
+ abortRequest(this._currentRequest);
+ // Discard the remainder of the response to avoid waiting for data
+ response.destroy();
- // If the redirect is relative, carry over the host of the last request
- var currentUrlParts = url.parse(this._currentUrl);
- var currentHost = currentHostHeader || currentUrlParts.host;
- var currentUrl = /^\w+:/.test(location) ? this._currentUrl :
- url.format(Object.assign(currentUrlParts, { host: currentHost }));
+ // RFC7231§6.4: A client SHOULD detect and intervene
+ // in cyclical redirections (i.e., "infinite" redirection loops).
+ if (++this._redirectCount > this._options.maxRedirects) {
+ this.emit("error", new TooManyRedirectsError());
+ return;
+ }
- // Determine the URL of the redirection
- var redirectUrl;
- try {
- redirectUrl = url.resolve(currentUrl, location);
- }
- catch (cause) {
- this.emit("error", new RedirectionError(cause));
- return;
- }
+ // 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);
+ }
- // Create the redirected request
- debug("redirecting to", redirectUrl);
- this._isRedirect = true;
- var redirectUrlParts = url.parse(redirectUrl);
- Object.assign(this._options, redirectUrlParts);
+ // 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 confidential headers when redirecting to another scheme:domain
- if (redirectUrlParts.protocol !== currentUrlParts.protocol ||
- !isSameOrSubdomain(redirectUrlParts.host, currentHost)) {
- removeMatchingHeaders(/^(?:authorization|cookie)$/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);
- // Evaluate the beforeRedirect callback
- if (typeof this._options.beforeRedirect === "function") {
- var responseDetails = { headers: response.headers };
- try {
- this._options.beforeRedirect.call(null, this._options, responseDetails);
- }
- catch (err) {
- this.emit("error", err);
- return;
- }
- this._sanitizeOptions(this._options);
- }
+ // If the redirect is relative, carry over the host of the last request
+ var currentUrlParts = url.parse(this._currentUrl);
+ var currentHost = currentHostHeader || currentUrlParts.host;
+ var currentUrl = /^\w+:/.test(location) ? this._currentUrl :
+ url.format(Object.assign(currentUrlParts, { host: currentHost }));
+
+ // Determine the URL of the redirection
+ var redirectUrl;
+ try {
+ redirectUrl = url.resolve(currentUrl, location);
+ }
+ catch (cause) {
+ this.emit("error", new RedirectionError({ cause: cause }));
+ return;
+ }
+
+ // Create the redirected request
+ debug("redirecting to", redirectUrl);
+ this._isRedirect = true;
+ var redirectUrlParts = url.parse(redirectUrl);
+ Object.assign(this._options, redirectUrlParts);
+
+ // Drop confidential headers when redirecting to a less secure protocol
+ // or to a different domain that is not a superdomain
+ if (redirectUrlParts.protocol !== currentUrlParts.protocol &&
+ redirectUrlParts.protocol !== "https:" ||
+ redirectUrlParts.host !== currentHost &&
+ !isSubdomain(redirectUrlParts.host, currentHost)) {
+ removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);
+ }
- // Perform the redirected request
+ // Evaluate the beforeRedirect callback
+ if (isFunction(beforeRedirect)) {
+ var responseDetails = {
+ headers: response.headers,
+ statusCode: statusCode,
+ };
+ var requestDetails = {
+ url: currentUrl,
+ method: method,
+ headers: requestHeaders,
+ };
try {
- this._performRequest();
+ beforeRedirect(this._options, responseDetails, requestDetails);
}
- catch (cause) {
- this.emit("error", new RedirectionError(cause));
+ catch (err) {
+ this.emit("error", err);
+ return;
}
+ this._sanitizeOptions(this._options);
}
- else {
- // The response is not a redirect; return it as-is
- response.responseUrl = this._currentUrl;
- response.redirects = this._redirects;
- this.emit("response", response);
- // Clean up
- this._requestBodyBuffers = [];
+ // Perform the redirected request
+ try {
+ this._performRequest();
+ }
+ catch (cause) {
+ this.emit("error", new RedirectionError({ cause: cause }));
}
};
@@ -37017,15 +37333,19 @@ function requireFollowRedirects () {
// Executes a request, following redirects
function request(input, options, callback) {
// Parse parameters
- if (typeof input === "string") {
- var urlStr = input;
+ if (isString(input)) {
+ var parsed;
try {
- input = urlToOptions(new URL(urlStr));
+ parsed = urlToOptions(new URL(input));
}
catch (err) {
/* istanbul ignore next */
- input = url.parse(urlStr);
+ parsed = url.parse(input);
+ }
+ if (!isString(parsed.protocol)) {
+ throw new InvalidUrlError({ input });
}
+ input = parsed;
}
else if (URL && (input instanceof URL)) {
input = urlToOptions(input);
@@ -37035,7 +37355,7 @@ function requireFollowRedirects () {
options = input;
input = { protocol: protocol };
}
- if (typeof options === "function") {
+ if (isFunction(options)) {
callback = options;
options = null;
}
@@ -37046,6 +37366,9 @@ function requireFollowRedirects () {
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);
@@ -37103,40 +37426,48 @@ function requireFollowRedirects () {
undefined : String(lastValue).trim();
}
- function createErrorType(code, defaultMessage) {
- function CustomError(cause) {
+ function createErrorType(code, message, baseClass) {
+ // Create constructor
+ function CustomError(properties) {
Error.captureStackTrace(this, this.constructor);
- if (!cause) {
- this.message = defaultMessage;
- }
- else {
- this.message = defaultMessage + ": " + cause.message;
- this.cause = cause;
- }
+ Object.assign(this, properties || {});
+ this.code = code;
+ this.message = this.cause ? message + ": " + this.cause.message : message;
}
- CustomError.prototype = new Error();
+
+ // Attach constructor and set default properties
+ CustomError.prototype = new (baseClass || Error)();
CustomError.prototype.constructor = CustomError;
CustomError.prototype.name = "Error [" + code + "]";
- CustomError.prototype.code = code;
return CustomError;
}
function abortRequest(request) {
- for (var e = 0; e < events.length; e++) {
- request.removeListener(events[e], eventHandlers[events[e]]);
+ for (var event of events) {
+ request.removeListener(event, eventHandlers[event]);
}
request.on("error", noop);
request.abort();
}
- function isSameOrSubdomain(subdomain, domain) {
- if (subdomain === domain) {
- return true;
- }
- const dot = subdomain.length - domain.length - 1;
+ 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);
+ }
+
// Exports
followRedirects.exports = wrap({ http: http, https: https });
followRedirects.exports.wrap = wrap;
@@ -37150,7 +37481,7 @@ function requireData () {
if (hasRequiredData) return data;
hasRequiredData = 1;
data = {
- "version": "0.25.0"
+ "version": "0.27.2"
};
return data;
}
@@ -37162,9 +37493,9 @@ function requireHttp () {
if (hasRequiredHttp) return http_1;
hasRequiredHttp = 1;
- var utils = utils$8;
+ var utils = utils$9;
var settle = requireSettle();
- var buildFullPath = requireBuildFullPath();
+ var buildFullPath = buildFullPath$1;
var buildURL = buildURL$1;
var http = require$$1__default$2["default"];
var https = require$$2__default["default"];
@@ -37173,13 +37504,14 @@ function requireHttp () {
var url = require$$0__default$1["default"];
var zlib = require$$8__default["default"];
var VERSION = requireData().version;
- var createError = requireCreateError();
- var enhanceError$1 = enhanceError;
- var defaults = requireDefaults();
- var Cancel = requireCancel();
+ var transitionalDefaults = transitional;
+ var AxiosError = requireAxiosError();
+ var CanceledError = requireCanceledError();
var isHttps = /https:?/;
+ var supportedProtocols = [ 'http:', 'https:', 'file:' ];
+
/**
*
* @param {http.ClientRequestArgs} options
@@ -37249,20 +37581,28 @@ function requireHttp () {
headers['User-Agent'] = 'axios/' + VERSION;
}
- if (data && !utils.isStream(data)) {
+ // 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)) ; 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(createError(
+ 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(createError('Request body larger than maxBodyLength limit', config));
+ return reject(new AxiosError(
+ 'Request body larger than maxBodyLength limit',
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
}
// Add Content-Length header if data exists
@@ -37282,7 +37622,15 @@ function requireHttp () {
// Parse url
var fullPath = buildFullPath(config.baseURL, config.url);
var parsed = url.parse(fullPath);
- var protocol = parsed.protocol || 'http:';
+ var protocol = parsed.protocol || supportedProtocols[0];
+
+ if (supportedProtocols.indexOf(protocol) === -1) {
+ return reject(new AxiosError(
+ 'Unsupported protocol ' + protocol,
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
if (!auth && parsed.auth) {
var urlAuth = parsed.auth.split(':');
@@ -37298,6 +37646,16 @@ function requireHttp () {
var isHttpsRequest = isHttps.test(protocol);
var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
+ 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: config.method.toUpperCase(),
@@ -37377,6 +37735,9 @@ function requireHttp () {
if (config.maxRedirects) {
options.maxRedirects = config.maxRedirects;
}
+ if (config.beforeRedirect) {
+ options.beforeRedirect = config.beforeRedirect;
+ }
transport = isHttpsProxy ? httpsFollow : httpFollow;
}
@@ -37438,8 +37799,8 @@ function requireHttp () {
// stream.destoy() emit aborted event before calling reject() on Node.js v16
rejected = true;
stream.destroy();
- reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
- config, null, lastRequest));
+ reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
+ AxiosError.ERR_BAD_RESPONSE, config, lastRequest));
}
});
@@ -37448,12 +37809,17 @@ function requireHttp () {
return;
}
stream.destroy();
- reject(createError('error request aborted', config, 'ERR_REQUEST_ABORTED', lastRequest));
+ reject(new AxiosError(
+ 'maxContentLength size of ' + config.maxContentLength + ' exceeded',
+ AxiosError.ERR_BAD_RESPONSE,
+ config,
+ lastRequest
+ ));
});
stream.on('error', function handleStreamError(err) {
if (req.aborted) return;
- reject(enhanceError$1(err, config, null, lastRequest));
+ reject(AxiosError.from(err, null, config, lastRequest));
});
stream.on('end', function handleStreamEnd() {
@@ -37467,7 +37833,7 @@ function requireHttp () {
}
response.data = responseData;
} catch (err) {
- reject(enhanceError$1(err, config, err.code, response.request, response));
+ reject(AxiosError.from(err, null, config, response.request, response));
}
settle(resolve, reject, response);
});
@@ -37476,8 +37842,9 @@ function requireHttp () {
// Handle errors
req.on('error', function handleRequestError(err) {
- if (req.aborted && err.code !== 'ERR_FR_TOO_MANY_REDIRECTS') return;
- reject(enhanceError$1(err, config, null, req));
+ // @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
@@ -37492,10 +37859,10 @@ function requireHttp () {
var timeout = parseInt(config.timeout, 10);
if (isNaN(timeout)) {
- reject(createError(
+ reject(new AxiosError(
'error trying to parse `config.timeout` to int',
+ AxiosError.ERR_BAD_OPTION_VALUE,
config,
- 'ERR_PARSE_TIMEOUT',
req
));
@@ -37509,11 +37876,11 @@ function requireHttp () {
// 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 transitional = config.transitional || defaults.transitional;
- reject(createError(
+ var transitional = config.transitional || transitionalDefaults;
+ reject(new AxiosError(
'timeout of ' + timeout + 'ms exceeded',
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
config,
- transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
req
));
});
@@ -37526,7 +37893,7 @@ function requireHttp () {
if (req.aborted) return;
req.abort();
- reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);
+ reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
};
config.cancelToken && config.cancelToken.subscribe(onCanceled);
@@ -37539,7 +37906,7 @@ function requireHttp () {
// Send the request
if (utils.isStream(data)) {
data.on('error', function handleStreamError(err) {
- reject(enhanceError$1(err, config, null, req));
+ reject(AxiosError.from(err, config, null, req));
}).pipe(req);
} else {
req.end(data);
@@ -37549,150 +37916,12417 @@ function requireHttp () {
return http_1;
}
-var defaults_1;
-var hasRequiredDefaults;
+var FormData$1 = {exports: {}};
+
+var delayed_stream;
+var hasRequiredDelayed_stream;
+
+function requireDelayed_stream () {
+ if (hasRequiredDelayed_stream) return delayed_stream;
+ hasRequiredDelayed_stream = 1;
+ var Stream = require$$3__default["default"].Stream;
+ var util = require$$1__default$1["default"];
+
+ delayed_stream = DelayedStream;
+ function DelayedStream() {
+ this.source = null;
+ this.dataSize = 0;
+ this.maxDataSize = 1024 * 1024;
+ this.pauseStream = true;
-function requireDefaults () {
- if (hasRequiredDefaults) return defaults_1;
- hasRequiredDefaults = 1;
+ 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 utils = utils$8;
- var normalizeHeaderName$1 = normalizeHeaderName;
- var enhanceError$1 = enhanceError;
+ var realEmit = source.emit;
+ source.emit = function() {
+ delayedStream._handleEmit(arguments);
+ return realEmit.apply(source, arguments);
+ };
- var DEFAULT_CONTENT_TYPE = {
- 'Content-Type': 'application/x-www-form-urlencoded'
+ source.on('error', function() {});
+ if (delayedStream.pauseStream) {
+ source.pause();
+ }
+
+ return delayedStream;
};
- function setContentTypeIfUnset(headers, value) {
- if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
- headers['Content-Type'] = value;
+ 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));
+ };
+ return delayed_stream;
+}
+
+var combined_stream;
+var hasRequiredCombined_stream;
+
+function requireCombined_stream () {
+ if (hasRequiredCombined_stream) return combined_stream;
+ hasRequiredCombined_stream = 1;
+ var util = require$$1__default$1["default"];
+ var Stream = require$$3__default["default"].Stream;
+ var DelayedStream = requireDelayed_stream();
+
+ combined_stream = 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);
+ };
+ return combined_stream;
+}
+
+var mimeTypes = {};
+
+var mimeDb = {exports: {}};
+
+var require$$0 = {
+ "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
+}
+};
+
+/*!
+ * mime-db
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015-2022 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+var hasRequiredMimeDb;
+
+function requireMimeDb () {
+ if (hasRequiredMimeDb) return mimeDb.exports;
+ hasRequiredMimeDb = 1;
+ (function (module) {
+ /**
+ * Module exports.
+ */
+
+ module.exports = require$$0;
+} (mimeDb));
+ return mimeDb.exports;
+}
+
+/*!
+ * mime-types
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+var hasRequiredMimeTypes;
+
+function requireMimeTypes () {
+ if (hasRequiredMimeTypes) return mimeTypes;
+ hasRequiredMimeTypes = 1;
+ (function (exports) {
+
+ /**
+ * Module dependencies.
+ * @private
+ */
+
+ var db = requireMimeDb();
+ var extname = path__default["default"].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;
+ }
+ });
+ }
+} (mimeTypes));
+ return mimeTypes;
+}
+
+var defer_1;
+var hasRequiredDefer;
+
+function requireDefer () {
+ if (hasRequiredDefer) return defer_1;
+ hasRequiredDefer = 1;
+ defer_1 = 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);
}
}
+ return defer_1;
+}
+
+var async_1;
+var hasRequiredAsync;
+
+function requireAsync () {
+ if (hasRequiredAsync) return async_1;
+ hasRequiredAsync = 1;
+ var defer = requireDefer();
+
+ // API
+ async_1 = 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);
+ });
+ }
+ };
+ }
+ return async_1;
+}
+
+var abort_1;
+var hasRequiredAbort;
- function getDefaultAdapter() {
- var adapter;
- if (typeof XMLHttpRequest !== 'undefined') {
- // For browsers use XHR adapter
- adapter = requireXhr();
- } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
- // For node use HTTP adapter
- adapter = requireHttp();
+function requireAbort () {
+ if (hasRequiredAbort) return abort_1;
+ hasRequiredAbort = 1;
+ // API
+ abort_1 = 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]();
}
- return adapter;
}
+ return abort_1;
+}
- 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;
+var iterate_1;
+var hasRequiredIterate;
+
+function requireIterate () {
+ if (hasRequiredIterate) return iterate_1;
+ hasRequiredIterate = 1;
+ var async = requireAsync()
+ , abort = requireAbort()
+ ;
+
+ // API
+ iterate_1 = 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;
+ }
+ return iterate_1;
+}
+
+var state_1;
+var hasRequiredState;
+
+function requireState () {
+ if (hasRequiredState) return state_1;
+ hasRequiredState = 1;
+ // API
+ state_1 = 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;
+ }
+ return state_1;
+}
+
+var terminator_1;
+var hasRequiredTerminator;
+
+function requireTerminator () {
+ if (hasRequiredTerminator) return terminator_1;
+ hasRequiredTerminator = 1;
+ var abort = requireAbort()
+ , async = requireAsync()
+ ;
+
+ // API
+ terminator_1 = 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);
+ }
+ return terminator_1;
+}
+
+var parallel_1;
+var hasRequiredParallel;
+
+function requireParallel () {
+ if (hasRequiredParallel) return parallel_1;
+ hasRequiredParallel = 1;
+ var iterate = requireIterate()
+ , initState = requireState()
+ , terminator = requireTerminator()
+ ;
+
+ // Public API
+ parallel_1 = 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);
+ }
+ return parallel_1;
+}
+
+var serialOrdered = {exports: {}};
+
+var hasRequiredSerialOrdered;
+
+function requireSerialOrdered () {
+ if (hasRequiredSerialOrdered) return serialOrdered.exports;
+ hasRequiredSerialOrdered = 1;
+ var iterate = requireIterate()
+ , initState = requireState()
+ , terminator = requireTerminator()
+ ;
+
+ // Public API
+ serialOrdered.exports = serialOrdered$1;
+ // sorting helpers
+ serialOrdered.exports.ascending = ascending;
+ serialOrdered.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$1(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);
+ }
+ return serialOrdered.exports;
+}
+
+var serial_1;
+var hasRequiredSerial;
+
+function requireSerial () {
+ if (hasRequiredSerial) return serial_1;
+ hasRequiredSerial = 1;
+ var serialOrdered = requireSerialOrdered();
+
+ // Public API
+ serial_1 = 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);
+ }
+ return serial_1;
+}
+
+var asynckit;
+var hasRequiredAsynckit;
+
+function requireAsynckit () {
+ if (hasRequiredAsynckit) return asynckit;
+ hasRequiredAsynckit = 1;
+ asynckit =
+ {
+ parallel : requireParallel(),
+ serial : requireSerial(),
+ serialOrdered : requireSerialOrdered()
+ };
+ return asynckit;
+}
+
+var populate;
+var hasRequiredPopulate;
+
+function requirePopulate () {
+ if (hasRequiredPopulate) return populate;
+ hasRequiredPopulate = 1;
+ // populates missing values
+ populate = function(dst, src) {
+
+ Object.keys(src).forEach(function(prop)
+ {
+ dst[prop] = dst[prop] || src[prop];
+ });
+
+ return dst;
+ };
+ return populate;
+}
+
+var form_data;
+var hasRequiredForm_data;
+
+function requireForm_data () {
+ if (hasRequiredForm_data) return form_data;
+ hasRequiredForm_data = 1;
+ var CombinedStream = requireCombined_stream();
+ var util = require$$1__default$1["default"];
+ var path = path__default["default"];
+ var http = require$$1__default$2["default"];
+ var https = require$$2__default["default"];
+ var parseUrl = require$$0__default$1["default"].parse;
+ var fs = fs__default["default"];
+ var Stream = require$$3__default["default"].Stream;
+ var mime = requireMimeTypes();
+ var asynckit = requireAsynckit();
+ var populate = requirePopulate();
+
+ // Public API
+ form_data = FormData;
+
+ // make it a Stream
+ util.inherits(FormData, CombinedStream);
+
+ /**
+ * 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);
}
- return (encoder || JSON.stringify)(rawValue);
+ this._overheadLength = 0;
+ this._valueLength = 0;
+ this._valuesToMeasure = [];
+
+ CombinedStream.call(this);
+
+ options = options || {};
+ for (var option in options) {
+ this[option] = options[option];
+ }
}
- var defaults = {
+ FormData.LINE_BREAK = '\r\n';
+ FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
+
+ FormData.prototype.append = function(field, value, options) {
+
+ options = options || {};
+
+ // allow filename as single option
+ if (typeof options == 'string') {
+ options = {filename: options};
+ }
+
+ var append = CombinedStream.prototype.append.bind(this);
+
+ // all that streamy business can't handle numbers
+ if (typeof value == 'number') {
+ value = '' + value;
+ }
+
+ // https://github.com/felixge/node-form-data/issues/38
+ if (util.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 += +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 && value.hasOwnProperty('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 (value.hasOwnProperty('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));
+
+ // not that fast snoopy
+ } else {
+ // still need to fetch file size from fs
+ fs.stat(value.path, function(err, stat) {
+
+ var fileSize;
+
+ if (err) {
+ callback(err);
+ return;
+ }
+
+ // update final size based on the range options
+ fileSize = stat.size - (value.start ? value.start : 0);
+ callback(null, fileSize);
+ });
+ }
+
+ // or http response
+ } else if (value.hasOwnProperty('httpVersion')) {
+ callback(null, +value.headers['content-length']);
+
+ // or request stream http://github.com/mikeal/request
+ } else if (value.hasOwnProperty('httpModule')) {
+ // wait till response come back
+ value.on('response', function(response) {
+ value.pause();
+ callback(null, +response.headers['content-length']);
+ });
+ value.resume();
+
+ // something else
+ } else {
+ callback('Unknown stream');
+ }
+ };
+
+ 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 || [])
+ };
- transitional: {
- silentJSONParsing: true,
- forcedJSONParsing: true,
- clarifyTimeoutError: false
- },
+ // allow custom headers.
+ if (typeof options.header == 'object') {
+ populate(headers, options.header);
+ }
- adapter: getDefaultAdapter(),
+ var header;
+ for (var prop in headers) {
+ if (!headers.hasOwnProperty(prop)) continue;
+ header = headers[prop];
- transformRequest: [function transformRequest(data, headers) {
- normalizeHeaderName$1(headers, 'Accept');
- normalizeHeaderName$1(headers, 'Content-Type');
+ // skip nullish headers.
+ if (header == null) {
+ continue;
+ }
- if (utils.isFormData(data) ||
- utils.isArrayBuffer(data) ||
- utils.isBuffer(data) ||
- utils.isStream(data) ||
- utils.isFile(data) ||
- utils.isBlob(data)
- ) {
- return data;
+ // convert all headers to arrays.
+ if (!Array.isArray(header)) {
+ header = [header];
}
- if (utils.isArrayBufferView(data)) {
- return data.buffer;
+
+ // add non-empty headers.
+ if (header.length) {
+ contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
}
- if (utils.isURLSearchParams(data)) {
- setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
- return data.toString();
+ }
+
+ return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
+ };
+
+ FormData.prototype._getContentDisposition = function(value, options) {
+
+ var filename
+ , contentDisposition
+ ;
+
+ if (typeof options.filepath === 'string') {
+ // custom filepath for relative paths
+ filename = path.normalize(options.filepath).replace(/\\/g, '/');
+ } else if (options.filename || 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.name || value.path);
+ } else if (value.readable && value.hasOwnProperty('httpVersion')) {
+ // or try http response
+ filename = path.basename(value.client._httpMessage.path || '');
+ }
+
+ if (filename) {
+ contentDisposition = 'filename="' + filename + '"';
+ }
+
+ return contentDisposition;
+ };
+
+ 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.name) {
+ contentType = mime.lookup(value.name);
+ }
+
+ // or try `path` from fs-, request- streams
+ if (!contentType && value.path) {
+ contentType = mime.lookup(value.path);
+ }
+
+ // or if it's http-reponse
+ if (!contentType && value.readable && value.hasOwnProperty('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 && 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();
}
- if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {
- setContentTypeIfUnset(headers, 'application/json');
- return stringifySafely(data);
+
+ 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) {
+ if (userHeaders.hasOwnProperty(header)) {
+ formHeaders[header.toLowerCase()] = userHeaders[header];
}
- return data;
- }],
-
- transformResponse: [function transformResponse(data) {
- var transitional = this.transitional || defaults.transitional;
- var silentJSONParsing = transitional && transitional.silentJSONParsing;
- var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
- var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
-
- if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
- try {
- return JSON.parse(data);
- } catch (e) {
- if (strictJSONParsing) {
- if (e.name === 'SyntaxError') {
- throw enhanceError$1(e, this, 'E_JSON_PARSE');
- }
- throw e;
- }
+ }
+
+ return formHeaders;
+ };
+
+ FormData.prototype.setBoundary = function(boundary) {
+ 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 );
+ 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)] );
}
}
+ }
- return data;
- }],
+ // Add the footer and return the Buffer object.
+ return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
+ };
- /**
- * A timeout in milliseconds to abort a request. If set to 0 (default) a
- * timeout is not created.
- */
- timeout: 0,
+ FormData.prototype._generateBoundary = function() {
+ // This generates a 50 character boundary similar to those used by Firefox.
+ // They are optimized for boyer-moore parsing.
+ var boundary = '--------------------------';
+ for (var i = 0; i < 24; i++) {
+ boundary += Math.floor(Math.random() * 10).toString(16);
+ }
- xsrfCookieName: 'XSRF-TOKEN',
- xsrfHeaderName: 'X-XSRF-TOKEN',
+ this._boundary = boundary;
+ };
- maxContentLength: -1,
- maxBodyLength: -1,
+ // 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;
- validateStatus: function validateStatus(status) {
- return status >= 200 && status < 300;
- },
+ // 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
+ , options
+ , defaults = {method: 'post'}
+ ;
+
+ // parse provided url if it's string
+ // or treat it as options object
+ if (typeof params == 'string') {
+
+ params = parseUrl(params);
+ options = populate({
+ port: params.port,
+ path: params.pathname,
+ host: params.hostname,
+ protocol: params.protocol
+ }, defaults);
+
+ // use custom params
+ } else {
+
+ 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);
- headers: {
- common: {
- 'Accept': 'application/json, text/plain, */*'
+ // 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);
+ };
+
+ 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);
}
};
- utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
- defaults.headers[method] = {};
- });
+ FormData.prototype.toString = function () {
+ return '[object FormData]';
+ };
+ return form_data;
+}
- utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
- defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
- });
+var hasRequiredFormData;
- defaults_1 = defaults;
- return defaults_1;
+function requireFormData () {
+ if (hasRequiredFormData) return FormData$1.exports;
+ hasRequiredFormData = 1;
+ (function (module) {
+ // eslint-disable-next-line strict
+ module.exports = requireForm_data();
+} (FormData$1));
+ return FormData$1.exports;
}
-var utils$4 = utils$8;
-var defaults$2 = requireDefaults();
+var utils$5 = utils$9;
+var normalizeHeaderName = normalizeHeaderName$1;
+var AxiosError$1 = requireAxiosError();
+var transitionalDefaults = transitional;
+var toFormData = requireToFormData();
+
+var DEFAULT_CONTENT_TYPE = {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+};
+
+function setContentTypeIfUnset(headers, value) {
+ if (!utils$5.isUndefined(headers) && utils$5.isUndefined(headers['Content-Type'])) {
+ headers['Content-Type'] = value;
+ }
+}
+
+function getDefaultAdapter() {
+ var adapter;
+ if (typeof XMLHttpRequest !== 'undefined') {
+ // For browsers use XHR adapter
+ adapter = requireXhr();
+ } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
+ // For node use HTTP adapter
+ adapter = requireHttp();
+ }
+ return adapter;
+}
+
+function stringifySafely(rawValue, parser, encoder) {
+ if (utils$5.isString(rawValue)) {
+ try {
+ (parser || JSON.parse)(rawValue);
+ return utils$5.trim(rawValue);
+ } catch (e) {
+ if (e.name !== 'SyntaxError') {
+ throw e;
+ }
+ }
+ }
+
+ return (encoder || JSON.stringify)(rawValue);
+}
+
+var defaults$3 = {
+
+ transitional: transitionalDefaults,
+
+ adapter: getDefaultAdapter(),
+
+ transformRequest: [function transformRequest(data, headers) {
+ normalizeHeaderName(headers, 'Accept');
+ normalizeHeaderName(headers, 'Content-Type');
+
+ if (utils$5.isFormData(data) ||
+ utils$5.isArrayBuffer(data) ||
+ utils$5.isBuffer(data) ||
+ utils$5.isStream(data) ||
+ utils$5.isFile(data) ||
+ utils$5.isBlob(data)
+ ) {
+ return data;
+ }
+ if (utils$5.isArrayBufferView(data)) {
+ return data.buffer;
+ }
+ if (utils$5.isURLSearchParams(data)) {
+ setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
+ return data.toString();
+ }
+
+ var isObjectPayload = utils$5.isObject(data);
+ var contentType = headers && headers['Content-Type'];
+
+ var isFileList;
+
+ if ((isFileList = utils$5.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
+ var _FormData = this.env && this.env.FormData;
+ return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
+ } else if (isObjectPayload || contentType === 'application/json') {
+ setContentTypeIfUnset(headers, 'application/json');
+ return stringifySafely(data);
+ }
+
+ return data;
+ }],
+
+ transformResponse: [function transformResponse(data) {
+ var transitional = this.transitional || defaults$3.transitional;
+ var silentJSONParsing = transitional && transitional.silentJSONParsing;
+ var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
+ var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
+
+ if (strictJSONParsing || (forcedJSONParsing && utils$5.isString(data) && data.length)) {
+ 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: requireFormData()
+ },
+
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300;
+ },
+
+ headers: {
+ common: {
+ 'Accept': 'application/json, text/plain, */*'
+ }
+ }
+};
+
+utils$5.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
+ defaults$3.headers[method] = {};
+});
+
+utils$5.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+ defaults$3.headers[method] = utils$5.merge(DEFAULT_CONTENT_TYPE);
+});
+
+var defaults_1 = defaults$3;
+
+var utils$4 = utils$9;
+var defaults$2 = defaults_1;
/**
* Transform the data for a request or a response
@@ -37725,14 +50359,14 @@ function requireIsCancel () {
return isCancel$1;
}
-var utils$3 = utils$8;
+var utils$3 = utils$9;
var transformData = transformData$1;
var isCancel = requireIsCancel();
-var defaults$1 = requireDefaults();
-var Cancel = requireCancel();
+var defaults$1 = defaults_1;
+var CanceledError = requireCanceledError();
/**
- * Throws a `Cancel` if cancellation has been requested.
+ * Throws a `CanceledError` if cancellation has been requested.
*/
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
@@ -37740,7 +50374,7 @@ function throwIfCancellationRequested(config) {
}
if (config.signal && config.signal.aborted) {
- throw new Cancel('canceled');
+ throw new CanceledError();
}
}
@@ -37811,7 +50445,7 @@ var dispatchRequest$1 = function dispatchRequest(config) {
});
};
-var utils$2 = utils$8;
+var utils$2 = utils$9;
/**
* Config-specific merge-function which creates a new config-object
@@ -37891,6 +50525,7 @@ var mergeConfig$2 = function mergeConfig(config1, config2) {
'decompress': defaultToConfig2,
'maxContentLength': defaultToConfig2,
'maxBodyLength': defaultToConfig2,
+ 'beforeRedirect': defaultToConfig2,
'transport': defaultToConfig2,
'httpAgent': defaultToConfig2,
'httpsAgent': defaultToConfig2,
@@ -37910,6 +50545,7 @@ var mergeConfig$2 = function mergeConfig(config1, config2) {
};
var VERSION = requireData().version;
+var AxiosError = requireAxiosError();
var validators$1 = {};
@@ -37937,7 +50573,10 @@ validators$1.transitional = function transitional(validator, version, message) {
// eslint-disable-next-line func-names
return function(value, opt, opts) {
if (validator === false) {
- throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));
+ throw new AxiosError(
+ formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
+ AxiosError.ERR_DEPRECATED
+ );
}
if (version && !deprecatedWarnings[opt]) {
@@ -37964,7 +50603,7 @@ validators$1.transitional = function transitional(validator, version, message) {
function assertOptions(options, schema, allowUnknown) {
if (typeof options !== 'object') {
- throw new TypeError('options must be an object');
+ throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
}
var keys = Object.keys(options);
var i = keys.length;
@@ -37975,12 +50614,12 @@ function assertOptions(options, schema, allowUnknown) {
var value = options[opt];
var result = value === undefined || validator(value, opt, options);
if (result !== true) {
- throw new TypeError('option ' + opt + ' must be ' + result);
+ throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
}
continue;
}
if (allowUnknown !== true) {
- throw Error('Unknown option ' + opt);
+ throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
}
}
}
@@ -37990,11 +50629,12 @@ var validator$1 = {
validators: validators$1
};
-var utils$1 = utils$8;
+var utils$1 = utils$9;
var buildURL = buildURL$1;
var InterceptorManager = InterceptorManager_1;
var dispatchRequest = dispatchRequest$1;
var mergeConfig$1 = mergeConfig$2;
+var buildFullPath = buildFullPath$1;
var validator = validator$1;
var validators = validator.validators;
@@ -38026,10 +50666,6 @@ Axios$2.prototype.request = function request(configOrUrl, config) {
config = configOrUrl || {};
}
- if (!config.url) {
- throw new Error('Provided config url is not valid');
- }
-
config = mergeConfig$1(this.defaults, config);
// Set config.method
@@ -38112,11 +50748,9 @@ Axios$2.prototype.request = function request(configOrUrl, config) {
};
Axios$2.prototype.getUri = function getUri(config) {
- if (!config.url) {
- throw new Error('Provided config url is not valid');
- }
config = mergeConfig$1(this.defaults, config);
- return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
+ var fullPath = buildFullPath(config.baseURL, config.url);
+ return buildURL(fullPath, config.params, config.paramsSerializer);
};
// Provide aliases for supported request methods
@@ -38133,13 +50767,23 @@ utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoDa
utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
/*eslint func-names:0*/
- Axios$2.prototype[method] = function(url, data, config) {
- return this.request(mergeConfig$1(config || {}, {
- method: method,
- url: url,
- data: data
- }));
- };
+
+ function generateHTTPMethod(isForm) {
+ return function httpMethod(url, data, config) {
+ return this.request(mergeConfig$1(config || {}, {
+ method: method,
+ headers: isForm ? {
+ 'Content-Type': 'multipart/form-data'
+ } : {},
+ url: url,
+ data: data
+ }));
+ };
+ }
+
+ Axios$2.prototype[method] = generateHTTPMethod();
+
+ Axios$2.prototype[method + 'Form'] = generateHTTPMethod(true);
});
var Axios_1 = Axios$2;
@@ -38151,7 +50795,7 @@ function requireCancelToken () {
if (hasRequiredCancelToken) return CancelToken_1;
hasRequiredCancelToken = 1;
- var Cancel = requireCancel();
+ var CanceledError = requireCanceledError();
/**
* A `CancelToken` is an object that can be used to request cancellation of an operation.
@@ -38207,13 +50851,13 @@ function requireCancelToken () {
return;
}
- token.reason = new Cancel(message);
+ token.reason = new CanceledError(message);
resolvePromise(token.reason);
});
}
/**
- * Throws a `Cancel` if cancellation has been requested.
+ * Throws a `CanceledError` if cancellation has been requested.
*/
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
if (this.reason) {
@@ -38313,7 +50957,7 @@ function requireIsAxiosError () {
if (hasRequiredIsAxiosError) return isAxiosError;
hasRequiredIsAxiosError = 1;
- var utils = utils$8;
+ var utils = utils$9;
/**
* Determines whether the payload is an error thrown by Axios
@@ -38327,11 +50971,11 @@ function requireIsAxiosError () {
return isAxiosError;
}
-var utils = utils$8;
+var utils = utils$9;
var bind = bind$2;
var Axios$1 = Axios_1;
var mergeConfig = mergeConfig$2;
-var defaults = requireDefaults();
+var defaults = defaults_1;
/**
* Create an instance of Axios
@@ -38364,10 +51008,17 @@ var axios = createInstance(defaults);
axios.Axios = Axios$1;
// Expose Cancel & CancelToken
-axios.Cancel = requireCancel();
+axios.CanceledError = requireCanceledError();
axios.CancelToken = requireCancelToken();
axios.isCancel = requireIsCancel();
axios.VERSION = requireData().version;
+axios.toFormData = requireToFormData();
+
+// Expose AxiosError class
+axios.AxiosError = requireAxiosError();
+
+// alias for CanceledError for backward compatibility
+axios.Cancel = axios.CanceledError;
// Expose all/spread
axios.all = function all(promises) {