{"version":3,"file":"polyfill.min.js","sources":["../src/stub/symbol.ts","../src/utils.ts","../src/stub/assert.ts","../src/lib/helpers/miscellaneous.ts","../src/lib/helpers/webidl.ts","../src/lib/simple-queue.ts","../src/lib/readable-stream/generic-reader.ts","../src/lib/abstract-ops/internal-methods.ts","../src/stub/number-isfinite.ts","../src/stub/math-trunc.ts","../src/lib/validators/basic.ts","../src/lib/validators/readable-stream.ts","../src/lib/readable-stream/default-reader.ts","../src/target/es5/stub/async-iterator-prototype.ts","../src/lib/readable-stream/async-iterator.ts","../src/stub/number-isnan.ts","../src/lib/abstract-ops/ecmascript.ts","../src/lib/abstract-ops/miscellaneous.ts","../src/lib/abstract-ops/queue-with-sizes.ts","../src/lib/readable-stream/byte-stream-controller.ts","../src/lib/readable-stream/byob-reader.ts","../src/lib/abstract-ops/queuing-strategy.ts","../src/lib/validators/queuing-strategy.ts","../src/lib/validators/underlying-sink.ts","../src/lib/validators/writable-stream.ts","../src/lib/abort-signal.ts","../src/lib/writable-stream.ts","../src/stub/native.ts","../src/stub/dom-exception.ts","../src/lib/readable-stream/pipe.ts","../src/lib/readable-stream/default-controller.ts","../src/lib/readable-stream/tee.ts","../src/lib/validators/underlying-source.ts","../src/lib/validators/reader-options.ts","../src/lib/validators/pipe-options.ts","../src/lib/readable-stream.ts","../src/lib/validators/readable-writable-pair.ts","../src/lib/validators/iterator-options.ts","../src/lib/validators/queuing-strategy-init.ts","../src/lib/byte-length-queuing-strategy.ts","../src/lib/count-queuing-strategy.ts","../src/lib/validators/transformer.ts","../src/lib/transform-stream.ts","../src/polyfill.ts"],"sourcesContent":["/// <reference lib=\"es2015.symbol\" />\n\nconst SymbolPolyfill: (description?: string) => symbol =\n typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n Symbol :\n description => `Symbol(${description})` as any as symbol;\n\nexport default SymbolPolyfill;\n","/// <reference lib=\"dom\" />\n\nexport function noop(): undefined {\n return undefined;\n}\n\nfunction getGlobals() {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","import { noop } from '../utils';\n\nexport const AssertionError = /* @__PURE__*/ class AssertionError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\n\nconst assert: (test: boolean, message?: string) => void =\n DEBUG ? (test, message) => {\n if (!test) {\n throw new AssertionError('Assertion failed' + (message ? `: ${message}` : ''));\n }\n } : noop;\n\nexport default assert;\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n","import { globals } from '../../utils';\nimport { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\nexport function newPromise<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise<TResult1 | TResult2>;\n}\n\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => void | PromiseLike<void>,\n onRejected?: (reason: any) => void | PromiseLike<void>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => void | PromiseLike<void>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => void | PromiseLike<void>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nexport const queueMicrotask: (fn: () => void) => void = (() => {\n const globalQueueMicrotask = globals && globals.queueMicrotask;\n if (typeof globalQueueMicrotask === 'function') {\n return globalQueueMicrotask;\n }\n\n const resolvedPromise = promiseResolvedWith(undefined);\n return (fn: () => void) => PerformPromiseThen(resolvedPromise, fn);\n})();\n\nexport function reflectCall<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node<T> {\n _elements: T[];\n _next: Node<T> | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue<T> {\n private _front: Node<T>;\n private _back: Node<T>;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\n\nexport function ReadableStreamReaderGenericInitialize<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._ownerReadableStream._reader === reader);\n\n if (reader._ownerReadableStream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n reader._ownerReadableStream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader<any>, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader<any>) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument<T extends any>(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField<T extends any>(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult<T> = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest<R> {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise<ReadableStreamDefaultReadResult<R>> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest<any>);\n }\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// <reference lib=\"es2018.asynciterable\" />\n\nexport let AsyncIteratorPrototype: AsyncIterable<any> | undefined;\n\nif (typeof Symbol.asyncIterator === 'symbol') {\n // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n AsyncIteratorPrototype = {\n // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n [Symbol.asyncIterator](this: AsyncIterator<any>) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// <reference lib=\"es2018.asynciterable\" />\n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadableStreamDefaultReadResult,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator<R> extends AsyncIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('iterate'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n if (reader._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('finish iterating'));\n }\n\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ndeclare class ReadableStreamAsyncIteratorInstance<R> implements ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nif (AsyncIteratorPrototype !== undefined) {\n Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance<any>)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","export function CreateArrayFromList<T extends any[]>(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\n// Not implemented correctly\nexport function TransferArrayBuffer<T extends ArrayBufferLike>(O: T): T {\n return O;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function CanTransferArrayBuffer(O: ArrayBufferLike): boolean {\n return true;\n}\n\n// Not implemented correctly\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function IsDetachedBuffer(O: ArrayBufferLike): boolean {\n return false;\n}\n\nexport function ArrayBufferSlice(buffer: ArrayBufferLike, begin: number, end: number): ArrayBufferLike {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: ArrayBufferView): Uint8Array {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize<T>(container: QueueContainer<QueuePair<T>>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue<T>(container: QueueContainer<QueuePair<T>>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\n container._queueTotalSize = 0;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: ArrayBufferView | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: ArrayBufferView | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ArrayBufferViewConstructor<T extends ArrayBufferView = ArrayBufferView> {\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n readonly BYTES_PER_ELEMENT: number;\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBufferLike;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<Uint8Array>;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\n readerType: 'byob';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue<ByteQueueElement>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: ArrayBufferView | undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise<void> {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<Uint8Array>): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n const entry = this._queue.shift()!;\n this._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(this);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n\n readRequest._chunkSteps(view);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor<T extends ArrayBufferView>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\n) {\n assert(stream._state !== 'errored');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor<T>(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as Uint8Array, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor<T extends ArrayBufferView>(\n pullIntoDescriptor: PullIntoDescriptor<T>\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBufferLike,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const elementSize = pullIntoDescriptor.elementSize;\n\n const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n if (maxAlignedBytes > currentAlignedBytes) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nexport function ReadableByteStreamControllerPullInto<T extends ArrayBufferView>(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor<T>).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset: view.byteOffset,\n byteLength: view.byteLength,\n bytesFilled: 0,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor<T>(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest<T>(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled === 0);\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled > 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(controller: ReadableByteStreamController, chunk: ArrayBufferView) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const buffer = chunk.buffer;\n const byteOffset = chunk.byteOffset;\n const byteLength = chunk.byteLength;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n }\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n if (ReadableStreamHasDefaultReader(stream)) {\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => promiseResolvedWith(undefined);\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: ArrayBufferView) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableByteStream, ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult<T extends ArrayBufferView> = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest<T extends ArrayBufferView>(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest<T extends ArrayBufferView> {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\n\n constructor(stream: ReadableByteStream) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read<T extends ArrayBufferView>(view: T): Promise<ReadableStreamBYOBReadResult<T>> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n if (this._readIntoRequests.length > 0) {\n throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n }\n\n ReadableStreamReaderGenericRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead<T extends ArrayBufferView>(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n readIntoRequest\n );\n }\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise<void> {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { AbortController, AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise<undefined>;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise<void> {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter<W> {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight,\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise<undefined> {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort();\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise<undefined>((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream<any>): Promise<undefined> {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise<undefined>((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise<undefined>;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream<W>) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise<undefined> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise<void>;\n write(chunk: W = undefined!): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord<W> = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise<void> {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController<any> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise<void> = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise<void> = () => promiseResolvedWith(undefined);\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded<W>(controller: WritableStreamDefaultController<W>) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite<W>(controller: WritableStreamDefaultController<W>, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController<any>): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController<any>, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// <reference lib=\"dom\" />\nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// <reference types=\"node\" />\nimport { NativeDOMException } from './native';\n\ndeclare class DOMExceptionClass extends Error {\n constructor(message?: string, name?: string);\n\n name: string;\n message: string;\n}\n\ntype DOMException = DOMExceptionClass;\ntype DOMExceptionConstructor = typeof DOMExceptionClass;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction createDOMExceptionPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line no-redeclare\nconst DOMException: DOMExceptionConstructor =\n isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith<void>(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise<void>> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise<void>((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise<void> {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise<void>,\n action: (reason: any) => void) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise<void>, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest() {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any) {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n }\n });\n}\n","import { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport { ValidatedUnderlyingSource } from './underlying-source';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController<R = any>(x: any): x is ReadableStreamDefaultController<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController<any>): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController<any>): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController<any>) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController<any>) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue<R>(\n controller: ReadableStreamDefaultController<R>,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController<any>, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController<any>\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => promiseResolvedWith(undefined);\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n IsReadableStream,\n ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultController,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\n\nexport function ReadableStreamTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableStream<R>;\n let branch2: ReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(\n branch1._readableStreamController as ReadableStreamDefaultController<R>,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController<R>,\n chunk2\n );\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController as ReadableStreamDefaultController<R>);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController<R>);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise<void> {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise<void> {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController as ReadableStreamDefaultController<R>, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController<R>, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader<Uint8Array> = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<Uint8Array>) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest<Uint8Array> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: ArrayBufferView, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader<Uint8Array>(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest<ArrayBufferView> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise<void> {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise<void> {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise<void> {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise<void> {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport { ReadableStreamGetReaderOptions } from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n","import { assertDictionary } from './basic';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport { ReadableStreamGetReaderOptions } from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\n\nexport type ReadableByteStream = ReadableStream<Uint8Array> & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream<R = any> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo<R>(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream<R>, ReadableStream<R>] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator<R>;\n}\n\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nif (typeof Symbol.asyncIterator === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.asyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n });\n}\n\nexport {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream<R>(startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1): ReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n reader._readIntoRequests = new SimpleQueue();\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose<R>(stream: ReadableStream<R>): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n\n reader._readRequests = new SimpleQueue();\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n\n reader._readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n\n reader._readIntoRequests = new SimpleQueue();\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader<R> = ReadableStreamDefaultReader<R> | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair<RS extends ReadableStream, WS extends WritableStream>(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import { assertDictionary } from './basic';\nimport {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\ntry {\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy<ArrayBufferView> {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\ntry {\n Object.defineProperty(countSizeFunction, 'name', {\n value: 'size',\n configurable: true\n });\n} catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n}\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy<any> {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\n assertDictionary(original, context);\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [chunk, controller]);\n}\n","import assert from '../stub/assert';\nimport { newPromise, promiseRejectedWith, promiseResolvedWith, transformPromiseWith } from './helpers/webidl';\nimport { CreateReadableStream, ReadableStream, ReadableStreamDefaultController } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport {\n Transformer,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: ReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream<O> {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream<I> {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport {\n Transformer,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n return promiseResolvedWith(undefined);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(\n stream._readable._readableStreamController as ReadableStreamDefaultController<any>,\n e\n );\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController as ReadableStreamDefaultController<O>);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController<O = any>(x: any): x is TransformStreamDefaultController<O> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise<void> => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n\n let flushAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n }\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise<void> {\n // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n // errored.\n TransformStreamError(stream, reason);\n return promiseResolvedWith(undefined);\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm<I, O>(stream: TransformStream<I, O>): Promise<void> {\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n const controller = stream._transformStreamController;\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n // Return a promise that is fulfilled with undefined on success.\n return transformPromiseWith(flushPromise, () => {\n if (readable._state === 'errored') {\n throw readable._storedError;\n }\n ReadableStreamDefaultControllerClose(readable._readableStreamController as ReadableStreamDefaultController<O>);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","import {\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n ReadableByteStreamController,\n ReadableStream,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultController,\n ReadableStreamDefaultReader,\n TransformStream,\n TransformStreamDefaultController,\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter\n} from './ponyfill';\nimport { globals } from './utils';\n\n// Export\nexport * from './ponyfill';\n\nconst exports = {\n ReadableStream,\n ReadableStreamDefaultController,\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader,\n\n WritableStream,\n WritableStreamDefaultController,\n WritableStreamDefaultWriter,\n\n ByteLengthQueuingStrategy,\n CountQueuingStrategy,\n\n TransformStream,\n TransformStreamDefaultController\n};\n\n// Add classes to global scope\nif (typeof globals !== 'undefined') {\n for (const prop in exports) {\n if (Object.prototype.hasOwnProperty.call(exports, prop)) {\n Object.defineProperty(globals, prop, {\n value: exports[prop as (keyof typeof exports)],\n writable: true,\n configurable: true\n });\n }\n }\n}\n"],"names":["SymbolPolyfill","Symbol","iterator","description","concat","noop","globals","self","window","global","assert","typeIsObject","x","rethrowAssertionErrorRejection","originalPromise","Promise","originalPromiseThen","prototype","then","originalPromiseResolve","resolve","bind","originalPromiseReject","reject","newPromise","executor","promiseResolvedWith","value","promiseRejectedWith","reason","PerformPromiseThen","promise","onFulfilled","onRejected","call","uponPromise","undefined","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","fn","reflectCall","F","V","args","TypeError","Function","apply","promiseCall","QUEUE_MAX_ARRAY_SIZE","SimpleQueue","this","_cursor","_size","_front","_elements","_next","_back","Object","defineProperty","get","push","element","oldBack","newBack","length","shift","oldFront","newFront","oldCursor","newCursor","elements","forEach","callback","i","node","peek","front","cursor","ReadableStreamReaderGenericInitialize","reader","stream","_ownerReadableStream","_reader","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","_closedPromise_resolve","_closedPromise_reject","defaultReaderClosedPromiseResetToRejected","readerLockException","name","_closedPromise","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","Number","isFinite","MathTrunc","Math","trunc","v","ceil","floor","assertDictionary","obj","context","assertFunction","assertObject","isObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","MAX_SAFE_INTEGER","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","IsReadableStreamDefaultReader","_readRequests","ReadableStreamFulfillReadRequest","chunk","done","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","AsyncIteratorPrototype","IsReadableStreamLocked","defaultReaderBrandCheckException","cancel","read","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","e","releaseLock","hasOwnProperty","_disturbed","_readableStreamController","defineProperties","enumerable","closed","toStringTag","configurable","asyncIterator","_a","ReadableStreamAsyncIteratorImpl","preventCancel","_ongoingPromise","_isFinished","_preventCancel","next","_this","nextSteps","_nextSteps","return","returnSteps","_returnSteps","result","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","streamAsyncIteratorBrandCheckException","setPrototypeOf","NumberIsNaN","isNaN","CreateArrayFromList","slice","CopyDataBlockBytes","dest","destOffset","src","srcOffset","n","Uint8Array","set","ArrayBufferSlice","buffer","begin","end","ArrayBuffer","CloneAsUint8Array","O","byteOffset","byteLength","DequeueValue","container","_queue","pair","_queueTotalSize","size","EnqueueValueWithSize","Infinity","RangeError","ResetQueue","ReadableStreamBYOBRequest","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","respond","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","respondWithNewView","view","isView","ReadableByteStreamControllerRespondWithNewView","ReadableByteStreamController","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","ReadableByteStreamControllerGetDesiredSize","close","_closeRequested","state","_controlledReadableByteStream","ReadableByteStreamControllerClose","enqueue","ReadableByteStreamControllerEnqueue","error","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","controller","shouldPull","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","desiredSize","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","_readIntoRequests","readIntoRequest","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","min","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","ready","queue","headOfQueue","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","_byobRequest","ReadableStreamClose","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","remainder","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","byobRequest","create","request","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","r","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","constructor","DataView","BYTES_PER_ELEMENT","ctor","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","strategy","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","init","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","isAbortSignal","aborted","supportsAbortController","AbortController","WritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","abort","start","type","write","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","streamBrandCheckException","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","getWriter","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","writeRequest","abortRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","_readyPromise_resolve","_readyPromise_reject","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","locked","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","chunkSize","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","IsWritableStreamDefaultController","defaultControllerBrandCheckException","signal","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","sinkWritePromise","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","abortReason","NativeDOMException","DOMException","isDOMExceptionConstructor","message","Error","captureStackTrace","writable","ReadableStreamPipeTo","source","preventClose","preventAbort","shuttingDown","currentWrite","action","actions","shutdownWithAction","all","map","addEventListener","isOrBecomesErrored","shutdown","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed_1","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","mode","convertPipeOptions","options","assertAbortSignal","Boolean","ReadableStream","rawUnderlyingSource","underlyingSource","pull","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","getReader","rawOptions","convertReaderOptions","pipeThrough","rawTransform","transform","readable","convertReadableWritablePair","pipeTo","destination","tee","values","impl","convertIteratorOptions","convertQueuingStrategyInit","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","TransformStream","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","flush","readableType","writableType","convertTransformer","startPromise_resolve","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise","_writable","_transformStreamController","_backpressureChangePromise","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","IsTransformStream","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStreamDefaultController","terminate","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","exports","prop"],"mappings":"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"} |