UNPKG

622 BPlain TextView Raw
1import { AsyncMapper } from '@naturalcycles/js-lib'
2import { readableCreate } from '../../index'
3import { ReadableTyped } from '../stream.model'
4
5export function readableMap<IN, OUT>(
6 readable: ReadableTyped<IN>,
7 mapper: AsyncMapper<IN, OUT>,
8): ReadableTyped<OUT> {
9 const out = readableCreate<OUT>()
10
11 void (async () => {
12 try {
13 let index = 0
14 for await (const item of readable) {
15 const v = await mapper(item, index++)
16 out.push(v)
17 }
18
19 // We're done
20 out.push(null)
21 } catch (err) {
22 console.error(err)
23 out.emit('error', err)
24 }
25 })()
26
27 return out
28}