UNPKG

docker-decoder-stream

Version:

TS/JS decoder for Docker streams (logs and container attach)

1 lines 34.7 kB
{"version":3,"sources":["../node_modules/eventemitter3/index.js","../node_modules/eventemitter3/index.mjs","../src/assert.ts","../src/parseDockerFrame.ts","../src/concatUint8Arrays.ts","../src/DockerDecoder.ts","../src/DisposableStack.ts","../src/isReadableByteStreamController.ts","../src/DockerDecoderStream.ts","../src/mixDownReaders.ts"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","export function assert<T>(e: T, message?: string): asserts e is NonNullable<T> {\r\n if (!e) {\r\n throw new AssertionError(message);\r\n }\r\n}\r\n\r\nexport class AssertionError extends Error {\r\n override name = \"AssertionError\";\r\n}","export function parseDockerFrameType(buffer: Uint8Array): \"stdin\" | \"stdout\" | \"stderr\" {\r\n switch (buffer[0]) {\r\n case 0:\r\n return \"stdin\";\r\n case 1:\r\n return \"stdout\";\r\n case 2:\r\n return \"stderr\";\r\n default:\r\n throw new Error(`Incorrect docker frame type: ${buffer[0]}`);\r\n }\r\n}\r\n\r\nexport function parseDockerFrameLength(buffer: Uint8Array): number {\r\n return (\r\n (buffer[4] << 24) |\r\n (buffer[5] << 16) |\r\n (buffer[6] << 8) |\r\n (buffer[7])\r\n );\r\n}","export function concatUint8Arrays(chunks: Uint8Array[]): Uint8Array {\r\n const length = chunks.reduce((acc, cur) => acc + cur.length, 0);\r\n const combined = new Uint8Array(length);\r\n let currentIndex = 0;\r\n for (const chunk of chunks) {\r\n combined.set(chunk, currentIndex);\r\n currentIndex += chunk.length;\r\n }\r\n return combined;\r\n}","import { EventEmitter } from \"eventemitter3\";\nimport { assert } from \"./assert\";\nimport { parseDockerFrameLength, parseDockerFrameType } from \"./parseDockerFrame\";\nimport { concatUint8Arrays } from \"./concatUint8Arrays\";\n\nexport type IOStreamType = \"stdin\" | \"stdout\" | \"stderr\";\n\nconst DecoderState = {\n header: 0,\n payload: 1,\n} as const;\ntype DecoderState = typeof DecoderState[keyof typeof DecoderState];\n\nconst HEADER_LENGTH = 8;\n\n/**\n * Decoder for Docker logs stream.\n * \n * @see https://docs.docker.com/engine/api/v1.37/#tag/Container/operation/ContainerAttach\n * header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n */\nexport class DockerDecoder extends EventEmitter<{\n data: (type: IOStreamType, payload: Uint8Array) => any;\n end: (type?: IOStreamType, payload?: Uint8Array) => any;\n error: (err: unknown) => any;\n}> {\n static readonly defaultBufferSize = 8192;\n\n #state: DecoderState = DecoderState.header;\n #nBytesRead = 0;\n #nBytesReadInFrameTotal = 0;\n #frameType: IOStreamType = \"stdout\";\n #frameLength = 0;\n readonly #buffer: Uint8Array;\n\n get bufferLength(): number {\n return this.#buffer.length;\n }\n\n constructor(bufferLength = DockerDecoder.defaultBufferSize) {\n super();\n if (!Number.isInteger(bufferLength)) {\n throw new TypeError(\"Buffer length must be an integer\");\n }\n if (bufferLength <= HEADER_LENGTH) {\n throw new RangeError(`Buffer length cannot be <= ${HEADER_LENGTH}`);\n }\n this.#buffer = new Uint8Array(bufferLength);\n }\n\n decode(chunk: Uint8Array): Record<IOStreamType, Uint8Array> {\n const chunks: Record<IOStreamType, Uint8Array[]> = {\n stdin: [],\n stdout: [],\n stderr: [],\n };\n const enqueue = (type?: IOStreamType, payload?: Uint8Array) => {\n if (!type || !payload) { return }\n chunks[type].push(payload.slice());\n };\n this.#decode(chunk, enqueue);\n this.#close(enqueue);\n\n return {\n stdin: concatUint8Arrays(chunks.stdin),\n stdout: concatUint8Arrays(chunks.stdout),\n stderr: concatUint8Arrays(chunks.stderr),\n }\n }\n\n push(chunk: Uint8Array): void {\n try {\n this.#decode(chunk, (type, payload) => this.emit(\"data\", type, payload));\n } catch (e) {\n this.emit(\"error\", e);\n }\n }\n\n close(): void {\n this.#close((type, payload) => this.emit(\"end\", type, payload));\n }\n\n #close(enqueue: (type?: IOStreamType, payload?: Uint8Array) => void): void {\n if (this.#state === DecoderState.payload) {\n enqueue(this.#frameType, this.#buffer.subarray(0, this.#nBytesRead));\n } else {\n enqueue();\n }\n this.#nBytesRead = 0;\n this.#nBytesReadInFrameTotal = 0;\n this.#state = DecoderState.header;\n }\n\n #decode(chunk: Uint8Array, enqueue: (type: IOStreamType, payload: Uint8Array) => void): void {\n while (chunk.length) {\n const length = chunk.length;\n if (this.#state === DecoderState.header) {\n const bytesToRead = Math.min(HEADER_LENGTH - this.#nBytesRead, chunk.length);\n assert(bytesToRead > 0, \"Error during header chunk processing\");\n this.#buffer.set(chunk.subarray(0, bytesToRead), this.#nBytesRead);\n chunk = chunk.subarray(bytesToRead);\n this.#nBytesRead += bytesToRead;\n if (this.#nBytesRead >= HEADER_LENGTH) {\n this.#frameType = parseDockerFrameType(this.#buffer);\n this.#frameLength = parseDockerFrameLength(this.#buffer);\n this.#nBytesRead = 0;\n if (this.#frameLength) {\n this.#state = DecoderState.payload;\n }\n }\n }\n if (this.#state === DecoderState.payload && chunk.length) {\n const bytesToRead = Math.min(\n this.#frameLength - this.#nBytesRead,\n this.#buffer.length - this.#nBytesRead,\n chunk.length\n );\n assert(bytesToRead > 0, `DockerStreamDecoder have some data to read (${bytesToRead} > 0)`);\n assert(this.#nBytesRead < this.#buffer.length, `Buffer has enough space to acommodate the data (${this.#nBytesRead} < ${this.#buffer.length})`);\n this.#buffer.set(chunk.subarray(0, bytesToRead), this.#nBytesRead);\n chunk = chunk.subarray(bytesToRead);\n this.#nBytesRead += bytesToRead;\n this.#nBytesReadInFrameTotal += bytesToRead;\n const frameCompleted = this.#nBytesReadInFrameTotal >= this.#frameLength;\n if (frameCompleted || this.#nBytesRead >= this.#buffer.length) {\n const payload = this.#buffer.subarray(0, this.#nBytesRead);\n this.#nBytesRead = 0;\n if (frameCompleted) {\n this.#state = DecoderState.header;\n this.#nBytesReadInFrameTotal = 0;\n }\n enqueue(this.#frameType, payload);\n }\n }\n assert(length > chunk.length, `Data processed during DockerStreamDecoder iteration (${length} > ${chunk.length})`);\n }\n }\n}\n","export class DisposableStack {\r\n #disposers: Array<[value: any, disposer: (value: any) => unknown]> = []\r\n\r\n adopt<T>(value: T, disposer: (value: T) => unknown): T {\r\n if (typeof disposer !== \"function\") {\r\n throw TypeError();\r\n }\r\n this.#disposers.push([value, disposer]);\r\n return value;\r\n }\r\n\r\n defer(cb: () => unknown) {\r\n if (typeof cb !== \"function\") {\r\n throw TypeError();\r\n }\r\n this.#disposers.push([undefined, cb]);\r\n }\r\n\r\n dispose() {\r\n while (this.#disposers.length) {\r\n const [value, disposer] = this.#disposers.pop()!;\r\n disposer!(value);\r\n }\r\n }\r\n}","export function isReadableByteStreamController(\r\n ctrlr: ReadableStreamController<Uint8Array>\r\n): ctrlr is ReadableByteStreamController {\r\n return (\"byobRequest\" in ctrlr);\r\n}\r\n","import { DisposableStack } from \"./DisposableStack\";\r\nimport { DockerDecoder, IOStreamType } from \"./DockerDecoder\";\r\nimport { isReadableByteStreamController } from \"./isReadableByteStreamController\";\r\n\r\nexport class DockerDecoderStream {\r\n #decoder = new DockerDecoder();\r\n\r\n constructor(public defaultStreamType: \"stdin\" | \"stdout\" | \"stderr\" = \"stdout\") {\r\n if (defaultStreamType !== \"stdin\" && defaultStreamType !== \"stdout\" && defaultStreamType !== \"stderr\") {\r\n throw new TypeError(\"Incorrect stream type\");\r\n }\r\n }\r\n\r\n get readable(): ReadableStream<Uint8Array> {\r\n switch (this.defaultStreamType) {\r\n case \"stdin\":\r\n return this.stdin;\r\n case \"stdout\":\r\n return this.stdout;\r\n case \"stderr\":\r\n return this.stderr;\r\n default:\r\n throw new TypeError(\"Incorrect stream type\");\r\n }\r\n }\r\n\r\n #writable: WritableStream<Uint8Array> | undefined;\r\n get writable(): WritableStream<Uint8Array> {\r\n this.#writable ??= this.#createWritableStream();\r\n return this.#writable;\r\n }\r\n\r\n #stdin: ReadableStream<Uint8Array> | undefined;\r\n get stdin(): ReadableStream<Uint8Array> {\r\n this.#stdin ??= this.#createReadableStream(\"stdin\");\r\n return this.#stdin;\r\n }\r\n\r\n #stdout: ReadableStream<Uint8Array> | undefined;\r\n get stdout(): ReadableStream<Uint8Array> {\r\n this.#stdout ??= this.#createReadableStream(\"stdout\");\r\n return this.#stdout;\r\n }\r\n\r\n #stderr: ReadableStream<Uint8Array> | undefined;\r\n get stderr(): ReadableStream<Uint8Array> {\r\n this.#stderr ??= this.#createReadableStream(\"stderr\");\r\n return this.#stderr;\r\n }\r\n\r\n // General info on byte streams in js\r\n // https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_byte_streams\r\n\r\n /** @see https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_writable_streams */\r\n #createWritableStream(): WritableStream<Uint8Array> {\r\n const stack = new DisposableStack();\r\n return new WritableStream({\r\n start: (controller) => {\r\n this.#decoder.on(\"error\", stack.adopt(\r\n (err) => { controller.error(err) },\r\n (handler) => { this.#decoder.off(\"error\", handler) }\r\n ));\r\n },\r\n write: (chunk) => {\r\n this.#decoder.push(chunk);\r\n },\r\n close: () => {\r\n this.#decoder.close();\r\n stack.dispose();\r\n },\r\n abort: () => {\r\n this.#decoder.close();\r\n stack.dispose();\r\n },\r\n });\r\n }\r\n\r\n /** @see https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams#creating_your_own_custom_readable_stream */\r\n #createReadableStream(type: \"stdin\" | \"stdout\" | \"stderr\"): ReadableStream<Uint8Array> {\r\n const stack = new DisposableStack();\r\n return new ReadableStream<Uint8Array>({\r\n start: (controller) => {\r\n this.#decoder\r\n .on(\"data\", stack.adopt(enqueue, () => this.#decoder.off(\"data\", enqueue)))\r\n .on(\"end\", stack.adopt((type, frame) => {\r\n enqueue(type, frame);\r\n controller.close();\r\n stack.dispose();\r\n }, (handler) => this.#decoder.off(\"end\", handler)))\r\n .on(\"error\", stack.adopt(\r\n (err) => { controller.error(err) },\r\n (handler) => this.#decoder.off(\"error\", handler)\r\n ));\r\n function enqueue(frameType?: IOStreamType, payload?: Uint8Array) {\r\n if (frameType !== type || !payload) { return }\r\n if (!isReadableByteStreamController(controller) || !controller.byobRequest) {\r\n return controller.enqueue(payload.slice());\r\n }\r\n const { view } = controller.byobRequest;\r\n if (!view || view.byteLength - view.byteOffset < payload.length) {\r\n return controller.byobRequest.respondWithNewView(payload);\r\n }\r\n new Uint8Array(view.buffer, view.byteOffset, view.byteLength).set(payload);\r\n controller.byobRequest.respond(payload.length);\r\n }\r\n },\r\n cancel() {\r\n stack.dispose();\r\n },\r\n type: \"bytes\",\r\n autoAllocateChunkSize: this.#decoder.bufferLength,\r\n });\r\n }\r\n}\r\n\r\n","interface TaggedReadResult<TKey, T> {\r\n done: boolean;\r\n value: readonly [TKey, T | undefined];\r\n}\r\n\r\nexport async function* mixDownReaders<TKey extends string, T>(\r\n readers: Record<TKey, ReadableStreamDefaultReader<T>>\r\n) {\r\n const promisesMap = new Map<TKey, Promise<TaggedReadResult<TKey, T>>>(\r\n Object.keys(readers).map(key => {\r\n const tkey = key as TKey;\r\n return [tkey, readWithTag(readers[tkey], tkey)];\r\n })\r\n );\r\n\r\n do {\r\n const { done, value: [key, payload] } = await Promise.race(shuffle(promisesMap.values()));\r\n if (!done) {\r\n promisesMap.set(key, readWithTag(readers[key], key));\r\n } else {\r\n promisesMap.delete(key);\r\n }\r\n if (payload !== undefined) {\r\n yield [key, payload] as const;\r\n }\r\n } while (promisesMap.size);\r\n}\r\n\r\nfunction readWithTag<TKey extends string, T>(\r\n reader: ReadableStreamDefaultReader<T>, \r\n tag: TKey\r\n): Promise<TaggedReadResult<TKey, T>> {\r\n return reader.read().then(({ value, done }) => {\r\n return { done, value: [tag, value] as const };\r\n });\r\n}\r\n\r\nfunction shuffle<T>(iterable: Iterable<T>): T[] {\r\n const items = Array.from(iterable);\r\n\r\n const shuffledItems: T[] = [];\r\n while (items.length) {\r\n const randomIndex = Math.floor(Math.random() * items.length);\r\n const [item] = items.splice(randomIndex, 1);\r\n shuffledItems.push(item);\r\n }\r\n return shuffledItems;\r\n}"],"mappings":"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","names":["require_eventemitter3","__commonJSMin","exports","module","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","name","handlers","i","l","ee","listeners","a1","a2","a3","a4","a5","len","args","length","j","import_index","assert","e","message","AssertionError","parseDockerFrameType","buffer","parseDockerFrameLength","concatUint8Arrays","chunks","length","acc","cur","combined","currentIndex","chunk","DecoderState","HEADER_LENGTH","DockerDecoder","_DockerDecoder","EventEmitter","#state","#nBytesRead","#nBytesReadInFrameTotal","#frameType","#frameLength","#buffer","bufferLength","chunk","chunks","enqueue","type","payload","#decode","#close","concatUint8Arrays","e","length","bytesToRead","assert","parseDockerFrameType","parseDockerFrameLength","frameCompleted","DisposableStack","#disposers","value","disposer","cb","isReadableByteStreamController","ctrlr","DockerDecoderStream","defaultStreamType","#decoder","DockerDecoder","#writable","#createWritableStream","#stdin","#createReadableStream","#stdout","#stderr","stack","DisposableStack","controller","err","handler","chunk","type","enqueue","frame","frameType","payload","isReadableByteStreamController","view","mixDownReaders","readers","promisesMap","key","tkey","readWithTag","done","payload","shuffle","reader","tag","value","iterable","items","shuffledItems","randomIndex","item"]}