16207 lines
501 KiB
JavaScript
16207 lines
501 KiB
JavaScript
/*
|
||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||
if you want to view the source, please visit the github repository of this plugin
|
||
*/
|
||
|
||
var __create = Object.create;
|
||
var __defProp = Object.defineProperty;
|
||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||
var __getProtoOf = Object.getPrototypeOf;
|
||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||
var __esm = (fn, res) => function __init() {
|
||
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
||
};
|
||
var __commonJS = (cb, mod) => function __require() {
|
||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||
};
|
||
var __export = (target, all) => {
|
||
for (var name in all)
|
||
__defProp(target, name, { get: all[name], enumerable: true });
|
||
};
|
||
var __copyProps = (to, from, except, desc) => {
|
||
if (from && typeof from === "object" || typeof from === "function") {
|
||
for (let key of __getOwnPropNames(from))
|
||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||
}
|
||
return to;
|
||
};
|
||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||
// If the importer is in node compatibility mode or this is not an ESM
|
||
// file that has been converted to a CommonJS file using a Babel-
|
||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||
mod
|
||
));
|
||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||
var __accessCheck = (obj, member, msg) => {
|
||
if (!member.has(obj))
|
||
throw TypeError("Cannot " + msg);
|
||
};
|
||
var __privateGet = (obj, member, getter) => {
|
||
__accessCheck(obj, member, "read from private field");
|
||
return getter ? getter.call(obj) : member.get(obj);
|
||
};
|
||
var __privateAdd = (obj, member, value) => {
|
||
if (member.has(obj))
|
||
throw TypeError("Cannot add the same private member more than once");
|
||
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
||
};
|
||
var __privateSet = (obj, member, value, setter) => {
|
||
__accessCheck(obj, member, "write to private field");
|
||
setter ? setter.call(obj, value) : member.set(obj, value);
|
||
return value;
|
||
};
|
||
|
||
// node_modules/web-streams-polyfill/dist/ponyfill.es2018.js
|
||
var require_ponyfill_es2018 = __commonJS({
|
||
"node_modules/web-streams-polyfill/dist/ponyfill.es2018.js"(exports, module2) {
|
||
(function(global2, factory) {
|
||
typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.WebStreamsPolyfill = {}));
|
||
})(exports, function(exports2) {
|
||
"use strict";
|
||
function noop2() {
|
||
return void 0;
|
||
}
|
||
function typeIsObject(x2) {
|
||
return typeof x2 === "object" && x2 !== null || typeof x2 === "function";
|
||
}
|
||
const rethrowAssertionErrorRejection = noop2;
|
||
function setFunctionName(fn, name) {
|
||
try {
|
||
Object.defineProperty(fn, "name", {
|
||
value: name,
|
||
configurable: true
|
||
});
|
||
} catch (_a5) {
|
||
}
|
||
}
|
||
const originalPromise = Promise;
|
||
const originalPromiseThen = Promise.prototype.then;
|
||
const originalPromiseReject = Promise.reject.bind(originalPromise);
|
||
function newPromise(executor) {
|
||
return new originalPromise(executor);
|
||
}
|
||
function promiseResolvedWith(value) {
|
||
return newPromise((resolve) => resolve(value));
|
||
}
|
||
function promiseRejectedWith(reason) {
|
||
return originalPromiseReject(reason);
|
||
}
|
||
function PerformPromiseThen(promise, onFulfilled, onRejected) {
|
||
return originalPromiseThen.call(promise, onFulfilled, onRejected);
|
||
}
|
||
function uponPromise(promise, onFulfilled, onRejected) {
|
||
PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), void 0, rethrowAssertionErrorRejection);
|
||
}
|
||
function uponFulfillment(promise, onFulfilled) {
|
||
uponPromise(promise, onFulfilled);
|
||
}
|
||
function uponRejection(promise, onRejected) {
|
||
uponPromise(promise, void 0, onRejected);
|
||
}
|
||
function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {
|
||
return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);
|
||
}
|
||
function setPromiseIsHandledToTrue(promise) {
|
||
PerformPromiseThen(promise, void 0, rethrowAssertionErrorRejection);
|
||
}
|
||
let _queueMicrotask = (callback) => {
|
||
if (typeof queueMicrotask === "function") {
|
||
_queueMicrotask = queueMicrotask;
|
||
} else {
|
||
const resolvedPromise = promiseResolvedWith(void 0);
|
||
_queueMicrotask = (cb) => PerformPromiseThen(resolvedPromise, cb);
|
||
}
|
||
return _queueMicrotask(callback);
|
||
};
|
||
function reflectCall(F2, V, args) {
|
||
if (typeof F2 !== "function") {
|
||
throw new TypeError("Argument is not a function");
|
||
}
|
||
return Function.prototype.apply.call(F2, V, args);
|
||
}
|
||
function promiseCall(F2, V, args) {
|
||
try {
|
||
return promiseResolvedWith(reflectCall(F2, V, args));
|
||
} catch (value) {
|
||
return promiseRejectedWith(value);
|
||
}
|
||
}
|
||
const QUEUE_MAX_ARRAY_SIZE = 16384;
|
||
class SimpleQueue {
|
||
constructor() {
|
||
this._cursor = 0;
|
||
this._size = 0;
|
||
this._front = {
|
||
_elements: [],
|
||
_next: void 0
|
||
};
|
||
this._back = this._front;
|
||
this._cursor = 0;
|
||
this._size = 0;
|
||
}
|
||
get length() {
|
||
return this._size;
|
||
}
|
||
// For exception safety, this method is structured in order:
|
||
// 1. Read state
|
||
// 2. Calculate required state mutations
|
||
// 3. Perform state mutations
|
||
push(element) {
|
||
const oldBack = this._back;
|
||
let newBack = oldBack;
|
||
if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {
|
||
newBack = {
|
||
_elements: [],
|
||
_next: void 0
|
||
};
|
||
}
|
||
oldBack._elements.push(element);
|
||
if (newBack !== oldBack) {
|
||
this._back = newBack;
|
||
oldBack._next = newBack;
|
||
}
|
||
++this._size;
|
||
}
|
||
// Like push(), shift() follows the read -> calculate -> mutate pattern for
|
||
// exception safety.
|
||
shift() {
|
||
const oldFront = this._front;
|
||
let newFront = oldFront;
|
||
const oldCursor = this._cursor;
|
||
let newCursor = oldCursor + 1;
|
||
const elements = oldFront._elements;
|
||
const element = elements[oldCursor];
|
||
if (newCursor === QUEUE_MAX_ARRAY_SIZE) {
|
||
newFront = oldFront._next;
|
||
newCursor = 0;
|
||
}
|
||
--this._size;
|
||
this._cursor = newCursor;
|
||
if (oldFront !== newFront) {
|
||
this._front = newFront;
|
||
}
|
||
elements[oldCursor] = void 0;
|
||
return element;
|
||
}
|
||
// The tricky thing about forEach() is that it can be called
|
||
// re-entrantly. The queue may be mutated inside the callback. It is easy to
|
||
// see that push() within the callback has no negative effects since the end
|
||
// of the queue is checked for on every iteration. If shift() is called
|
||
// repeatedly within the callback then the next iteration may return an
|
||
// element that has been removed. In this case the callback will be called
|
||
// with undefined values until we either "catch up" with elements that still
|
||
// exist or reach the back of the queue.
|
||
forEach(callback) {
|
||
let i2 = this._cursor;
|
||
let node = this._front;
|
||
let elements = node._elements;
|
||
while (i2 !== elements.length || node._next !== void 0) {
|
||
if (i2 === elements.length) {
|
||
node = node._next;
|
||
elements = node._elements;
|
||
i2 = 0;
|
||
if (elements.length === 0) {
|
||
break;
|
||
}
|
||
}
|
||
callback(elements[i2]);
|
||
++i2;
|
||
}
|
||
}
|
||
// Return the element that would be returned if shift() was called now,
|
||
// without modifying the queue.
|
||
peek() {
|
||
const front = this._front;
|
||
const cursor = this._cursor;
|
||
return front._elements[cursor];
|
||
}
|
||
}
|
||
const AbortSteps = Symbol("[[AbortSteps]]");
|
||
const ErrorSteps = Symbol("[[ErrorSteps]]");
|
||
const CancelSteps = Symbol("[[CancelSteps]]");
|
||
const PullSteps = Symbol("[[PullSteps]]");
|
||
const ReleaseSteps = Symbol("[[ReleaseSteps]]");
|
||
function ReadableStreamReaderGenericInitialize(reader, stream) {
|
||
reader._ownerReadableStream = stream;
|
||
stream._reader = reader;
|
||
if (stream._state === "readable") {
|
||
defaultReaderClosedPromiseInitialize(reader);
|
||
} else if (stream._state === "closed") {
|
||
defaultReaderClosedPromiseInitializeAsResolved(reader);
|
||
} else {
|
||
defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
|
||
}
|
||
}
|
||
function ReadableStreamReaderGenericCancel(reader, reason) {
|
||
const stream = reader._ownerReadableStream;
|
||
return ReadableStreamCancel(stream, reason);
|
||
}
|
||
function ReadableStreamReaderGenericRelease(reader) {
|
||
const stream = reader._ownerReadableStream;
|
||
if (stream._state === "readable") {
|
||
defaultReaderClosedPromiseReject(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
|
||
} else {
|
||
defaultReaderClosedPromiseResetToRejected(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
|
||
}
|
||
stream._readableStreamController[ReleaseSteps]();
|
||
stream._reader = void 0;
|
||
reader._ownerReadableStream = void 0;
|
||
}
|
||
function readerLockException(name) {
|
||
return new TypeError("Cannot " + name + " a stream using a released reader");
|
||
}
|
||
function defaultReaderClosedPromiseInitialize(reader) {
|
||
reader._closedPromise = newPromise((resolve, reject) => {
|
||
reader._closedPromise_resolve = resolve;
|
||
reader._closedPromise_reject = reject;
|
||
});
|
||
}
|
||
function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
|
||
defaultReaderClosedPromiseInitialize(reader);
|
||
defaultReaderClosedPromiseReject(reader, reason);
|
||
}
|
||
function defaultReaderClosedPromiseInitializeAsResolved(reader) {
|
||
defaultReaderClosedPromiseInitialize(reader);
|
||
defaultReaderClosedPromiseResolve(reader);
|
||
}
|
||
function defaultReaderClosedPromiseReject(reader, reason) {
|
||
if (reader._closedPromise_reject === void 0) {
|
||
return;
|
||
}
|
||
setPromiseIsHandledToTrue(reader._closedPromise);
|
||
reader._closedPromise_reject(reason);
|
||
reader._closedPromise_resolve = void 0;
|
||
reader._closedPromise_reject = void 0;
|
||
}
|
||
function defaultReaderClosedPromiseResetToRejected(reader, reason) {
|
||
defaultReaderClosedPromiseInitializeAsRejected(reader, reason);
|
||
}
|
||
function defaultReaderClosedPromiseResolve(reader) {
|
||
if (reader._closedPromise_resolve === void 0) {
|
||
return;
|
||
}
|
||
reader._closedPromise_resolve(void 0);
|
||
reader._closedPromise_resolve = void 0;
|
||
reader._closedPromise_reject = void 0;
|
||
}
|
||
const NumberIsFinite = Number.isFinite || function(x2) {
|
||
return typeof x2 === "number" && isFinite(x2);
|
||
};
|
||
const MathTrunc = Math.trunc || function(v) {
|
||
return v < 0 ? Math.ceil(v) : Math.floor(v);
|
||
};
|
||
function isDictionary(x2) {
|
||
return typeof x2 === "object" || typeof x2 === "function";
|
||
}
|
||
function assertDictionary(obj, context) {
|
||
if (obj !== void 0 && !isDictionary(obj)) {
|
||
throw new TypeError(`${context} is not an object.`);
|
||
}
|
||
}
|
||
function assertFunction(x2, context) {
|
||
if (typeof x2 !== "function") {
|
||
throw new TypeError(`${context} is not a function.`);
|
||
}
|
||
}
|
||
function isObject(x2) {
|
||
return typeof x2 === "object" && x2 !== null || typeof x2 === "function";
|
||
}
|
||
function assertObject(x2, context) {
|
||
if (!isObject(x2)) {
|
||
throw new TypeError(`${context} is not an object.`);
|
||
}
|
||
}
|
||
function assertRequiredArgument(x2, position, context) {
|
||
if (x2 === void 0) {
|
||
throw new TypeError(`Parameter ${position} is required in '${context}'.`);
|
||
}
|
||
}
|
||
function assertRequiredField(x2, field, context) {
|
||
if (x2 === void 0) {
|
||
throw new TypeError(`${field} is required in '${context}'.`);
|
||
}
|
||
}
|
||
function convertUnrestrictedDouble(value) {
|
||
return Number(value);
|
||
}
|
||
function censorNegativeZero(x2) {
|
||
return x2 === 0 ? 0 : x2;
|
||
}
|
||
function integerPart(x2) {
|
||
return censorNegativeZero(MathTrunc(x2));
|
||
}
|
||
function convertUnsignedLongLongWithEnforceRange(value, context) {
|
||
const lowerBound = 0;
|
||
const upperBound = Number.MAX_SAFE_INTEGER;
|
||
let x2 = Number(value);
|
||
x2 = censorNegativeZero(x2);
|
||
if (!NumberIsFinite(x2)) {
|
||
throw new TypeError(`${context} is not a finite number`);
|
||
}
|
||
x2 = integerPart(x2);
|
||
if (x2 < lowerBound || x2 > upperBound) {
|
||
throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);
|
||
}
|
||
if (!NumberIsFinite(x2) || x2 === 0) {
|
||
return 0;
|
||
}
|
||
return x2;
|
||
}
|
||
function assertReadableStream(x2, context) {
|
||
if (!IsReadableStream(x2)) {
|
||
throw new TypeError(`${context} is not a ReadableStream.`);
|
||
}
|
||
}
|
||
function AcquireReadableStreamDefaultReader(stream) {
|
||
return new ReadableStreamDefaultReader(stream);
|
||
}
|
||
function ReadableStreamAddReadRequest(stream, readRequest) {
|
||
stream._reader._readRequests.push(readRequest);
|
||
}
|
||
function ReadableStreamFulfillReadRequest(stream, chunk, done) {
|
||
const reader = stream._reader;
|
||
const readRequest = reader._readRequests.shift();
|
||
if (done) {
|
||
readRequest._closeSteps();
|
||
} else {
|
||
readRequest._chunkSteps(chunk);
|
||
}
|
||
}
|
||
function ReadableStreamGetNumReadRequests(stream) {
|
||
return stream._reader._readRequests.length;
|
||
}
|
||
function ReadableStreamHasDefaultReader(stream) {
|
||
const reader = stream._reader;
|
||
if (reader === void 0) {
|
||
return false;
|
||
}
|
||
if (!IsReadableStreamDefaultReader(reader)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
class ReadableStreamDefaultReader {
|
||
constructor(stream) {
|
||
assertRequiredArgument(stream, 1, "ReadableStreamDefaultReader");
|
||
assertReadableStream(stream, "First parameter");
|
||
if (IsReadableStreamLocked(stream)) {
|
||
throw new TypeError("This stream has already been locked for exclusive reading by another reader");
|
||
}
|
||
ReadableStreamReaderGenericInitialize(this, stream);
|
||
this._readRequests = new SimpleQueue();
|
||
}
|
||
/**
|
||
* Returns a promise that will be fulfilled when the stream becomes closed,
|
||
* or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.
|
||
*/
|
||
get closed() {
|
||
if (!IsReadableStreamDefaultReader(this)) {
|
||
return promiseRejectedWith(defaultReaderBrandCheckException("closed"));
|
||
}
|
||
return this._closedPromise;
|
||
}
|
||
/**
|
||
* If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
|
||
*/
|
||
cancel(reason = void 0) {
|
||
if (!IsReadableStreamDefaultReader(this)) {
|
||
return promiseRejectedWith(defaultReaderBrandCheckException("cancel"));
|
||
}
|
||
if (this._ownerReadableStream === void 0) {
|
||
return promiseRejectedWith(readerLockException("cancel"));
|
||
}
|
||
return ReadableStreamReaderGenericCancel(this, reason);
|
||
}
|
||
/**
|
||
* Returns a promise that allows access to the next chunk from the stream's internal queue, if available.
|
||
*
|
||
* If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
|
||
*/
|
||
read() {
|
||
if (!IsReadableStreamDefaultReader(this)) {
|
||
return promiseRejectedWith(defaultReaderBrandCheckException("read"));
|
||
}
|
||
if (this._ownerReadableStream === void 0) {
|
||
return promiseRejectedWith(readerLockException("read from"));
|
||
}
|
||
let resolvePromise;
|
||
let rejectPromise;
|
||
const promise = newPromise((resolve, reject) => {
|
||
resolvePromise = resolve;
|
||
rejectPromise = reject;
|
||
});
|
||
const readRequest = {
|
||
_chunkSteps: (chunk) => resolvePromise({ value: chunk, done: false }),
|
||
_closeSteps: () => resolvePromise({ value: void 0, done: true }),
|
||
_errorSteps: (e2) => rejectPromise(e2)
|
||
};
|
||
ReadableStreamDefaultReaderRead(this, readRequest);
|
||
return promise;
|
||
}
|
||
/**
|
||
* Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
|
||
* If the associated stream is errored when the lock is released, the reader will appear errored in the same way
|
||
* from now on; otherwise, the reader will appear closed.
|
||
*
|
||
* A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
|
||
* the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to
|
||
* do so will throw a `TypeError` and leave the reader locked to the stream.
|
||
*/
|
||
releaseLock() {
|
||
if (!IsReadableStreamDefaultReader(this)) {
|
||
throw defaultReaderBrandCheckException("releaseLock");
|
||
}
|
||
if (this._ownerReadableStream === void 0) {
|
||
return;
|
||
}
|
||
ReadableStreamDefaultReaderRelease(this);
|
||
}
|
||
}
|
||
Object.defineProperties(ReadableStreamDefaultReader.prototype, {
|
||
cancel: { enumerable: true },
|
||
read: { enumerable: true },
|
||
releaseLock: { enumerable: true },
|
||
closed: { enumerable: true }
|
||
});
|
||
setFunctionName(ReadableStreamDefaultReader.prototype.cancel, "cancel");
|
||
setFunctionName(ReadableStreamDefaultReader.prototype.read, "read");
|
||
setFunctionName(ReadableStreamDefaultReader.prototype.releaseLock, "releaseLock");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {
|
||
value: "ReadableStreamDefaultReader",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsReadableStreamDefaultReader(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_readRequests")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ReadableStreamDefaultReader;
|
||
}
|
||
function ReadableStreamDefaultReaderRead(reader, readRequest) {
|
||
const stream = reader._ownerReadableStream;
|
||
stream._disturbed = true;
|
||
if (stream._state === "closed") {
|
||
readRequest._closeSteps();
|
||
} else if (stream._state === "errored") {
|
||
readRequest._errorSteps(stream._storedError);
|
||
} else {
|
||
stream._readableStreamController[PullSteps](readRequest);
|
||
}
|
||
}
|
||
function ReadableStreamDefaultReaderRelease(reader) {
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
const e2 = new TypeError("Reader was released");
|
||
ReadableStreamDefaultReaderErrorReadRequests(reader, e2);
|
||
}
|
||
function ReadableStreamDefaultReaderErrorReadRequests(reader, e2) {
|
||
const readRequests = reader._readRequests;
|
||
reader._readRequests = new SimpleQueue();
|
||
readRequests.forEach((readRequest) => {
|
||
readRequest._errorSteps(e2);
|
||
});
|
||
}
|
||
function defaultReaderBrandCheckException(name) {
|
||
return new TypeError(`ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);
|
||
}
|
||
const AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {
|
||
}).prototype);
|
||
class ReadableStreamAsyncIteratorImpl {
|
||
constructor(reader, preventCancel) {
|
||
this._ongoingPromise = void 0;
|
||
this._isFinished = false;
|
||
this._reader = reader;
|
||
this._preventCancel = preventCancel;
|
||
}
|
||
next() {
|
||
const nextSteps = () => this._nextSteps();
|
||
this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps();
|
||
return this._ongoingPromise;
|
||
}
|
||
return(value) {
|
||
const returnSteps = () => this._returnSteps(value);
|
||
return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps();
|
||
}
|
||
_nextSteps() {
|
||
if (this._isFinished) {
|
||
return Promise.resolve({ value: void 0, done: true });
|
||
}
|
||
const reader = this._reader;
|
||
let resolvePromise;
|
||
let rejectPromise;
|
||
const promise = newPromise((resolve, reject) => {
|
||
resolvePromise = resolve;
|
||
rejectPromise = reject;
|
||
});
|
||
const readRequest = {
|
||
_chunkSteps: (chunk) => {
|
||
this._ongoingPromise = void 0;
|
||
_queueMicrotask(() => resolvePromise({ value: chunk, done: false }));
|
||
},
|
||
_closeSteps: () => {
|
||
this._ongoingPromise = void 0;
|
||
this._isFinished = true;
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
resolvePromise({ value: void 0, done: true });
|
||
},
|
||
_errorSteps: (reason) => {
|
||
this._ongoingPromise = void 0;
|
||
this._isFinished = true;
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
rejectPromise(reason);
|
||
}
|
||
};
|
||
ReadableStreamDefaultReaderRead(reader, readRequest);
|
||
return promise;
|
||
}
|
||
_returnSteps(value) {
|
||
if (this._isFinished) {
|
||
return Promise.resolve({ value, done: true });
|
||
}
|
||
this._isFinished = true;
|
||
const reader = this._reader;
|
||
if (!this._preventCancel) {
|
||
const result = ReadableStreamReaderGenericCancel(reader, value);
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
return transformPromiseWith(result, () => ({ value, done: true }));
|
||
}
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
return promiseResolvedWith({ value, done: true });
|
||
}
|
||
}
|
||
const ReadableStreamAsyncIteratorPrototype = {
|
||
next() {
|
||
if (!IsReadableStreamAsyncIterator(this)) {
|
||
return promiseRejectedWith(streamAsyncIteratorBrandCheckException("next"));
|
||
}
|
||
return this._asyncIteratorImpl.next();
|
||
},
|
||
return(value) {
|
||
if (!IsReadableStreamAsyncIterator(this)) {
|
||
return promiseRejectedWith(streamAsyncIteratorBrandCheckException("return"));
|
||
}
|
||
return this._asyncIteratorImpl.return(value);
|
||
}
|
||
};
|
||
Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);
|
||
function AcquireReadableStreamAsyncIterator(stream, preventCancel) {
|
||
const reader = AcquireReadableStreamDefaultReader(stream);
|
||
const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);
|
||
const iterator = Object.create(ReadableStreamAsyncIteratorPrototype);
|
||
iterator._asyncIteratorImpl = impl;
|
||
return iterator;
|
||
}
|
||
function IsReadableStreamAsyncIterator(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_asyncIteratorImpl")) {
|
||
return false;
|
||
}
|
||
try {
|
||
return x2._asyncIteratorImpl instanceof ReadableStreamAsyncIteratorImpl;
|
||
} catch (_a5) {
|
||
return false;
|
||
}
|
||
}
|
||
function streamAsyncIteratorBrandCheckException(name) {
|
||
return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);
|
||
}
|
||
const NumberIsNaN = Number.isNaN || function(x2) {
|
||
return x2 !== x2;
|
||
};
|
||
var _a4, _b, _c;
|
||
function CreateArrayFromList(elements) {
|
||
return elements.slice();
|
||
}
|
||
function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {
|
||
new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
|
||
}
|
||
let TransferArrayBuffer = (O) => {
|
||
if (typeof O.transfer === "function") {
|
||
TransferArrayBuffer = (buffer) => buffer.transfer();
|
||
} else if (typeof structuredClone === "function") {
|
||
TransferArrayBuffer = (buffer) => structuredClone(buffer, { transfer: [buffer] });
|
||
} else {
|
||
TransferArrayBuffer = (buffer) => buffer;
|
||
}
|
||
return TransferArrayBuffer(O);
|
||
};
|
||
let IsDetachedBuffer = (O) => {
|
||
if (typeof O.detached === "boolean") {
|
||
IsDetachedBuffer = (buffer) => buffer.detached;
|
||
} else {
|
||
IsDetachedBuffer = (buffer) => buffer.byteLength === 0;
|
||
}
|
||
return IsDetachedBuffer(O);
|
||
};
|
||
function ArrayBufferSlice(buffer, begin, end) {
|
||
if (buffer.slice) {
|
||
return buffer.slice(begin, end);
|
||
}
|
||
const length = end - begin;
|
||
const slice = new ArrayBuffer(length);
|
||
CopyDataBlockBytes(slice, 0, buffer, begin, length);
|
||
return slice;
|
||
}
|
||
function GetMethod(receiver, prop) {
|
||
const func = receiver[prop];
|
||
if (func === void 0 || func === null) {
|
||
return void 0;
|
||
}
|
||
if (typeof func !== "function") {
|
||
throw new TypeError(`${String(prop)} is not a function`);
|
||
}
|
||
return func;
|
||
}
|
||
function CreateAsyncFromSyncIterator(syncIteratorRecord) {
|
||
const syncIterable = {
|
||
[Symbol.iterator]: () => syncIteratorRecord.iterator
|
||
};
|
||
const asyncIterator = async function* () {
|
||
return yield* syncIterable;
|
||
}();
|
||
const nextMethod = asyncIterator.next;
|
||
return { iterator: asyncIterator, nextMethod, done: false };
|
||
}
|
||
const SymbolAsyncIterator = (_c = (_a4 = Symbol.asyncIterator) !== null && _a4 !== void 0 ? _a4 : (_b = Symbol.for) === null || _b === void 0 ? void 0 : _b.call(Symbol, "Symbol.asyncIterator")) !== null && _c !== void 0 ? _c : "@@asyncIterator";
|
||
function GetIterator(obj, hint = "sync", method) {
|
||
if (method === void 0) {
|
||
if (hint === "async") {
|
||
method = GetMethod(obj, SymbolAsyncIterator);
|
||
if (method === void 0) {
|
||
const syncMethod = GetMethod(obj, Symbol.iterator);
|
||
const syncIteratorRecord = GetIterator(obj, "sync", syncMethod);
|
||
return CreateAsyncFromSyncIterator(syncIteratorRecord);
|
||
}
|
||
} else {
|
||
method = GetMethod(obj, Symbol.iterator);
|
||
}
|
||
}
|
||
if (method === void 0) {
|
||
throw new TypeError("The object is not iterable");
|
||
}
|
||
const iterator = reflectCall(method, obj, []);
|
||
if (!typeIsObject(iterator)) {
|
||
throw new TypeError("The iterator method must return an object");
|
||
}
|
||
const nextMethod = iterator.next;
|
||
return { iterator, nextMethod, done: false };
|
||
}
|
||
function IteratorNext(iteratorRecord) {
|
||
const result = reflectCall(iteratorRecord.nextMethod, iteratorRecord.iterator, []);
|
||
if (!typeIsObject(result)) {
|
||
throw new TypeError("The iterator.next() method must return an object");
|
||
}
|
||
return result;
|
||
}
|
||
function IteratorComplete(iterResult) {
|
||
return Boolean(iterResult.done);
|
||
}
|
||
function IteratorValue(iterResult) {
|
||
return iterResult.value;
|
||
}
|
||
function IsNonNegativeNumber(v) {
|
||
if (typeof v !== "number") {
|
||
return false;
|
||
}
|
||
if (NumberIsNaN(v)) {
|
||
return false;
|
||
}
|
||
if (v < 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function CloneAsUint8Array(O) {
|
||
const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);
|
||
return new Uint8Array(buffer);
|
||
}
|
||
function DequeueValue(container) {
|
||
const pair = container._queue.shift();
|
||
container._queueTotalSize -= pair.size;
|
||
if (container._queueTotalSize < 0) {
|
||
container._queueTotalSize = 0;
|
||
}
|
||
return pair.value;
|
||
}
|
||
function EnqueueValueWithSize(container, value, size) {
|
||
if (!IsNonNegativeNumber(size) || size === Infinity) {
|
||
throw new RangeError("Size must be a finite, non-NaN, non-negative number.");
|
||
}
|
||
container._queue.push({ value, size });
|
||
container._queueTotalSize += size;
|
||
}
|
||
function PeekQueueValue(container) {
|
||
const pair = container._queue.peek();
|
||
return pair.value;
|
||
}
|
||
function ResetQueue(container) {
|
||
container._queue = new SimpleQueue();
|
||
container._queueTotalSize = 0;
|
||
}
|
||
function isDataViewConstructor(ctor) {
|
||
return ctor === DataView;
|
||
}
|
||
function isDataView(view) {
|
||
return isDataViewConstructor(view.constructor);
|
||
}
|
||
function arrayBufferViewElementSize(ctor) {
|
||
if (isDataViewConstructor(ctor)) {
|
||
return 1;
|
||
}
|
||
return ctor.BYTES_PER_ELEMENT;
|
||
}
|
||
class ReadableStreamBYOBRequest {
|
||
constructor() {
|
||
throw new TypeError("Illegal constructor");
|
||
}
|
||
/**
|
||
* Returns the view for writing in to, or `null` if the BYOB request has already been responded to.
|
||
*/
|
||
get view() {
|
||
if (!IsReadableStreamBYOBRequest(this)) {
|
||
throw byobRequestBrandCheckException("view");
|
||
}
|
||
return this._view;
|
||
}
|
||
respond(bytesWritten) {
|
||
if (!IsReadableStreamBYOBRequest(this)) {
|
||
throw byobRequestBrandCheckException("respond");
|
||
}
|
||
assertRequiredArgument(bytesWritten, 1, "respond");
|
||
bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, "First parameter");
|
||
if (this._associatedReadableByteStreamController === void 0) {
|
||
throw new TypeError("This BYOB request has been invalidated");
|
||
}
|
||
if (IsDetachedBuffer(this._view.buffer)) {
|
||
throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);
|
||
}
|
||
ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
|
||
}
|
||
respondWithNewView(view) {
|
||
if (!IsReadableStreamBYOBRequest(this)) {
|
||
throw byobRequestBrandCheckException("respondWithNewView");
|
||
}
|
||
assertRequiredArgument(view, 1, "respondWithNewView");
|
||
if (!ArrayBuffer.isView(view)) {
|
||
throw new TypeError("You can only respond with array buffer views");
|
||
}
|
||
if (this._associatedReadableByteStreamController === void 0) {
|
||
throw new TypeError("This BYOB request has been invalidated");
|
||
}
|
||
if (IsDetachedBuffer(view.buffer)) {
|
||
throw new TypeError("The given view's buffer has been detached and so cannot be used as a response");
|
||
}
|
||
ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
|
||
}
|
||
}
|
||
Object.defineProperties(ReadableStreamBYOBRequest.prototype, {
|
||
respond: { enumerable: true },
|
||
respondWithNewView: { enumerable: true },
|
||
view: { enumerable: true }
|
||
});
|
||
setFunctionName(ReadableStreamBYOBRequest.prototype.respond, "respond");
|
||
setFunctionName(ReadableStreamBYOBRequest.prototype.respondWithNewView, "respondWithNewView");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {
|
||
value: "ReadableStreamBYOBRequest",
|
||
configurable: true
|
||
});
|
||
}
|
||
class ReadableByteStreamController {
|
||
constructor() {
|
||
throw new TypeError("Illegal constructor");
|
||
}
|
||
/**
|
||
* Returns the current BYOB pull request, or `null` if there isn't one.
|
||
*/
|
||
get byobRequest() {
|
||
if (!IsReadableByteStreamController(this)) {
|
||
throw byteStreamControllerBrandCheckException("byobRequest");
|
||
}
|
||
return ReadableByteStreamControllerGetBYOBRequest(this);
|
||
}
|
||
/**
|
||
* Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
|
||
* over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.
|
||
*/
|
||
get desiredSize() {
|
||
if (!IsReadableByteStreamController(this)) {
|
||
throw byteStreamControllerBrandCheckException("desiredSize");
|
||
}
|
||
return ReadableByteStreamControllerGetDesiredSize(this);
|
||
}
|
||
/**
|
||
* Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
|
||
* the stream, but once those are read, the stream will become closed.
|
||
*/
|
||
close() {
|
||
if (!IsReadableByteStreamController(this)) {
|
||
throw byteStreamControllerBrandCheckException("close");
|
||
}
|
||
if (this._closeRequested) {
|
||
throw new TypeError("The stream has already been closed; do not close it again!");
|
||
}
|
||
const state = this._controlledReadableByteStream._state;
|
||
if (state !== "readable") {
|
||
throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);
|
||
}
|
||
ReadableByteStreamControllerClose(this);
|
||
}
|
||
enqueue(chunk) {
|
||
if (!IsReadableByteStreamController(this)) {
|
||
throw byteStreamControllerBrandCheckException("enqueue");
|
||
}
|
||
assertRequiredArgument(chunk, 1, "enqueue");
|
||
if (!ArrayBuffer.isView(chunk)) {
|
||
throw new TypeError("chunk must be an array buffer view");
|
||
}
|
||
if (chunk.byteLength === 0) {
|
||
throw new TypeError("chunk must have non-zero byteLength");
|
||
}
|
||
if (chunk.buffer.byteLength === 0) {
|
||
throw new TypeError(`chunk's buffer must have non-zero byteLength`);
|
||
}
|
||
if (this._closeRequested) {
|
||
throw new TypeError("stream is closed or draining");
|
||
}
|
||
const state = this._controlledReadableByteStream._state;
|
||
if (state !== "readable") {
|
||
throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);
|
||
}
|
||
ReadableByteStreamControllerEnqueue(this, chunk);
|
||
}
|
||
/**
|
||
* Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
|
||
*/
|
||
error(e2 = void 0) {
|
||
if (!IsReadableByteStreamController(this)) {
|
||
throw byteStreamControllerBrandCheckException("error");
|
||
}
|
||
ReadableByteStreamControllerError(this, e2);
|
||
}
|
||
/** @internal */
|
||
[CancelSteps](reason) {
|
||
ReadableByteStreamControllerClearPendingPullIntos(this);
|
||
ResetQueue(this);
|
||
const result = this._cancelAlgorithm(reason);
|
||
ReadableByteStreamControllerClearAlgorithms(this);
|
||
return result;
|
||
}
|
||
/** @internal */
|
||
[PullSteps](readRequest) {
|
||
const stream = this._controlledReadableByteStream;
|
||
if (this._queueTotalSize > 0) {
|
||
ReadableByteStreamControllerFillReadRequestFromQueue(this, readRequest);
|
||
return;
|
||
}
|
||
const autoAllocateChunkSize = this._autoAllocateChunkSize;
|
||
if (autoAllocateChunkSize !== void 0) {
|
||
let buffer;
|
||
try {
|
||
buffer = new ArrayBuffer(autoAllocateChunkSize);
|
||
} catch (bufferE) {
|
||
readRequest._errorSteps(bufferE);
|
||
return;
|
||
}
|
||
const pullIntoDescriptor = {
|
||
buffer,
|
||
bufferByteLength: autoAllocateChunkSize,
|
||
byteOffset: 0,
|
||
byteLength: autoAllocateChunkSize,
|
||
bytesFilled: 0,
|
||
minimumFill: 1,
|
||
elementSize: 1,
|
||
viewConstructor: Uint8Array,
|
||
readerType: "default"
|
||
};
|
||
this._pendingPullIntos.push(pullIntoDescriptor);
|
||
}
|
||
ReadableStreamAddReadRequest(stream, readRequest);
|
||
ReadableByteStreamControllerCallPullIfNeeded(this);
|
||
}
|
||
/** @internal */
|
||
[ReleaseSteps]() {
|
||
if (this._pendingPullIntos.length > 0) {
|
||
const firstPullInto = this._pendingPullIntos.peek();
|
||
firstPullInto.readerType = "none";
|
||
this._pendingPullIntos = new SimpleQueue();
|
||
this._pendingPullIntos.push(firstPullInto);
|
||
}
|
||
}
|
||
}
|
||
Object.defineProperties(ReadableByteStreamController.prototype, {
|
||
close: { enumerable: true },
|
||
enqueue: { enumerable: true },
|
||
error: { enumerable: true },
|
||
byobRequest: { enumerable: true },
|
||
desiredSize: { enumerable: true }
|
||
});
|
||
setFunctionName(ReadableByteStreamController.prototype.close, "close");
|
||
setFunctionName(ReadableByteStreamController.prototype.enqueue, "enqueue");
|
||
setFunctionName(ReadableByteStreamController.prototype.error, "error");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {
|
||
value: "ReadableByteStreamController",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsReadableByteStreamController(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_controlledReadableByteStream")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ReadableByteStreamController;
|
||
}
|
||
function IsReadableStreamBYOBRequest(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_associatedReadableByteStreamController")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ReadableStreamBYOBRequest;
|
||
}
|
||
function ReadableByteStreamControllerCallPullIfNeeded(controller) {
|
||
const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
|
||
if (!shouldPull) {
|
||
return;
|
||
}
|
||
if (controller._pulling) {
|
||
controller._pullAgain = true;
|
||
return;
|
||
}
|
||
controller._pulling = true;
|
||
const pullPromise = controller._pullAlgorithm();
|
||
uponPromise(pullPromise, () => {
|
||
controller._pulling = false;
|
||
if (controller._pullAgain) {
|
||
controller._pullAgain = false;
|
||
ReadableByteStreamControllerCallPullIfNeeded(controller);
|
||
}
|
||
return null;
|
||
}, (e2) => {
|
||
ReadableByteStreamControllerError(controller, e2);
|
||
return null;
|
||
});
|
||
}
|
||
function ReadableByteStreamControllerClearPendingPullIntos(controller) {
|
||
ReadableByteStreamControllerInvalidateBYOBRequest(controller);
|
||
controller._pendingPullIntos = new SimpleQueue();
|
||
}
|
||
function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
|
||
let done = false;
|
||
if (stream._state === "closed") {
|
||
done = true;
|
||
}
|
||
const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
|
||
if (pullIntoDescriptor.readerType === "default") {
|
||
ReadableStreamFulfillReadRequest(stream, filledView, done);
|
||
} else {
|
||
ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
|
||
}
|
||
}
|
||
function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
|
||
const bytesFilled = pullIntoDescriptor.bytesFilled;
|
||
const elementSize = pullIntoDescriptor.elementSize;
|
||
return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
|
||
}
|
||
function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
|
||
controller._queue.push({ buffer, byteOffset, byteLength });
|
||
controller._queueTotalSize += byteLength;
|
||
}
|
||
function ReadableByteStreamControllerEnqueueClonedChunkToQueue(controller, buffer, byteOffset, byteLength) {
|
||
let clonedChunk;
|
||
try {
|
||
clonedChunk = ArrayBufferSlice(buffer, byteOffset, byteOffset + byteLength);
|
||
} catch (cloneE) {
|
||
ReadableByteStreamControllerError(controller, cloneE);
|
||
throw cloneE;
|
||
}
|
||
ReadableByteStreamControllerEnqueueChunkToQueue(controller, clonedChunk, 0, byteLength);
|
||
}
|
||
function ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, firstDescriptor) {
|
||
if (firstDescriptor.bytesFilled > 0) {
|
||
ReadableByteStreamControllerEnqueueClonedChunkToQueue(controller, firstDescriptor.buffer, firstDescriptor.byteOffset, firstDescriptor.bytesFilled);
|
||
}
|
||
ReadableByteStreamControllerShiftPendingPullInto(controller);
|
||
}
|
||
function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
|
||
const maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
|
||
const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
|
||
let totalBytesToCopyRemaining = maxBytesToCopy;
|
||
let ready = false;
|
||
const remainderBytes = maxBytesFilled % pullIntoDescriptor.elementSize;
|
||
const maxAlignedBytes = maxBytesFilled - remainderBytes;
|
||
if (maxAlignedBytes >= pullIntoDescriptor.minimumFill) {
|
||
totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
|
||
ready = true;
|
||
}
|
||
const queue = controller._queue;
|
||
while (totalBytesToCopyRemaining > 0) {
|
||
const headOfQueue = queue.peek();
|
||
const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
|
||
const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
|
||
CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
|
||
if (headOfQueue.byteLength === bytesToCopy) {
|
||
queue.shift();
|
||
} else {
|
||
headOfQueue.byteOffset += bytesToCopy;
|
||
headOfQueue.byteLength -= bytesToCopy;
|
||
}
|
||
controller._queueTotalSize -= bytesToCopy;
|
||
ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
|
||
totalBytesToCopyRemaining -= bytesToCopy;
|
||
}
|
||
return ready;
|
||
}
|
||
function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
|
||
pullIntoDescriptor.bytesFilled += size;
|
||
}
|
||
function ReadableByteStreamControllerHandleQueueDrain(controller) {
|
||
if (controller._queueTotalSize === 0 && controller._closeRequested) {
|
||
ReadableByteStreamControllerClearAlgorithms(controller);
|
||
ReadableStreamClose(controller._controlledReadableByteStream);
|
||
} else {
|
||
ReadableByteStreamControllerCallPullIfNeeded(controller);
|
||
}
|
||
}
|
||
function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
|
||
if (controller._byobRequest === null) {
|
||
return;
|
||
}
|
||
controller._byobRequest._associatedReadableByteStreamController = void 0;
|
||
controller._byobRequest._view = null;
|
||
controller._byobRequest = null;
|
||
}
|
||
function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
|
||
while (controller._pendingPullIntos.length > 0) {
|
||
if (controller._queueTotalSize === 0) {
|
||
return;
|
||
}
|
||
const pullIntoDescriptor = controller._pendingPullIntos.peek();
|
||
if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
|
||
ReadableByteStreamControllerShiftPendingPullInto(controller);
|
||
ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
|
||
}
|
||
}
|
||
}
|
||
function ReadableByteStreamControllerProcessReadRequestsUsingQueue(controller) {
|
||
const reader = controller._controlledReadableByteStream._reader;
|
||
while (reader._readRequests.length > 0) {
|
||
if (controller._queueTotalSize === 0) {
|
||
return;
|
||
}
|
||
const readRequest = reader._readRequests.shift();
|
||
ReadableByteStreamControllerFillReadRequestFromQueue(controller, readRequest);
|
||
}
|
||
}
|
||
function ReadableByteStreamControllerPullInto(controller, view, min, readIntoRequest) {
|
||
const stream = controller._controlledReadableByteStream;
|
||
const ctor = view.constructor;
|
||
const elementSize = arrayBufferViewElementSize(ctor);
|
||
const { byteOffset, byteLength } = view;
|
||
const minimumFill = min * elementSize;
|
||
let buffer;
|
||
try {
|
||
buffer = TransferArrayBuffer(view.buffer);
|
||
} catch (e2) {
|
||
readIntoRequest._errorSteps(e2);
|
||
return;
|
||
}
|
||
const pullIntoDescriptor = {
|
||
buffer,
|
||
bufferByteLength: buffer.byteLength,
|
||
byteOffset,
|
||
byteLength,
|
||
bytesFilled: 0,
|
||
minimumFill,
|
||
elementSize,
|
||
viewConstructor: ctor,
|
||
readerType: "byob"
|
||
};
|
||
if (controller._pendingPullIntos.length > 0) {
|
||
controller._pendingPullIntos.push(pullIntoDescriptor);
|
||
ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
|
||
return;
|
||
}
|
||
if (stream._state === "closed") {
|
||
const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
|
||
readIntoRequest._closeSteps(emptyView);
|
||
return;
|
||
}
|
||
if (controller._queueTotalSize > 0) {
|
||
if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
|
||
const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
|
||
ReadableByteStreamControllerHandleQueueDrain(controller);
|
||
readIntoRequest._chunkSteps(filledView);
|
||
return;
|
||
}
|
||
if (controller._closeRequested) {
|
||
const e2 = new TypeError("Insufficient bytes to fill elements in the given buffer");
|
||
ReadableByteStreamControllerError(controller, e2);
|
||
readIntoRequest._errorSteps(e2);
|
||
return;
|
||
}
|
||
}
|
||
controller._pendingPullIntos.push(pullIntoDescriptor);
|
||
ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
|
||
ReadableByteStreamControllerCallPullIfNeeded(controller);
|
||
}
|
||
function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
|
||
if (firstDescriptor.readerType === "none") {
|
||
ReadableByteStreamControllerShiftPendingPullInto(controller);
|
||
}
|
||
const stream = controller._controlledReadableByteStream;
|
||
if (ReadableStreamHasBYOBReader(stream)) {
|
||
while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
|
||
const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
|
||
ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
|
||
}
|
||
}
|
||
}
|
||
function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
|
||
ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
|
||
if (pullIntoDescriptor.readerType === "none") {
|
||
ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, pullIntoDescriptor);
|
||
ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
|
||
return;
|
||
}
|
||
if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill) {
|
||
return;
|
||
}
|
||
ReadableByteStreamControllerShiftPendingPullInto(controller);
|
||
const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
|
||
if (remainderSize > 0) {
|
||
const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
|
||
ReadableByteStreamControllerEnqueueClonedChunkToQueue(controller, pullIntoDescriptor.buffer, end - remainderSize, remainderSize);
|
||
}
|
||
pullIntoDescriptor.bytesFilled -= remainderSize;
|
||
ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
|
||
ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
|
||
}
|
||
function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
|
||
const firstDescriptor = controller._pendingPullIntos.peek();
|
||
ReadableByteStreamControllerInvalidateBYOBRequest(controller);
|
||
const state = controller._controlledReadableByteStream._state;
|
||
if (state === "closed") {
|
||
ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);
|
||
} else {
|
||
ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
|
||
}
|
||
ReadableByteStreamControllerCallPullIfNeeded(controller);
|
||
}
|
||
function ReadableByteStreamControllerShiftPendingPullInto(controller) {
|
||
const descriptor = controller._pendingPullIntos.shift();
|
||
return descriptor;
|
||
}
|
||
function ReadableByteStreamControllerShouldCallPull(controller) {
|
||
const stream = controller._controlledReadableByteStream;
|
||
if (stream._state !== "readable") {
|
||
return false;
|
||
}
|
||
if (controller._closeRequested) {
|
||
return false;
|
||
}
|
||
if (!controller._started) {
|
||
return false;
|
||
}
|
||
if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
|
||
return true;
|
||
}
|
||
if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
|
||
return true;
|
||
}
|
||
const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);
|
||
if (desiredSize > 0) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function ReadableByteStreamControllerClearAlgorithms(controller) {
|
||
controller._pullAlgorithm = void 0;
|
||
controller._cancelAlgorithm = void 0;
|
||
}
|
||
function ReadableByteStreamControllerClose(controller) {
|
||
const stream = controller._controlledReadableByteStream;
|
||
if (controller._closeRequested || stream._state !== "readable") {
|
||
return;
|
||
}
|
||
if (controller._queueTotalSize > 0) {
|
||
controller._closeRequested = true;
|
||
return;
|
||
}
|
||
if (controller._pendingPullIntos.length > 0) {
|
||
const firstPendingPullInto = controller._pendingPullIntos.peek();
|
||
if (firstPendingPullInto.bytesFilled % firstPendingPullInto.elementSize !== 0) {
|
||
const e2 = new TypeError("Insufficient bytes to fill elements in the given buffer");
|
||
ReadableByteStreamControllerError(controller, e2);
|
||
throw e2;
|
||
}
|
||
}
|
||
ReadableByteStreamControllerClearAlgorithms(controller);
|
||
ReadableStreamClose(stream);
|
||
}
|
||
function ReadableByteStreamControllerEnqueue(controller, chunk) {
|
||
const stream = controller._controlledReadableByteStream;
|
||
if (controller._closeRequested || stream._state !== "readable") {
|
||
return;
|
||
}
|
||
const { buffer, byteOffset, byteLength } = chunk;
|
||
if (IsDetachedBuffer(buffer)) {
|
||
throw new TypeError("chunk's buffer is detached and so cannot be enqueued");
|
||
}
|
||
const transferredBuffer = TransferArrayBuffer(buffer);
|
||
if (controller._pendingPullIntos.length > 0) {
|
||
const firstPendingPullInto = controller._pendingPullIntos.peek();
|
||
if (IsDetachedBuffer(firstPendingPullInto.buffer)) {
|
||
throw new TypeError("The BYOB request's buffer has been detached and so cannot be filled with an enqueued chunk");
|
||
}
|
||
ReadableByteStreamControllerInvalidateBYOBRequest(controller);
|
||
firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);
|
||
if (firstPendingPullInto.readerType === "none") {
|
||
ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, firstPendingPullInto);
|
||
}
|
||
}
|
||
if (ReadableStreamHasDefaultReader(stream)) {
|
||
ReadableByteStreamControllerProcessReadRequestsUsingQueue(controller);
|
||
if (ReadableStreamGetNumReadRequests(stream) === 0) {
|
||
ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
|
||
} else {
|
||
if (controller._pendingPullIntos.length > 0) {
|
||
ReadableByteStreamControllerShiftPendingPullInto(controller);
|
||
}
|
||
const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
|
||
ReadableStreamFulfillReadRequest(stream, transferredView, false);
|
||
}
|
||
} else if (ReadableStreamHasBYOBReader(stream)) {
|
||
ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
|
||
ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
|
||
} else {
|
||
ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
|
||
}
|
||
ReadableByteStreamControllerCallPullIfNeeded(controller);
|
||
}
|
||
function ReadableByteStreamControllerError(controller, e2) {
|
||
const stream = controller._controlledReadableByteStream;
|
||
if (stream._state !== "readable") {
|
||
return;
|
||
}
|
||
ReadableByteStreamControllerClearPendingPullIntos(controller);
|
||
ResetQueue(controller);
|
||
ReadableByteStreamControllerClearAlgorithms(controller);
|
||
ReadableStreamError(stream, e2);
|
||
}
|
||
function ReadableByteStreamControllerFillReadRequestFromQueue(controller, readRequest) {
|
||
const entry = controller._queue.shift();
|
||
controller._queueTotalSize -= entry.byteLength;
|
||
ReadableByteStreamControllerHandleQueueDrain(controller);
|
||
const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
|
||
readRequest._chunkSteps(view);
|
||
}
|
||
function ReadableByteStreamControllerGetBYOBRequest(controller) {
|
||
if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {
|
||
const firstDescriptor = controller._pendingPullIntos.peek();
|
||
const view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
|
||
const byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);
|
||
SetUpReadableStreamBYOBRequest(byobRequest, controller, view);
|
||
controller._byobRequest = byobRequest;
|
||
}
|
||
return controller._byobRequest;
|
||
}
|
||
function ReadableByteStreamControllerGetDesiredSize(controller) {
|
||
const state = controller._controlledReadableByteStream._state;
|
||
if (state === "errored") {
|
||
return null;
|
||
}
|
||
if (state === "closed") {
|
||
return 0;
|
||
}
|
||
return controller._strategyHWM - controller._queueTotalSize;
|
||
}
|
||
function ReadableByteStreamControllerRespond(controller, bytesWritten) {
|
||
const firstDescriptor = controller._pendingPullIntos.peek();
|
||
const state = controller._controlledReadableByteStream._state;
|
||
if (state === "closed") {
|
||
if (bytesWritten !== 0) {
|
||
throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream");
|
||
}
|
||
} else {
|
||
if (bytesWritten === 0) {
|
||
throw new TypeError("bytesWritten must be greater than 0 when calling respond() on a readable stream");
|
||
}
|
||
if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {
|
||
throw new RangeError("bytesWritten out of range");
|
||
}
|
||
}
|
||
firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);
|
||
ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
|
||
}
|
||
function ReadableByteStreamControllerRespondWithNewView(controller, view) {
|
||
const firstDescriptor = controller._pendingPullIntos.peek();
|
||
const state = controller._controlledReadableByteStream._state;
|
||
if (state === "closed") {
|
||
if (view.byteLength !== 0) {
|
||
throw new TypeError("The view's length must be 0 when calling respondWithNewView() on a closed stream");
|
||
}
|
||
} else {
|
||
if (view.byteLength === 0) {
|
||
throw new TypeError("The view's length must be greater than 0 when calling respondWithNewView() on a readable stream");
|
||
}
|
||
}
|
||
if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
|
||
throw new RangeError("The region specified by view does not match byobRequest");
|
||
}
|
||
if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {
|
||
throw new RangeError("The buffer of view has different capacity than byobRequest");
|
||
}
|
||
if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {
|
||
throw new RangeError("The region specified by view is larger than byobRequest");
|
||
}
|
||
const viewByteLength = view.byteLength;
|
||
firstDescriptor.buffer = TransferArrayBuffer(view.buffer);
|
||
ReadableByteStreamControllerRespondInternal(controller, viewByteLength);
|
||
}
|
||
function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {
|
||
controller._controlledReadableByteStream = stream;
|
||
controller._pullAgain = false;
|
||
controller._pulling = false;
|
||
controller._byobRequest = null;
|
||
controller._queue = controller._queueTotalSize = void 0;
|
||
ResetQueue(controller);
|
||
controller._closeRequested = false;
|
||
controller._started = false;
|
||
controller._strategyHWM = highWaterMark;
|
||
controller._pullAlgorithm = pullAlgorithm;
|
||
controller._cancelAlgorithm = cancelAlgorithm;
|
||
controller._autoAllocateChunkSize = autoAllocateChunkSize;
|
||
controller._pendingPullIntos = new SimpleQueue();
|
||
stream._readableStreamController = controller;
|
||
const startResult = startAlgorithm();
|
||
uponPromise(promiseResolvedWith(startResult), () => {
|
||
controller._started = true;
|
||
ReadableByteStreamControllerCallPullIfNeeded(controller);
|
||
return null;
|
||
}, (r2) => {
|
||
ReadableByteStreamControllerError(controller, r2);
|
||
return null;
|
||
});
|
||
}
|
||
function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {
|
||
const controller = Object.create(ReadableByteStreamController.prototype);
|
||
let startAlgorithm;
|
||
let pullAlgorithm;
|
||
let cancelAlgorithm;
|
||
if (underlyingByteSource.start !== void 0) {
|
||
startAlgorithm = () => underlyingByteSource.start(controller);
|
||
} else {
|
||
startAlgorithm = () => void 0;
|
||
}
|
||
if (underlyingByteSource.pull !== void 0) {
|
||
pullAlgorithm = () => underlyingByteSource.pull(controller);
|
||
} else {
|
||
pullAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
if (underlyingByteSource.cancel !== void 0) {
|
||
cancelAlgorithm = (reason) => underlyingByteSource.cancel(reason);
|
||
} else {
|
||
cancelAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
|
||
if (autoAllocateChunkSize === 0) {
|
||
throw new TypeError("autoAllocateChunkSize must be greater than 0");
|
||
}
|
||
SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);
|
||
}
|
||
function SetUpReadableStreamBYOBRequest(request, controller, view) {
|
||
request._associatedReadableByteStreamController = controller;
|
||
request._view = view;
|
||
}
|
||
function byobRequestBrandCheckException(name) {
|
||
return new TypeError(`ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);
|
||
}
|
||
function byteStreamControllerBrandCheckException(name) {
|
||
return new TypeError(`ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);
|
||
}
|
||
function convertReaderOptions(options, context) {
|
||
assertDictionary(options, context);
|
||
const mode = options === null || options === void 0 ? void 0 : options.mode;
|
||
return {
|
||
mode: mode === void 0 ? void 0 : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)
|
||
};
|
||
}
|
||
function convertReadableStreamReaderMode(mode, context) {
|
||
mode = `${mode}`;
|
||
if (mode !== "byob") {
|
||
throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);
|
||
}
|
||
return mode;
|
||
}
|
||
function convertByobReadOptions(options, context) {
|
||
var _a5;
|
||
assertDictionary(options, context);
|
||
const min = (_a5 = options === null || options === void 0 ? void 0 : options.min) !== null && _a5 !== void 0 ? _a5 : 1;
|
||
return {
|
||
min: convertUnsignedLongLongWithEnforceRange(min, `${context} has member 'min' that`)
|
||
};
|
||
}
|
||
function AcquireReadableStreamBYOBReader(stream) {
|
||
return new ReadableStreamBYOBReader(stream);
|
||
}
|
||
function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {
|
||
stream._reader._readIntoRequests.push(readIntoRequest);
|
||
}
|
||
function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
|
||
const reader = stream._reader;
|
||
const readIntoRequest = reader._readIntoRequests.shift();
|
||
if (done) {
|
||
readIntoRequest._closeSteps(chunk);
|
||
} else {
|
||
readIntoRequest._chunkSteps(chunk);
|
||
}
|
||
}
|
||
function ReadableStreamGetNumReadIntoRequests(stream) {
|
||
return stream._reader._readIntoRequests.length;
|
||
}
|
||
function ReadableStreamHasBYOBReader(stream) {
|
||
const reader = stream._reader;
|
||
if (reader === void 0) {
|
||
return false;
|
||
}
|
||
if (!IsReadableStreamBYOBReader(reader)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
class ReadableStreamBYOBReader {
|
||
constructor(stream) {
|
||
assertRequiredArgument(stream, 1, "ReadableStreamBYOBReader");
|
||
assertReadableStream(stream, "First parameter");
|
||
if (IsReadableStreamLocked(stream)) {
|
||
throw new TypeError("This stream has already been locked for exclusive reading by another reader");
|
||
}
|
||
if (!IsReadableByteStreamController(stream._readableStreamController)) {
|
||
throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");
|
||
}
|
||
ReadableStreamReaderGenericInitialize(this, stream);
|
||
this._readIntoRequests = new SimpleQueue();
|
||
}
|
||
/**
|
||
* Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
|
||
* the reader's lock is released before the stream finishes closing.
|
||
*/
|
||
get closed() {
|
||
if (!IsReadableStreamBYOBReader(this)) {
|
||
return promiseRejectedWith(byobReaderBrandCheckException("closed"));
|
||
}
|
||
return this._closedPromise;
|
||
}
|
||
/**
|
||
* If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
|
||
*/
|
||
cancel(reason = void 0) {
|
||
if (!IsReadableStreamBYOBReader(this)) {
|
||
return promiseRejectedWith(byobReaderBrandCheckException("cancel"));
|
||
}
|
||
if (this._ownerReadableStream === void 0) {
|
||
return promiseRejectedWith(readerLockException("cancel"));
|
||
}
|
||
return ReadableStreamReaderGenericCancel(this, reason);
|
||
}
|
||
read(view, rawOptions = {}) {
|
||
if (!IsReadableStreamBYOBReader(this)) {
|
||
return promiseRejectedWith(byobReaderBrandCheckException("read"));
|
||
}
|
||
if (!ArrayBuffer.isView(view)) {
|
||
return promiseRejectedWith(new TypeError("view must be an array buffer view"));
|
||
}
|
||
if (view.byteLength === 0) {
|
||
return promiseRejectedWith(new TypeError("view must have non-zero byteLength"));
|
||
}
|
||
if (view.buffer.byteLength === 0) {
|
||
return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));
|
||
}
|
||
if (IsDetachedBuffer(view.buffer)) {
|
||
return promiseRejectedWith(new TypeError("view's buffer has been detached"));
|
||
}
|
||
let options;
|
||
try {
|
||
options = convertByobReadOptions(rawOptions, "options");
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
const min = options.min;
|
||
if (min === 0) {
|
||
return promiseRejectedWith(new TypeError("options.min must be greater than 0"));
|
||
}
|
||
if (!isDataView(view)) {
|
||
if (min > view.length) {
|
||
return promiseRejectedWith(new RangeError("options.min must be less than or equal to view's length"));
|
||
}
|
||
} else if (min > view.byteLength) {
|
||
return promiseRejectedWith(new RangeError("options.min must be less than or equal to view's byteLength"));
|
||
}
|
||
if (this._ownerReadableStream === void 0) {
|
||
return promiseRejectedWith(readerLockException("read from"));
|
||
}
|
||
let resolvePromise;
|
||
let rejectPromise;
|
||
const promise = newPromise((resolve, reject) => {
|
||
resolvePromise = resolve;
|
||
rejectPromise = reject;
|
||
});
|
||
const readIntoRequest = {
|
||
_chunkSteps: (chunk) => resolvePromise({ value: chunk, done: false }),
|
||
_closeSteps: (chunk) => resolvePromise({ value: chunk, done: true }),
|
||
_errorSteps: (e2) => rejectPromise(e2)
|
||
};
|
||
ReadableStreamBYOBReaderRead(this, view, min, readIntoRequest);
|
||
return promise;
|
||
}
|
||
/**
|
||
* Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
|
||
* If the associated stream is errored when the lock is released, the reader will appear errored in the same way
|
||
* from now on; otherwise, the reader will appear closed.
|
||
*
|
||
* A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
|
||
* the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to
|
||
* do so will throw a `TypeError` and leave the reader locked to the stream.
|
||
*/
|
||
releaseLock() {
|
||
if (!IsReadableStreamBYOBReader(this)) {
|
||
throw byobReaderBrandCheckException("releaseLock");
|
||
}
|
||
if (this._ownerReadableStream === void 0) {
|
||
return;
|
||
}
|
||
ReadableStreamBYOBReaderRelease(this);
|
||
}
|
||
}
|
||
Object.defineProperties(ReadableStreamBYOBReader.prototype, {
|
||
cancel: { enumerable: true },
|
||
read: { enumerable: true },
|
||
releaseLock: { enumerable: true },
|
||
closed: { enumerable: true }
|
||
});
|
||
setFunctionName(ReadableStreamBYOBReader.prototype.cancel, "cancel");
|
||
setFunctionName(ReadableStreamBYOBReader.prototype.read, "read");
|
||
setFunctionName(ReadableStreamBYOBReader.prototype.releaseLock, "releaseLock");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {
|
||
value: "ReadableStreamBYOBReader",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsReadableStreamBYOBReader(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_readIntoRequests")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ReadableStreamBYOBReader;
|
||
}
|
||
function ReadableStreamBYOBReaderRead(reader, view, min, readIntoRequest) {
|
||
const stream = reader._ownerReadableStream;
|
||
stream._disturbed = true;
|
||
if (stream._state === "errored") {
|
||
readIntoRequest._errorSteps(stream._storedError);
|
||
} else {
|
||
ReadableByteStreamControllerPullInto(stream._readableStreamController, view, min, readIntoRequest);
|
||
}
|
||
}
|
||
function ReadableStreamBYOBReaderRelease(reader) {
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
const e2 = new TypeError("Reader was released");
|
||
ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e2);
|
||
}
|
||
function ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e2) {
|
||
const readIntoRequests = reader._readIntoRequests;
|
||
reader._readIntoRequests = new SimpleQueue();
|
||
readIntoRequests.forEach((readIntoRequest) => {
|
||
readIntoRequest._errorSteps(e2);
|
||
});
|
||
}
|
||
function byobReaderBrandCheckException(name) {
|
||
return new TypeError(`ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);
|
||
}
|
||
function ExtractHighWaterMark(strategy, defaultHWM) {
|
||
const { highWaterMark } = strategy;
|
||
if (highWaterMark === void 0) {
|
||
return defaultHWM;
|
||
}
|
||
if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {
|
||
throw new RangeError("Invalid highWaterMark");
|
||
}
|
||
return highWaterMark;
|
||
}
|
||
function ExtractSizeAlgorithm(strategy) {
|
||
const { size } = strategy;
|
||
if (!size) {
|
||
return () => 1;
|
||
}
|
||
return size;
|
||
}
|
||
function convertQueuingStrategy(init, context) {
|
||
assertDictionary(init, context);
|
||
const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
|
||
const size = init === null || init === void 0 ? void 0 : init.size;
|
||
return {
|
||
highWaterMark: highWaterMark === void 0 ? void 0 : convertUnrestrictedDouble(highWaterMark),
|
||
size: size === void 0 ? void 0 : convertQueuingStrategySize(size, `${context} has member 'size' that`)
|
||
};
|
||
}
|
||
function convertQueuingStrategySize(fn, context) {
|
||
assertFunction(fn, context);
|
||
return (chunk) => convertUnrestrictedDouble(fn(chunk));
|
||
}
|
||
function convertUnderlyingSink(original, context) {
|
||
assertDictionary(original, context);
|
||
const abort = original === null || original === void 0 ? void 0 : original.abort;
|
||
const close = original === null || original === void 0 ? void 0 : original.close;
|
||
const start = original === null || original === void 0 ? void 0 : original.start;
|
||
const type = original === null || original === void 0 ? void 0 : original.type;
|
||
const write = original === null || original === void 0 ? void 0 : original.write;
|
||
return {
|
||
abort: abort === void 0 ? void 0 : convertUnderlyingSinkAbortCallback(abort, original, `${context} has member 'abort' that`),
|
||
close: close === void 0 ? void 0 : convertUnderlyingSinkCloseCallback(close, original, `${context} has member 'close' that`),
|
||
start: start === void 0 ? void 0 : convertUnderlyingSinkStartCallback(start, original, `${context} has member 'start' that`),
|
||
write: write === void 0 ? void 0 : convertUnderlyingSinkWriteCallback(write, original, `${context} has member 'write' that`),
|
||
type
|
||
};
|
||
}
|
||
function convertUnderlyingSinkAbortCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (reason) => promiseCall(fn, original, [reason]);
|
||
}
|
||
function convertUnderlyingSinkCloseCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return () => promiseCall(fn, original, []);
|
||
}
|
||
function convertUnderlyingSinkStartCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (controller) => reflectCall(fn, original, [controller]);
|
||
}
|
||
function convertUnderlyingSinkWriteCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
|
||
}
|
||
function assertWritableStream(x2, context) {
|
||
if (!IsWritableStream(x2)) {
|
||
throw new TypeError(`${context} is not a WritableStream.`);
|
||
}
|
||
}
|
||
function isAbortSignal2(value) {
|
||
if (typeof value !== "object" || value === null) {
|
||
return false;
|
||
}
|
||
try {
|
||
return typeof value.aborted === "boolean";
|
||
} catch (_a5) {
|
||
return false;
|
||
}
|
||
}
|
||
const supportsAbortController = typeof AbortController === "function";
|
||
function createAbortController() {
|
||
if (supportsAbortController) {
|
||
return new AbortController();
|
||
}
|
||
return void 0;
|
||
}
|
||
class WritableStream {
|
||
constructor(rawUnderlyingSink = {}, rawStrategy = {}) {
|
||
if (rawUnderlyingSink === void 0) {
|
||
rawUnderlyingSink = null;
|
||
} else {
|
||
assertObject(rawUnderlyingSink, "First parameter");
|
||
}
|
||
const strategy = convertQueuingStrategy(rawStrategy, "Second parameter");
|
||
const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, "First parameter");
|
||
InitializeWritableStream(this);
|
||
const type = underlyingSink.type;
|
||
if (type !== void 0) {
|
||
throw new RangeError("Invalid type is specified");
|
||
}
|
||
const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
|
||
const highWaterMark = ExtractHighWaterMark(strategy, 1);
|
||
SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);
|
||
}
|
||
/**
|
||
* Returns whether or not the writable stream is locked to a writer.
|
||
*/
|
||
get locked() {
|
||
if (!IsWritableStream(this)) {
|
||
throw streamBrandCheckException$2("locked");
|
||
}
|
||
return IsWritableStreamLocked(this);
|
||
}
|
||
/**
|
||
* Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be
|
||
* immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort
|
||
* mechanism of the underlying sink.
|
||
*
|
||
* The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled
|
||
* that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel
|
||
* the stream) if the stream is currently locked.
|
||
*/
|
||
abort(reason = void 0) {
|
||
if (!IsWritableStream(this)) {
|
||
return promiseRejectedWith(streamBrandCheckException$2("abort"));
|
||
}
|
||
if (IsWritableStreamLocked(this)) {
|
||
return promiseRejectedWith(new TypeError("Cannot abort a stream that already has a writer"));
|
||
}
|
||
return WritableStreamAbort(this, reason);
|
||
}
|
||
/**
|
||
* Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its
|
||
* close behavior. During this time any further attempts to write will fail (without erroring the stream).
|
||
*
|
||
* The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream
|
||
* successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with
|
||
* a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.
|
||
*/
|
||
close() {
|
||
if (!IsWritableStream(this)) {
|
||
return promiseRejectedWith(streamBrandCheckException$2("close"));
|
||
}
|
||
if (IsWritableStreamLocked(this)) {
|
||
return promiseRejectedWith(new TypeError("Cannot close a stream that already has a writer"));
|
||
}
|
||
if (WritableStreamCloseQueuedOrInFlight(this)) {
|
||
return promiseRejectedWith(new TypeError("Cannot close an already-closing stream"));
|
||
}
|
||
return WritableStreamClose(this);
|
||
}
|
||
/**
|
||
* Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream
|
||
* is locked, no other writer can be acquired until this one is released.
|
||
*
|
||
* This functionality is especially useful for creating abstractions that desire the ability to write to a stream
|
||
* without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at
|
||
* the same time, which would cause the resulting written data to be unpredictable and probably useless.
|
||
*/
|
||
getWriter() {
|
||
if (!IsWritableStream(this)) {
|
||
throw streamBrandCheckException$2("getWriter");
|
||
}
|
||
return AcquireWritableStreamDefaultWriter(this);
|
||
}
|
||
}
|
||
Object.defineProperties(WritableStream.prototype, {
|
||
abort: { enumerable: true },
|
||
close: { enumerable: true },
|
||
getWriter: { enumerable: true },
|
||
locked: { enumerable: true }
|
||
});
|
||
setFunctionName(WritableStream.prototype.abort, "abort");
|
||
setFunctionName(WritableStream.prototype.close, "close");
|
||
setFunctionName(WritableStream.prototype.getWriter, "getWriter");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {
|
||
value: "WritableStream",
|
||
configurable: true
|
||
});
|
||
}
|
||
function AcquireWritableStreamDefaultWriter(stream) {
|
||
return new WritableStreamDefaultWriter(stream);
|
||
}
|
||
function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
|
||
const stream = Object.create(WritableStream.prototype);
|
||
InitializeWritableStream(stream);
|
||
const controller = Object.create(WritableStreamDefaultController.prototype);
|
||
SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
|
||
return stream;
|
||
}
|
||
function InitializeWritableStream(stream) {
|
||
stream._state = "writable";
|
||
stream._storedError = void 0;
|
||
stream._writer = void 0;
|
||
stream._writableStreamController = void 0;
|
||
stream._writeRequests = new SimpleQueue();
|
||
stream._inFlightWriteRequest = void 0;
|
||
stream._closeRequest = void 0;
|
||
stream._inFlightCloseRequest = void 0;
|
||
stream._pendingAbortRequest = void 0;
|
||
stream._backpressure = false;
|
||
}
|
||
function IsWritableStream(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_writableStreamController")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof WritableStream;
|
||
}
|
||
function IsWritableStreamLocked(stream) {
|
||
if (stream._writer === void 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function WritableStreamAbort(stream, reason) {
|
||
var _a5;
|
||
if (stream._state === "closed" || stream._state === "errored") {
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
stream._writableStreamController._abortReason = reason;
|
||
(_a5 = stream._writableStreamController._abortController) === null || _a5 === void 0 ? void 0 : _a5.abort(reason);
|
||
const state = stream._state;
|
||
if (state === "closed" || state === "errored") {
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
if (stream._pendingAbortRequest !== void 0) {
|
||
return stream._pendingAbortRequest._promise;
|
||
}
|
||
let wasAlreadyErroring = false;
|
||
if (state === "erroring") {
|
||
wasAlreadyErroring = true;
|
||
reason = void 0;
|
||
}
|
||
const promise = newPromise((resolve, reject) => {
|
||
stream._pendingAbortRequest = {
|
||
_promise: void 0,
|
||
_resolve: resolve,
|
||
_reject: reject,
|
||
_reason: reason,
|
||
_wasAlreadyErroring: wasAlreadyErroring
|
||
};
|
||
});
|
||
stream._pendingAbortRequest._promise = promise;
|
||
if (!wasAlreadyErroring) {
|
||
WritableStreamStartErroring(stream, reason);
|
||
}
|
||
return promise;
|
||
}
|
||
function WritableStreamClose(stream) {
|
||
const state = stream._state;
|
||
if (state === "closed" || state === "errored") {
|
||
return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
|
||
}
|
||
const promise = newPromise((resolve, reject) => {
|
||
const closeRequest = {
|
||
_resolve: resolve,
|
||
_reject: reject
|
||
};
|
||
stream._closeRequest = closeRequest;
|
||
});
|
||
const writer = stream._writer;
|
||
if (writer !== void 0 && stream._backpressure && state === "writable") {
|
||
defaultWriterReadyPromiseResolve(writer);
|
||
}
|
||
WritableStreamDefaultControllerClose(stream._writableStreamController);
|
||
return promise;
|
||
}
|
||
function WritableStreamAddWriteRequest(stream) {
|
||
const promise = newPromise((resolve, reject) => {
|
||
const writeRequest = {
|
||
_resolve: resolve,
|
||
_reject: reject
|
||
};
|
||
stream._writeRequests.push(writeRequest);
|
||
});
|
||
return promise;
|
||
}
|
||
function WritableStreamDealWithRejection(stream, error) {
|
||
const state = stream._state;
|
||
if (state === "writable") {
|
||
WritableStreamStartErroring(stream, error);
|
||
return;
|
||
}
|
||
WritableStreamFinishErroring(stream);
|
||
}
|
||
function WritableStreamStartErroring(stream, reason) {
|
||
const controller = stream._writableStreamController;
|
||
stream._state = "erroring";
|
||
stream._storedError = reason;
|
||
const writer = stream._writer;
|
||
if (writer !== void 0) {
|
||
WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
|
||
}
|
||
if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {
|
||
WritableStreamFinishErroring(stream);
|
||
}
|
||
}
|
||
function WritableStreamFinishErroring(stream) {
|
||
stream._state = "errored";
|
||
stream._writableStreamController[ErrorSteps]();
|
||
const storedError = stream._storedError;
|
||
stream._writeRequests.forEach((writeRequest) => {
|
||
writeRequest._reject(storedError);
|
||
});
|
||
stream._writeRequests = new SimpleQueue();
|
||
if (stream._pendingAbortRequest === void 0) {
|
||
WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
||
return;
|
||
}
|
||
const abortRequest = stream._pendingAbortRequest;
|
||
stream._pendingAbortRequest = void 0;
|
||
if (abortRequest._wasAlreadyErroring) {
|
||
abortRequest._reject(storedError);
|
||
WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
||
return;
|
||
}
|
||
const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);
|
||
uponPromise(promise, () => {
|
||
abortRequest._resolve();
|
||
WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
||
return null;
|
||
}, (reason) => {
|
||
abortRequest._reject(reason);
|
||
WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
|
||
return null;
|
||
});
|
||
}
|
||
function WritableStreamFinishInFlightWrite(stream) {
|
||
stream._inFlightWriteRequest._resolve(void 0);
|
||
stream._inFlightWriteRequest = void 0;
|
||
}
|
||
function WritableStreamFinishInFlightWriteWithError(stream, error) {
|
||
stream._inFlightWriteRequest._reject(error);
|
||
stream._inFlightWriteRequest = void 0;
|
||
WritableStreamDealWithRejection(stream, error);
|
||
}
|
||
function WritableStreamFinishInFlightClose(stream) {
|
||
stream._inFlightCloseRequest._resolve(void 0);
|
||
stream._inFlightCloseRequest = void 0;
|
||
const state = stream._state;
|
||
if (state === "erroring") {
|
||
stream._storedError = void 0;
|
||
if (stream._pendingAbortRequest !== void 0) {
|
||
stream._pendingAbortRequest._resolve();
|
||
stream._pendingAbortRequest = void 0;
|
||
}
|
||
}
|
||
stream._state = "closed";
|
||
const writer = stream._writer;
|
||
if (writer !== void 0) {
|
||
defaultWriterClosedPromiseResolve(writer);
|
||
}
|
||
}
|
||
function WritableStreamFinishInFlightCloseWithError(stream, error) {
|
||
stream._inFlightCloseRequest._reject(error);
|
||
stream._inFlightCloseRequest = void 0;
|
||
if (stream._pendingAbortRequest !== void 0) {
|
||
stream._pendingAbortRequest._reject(error);
|
||
stream._pendingAbortRequest = void 0;
|
||
}
|
||
WritableStreamDealWithRejection(stream, error);
|
||
}
|
||
function WritableStreamCloseQueuedOrInFlight(stream) {
|
||
if (stream._closeRequest === void 0 && stream._inFlightCloseRequest === void 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function WritableStreamHasOperationMarkedInFlight(stream) {
|
||
if (stream._inFlightWriteRequest === void 0 && stream._inFlightCloseRequest === void 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function WritableStreamMarkCloseRequestInFlight(stream) {
|
||
stream._inFlightCloseRequest = stream._closeRequest;
|
||
stream._closeRequest = void 0;
|
||
}
|
||
function WritableStreamMarkFirstWriteRequestInFlight(stream) {
|
||
stream._inFlightWriteRequest = stream._writeRequests.shift();
|
||
}
|
||
function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
|
||
if (stream._closeRequest !== void 0) {
|
||
stream._closeRequest._reject(stream._storedError);
|
||
stream._closeRequest = void 0;
|
||
}
|
||
const writer = stream._writer;
|
||
if (writer !== void 0) {
|
||
defaultWriterClosedPromiseReject(writer, stream._storedError);
|
||
}
|
||
}
|
||
function WritableStreamUpdateBackpressure(stream, backpressure) {
|
||
const writer = stream._writer;
|
||
if (writer !== void 0 && backpressure !== stream._backpressure) {
|
||
if (backpressure) {
|
||
defaultWriterReadyPromiseReset(writer);
|
||
} else {
|
||
defaultWriterReadyPromiseResolve(writer);
|
||
}
|
||
}
|
||
stream._backpressure = backpressure;
|
||
}
|
||
class WritableStreamDefaultWriter {
|
||
constructor(stream) {
|
||
assertRequiredArgument(stream, 1, "WritableStreamDefaultWriter");
|
||
assertWritableStream(stream, "First parameter");
|
||
if (IsWritableStreamLocked(stream)) {
|
||
throw new TypeError("This stream has already been locked for exclusive writing by another writer");
|
||
}
|
||
this._ownerWritableStream = stream;
|
||
stream._writer = this;
|
||
const state = stream._state;
|
||
if (state === "writable") {
|
||
if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {
|
||
defaultWriterReadyPromiseInitialize(this);
|
||
} else {
|
||
defaultWriterReadyPromiseInitializeAsResolved(this);
|
||
}
|
||
defaultWriterClosedPromiseInitialize(this);
|
||
} else if (state === "erroring") {
|
||
defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);
|
||
defaultWriterClosedPromiseInitialize(this);
|
||
} else if (state === "closed") {
|
||
defaultWriterReadyPromiseInitializeAsResolved(this);
|
||
defaultWriterClosedPromiseInitializeAsResolved(this);
|
||
} else {
|
||
const storedError = stream._storedError;
|
||
defaultWriterReadyPromiseInitializeAsRejected(this, storedError);
|
||
defaultWriterClosedPromiseInitializeAsRejected(this, storedError);
|
||
}
|
||
}
|
||
/**
|
||
* Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
|
||
* the writer’s lock is released before the stream finishes closing.
|
||
*/
|
||
get closed() {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
return promiseRejectedWith(defaultWriterBrandCheckException("closed"));
|
||
}
|
||
return this._closedPromise;
|
||
}
|
||
/**
|
||
* Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.
|
||
* A producer can use this information to determine the right amount of data to write.
|
||
*
|
||
* It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort
|
||
* queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when
|
||
* the writer’s lock is released.
|
||
*/
|
||
get desiredSize() {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
throw defaultWriterBrandCheckException("desiredSize");
|
||
}
|
||
if (this._ownerWritableStream === void 0) {
|
||
throw defaultWriterLockException("desiredSize");
|
||
}
|
||
return WritableStreamDefaultWriterGetDesiredSize(this);
|
||
}
|
||
/**
|
||
* Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions
|
||
* from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips
|
||
* back to zero or below, the getter will return a new promise that stays pending until the next transition.
|
||
*
|
||
* If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become
|
||
* rejected.
|
||
*/
|
||
get ready() {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
return promiseRejectedWith(defaultWriterBrandCheckException("ready"));
|
||
}
|
||
return this._readyPromise;
|
||
}
|
||
/**
|
||
* If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.
|
||
*/
|
||
abort(reason = void 0) {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
return promiseRejectedWith(defaultWriterBrandCheckException("abort"));
|
||
}
|
||
if (this._ownerWritableStream === void 0) {
|
||
return promiseRejectedWith(defaultWriterLockException("abort"));
|
||
}
|
||
return WritableStreamDefaultWriterAbort(this, reason);
|
||
}
|
||
/**
|
||
* If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.
|
||
*/
|
||
close() {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
return promiseRejectedWith(defaultWriterBrandCheckException("close"));
|
||
}
|
||
const stream = this._ownerWritableStream;
|
||
if (stream === void 0) {
|
||
return promiseRejectedWith(defaultWriterLockException("close"));
|
||
}
|
||
if (WritableStreamCloseQueuedOrInFlight(stream)) {
|
||
return promiseRejectedWith(new TypeError("Cannot close an already-closing stream"));
|
||
}
|
||
return WritableStreamDefaultWriterClose(this);
|
||
}
|
||
/**
|
||
* Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.
|
||
* If the associated stream is errored when the lock is released, the writer will appear errored in the same way from
|
||
* now on; otherwise, the writer will appear closed.
|
||
*
|
||
* Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the
|
||
* promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).
|
||
* It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents
|
||
* other producers from writing in an interleaved manner.
|
||
*/
|
||
releaseLock() {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
throw defaultWriterBrandCheckException("releaseLock");
|
||
}
|
||
const stream = this._ownerWritableStream;
|
||
if (stream === void 0) {
|
||
return;
|
||
}
|
||
WritableStreamDefaultWriterRelease(this);
|
||
}
|
||
write(chunk = void 0) {
|
||
if (!IsWritableStreamDefaultWriter(this)) {
|
||
return promiseRejectedWith(defaultWriterBrandCheckException("write"));
|
||
}
|
||
if (this._ownerWritableStream === void 0) {
|
||
return promiseRejectedWith(defaultWriterLockException("write to"));
|
||
}
|
||
return WritableStreamDefaultWriterWrite(this, chunk);
|
||
}
|
||
}
|
||
Object.defineProperties(WritableStreamDefaultWriter.prototype, {
|
||
abort: { enumerable: true },
|
||
close: { enumerable: true },
|
||
releaseLock: { enumerable: true },
|
||
write: { enumerable: true },
|
||
closed: { enumerable: true },
|
||
desiredSize: { enumerable: true },
|
||
ready: { enumerable: true }
|
||
});
|
||
setFunctionName(WritableStreamDefaultWriter.prototype.abort, "abort");
|
||
setFunctionName(WritableStreamDefaultWriter.prototype.close, "close");
|
||
setFunctionName(WritableStreamDefaultWriter.prototype.releaseLock, "releaseLock");
|
||
setFunctionName(WritableStreamDefaultWriter.prototype.write, "write");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {
|
||
value: "WritableStreamDefaultWriter",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsWritableStreamDefaultWriter(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_ownerWritableStream")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof WritableStreamDefaultWriter;
|
||
}
|
||
function WritableStreamDefaultWriterAbort(writer, reason) {
|
||
const stream = writer._ownerWritableStream;
|
||
return WritableStreamAbort(stream, reason);
|
||
}
|
||
function WritableStreamDefaultWriterClose(writer) {
|
||
const stream = writer._ownerWritableStream;
|
||
return WritableStreamClose(stream);
|
||
}
|
||
function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
|
||
const stream = writer._ownerWritableStream;
|
||
const state = stream._state;
|
||
if (WritableStreamCloseQueuedOrInFlight(stream) || state === "closed") {
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
if (state === "errored") {
|
||
return promiseRejectedWith(stream._storedError);
|
||
}
|
||
return WritableStreamDefaultWriterClose(writer);
|
||
}
|
||
function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
|
||
if (writer._closedPromiseState === "pending") {
|
||
defaultWriterClosedPromiseReject(writer, error);
|
||
} else {
|
||
defaultWriterClosedPromiseResetToRejected(writer, error);
|
||
}
|
||
}
|
||
function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
|
||
if (writer._readyPromiseState === "pending") {
|
||
defaultWriterReadyPromiseReject(writer, error);
|
||
} else {
|
||
defaultWriterReadyPromiseResetToRejected(writer, error);
|
||
}
|
||
}
|
||
function WritableStreamDefaultWriterGetDesiredSize(writer) {
|
||
const stream = writer._ownerWritableStream;
|
||
const state = stream._state;
|
||
if (state === "errored" || state === "erroring") {
|
||
return null;
|
||
}
|
||
if (state === "closed") {
|
||
return 0;
|
||
}
|
||
return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
|
||
}
|
||
function WritableStreamDefaultWriterRelease(writer) {
|
||
const stream = writer._ownerWritableStream;
|
||
const releasedError = new TypeError(`Writer was released and can no longer be used to monitor the stream's closedness`);
|
||
WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
|
||
WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
|
||
stream._writer = void 0;
|
||
writer._ownerWritableStream = void 0;
|
||
}
|
||
function WritableStreamDefaultWriterWrite(writer, chunk) {
|
||
const stream = writer._ownerWritableStream;
|
||
const controller = stream._writableStreamController;
|
||
const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);
|
||
if (stream !== writer._ownerWritableStream) {
|
||
return promiseRejectedWith(defaultWriterLockException("write to"));
|
||
}
|
||
const state = stream._state;
|
||
if (state === "errored") {
|
||
return promiseRejectedWith(stream._storedError);
|
||
}
|
||
if (WritableStreamCloseQueuedOrInFlight(stream) || state === "closed") {
|
||
return promiseRejectedWith(new TypeError("The stream is closing or closed and cannot be written to"));
|
||
}
|
||
if (state === "erroring") {
|
||
return promiseRejectedWith(stream._storedError);
|
||
}
|
||
const promise = WritableStreamAddWriteRequest(stream);
|
||
WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);
|
||
return promise;
|
||
}
|
||
const closeSentinel = {};
|
||
class WritableStreamDefaultController {
|
||
constructor() {
|
||
throw new TypeError("Illegal constructor");
|
||
}
|
||
/**
|
||
* The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.
|
||
*
|
||
* @deprecated
|
||
* This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.
|
||
* Use {@link WritableStreamDefaultController.signal}'s `reason` instead.
|
||
*/
|
||
get abortReason() {
|
||
if (!IsWritableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$2("abortReason");
|
||
}
|
||
return this._abortReason;
|
||
}
|
||
/**
|
||
* An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.
|
||
*/
|
||
get signal() {
|
||
if (!IsWritableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$2("signal");
|
||
}
|
||
if (this._abortController === void 0) {
|
||
throw new TypeError("WritableStreamDefaultController.prototype.signal is not supported");
|
||
}
|
||
return this._abortController.signal;
|
||
}
|
||
/**
|
||
* Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.
|
||
*
|
||
* This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying
|
||
* sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the
|
||
* normal lifecycle of interactions with the underlying sink.
|
||
*/
|
||
error(e2 = void 0) {
|
||
if (!IsWritableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$2("error");
|
||
}
|
||
const state = this._controlledWritableStream._state;
|
||
if (state !== "writable") {
|
||
return;
|
||
}
|
||
WritableStreamDefaultControllerError(this, e2);
|
||
}
|
||
/** @internal */
|
||
[AbortSteps](reason) {
|
||
const result = this._abortAlgorithm(reason);
|
||
WritableStreamDefaultControllerClearAlgorithms(this);
|
||
return result;
|
||
}
|
||
/** @internal */
|
||
[ErrorSteps]() {
|
||
ResetQueue(this);
|
||
}
|
||
}
|
||
Object.defineProperties(WritableStreamDefaultController.prototype, {
|
||
abortReason: { enumerable: true },
|
||
signal: { enumerable: true },
|
||
error: { enumerable: true }
|
||
});
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {
|
||
value: "WritableStreamDefaultController",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsWritableStreamDefaultController(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_controlledWritableStream")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof WritableStreamDefaultController;
|
||
}
|
||
function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {
|
||
controller._controlledWritableStream = stream;
|
||
stream._writableStreamController = controller;
|
||
controller._queue = void 0;
|
||
controller._queueTotalSize = void 0;
|
||
ResetQueue(controller);
|
||
controller._abortReason = void 0;
|
||
controller._abortController = createAbortController();
|
||
controller._started = false;
|
||
controller._strategySizeAlgorithm = sizeAlgorithm;
|
||
controller._strategyHWM = highWaterMark;
|
||
controller._writeAlgorithm = writeAlgorithm;
|
||
controller._closeAlgorithm = closeAlgorithm;
|
||
controller._abortAlgorithm = abortAlgorithm;
|
||
const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
|
||
WritableStreamUpdateBackpressure(stream, backpressure);
|
||
const startResult = startAlgorithm();
|
||
const startPromise = promiseResolvedWith(startResult);
|
||
uponPromise(startPromise, () => {
|
||
controller._started = true;
|
||
WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
||
return null;
|
||
}, (r2) => {
|
||
controller._started = true;
|
||
WritableStreamDealWithRejection(stream, r2);
|
||
return null;
|
||
});
|
||
}
|
||
function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {
|
||
const controller = Object.create(WritableStreamDefaultController.prototype);
|
||
let startAlgorithm;
|
||
let writeAlgorithm;
|
||
let closeAlgorithm;
|
||
let abortAlgorithm;
|
||
if (underlyingSink.start !== void 0) {
|
||
startAlgorithm = () => underlyingSink.start(controller);
|
||
} else {
|
||
startAlgorithm = () => void 0;
|
||
}
|
||
if (underlyingSink.write !== void 0) {
|
||
writeAlgorithm = (chunk) => underlyingSink.write(chunk, controller);
|
||
} else {
|
||
writeAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
if (underlyingSink.close !== void 0) {
|
||
closeAlgorithm = () => underlyingSink.close();
|
||
} else {
|
||
closeAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
if (underlyingSink.abort !== void 0) {
|
||
abortAlgorithm = (reason) => underlyingSink.abort(reason);
|
||
} else {
|
||
abortAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
|
||
}
|
||
function WritableStreamDefaultControllerClearAlgorithms(controller) {
|
||
controller._writeAlgorithm = void 0;
|
||
controller._closeAlgorithm = void 0;
|
||
controller._abortAlgorithm = void 0;
|
||
controller._strategySizeAlgorithm = void 0;
|
||
}
|
||
function WritableStreamDefaultControllerClose(controller) {
|
||
EnqueueValueWithSize(controller, closeSentinel, 0);
|
||
WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
||
}
|
||
function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {
|
||
try {
|
||
return controller._strategySizeAlgorithm(chunk);
|
||
} catch (chunkSizeE) {
|
||
WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
|
||
return 1;
|
||
}
|
||
}
|
||
function WritableStreamDefaultControllerGetDesiredSize(controller) {
|
||
return controller._strategyHWM - controller._queueTotalSize;
|
||
}
|
||
function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
|
||
try {
|
||
EnqueueValueWithSize(controller, chunk, chunkSize);
|
||
} catch (enqueueE) {
|
||
WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
|
||
return;
|
||
}
|
||
const stream = controller._controlledWritableStream;
|
||
if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === "writable") {
|
||
const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
|
||
WritableStreamUpdateBackpressure(stream, backpressure);
|
||
}
|
||
WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
||
}
|
||
function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
|
||
const stream = controller._controlledWritableStream;
|
||
if (!controller._started) {
|
||
return;
|
||
}
|
||
if (stream._inFlightWriteRequest !== void 0) {
|
||
return;
|
||
}
|
||
const state = stream._state;
|
||
if (state === "erroring") {
|
||
WritableStreamFinishErroring(stream);
|
||
return;
|
||
}
|
||
if (controller._queue.length === 0) {
|
||
return;
|
||
}
|
||
const value = PeekQueueValue(controller);
|
||
if (value === closeSentinel) {
|
||
WritableStreamDefaultControllerProcessClose(controller);
|
||
} else {
|
||
WritableStreamDefaultControllerProcessWrite(controller, value);
|
||
}
|
||
}
|
||
function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {
|
||
if (controller._controlledWritableStream._state === "writable") {
|
||
WritableStreamDefaultControllerError(controller, error);
|
||
}
|
||
}
|
||
function WritableStreamDefaultControllerProcessClose(controller) {
|
||
const stream = controller._controlledWritableStream;
|
||
WritableStreamMarkCloseRequestInFlight(stream);
|
||
DequeueValue(controller);
|
||
const sinkClosePromise = controller._closeAlgorithm();
|
||
WritableStreamDefaultControllerClearAlgorithms(controller);
|
||
uponPromise(sinkClosePromise, () => {
|
||
WritableStreamFinishInFlightClose(stream);
|
||
return null;
|
||
}, (reason) => {
|
||
WritableStreamFinishInFlightCloseWithError(stream, reason);
|
||
return null;
|
||
});
|
||
}
|
||
function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
|
||
const stream = controller._controlledWritableStream;
|
||
WritableStreamMarkFirstWriteRequestInFlight(stream);
|
||
const sinkWritePromise = controller._writeAlgorithm(chunk);
|
||
uponPromise(sinkWritePromise, () => {
|
||
WritableStreamFinishInFlightWrite(stream);
|
||
const state = stream._state;
|
||
DequeueValue(controller);
|
||
if (!WritableStreamCloseQueuedOrInFlight(stream) && state === "writable") {
|
||
const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
|
||
WritableStreamUpdateBackpressure(stream, backpressure);
|
||
}
|
||
WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
|
||
return null;
|
||
}, (reason) => {
|
||
if (stream._state === "writable") {
|
||
WritableStreamDefaultControllerClearAlgorithms(controller);
|
||
}
|
||
WritableStreamFinishInFlightWriteWithError(stream, reason);
|
||
return null;
|
||
});
|
||
}
|
||
function WritableStreamDefaultControllerGetBackpressure(controller) {
|
||
const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
|
||
return desiredSize <= 0;
|
||
}
|
||
function WritableStreamDefaultControllerError(controller, error) {
|
||
const stream = controller._controlledWritableStream;
|
||
WritableStreamDefaultControllerClearAlgorithms(controller);
|
||
WritableStreamStartErroring(stream, error);
|
||
}
|
||
function streamBrandCheckException$2(name) {
|
||
return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);
|
||
}
|
||
function defaultControllerBrandCheckException$2(name) {
|
||
return new TypeError(`WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);
|
||
}
|
||
function defaultWriterBrandCheckException(name) {
|
||
return new TypeError(`WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);
|
||
}
|
||
function defaultWriterLockException(name) {
|
||
return new TypeError("Cannot " + name + " a stream using a released writer");
|
||
}
|
||
function defaultWriterClosedPromiseInitialize(writer) {
|
||
writer._closedPromise = newPromise((resolve, reject) => {
|
||
writer._closedPromise_resolve = resolve;
|
||
writer._closedPromise_reject = reject;
|
||
writer._closedPromiseState = "pending";
|
||
});
|
||
}
|
||
function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
|
||
defaultWriterClosedPromiseInitialize(writer);
|
||
defaultWriterClosedPromiseReject(writer, reason);
|
||
}
|
||
function defaultWriterClosedPromiseInitializeAsResolved(writer) {
|
||
defaultWriterClosedPromiseInitialize(writer);
|
||
defaultWriterClosedPromiseResolve(writer);
|
||
}
|
||
function defaultWriterClosedPromiseReject(writer, reason) {
|
||
if (writer._closedPromise_reject === void 0) {
|
||
return;
|
||
}
|
||
setPromiseIsHandledToTrue(writer._closedPromise);
|
||
writer._closedPromise_reject(reason);
|
||
writer._closedPromise_resolve = void 0;
|
||
writer._closedPromise_reject = void 0;
|
||
writer._closedPromiseState = "rejected";
|
||
}
|
||
function defaultWriterClosedPromiseResetToRejected(writer, reason) {
|
||
defaultWriterClosedPromiseInitializeAsRejected(writer, reason);
|
||
}
|
||
function defaultWriterClosedPromiseResolve(writer) {
|
||
if (writer._closedPromise_resolve === void 0) {
|
||
return;
|
||
}
|
||
writer._closedPromise_resolve(void 0);
|
||
writer._closedPromise_resolve = void 0;
|
||
writer._closedPromise_reject = void 0;
|
||
writer._closedPromiseState = "resolved";
|
||
}
|
||
function defaultWriterReadyPromiseInitialize(writer) {
|
||
writer._readyPromise = newPromise((resolve, reject) => {
|
||
writer._readyPromise_resolve = resolve;
|
||
writer._readyPromise_reject = reject;
|
||
});
|
||
writer._readyPromiseState = "pending";
|
||
}
|
||
function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {
|
||
defaultWriterReadyPromiseInitialize(writer);
|
||
defaultWriterReadyPromiseReject(writer, reason);
|
||
}
|
||
function defaultWriterReadyPromiseInitializeAsResolved(writer) {
|
||
defaultWriterReadyPromiseInitialize(writer);
|
||
defaultWriterReadyPromiseResolve(writer);
|
||
}
|
||
function defaultWriterReadyPromiseReject(writer, reason) {
|
||
if (writer._readyPromise_reject === void 0) {
|
||
return;
|
||
}
|
||
setPromiseIsHandledToTrue(writer._readyPromise);
|
||
writer._readyPromise_reject(reason);
|
||
writer._readyPromise_resolve = void 0;
|
||
writer._readyPromise_reject = void 0;
|
||
writer._readyPromiseState = "rejected";
|
||
}
|
||
function defaultWriterReadyPromiseReset(writer) {
|
||
defaultWriterReadyPromiseInitialize(writer);
|
||
}
|
||
function defaultWriterReadyPromiseResetToRejected(writer, reason) {
|
||
defaultWriterReadyPromiseInitializeAsRejected(writer, reason);
|
||
}
|
||
function defaultWriterReadyPromiseResolve(writer) {
|
||
if (writer._readyPromise_resolve === void 0) {
|
||
return;
|
||
}
|
||
writer._readyPromise_resolve(void 0);
|
||
writer._readyPromise_resolve = void 0;
|
||
writer._readyPromise_reject = void 0;
|
||
writer._readyPromiseState = "fulfilled";
|
||
}
|
||
function getGlobals() {
|
||
if (typeof globalThis !== "undefined") {
|
||
return globalThis;
|
||
} else if (typeof self !== "undefined") {
|
||
return self;
|
||
} else if (typeof global !== "undefined") {
|
||
return global;
|
||
}
|
||
return void 0;
|
||
}
|
||
const globals = getGlobals();
|
||
function isDOMExceptionConstructor(ctor) {
|
||
if (!(typeof ctor === "function" || typeof ctor === "object")) {
|
||
return false;
|
||
}
|
||
if (ctor.name !== "DOMException") {
|
||
return false;
|
||
}
|
||
try {
|
||
new ctor();
|
||
return true;
|
||
} catch (_a5) {
|
||
return false;
|
||
}
|
||
}
|
||
function getFromGlobal() {
|
||
const ctor = globals === null || globals === void 0 ? void 0 : globals.DOMException;
|
||
return isDOMExceptionConstructor(ctor) ? ctor : void 0;
|
||
}
|
||
function createPolyfill() {
|
||
const ctor = function DOMException3(message, name) {
|
||
this.message = message || "";
|
||
this.name = name || "Error";
|
||
if (Error.captureStackTrace) {
|
||
Error.captureStackTrace(this, this.constructor);
|
||
}
|
||
};
|
||
setFunctionName(ctor, "DOMException");
|
||
ctor.prototype = Object.create(Error.prototype);
|
||
Object.defineProperty(ctor.prototype, "constructor", { value: ctor, writable: true, configurable: true });
|
||
return ctor;
|
||
}
|
||
const DOMException2 = getFromGlobal() || createPolyfill();
|
||
function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {
|
||
const reader = AcquireReadableStreamDefaultReader(source);
|
||
const writer = AcquireWritableStreamDefaultWriter(dest);
|
||
source._disturbed = true;
|
||
let shuttingDown = false;
|
||
let currentWrite = promiseResolvedWith(void 0);
|
||
return newPromise((resolve, reject) => {
|
||
let abortAlgorithm;
|
||
if (signal !== void 0) {
|
||
abortAlgorithm = () => {
|
||
const error = signal.reason !== void 0 ? signal.reason : new DOMException2("Aborted", "AbortError");
|
||
const actions = [];
|
||
if (!preventAbort) {
|
||
actions.push(() => {
|
||
if (dest._state === "writable") {
|
||
return WritableStreamAbort(dest, error);
|
||
}
|
||
return promiseResolvedWith(void 0);
|
||
});
|
||
}
|
||
if (!preventCancel) {
|
||
actions.push(() => {
|
||
if (source._state === "readable") {
|
||
return ReadableStreamCancel(source, error);
|
||
}
|
||
return promiseResolvedWith(void 0);
|
||
});
|
||
}
|
||
shutdownWithAction(() => Promise.all(actions.map((action) => action())), true, error);
|
||
};
|
||
if (signal.aborted) {
|
||
abortAlgorithm();
|
||
return;
|
||
}
|
||
signal.addEventListener("abort", abortAlgorithm);
|
||
}
|
||
function pipeLoop() {
|
||
return newPromise((resolveLoop, rejectLoop) => {
|
||
function next(done) {
|
||
if (done) {
|
||
resolveLoop();
|
||
} else {
|
||
PerformPromiseThen(pipeStep(), next, rejectLoop);
|
||
}
|
||
}
|
||
next(false);
|
||
});
|
||
}
|
||
function pipeStep() {
|
||
if (shuttingDown) {
|
||
return promiseResolvedWith(true);
|
||
}
|
||
return PerformPromiseThen(writer._readyPromise, () => {
|
||
return newPromise((resolveRead, rejectRead) => {
|
||
ReadableStreamDefaultReaderRead(reader, {
|
||
_chunkSteps: (chunk) => {
|
||
currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), void 0, noop2);
|
||
resolveRead(false);
|
||
},
|
||
_closeSteps: () => resolveRead(true),
|
||
_errorSteps: rejectRead
|
||
});
|
||
});
|
||
});
|
||
}
|
||
isOrBecomesErrored(source, reader._closedPromise, (storedError) => {
|
||
if (!preventAbort) {
|
||
shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);
|
||
} else {
|
||
shutdown(true, storedError);
|
||
}
|
||
return null;
|
||
});
|
||
isOrBecomesErrored(dest, writer._closedPromise, (storedError) => {
|
||
if (!preventCancel) {
|
||
shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);
|
||
} else {
|
||
shutdown(true, storedError);
|
||
}
|
||
return null;
|
||
});
|
||
isOrBecomesClosed(source, reader._closedPromise, () => {
|
||
if (!preventClose) {
|
||
shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));
|
||
} else {
|
||
shutdown();
|
||
}
|
||
return null;
|
||
});
|
||
if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === "closed") {
|
||
const destClosed = new TypeError("the destination writable stream closed before all data could be piped to it");
|
||
if (!preventCancel) {
|
||
shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);
|
||
} else {
|
||
shutdown(true, destClosed);
|
||
}
|
||
}
|
||
setPromiseIsHandledToTrue(pipeLoop());
|
||
function waitForWritesToFinish() {
|
||
const oldCurrentWrite = currentWrite;
|
||
return PerformPromiseThen(currentWrite, () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : void 0);
|
||
}
|
||
function isOrBecomesErrored(stream, promise, action) {
|
||
if (stream._state === "errored") {
|
||
action(stream._storedError);
|
||
} else {
|
||
uponRejection(promise, action);
|
||
}
|
||
}
|
||
function isOrBecomesClosed(stream, promise, action) {
|
||
if (stream._state === "closed") {
|
||
action();
|
||
} else {
|
||
uponFulfillment(promise, action);
|
||
}
|
||
}
|
||
function shutdownWithAction(action, originalIsError, originalError) {
|
||
if (shuttingDown) {
|
||
return;
|
||
}
|
||
shuttingDown = true;
|
||
if (dest._state === "writable" && !WritableStreamCloseQueuedOrInFlight(dest)) {
|
||
uponFulfillment(waitForWritesToFinish(), doTheRest);
|
||
} else {
|
||
doTheRest();
|
||
}
|
||
function doTheRest() {
|
||
uponPromise(action(), () => finalize(originalIsError, originalError), (newError) => finalize(true, newError));
|
||
return null;
|
||
}
|
||
}
|
||
function shutdown(isError, error) {
|
||
if (shuttingDown) {
|
||
return;
|
||
}
|
||
shuttingDown = true;
|
||
if (dest._state === "writable" && !WritableStreamCloseQueuedOrInFlight(dest)) {
|
||
uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));
|
||
} else {
|
||
finalize(isError, error);
|
||
}
|
||
}
|
||
function finalize(isError, error) {
|
||
WritableStreamDefaultWriterRelease(writer);
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
if (signal !== void 0) {
|
||
signal.removeEventListener("abort", abortAlgorithm);
|
||
}
|
||
if (isError) {
|
||
reject(error);
|
||
} else {
|
||
resolve(void 0);
|
||
}
|
||
return null;
|
||
}
|
||
});
|
||
}
|
||
class ReadableStreamDefaultController {
|
||
constructor() {
|
||
throw new TypeError("Illegal constructor");
|
||
}
|
||
/**
|
||
* Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
|
||
* over-full. An underlying source ought to use this information to determine when and how to apply backpressure.
|
||
*/
|
||
get desiredSize() {
|
||
if (!IsReadableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$1("desiredSize");
|
||
}
|
||
return ReadableStreamDefaultControllerGetDesiredSize(this);
|
||
}
|
||
/**
|
||
* Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
|
||
* the stream, but once those are read, the stream will become closed.
|
||
*/
|
||
close() {
|
||
if (!IsReadableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$1("close");
|
||
}
|
||
if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
|
||
throw new TypeError("The stream is not in a state that permits close");
|
||
}
|
||
ReadableStreamDefaultControllerClose(this);
|
||
}
|
||
enqueue(chunk = void 0) {
|
||
if (!IsReadableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$1("enqueue");
|
||
}
|
||
if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
|
||
throw new TypeError("The stream is not in a state that permits enqueue");
|
||
}
|
||
return ReadableStreamDefaultControllerEnqueue(this, chunk);
|
||
}
|
||
/**
|
||
* Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
|
||
*/
|
||
error(e2 = void 0) {
|
||
if (!IsReadableStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException$1("error");
|
||
}
|
||
ReadableStreamDefaultControllerError(this, e2);
|
||
}
|
||
/** @internal */
|
||
[CancelSteps](reason) {
|
||
ResetQueue(this);
|
||
const result = this._cancelAlgorithm(reason);
|
||
ReadableStreamDefaultControllerClearAlgorithms(this);
|
||
return result;
|
||
}
|
||
/** @internal */
|
||
[PullSteps](readRequest) {
|
||
const stream = this._controlledReadableStream;
|
||
if (this._queue.length > 0) {
|
||
const chunk = DequeueValue(this);
|
||
if (this._closeRequested && this._queue.length === 0) {
|
||
ReadableStreamDefaultControllerClearAlgorithms(this);
|
||
ReadableStreamClose(stream);
|
||
} else {
|
||
ReadableStreamDefaultControllerCallPullIfNeeded(this);
|
||
}
|
||
readRequest._chunkSteps(chunk);
|
||
} else {
|
||
ReadableStreamAddReadRequest(stream, readRequest);
|
||
ReadableStreamDefaultControllerCallPullIfNeeded(this);
|
||
}
|
||
}
|
||
/** @internal */
|
||
[ReleaseSteps]() {
|
||
}
|
||
}
|
||
Object.defineProperties(ReadableStreamDefaultController.prototype, {
|
||
close: { enumerable: true },
|
||
enqueue: { enumerable: true },
|
||
error: { enumerable: true },
|
||
desiredSize: { enumerable: true }
|
||
});
|
||
setFunctionName(ReadableStreamDefaultController.prototype.close, "close");
|
||
setFunctionName(ReadableStreamDefaultController.prototype.enqueue, "enqueue");
|
||
setFunctionName(ReadableStreamDefaultController.prototype.error, "error");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {
|
||
value: "ReadableStreamDefaultController",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsReadableStreamDefaultController(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_controlledReadableStream")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ReadableStreamDefaultController;
|
||
}
|
||
function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
|
||
const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
|
||
if (!shouldPull) {
|
||
return;
|
||
}
|
||
if (controller._pulling) {
|
||
controller._pullAgain = true;
|
||
return;
|
||
}
|
||
controller._pulling = true;
|
||
const pullPromise = controller._pullAlgorithm();
|
||
uponPromise(pullPromise, () => {
|
||
controller._pulling = false;
|
||
if (controller._pullAgain) {
|
||
controller._pullAgain = false;
|
||
ReadableStreamDefaultControllerCallPullIfNeeded(controller);
|
||
}
|
||
return null;
|
||
}, (e2) => {
|
||
ReadableStreamDefaultControllerError(controller, e2);
|
||
return null;
|
||
});
|
||
}
|
||
function ReadableStreamDefaultControllerShouldCallPull(controller) {
|
||
const stream = controller._controlledReadableStream;
|
||
if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
|
||
return false;
|
||
}
|
||
if (!controller._started) {
|
||
return false;
|
||
}
|
||
if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
|
||
return true;
|
||
}
|
||
const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
|
||
if (desiredSize > 0) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function ReadableStreamDefaultControllerClearAlgorithms(controller) {
|
||
controller._pullAlgorithm = void 0;
|
||
controller._cancelAlgorithm = void 0;
|
||
controller._strategySizeAlgorithm = void 0;
|
||
}
|
||
function ReadableStreamDefaultControllerClose(controller) {
|
||
if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
|
||
return;
|
||
}
|
||
const stream = controller._controlledReadableStream;
|
||
controller._closeRequested = true;
|
||
if (controller._queue.length === 0) {
|
||
ReadableStreamDefaultControllerClearAlgorithms(controller);
|
||
ReadableStreamClose(stream);
|
||
}
|
||
}
|
||
function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
|
||
if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
|
||
return;
|
||
}
|
||
const stream = controller._controlledReadableStream;
|
||
if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
|
||
ReadableStreamFulfillReadRequest(stream, chunk, false);
|
||
} else {
|
||
let chunkSize;
|
||
try {
|
||
chunkSize = controller._strategySizeAlgorithm(chunk);
|
||
} catch (chunkSizeE) {
|
||
ReadableStreamDefaultControllerError(controller, chunkSizeE);
|
||
throw chunkSizeE;
|
||
}
|
||
try {
|
||
EnqueueValueWithSize(controller, chunk, chunkSize);
|
||
} catch (enqueueE) {
|
||
ReadableStreamDefaultControllerError(controller, enqueueE);
|
||
throw enqueueE;
|
||
}
|
||
}
|
||
ReadableStreamDefaultControllerCallPullIfNeeded(controller);
|
||
}
|
||
function ReadableStreamDefaultControllerError(controller, e2) {
|
||
const stream = controller._controlledReadableStream;
|
||
if (stream._state !== "readable") {
|
||
return;
|
||
}
|
||
ResetQueue(controller);
|
||
ReadableStreamDefaultControllerClearAlgorithms(controller);
|
||
ReadableStreamError(stream, e2);
|
||
}
|
||
function ReadableStreamDefaultControllerGetDesiredSize(controller) {
|
||
const state = controller._controlledReadableStream._state;
|
||
if (state === "errored") {
|
||
return null;
|
||
}
|
||
if (state === "closed") {
|
||
return 0;
|
||
}
|
||
return controller._strategyHWM - controller._queueTotalSize;
|
||
}
|
||
function ReadableStreamDefaultControllerHasBackpressure(controller) {
|
||
if (ReadableStreamDefaultControllerShouldCallPull(controller)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {
|
||
const state = controller._controlledReadableStream._state;
|
||
if (!controller._closeRequested && state === "readable") {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {
|
||
controller._controlledReadableStream = stream;
|
||
controller._queue = void 0;
|
||
controller._queueTotalSize = void 0;
|
||
ResetQueue(controller);
|
||
controller._started = false;
|
||
controller._closeRequested = false;
|
||
controller._pullAgain = false;
|
||
controller._pulling = false;
|
||
controller._strategySizeAlgorithm = sizeAlgorithm;
|
||
controller._strategyHWM = highWaterMark;
|
||
controller._pullAlgorithm = pullAlgorithm;
|
||
controller._cancelAlgorithm = cancelAlgorithm;
|
||
stream._readableStreamController = controller;
|
||
const startResult = startAlgorithm();
|
||
uponPromise(promiseResolvedWith(startResult), () => {
|
||
controller._started = true;
|
||
ReadableStreamDefaultControllerCallPullIfNeeded(controller);
|
||
return null;
|
||
}, (r2) => {
|
||
ReadableStreamDefaultControllerError(controller, r2);
|
||
return null;
|
||
});
|
||
}
|
||
function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {
|
||
const controller = Object.create(ReadableStreamDefaultController.prototype);
|
||
let startAlgorithm;
|
||
let pullAlgorithm;
|
||
let cancelAlgorithm;
|
||
if (underlyingSource.start !== void 0) {
|
||
startAlgorithm = () => underlyingSource.start(controller);
|
||
} else {
|
||
startAlgorithm = () => void 0;
|
||
}
|
||
if (underlyingSource.pull !== void 0) {
|
||
pullAlgorithm = () => underlyingSource.pull(controller);
|
||
} else {
|
||
pullAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
if (underlyingSource.cancel !== void 0) {
|
||
cancelAlgorithm = (reason) => underlyingSource.cancel(reason);
|
||
} else {
|
||
cancelAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
|
||
}
|
||
function defaultControllerBrandCheckException$1(name) {
|
||
return new TypeError(`ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);
|
||
}
|
||
function ReadableStreamTee(stream, cloneForBranch2) {
|
||
if (IsReadableByteStreamController(stream._readableStreamController)) {
|
||
return ReadableByteStreamTee(stream);
|
||
}
|
||
return ReadableStreamDefaultTee(stream);
|
||
}
|
||
function ReadableStreamDefaultTee(stream, cloneForBranch2) {
|
||
const reader = AcquireReadableStreamDefaultReader(stream);
|
||
let reading = false;
|
||
let readAgain = false;
|
||
let canceled1 = false;
|
||
let canceled2 = false;
|
||
let reason1;
|
||
let reason2;
|
||
let branch1;
|
||
let branch2;
|
||
let resolveCancelPromise;
|
||
const cancelPromise = newPromise((resolve) => {
|
||
resolveCancelPromise = resolve;
|
||
});
|
||
function pullAlgorithm() {
|
||
if (reading) {
|
||
readAgain = true;
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
reading = true;
|
||
const readRequest = {
|
||
_chunkSteps: (chunk) => {
|
||
_queueMicrotask(() => {
|
||
readAgain = false;
|
||
const chunk1 = chunk;
|
||
const chunk2 = chunk;
|
||
if (!canceled1) {
|
||
ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);
|
||
}
|
||
if (!canceled2) {
|
||
ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);
|
||
}
|
||
reading = false;
|
||
if (readAgain) {
|
||
pullAlgorithm();
|
||
}
|
||
});
|
||
},
|
||
_closeSteps: () => {
|
||
reading = false;
|
||
if (!canceled1) {
|
||
ReadableStreamDefaultControllerClose(branch1._readableStreamController);
|
||
}
|
||
if (!canceled2) {
|
||
ReadableStreamDefaultControllerClose(branch2._readableStreamController);
|
||
}
|
||
if (!canceled1 || !canceled2) {
|
||
resolveCancelPromise(void 0);
|
||
}
|
||
},
|
||
_errorSteps: () => {
|
||
reading = false;
|
||
}
|
||
};
|
||
ReadableStreamDefaultReaderRead(reader, readRequest);
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
function cancel1Algorithm(reason) {
|
||
canceled1 = true;
|
||
reason1 = reason;
|
||
if (canceled2) {
|
||
const compositeReason = CreateArrayFromList([reason1, reason2]);
|
||
const cancelResult = ReadableStreamCancel(stream, compositeReason);
|
||
resolveCancelPromise(cancelResult);
|
||
}
|
||
return cancelPromise;
|
||
}
|
||
function cancel2Algorithm(reason) {
|
||
canceled2 = true;
|
||
reason2 = reason;
|
||
if (canceled1) {
|
||
const compositeReason = CreateArrayFromList([reason1, reason2]);
|
||
const cancelResult = ReadableStreamCancel(stream, compositeReason);
|
||
resolveCancelPromise(cancelResult);
|
||
}
|
||
return cancelPromise;
|
||
}
|
||
function startAlgorithm() {
|
||
}
|
||
branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);
|
||
branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);
|
||
uponRejection(reader._closedPromise, (r2) => {
|
||
ReadableStreamDefaultControllerError(branch1._readableStreamController, r2);
|
||
ReadableStreamDefaultControllerError(branch2._readableStreamController, r2);
|
||
if (!canceled1 || !canceled2) {
|
||
resolveCancelPromise(void 0);
|
||
}
|
||
return null;
|
||
});
|
||
return [branch1, branch2];
|
||
}
|
||
function ReadableByteStreamTee(stream) {
|
||
let reader = AcquireReadableStreamDefaultReader(stream);
|
||
let reading = false;
|
||
let readAgainForBranch1 = false;
|
||
let readAgainForBranch2 = false;
|
||
let canceled1 = false;
|
||
let canceled2 = false;
|
||
let reason1;
|
||
let reason2;
|
||
let branch1;
|
||
let branch2;
|
||
let resolveCancelPromise;
|
||
const cancelPromise = newPromise((resolve) => {
|
||
resolveCancelPromise = resolve;
|
||
});
|
||
function forwardReaderError(thisReader) {
|
||
uponRejection(thisReader._closedPromise, (r2) => {
|
||
if (thisReader !== reader) {
|
||
return null;
|
||
}
|
||
ReadableByteStreamControllerError(branch1._readableStreamController, r2);
|
||
ReadableByteStreamControllerError(branch2._readableStreamController, r2);
|
||
if (!canceled1 || !canceled2) {
|
||
resolveCancelPromise(void 0);
|
||
}
|
||
return null;
|
||
});
|
||
}
|
||
function pullWithDefaultReader() {
|
||
if (IsReadableStreamBYOBReader(reader)) {
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
reader = AcquireReadableStreamDefaultReader(stream);
|
||
forwardReaderError(reader);
|
||
}
|
||
const readRequest = {
|
||
_chunkSteps: (chunk) => {
|
||
_queueMicrotask(() => {
|
||
readAgainForBranch1 = false;
|
||
readAgainForBranch2 = false;
|
||
const chunk1 = chunk;
|
||
let chunk2 = chunk;
|
||
if (!canceled1 && !canceled2) {
|
||
try {
|
||
chunk2 = CloneAsUint8Array(chunk);
|
||
} catch (cloneE) {
|
||
ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);
|
||
ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);
|
||
resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
|
||
return;
|
||
}
|
||
}
|
||
if (!canceled1) {
|
||
ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);
|
||
}
|
||
if (!canceled2) {
|
||
ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);
|
||
}
|
||
reading = false;
|
||
if (readAgainForBranch1) {
|
||
pull1Algorithm();
|
||
} else if (readAgainForBranch2) {
|
||
pull2Algorithm();
|
||
}
|
||
});
|
||
},
|
||
_closeSteps: () => {
|
||
reading = false;
|
||
if (!canceled1) {
|
||
ReadableByteStreamControllerClose(branch1._readableStreamController);
|
||
}
|
||
if (!canceled2) {
|
||
ReadableByteStreamControllerClose(branch2._readableStreamController);
|
||
}
|
||
if (branch1._readableStreamController._pendingPullIntos.length > 0) {
|
||
ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);
|
||
}
|
||
if (branch2._readableStreamController._pendingPullIntos.length > 0) {
|
||
ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);
|
||
}
|
||
if (!canceled1 || !canceled2) {
|
||
resolveCancelPromise(void 0);
|
||
}
|
||
},
|
||
_errorSteps: () => {
|
||
reading = false;
|
||
}
|
||
};
|
||
ReadableStreamDefaultReaderRead(reader, readRequest);
|
||
}
|
||
function pullWithBYOBReader(view, forBranch2) {
|
||
if (IsReadableStreamDefaultReader(reader)) {
|
||
ReadableStreamReaderGenericRelease(reader);
|
||
reader = AcquireReadableStreamBYOBReader(stream);
|
||
forwardReaderError(reader);
|
||
}
|
||
const byobBranch = forBranch2 ? branch2 : branch1;
|
||
const otherBranch = forBranch2 ? branch1 : branch2;
|
||
const readIntoRequest = {
|
||
_chunkSteps: (chunk) => {
|
||
_queueMicrotask(() => {
|
||
readAgainForBranch1 = false;
|
||
readAgainForBranch2 = false;
|
||
const byobCanceled = forBranch2 ? canceled2 : canceled1;
|
||
const otherCanceled = forBranch2 ? canceled1 : canceled2;
|
||
if (!otherCanceled) {
|
||
let clonedChunk;
|
||
try {
|
||
clonedChunk = CloneAsUint8Array(chunk);
|
||
} catch (cloneE) {
|
||
ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);
|
||
ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);
|
||
resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
|
||
return;
|
||
}
|
||
if (!byobCanceled) {
|
||
ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
|
||
}
|
||
ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);
|
||
} else if (!byobCanceled) {
|
||
ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
|
||
}
|
||
reading = false;
|
||
if (readAgainForBranch1) {
|
||
pull1Algorithm();
|
||
} else if (readAgainForBranch2) {
|
||
pull2Algorithm();
|
||
}
|
||
});
|
||
},
|
||
_closeSteps: (chunk) => {
|
||
reading = false;
|
||
const byobCanceled = forBranch2 ? canceled2 : canceled1;
|
||
const otherCanceled = forBranch2 ? canceled1 : canceled2;
|
||
if (!byobCanceled) {
|
||
ReadableByteStreamControllerClose(byobBranch._readableStreamController);
|
||
}
|
||
if (!otherCanceled) {
|
||
ReadableByteStreamControllerClose(otherBranch._readableStreamController);
|
||
}
|
||
if (chunk !== void 0) {
|
||
if (!byobCanceled) {
|
||
ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
|
||
}
|
||
if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {
|
||
ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);
|
||
}
|
||
}
|
||
if (!byobCanceled || !otherCanceled) {
|
||
resolveCancelPromise(void 0);
|
||
}
|
||
},
|
||
_errorSteps: () => {
|
||
reading = false;
|
||
}
|
||
};
|
||
ReadableStreamBYOBReaderRead(reader, view, 1, readIntoRequest);
|
||
}
|
||
function pull1Algorithm() {
|
||
if (reading) {
|
||
readAgainForBranch1 = true;
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
reading = true;
|
||
const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);
|
||
if (byobRequest === null) {
|
||
pullWithDefaultReader();
|
||
} else {
|
||
pullWithBYOBReader(byobRequest._view, false);
|
||
}
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
function pull2Algorithm() {
|
||
if (reading) {
|
||
readAgainForBranch2 = true;
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
reading = true;
|
||
const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);
|
||
if (byobRequest === null) {
|
||
pullWithDefaultReader();
|
||
} else {
|
||
pullWithBYOBReader(byobRequest._view, true);
|
||
}
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
function cancel1Algorithm(reason) {
|
||
canceled1 = true;
|
||
reason1 = reason;
|
||
if (canceled2) {
|
||
const compositeReason = CreateArrayFromList([reason1, reason2]);
|
||
const cancelResult = ReadableStreamCancel(stream, compositeReason);
|
||
resolveCancelPromise(cancelResult);
|
||
}
|
||
return cancelPromise;
|
||
}
|
||
function cancel2Algorithm(reason) {
|
||
canceled2 = true;
|
||
reason2 = reason;
|
||
if (canceled1) {
|
||
const compositeReason = CreateArrayFromList([reason1, reason2]);
|
||
const cancelResult = ReadableStreamCancel(stream, compositeReason);
|
||
resolveCancelPromise(cancelResult);
|
||
}
|
||
return cancelPromise;
|
||
}
|
||
function startAlgorithm() {
|
||
return;
|
||
}
|
||
branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);
|
||
branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);
|
||
forwardReaderError(reader);
|
||
return [branch1, branch2];
|
||
}
|
||
function isReadableStreamLike(stream) {
|
||
return typeIsObject(stream) && typeof stream.getReader !== "undefined";
|
||
}
|
||
function ReadableStreamFrom(source) {
|
||
if (isReadableStreamLike(source)) {
|
||
return ReadableStreamFromDefaultReader(source.getReader());
|
||
}
|
||
return ReadableStreamFromIterable(source);
|
||
}
|
||
function ReadableStreamFromIterable(asyncIterable) {
|
||
let stream;
|
||
const iteratorRecord = GetIterator(asyncIterable, "async");
|
||
const startAlgorithm = noop2;
|
||
function pullAlgorithm() {
|
||
let nextResult;
|
||
try {
|
||
nextResult = IteratorNext(iteratorRecord);
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
const nextPromise = promiseResolvedWith(nextResult);
|
||
return transformPromiseWith(nextPromise, (iterResult) => {
|
||
if (!typeIsObject(iterResult)) {
|
||
throw new TypeError("The promise returned by the iterator.next() method must fulfill with an object");
|
||
}
|
||
const done = IteratorComplete(iterResult);
|
||
if (done) {
|
||
ReadableStreamDefaultControllerClose(stream._readableStreamController);
|
||
} else {
|
||
const value = IteratorValue(iterResult);
|
||
ReadableStreamDefaultControllerEnqueue(stream._readableStreamController, value);
|
||
}
|
||
});
|
||
}
|
||
function cancelAlgorithm(reason) {
|
||
const iterator = iteratorRecord.iterator;
|
||
let returnMethod;
|
||
try {
|
||
returnMethod = GetMethod(iterator, "return");
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
if (returnMethod === void 0) {
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
let returnResult;
|
||
try {
|
||
returnResult = reflectCall(returnMethod, iterator, [reason]);
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
const returnPromise = promiseResolvedWith(returnResult);
|
||
return transformPromiseWith(returnPromise, (iterResult) => {
|
||
if (!typeIsObject(iterResult)) {
|
||
throw new TypeError("The promise returned by the iterator.return() method must fulfill with an object");
|
||
}
|
||
return void 0;
|
||
});
|
||
}
|
||
stream = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, 0);
|
||
return stream;
|
||
}
|
||
function ReadableStreamFromDefaultReader(reader) {
|
||
let stream;
|
||
const startAlgorithm = noop2;
|
||
function pullAlgorithm() {
|
||
let readPromise;
|
||
try {
|
||
readPromise = reader.read();
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
return transformPromiseWith(readPromise, (readResult) => {
|
||
if (!typeIsObject(readResult)) {
|
||
throw new TypeError("The promise returned by the reader.read() method must fulfill with an object");
|
||
}
|
||
if (readResult.done) {
|
||
ReadableStreamDefaultControllerClose(stream._readableStreamController);
|
||
} else {
|
||
const value = readResult.value;
|
||
ReadableStreamDefaultControllerEnqueue(stream._readableStreamController, value);
|
||
}
|
||
});
|
||
}
|
||
function cancelAlgorithm(reason) {
|
||
try {
|
||
return promiseResolvedWith(reader.cancel(reason));
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
}
|
||
stream = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, 0);
|
||
return stream;
|
||
}
|
||
function convertUnderlyingDefaultOrByteSource(source, context) {
|
||
assertDictionary(source, context);
|
||
const original = source;
|
||
const autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;
|
||
const cancel = original === null || original === void 0 ? void 0 : original.cancel;
|
||
const pull = original === null || original === void 0 ? void 0 : original.pull;
|
||
const start = original === null || original === void 0 ? void 0 : original.start;
|
||
const type = original === null || original === void 0 ? void 0 : original.type;
|
||
return {
|
||
autoAllocateChunkSize: autoAllocateChunkSize === void 0 ? void 0 : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, `${context} has member 'autoAllocateChunkSize' that`),
|
||
cancel: cancel === void 0 ? void 0 : convertUnderlyingSourceCancelCallback(cancel, original, `${context} has member 'cancel' that`),
|
||
pull: pull === void 0 ? void 0 : convertUnderlyingSourcePullCallback(pull, original, `${context} has member 'pull' that`),
|
||
start: start === void 0 ? void 0 : convertUnderlyingSourceStartCallback(start, original, `${context} has member 'start' that`),
|
||
type: type === void 0 ? void 0 : convertReadableStreamType(type, `${context} has member 'type' that`)
|
||
};
|
||
}
|
||
function convertUnderlyingSourceCancelCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (reason) => promiseCall(fn, original, [reason]);
|
||
}
|
||
function convertUnderlyingSourcePullCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (controller) => promiseCall(fn, original, [controller]);
|
||
}
|
||
function convertUnderlyingSourceStartCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (controller) => reflectCall(fn, original, [controller]);
|
||
}
|
||
function convertReadableStreamType(type, context) {
|
||
type = `${type}`;
|
||
if (type !== "bytes") {
|
||
throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);
|
||
}
|
||
return type;
|
||
}
|
||
function convertIteratorOptions(options, context) {
|
||
assertDictionary(options, context);
|
||
const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
|
||
return { preventCancel: Boolean(preventCancel) };
|
||
}
|
||
function convertPipeOptions(options, context) {
|
||
assertDictionary(options, context);
|
||
const preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;
|
||
const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
|
||
const preventClose = options === null || options === void 0 ? void 0 : options.preventClose;
|
||
const signal = options === null || options === void 0 ? void 0 : options.signal;
|
||
if (signal !== void 0) {
|
||
assertAbortSignal(signal, `${context} has member 'signal' that`);
|
||
}
|
||
return {
|
||
preventAbort: Boolean(preventAbort),
|
||
preventCancel: Boolean(preventCancel),
|
||
preventClose: Boolean(preventClose),
|
||
signal
|
||
};
|
||
}
|
||
function assertAbortSignal(signal, context) {
|
||
if (!isAbortSignal2(signal)) {
|
||
throw new TypeError(`${context} is not an AbortSignal.`);
|
||
}
|
||
}
|
||
function convertReadableWritablePair(pair, context) {
|
||
assertDictionary(pair, context);
|
||
const readable = pair === null || pair === void 0 ? void 0 : pair.readable;
|
||
assertRequiredField(readable, "readable", "ReadableWritablePair");
|
||
assertReadableStream(readable, `${context} has member 'readable' that`);
|
||
const writable = pair === null || pair === void 0 ? void 0 : pair.writable;
|
||
assertRequiredField(writable, "writable", "ReadableWritablePair");
|
||
assertWritableStream(writable, `${context} has member 'writable' that`);
|
||
return { readable, writable };
|
||
}
|
||
class ReadableStream2 {
|
||
constructor(rawUnderlyingSource = {}, rawStrategy = {}) {
|
||
if (rawUnderlyingSource === void 0) {
|
||
rawUnderlyingSource = null;
|
||
} else {
|
||
assertObject(rawUnderlyingSource, "First parameter");
|
||
}
|
||
const strategy = convertQueuingStrategy(rawStrategy, "Second parameter");
|
||
const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, "First parameter");
|
||
InitializeReadableStream(this);
|
||
if (underlyingSource.type === "bytes") {
|
||
if (strategy.size !== void 0) {
|
||
throw new RangeError("The strategy for a byte stream cannot have a size function");
|
||
}
|
||
const highWaterMark = ExtractHighWaterMark(strategy, 0);
|
||
SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);
|
||
} else {
|
||
const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
|
||
const highWaterMark = ExtractHighWaterMark(strategy, 1);
|
||
SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);
|
||
}
|
||
}
|
||
/**
|
||
* Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.
|
||
*/
|
||
get locked() {
|
||
if (!IsReadableStream(this)) {
|
||
throw streamBrandCheckException$1("locked");
|
||
}
|
||
return IsReadableStreamLocked(this);
|
||
}
|
||
/**
|
||
* Cancels the stream, signaling a loss of interest in the stream by a consumer.
|
||
*
|
||
* The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}
|
||
* method, which might or might not use it.
|
||
*/
|
||
cancel(reason = void 0) {
|
||
if (!IsReadableStream(this)) {
|
||
return promiseRejectedWith(streamBrandCheckException$1("cancel"));
|
||
}
|
||
if (IsReadableStreamLocked(this)) {
|
||
return promiseRejectedWith(new TypeError("Cannot cancel a stream that already has a reader"));
|
||
}
|
||
return ReadableStreamCancel(this, reason);
|
||
}
|
||
getReader(rawOptions = void 0) {
|
||
if (!IsReadableStream(this)) {
|
||
throw streamBrandCheckException$1("getReader");
|
||
}
|
||
const options = convertReaderOptions(rawOptions, "First parameter");
|
||
if (options.mode === void 0) {
|
||
return AcquireReadableStreamDefaultReader(this);
|
||
}
|
||
return AcquireReadableStreamBYOBReader(this);
|
||
}
|
||
pipeThrough(rawTransform, rawOptions = {}) {
|
||
if (!IsReadableStream(this)) {
|
||
throw streamBrandCheckException$1("pipeThrough");
|
||
}
|
||
assertRequiredArgument(rawTransform, 1, "pipeThrough");
|
||
const transform = convertReadableWritablePair(rawTransform, "First parameter");
|
||
const options = convertPipeOptions(rawOptions, "Second parameter");
|
||
if (IsReadableStreamLocked(this)) {
|
||
throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");
|
||
}
|
||
if (IsWritableStreamLocked(transform.writable)) {
|
||
throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");
|
||
}
|
||
const promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
|
||
setPromiseIsHandledToTrue(promise);
|
||
return transform.readable;
|
||
}
|
||
pipeTo(destination, rawOptions = {}) {
|
||
if (!IsReadableStream(this)) {
|
||
return promiseRejectedWith(streamBrandCheckException$1("pipeTo"));
|
||
}
|
||
if (destination === void 0) {
|
||
return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);
|
||
}
|
||
if (!IsWritableStream(destination)) {
|
||
return promiseRejectedWith(new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`));
|
||
}
|
||
let options;
|
||
try {
|
||
options = convertPipeOptions(rawOptions, "Second parameter");
|
||
} catch (e2) {
|
||
return promiseRejectedWith(e2);
|
||
}
|
||
if (IsReadableStreamLocked(this)) {
|
||
return promiseRejectedWith(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream"));
|
||
}
|
||
if (IsWritableStreamLocked(destination)) {
|
||
return promiseRejectedWith(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream"));
|
||
}
|
||
return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
|
||
}
|
||
/**
|
||
* Tees this readable stream, returning a two-element array containing the two resulting branches as
|
||
* new {@link ReadableStream} instances.
|
||
*
|
||
* Teeing a stream will lock it, preventing any other consumer from acquiring a reader.
|
||
* To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be
|
||
* propagated to the stream's underlying source.
|
||
*
|
||
* Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,
|
||
* this could allow interference between the two branches.
|
||
*/
|
||
tee() {
|
||
if (!IsReadableStream(this)) {
|
||
throw streamBrandCheckException$1("tee");
|
||
}
|
||
const branches = ReadableStreamTee(this);
|
||
return CreateArrayFromList(branches);
|
||
}
|
||
values(rawOptions = void 0) {
|
||
if (!IsReadableStream(this)) {
|
||
throw streamBrandCheckException$1("values");
|
||
}
|
||
const options = convertIteratorOptions(rawOptions, "First parameter");
|
||
return AcquireReadableStreamAsyncIterator(this, options.preventCancel);
|
||
}
|
||
[SymbolAsyncIterator](options) {
|
||
return this.values(options);
|
||
}
|
||
/**
|
||
* Creates a new ReadableStream wrapping the provided iterable or async iterable.
|
||
*
|
||
* This can be used to adapt various kinds of objects into a readable stream,
|
||
* such as an array, an async generator, or a Node.js readable stream.
|
||
*/
|
||
static from(asyncIterable) {
|
||
return ReadableStreamFrom(asyncIterable);
|
||
}
|
||
}
|
||
Object.defineProperties(ReadableStream2, {
|
||
from: { enumerable: true }
|
||
});
|
||
Object.defineProperties(ReadableStream2.prototype, {
|
||
cancel: { enumerable: true },
|
||
getReader: { enumerable: true },
|
||
pipeThrough: { enumerable: true },
|
||
pipeTo: { enumerable: true },
|
||
tee: { enumerable: true },
|
||
values: { enumerable: true },
|
||
locked: { enumerable: true }
|
||
});
|
||
setFunctionName(ReadableStream2.from, "from");
|
||
setFunctionName(ReadableStream2.prototype.cancel, "cancel");
|
||
setFunctionName(ReadableStream2.prototype.getReader, "getReader");
|
||
setFunctionName(ReadableStream2.prototype.pipeThrough, "pipeThrough");
|
||
setFunctionName(ReadableStream2.prototype.pipeTo, "pipeTo");
|
||
setFunctionName(ReadableStream2.prototype.tee, "tee");
|
||
setFunctionName(ReadableStream2.prototype.values, "values");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ReadableStream2.prototype, Symbol.toStringTag, {
|
||
value: "ReadableStream",
|
||
configurable: true
|
||
});
|
||
}
|
||
Object.defineProperty(ReadableStream2.prototype, SymbolAsyncIterator, {
|
||
value: ReadableStream2.prototype.values,
|
||
writable: true,
|
||
configurable: true
|
||
});
|
||
function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
|
||
const stream = Object.create(ReadableStream2.prototype);
|
||
InitializeReadableStream(stream);
|
||
const controller = Object.create(ReadableStreamDefaultController.prototype);
|
||
SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
|
||
return stream;
|
||
}
|
||
function CreateReadableByteStream(startAlgorithm, pullAlgorithm, cancelAlgorithm) {
|
||
const stream = Object.create(ReadableStream2.prototype);
|
||
InitializeReadableStream(stream);
|
||
const controller = Object.create(ReadableByteStreamController.prototype);
|
||
SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, void 0);
|
||
return stream;
|
||
}
|
||
function InitializeReadableStream(stream) {
|
||
stream._state = "readable";
|
||
stream._reader = void 0;
|
||
stream._storedError = void 0;
|
||
stream._disturbed = false;
|
||
}
|
||
function IsReadableStream(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_readableStreamController")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ReadableStream2;
|
||
}
|
||
function IsReadableStreamLocked(stream) {
|
||
if (stream._reader === void 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function ReadableStreamCancel(stream, reason) {
|
||
stream._disturbed = true;
|
||
if (stream._state === "closed") {
|
||
return promiseResolvedWith(void 0);
|
||
}
|
||
if (stream._state === "errored") {
|
||
return promiseRejectedWith(stream._storedError);
|
||
}
|
||
ReadableStreamClose(stream);
|
||
const reader = stream._reader;
|
||
if (reader !== void 0 && IsReadableStreamBYOBReader(reader)) {
|
||
const readIntoRequests = reader._readIntoRequests;
|
||
reader._readIntoRequests = new SimpleQueue();
|
||
readIntoRequests.forEach((readIntoRequest) => {
|
||
readIntoRequest._closeSteps(void 0);
|
||
});
|
||
}
|
||
const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);
|
||
return transformPromiseWith(sourceCancelPromise, noop2);
|
||
}
|
||
function ReadableStreamClose(stream) {
|
||
stream._state = "closed";
|
||
const reader = stream._reader;
|
||
if (reader === void 0) {
|
||
return;
|
||
}
|
||
defaultReaderClosedPromiseResolve(reader);
|
||
if (IsReadableStreamDefaultReader(reader)) {
|
||
const readRequests = reader._readRequests;
|
||
reader._readRequests = new SimpleQueue();
|
||
readRequests.forEach((readRequest) => {
|
||
readRequest._closeSteps();
|
||
});
|
||
}
|
||
}
|
||
function ReadableStreamError(stream, e2) {
|
||
stream._state = "errored";
|
||
stream._storedError = e2;
|
||
const reader = stream._reader;
|
||
if (reader === void 0) {
|
||
return;
|
||
}
|
||
defaultReaderClosedPromiseReject(reader, e2);
|
||
if (IsReadableStreamDefaultReader(reader)) {
|
||
ReadableStreamDefaultReaderErrorReadRequests(reader, e2);
|
||
} else {
|
||
ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e2);
|
||
}
|
||
}
|
||
function streamBrandCheckException$1(name) {
|
||
return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);
|
||
}
|
||
function convertQueuingStrategyInit(init, context) {
|
||
assertDictionary(init, context);
|
||
const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
|
||
assertRequiredField(highWaterMark, "highWaterMark", "QueuingStrategyInit");
|
||
return {
|
||
highWaterMark: convertUnrestrictedDouble(highWaterMark)
|
||
};
|
||
}
|
||
const byteLengthSizeFunction = (chunk) => {
|
||
return chunk.byteLength;
|
||
};
|
||
setFunctionName(byteLengthSizeFunction, "size");
|
||
class ByteLengthQueuingStrategy {
|
||
constructor(options) {
|
||
assertRequiredArgument(options, 1, "ByteLengthQueuingStrategy");
|
||
options = convertQueuingStrategyInit(options, "First parameter");
|
||
this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;
|
||
}
|
||
/**
|
||
* Returns the high water mark provided to the constructor.
|
||
*/
|
||
get highWaterMark() {
|
||
if (!IsByteLengthQueuingStrategy(this)) {
|
||
throw byteLengthBrandCheckException("highWaterMark");
|
||
}
|
||
return this._byteLengthQueuingStrategyHighWaterMark;
|
||
}
|
||
/**
|
||
* Measures the size of `chunk` by returning the value of its `byteLength` property.
|
||
*/
|
||
get size() {
|
||
if (!IsByteLengthQueuingStrategy(this)) {
|
||
throw byteLengthBrandCheckException("size");
|
||
}
|
||
return byteLengthSizeFunction;
|
||
}
|
||
}
|
||
Object.defineProperties(ByteLengthQueuingStrategy.prototype, {
|
||
highWaterMark: { enumerable: true },
|
||
size: { enumerable: true }
|
||
});
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {
|
||
value: "ByteLengthQueuingStrategy",
|
||
configurable: true
|
||
});
|
||
}
|
||
function byteLengthBrandCheckException(name) {
|
||
return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);
|
||
}
|
||
function IsByteLengthQueuingStrategy(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_byteLengthQueuingStrategyHighWaterMark")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof ByteLengthQueuingStrategy;
|
||
}
|
||
const countSizeFunction = () => {
|
||
return 1;
|
||
};
|
||
setFunctionName(countSizeFunction, "size");
|
||
class CountQueuingStrategy {
|
||
constructor(options) {
|
||
assertRequiredArgument(options, 1, "CountQueuingStrategy");
|
||
options = convertQueuingStrategyInit(options, "First parameter");
|
||
this._countQueuingStrategyHighWaterMark = options.highWaterMark;
|
||
}
|
||
/**
|
||
* Returns the high water mark provided to the constructor.
|
||
*/
|
||
get highWaterMark() {
|
||
if (!IsCountQueuingStrategy(this)) {
|
||
throw countBrandCheckException("highWaterMark");
|
||
}
|
||
return this._countQueuingStrategyHighWaterMark;
|
||
}
|
||
/**
|
||
* Measures the size of `chunk` by always returning 1.
|
||
* This ensures that the total queue size is a count of the number of chunks in the queue.
|
||
*/
|
||
get size() {
|
||
if (!IsCountQueuingStrategy(this)) {
|
||
throw countBrandCheckException("size");
|
||
}
|
||
return countSizeFunction;
|
||
}
|
||
}
|
||
Object.defineProperties(CountQueuingStrategy.prototype, {
|
||
highWaterMark: { enumerable: true },
|
||
size: { enumerable: true }
|
||
});
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {
|
||
value: "CountQueuingStrategy",
|
||
configurable: true
|
||
});
|
||
}
|
||
function countBrandCheckException(name) {
|
||
return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);
|
||
}
|
||
function IsCountQueuingStrategy(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_countQueuingStrategyHighWaterMark")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof CountQueuingStrategy;
|
||
}
|
||
function convertTransformer(original, context) {
|
||
assertDictionary(original, context);
|
||
const cancel = original === null || original === void 0 ? void 0 : original.cancel;
|
||
const flush = original === null || original === void 0 ? void 0 : original.flush;
|
||
const readableType = original === null || original === void 0 ? void 0 : original.readableType;
|
||
const start = original === null || original === void 0 ? void 0 : original.start;
|
||
const transform = original === null || original === void 0 ? void 0 : original.transform;
|
||
const writableType = original === null || original === void 0 ? void 0 : original.writableType;
|
||
return {
|
||
cancel: cancel === void 0 ? void 0 : convertTransformerCancelCallback(cancel, original, `${context} has member 'cancel' that`),
|
||
flush: flush === void 0 ? void 0 : convertTransformerFlushCallback(flush, original, `${context} has member 'flush' that`),
|
||
readableType,
|
||
start: start === void 0 ? void 0 : convertTransformerStartCallback(start, original, `${context} has member 'start' that`),
|
||
transform: transform === void 0 ? void 0 : convertTransformerTransformCallback(transform, original, `${context} has member 'transform' that`),
|
||
writableType
|
||
};
|
||
}
|
||
function convertTransformerFlushCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (controller) => promiseCall(fn, original, [controller]);
|
||
}
|
||
function convertTransformerStartCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (controller) => reflectCall(fn, original, [controller]);
|
||
}
|
||
function convertTransformerTransformCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
|
||
}
|
||
function convertTransformerCancelCallback(fn, original, context) {
|
||
assertFunction(fn, context);
|
||
return (reason) => promiseCall(fn, original, [reason]);
|
||
}
|
||
class TransformStream {
|
||
constructor(rawTransformer = {}, rawWritableStrategy = {}, rawReadableStrategy = {}) {
|
||
if (rawTransformer === void 0) {
|
||
rawTransformer = null;
|
||
}
|
||
const writableStrategy = convertQueuingStrategy(rawWritableStrategy, "Second parameter");
|
||
const readableStrategy = convertQueuingStrategy(rawReadableStrategy, "Third parameter");
|
||
const transformer = convertTransformer(rawTransformer, "First parameter");
|
||
if (transformer.readableType !== void 0) {
|
||
throw new RangeError("Invalid readableType specified");
|
||
}
|
||
if (transformer.writableType !== void 0) {
|
||
throw new RangeError("Invalid writableType specified");
|
||
}
|
||
const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);
|
||
const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);
|
||
const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
|
||
const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
|
||
let startPromise_resolve;
|
||
const startPromise = newPromise((resolve) => {
|
||
startPromise_resolve = resolve;
|
||
});
|
||
InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
|
||
SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
|
||
if (transformer.start !== void 0) {
|
||
startPromise_resolve(transformer.start(this._transformStreamController));
|
||
} else {
|
||
startPromise_resolve(void 0);
|
||
}
|
||
}
|
||
/**
|
||
* The readable side of the transform stream.
|
||
*/
|
||
get readable() {
|
||
if (!IsTransformStream(this)) {
|
||
throw streamBrandCheckException("readable");
|
||
}
|
||
return this._readable;
|
||
}
|
||
/**
|
||
* The writable side of the transform stream.
|
||
*/
|
||
get writable() {
|
||
if (!IsTransformStream(this)) {
|
||
throw streamBrandCheckException("writable");
|
||
}
|
||
return this._writable;
|
||
}
|
||
}
|
||
Object.defineProperties(TransformStream.prototype, {
|
||
readable: { enumerable: true },
|
||
writable: { enumerable: true }
|
||
});
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {
|
||
value: "TransformStream",
|
||
configurable: true
|
||
});
|
||
}
|
||
function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {
|
||
function startAlgorithm() {
|
||
return startPromise;
|
||
}
|
||
function writeAlgorithm(chunk) {
|
||
return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);
|
||
}
|
||
function abortAlgorithm(reason) {
|
||
return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);
|
||
}
|
||
function closeAlgorithm() {
|
||
return TransformStreamDefaultSinkCloseAlgorithm(stream);
|
||
}
|
||
stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);
|
||
function pullAlgorithm() {
|
||
return TransformStreamDefaultSourcePullAlgorithm(stream);
|
||
}
|
||
function cancelAlgorithm(reason) {
|
||
return TransformStreamDefaultSourceCancelAlgorithm(stream, reason);
|
||
}
|
||
stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
|
||
stream._backpressure = void 0;
|
||
stream._backpressureChangePromise = void 0;
|
||
stream._backpressureChangePromise_resolve = void 0;
|
||
TransformStreamSetBackpressure(stream, true);
|
||
stream._transformStreamController = void 0;
|
||
}
|
||
function IsTransformStream(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_transformStreamController")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof TransformStream;
|
||
}
|
||
function TransformStreamError(stream, e2) {
|
||
ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e2);
|
||
TransformStreamErrorWritableAndUnblockWrite(stream, e2);
|
||
}
|
||
function TransformStreamErrorWritableAndUnblockWrite(stream, e2) {
|
||
TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);
|
||
WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e2);
|
||
TransformStreamUnblockWrite(stream);
|
||
}
|
||
function TransformStreamUnblockWrite(stream) {
|
||
if (stream._backpressure) {
|
||
TransformStreamSetBackpressure(stream, false);
|
||
}
|
||
}
|
||
function TransformStreamSetBackpressure(stream, backpressure) {
|
||
if (stream._backpressureChangePromise !== void 0) {
|
||
stream._backpressureChangePromise_resolve();
|
||
}
|
||
stream._backpressureChangePromise = newPromise((resolve) => {
|
||
stream._backpressureChangePromise_resolve = resolve;
|
||
});
|
||
stream._backpressure = backpressure;
|
||
}
|
||
class TransformStreamDefaultController {
|
||
constructor() {
|
||
throw new TypeError("Illegal constructor");
|
||
}
|
||
/**
|
||
* Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.
|
||
*/
|
||
get desiredSize() {
|
||
if (!IsTransformStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException("desiredSize");
|
||
}
|
||
const readableController = this._controlledTransformStream._readable._readableStreamController;
|
||
return ReadableStreamDefaultControllerGetDesiredSize(readableController);
|
||
}
|
||
enqueue(chunk = void 0) {
|
||
if (!IsTransformStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException("enqueue");
|
||
}
|
||
TransformStreamDefaultControllerEnqueue(this, chunk);
|
||
}
|
||
/**
|
||
* Errors both the readable side and the writable side of the controlled transform stream, making all future
|
||
* interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.
|
||
*/
|
||
error(reason = void 0) {
|
||
if (!IsTransformStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException("error");
|
||
}
|
||
TransformStreamDefaultControllerError(this, reason);
|
||
}
|
||
/**
|
||
* Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the
|
||
* transformer only needs to consume a portion of the chunks written to the writable side.
|
||
*/
|
||
terminate() {
|
||
if (!IsTransformStreamDefaultController(this)) {
|
||
throw defaultControllerBrandCheckException("terminate");
|
||
}
|
||
TransformStreamDefaultControllerTerminate(this);
|
||
}
|
||
}
|
||
Object.defineProperties(TransformStreamDefaultController.prototype, {
|
||
enqueue: { enumerable: true },
|
||
error: { enumerable: true },
|
||
terminate: { enumerable: true },
|
||
desiredSize: { enumerable: true }
|
||
});
|
||
setFunctionName(TransformStreamDefaultController.prototype.enqueue, "enqueue");
|
||
setFunctionName(TransformStreamDefaultController.prototype.error, "error");
|
||
setFunctionName(TransformStreamDefaultController.prototype.terminate, "terminate");
|
||
if (typeof Symbol.toStringTag === "symbol") {
|
||
Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {
|
||
value: "TransformStreamDefaultController",
|
||
configurable: true
|
||
});
|
||
}
|
||
function IsTransformStreamDefaultController(x2) {
|
||
if (!typeIsObject(x2)) {
|
||
return false;
|
||
}
|
||
if (!Object.prototype.hasOwnProperty.call(x2, "_controlledTransformStream")) {
|
||
return false;
|
||
}
|
||
return x2 instanceof TransformStreamDefaultController;
|
||
}
|
||
function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm) {
|
||
controller._controlledTransformStream = stream;
|
||
stream._transformStreamController = controller;
|
||
controller._transformAlgorithm = transformAlgorithm;
|
||
controller._flushAlgorithm = flushAlgorithm;
|
||
controller._cancelAlgorithm = cancelAlgorithm;
|
||
controller._finishPromise = void 0;
|
||
controller._finishPromise_resolve = void 0;
|
||
controller._finishPromise_reject = void 0;
|
||
}
|
||
function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {
|
||
const controller = Object.create(TransformStreamDefaultController.prototype);
|
||
let transformAlgorithm;
|
||
let flushAlgorithm;
|
||
let cancelAlgorithm;
|
||
if (transformer.transform !== void 0) {
|
||
transformAlgorithm = (chunk) => transformer.transform(chunk, controller);
|
||
} else {
|
||
transformAlgorithm = (chunk) => {
|
||
try {
|
||
TransformStreamDefaultControllerEnqueue(controller, chunk);
|
||
return promiseResolvedWith(void 0);
|
||
} catch (transformResultE) {
|
||
return promiseRejectedWith(transformResultE);
|
||
}
|
||
};
|
||
}
|
||
if (transformer.flush !== void 0) {
|
||
flushAlgorithm = () => transformer.flush(controller);
|
||
} else {
|
||
flushAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
if (transformer.cancel !== void 0) {
|
||
cancelAlgorithm = (reason) => transformer.cancel(reason);
|
||
} else {
|
||
cancelAlgorithm = () => promiseResolvedWith(void 0);
|
||
}
|
||
SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm);
|
||
}
|
||
function TransformStreamDefaultControllerClearAlgorithms(controller) {
|
||
controller._transformAlgorithm = void 0;
|
||
controller._flushAlgorithm = void 0;
|
||
controller._cancelAlgorithm = void 0;
|
||
}
|
||
function TransformStreamDefaultControllerEnqueue(controller, chunk) {
|
||
const stream = controller._controlledTransformStream;
|
||
const readableController = stream._readable._readableStreamController;
|
||
if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {
|
||
throw new TypeError("Readable side is not in a state that permits enqueue");
|
||
}
|
||
try {
|
||
ReadableStreamDefaultControllerEnqueue(readableController, chunk);
|
||
} catch (e2) {
|
||
TransformStreamErrorWritableAndUnblockWrite(stream, e2);
|
||
throw stream._readable._storedError;
|
||
}
|
||
const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);
|
||
if (backpressure !== stream._backpressure) {
|
||
TransformStreamSetBackpressure(stream, true);
|
||
}
|
||
}
|
||
function TransformStreamDefaultControllerError(controller, e2) {
|
||
TransformStreamError(controller._controlledTransformStream, e2);
|
||
}
|
||
function TransformStreamDefaultControllerPerformTransform(controller, chunk) {
|
||
const transformPromise = controller._transformAlgorithm(chunk);
|
||
return transformPromiseWith(transformPromise, void 0, (r2) => {
|
||
TransformStreamError(controller._controlledTransformStream, r2);
|
||
throw r2;
|
||
});
|
||
}
|
||
function TransformStreamDefaultControllerTerminate(controller) {
|
||
const stream = controller._controlledTransformStream;
|
||
const readableController = stream._readable._readableStreamController;
|
||
ReadableStreamDefaultControllerClose(readableController);
|
||
const error = new TypeError("TransformStream terminated");
|
||
TransformStreamErrorWritableAndUnblockWrite(stream, error);
|
||
}
|
||
function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {
|
||
const controller = stream._transformStreamController;
|
||
if (stream._backpressure) {
|
||
const backpressureChangePromise = stream._backpressureChangePromise;
|
||
return transformPromiseWith(backpressureChangePromise, () => {
|
||
const writable = stream._writable;
|
||
const state = writable._state;
|
||
if (state === "erroring") {
|
||
throw writable._storedError;
|
||
}
|
||
return TransformStreamDefaultControllerPerformTransform(controller, chunk);
|
||
});
|
||
}
|
||
return TransformStreamDefaultControllerPerformTransform(controller, chunk);
|
||
}
|
||
function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {
|
||
const controller = stream._transformStreamController;
|
||
if (controller._finishPromise !== void 0) {
|
||
return controller._finishPromise;
|
||
}
|
||
const readable = stream._readable;
|
||
controller._finishPromise = newPromise((resolve, reject) => {
|
||
controller._finishPromise_resolve = resolve;
|
||
controller._finishPromise_reject = reject;
|
||
});
|
||
const cancelPromise = controller._cancelAlgorithm(reason);
|
||
TransformStreamDefaultControllerClearAlgorithms(controller);
|
||
uponPromise(cancelPromise, () => {
|
||
if (readable._state === "errored") {
|
||
defaultControllerFinishPromiseReject(controller, readable._storedError);
|
||
} else {
|
||
ReadableStreamDefaultControllerError(readable._readableStreamController, reason);
|
||
defaultControllerFinishPromiseResolve(controller);
|
||
}
|
||
return null;
|
||
}, (r2) => {
|
||
ReadableStreamDefaultControllerError(readable._readableStreamController, r2);
|
||
defaultControllerFinishPromiseReject(controller, r2);
|
||
return null;
|
||
});
|
||
return controller._finishPromise;
|
||
}
|
||
function TransformStreamDefaultSinkCloseAlgorithm(stream) {
|
||
const controller = stream._transformStreamController;
|
||
if (controller._finishPromise !== void 0) {
|
||
return controller._finishPromise;
|
||
}
|
||
const readable = stream._readable;
|
||
controller._finishPromise = newPromise((resolve, reject) => {
|
||
controller._finishPromise_resolve = resolve;
|
||
controller._finishPromise_reject = reject;
|
||
});
|
||
const flushPromise = controller._flushAlgorithm();
|
||
TransformStreamDefaultControllerClearAlgorithms(controller);
|
||
uponPromise(flushPromise, () => {
|
||
if (readable._state === "errored") {
|
||
defaultControllerFinishPromiseReject(controller, readable._storedError);
|
||
} else {
|
||
ReadableStreamDefaultControllerClose(readable._readableStreamController);
|
||
defaultControllerFinishPromiseResolve(controller);
|
||
}
|
||
return null;
|
||
}, (r2) => {
|
||
ReadableStreamDefaultControllerError(readable._readableStreamController, r2);
|
||
defaultControllerFinishPromiseReject(controller, r2);
|
||
return null;
|
||
});
|
||
return controller._finishPromise;
|
||
}
|
||
function TransformStreamDefaultSourcePullAlgorithm(stream) {
|
||
TransformStreamSetBackpressure(stream, false);
|
||
return stream._backpressureChangePromise;
|
||
}
|
||
function TransformStreamDefaultSourceCancelAlgorithm(stream, reason) {
|
||
const controller = stream._transformStreamController;
|
||
if (controller._finishPromise !== void 0) {
|
||
return controller._finishPromise;
|
||
}
|
||
const writable = stream._writable;
|
||
controller._finishPromise = newPromise((resolve, reject) => {
|
||
controller._finishPromise_resolve = resolve;
|
||
controller._finishPromise_reject = reject;
|
||
});
|
||
const cancelPromise = controller._cancelAlgorithm(reason);
|
||
TransformStreamDefaultControllerClearAlgorithms(controller);
|
||
uponPromise(cancelPromise, () => {
|
||
if (writable._state === "errored") {
|
||
defaultControllerFinishPromiseReject(controller, writable._storedError);
|
||
} else {
|
||
WritableStreamDefaultControllerErrorIfNeeded(writable._writableStreamController, reason);
|
||
TransformStreamUnblockWrite(stream);
|
||
defaultControllerFinishPromiseResolve(controller);
|
||
}
|
||
return null;
|
||
}, (r2) => {
|
||
WritableStreamDefaultControllerErrorIfNeeded(writable._writableStreamController, r2);
|
||
TransformStreamUnblockWrite(stream);
|
||
defaultControllerFinishPromiseReject(controller, r2);
|
||
return null;
|
||
});
|
||
return controller._finishPromise;
|
||
}
|
||
function defaultControllerBrandCheckException(name) {
|
||
return new TypeError(`TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);
|
||
}
|
||
function defaultControllerFinishPromiseResolve(controller) {
|
||
if (controller._finishPromise_resolve === void 0) {
|
||
return;
|
||
}
|
||
controller._finishPromise_resolve();
|
||
controller._finishPromise_resolve = void 0;
|
||
controller._finishPromise_reject = void 0;
|
||
}
|
||
function defaultControllerFinishPromiseReject(controller, reason) {
|
||
if (controller._finishPromise_reject === void 0) {
|
||
return;
|
||
}
|
||
setPromiseIsHandledToTrue(controller._finishPromise);
|
||
controller._finishPromise_reject(reason);
|
||
controller._finishPromise_resolve = void 0;
|
||
controller._finishPromise_reject = void 0;
|
||
}
|
||
function streamBrandCheckException(name) {
|
||
return new TypeError(`TransformStream.prototype.${name} can only be used on a TransformStream`);
|
||
}
|
||
exports2.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;
|
||
exports2.CountQueuingStrategy = CountQueuingStrategy;
|
||
exports2.ReadableByteStreamController = ReadableByteStreamController;
|
||
exports2.ReadableStream = ReadableStream2;
|
||
exports2.ReadableStreamBYOBReader = ReadableStreamBYOBReader;
|
||
exports2.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;
|
||
exports2.ReadableStreamDefaultController = ReadableStreamDefaultController;
|
||
exports2.ReadableStreamDefaultReader = ReadableStreamDefaultReader;
|
||
exports2.TransformStream = TransformStream;
|
||
exports2.TransformStreamDefaultController = TransformStreamDefaultController;
|
||
exports2.WritableStream = WritableStream;
|
||
exports2.WritableStreamDefaultController = WritableStreamDefaultController;
|
||
exports2.WritableStreamDefaultWriter = WritableStreamDefaultWriter;
|
||
});
|
||
}
|
||
});
|
||
|
||
// node_modules/fetch-blob/streams.cjs
|
||
var require_streams = __commonJS({
|
||
"node_modules/fetch-blob/streams.cjs"() {
|
||
var POOL_SIZE2 = 65536;
|
||
if (!globalThis.ReadableStream) {
|
||
try {
|
||
const process2 = require("process");
|
||
const { emitWarning } = process2;
|
||
try {
|
||
process2.emitWarning = () => {
|
||
};
|
||
Object.assign(globalThis, require("stream/web"));
|
||
process2.emitWarning = emitWarning;
|
||
} catch (error) {
|
||
process2.emitWarning = emitWarning;
|
||
throw error;
|
||
}
|
||
} catch (error) {
|
||
Object.assign(globalThis, require_ponyfill_es2018());
|
||
}
|
||
}
|
||
try {
|
||
const { Blob: Blob2 } = require("buffer");
|
||
if (Blob2 && !Blob2.prototype.stream) {
|
||
Blob2.prototype.stream = function name(params) {
|
||
let position = 0;
|
||
const blob = this;
|
||
return new ReadableStream({
|
||
type: "bytes",
|
||
async pull(ctrl) {
|
||
const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE2));
|
||
const buffer = await chunk.arrayBuffer();
|
||
position += buffer.byteLength;
|
||
ctrl.enqueue(new Uint8Array(buffer));
|
||
if (position === blob.size) {
|
||
ctrl.close();
|
||
}
|
||
}
|
||
});
|
||
};
|
||
}
|
||
} catch (error) {
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/fetch-blob/index.js
|
||
async function* toIterator(parts, clone2 = true) {
|
||
for (const part of parts) {
|
||
if ("stream" in part) {
|
||
yield* (
|
||
/** @type {AsyncIterableIterator<Uint8Array>} */
|
||
part.stream()
|
||
);
|
||
} else if (ArrayBuffer.isView(part)) {
|
||
if (clone2) {
|
||
let position = part.byteOffset;
|
||
const end = part.byteOffset + part.byteLength;
|
||
while (position !== end) {
|
||
const size = Math.min(end - position, POOL_SIZE);
|
||
const chunk = part.buffer.slice(position, position + size);
|
||
position += chunk.byteLength;
|
||
yield new Uint8Array(chunk);
|
||
}
|
||
} else {
|
||
yield part;
|
||
}
|
||
} else {
|
||
let position = 0, b = (
|
||
/** @type {Blob} */
|
||
part
|
||
);
|
||
while (position !== b.size) {
|
||
const chunk = b.slice(position, Math.min(b.size, position + POOL_SIZE));
|
||
const buffer = await chunk.arrayBuffer();
|
||
position += buffer.byteLength;
|
||
yield new Uint8Array(buffer);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
var import_streams, POOL_SIZE, _parts, _type, _size, _endings, _a, _Blob, Blob, fetch_blob_default;
|
||
var init_fetch_blob = __esm({
|
||
"node_modules/fetch-blob/index.js"() {
|
||
import_streams = __toESM(require_streams(), 1);
|
||
POOL_SIZE = 65536;
|
||
_Blob = (_a = class {
|
||
/**
|
||
* The Blob() constructor returns a new Blob object. The content
|
||
* of the blob consists of the concatenation of the values given
|
||
* in the parameter array.
|
||
*
|
||
* @param {*} blobParts
|
||
* @param {{ type?: string, endings?: string }} [options]
|
||
*/
|
||
constructor(blobParts = [], options = {}) {
|
||
/** @type {Array.<(Blob|Uint8Array)>} */
|
||
__privateAdd(this, _parts, []);
|
||
__privateAdd(this, _type, "");
|
||
__privateAdd(this, _size, 0);
|
||
__privateAdd(this, _endings, "transparent");
|
||
if (typeof blobParts !== "object" || blobParts === null) {
|
||
throw new TypeError("Failed to construct 'Blob': The provided value cannot be converted to a sequence.");
|
||
}
|
||
if (typeof blobParts[Symbol.iterator] !== "function") {
|
||
throw new TypeError("Failed to construct 'Blob': The object must have a callable @@iterator property.");
|
||
}
|
||
if (typeof options !== "object" && typeof options !== "function") {
|
||
throw new TypeError("Failed to construct 'Blob': parameter 2 cannot convert to dictionary.");
|
||
}
|
||
if (options === null)
|
||
options = {};
|
||
const encoder = new TextEncoder();
|
||
for (const element of blobParts) {
|
||
let part;
|
||
if (ArrayBuffer.isView(element)) {
|
||
part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength));
|
||
} else if (element instanceof ArrayBuffer) {
|
||
part = new Uint8Array(element.slice(0));
|
||
} else if (element instanceof _a) {
|
||
part = element;
|
||
} else {
|
||
part = encoder.encode(`${element}`);
|
||
}
|
||
__privateSet(this, _size, __privateGet(this, _size) + (ArrayBuffer.isView(part) ? part.byteLength : part.size));
|
||
__privateGet(this, _parts).push(part);
|
||
}
|
||
__privateSet(this, _endings, `${options.endings === void 0 ? "transparent" : options.endings}`);
|
||
const type = options.type === void 0 ? "" : String(options.type);
|
||
__privateSet(this, _type, /^[\x20-\x7E]*$/.test(type) ? type : "");
|
||
}
|
||
/**
|
||
* The Blob interface's size property returns the
|
||
* size of the Blob in bytes.
|
||
*/
|
||
get size() {
|
||
return __privateGet(this, _size);
|
||
}
|
||
/**
|
||
* The type property of a Blob object returns the MIME type of the file.
|
||
*/
|
||
get type() {
|
||
return __privateGet(this, _type);
|
||
}
|
||
/**
|
||
* The text() method in the Blob interface returns a Promise
|
||
* that resolves with a string containing the contents of
|
||
* the blob, interpreted as UTF-8.
|
||
*
|
||
* @return {Promise<string>}
|
||
*/
|
||
async text() {
|
||
const decoder = new TextDecoder();
|
||
let str = "";
|
||
for await (const part of toIterator(__privateGet(this, _parts), false)) {
|
||
str += decoder.decode(part, { stream: true });
|
||
}
|
||
str += decoder.decode();
|
||
return str;
|
||
}
|
||
/**
|
||
* The arrayBuffer() method in the Blob interface returns a
|
||
* Promise that resolves with the contents of the blob as
|
||
* binary data contained in an ArrayBuffer.
|
||
*
|
||
* @return {Promise<ArrayBuffer>}
|
||
*/
|
||
async arrayBuffer() {
|
||
const data = new Uint8Array(this.size);
|
||
let offset = 0;
|
||
for await (const chunk of toIterator(__privateGet(this, _parts), false)) {
|
||
data.set(chunk, offset);
|
||
offset += chunk.length;
|
||
}
|
||
return data.buffer;
|
||
}
|
||
stream() {
|
||
const it = toIterator(__privateGet(this, _parts), true);
|
||
return new globalThis.ReadableStream({
|
||
// @ts-ignore
|
||
type: "bytes",
|
||
async pull(ctrl) {
|
||
const chunk = await it.next();
|
||
chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value);
|
||
},
|
||
async cancel() {
|
||
await it.return();
|
||
}
|
||
});
|
||
}
|
||
/**
|
||
* The Blob interface's slice() method creates and returns a
|
||
* new Blob object which contains data from a subset of the
|
||
* blob on which it's called.
|
||
*
|
||
* @param {number} [start]
|
||
* @param {number} [end]
|
||
* @param {string} [type]
|
||
*/
|
||
slice(start = 0, end = this.size, type = "") {
|
||
const { size } = this;
|
||
let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size);
|
||
let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size);
|
||
const span = Math.max(relativeEnd - relativeStart, 0);
|
||
const parts = __privateGet(this, _parts);
|
||
const blobParts = [];
|
||
let added = 0;
|
||
for (const part of parts) {
|
||
if (added >= span) {
|
||
break;
|
||
}
|
||
const size2 = ArrayBuffer.isView(part) ? part.byteLength : part.size;
|
||
if (relativeStart && size2 <= relativeStart) {
|
||
relativeStart -= size2;
|
||
relativeEnd -= size2;
|
||
} else {
|
||
let chunk;
|
||
if (ArrayBuffer.isView(part)) {
|
||
chunk = part.subarray(relativeStart, Math.min(size2, relativeEnd));
|
||
added += chunk.byteLength;
|
||
} else {
|
||
chunk = part.slice(relativeStart, Math.min(size2, relativeEnd));
|
||
added += chunk.size;
|
||
}
|
||
relativeEnd -= size2;
|
||
blobParts.push(chunk);
|
||
relativeStart = 0;
|
||
}
|
||
}
|
||
const blob = new _a([], { type: String(type).toLowerCase() });
|
||
__privateSet(blob, _size, span);
|
||
__privateSet(blob, _parts, blobParts);
|
||
return blob;
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return "Blob";
|
||
}
|
||
static [Symbol.hasInstance](object) {
|
||
return object && typeof object === "object" && typeof object.constructor === "function" && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && /^(Blob|File)$/.test(object[Symbol.toStringTag]);
|
||
}
|
||
}, _parts = new WeakMap(), _type = new WeakMap(), _size = new WeakMap(), _endings = new WeakMap(), _a);
|
||
Object.defineProperties(_Blob.prototype, {
|
||
size: { enumerable: true },
|
||
type: { enumerable: true },
|
||
slice: { enumerable: true }
|
||
});
|
||
Blob = _Blob;
|
||
fetch_blob_default = Blob;
|
||
}
|
||
});
|
||
|
||
// node_modules/fetch-blob/file.js
|
||
var _lastModified, _name, _a2, _File, File, file_default;
|
||
var init_file = __esm({
|
||
"node_modules/fetch-blob/file.js"() {
|
||
init_fetch_blob();
|
||
_File = (_a2 = class extends fetch_blob_default {
|
||
/**
|
||
* @param {*[]} fileBits
|
||
* @param {string} fileName
|
||
* @param {{lastModified?: number, type?: string}} options
|
||
*/
|
||
// @ts-ignore
|
||
constructor(fileBits, fileName, options = {}) {
|
||
if (arguments.length < 2) {
|
||
throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`);
|
||
}
|
||
super(fileBits, options);
|
||
__privateAdd(this, _lastModified, 0);
|
||
__privateAdd(this, _name, "");
|
||
if (options === null)
|
||
options = {};
|
||
const lastModified = options.lastModified === void 0 ? Date.now() : Number(options.lastModified);
|
||
if (!Number.isNaN(lastModified)) {
|
||
__privateSet(this, _lastModified, lastModified);
|
||
}
|
||
__privateSet(this, _name, String(fileName));
|
||
}
|
||
get name() {
|
||
return __privateGet(this, _name);
|
||
}
|
||
get lastModified() {
|
||
return __privateGet(this, _lastModified);
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return "File";
|
||
}
|
||
static [Symbol.hasInstance](object) {
|
||
return !!object && object instanceof fetch_blob_default && /^(File)$/.test(object[Symbol.toStringTag]);
|
||
}
|
||
}, _lastModified = new WeakMap(), _name = new WeakMap(), _a2);
|
||
File = _File;
|
||
file_default = File;
|
||
}
|
||
});
|
||
|
||
// node_modules/formdata-polyfill/esm.min.js
|
||
function formDataToBlob(F2, B = fetch_blob_default) {
|
||
var b = `${r()}${r()}`.replace(/\./g, "").slice(-28).padStart(32, "-"), c = [], p = `--${b}\r
|
||
Content-Disposition: form-data; name="`;
|
||
F2.forEach((v, n) => typeof v == "string" ? c.push(p + e(n) + `"\r
|
||
\r
|
||
${v.replace(/\r(?!\n)|(?<!\r)\n/g, "\r\n")}\r
|
||
`) : c.push(p + e(n) + `"; filename="${e(v.name, 1)}"\r
|
||
Content-Type: ${v.type || "application/octet-stream"}\r
|
||
\r
|
||
`, v, "\r\n"));
|
||
c.push(`--${b}--`);
|
||
return new B(c, { type: "multipart/form-data; boundary=" + b });
|
||
}
|
||
var t, i, h, r, m, f, e, x, _d, _a3, FormData;
|
||
var init_esm_min = __esm({
|
||
"node_modules/formdata-polyfill/esm.min.js"() {
|
||
init_fetch_blob();
|
||
init_file();
|
||
({ toStringTag: t, iterator: i, hasInstance: h } = Symbol);
|
||
r = Math.random;
|
||
m = "append,set,get,getAll,delete,keys,values,entries,forEach,constructor".split(",");
|
||
f = (a, b, c) => (a += "", /^(Blob|File)$/.test(b && b[t]) ? [(c = c !== void 0 ? c + "" : b[t] == "File" ? b.name : "blob", a), b.name !== c || b[t] == "blob" ? new file_default([b], c, b) : b] : [a, b + ""]);
|
||
e = (c, f3) => (f3 ? c : c.replace(/\r?\n|\r/g, "\r\n")).replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
|
||
x = (n, a, e2) => {
|
||
if (a.length < e2) {
|
||
throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e2} arguments required, but only ${a.length} present.`);
|
||
}
|
||
};
|
||
FormData = (_a3 = class {
|
||
constructor(...a) {
|
||
__privateAdd(this, _d, []);
|
||
if (a.length)
|
||
throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`);
|
||
}
|
||
get [t]() {
|
||
return "FormData";
|
||
}
|
||
[i]() {
|
||
return this.entries();
|
||
}
|
||
static [h](o) {
|
||
return o && typeof o === "object" && o[t] === "FormData" && !m.some((m2) => typeof o[m2] != "function");
|
||
}
|
||
append(...a) {
|
||
x("append", arguments, 2);
|
||
__privateGet(this, _d).push(f(...a));
|
||
}
|
||
delete(a) {
|
||
x("delete", arguments, 1);
|
||
a += "";
|
||
__privateSet(this, _d, __privateGet(this, _d).filter(([b]) => b !== a));
|
||
}
|
||
get(a) {
|
||
x("get", arguments, 1);
|
||
a += "";
|
||
for (var b = __privateGet(this, _d), l = b.length, c = 0; c < l; c++)
|
||
if (b[c][0] === a)
|
||
return b[c][1];
|
||
return null;
|
||
}
|
||
getAll(a, b) {
|
||
x("getAll", arguments, 1);
|
||
b = [];
|
||
a += "";
|
||
__privateGet(this, _d).forEach((c) => c[0] === a && b.push(c[1]));
|
||
return b;
|
||
}
|
||
has(a) {
|
||
x("has", arguments, 1);
|
||
a += "";
|
||
return __privateGet(this, _d).some((b) => b[0] === a);
|
||
}
|
||
forEach(a, b) {
|
||
x("forEach", arguments, 1);
|
||
for (var [c, d] of this)
|
||
a.call(b, d, c, this);
|
||
}
|
||
set(...a) {
|
||
x("set", arguments, 2);
|
||
var b = [], c = true;
|
||
a = f(...a);
|
||
__privateGet(this, _d).forEach((d) => {
|
||
d[0] === a[0] ? c && (c = !b.push(a)) : b.push(d);
|
||
});
|
||
c && b.push(a);
|
||
__privateSet(this, _d, b);
|
||
}
|
||
*entries() {
|
||
yield* __privateGet(this, _d);
|
||
}
|
||
*keys() {
|
||
for (var [a] of this)
|
||
yield a;
|
||
}
|
||
*values() {
|
||
for (var [, a] of this)
|
||
yield a;
|
||
}
|
||
}, _d = new WeakMap(), _a3);
|
||
}
|
||
});
|
||
|
||
// node_modules/node-domexception/index.js
|
||
var require_node_domexception = __commonJS({
|
||
"node_modules/node-domexception/index.js"(exports, module2) {
|
||
if (!globalThis.DOMException) {
|
||
try {
|
||
const { MessageChannel } = require("worker_threads"), port = new MessageChannel().port1, ab = new ArrayBuffer();
|
||
port.postMessage(ab, [ab, ab]);
|
||
} catch (err) {
|
||
err.constructor.name === "DOMException" && (globalThis.DOMException = err.constructor);
|
||
}
|
||
}
|
||
module2.exports = globalThis.DOMException;
|
||
}
|
||
});
|
||
|
||
// node_modules/fetch-blob/from.js
|
||
var import_node_fs, import_node_domexception, stat, _path, _start, _BlobDataItem, BlobDataItem;
|
||
var init_from = __esm({
|
||
"node_modules/fetch-blob/from.js"() {
|
||
import_node_fs = require("fs");
|
||
import_node_domexception = __toESM(require_node_domexception(), 1);
|
||
init_file();
|
||
init_fetch_blob();
|
||
({ stat } = import_node_fs.promises);
|
||
_BlobDataItem = class {
|
||
constructor(options) {
|
||
__privateAdd(this, _path, void 0);
|
||
__privateAdd(this, _start, void 0);
|
||
__privateSet(this, _path, options.path);
|
||
__privateSet(this, _start, options.start);
|
||
this.size = options.size;
|
||
this.lastModified = options.lastModified;
|
||
}
|
||
/**
|
||
* Slicing arguments is first validated and formatted
|
||
* to not be out of range by Blob.prototype.slice
|
||
*/
|
||
slice(start, end) {
|
||
return new _BlobDataItem({
|
||
path: __privateGet(this, _path),
|
||
lastModified: this.lastModified,
|
||
size: end - start,
|
||
start: __privateGet(this, _start) + start
|
||
});
|
||
}
|
||
async *stream() {
|
||
const { mtimeMs } = await stat(__privateGet(this, _path));
|
||
if (mtimeMs > this.lastModified) {
|
||
throw new import_node_domexception.default("The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.", "NotReadableError");
|
||
}
|
||
yield* (0, import_node_fs.createReadStream)(__privateGet(this, _path), {
|
||
start: __privateGet(this, _start),
|
||
end: __privateGet(this, _start) + this.size - 1
|
||
});
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return "Blob";
|
||
}
|
||
};
|
||
BlobDataItem = _BlobDataItem;
|
||
_path = new WeakMap();
|
||
_start = new WeakMap();
|
||
}
|
||
});
|
||
|
||
// node_modules/node-fetch/src/utils/multipart-parser.js
|
||
var multipart_parser_exports = {};
|
||
__export(multipart_parser_exports, {
|
||
toFormData: () => toFormData
|
||
});
|
||
function _fileName(headerValue) {
|
||
const m2 = headerValue.match(/\bfilename=("(.*?)"|([^()<>@,;:\\"/[\]?={}\s\t]+))($|;\s)/i);
|
||
if (!m2) {
|
||
return;
|
||
}
|
||
const match = m2[2] || m2[3] || "";
|
||
let filename = match.slice(match.lastIndexOf("\\") + 1);
|
||
filename = filename.replace(/%22/g, '"');
|
||
filename = filename.replace(/&#(\d{4});/g, (m3, code) => {
|
||
return String.fromCharCode(code);
|
||
});
|
||
return filename;
|
||
}
|
||
async function toFormData(Body2, ct) {
|
||
if (!/multipart/i.test(ct)) {
|
||
throw new TypeError("Failed to fetch");
|
||
}
|
||
const m2 = ct.match(/boundary=(?:"([^"]+)"|([^;]+))/i);
|
||
if (!m2) {
|
||
throw new TypeError("no or bad content-type header, no multipart boundary");
|
||
}
|
||
const parser = new MultipartParser(m2[1] || m2[2]);
|
||
let headerField;
|
||
let headerValue;
|
||
let entryValue;
|
||
let entryName;
|
||
let contentType;
|
||
let filename;
|
||
const entryChunks = [];
|
||
const formData = new FormData();
|
||
const onPartData = (ui8a) => {
|
||
entryValue += decoder.decode(ui8a, { stream: true });
|
||
};
|
||
const appendToFile = (ui8a) => {
|
||
entryChunks.push(ui8a);
|
||
};
|
||
const appendFileToFormData = () => {
|
||
const file = new file_default(entryChunks, filename, { type: contentType });
|
||
formData.append(entryName, file);
|
||
};
|
||
const appendEntryToFormData = () => {
|
||
formData.append(entryName, entryValue);
|
||
};
|
||
const decoder = new TextDecoder("utf-8");
|
||
decoder.decode();
|
||
parser.onPartBegin = function() {
|
||
parser.onPartData = onPartData;
|
||
parser.onPartEnd = appendEntryToFormData;
|
||
headerField = "";
|
||
headerValue = "";
|
||
entryValue = "";
|
||
entryName = "";
|
||
contentType = "";
|
||
filename = null;
|
||
entryChunks.length = 0;
|
||
};
|
||
parser.onHeaderField = function(ui8a) {
|
||
headerField += decoder.decode(ui8a, { stream: true });
|
||
};
|
||
parser.onHeaderValue = function(ui8a) {
|
||
headerValue += decoder.decode(ui8a, { stream: true });
|
||
};
|
||
parser.onHeaderEnd = function() {
|
||
headerValue += decoder.decode();
|
||
headerField = headerField.toLowerCase();
|
||
if (headerField === "content-disposition") {
|
||
const m3 = headerValue.match(/\bname=("([^"]*)"|([^()<>@,;:\\"/[\]?={}\s\t]+))/i);
|
||
if (m3) {
|
||
entryName = m3[2] || m3[3] || "";
|
||
}
|
||
filename = _fileName(headerValue);
|
||
if (filename) {
|
||
parser.onPartData = appendToFile;
|
||
parser.onPartEnd = appendFileToFormData;
|
||
}
|
||
} else if (headerField === "content-type") {
|
||
contentType = headerValue;
|
||
}
|
||
headerValue = "";
|
||
headerField = "";
|
||
};
|
||
for await (const chunk of Body2) {
|
||
parser.write(chunk);
|
||
}
|
||
parser.end();
|
||
return formData;
|
||
}
|
||
var s, S, f2, F, LF, CR, SPACE, HYPHEN, COLON, A, Z, lower, noop, MultipartParser;
|
||
var init_multipart_parser = __esm({
|
||
"node_modules/node-fetch/src/utils/multipart-parser.js"() {
|
||
init_from();
|
||
init_esm_min();
|
||
s = 0;
|
||
S = {
|
||
START_BOUNDARY: s++,
|
||
HEADER_FIELD_START: s++,
|
||
HEADER_FIELD: s++,
|
||
HEADER_VALUE_START: s++,
|
||
HEADER_VALUE: s++,
|
||
HEADER_VALUE_ALMOST_DONE: s++,
|
||
HEADERS_ALMOST_DONE: s++,
|
||
PART_DATA_START: s++,
|
||
PART_DATA: s++,
|
||
END: s++
|
||
};
|
||
f2 = 1;
|
||
F = {
|
||
PART_BOUNDARY: f2,
|
||
LAST_BOUNDARY: f2 *= 2
|
||
};
|
||
LF = 10;
|
||
CR = 13;
|
||
SPACE = 32;
|
||
HYPHEN = 45;
|
||
COLON = 58;
|
||
A = 97;
|
||
Z = 122;
|
||
lower = (c) => c | 32;
|
||
noop = () => {
|
||
};
|
||
MultipartParser = class {
|
||
/**
|
||
* @param {string} boundary
|
||
*/
|
||
constructor(boundary) {
|
||
this.index = 0;
|
||
this.flags = 0;
|
||
this.onHeaderEnd = noop;
|
||
this.onHeaderField = noop;
|
||
this.onHeadersEnd = noop;
|
||
this.onHeaderValue = noop;
|
||
this.onPartBegin = noop;
|
||
this.onPartData = noop;
|
||
this.onPartEnd = noop;
|
||
this.boundaryChars = {};
|
||
boundary = "\r\n--" + boundary;
|
||
const ui8a = new Uint8Array(boundary.length);
|
||
for (let i2 = 0; i2 < boundary.length; i2++) {
|
||
ui8a[i2] = boundary.charCodeAt(i2);
|
||
this.boundaryChars[ui8a[i2]] = true;
|
||
}
|
||
this.boundary = ui8a;
|
||
this.lookbehind = new Uint8Array(this.boundary.length + 8);
|
||
this.state = S.START_BOUNDARY;
|
||
}
|
||
/**
|
||
* @param {Uint8Array} data
|
||
*/
|
||
write(data) {
|
||
let i2 = 0;
|
||
const length_ = data.length;
|
||
let previousIndex = this.index;
|
||
let { lookbehind, boundary, boundaryChars, index, state, flags } = this;
|
||
const boundaryLength = this.boundary.length;
|
||
const boundaryEnd = boundaryLength - 1;
|
||
const bufferLength = data.length;
|
||
let c;
|
||
let cl;
|
||
const mark = (name) => {
|
||
this[name + "Mark"] = i2;
|
||
};
|
||
const clear = (name) => {
|
||
delete this[name + "Mark"];
|
||
};
|
||
const callback = (callbackSymbol, start, end, ui8a) => {
|
||
if (start === void 0 || start !== end) {
|
||
this[callbackSymbol](ui8a && ui8a.subarray(start, end));
|
||
}
|
||
};
|
||
const dataCallback = (name, clear2) => {
|
||
const markSymbol = name + "Mark";
|
||
if (!(markSymbol in this)) {
|
||
return;
|
||
}
|
||
if (clear2) {
|
||
callback(name, this[markSymbol], i2, data);
|
||
delete this[markSymbol];
|
||
} else {
|
||
callback(name, this[markSymbol], data.length, data);
|
||
this[markSymbol] = 0;
|
||
}
|
||
};
|
||
for (i2 = 0; i2 < length_; i2++) {
|
||
c = data[i2];
|
||
switch (state) {
|
||
case S.START_BOUNDARY:
|
||
if (index === boundary.length - 2) {
|
||
if (c === HYPHEN) {
|
||
flags |= F.LAST_BOUNDARY;
|
||
} else if (c !== CR) {
|
||
return;
|
||
}
|
||
index++;
|
||
break;
|
||
} else if (index - 1 === boundary.length - 2) {
|
||
if (flags & F.LAST_BOUNDARY && c === HYPHEN) {
|
||
state = S.END;
|
||
flags = 0;
|
||
} else if (!(flags & F.LAST_BOUNDARY) && c === LF) {
|
||
index = 0;
|
||
callback("onPartBegin");
|
||
state = S.HEADER_FIELD_START;
|
||
} else {
|
||
return;
|
||
}
|
||
break;
|
||
}
|
||
if (c !== boundary[index + 2]) {
|
||
index = -2;
|
||
}
|
||
if (c === boundary[index + 2]) {
|
||
index++;
|
||
}
|
||
break;
|
||
case S.HEADER_FIELD_START:
|
||
state = S.HEADER_FIELD;
|
||
mark("onHeaderField");
|
||
index = 0;
|
||
case S.HEADER_FIELD:
|
||
if (c === CR) {
|
||
clear("onHeaderField");
|
||
state = S.HEADERS_ALMOST_DONE;
|
||
break;
|
||
}
|
||
index++;
|
||
if (c === HYPHEN) {
|
||
break;
|
||
}
|
||
if (c === COLON) {
|
||
if (index === 1) {
|
||
return;
|
||
}
|
||
dataCallback("onHeaderField", true);
|
||
state = S.HEADER_VALUE_START;
|
||
break;
|
||
}
|
||
cl = lower(c);
|
||
if (cl < A || cl > Z) {
|
||
return;
|
||
}
|
||
break;
|
||
case S.HEADER_VALUE_START:
|
||
if (c === SPACE) {
|
||
break;
|
||
}
|
||
mark("onHeaderValue");
|
||
state = S.HEADER_VALUE;
|
||
case S.HEADER_VALUE:
|
||
if (c === CR) {
|
||
dataCallback("onHeaderValue", true);
|
||
callback("onHeaderEnd");
|
||
state = S.HEADER_VALUE_ALMOST_DONE;
|
||
}
|
||
break;
|
||
case S.HEADER_VALUE_ALMOST_DONE:
|
||
if (c !== LF) {
|
||
return;
|
||
}
|
||
state = S.HEADER_FIELD_START;
|
||
break;
|
||
case S.HEADERS_ALMOST_DONE:
|
||
if (c !== LF) {
|
||
return;
|
||
}
|
||
callback("onHeadersEnd");
|
||
state = S.PART_DATA_START;
|
||
break;
|
||
case S.PART_DATA_START:
|
||
state = S.PART_DATA;
|
||
mark("onPartData");
|
||
case S.PART_DATA:
|
||
previousIndex = index;
|
||
if (index === 0) {
|
||
i2 += boundaryEnd;
|
||
while (i2 < bufferLength && !(data[i2] in boundaryChars)) {
|
||
i2 += boundaryLength;
|
||
}
|
||
i2 -= boundaryEnd;
|
||
c = data[i2];
|
||
}
|
||
if (index < boundary.length) {
|
||
if (boundary[index] === c) {
|
||
if (index === 0) {
|
||
dataCallback("onPartData", true);
|
||
}
|
||
index++;
|
||
} else {
|
||
index = 0;
|
||
}
|
||
} else if (index === boundary.length) {
|
||
index++;
|
||
if (c === CR) {
|
||
flags |= F.PART_BOUNDARY;
|
||
} else if (c === HYPHEN) {
|
||
flags |= F.LAST_BOUNDARY;
|
||
} else {
|
||
index = 0;
|
||
}
|
||
} else if (index - 1 === boundary.length) {
|
||
if (flags & F.PART_BOUNDARY) {
|
||
index = 0;
|
||
if (c === LF) {
|
||
flags &= ~F.PART_BOUNDARY;
|
||
callback("onPartEnd");
|
||
callback("onPartBegin");
|
||
state = S.HEADER_FIELD_START;
|
||
break;
|
||
}
|
||
} else if (flags & F.LAST_BOUNDARY) {
|
||
if (c === HYPHEN) {
|
||
callback("onPartEnd");
|
||
state = S.END;
|
||
flags = 0;
|
||
} else {
|
||
index = 0;
|
||
}
|
||
} else {
|
||
index = 0;
|
||
}
|
||
}
|
||
if (index > 0) {
|
||
lookbehind[index - 1] = c;
|
||
} else if (previousIndex > 0) {
|
||
const _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);
|
||
callback("onPartData", 0, previousIndex, _lookbehind);
|
||
previousIndex = 0;
|
||
mark("onPartData");
|
||
i2--;
|
||
}
|
||
break;
|
||
case S.END:
|
||
break;
|
||
default:
|
||
throw new Error(`Unexpected state entered: ${state}`);
|
||
}
|
||
}
|
||
dataCallback("onHeaderField");
|
||
dataCallback("onHeaderValue");
|
||
dataCallback("onPartData");
|
||
this.index = index;
|
||
this.state = state;
|
||
this.flags = flags;
|
||
}
|
||
end() {
|
||
if (this.state === S.HEADER_FIELD_START && this.index === 0 || this.state === S.PART_DATA && this.index === this.boundary.length) {
|
||
this.onPartEnd();
|
||
} else if (this.state !== S.END) {
|
||
throw new Error("MultipartParser.end(): stream ended unexpectedly");
|
||
}
|
||
}
|
||
};
|
||
}
|
||
});
|
||
|
||
// node_modules/delayed-stream/lib/delayed_stream.js
|
||
var require_delayed_stream = __commonJS({
|
||
"node_modules/delayed-stream/lib/delayed_stream.js"(exports, module2) {
|
||
var Stream3 = require("stream").Stream;
|
||
var util = require("util");
|
||
module2.exports = DelayedStream;
|
||
function DelayedStream() {
|
||
this.source = null;
|
||
this.dataSize = 0;
|
||
this.maxDataSize = 1024 * 1024;
|
||
this.pauseStream = true;
|
||
this._maxDataSizeExceeded = false;
|
||
this._released = false;
|
||
this._bufferedEvents = [];
|
||
}
|
||
util.inherits(DelayedStream, Stream3);
|
||
DelayedStream.create = function(source, options) {
|
||
var delayedStream = new this();
|
||
options = options || {};
|
||
for (var option in options) {
|
||
delayedStream[option] = options[option];
|
||
}
|
||
delayedStream.source = source;
|
||
var realEmit = source.emit;
|
||
source.emit = function() {
|
||
delayedStream._handleEmit(arguments);
|
||
return realEmit.apply(source, arguments);
|
||
};
|
||
source.on("error", function() {
|
||
});
|
||
if (delayedStream.pauseStream) {
|
||
source.pause();
|
||
}
|
||
return delayedStream;
|
||
};
|
||
Object.defineProperty(DelayedStream.prototype, "readable", {
|
||
configurable: true,
|
||
enumerable: true,
|
||
get: function() {
|
||
return this.source.readable;
|
||
}
|
||
});
|
||
DelayedStream.prototype.setEncoding = function() {
|
||
return this.source.setEncoding.apply(this.source, arguments);
|
||
};
|
||
DelayedStream.prototype.resume = function() {
|
||
if (!this._released) {
|
||
this.release();
|
||
}
|
||
this.source.resume();
|
||
};
|
||
DelayedStream.prototype.pause = function() {
|
||
this.source.pause();
|
||
};
|
||
DelayedStream.prototype.release = function() {
|
||
this._released = true;
|
||
this._bufferedEvents.forEach(function(args) {
|
||
this.emit.apply(this, args);
|
||
}.bind(this));
|
||
this._bufferedEvents = [];
|
||
};
|
||
DelayedStream.prototype.pipe = function() {
|
||
var r2 = Stream3.prototype.pipe.apply(this, arguments);
|
||
this.resume();
|
||
return r2;
|
||
};
|
||
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));
|
||
};
|
||
}
|
||
});
|
||
|
||
// node_modules/combined-stream/lib/combined_stream.js
|
||
var require_combined_stream = __commonJS({
|
||
"node_modules/combined-stream/lib/combined_stream.js"(exports, module2) {
|
||
var util = require("util");
|
||
var Stream3 = require("stream").Stream;
|
||
var DelayedStream = require_delayed_stream();
|
||
module2.exports = CombinedStream;
|
||
function CombinedStream() {
|
||
this.writable = false;
|
||
this.readable = true;
|
||
this.dataSize = 0;
|
||
this.maxDataSize = 2 * 1024 * 1024;
|
||
this.pauseStreams = true;
|
||
this._released = false;
|
||
this._streams = [];
|
||
this._currentStream = null;
|
||
this._insideLoop = false;
|
||
this._pendingNext = false;
|
||
}
|
||
util.inherits(CombinedStream, Stream3);
|
||
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) {
|
||
Stream3.prototype.pipe.call(this, dest, options);
|
||
this.resume();
|
||
return dest;
|
||
};
|
||
CombinedStream.prototype._getNext = function() {
|
||
this._currentStream = null;
|
||
if (this._insideLoop) {
|
||
this._pendingNext = true;
|
||
return;
|
||
}
|
||
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(stream2) {
|
||
var isStreamLike = CombinedStream.isStreamLike(stream2);
|
||
if (isStreamLike) {
|
||
stream2.on("data", this._checkDataSize.bind(this));
|
||
this._handleErrors(stream2);
|
||
}
|
||
this._pipeNext(stream2);
|
||
}.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 self2 = this;
|
||
stream.on("error", function(err) {
|
||
self2._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 self2 = this;
|
||
this._streams.forEach(function(stream) {
|
||
if (!stream.dataSize) {
|
||
return;
|
||
}
|
||
self2.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);
|
||
};
|
||
}
|
||
});
|
||
|
||
// node_modules/mime-db/db.json
|
||
var require_db = __commonJS({
|
||
"node_modules/mime-db/db.json"(exports, module2) {
|
||
module2.exports = {
|
||
"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
|
||
}
|
||
};
|
||
}
|
||
});
|
||
|
||
// node_modules/mime-db/index.js
|
||
var require_mime_db = __commonJS({
|
||
"node_modules/mime-db/index.js"(exports, module2) {
|
||
module2.exports = require_db();
|
||
}
|
||
});
|
||
|
||
// node_modules/mime-types/index.js
|
||
var require_mime_types = __commonJS({
|
||
"node_modules/mime-types/index.js"(exports) {
|
||
"use strict";
|
||
var db = require_mime_db();
|
||
var extname = require("path").extname;
|
||
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
|
||
var TEXT_TYPE_REGEXP = /^text\//i;
|
||
exports.charset = charset;
|
||
exports.charsets = { lookup: charset };
|
||
exports.contentType = contentType;
|
||
exports.extension = extension;
|
||
exports.extensions = /* @__PURE__ */ Object.create(null);
|
||
exports.lookup = lookup;
|
||
exports.types = /* @__PURE__ */ Object.create(null);
|
||
populateMaps(exports.extensions, exports.types);
|
||
function charset(type) {
|
||
if (!type || typeof type !== "string") {
|
||
return false;
|
||
}
|
||
var match = EXTRACT_TYPE_REGEXP.exec(type);
|
||
var mime = match && db[match[1].toLowerCase()];
|
||
if (mime && mime.charset) {
|
||
return mime.charset;
|
||
}
|
||
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
|
||
return "UTF-8";
|
||
}
|
||
return false;
|
||
}
|
||
function contentType(str) {
|
||
if (!str || typeof str !== "string") {
|
||
return false;
|
||
}
|
||
var mime = str.indexOf("/") === -1 ? exports.lookup(str) : str;
|
||
if (!mime) {
|
||
return false;
|
||
}
|
||
if (mime.indexOf("charset") === -1) {
|
||
var charset2 = exports.charset(mime);
|
||
if (charset2)
|
||
mime += "; charset=" + charset2.toLowerCase();
|
||
}
|
||
return mime;
|
||
}
|
||
function extension(type) {
|
||
if (!type || typeof type !== "string") {
|
||
return false;
|
||
}
|
||
var match = EXTRACT_TYPE_REGEXP.exec(type);
|
||
var exts = match && exports.extensions[match[1].toLowerCase()];
|
||
if (!exts || !exts.length) {
|
||
return false;
|
||
}
|
||
return exts[0];
|
||
}
|
||
function lookup(path) {
|
||
if (!path || typeof path !== "string") {
|
||
return false;
|
||
}
|
||
var extension2 = extname("x." + path).toLowerCase().substr(1);
|
||
if (!extension2) {
|
||
return false;
|
||
}
|
||
return exports.types[extension2] || false;
|
||
}
|
||
function populateMaps(extensions, types3) {
|
||
var preference = ["nginx", "apache", void 0, "iana"];
|
||
Object.keys(db).forEach(function forEachMimeType(type) {
|
||
var mime = db[type];
|
||
var exts = mime.extensions;
|
||
if (!exts || !exts.length) {
|
||
return;
|
||
}
|
||
extensions[type] = exts;
|
||
for (var i2 = 0; i2 < exts.length; i2++) {
|
||
var extension2 = exts[i2];
|
||
if (types3[extension2]) {
|
||
var from = preference.indexOf(db[types3[extension2]].source);
|
||
var to = preference.indexOf(mime.source);
|
||
if (types3[extension2] !== "application/octet-stream" && (from > to || from === to && types3[extension2].substr(0, 12) === "application/")) {
|
||
continue;
|
||
}
|
||
}
|
||
types3[extension2] = type;
|
||
}
|
||
});
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/lib/defer.js
|
||
var require_defer = __commonJS({
|
||
"node_modules/asynckit/lib/defer.js"(exports, module2) {
|
||
module2.exports = defer;
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/lib/async.js
|
||
var require_async = __commonJS({
|
||
"node_modules/asynckit/lib/async.js"(exports, module2) {
|
||
var defer = require_defer();
|
||
module2.exports = async;
|
||
function async(callback) {
|
||
var isAsync = false;
|
||
defer(function() {
|
||
isAsync = true;
|
||
});
|
||
return function async_callback(err, result) {
|
||
if (isAsync) {
|
||
callback(err, result);
|
||
} else {
|
||
defer(function nextTick_callback() {
|
||
callback(err, result);
|
||
});
|
||
}
|
||
};
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/lib/abort.js
|
||
var require_abort = __commonJS({
|
||
"node_modules/asynckit/lib/abort.js"(exports, module2) {
|
||
module2.exports = abort;
|
||
function abort(state) {
|
||
Object.keys(state.jobs).forEach(clean.bind(state));
|
||
state.jobs = {};
|
||
}
|
||
function clean(key) {
|
||
if (typeof this.jobs[key] == "function") {
|
||
this.jobs[key]();
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/lib/iterate.js
|
||
var require_iterate = __commonJS({
|
||
"node_modules/asynckit/lib/iterate.js"(exports, module2) {
|
||
var async = require_async();
|
||
var abort = require_abort();
|
||
module2.exports = iterate;
|
||
function iterate(list, iterator, state, callback) {
|
||
var key = state["keyedList"] ? state["keyedList"][state.index] : state.index;
|
||
state.jobs[key] = runJob(iterator, key, list[key], function(error, output) {
|
||
if (!(key in state.jobs)) {
|
||
return;
|
||
}
|
||
delete state.jobs[key];
|
||
if (error) {
|
||
abort(state);
|
||
} else {
|
||
state.results[key] = output;
|
||
}
|
||
callback(error, state.results);
|
||
});
|
||
}
|
||
function runJob(iterator, key, item, callback) {
|
||
var aborter;
|
||
if (iterator.length == 2) {
|
||
aborter = iterator(item, async(callback));
|
||
} else {
|
||
aborter = iterator(item, key, async(callback));
|
||
}
|
||
return aborter;
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/lib/state.js
|
||
var require_state = __commonJS({
|
||
"node_modules/asynckit/lib/state.js"(exports, module2) {
|
||
module2.exports = state;
|
||
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) {
|
||
initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) {
|
||
return sortMethod(list[a], list[b]);
|
||
});
|
||
}
|
||
return initState;
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/lib/terminator.js
|
||
var require_terminator = __commonJS({
|
||
"node_modules/asynckit/lib/terminator.js"(exports, module2) {
|
||
var abort = require_abort();
|
||
var async = require_async();
|
||
module2.exports = terminator;
|
||
function terminator(callback) {
|
||
if (!Object.keys(this.jobs).length) {
|
||
return;
|
||
}
|
||
this.index = this.size;
|
||
abort(this);
|
||
async(callback)(null, this.results);
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/parallel.js
|
||
var require_parallel = __commonJS({
|
||
"node_modules/asynckit/parallel.js"(exports, module2) {
|
||
var iterate = require_iterate();
|
||
var initState = require_state();
|
||
var terminator = require_terminator();
|
||
module2.exports = parallel;
|
||
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;
|
||
}
|
||
if (Object.keys(state.jobs).length === 0) {
|
||
callback(null, state.results);
|
||
return;
|
||
}
|
||
});
|
||
state.index++;
|
||
}
|
||
return terminator.bind(state, callback);
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/serialOrdered.js
|
||
var require_serialOrdered = __commonJS({
|
||
"node_modules/asynckit/serialOrdered.js"(exports, module2) {
|
||
var iterate = require_iterate();
|
||
var initState = require_state();
|
||
var terminator = require_terminator();
|
||
module2.exports = serialOrdered;
|
||
module2.exports.ascending = ascending;
|
||
module2.exports.descending = descending;
|
||
function serialOrdered(list, iterator, sortMethod, callback) {
|
||
var state = initState(list, sortMethod);
|
||
iterate(list, iterator, state, function iteratorHandler(error, result) {
|
||
if (error) {
|
||
callback(error, result);
|
||
return;
|
||
}
|
||
state.index++;
|
||
if (state.index < (state["keyedList"] || list).length) {
|
||
iterate(list, iterator, state, iteratorHandler);
|
||
return;
|
||
}
|
||
callback(null, state.results);
|
||
});
|
||
return terminator.bind(state, callback);
|
||
}
|
||
function ascending(a, b) {
|
||
return a < b ? -1 : a > b ? 1 : 0;
|
||
}
|
||
function descending(a, b) {
|
||
return -1 * ascending(a, b);
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/serial.js
|
||
var require_serial = __commonJS({
|
||
"node_modules/asynckit/serial.js"(exports, module2) {
|
||
var serialOrdered = require_serialOrdered();
|
||
module2.exports = serial;
|
||
function serial(list, iterator, callback) {
|
||
return serialOrdered(list, iterator, null, callback);
|
||
}
|
||
}
|
||
});
|
||
|
||
// node_modules/asynckit/index.js
|
||
var require_asynckit = __commonJS({
|
||
"node_modules/asynckit/index.js"(exports, module2) {
|
||
module2.exports = {
|
||
parallel: require_parallel(),
|
||
serial: require_serial(),
|
||
serialOrdered: require_serialOrdered()
|
||
};
|
||
}
|
||
});
|
||
|
||
// node_modules/form-data/lib/populate.js
|
||
var require_populate = __commonJS({
|
||
"node_modules/form-data/lib/populate.js"(exports, module2) {
|
||
module2.exports = function(dst, src) {
|
||
Object.keys(src).forEach(function(prop) {
|
||
dst[prop] = dst[prop] || src[prop];
|
||
});
|
||
return dst;
|
||
};
|
||
}
|
||
});
|
||
|
||
// node_modules/form-data/lib/form_data.js
|
||
var require_form_data = __commonJS({
|
||
"node_modules/form-data/lib/form_data.js"(exports, module2) {
|
||
var CombinedStream = require_combined_stream();
|
||
var util = require("util");
|
||
var path = require("path");
|
||
var http3 = require("http");
|
||
var https2 = require("https");
|
||
var parseUrl = require("url").parse;
|
||
var fs2 = require("fs");
|
||
var Stream3 = require("stream").Stream;
|
||
var mime = require_mime_types();
|
||
var asynckit = require_asynckit();
|
||
var populate = require_populate();
|
||
module2.exports = FormData5;
|
||
util.inherits(FormData5, CombinedStream);
|
||
function FormData5(options) {
|
||
if (!(this instanceof FormData5)) {
|
||
return new FormData5(options);
|
||
}
|
||
this._overheadLength = 0;
|
||
this._valueLength = 0;
|
||
this._valuesToMeasure = [];
|
||
CombinedStream.call(this);
|
||
options = options || {};
|
||
for (var option in options) {
|
||
this[option] = options[option];
|
||
}
|
||
}
|
||
FormData5.LINE_BREAK = "\r\n";
|
||
FormData5.DEFAULT_CONTENT_TYPE = "application/octet-stream";
|
||
FormData5.prototype.append = function(field, value, options) {
|
||
options = options || {};
|
||
if (typeof options == "string") {
|
||
options = { filename: options };
|
||
}
|
||
var append = CombinedStream.prototype.append.bind(this);
|
||
if (typeof value == "number") {
|
||
value = "" + value;
|
||
}
|
||
if (util.isArray(value)) {
|
||
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);
|
||
this._trackLength(header, value, options);
|
||
};
|
||
FormData5.prototype._trackLength = function(header, value, options) {
|
||
var valueLength = 0;
|
||
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;
|
||
this._overheadLength += Buffer.byteLength(header) + FormData5.LINE_BREAK.length;
|
||
if (!value || !value.path && !(value.readable && value.hasOwnProperty("httpVersion")) && !(value instanceof Stream3)) {
|
||
return;
|
||
}
|
||
if (!options.knownLength) {
|
||
this._valuesToMeasure.push(value);
|
||
}
|
||
};
|
||
FormData5.prototype._lengthRetriever = function(value, callback) {
|
||
if (value.hasOwnProperty("fd")) {
|
||
if (value.end != void 0 && value.end != Infinity && value.start != void 0) {
|
||
callback(null, value.end + 1 - (value.start ? value.start : 0));
|
||
} else {
|
||
fs2.stat(value.path, function(err, stat2) {
|
||
var fileSize;
|
||
if (err) {
|
||
callback(err);
|
||
return;
|
||
}
|
||
fileSize = stat2.size - (value.start ? value.start : 0);
|
||
callback(null, fileSize);
|
||
});
|
||
}
|
||
} else if (value.hasOwnProperty("httpVersion")) {
|
||
callback(null, +value.headers["content-length"]);
|
||
} else if (value.hasOwnProperty("httpModule")) {
|
||
value.on("response", function(response) {
|
||
value.pause();
|
||
callback(null, +response.headers["content-length"]);
|
||
});
|
||
value.resume();
|
||
} else {
|
||
callback("Unknown stream");
|
||
}
|
||
};
|
||
FormData5.prototype._multiPartHeader = function(field, value, options) {
|
||
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 || [])
|
||
};
|
||
if (typeof options.header == "object") {
|
||
populate(headers, options.header);
|
||
}
|
||
var header;
|
||
for (var prop in headers) {
|
||
if (!headers.hasOwnProperty(prop))
|
||
continue;
|
||
header = headers[prop];
|
||
if (header == null) {
|
||
continue;
|
||
}
|
||
if (!Array.isArray(header)) {
|
||
header = [header];
|
||
}
|
||
if (header.length) {
|
||
contents += prop + ": " + header.join("; ") + FormData5.LINE_BREAK;
|
||
}
|
||
}
|
||
return "--" + this.getBoundary() + FormData5.LINE_BREAK + contents + FormData5.LINE_BREAK;
|
||
};
|
||
FormData5.prototype._getContentDisposition = function(value, options) {
|
||
var filename, contentDisposition;
|
||
if (typeof options.filepath === "string") {
|
||
filename = path.normalize(options.filepath).replace(/\\/g, "/");
|
||
} else if (options.filename || value.name || value.path) {
|
||
filename = path.basename(options.filename || value.name || value.path);
|
||
} else if (value.readable && value.hasOwnProperty("httpVersion")) {
|
||
filename = path.basename(value.client._httpMessage.path || "");
|
||
}
|
||
if (filename) {
|
||
contentDisposition = 'filename="' + filename + '"';
|
||
}
|
||
return contentDisposition;
|
||
};
|
||
FormData5.prototype._getContentType = function(value, options) {
|
||
var contentType = options.contentType;
|
||
if (!contentType && value.name) {
|
||
contentType = mime.lookup(value.name);
|
||
}
|
||
if (!contentType && value.path) {
|
||
contentType = mime.lookup(value.path);
|
||
}
|
||
if (!contentType && value.readable && value.hasOwnProperty("httpVersion")) {
|
||
contentType = value.headers["content-type"];
|
||
}
|
||
if (!contentType && (options.filepath || options.filename)) {
|
||
contentType = mime.lookup(options.filepath || options.filename);
|
||
}
|
||
if (!contentType && typeof value == "object") {
|
||
contentType = FormData5.DEFAULT_CONTENT_TYPE;
|
||
}
|
||
return contentType;
|
||
};
|
||
FormData5.prototype._multiPartFooter = function() {
|
||
return function(next) {
|
||
var footer = FormData5.LINE_BREAK;
|
||
var lastPart = this._streams.length === 0;
|
||
if (lastPart) {
|
||
footer += this._lastBoundary();
|
||
}
|
||
next(footer);
|
||
}.bind(this);
|
||
};
|
||
FormData5.prototype._lastBoundary = function() {
|
||
return "--" + this.getBoundary() + "--" + FormData5.LINE_BREAK;
|
||
};
|
||
FormData5.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 formHeaders;
|
||
};
|
||
FormData5.prototype.setBoundary = function(boundary) {
|
||
this._boundary = boundary;
|
||
};
|
||
FormData5.prototype.getBoundary = function() {
|
||
if (!this._boundary) {
|
||
this._generateBoundary();
|
||
}
|
||
return this._boundary;
|
||
};
|
||
FormData5.prototype.getBuffer = function() {
|
||
var dataBuffer = new Buffer.alloc(0);
|
||
var boundary = this.getBoundary();
|
||
for (var i2 = 0, len = this._streams.length; i2 < len; i2++) {
|
||
if (typeof this._streams[i2] !== "function") {
|
||
if (Buffer.isBuffer(this._streams[i2])) {
|
||
dataBuffer = Buffer.concat([dataBuffer, this._streams[i2]]);
|
||
} else {
|
||
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i2])]);
|
||
}
|
||
if (typeof this._streams[i2] !== "string" || this._streams[i2].substring(2, boundary.length + 2) !== boundary) {
|
||
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData5.LINE_BREAK)]);
|
||
}
|
||
}
|
||
}
|
||
return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);
|
||
};
|
||
FormData5.prototype._generateBoundary = function() {
|
||
var boundary = "--------------------------";
|
||
for (var i2 = 0; i2 < 24; i2++) {
|
||
boundary += Math.floor(Math.random() * 10).toString(16);
|
||
}
|
||
this._boundary = boundary;
|
||
};
|
||
FormData5.prototype.getLengthSync = function() {
|
||
var knownLength = this._overheadLength + this._valueLength;
|
||
if (this._streams.length) {
|
||
knownLength += this._lastBoundary().length;
|
||
}
|
||
if (!this.hasKnownLength()) {
|
||
this._error(new Error("Cannot calculate proper length in synchronous way."));
|
||
}
|
||
return knownLength;
|
||
};
|
||
FormData5.prototype.hasKnownLength = function() {
|
||
var hasKnownLength = true;
|
||
if (this._valuesToMeasure.length) {
|
||
hasKnownLength = false;
|
||
}
|
||
return hasKnownLength;
|
||
};
|
||
FormData5.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);
|
||
});
|
||
};
|
||
FormData5.prototype.submit = function(params, cb) {
|
||
var request, options, defaults = { method: "post" };
|
||
if (typeof params == "string") {
|
||
params = parseUrl(params);
|
||
options = populate({
|
||
port: params.port,
|
||
path: params.pathname,
|
||
host: params.hostname,
|
||
protocol: params.protocol
|
||
}, defaults);
|
||
} else {
|
||
options = populate(params, defaults);
|
||
if (!options.port) {
|
||
options.port = options.protocol == "https:" ? 443 : 80;
|
||
}
|
||
}
|
||
options.headers = this.getHeaders(params.headers);
|
||
if (options.protocol == "https:") {
|
||
request = https2.request(options);
|
||
} else {
|
||
request = http3.request(options);
|
||
}
|
||
this.getLength(function(err, length) {
|
||
if (err && err !== "Unknown stream") {
|
||
this._error(err);
|
||
return;
|
||
}
|
||
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;
|
||
};
|
||
FormData5.prototype._error = function(err) {
|
||
if (!this.error) {
|
||
this.error = err;
|
||
this.pause();
|
||
this.emit("error", err);
|
||
}
|
||
};
|
||
FormData5.prototype.toString = function() {
|
||
return "[object FormData]";
|
||
};
|
||
}
|
||
});
|
||
|
||
// src/main.ts
|
||
var main_exports = {};
|
||
__export(main_exports, {
|
||
default: () => OCRLatexPlugin
|
||
});
|
||
module.exports = __toCommonJS(main_exports);
|
||
var import_obsidian2 = require("obsidian");
|
||
var import_electron = require("electron");
|
||
|
||
// node_modules/node-fetch/src/index.js
|
||
var import_node_http2 = __toESM(require("http"), 1);
|
||
var import_node_https = __toESM(require("https"), 1);
|
||
var import_node_zlib = __toESM(require("zlib"), 1);
|
||
var import_node_stream2 = __toESM(require("stream"), 1);
|
||
var import_node_buffer2 = require("buffer");
|
||
|
||
// node_modules/data-uri-to-buffer/dist/index.js
|
||
function dataUriToBuffer(uri) {
|
||
if (!/^data:/i.test(uri)) {
|
||
throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');
|
||
}
|
||
uri = uri.replace(/\r?\n/g, "");
|
||
const firstComma = uri.indexOf(",");
|
||
if (firstComma === -1 || firstComma <= 4) {
|
||
throw new TypeError("malformed data: URI");
|
||
}
|
||
const meta = uri.substring(5, firstComma).split(";");
|
||
let charset = "";
|
||
let base64 = false;
|
||
const type = meta[0] || "text/plain";
|
||
let typeFull = type;
|
||
for (let i2 = 1; i2 < meta.length; i2++) {
|
||
if (meta[i2] === "base64") {
|
||
base64 = true;
|
||
} else if (meta[i2]) {
|
||
typeFull += `;${meta[i2]}`;
|
||
if (meta[i2].indexOf("charset=") === 0) {
|
||
charset = meta[i2].substring(8);
|
||
}
|
||
}
|
||
}
|
||
if (!meta[0] && !charset.length) {
|
||
typeFull += ";charset=US-ASCII";
|
||
charset = "US-ASCII";
|
||
}
|
||
const encoding = base64 ? "base64" : "ascii";
|
||
const data = unescape(uri.substring(firstComma + 1));
|
||
const buffer = Buffer.from(data, encoding);
|
||
buffer.type = type;
|
||
buffer.typeFull = typeFull;
|
||
buffer.charset = charset;
|
||
return buffer;
|
||
}
|
||
var dist_default = dataUriToBuffer;
|
||
|
||
// node_modules/node-fetch/src/body.js
|
||
var import_node_stream = __toESM(require("stream"), 1);
|
||
var import_node_util = require("util");
|
||
var import_node_buffer = require("buffer");
|
||
init_fetch_blob();
|
||
init_esm_min();
|
||
|
||
// node_modules/node-fetch/src/errors/base.js
|
||
var FetchBaseError = class extends Error {
|
||
constructor(message, type) {
|
||
super(message);
|
||
Error.captureStackTrace(this, this.constructor);
|
||
this.type = type;
|
||
}
|
||
get name() {
|
||
return this.constructor.name;
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return this.constructor.name;
|
||
}
|
||
};
|
||
|
||
// node_modules/node-fetch/src/errors/fetch-error.js
|
||
var FetchError = class extends FetchBaseError {
|
||
/**
|
||
* @param {string} message - Error message for human
|
||
* @param {string} [type] - Error type for machine
|
||
* @param {SystemError} [systemError] - For Node.js system error
|
||
*/
|
||
constructor(message, type, systemError) {
|
||
super(message, type);
|
||
if (systemError) {
|
||
this.code = this.errno = systemError.code;
|
||
this.erroredSysCall = systemError.syscall;
|
||
}
|
||
}
|
||
};
|
||
|
||
// node_modules/node-fetch/src/utils/is.js
|
||
var NAME = Symbol.toStringTag;
|
||
var isURLSearchParameters = (object) => {
|
||
return typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && typeof object.sort === "function" && object[NAME] === "URLSearchParams";
|
||
};
|
||
var isBlob = (object) => {
|
||
return object && typeof object === "object" && typeof object.arrayBuffer === "function" && typeof object.type === "string" && typeof object.stream === "function" && typeof object.constructor === "function" && /^(Blob|File)$/.test(object[NAME]);
|
||
};
|
||
var isAbortSignal = (object) => {
|
||
return typeof object === "object" && (object[NAME] === "AbortSignal" || object[NAME] === "EventTarget");
|
||
};
|
||
var isDomainOrSubdomain = (destination, original) => {
|
||
const orig = new URL(original).hostname;
|
||
const dest = new URL(destination).hostname;
|
||
return orig === dest || orig.endsWith(`.${dest}`);
|
||
};
|
||
var isSameProtocol = (destination, original) => {
|
||
const orig = new URL(original).protocol;
|
||
const dest = new URL(destination).protocol;
|
||
return orig === dest;
|
||
};
|
||
|
||
// node_modules/node-fetch/src/body.js
|
||
var pipeline = (0, import_node_util.promisify)(import_node_stream.default.pipeline);
|
||
var INTERNALS = Symbol("Body internals");
|
||
var Body = class {
|
||
constructor(body, {
|
||
size = 0
|
||
} = {}) {
|
||
let boundary = null;
|
||
if (body === null) {
|
||
body = null;
|
||
} else if (isURLSearchParameters(body)) {
|
||
body = import_node_buffer.Buffer.from(body.toString());
|
||
} else if (isBlob(body)) {
|
||
} else if (import_node_buffer.Buffer.isBuffer(body)) {
|
||
} else if (import_node_util.types.isAnyArrayBuffer(body)) {
|
||
body = import_node_buffer.Buffer.from(body);
|
||
} else if (ArrayBuffer.isView(body)) {
|
||
body = import_node_buffer.Buffer.from(body.buffer, body.byteOffset, body.byteLength);
|
||
} else if (body instanceof import_node_stream.default) {
|
||
} else if (body instanceof FormData) {
|
||
body = formDataToBlob(body);
|
||
boundary = body.type.split("=")[1];
|
||
} else {
|
||
body = import_node_buffer.Buffer.from(String(body));
|
||
}
|
||
let stream = body;
|
||
if (import_node_buffer.Buffer.isBuffer(body)) {
|
||
stream = import_node_stream.default.Readable.from(body);
|
||
} else if (isBlob(body)) {
|
||
stream = import_node_stream.default.Readable.from(body.stream());
|
||
}
|
||
this[INTERNALS] = {
|
||
body,
|
||
stream,
|
||
boundary,
|
||
disturbed: false,
|
||
error: null
|
||
};
|
||
this.size = size;
|
||
if (body instanceof import_node_stream.default) {
|
||
body.on("error", (error_) => {
|
||
const error = error_ instanceof FetchBaseError ? error_ : new FetchError(`Invalid response body while trying to fetch ${this.url}: ${error_.message}`, "system", error_);
|
||
this[INTERNALS].error = error;
|
||
});
|
||
}
|
||
}
|
||
get body() {
|
||
return this[INTERNALS].stream;
|
||
}
|
||
get bodyUsed() {
|
||
return this[INTERNALS].disturbed;
|
||
}
|
||
/**
|
||
* Decode response as ArrayBuffer
|
||
*
|
||
* @return Promise
|
||
*/
|
||
async arrayBuffer() {
|
||
const { buffer, byteOffset, byteLength } = await consumeBody(this);
|
||
return buffer.slice(byteOffset, byteOffset + byteLength);
|
||
}
|
||
async formData() {
|
||
const ct = this.headers.get("content-type");
|
||
if (ct.startsWith("application/x-www-form-urlencoded")) {
|
||
const formData = new FormData();
|
||
const parameters = new URLSearchParams(await this.text());
|
||
for (const [name, value] of parameters) {
|
||
formData.append(name, value);
|
||
}
|
||
return formData;
|
||
}
|
||
const { toFormData: toFormData2 } = await Promise.resolve().then(() => (init_multipart_parser(), multipart_parser_exports));
|
||
return toFormData2(this.body, ct);
|
||
}
|
||
/**
|
||
* Return raw response as Blob
|
||
*
|
||
* @return Promise
|
||
*/
|
||
async blob() {
|
||
const ct = this.headers && this.headers.get("content-type") || this[INTERNALS].body && this[INTERNALS].body.type || "";
|
||
const buf = await this.arrayBuffer();
|
||
return new fetch_blob_default([buf], {
|
||
type: ct
|
||
});
|
||
}
|
||
/**
|
||
* Decode response as json
|
||
*
|
||
* @return Promise
|
||
*/
|
||
async json() {
|
||
const text = await this.text();
|
||
return JSON.parse(text);
|
||
}
|
||
/**
|
||
* Decode response as text
|
||
*
|
||
* @return Promise
|
||
*/
|
||
async text() {
|
||
const buffer = await consumeBody(this);
|
||
return new TextDecoder().decode(buffer);
|
||
}
|
||
/**
|
||
* Decode response as buffer (non-spec api)
|
||
*
|
||
* @return Promise
|
||
*/
|
||
buffer() {
|
||
return consumeBody(this);
|
||
}
|
||
};
|
||
Body.prototype.buffer = (0, import_node_util.deprecate)(Body.prototype.buffer, "Please use 'response.arrayBuffer()' instead of 'response.buffer()'", "node-fetch#buffer");
|
||
Object.defineProperties(Body.prototype, {
|
||
body: { enumerable: true },
|
||
bodyUsed: { enumerable: true },
|
||
arrayBuffer: { enumerable: true },
|
||
blob: { enumerable: true },
|
||
json: { enumerable: true },
|
||
text: { enumerable: true },
|
||
data: { get: (0, import_node_util.deprecate)(
|
||
() => {
|
||
},
|
||
"data doesn't exist, use json(), text(), arrayBuffer(), or body instead",
|
||
"https://github.com/node-fetch/node-fetch/issues/1000 (response)"
|
||
) }
|
||
});
|
||
async function consumeBody(data) {
|
||
if (data[INTERNALS].disturbed) {
|
||
throw new TypeError(`body used already for: ${data.url}`);
|
||
}
|
||
data[INTERNALS].disturbed = true;
|
||
if (data[INTERNALS].error) {
|
||
throw data[INTERNALS].error;
|
||
}
|
||
const { body } = data;
|
||
if (body === null) {
|
||
return import_node_buffer.Buffer.alloc(0);
|
||
}
|
||
if (!(body instanceof import_node_stream.default)) {
|
||
return import_node_buffer.Buffer.alloc(0);
|
||
}
|
||
const accum = [];
|
||
let accumBytes = 0;
|
||
try {
|
||
for await (const chunk of body) {
|
||
if (data.size > 0 && accumBytes + chunk.length > data.size) {
|
||
const error = new FetchError(`content size at ${data.url} over limit: ${data.size}`, "max-size");
|
||
body.destroy(error);
|
||
throw error;
|
||
}
|
||
accumBytes += chunk.length;
|
||
accum.push(chunk);
|
||
}
|
||
} catch (error) {
|
||
const error_ = error instanceof FetchBaseError ? error : new FetchError(`Invalid response body while trying to fetch ${data.url}: ${error.message}`, "system", error);
|
||
throw error_;
|
||
}
|
||
if (body.readableEnded === true || body._readableState.ended === true) {
|
||
try {
|
||
if (accum.every((c) => typeof c === "string")) {
|
||
return import_node_buffer.Buffer.from(accum.join(""));
|
||
}
|
||
return import_node_buffer.Buffer.concat(accum, accumBytes);
|
||
} catch (error) {
|
||
throw new FetchError(`Could not create Buffer from response body for ${data.url}: ${error.message}`, "system", error);
|
||
}
|
||
} else {
|
||
throw new FetchError(`Premature close of server response while trying to fetch ${data.url}`);
|
||
}
|
||
}
|
||
var clone = (instance, highWaterMark) => {
|
||
let p1;
|
||
let p2;
|
||
let { body } = instance[INTERNALS];
|
||
if (instance.bodyUsed) {
|
||
throw new Error("cannot clone body after it is used");
|
||
}
|
||
if (body instanceof import_node_stream.default && typeof body.getBoundary !== "function") {
|
||
p1 = new import_node_stream.PassThrough({ highWaterMark });
|
||
p2 = new import_node_stream.PassThrough({ highWaterMark });
|
||
body.pipe(p1);
|
||
body.pipe(p2);
|
||
instance[INTERNALS].stream = p1;
|
||
body = p2;
|
||
}
|
||
return body;
|
||
};
|
||
var getNonSpecFormDataBoundary = (0, import_node_util.deprecate)(
|
||
(body) => body.getBoundary(),
|
||
"form-data doesn't follow the spec and requires special treatment. Use alternative package",
|
||
"https://github.com/node-fetch/node-fetch/issues/1167"
|
||
);
|
||
var extractContentType = (body, request) => {
|
||
if (body === null) {
|
||
return null;
|
||
}
|
||
if (typeof body === "string") {
|
||
return "text/plain;charset=UTF-8";
|
||
}
|
||
if (isURLSearchParameters(body)) {
|
||
return "application/x-www-form-urlencoded;charset=UTF-8";
|
||
}
|
||
if (isBlob(body)) {
|
||
return body.type || null;
|
||
}
|
||
if (import_node_buffer.Buffer.isBuffer(body) || import_node_util.types.isAnyArrayBuffer(body) || ArrayBuffer.isView(body)) {
|
||
return null;
|
||
}
|
||
if (body instanceof FormData) {
|
||
return `multipart/form-data; boundary=${request[INTERNALS].boundary}`;
|
||
}
|
||
if (body && typeof body.getBoundary === "function") {
|
||
return `multipart/form-data;boundary=${getNonSpecFormDataBoundary(body)}`;
|
||
}
|
||
if (body instanceof import_node_stream.default) {
|
||
return null;
|
||
}
|
||
return "text/plain;charset=UTF-8";
|
||
};
|
||
var getTotalBytes = (request) => {
|
||
const { body } = request[INTERNALS];
|
||
if (body === null) {
|
||
return 0;
|
||
}
|
||
if (isBlob(body)) {
|
||
return body.size;
|
||
}
|
||
if (import_node_buffer.Buffer.isBuffer(body)) {
|
||
return body.length;
|
||
}
|
||
if (body && typeof body.getLengthSync === "function") {
|
||
return body.hasKnownLength && body.hasKnownLength() ? body.getLengthSync() : null;
|
||
}
|
||
return null;
|
||
};
|
||
var writeToStream = async (dest, { body }) => {
|
||
if (body === null) {
|
||
dest.end();
|
||
} else {
|
||
await pipeline(body, dest);
|
||
}
|
||
};
|
||
|
||
// node_modules/node-fetch/src/headers.js
|
||
var import_node_util2 = require("util");
|
||
var import_node_http = __toESM(require("http"), 1);
|
||
var validateHeaderName = typeof import_node_http.default.validateHeaderName === "function" ? import_node_http.default.validateHeaderName : (name) => {
|
||
if (!/^[\^`\-\w!#$%&'*+.|~]+$/.test(name)) {
|
||
const error = new TypeError(`Header name must be a valid HTTP token [${name}]`);
|
||
Object.defineProperty(error, "code", { value: "ERR_INVALID_HTTP_TOKEN" });
|
||
throw error;
|
||
}
|
||
};
|
||
var validateHeaderValue = typeof import_node_http.default.validateHeaderValue === "function" ? import_node_http.default.validateHeaderValue : (name, value) => {
|
||
if (/[^\t\u0020-\u007E\u0080-\u00FF]/.test(value)) {
|
||
const error = new TypeError(`Invalid character in header content ["${name}"]`);
|
||
Object.defineProperty(error, "code", { value: "ERR_INVALID_CHAR" });
|
||
throw error;
|
||
}
|
||
};
|
||
var Headers = class extends URLSearchParams {
|
||
/**
|
||
* Headers class
|
||
*
|
||
* @constructor
|
||
* @param {HeadersInit} [init] - Response headers
|
||
*/
|
||
constructor(init) {
|
||
let result = [];
|
||
if (init instanceof Headers) {
|
||
const raw = init.raw();
|
||
for (const [name, values] of Object.entries(raw)) {
|
||
result.push(...values.map((value) => [name, value]));
|
||
}
|
||
} else if (init == null) {
|
||
} else if (typeof init === "object" && !import_node_util2.types.isBoxedPrimitive(init)) {
|
||
const method = init[Symbol.iterator];
|
||
if (method == null) {
|
||
result.push(...Object.entries(init));
|
||
} else {
|
||
if (typeof method !== "function") {
|
||
throw new TypeError("Header pairs must be iterable");
|
||
}
|
||
result = [...init].map((pair) => {
|
||
if (typeof pair !== "object" || import_node_util2.types.isBoxedPrimitive(pair)) {
|
||
throw new TypeError("Each header pair must be an iterable object");
|
||
}
|
||
return [...pair];
|
||
}).map((pair) => {
|
||
if (pair.length !== 2) {
|
||
throw new TypeError("Each header pair must be a name/value tuple");
|
||
}
|
||
return [...pair];
|
||
});
|
||
}
|
||
} else {
|
||
throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)");
|
||
}
|
||
result = result.length > 0 ? result.map(([name, value]) => {
|
||
validateHeaderName(name);
|
||
validateHeaderValue(name, String(value));
|
||
return [String(name).toLowerCase(), String(value)];
|
||
}) : void 0;
|
||
super(result);
|
||
return new Proxy(this, {
|
||
get(target, p, receiver) {
|
||
switch (p) {
|
||
case "append":
|
||
case "set":
|
||
return (name, value) => {
|
||
validateHeaderName(name);
|
||
validateHeaderValue(name, String(value));
|
||
return URLSearchParams.prototype[p].call(
|
||
target,
|
||
String(name).toLowerCase(),
|
||
String(value)
|
||
);
|
||
};
|
||
case "delete":
|
||
case "has":
|
||
case "getAll":
|
||
return (name) => {
|
||
validateHeaderName(name);
|
||
return URLSearchParams.prototype[p].call(
|
||
target,
|
||
String(name).toLowerCase()
|
||
);
|
||
};
|
||
case "keys":
|
||
return () => {
|
||
target.sort();
|
||
return new Set(URLSearchParams.prototype.keys.call(target)).keys();
|
||
};
|
||
default:
|
||
return Reflect.get(target, p, receiver);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return this.constructor.name;
|
||
}
|
||
toString() {
|
||
return Object.prototype.toString.call(this);
|
||
}
|
||
get(name) {
|
||
const values = this.getAll(name);
|
||
if (values.length === 0) {
|
||
return null;
|
||
}
|
||
let value = values.join(", ");
|
||
if (/^content-encoding$/i.test(name)) {
|
||
value = value.toLowerCase();
|
||
}
|
||
return value;
|
||
}
|
||
forEach(callback, thisArg = void 0) {
|
||
for (const name of this.keys()) {
|
||
Reflect.apply(callback, thisArg, [this.get(name), name, this]);
|
||
}
|
||
}
|
||
*values() {
|
||
for (const name of this.keys()) {
|
||
yield this.get(name);
|
||
}
|
||
}
|
||
/**
|
||
* @type {() => IterableIterator<[string, string]>}
|
||
*/
|
||
*entries() {
|
||
for (const name of this.keys()) {
|
||
yield [name, this.get(name)];
|
||
}
|
||
}
|
||
[Symbol.iterator]() {
|
||
return this.entries();
|
||
}
|
||
/**
|
||
* Node-fetch non-spec method
|
||
* returning all headers and their values as array
|
||
* @returns {Record<string, string[]>}
|
||
*/
|
||
raw() {
|
||
return [...this.keys()].reduce((result, key) => {
|
||
result[key] = this.getAll(key);
|
||
return result;
|
||
}, {});
|
||
}
|
||
/**
|
||
* For better console.log(headers) and also to convert Headers into Node.js Request compatible format
|
||
*/
|
||
[Symbol.for("nodejs.util.inspect.custom")]() {
|
||
return [...this.keys()].reduce((result, key) => {
|
||
const values = this.getAll(key);
|
||
if (key === "host") {
|
||
result[key] = values[0];
|
||
} else {
|
||
result[key] = values.length > 1 ? values : values[0];
|
||
}
|
||
return result;
|
||
}, {});
|
||
}
|
||
};
|
||
Object.defineProperties(
|
||
Headers.prototype,
|
||
["get", "entries", "forEach", "values"].reduce((result, property) => {
|
||
result[property] = { enumerable: true };
|
||
return result;
|
||
}, {})
|
||
);
|
||
function fromRawHeaders(headers = []) {
|
||
return new Headers(
|
||
headers.reduce((result, value, index, array) => {
|
||
if (index % 2 === 0) {
|
||
result.push(array.slice(index, index + 2));
|
||
}
|
||
return result;
|
||
}, []).filter(([name, value]) => {
|
||
try {
|
||
validateHeaderName(name);
|
||
validateHeaderValue(name, String(value));
|
||
return true;
|
||
} catch (e2) {
|
||
return false;
|
||
}
|
||
})
|
||
);
|
||
}
|
||
|
||
// node_modules/node-fetch/src/utils/is-redirect.js
|
||
var redirectStatus = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
|
||
var isRedirect = (code) => {
|
||
return redirectStatus.has(code);
|
||
};
|
||
|
||
// node_modules/node-fetch/src/response.js
|
||
var INTERNALS2 = Symbol("Response internals");
|
||
var Response = class extends Body {
|
||
constructor(body = null, options = {}) {
|
||
super(body, options);
|
||
const status = options.status != null ? options.status : 200;
|
||
const headers = new Headers(options.headers);
|
||
if (body !== null && !headers.has("Content-Type")) {
|
||
const contentType = extractContentType(body, this);
|
||
if (contentType) {
|
||
headers.append("Content-Type", contentType);
|
||
}
|
||
}
|
||
this[INTERNALS2] = {
|
||
type: "default",
|
||
url: options.url,
|
||
status,
|
||
statusText: options.statusText || "",
|
||
headers,
|
||
counter: options.counter,
|
||
highWaterMark: options.highWaterMark
|
||
};
|
||
}
|
||
get type() {
|
||
return this[INTERNALS2].type;
|
||
}
|
||
get url() {
|
||
return this[INTERNALS2].url || "";
|
||
}
|
||
get status() {
|
||
return this[INTERNALS2].status;
|
||
}
|
||
/**
|
||
* Convenience property representing if the request ended normally
|
||
*/
|
||
get ok() {
|
||
return this[INTERNALS2].status >= 200 && this[INTERNALS2].status < 300;
|
||
}
|
||
get redirected() {
|
||
return this[INTERNALS2].counter > 0;
|
||
}
|
||
get statusText() {
|
||
return this[INTERNALS2].statusText;
|
||
}
|
||
get headers() {
|
||
return this[INTERNALS2].headers;
|
||
}
|
||
get highWaterMark() {
|
||
return this[INTERNALS2].highWaterMark;
|
||
}
|
||
/**
|
||
* Clone this response
|
||
*
|
||
* @return Response
|
||
*/
|
||
clone() {
|
||
return new Response(clone(this, this.highWaterMark), {
|
||
type: this.type,
|
||
url: this.url,
|
||
status: this.status,
|
||
statusText: this.statusText,
|
||
headers: this.headers,
|
||
ok: this.ok,
|
||
redirected: this.redirected,
|
||
size: this.size,
|
||
highWaterMark: this.highWaterMark
|
||
});
|
||
}
|
||
/**
|
||
* @param {string} url The URL that the new response is to originate from.
|
||
* @param {number} status An optional status code for the response (e.g., 302.)
|
||
* @returns {Response} A Response object.
|
||
*/
|
||
static redirect(url, status = 302) {
|
||
if (!isRedirect(status)) {
|
||
throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');
|
||
}
|
||
return new Response(null, {
|
||
headers: {
|
||
location: new URL(url).toString()
|
||
},
|
||
status
|
||
});
|
||
}
|
||
static error() {
|
||
const response = new Response(null, { status: 0, statusText: "" });
|
||
response[INTERNALS2].type = "error";
|
||
return response;
|
||
}
|
||
static json(data = void 0, init = {}) {
|
||
const body = JSON.stringify(data);
|
||
if (body === void 0) {
|
||
throw new TypeError("data is not JSON serializable");
|
||
}
|
||
const headers = new Headers(init && init.headers);
|
||
if (!headers.has("content-type")) {
|
||
headers.set("content-type", "application/json");
|
||
}
|
||
return new Response(body, {
|
||
...init,
|
||
headers
|
||
});
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return "Response";
|
||
}
|
||
};
|
||
Object.defineProperties(Response.prototype, {
|
||
type: { enumerable: true },
|
||
url: { enumerable: true },
|
||
status: { enumerable: true },
|
||
ok: { enumerable: true },
|
||
redirected: { enumerable: true },
|
||
statusText: { enumerable: true },
|
||
headers: { enumerable: true },
|
||
clone: { enumerable: true }
|
||
});
|
||
|
||
// node_modules/node-fetch/src/request.js
|
||
var import_node_url = require("url");
|
||
var import_node_util3 = require("util");
|
||
|
||
// node_modules/node-fetch/src/utils/get-search.js
|
||
var getSearch = (parsedURL) => {
|
||
if (parsedURL.search) {
|
||
return parsedURL.search;
|
||
}
|
||
const lastOffset = parsedURL.href.length - 1;
|
||
const hash = parsedURL.hash || (parsedURL.href[lastOffset] === "#" ? "#" : "");
|
||
return parsedURL.href[lastOffset - hash.length] === "?" ? "?" : "";
|
||
};
|
||
|
||
// node_modules/node-fetch/src/utils/referrer.js
|
||
var import_node_net = require("net");
|
||
function stripURLForUseAsAReferrer(url, originOnly = false) {
|
||
if (url == null) {
|
||
return "no-referrer";
|
||
}
|
||
url = new URL(url);
|
||
if (/^(about|blob|data):$/.test(url.protocol)) {
|
||
return "no-referrer";
|
||
}
|
||
url.username = "";
|
||
url.password = "";
|
||
url.hash = "";
|
||
if (originOnly) {
|
||
url.pathname = "";
|
||
url.search = "";
|
||
}
|
||
return url;
|
||
}
|
||
var ReferrerPolicy = /* @__PURE__ */ new Set([
|
||
"",
|
||
"no-referrer",
|
||
"no-referrer-when-downgrade",
|
||
"same-origin",
|
||
"origin",
|
||
"strict-origin",
|
||
"origin-when-cross-origin",
|
||
"strict-origin-when-cross-origin",
|
||
"unsafe-url"
|
||
]);
|
||
var DEFAULT_REFERRER_POLICY = "strict-origin-when-cross-origin";
|
||
function validateReferrerPolicy(referrerPolicy) {
|
||
if (!ReferrerPolicy.has(referrerPolicy)) {
|
||
throw new TypeError(`Invalid referrerPolicy: ${referrerPolicy}`);
|
||
}
|
||
return referrerPolicy;
|
||
}
|
||
function isOriginPotentiallyTrustworthy(url) {
|
||
if (/^(http|ws)s:$/.test(url.protocol)) {
|
||
return true;
|
||
}
|
||
const hostIp = url.host.replace(/(^\[)|(]$)/g, "");
|
||
const hostIPVersion = (0, import_node_net.isIP)(hostIp);
|
||
if (hostIPVersion === 4 && /^127\./.test(hostIp)) {
|
||
return true;
|
||
}
|
||
if (hostIPVersion === 6 && /^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(hostIp)) {
|
||
return true;
|
||
}
|
||
if (url.host === "localhost" || url.host.endsWith(".localhost")) {
|
||
return false;
|
||
}
|
||
if (url.protocol === "file:") {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function isUrlPotentiallyTrustworthy(url) {
|
||
if (/^about:(blank|srcdoc)$/.test(url)) {
|
||
return true;
|
||
}
|
||
if (url.protocol === "data:") {
|
||
return true;
|
||
}
|
||
if (/^(blob|filesystem):$/.test(url.protocol)) {
|
||
return true;
|
||
}
|
||
return isOriginPotentiallyTrustworthy(url);
|
||
}
|
||
function determineRequestsReferrer(request, { referrerURLCallback, referrerOriginCallback } = {}) {
|
||
if (request.referrer === "no-referrer" || request.referrerPolicy === "") {
|
||
return null;
|
||
}
|
||
const policy = request.referrerPolicy;
|
||
if (request.referrer === "about:client") {
|
||
return "no-referrer";
|
||
}
|
||
const referrerSource = request.referrer;
|
||
let referrerURL = stripURLForUseAsAReferrer(referrerSource);
|
||
let referrerOrigin = stripURLForUseAsAReferrer(referrerSource, true);
|
||
if (referrerURL.toString().length > 4096) {
|
||
referrerURL = referrerOrigin;
|
||
}
|
||
if (referrerURLCallback) {
|
||
referrerURL = referrerURLCallback(referrerURL);
|
||
}
|
||
if (referrerOriginCallback) {
|
||
referrerOrigin = referrerOriginCallback(referrerOrigin);
|
||
}
|
||
const currentURL = new URL(request.url);
|
||
switch (policy) {
|
||
case "no-referrer":
|
||
return "no-referrer";
|
||
case "origin":
|
||
return referrerOrigin;
|
||
case "unsafe-url":
|
||
return referrerURL;
|
||
case "strict-origin":
|
||
if (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {
|
||
return "no-referrer";
|
||
}
|
||
return referrerOrigin.toString();
|
||
case "strict-origin-when-cross-origin":
|
||
if (referrerURL.origin === currentURL.origin) {
|
||
return referrerURL;
|
||
}
|
||
if (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {
|
||
return "no-referrer";
|
||
}
|
||
return referrerOrigin;
|
||
case "same-origin":
|
||
if (referrerURL.origin === currentURL.origin) {
|
||
return referrerURL;
|
||
}
|
||
return "no-referrer";
|
||
case "origin-when-cross-origin":
|
||
if (referrerURL.origin === currentURL.origin) {
|
||
return referrerURL;
|
||
}
|
||
return referrerOrigin;
|
||
case "no-referrer-when-downgrade":
|
||
if (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {
|
||
return "no-referrer";
|
||
}
|
||
return referrerURL;
|
||
default:
|
||
throw new TypeError(`Invalid referrerPolicy: ${policy}`);
|
||
}
|
||
}
|
||
function parseReferrerPolicyFromHeader(headers) {
|
||
const policyTokens = (headers.get("referrer-policy") || "").split(/[,\s]+/);
|
||
let policy = "";
|
||
for (const token of policyTokens) {
|
||
if (token && ReferrerPolicy.has(token)) {
|
||
policy = token;
|
||
}
|
||
}
|
||
return policy;
|
||
}
|
||
|
||
// node_modules/node-fetch/src/request.js
|
||
var INTERNALS3 = Symbol("Request internals");
|
||
var isRequest = (object) => {
|
||
return typeof object === "object" && typeof object[INTERNALS3] === "object";
|
||
};
|
||
var doBadDataWarn = (0, import_node_util3.deprecate)(
|
||
() => {
|
||
},
|
||
".data is not a valid RequestInit property, use .body instead",
|
||
"https://github.com/node-fetch/node-fetch/issues/1000 (request)"
|
||
);
|
||
var Request = class extends Body {
|
||
constructor(input, init = {}) {
|
||
let parsedURL;
|
||
if (isRequest(input)) {
|
||
parsedURL = new URL(input.url);
|
||
} else {
|
||
parsedURL = new URL(input);
|
||
input = {};
|
||
}
|
||
if (parsedURL.username !== "" || parsedURL.password !== "") {
|
||
throw new TypeError(`${parsedURL} is an url with embedded credentials.`);
|
||
}
|
||
let method = init.method || input.method || "GET";
|
||
if (/^(delete|get|head|options|post|put)$/i.test(method)) {
|
||
method = method.toUpperCase();
|
||
}
|
||
if (!isRequest(init) && "data" in init) {
|
||
doBadDataWarn();
|
||
}
|
||
if ((init.body != null || isRequest(input) && input.body !== null) && (method === "GET" || method === "HEAD")) {
|
||
throw new TypeError("Request with GET/HEAD method cannot have body");
|
||
}
|
||
const inputBody = init.body ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
|
||
super(inputBody, {
|
||
size: init.size || input.size || 0
|
||
});
|
||
const headers = new Headers(init.headers || input.headers || {});
|
||
if (inputBody !== null && !headers.has("Content-Type")) {
|
||
const contentType = extractContentType(inputBody, this);
|
||
if (contentType) {
|
||
headers.set("Content-Type", contentType);
|
||
}
|
||
}
|
||
let signal = isRequest(input) ? input.signal : null;
|
||
if ("signal" in init) {
|
||
signal = init.signal;
|
||
}
|
||
if (signal != null && !isAbortSignal(signal)) {
|
||
throw new TypeError("Expected signal to be an instanceof AbortSignal or EventTarget");
|
||
}
|
||
let referrer = init.referrer == null ? input.referrer : init.referrer;
|
||
if (referrer === "") {
|
||
referrer = "no-referrer";
|
||
} else if (referrer) {
|
||
const parsedReferrer = new URL(referrer);
|
||
referrer = /^about:(\/\/)?client$/.test(parsedReferrer) ? "client" : parsedReferrer;
|
||
} else {
|
||
referrer = void 0;
|
||
}
|
||
this[INTERNALS3] = {
|
||
method,
|
||
redirect: init.redirect || input.redirect || "follow",
|
||
headers,
|
||
parsedURL,
|
||
signal,
|
||
referrer
|
||
};
|
||
this.follow = init.follow === void 0 ? input.follow === void 0 ? 20 : input.follow : init.follow;
|
||
this.compress = init.compress === void 0 ? input.compress === void 0 ? true : input.compress : init.compress;
|
||
this.counter = init.counter || input.counter || 0;
|
||
this.agent = init.agent || input.agent;
|
||
this.highWaterMark = init.highWaterMark || input.highWaterMark || 16384;
|
||
this.insecureHTTPParser = init.insecureHTTPParser || input.insecureHTTPParser || false;
|
||
this.referrerPolicy = init.referrerPolicy || input.referrerPolicy || "";
|
||
}
|
||
/** @returns {string} */
|
||
get method() {
|
||
return this[INTERNALS3].method;
|
||
}
|
||
/** @returns {string} */
|
||
get url() {
|
||
return (0, import_node_url.format)(this[INTERNALS3].parsedURL);
|
||
}
|
||
/** @returns {Headers} */
|
||
get headers() {
|
||
return this[INTERNALS3].headers;
|
||
}
|
||
get redirect() {
|
||
return this[INTERNALS3].redirect;
|
||
}
|
||
/** @returns {AbortSignal} */
|
||
get signal() {
|
||
return this[INTERNALS3].signal;
|
||
}
|
||
// https://fetch.spec.whatwg.org/#dom-request-referrer
|
||
get referrer() {
|
||
if (this[INTERNALS3].referrer === "no-referrer") {
|
||
return "";
|
||
}
|
||
if (this[INTERNALS3].referrer === "client") {
|
||
return "about:client";
|
||
}
|
||
if (this[INTERNALS3].referrer) {
|
||
return this[INTERNALS3].referrer.toString();
|
||
}
|
||
return void 0;
|
||
}
|
||
get referrerPolicy() {
|
||
return this[INTERNALS3].referrerPolicy;
|
||
}
|
||
set referrerPolicy(referrerPolicy) {
|
||
this[INTERNALS3].referrerPolicy = validateReferrerPolicy(referrerPolicy);
|
||
}
|
||
/**
|
||
* Clone this request
|
||
*
|
||
* @return Request
|
||
*/
|
||
clone() {
|
||
return new Request(this);
|
||
}
|
||
get [Symbol.toStringTag]() {
|
||
return "Request";
|
||
}
|
||
};
|
||
Object.defineProperties(Request.prototype, {
|
||
method: { enumerable: true },
|
||
url: { enumerable: true },
|
||
headers: { enumerable: true },
|
||
redirect: { enumerable: true },
|
||
clone: { enumerable: true },
|
||
signal: { enumerable: true },
|
||
referrer: { enumerable: true },
|
||
referrerPolicy: { enumerable: true }
|
||
});
|
||
var getNodeRequestOptions = (request) => {
|
||
const { parsedURL } = request[INTERNALS3];
|
||
const headers = new Headers(request[INTERNALS3].headers);
|
||
if (!headers.has("Accept")) {
|
||
headers.set("Accept", "*/*");
|
||
}
|
||
let contentLengthValue = null;
|
||
if (request.body === null && /^(post|put)$/i.test(request.method)) {
|
||
contentLengthValue = "0";
|
||
}
|
||
if (request.body !== null) {
|
||
const totalBytes = getTotalBytes(request);
|
||
if (typeof totalBytes === "number" && !Number.isNaN(totalBytes)) {
|
||
contentLengthValue = String(totalBytes);
|
||
}
|
||
}
|
||
if (contentLengthValue) {
|
||
headers.set("Content-Length", contentLengthValue);
|
||
}
|
||
if (request.referrerPolicy === "") {
|
||
request.referrerPolicy = DEFAULT_REFERRER_POLICY;
|
||
}
|
||
if (request.referrer && request.referrer !== "no-referrer") {
|
||
request[INTERNALS3].referrer = determineRequestsReferrer(request);
|
||
} else {
|
||
request[INTERNALS3].referrer = "no-referrer";
|
||
}
|
||
if (request[INTERNALS3].referrer instanceof URL) {
|
||
headers.set("Referer", request.referrer);
|
||
}
|
||
if (!headers.has("User-Agent")) {
|
||
headers.set("User-Agent", "node-fetch");
|
||
}
|
||
if (request.compress && !headers.has("Accept-Encoding")) {
|
||
headers.set("Accept-Encoding", "gzip, deflate, br");
|
||
}
|
||
let { agent } = request;
|
||
if (typeof agent === "function") {
|
||
agent = agent(parsedURL);
|
||
}
|
||
const search = getSearch(parsedURL);
|
||
const options = {
|
||
// Overwrite search to retain trailing ? (issue #776)
|
||
path: parsedURL.pathname + search,
|
||
// The following options are not expressed in the URL
|
||
method: request.method,
|
||
headers: headers[Symbol.for("nodejs.util.inspect.custom")](),
|
||
insecureHTTPParser: request.insecureHTTPParser,
|
||
agent
|
||
};
|
||
return {
|
||
/** @type {URL} */
|
||
parsedURL,
|
||
options
|
||
};
|
||
};
|
||
|
||
// node_modules/node-fetch/src/errors/abort-error.js
|
||
var AbortError = class extends FetchBaseError {
|
||
constructor(message, type = "aborted") {
|
||
super(message, type);
|
||
}
|
||
};
|
||
|
||
// node_modules/node-fetch/src/index.js
|
||
init_esm_min();
|
||
init_from();
|
||
var supportedSchemas = /* @__PURE__ */ new Set(["data:", "http:", "https:"]);
|
||
async function fetch(url, options_) {
|
||
return new Promise((resolve, reject) => {
|
||
const request = new Request(url, options_);
|
||
const { parsedURL, options } = getNodeRequestOptions(request);
|
||
if (!supportedSchemas.has(parsedURL.protocol)) {
|
||
throw new TypeError(`node-fetch cannot load ${url}. URL scheme "${parsedURL.protocol.replace(/:$/, "")}" is not supported.`);
|
||
}
|
||
if (parsedURL.protocol === "data:") {
|
||
const data = dist_default(request.url);
|
||
const response2 = new Response(data, { headers: { "Content-Type": data.typeFull } });
|
||
resolve(response2);
|
||
return;
|
||
}
|
||
const send = (parsedURL.protocol === "https:" ? import_node_https.default : import_node_http2.default).request;
|
||
const { signal } = request;
|
||
let response = null;
|
||
const abort = () => {
|
||
const error = new AbortError("The operation was aborted.");
|
||
reject(error);
|
||
if (request.body && request.body instanceof import_node_stream2.default.Readable) {
|
||
request.body.destroy(error);
|
||
}
|
||
if (!response || !response.body) {
|
||
return;
|
||
}
|
||
response.body.emit("error", error);
|
||
};
|
||
if (signal && signal.aborted) {
|
||
abort();
|
||
return;
|
||
}
|
||
const abortAndFinalize = () => {
|
||
abort();
|
||
finalize();
|
||
};
|
||
const request_ = send(parsedURL.toString(), options);
|
||
if (signal) {
|
||
signal.addEventListener("abort", abortAndFinalize);
|
||
}
|
||
const finalize = () => {
|
||
request_.abort();
|
||
if (signal) {
|
||
signal.removeEventListener("abort", abortAndFinalize);
|
||
}
|
||
};
|
||
request_.on("error", (error) => {
|
||
reject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, "system", error));
|
||
finalize();
|
||
});
|
||
fixResponseChunkedTransferBadEnding(request_, (error) => {
|
||
if (response && response.body) {
|
||
response.body.destroy(error);
|
||
}
|
||
});
|
||
if (process.version < "v14") {
|
||
request_.on("socket", (s2) => {
|
||
let endedWithEventsCount;
|
||
s2.prependListener("end", () => {
|
||
endedWithEventsCount = s2._eventsCount;
|
||
});
|
||
s2.prependListener("close", (hadError) => {
|
||
if (response && endedWithEventsCount < s2._eventsCount && !hadError) {
|
||
const error = new Error("Premature close");
|
||
error.code = "ERR_STREAM_PREMATURE_CLOSE";
|
||
response.body.emit("error", error);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
request_.on("response", (response_) => {
|
||
request_.setTimeout(0);
|
||
const headers = fromRawHeaders(response_.rawHeaders);
|
||
if (isRedirect(response_.statusCode)) {
|
||
const location = headers.get("Location");
|
||
let locationURL = null;
|
||
try {
|
||
locationURL = location === null ? null : new URL(location, request.url);
|
||
} catch (e2) {
|
||
if (request.redirect !== "manual") {
|
||
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, "invalid-redirect"));
|
||
finalize();
|
||
return;
|
||
}
|
||
}
|
||
switch (request.redirect) {
|
||
case "error":
|
||
reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, "no-redirect"));
|
||
finalize();
|
||
return;
|
||
case "manual":
|
||
break;
|
||
case "follow": {
|
||
if (locationURL === null) {
|
||
break;
|
||
}
|
||
if (request.counter >= request.follow) {
|
||
reject(new FetchError(`maximum redirect reached at: ${request.url}`, "max-redirect"));
|
||
finalize();
|
||
return;
|
||
}
|
||
const requestOptions = {
|
||
headers: new Headers(request.headers),
|
||
follow: request.follow,
|
||
counter: request.counter + 1,
|
||
agent: request.agent,
|
||
compress: request.compress,
|
||
method: request.method,
|
||
body: clone(request),
|
||
signal: request.signal,
|
||
size: request.size,
|
||
referrer: request.referrer,
|
||
referrerPolicy: request.referrerPolicy
|
||
};
|
||
if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {
|
||
for (const name of ["authorization", "www-authenticate", "cookie", "cookie2"]) {
|
||
requestOptions.headers.delete(name);
|
||
}
|
||
}
|
||
if (response_.statusCode !== 303 && request.body && options_.body instanceof import_node_stream2.default.Readable) {
|
||
reject(new FetchError("Cannot follow redirect with body being a readable stream", "unsupported-redirect"));
|
||
finalize();
|
||
return;
|
||
}
|
||
if (response_.statusCode === 303 || (response_.statusCode === 301 || response_.statusCode === 302) && request.method === "POST") {
|
||
requestOptions.method = "GET";
|
||
requestOptions.body = void 0;
|
||
requestOptions.headers.delete("content-length");
|
||
}
|
||
const responseReferrerPolicy = parseReferrerPolicyFromHeader(headers);
|
||
if (responseReferrerPolicy) {
|
||
requestOptions.referrerPolicy = responseReferrerPolicy;
|
||
}
|
||
resolve(fetch(new Request(locationURL, requestOptions)));
|
||
finalize();
|
||
return;
|
||
}
|
||
default:
|
||
return reject(new TypeError(`Redirect option '${request.redirect}' is not a valid value of RequestRedirect`));
|
||
}
|
||
}
|
||
if (signal) {
|
||
response_.once("end", () => {
|
||
signal.removeEventListener("abort", abortAndFinalize);
|
||
});
|
||
}
|
||
let body = (0, import_node_stream2.pipeline)(response_, new import_node_stream2.PassThrough(), (error) => {
|
||
if (error) {
|
||
reject(error);
|
||
}
|
||
});
|
||
if (process.version < "v12.10") {
|
||
response_.on("aborted", abortAndFinalize);
|
||
}
|
||
const responseOptions = {
|
||
url: request.url,
|
||
status: response_.statusCode,
|
||
statusText: response_.statusMessage,
|
||
headers,
|
||
size: request.size,
|
||
counter: request.counter,
|
||
highWaterMark: request.highWaterMark
|
||
};
|
||
const codings = headers.get("Content-Encoding");
|
||
if (!request.compress || request.method === "HEAD" || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {
|
||
response = new Response(body, responseOptions);
|
||
resolve(response);
|
||
return;
|
||
}
|
||
const zlibOptions = {
|
||
flush: import_node_zlib.default.Z_SYNC_FLUSH,
|
||
finishFlush: import_node_zlib.default.Z_SYNC_FLUSH
|
||
};
|
||
if (codings === "gzip" || codings === "x-gzip") {
|
||
body = (0, import_node_stream2.pipeline)(body, import_node_zlib.default.createGunzip(zlibOptions), (error) => {
|
||
if (error) {
|
||
reject(error);
|
||
}
|
||
});
|
||
response = new Response(body, responseOptions);
|
||
resolve(response);
|
||
return;
|
||
}
|
||
if (codings === "deflate" || codings === "x-deflate") {
|
||
const raw = (0, import_node_stream2.pipeline)(response_, new import_node_stream2.PassThrough(), (error) => {
|
||
if (error) {
|
||
reject(error);
|
||
}
|
||
});
|
||
raw.once("data", (chunk) => {
|
||
if ((chunk[0] & 15) === 8) {
|
||
body = (0, import_node_stream2.pipeline)(body, import_node_zlib.default.createInflate(), (error) => {
|
||
if (error) {
|
||
reject(error);
|
||
}
|
||
});
|
||
} else {
|
||
body = (0, import_node_stream2.pipeline)(body, import_node_zlib.default.createInflateRaw(), (error) => {
|
||
if (error) {
|
||
reject(error);
|
||
}
|
||
});
|
||
}
|
||
response = new Response(body, responseOptions);
|
||
resolve(response);
|
||
});
|
||
raw.once("end", () => {
|
||
if (!response) {
|
||
response = new Response(body, responseOptions);
|
||
resolve(response);
|
||
}
|
||
});
|
||
return;
|
||
}
|
||
if (codings === "br") {
|
||
body = (0, import_node_stream2.pipeline)(body, import_node_zlib.default.createBrotliDecompress(), (error) => {
|
||
if (error) {
|
||
reject(error);
|
||
}
|
||
});
|
||
response = new Response(body, responseOptions);
|
||
resolve(response);
|
||
return;
|
||
}
|
||
response = new Response(body, responseOptions);
|
||
resolve(response);
|
||
});
|
||
writeToStream(request_, request).catch(reject);
|
||
});
|
||
}
|
||
function fixResponseChunkedTransferBadEnding(request, errorCallback) {
|
||
const LAST_CHUNK = import_node_buffer2.Buffer.from("0\r\n\r\n");
|
||
let isChunkedTransfer = false;
|
||
let properLastChunkReceived = false;
|
||
let previousChunk;
|
||
request.on("response", (response) => {
|
||
const { headers } = response;
|
||
isChunkedTransfer = headers["transfer-encoding"] === "chunked" && !headers["content-length"];
|
||
});
|
||
request.on("socket", (socket) => {
|
||
const onSocketClose = () => {
|
||
if (isChunkedTransfer && !properLastChunkReceived) {
|
||
const error = new Error("Premature close");
|
||
error.code = "ERR_STREAM_PREMATURE_CLOSE";
|
||
errorCallback(error);
|
||
}
|
||
};
|
||
const onData = (buf) => {
|
||
properLastChunkReceived = import_node_buffer2.Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;
|
||
if (!properLastChunkReceived && previousChunk) {
|
||
properLastChunkReceived = import_node_buffer2.Buffer.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 && import_node_buffer2.Buffer.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0;
|
||
}
|
||
previousChunk = buf;
|
||
};
|
||
socket.prependListener("close", onSocketClose);
|
||
socket.on("data", onData);
|
||
request.on("close", () => {
|
||
socket.removeListener("close", onSocketClose);
|
||
socket.removeListener("data", onData);
|
||
});
|
||
});
|
||
}
|
||
|
||
// src/pic2tex.ts
|
||
var import_form_data = __toESM(require_form_data());
|
||
|
||
// src/tex-wrapper.ts
|
||
var TexWrapper = class {
|
||
constructor(isMultiline) {
|
||
this.isMultiline = false;
|
||
this.isMultiline = isMultiline;
|
||
}
|
||
async sendRequest(image) {
|
||
const res = await this.getTex(image);
|
||
if (this.isMultiline)
|
||
return `$$ ${res}$$`;
|
||
return `$${res}$`;
|
||
}
|
||
};
|
||
|
||
// src/pic2tex.ts
|
||
var Pic2Tex = class extends TexWrapper {
|
||
constructor(isMultiline, settings) {
|
||
super(isMultiline);
|
||
this.settings = settings;
|
||
}
|
||
async getTex(image) {
|
||
const formData = new import_form_data.default();
|
||
formData.append("file", image, {
|
||
filename: "test.png",
|
||
contentType: "image/png"
|
||
});
|
||
let response;
|
||
let options = {
|
||
method: "POST",
|
||
body: formData
|
||
};
|
||
if (this.settings.pix2tex.username && this.settings.pix2tex.password) {
|
||
options.headers = {
|
||
Authorization: `Basic ${btoa(`${this.settings.pix2tex.username}:${this.settings.pix2tex.password}`)}`
|
||
};
|
||
}
|
||
response = await fetch(this.settings.pix2tex.url, options);
|
||
if (!response.ok)
|
||
throw response;
|
||
const jsonString = await response.text();
|
||
let latexText = jsonString.substring(1, jsonString.length - 1);
|
||
latexText = latexText.replace(/\\\\/g, "\\");
|
||
return latexText;
|
||
}
|
||
};
|
||
|
||
// src/simple-tex.ts
|
||
var import_form_data2 = __toESM(require_form_data());
|
||
var SimpleTex = class extends TexWrapper {
|
||
constructor(isMultiline, settings) {
|
||
super(isMultiline);
|
||
this.settings = settings;
|
||
}
|
||
async getTex(image) {
|
||
const formData = new import_form_data2.default();
|
||
formData.append("file", image, {
|
||
filename: "test.png",
|
||
contentType: "image/png"
|
||
});
|
||
let response;
|
||
response = await fetch("https://server.simpletex.cn/api/latex_ocr", {
|
||
method: "POST",
|
||
headers: {
|
||
token: this.settings.simpleTexToken
|
||
},
|
||
body: formData
|
||
});
|
||
if (!response.ok) {
|
||
console.error("Simpletext response", response);
|
||
alert("Simple TEX not working properly, see logs.");
|
||
}
|
||
const resText = await response.text();
|
||
console.log("Simple tex response", resText);
|
||
const data = JSON.parse(resText);
|
||
console.log("Simple tex data");
|
||
return data.res.latex;
|
||
}
|
||
};
|
||
|
||
// src/texify.ts
|
||
var import_form_data3 = __toESM(require_form_data());
|
||
var Texify = class {
|
||
constructor(settings) {
|
||
this.settings = settings;
|
||
}
|
||
async sendRequest(image) {
|
||
const formData = new import_form_data3.default();
|
||
formData.append("image", image, {
|
||
filename: "image.png",
|
||
contentType: "image/png"
|
||
});
|
||
let options = {
|
||
method: "POST",
|
||
body: formData
|
||
};
|
||
if (this.settings.username && this.settings.password) {
|
||
options.headers = {
|
||
Authorization: `Basic ${btoa(`${this.settings.username}:${this.settings.password}`)}`
|
||
};
|
||
}
|
||
const response = await fetch(this.settings.url, options);
|
||
const parsed = await response.json();
|
||
console.log(parsed);
|
||
return parsed.results[0];
|
||
}
|
||
};
|
||
|
||
// src/settings.ts
|
||
var import_obsidian = require("obsidian");
|
||
var DEFAULT_SETTINGS = {
|
||
simpleTexToken: "",
|
||
latexProvider: "SimpleTex",
|
||
texify: {
|
||
url: "http://127.0.0.1:5000/predict",
|
||
username: "",
|
||
password: ""
|
||
},
|
||
pix2tex: {
|
||
url: "http://127.0.0.1:8502/predict/",
|
||
username: "",
|
||
password: ""
|
||
}
|
||
};
|
||
var OCRLatexSettings = class extends import_obsidian.PluginSettingTab {
|
||
constructor(app, plugin) {
|
||
super(app, plugin);
|
||
this.plugin = plugin;
|
||
}
|
||
renderSelfHostedOptions(obj, containerEl, endWithSlash) {
|
||
new import_obsidian.Setting(containerEl).setName("URL").setDesc(
|
||
"The URL for the API endpoint, only active when self-hosted is enabled."
|
||
).addText(
|
||
(text) => text.setPlaceholder("Enter your URL").setValue(obj.url).onChange(async (value) => {
|
||
if (!value.endsWith("/") && endWithSlash)
|
||
value += "/";
|
||
if (value.endsWith("/") && !endWithSlash)
|
||
value = value.slice(0, -1);
|
||
obj.url = value;
|
||
await this.plugin.saveSettings();
|
||
})
|
||
);
|
||
new import_obsidian.Setting(containerEl).setName("Username (self-hosted optional)").setDesc(
|
||
"Your username for authentication. If you use self-hosted and a basic auth proxy before the container."
|
||
).addText(
|
||
(text) => text.setPlaceholder("Enter your username").setValue(obj.username).onChange(async (value) => {
|
||
obj.username = value;
|
||
await this.plugin.saveSettings();
|
||
})
|
||
);
|
||
new import_obsidian.Setting(containerEl).setName("Password (self-hosted optional)").setDesc(
|
||
"Your password for authentication. If you use self-hosted and a basic auth proxy before the container."
|
||
).addText(
|
||
(text) => text.setPlaceholder("Enter your password").setValue(obj.password).onChange(async (value) => {
|
||
obj.password = value;
|
||
await this.plugin.saveSettings();
|
||
})
|
||
);
|
||
}
|
||
display() {
|
||
const { containerEl } = this;
|
||
containerEl.empty();
|
||
const readmeURL = "https://github.com/Hugo-Persson/obsidian-ocrlatex/blob/master/README.md";
|
||
containerEl.createEl("h1", { text: "Image2Latex" });
|
||
containerEl.createEl("div", { text: "Please see the README.md for info on how to configure the extension" });
|
||
containerEl.createEl("a", { href: readmeURL, text: readmeURL });
|
||
containerEl.createEl("h2", { text: "General" });
|
||
new import_obsidian.Setting(containerEl).setName("Latex provider").setDesc("Choose which provider to use for OCR and Latex conversion").addDropdown((dropdown) => {
|
||
dropdown.addOptions({
|
||
"SimpleTex": "SimpleTex",
|
||
"Pix2Tex": "Pix2Tex"
|
||
}).setValue(this.plugin.settings.latexProvider).onChange(async (value) => {
|
||
this.plugin.settings.latexProvider = value;
|
||
await this.plugin.saveSettings();
|
||
});
|
||
});
|
||
containerEl.createEl("h2", { text: "Texify" });
|
||
this.renderSelfHostedOptions(this.plugin.settings.texify, containerEl, false);
|
||
containerEl.createEl("h2", { text: "Pix2Tex" });
|
||
this.renderSelfHostedOptions(this.plugin.settings.pix2tex, containerEl, true);
|
||
containerEl.createEl("h2", { text: "SimpleTex" });
|
||
new import_obsidian.Setting(containerEl).setName("Token").setDesc(
|
||
"Your SimpleTexToken, see README.md for more info."
|
||
).addText(
|
||
(text) => text.setPlaceholder("Enter token...").setValue(this.plugin.settings.simpleTexToken).onChange(async (value) => {
|
||
this.plugin.settings.simpleTexToken = value;
|
||
await this.plugin.saveSettings();
|
||
})
|
||
);
|
||
}
|
||
};
|
||
|
||
// src/editor-interact.ts
|
||
var loadingText = `Loading latex...`;
|
||
var EditorInteract = class {
|
||
constructor(view) {
|
||
this.view = view;
|
||
this.cursor = view.editor.getCursor();
|
||
this.editor = view.editor;
|
||
}
|
||
insertLoadingText() {
|
||
this.editor.replaceRange(loadingText, this.cursor);
|
||
this.editor.setCursor({
|
||
line: this.cursor.line,
|
||
ch: this.cursor.ch + loadingText.length
|
||
});
|
||
}
|
||
insertResponseToEditor(res) {
|
||
this.view.editor.replaceRange(res, this.cursor, {
|
||
// Insert the response
|
||
ch: this.cursor.ch + loadingText.length,
|
||
// We replace the loading text
|
||
line: this.cursor.line
|
||
});
|
||
}
|
||
};
|
||
|
||
// src/main.ts
|
||
function getLatexProvider(isMultiline, settings) {
|
||
if (settings.latexProvider === "SimpleTex") {
|
||
return new SimpleTex(isMultiline, settings);
|
||
} else {
|
||
return new Pic2Tex(isMultiline, settings);
|
||
}
|
||
}
|
||
var OCRLatexPlugin = class extends import_obsidian2.Plugin {
|
||
getClipboardImage() {
|
||
const hasImageCopied = import_electron.clipboard.availableFormats().includes("image/png") || import_electron.clipboard.availableFormats().includes("image/jpeg");
|
||
if (!hasImageCopied) {
|
||
alert(
|
||
"No image found in clipboard, please copy an image then run command again."
|
||
);
|
||
return null;
|
||
}
|
||
return import_electron.clipboard.readImage().toPNG();
|
||
}
|
||
async insert(provider) {
|
||
try {
|
||
const view = this.app.workspace.getActiveViewOfType(import_obsidian2.MarkdownView);
|
||
if (!view) {
|
||
alert("No markdown view found, please open a markdown file.");
|
||
return;
|
||
}
|
||
const editorInteract = new EditorInteract(view);
|
||
const image = this.getClipboardImage();
|
||
if (!image)
|
||
return;
|
||
editorInteract.insertLoadingText();
|
||
const parsedLatex = await provider.sendRequest(image);
|
||
console.log(parsedLatex);
|
||
editorInteract.insertResponseToEditor(parsedLatex);
|
||
} catch (error) {
|
||
console.error(error);
|
||
alert(
|
||
"Error while fetching latex, please check the console for more information."
|
||
);
|
||
}
|
||
}
|
||
async onload() {
|
||
await this.loadSettings();
|
||
this.addCommand({
|
||
id: "generate-latex-from-last-image-multiline",
|
||
name: "Generate multiline LaTeX from last image to clipboard",
|
||
callback: () => {
|
||
this.insert(
|
||
getLatexProvider(true, this.settings)
|
||
);
|
||
}
|
||
});
|
||
this.addCommand({
|
||
id: "generate-latex-from-last-image-inline",
|
||
name: "Generate inline LaTeX from last image to clipboard",
|
||
callback: () => {
|
||
this.insert(
|
||
getLatexProvider(false, this.settings)
|
||
);
|
||
}
|
||
});
|
||
this.addCommand({
|
||
id: "generate-markdown-from-last-image",
|
||
name: "Generate markdown from last image to clipboard using Texify",
|
||
callback: async () => {
|
||
this.insert(new Texify(this.settings.texify));
|
||
}
|
||
});
|
||
this.addSettingTab(new OCRLatexSettings(this.app, this));
|
||
}
|
||
onunload() {
|
||
}
|
||
async loadSettings() {
|
||
this.settings = Object.assign(
|
||
{},
|
||
DEFAULT_SETTINGS,
|
||
await this.loadData()
|
||
);
|
||
}
|
||
async saveSettings() {
|
||
await this.saveData(this.settings);
|
||
}
|
||
};
|
||
// Annotate the CommonJS export names for ESM import in node:
|
||
0 && (module.exports = {});
|
||
/*! Bundled license information:
|
||
|
||
web-streams-polyfill/dist/ponyfill.es2018.js:
|
||
(**
|
||
* @license
|
||
* web-streams-polyfill v3.3.3
|
||
* Copyright 2024 Mattias Buelens, Diwank Singh Tomer and other contributors.
|
||
* This code is released under the MIT license.
|
||
* SPDX-License-Identifier: MIT
|
||
*)
|
||
|
||
fetch-blob/index.js:
|
||
(*! fetch-blob. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
||
|
||
formdata-polyfill/esm.min.js:
|
||
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
||
|
||
node-domexception/index.js:
|
||
(*! node-domexception. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
||
|
||
mime-db/index.js:
|
||
(*!
|
||
* mime-db
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
|
||
mime-types/index.js:
|
||
(*!
|
||
* mime-types
|
||
* Copyright(c) 2014 Jonathan Ong
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*)
|
||
*/
|