NaturalCycles/nodejs-lib

View on GitHub
src/stream/readable/readableForEach.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { Mapper, _passNothingPredicate, AbortableAsyncMapper } from '@naturalcycles/js-lib'
import { ReadableTyped, _pipeline } from '../../index'
import { transformMap, TransformMapOptions } from '../transform/transformMap'

/**
 * Convenience function to do `.forEach` over a Readable.
 * Typed! (unlike default Readable).
 *
 * Try native readable.forEach() instead!
 *
 * @experimental
 */
export async function readableForEach<T>(
  readable: ReadableTyped<T>,
  mapper: AbortableAsyncMapper<T, void>,
  opt: TransformMapOptions<T, void> = {},
): Promise<void> {
  await _pipeline([
    readable,
    transformMap<T, void>(mapper, { ...opt, predicate: _passNothingPredicate }),
  ])
}

/**
 * Convenience function to do `.forEach` over a Readable.
 * Typed! (unlike default Readable).
 *
 * @experimental
 */
export async function readableForEachSync<T>(
  readable: ReadableTyped<T>,
  mapper: Mapper<T, void>,
): Promise<void> {
  // async iteration
  let index = 0
  for await (const item of readable) {
    mapper(item, index++)
  }
}