UNPKG

it-length

Version:

Counts the number of items in an async iterable

57 lines 1.26 kB
/** * @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