UNPKG

1.27 kBPlain TextView Raw
1import { Transform } from 'stream'
2import { ErrorMode, Mapper } from '@naturalcycles/js-lib'
3import { TransformTyped } from '../stream.model'
4
5export interface TransformMapSimpleOptions {
6 /**
7 * Only supports THROW_IMMEDIATELY (default) and SUPPRESS.
8 *
9 * @default ErrorMode.THROW_IMMEDIATELY
10 */
11 errorMode?: ErrorMode.THROW_IMMEDIATELY | ErrorMode.SUPPRESS
12}
13
14/**
15 * Simplest version of `transformMap`.
16 * errorMode: IMMEDIATE
17 * Sync mode.
18 * Has 0 options to configure.
19 * If you need any configuration - use transformMap or transformMapSync.
20 * Sync (not async) version of transformMap.
21 * Supposedly faster, for cases when async is not needed.
22 */
23export 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() // suppress the error
40 } else {
41 // Emit the error
42 cb(err as Error)
43 }
44 }
45 },
46 })
47}