it-length
Version: 
Counts the number of items in an async iterable
57 lines • 1.26 kB
JavaScript
/**
 * @packageDocumentation
 *
 * Counts the number of items in an (async)iterable.
 *
 * N.b. will consume the iterable
 *
 * @example
 *
 * ```javascript
 * import length from 'it-length'
 *
 * // This can also be an iterator, generator, etc
 * const values = [0, 1, 2, 3, 4]
 *
 * const res = length(values)
 *
 * console.info(res) // 5
 * ```
 *
 * Async sources must be awaited:
 *
 * ```javascript
 * import length from 'it-length'
 *
 * const values = async function * () {
 *   yield * [0, 1, 2, 3, 4]
 * }
 *
 * const res = await length(values())
 *
 * console.info(res) // 5
 * ```
 */
function isAsyncIterable(thing) {
    return thing[Symbol.asyncIterator] != null;
}
function length(source) {
    if (isAsyncIterable(source)) {
        return (async () => {
            let count = 0;
            for await (const _ of source) { // eslint-disable-line no-unused-vars,@typescript-eslint/no-unused-vars
                count++;
            }
            return count;
        })();
    }
    else {
        let count = 0;
        for (const _ of source) { // eslint-disable-line no-unused-vars,@typescript-eslint/no-unused-vars
            count++;
        }
        return count;
    }
}
export default length;
//# sourceMappingURL=index.js.map