{"version":3,"file":"index.mjs","sources":["../../../@hive/streams/dist/index.mjs"],"sourcesContent":["//#region src/index.ts\n/**\n* Simple wrapper around a `ReadableStream` that contains the total length of\n* the streamed binary data.\n*/\nvar ByteStream = class {\n\t/**\n\t* Underlying `ReadableStream` instance.\n\t*/\n\tstream;\n\t/**\n\t* Total length of the stream in bytes.\n\t*/\n\tlength;\n\tconstructor(stream, opts) {\n\t\tthis.stream = stream;\n\t\tthis.length = opts.length;\n\t}\n};\n/**\n* Utility function to convert a `Uint8Array` to an `ArrayBuffer`.\n*\n* Required by various standards.\n*\n* @param array `Uint8Array` to convert.\n*\n* @returns An `ArrayBuffer` that contains the `Uint8Array` data.\n*/\nconst uint8ArrayToArrayBuffer = (array) => {\n\treturn array.buffer instanceof ArrayBuffer ? array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength) : array.slice().buffer;\n};\n/**\n* Convert a `Uint8Array` to a `ByteStream`.\n*\n* @param binary `Uint8Array` to convert.\n*\n* @returns A `ByteStream` that emits the `Uint8Array` chunks.\n*/\nconst binaryToByteStream = (binary) => {\n\tconst buffer = uint8ArrayToArrayBuffer(binary);\n\treturn new ByteStream(new Blob([buffer]).stream(), { length: buffer.byteLength });\n};\n/**\n* Convert a `ByteStream` to a `Uint8Array`.\n*\n* @param stream `ByteStream` to convert.\n*\n* @returns A `Uint8Array` that contains the streamed binary data.\n*/\nconst byteStreamToBinary = async (stream) => {\n\tconst reader = stream.stream.getReader();\n\tconst binary = new Uint8Array(stream.length);\n\tlet processed = 0;\n\twhile (true) {\n\t\tconst { value, done } = await reader.read();\n\t\tif (done) break;\n\t\tif (value) {\n\t\t\tbinary.set(value, processed);\n\t\t\tprocessed += value.byteLength;\n\t\t}\n\t}\n\treturn binary;\n};\n/**\n* Wrap a `ByteStream` in a progress stream that emits progress events at the\n* specified interval.\n*\n* @param src `ByteStream` to wrap.\n* @param opts Options for the progress stream.\n*\n* @returns A `ByteStream` that emits progress events at the specified interval.\n*/\nconst trackProgress = (stream, opts) => {\n\tconst { progress, done, cancelled } = opts ?? {};\n\tlet processed = 0;\n\tconst reader = stream.stream.getReader();\n\tconst start = Date.now();\n\treturn new ByteStream(new ReadableStream({\n\t\tasync pull(controller) {\n\t\t\ttry {\n\t\t\t\tconst { value, done: upstreamDone } = await reader.read();\n\t\t\t\tif (upstreamDone) {\n\t\t\t\t\tdone?.({\n\t\t\t\t\t\ttotal: processed,\n\t\t\t\t\t\tduration: Date.now() - start\n\t\t\t\t\t});\n\t\t\t\t\tcontroller.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tprocessed += value.byteLength;\n\t\t\t\tcontroller.enqueue(value);\n\t\t\t\tconst elapsed = Date.now() - start;\n\t\t\t\tconst throughput = processed / (elapsed / 1e3);\n\t\t\t\tprogress?.({\n\t\t\t\t\tprocessed,\n\t\t\t\t\ttotal: stream.length,\n\t\t\t\t\tpercent: processed / stream.length * 100,\n\t\t\t\t\tduration: elapsed,\n\t\t\t\t\teta: throughput > 0 ? (stream.length - processed) / throughput * 1e3 : null\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tcontroller.error(err);\n\t\t\t}\n\t\t},\n\t\tasync cancel(reason) {\n\t\t\tawait reader.cancel(reason);\n\t\t\tcancelled?.();\n\t\t}\n\t}), { length: stream.length });\n};\n/**\n* Split a single `ByteStream` into two `ByteStream`s which can be consumed\n* from separately.\n*\n* @param stream `ByteStream` to split.\n*\n* @returns A tuple of two `ByteStream` instances.\n*/\nconst splitStream = (stream) => {\n\tconst streams = stream.stream.tee();\n\treturn [new ByteStream(streams[0], { length: stream.length }), new ByteStream(streams[1], { length: stream.length })];\n};\n\n//#endregion\nexport { ByteStream, binaryToByteStream, byteStreamToBinary, splitStream, trackProgress, uint8ArrayToArrayBuffer };"],"names":[],"mappings":"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"}