node-web-stream-adapters
Version:
Node adapters for web streams
63 lines • 2.23 kB
JavaScript
/**
* Create a ReadableStream frpom an iterable.
* ON node 20 there is a ReadableStream.from fucntion to do it. But not on node 18
* When studio server is moved to node 20 we can remove this fucntion
* @param iterable
* @returns
*/
export function createReadableStreamFromAsyncIterable(iterable) {
return createReadableStreamFromIterator(iterable[Symbol.asyncIterator]());
}
export function createReadableStreamFromIterable(iterable) {
return createReadableStreamFromIterator(iterable[Symbol.iterator]());
}
export function createReadableStreamFromIterator(it) {
//const it = iterable[Symbol.asyncIterator]();
if (ReadableStream.from) {
return ReadableStream.from(it);
}
else {
return new ReadableStream({
async pull(controller) {
const { value, done } = await it.next();
if (done) {
controller.close();
}
else {
controller.enqueue(value);
}
},
cancel() {
it.return?.();
}
});
}
}
export function createReadableStreamFromString(value) {
return new ReadableStream({
start(controller) {
controller.enqueue(value);
controller.close();
},
});
}
export function createReadableStreamFromBuffer(value) {
return new ReadableStream({
start(controller) {
controller.enqueue(value);
controller.close();
},
});
}
export function createReadableStreamFromReadable(stream) {
return createReadableStreamFromAsyncIterable(stream);
}
// shorter names
const asyncIterableToWebStream = createReadableStreamFromAsyncIterable;
const iterableToWebStream = createReadableStreamFromIterable;
const iteratorToWebStream = createReadableStreamFromIterator;
const stringToWebStream = createReadableStreamFromString;
const bufferToWebStream = createReadableStreamFromBuffer;
const readableToWebStream = createReadableStreamFromReadable;
export { asyncIterableToWebStream, iterableToWebStream, iteratorToWebStream, stringToWebStream, bufferToWebStream, readableToWebStream };
//# sourceMappingURL=readableToWebStream.js.map