53 lines
1.0 KiB
JavaScript
53 lines
1.0 KiB
JavaScript
|
|
/**
|
||
|
|
* @packageDocumentation
|
||
|
|
*
|
||
|
|
* For when you need a one-liner to collect iterable values.
|
||
|
|
*
|
||
|
|
* @example
|
||
|
|
*
|
||
|
|
* ```javascript
|
||
|
|
* import all from 'it-all'
|
||
|
|
*
|
||
|
|
* // This can also be an iterator, etc
|
||
|
|
* const values = function * () {
|
||
|
|
* yield * [0, 1, 2, 3, 4]
|
||
|
|
* }
|
||
|
|
*
|
||
|
|
* const arr = all(values)
|
||
|
|
*
|
||
|
|
* console.info(arr) // 0, 1, 2, 3, 4
|
||
|
|
* ```
|
||
|
|
*
|
||
|
|
* Async sources must be awaited:
|
||
|
|
*
|
||
|
|
* ```javascript
|
||
|
|
* const values = async function * () {
|
||
|
|
* yield * [0, 1, 2, 3, 4]
|
||
|
|
* }
|
||
|
|
*
|
||
|
|
* const arr = await all(values())
|
||
|
|
*
|
||
|
|
* console.info(arr) // 0, 1, 2, 3, 4
|
||
|
|
* ```
|
||
|
|
*/
|
||
|
|
function isAsyncIterable(thing) {
|
||
|
|
return thing[Symbol.asyncIterator] != null;
|
||
|
|
}
|
||
|
|
function all(source) {
|
||
|
|
if (isAsyncIterable(source)) {
|
||
|
|
return (async () => {
|
||
|
|
const arr = [];
|
||
|
|
for await (const entry of source) {
|
||
|
|
arr.push(entry);
|
||
|
|
}
|
||
|
|
return arr;
|
||
|
|
})();
|
||
|
|
}
|
||
|
|
const arr = [];
|
||
|
|
for (const entry of source) {
|
||
|
|
arr.push(entry);
|
||
|
|
}
|
||
|
|
return arr;
|
||
|
|
}
|
||
|
|
export default all;
|
||
|
|
//# sourceMappingURL=index.js.map
|