1 | import { AsyncMapper } from '@naturalcycles/js-lib'
|
2 | import { readableCreate } from '../../index'
|
3 | import { ReadableTyped } from '../stream.model'
|
4 |
|
5 | export 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 |
|
20 | out.push(null)
|
21 | } catch (err) {
|
22 | console.error(err)
|
23 | out.emit('error', err)
|
24 | }
|
25 | })()
|
26 |
|
27 | return out
|
28 | }
|