@augment-vir/common
Version:
A collection of augments, helpers types, functions, and classes for any JavaScript environment.
35 lines (34 loc) • 921 B
JavaScript
/**
* Convert an async iterator or async iterable into an array.
*
* @category Array
* @category Package : @augment-vir/common
*/
export async function fromAsyncIterable(asyncInput) {
const collapsed = [];
if (isAsyncIterable(asyncInput)) {
for await (const entry of asyncInput) {
collapsed.push(entry);
}
return collapsed;
}
else if (isAsyncIterator(asyncInput)) {
for (;;) {
const { value, done } = await asyncInput.next();
if (done) {
break;
}
collapsed.push(value);
}
return collapsed;
}
else {
throw new TypeError('Input is neither AsyncIterable nor AsyncIterator.');
}
}
function isAsyncIterable(value) {
return typeof value[Symbol.asyncIterator] === 'function';
}
function isAsyncIterator(value) {
return typeof value.next === 'function';
}