UNPKG

@typespec/ts-http-runtime

Version:

Isomorphic client library for making HTTP requests in node.js and browser.

69 lines 2.02 kB
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { Readable } from "stream"; import { isBlob } from "./typeGuards.js"; async function* streamAsyncIterator() { const reader = this.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) { return; } yield value; } } finally { reader.releaseLock(); } } function makeAsyncIterable(webStream) { if (!webStream[Symbol.asyncIterator]) { webStream[Symbol.asyncIterator] = streamAsyncIterator.bind(webStream); } if (!webStream.values) { webStream.values = streamAsyncIterator.bind(webStream); } } function ensureNodeStream(stream) { if (stream instanceof ReadableStream) { makeAsyncIterable(stream); return Readable.fromWeb(stream); } else { return stream; } } function toStream(source) { if (source instanceof Uint8Array) { return Readable.from(Buffer.from(source)); } else if (isBlob(source)) { return ensureNodeStream(source.stream()); } else { return ensureNodeStream(source); } } /** * Utility function that concatenates a set of binary inputs into one combined output. * * @param sources - array of sources for the concatenation * @returns - in Node, a (() =\> NodeJS.ReadableStream) which, when read, produces a concatenation of all the inputs. * In browser, returns a `Blob` representing all the concatenated inputs. * * @internal */ export async function concat(sources) { return function () { const streams = sources.map((x) => (typeof x === "function" ? x() : x)).map(toStream); return Readable.from((async function* () { for (const stream of streams) { for await (const chunk of stream) { yield chunk; } } })()); }; } //# sourceMappingURL=concat.js.map