1 | import { Transform } from 'stream'
|
2 | import { ErrorMode, Mapper } from '@naturalcycles/js-lib'
|
3 | import { TransformTyped } from '../stream.model'
|
4 |
|
5 | export interface TransformMapSimpleOptions {
|
6 | |
7 |
|
8 |
|
9 |
|
10 |
|
11 | errorMode?: ErrorMode.THROW_IMMEDIATELY | ErrorMode.SUPPRESS
|
12 | }
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | export function transformMapSimple<IN = any, OUT = IN>(
|
24 | mapper: Mapper<IN, OUT>,
|
25 | opt: TransformMapSimpleOptions = {},
|
26 | ): TransformTyped<IN, OUT> {
|
27 | let index = -1
|
28 | const { errorMode = ErrorMode.THROW_IMMEDIATELY } = opt
|
29 |
|
30 | return new Transform({
|
31 | objectMode: true,
|
32 | transform(chunk: IN, _encoding, cb) {
|
33 | try {
|
34 | cb(null, mapper(chunk, ++index))
|
35 | } catch (err) {
|
36 | console.error(err)
|
37 |
|
38 | if (errorMode === ErrorMode.SUPPRESS) {
|
39 | cb()
|
40 | } else {
|
41 |
|
42 | cb(err as Error)
|
43 | }
|
44 | }
|
45 | },
|
46 | })
|
47 | }
|