@naturalcycles/nodejs-lib 12.56.1 → 12.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/stream/transform/transformLimit.d.ts +5 -1
- package/dist/stream/transform/transformLimit.js +2 -1
- package/dist/stream/transform/transformLogProgress.d.ts +2 -1
- package/dist/stream/transform/transformLogProgress.js +4 -4
- package/dist/stream/transform/transformMapSimple.d.ts +2 -1
- package/dist/stream/transform/transformMapSimple.js +2 -2
- package/dist/stream/transform/transformMapSync.d.ts +2 -1
- package/dist/stream/transform/transformMapSync.js +3 -3
- package/dist/stream/transform/transformTap.d.ts +5 -2
- package/dist/stream/transform/transformTap.js +2 -1
- package/dist/stream/writable/writableFork.d.ts +2 -0
- package/dist/stream/writable/writableFork.js +2 -0
- package/package.json +1 -1
- package/src/stream/transform/transformLimit.ts +8 -2
- package/src/stream/transform/transformLogProgress.ts +7 -4
- package/src/stream/transform/transformMapSimple.ts +5 -3
- package/src/stream/transform/transformMapSync.ts +6 -3
- package/src/stream/transform/transformTap.ts +8 -3
- package/src/stream/writable/writableFork.ts +2 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { CommonLogger } from '@naturalcycles/js-lib';
|
|
1
2
|
import { TransformOptions, TransformTyped } from '../stream.model';
|
|
3
|
+
export interface TransformLimitOptions extends TransformOptions {
|
|
4
|
+
logger?: CommonLogger;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* 0 or falsy value means "no limit"
|
|
4
8
|
*/
|
|
5
|
-
export declare function transformLimit<IN>(limit?: number, opt?:
|
|
9
|
+
export declare function transformLimit<IN>(limit?: number, opt?: TransformLimitOptions): TransformTyped<IN, IN>;
|
|
@@ -6,6 +6,7 @@ const stream_1 = require("stream");
|
|
|
6
6
|
* 0 or falsy value means "no limit"
|
|
7
7
|
*/
|
|
8
8
|
function transformLimit(limit, opt = {}) {
|
|
9
|
+
const { logger = console } = opt;
|
|
9
10
|
let index = 0;
|
|
10
11
|
let ended = false;
|
|
11
12
|
return new stream_1.Transform({
|
|
@@ -21,7 +22,7 @@ function transformLimit(limit, opt = {}) {
|
|
|
21
22
|
}
|
|
22
23
|
if (limit && index === limit) {
|
|
23
24
|
ended = true;
|
|
24
|
-
|
|
25
|
+
logger.log(`transformLimit: limit of ${limit} reached`);
|
|
25
26
|
// this.emit('end') // this makes it "halt" on Node 14 lts
|
|
26
27
|
}
|
|
27
28
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AnyObject } from '@naturalcycles/js-lib';
|
|
1
|
+
import { AnyObject, CommonLogger } from '@naturalcycles/js-lib';
|
|
2
2
|
import { TransformOptions, TransformTyped } from '../stream.model';
|
|
3
3
|
export interface TransformLogProgressOptions<IN = any> extends TransformOptions {
|
|
4
4
|
/**
|
|
@@ -69,6 +69,7 @@ export interface TransformLogProgressOptions<IN = any> extends TransformOptions
|
|
|
69
69
|
* @default 1000
|
|
70
70
|
*/
|
|
71
71
|
logEvery?: number;
|
|
72
|
+
logger?: CommonLogger;
|
|
72
73
|
/**
|
|
73
74
|
* Function to return extra properties to the "progress object".
|
|
74
75
|
*
|
|
@@ -15,7 +15,7 @@ const inspectOpt = {
|
|
|
15
15
|
* Pass-through transform that optionally logs progress.
|
|
16
16
|
*/
|
|
17
17
|
function transformLogProgress(opt = {}) {
|
|
18
|
-
const { metric = 'progress', heapTotal: logHeapTotal = false, heapUsed: logHeapUsed = false, rss: logRss = true, peakRSS: logPeakRSS = true, logRPS = true, logEvery = 1000, batchSize = 1, extra, } = opt;
|
|
18
|
+
const { metric = 'progress', heapTotal: logHeapTotal = false, heapUsed: logHeapUsed = false, rss: logRss = true, peakRSS: logPeakRSS = true, logRPS = true, logEvery = 1000, batchSize = 1, extra, logger = console, } = opt;
|
|
19
19
|
const logProgress = opt.logProgress !== false && logEvery !== 0; // true by default
|
|
20
20
|
const logEvery10 = logEvery * 10;
|
|
21
21
|
const started = Date.now();
|
|
@@ -54,7 +54,7 @@ function transformLogProgress(opt = {}) {
|
|
|
54
54
|
const rps10 = Math.round(sma.push(lastRPS));
|
|
55
55
|
if (mem.rss > peakRSS)
|
|
56
56
|
peakRSS = mem.rss;
|
|
57
|
-
|
|
57
|
+
logger.log((0, util_1.inspect)({
|
|
58
58
|
[final ? `${metric}_final` : metric]: batchedProgress,
|
|
59
59
|
...(extra ? extra(chunk, progress) : {}),
|
|
60
60
|
...(logHeapUsed ? { heapUsed: (0, js_lib_1._mb)(mem.heapUsed) } : {}),
|
|
@@ -76,10 +76,10 @@ function transformLogProgress(opt = {}) {
|
|
|
76
76
|
if (perHour > 900) {
|
|
77
77
|
perHour = Math.round(perHour / 1000) + 'K';
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
logger.log(`${(0, colors_1.dimGrey)((0, time_lib_1.dayjs)().toPretty())} ${(0, colors_1.white)(metric)} took ${(0, colors_1.yellow)((0, js_lib_1._since)(started))} so far to process ${(0, colors_1.yellow)(batchedProgress)} rows, ~${(0, colors_1.yellow)(perHour)}/hour`);
|
|
80
80
|
}
|
|
81
81
|
else if (final) {
|
|
82
|
-
|
|
82
|
+
logger.log(`${(0, colors_1.boldWhite)(metric)} took ${(0, colors_1.yellow)((0, js_lib_1._since)(started))} to process ${(0, colors_1.yellow)(batchedProgress)} rows with total RPS of ${(0, colors_1.yellow)(rpsTotal)}`);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ErrorMode, Mapper } from '@naturalcycles/js-lib';
|
|
1
|
+
import { CommonLogger, ErrorMode, Mapper } from '@naturalcycles/js-lib';
|
|
2
2
|
import { TransformTyped } from '../stream.model';
|
|
3
3
|
export interface TransformMapSimpleOptions {
|
|
4
4
|
/**
|
|
@@ -7,6 +7,7 @@ export interface TransformMapSimpleOptions {
|
|
|
7
7
|
* @default ErrorMode.THROW_IMMEDIATELY
|
|
8
8
|
*/
|
|
9
9
|
errorMode?: ErrorMode.THROW_IMMEDIATELY | ErrorMode.SUPPRESS;
|
|
10
|
+
logger?: CommonLogger;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* Simplest version of `transformMap`.
|
|
@@ -14,7 +14,7 @@ const js_lib_1 = require("@naturalcycles/js-lib");
|
|
|
14
14
|
*/
|
|
15
15
|
function transformMapSimple(mapper, opt = {}) {
|
|
16
16
|
let index = -1;
|
|
17
|
-
const { errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY } = opt;
|
|
17
|
+
const { errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, logger = console } = opt;
|
|
18
18
|
return new stream_1.Transform({
|
|
19
19
|
objectMode: true,
|
|
20
20
|
transform(chunk, _encoding, cb) {
|
|
@@ -22,7 +22,7 @@ function transformMapSimple(mapper, opt = {}) {
|
|
|
22
22
|
cb(null, mapper(chunk, ++index));
|
|
23
23
|
}
|
|
24
24
|
catch (err) {
|
|
25
|
-
|
|
25
|
+
logger.error(err);
|
|
26
26
|
if (errorMode === js_lib_1.ErrorMode.SUPPRESS) {
|
|
27
27
|
cb(); // suppress the error
|
|
28
28
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ErrorMode, Mapper, Predicate } from '@naturalcycles/js-lib';
|
|
1
|
+
import { CommonLogger, ErrorMode, Mapper, Predicate } from '@naturalcycles/js-lib';
|
|
2
2
|
import { TransformTyped } from '../stream.model';
|
|
3
3
|
export interface TransformMapSyncOptions<IN = any, OUT = IN> {
|
|
4
4
|
/**
|
|
@@ -34,6 +34,7 @@ export interface TransformMapSyncOptions<IN = any, OUT = IN> {
|
|
|
34
34
|
* @default `stream`
|
|
35
35
|
*/
|
|
36
36
|
metric?: string;
|
|
37
|
+
logger?: CommonLogger;
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* Sync (not async) version of transformMap.
|
|
@@ -11,7 +11,7 @@ const transformMap_1 = require("./transformMap");
|
|
|
11
11
|
*/
|
|
12
12
|
function transformMapSync(mapper, opt = {}) {
|
|
13
13
|
let index = -1;
|
|
14
|
-
const { predicate = transformMap_1.notNullishPredicate, errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput = false, onError, metric = 'stream', objectMode = true, } = opt;
|
|
14
|
+
const { predicate = transformMap_1.notNullishPredicate, errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput = false, onError, metric = 'stream', objectMode = true, logger = console, } = opt;
|
|
15
15
|
let isRejected = false;
|
|
16
16
|
let errors = 0;
|
|
17
17
|
const collectedErrors = []; // only used if errorMode == THROW_AGGREGATED
|
|
@@ -39,7 +39,7 @@ function transformMapSync(mapper, opt = {}) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
catch (err) {
|
|
42
|
-
|
|
42
|
+
logger.error(err);
|
|
43
43
|
errors++;
|
|
44
44
|
logErrorStats();
|
|
45
45
|
if (onError) {
|
|
@@ -75,7 +75,7 @@ function transformMapSync(mapper, opt = {}) {
|
|
|
75
75
|
function logErrorStats(final = false) {
|
|
76
76
|
if (!errors)
|
|
77
77
|
return;
|
|
78
|
-
|
|
78
|
+
logger.log(`${metric} ${final ? 'final ' : ''}errors: ${(0, colors_1.yellow)(errors)}`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
exports.transformMapSync = transformMapSync;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { AsyncMapper } from '@naturalcycles/js-lib';
|
|
1
|
+
import { AsyncMapper, CommonLogger } from '@naturalcycles/js-lib';
|
|
2
2
|
import { TransformOptions, TransformTyped } from '../stream.model';
|
|
3
|
+
export interface TransformTapOptions extends TransformOptions {
|
|
4
|
+
logger?: CommonLogger;
|
|
5
|
+
}
|
|
3
6
|
/**
|
|
4
7
|
* Similar to RxJS `tap` - allows to run a function for each stream item, without affecting the result.
|
|
5
8
|
* Item is passed through to the output.
|
|
6
9
|
*
|
|
7
10
|
* Can also act as a counter, since `index` is passed to `fn`
|
|
8
11
|
*/
|
|
9
|
-
export declare function transformTap<IN>(fn: AsyncMapper<IN, any>, opt?:
|
|
12
|
+
export declare function transformTap<IN>(fn: AsyncMapper<IN, any>, opt?: TransformTapOptions): TransformTyped<IN, IN>;
|
|
@@ -9,6 +9,7 @@ const stream_1 = require("stream");
|
|
|
9
9
|
* Can also act as a counter, since `index` is passed to `fn`
|
|
10
10
|
*/
|
|
11
11
|
function transformTap(fn, opt = {}) {
|
|
12
|
+
const { logger = console } = opt;
|
|
12
13
|
let index = 0;
|
|
13
14
|
return new stream_1.Transform({
|
|
14
15
|
objectMode: true,
|
|
@@ -19,7 +20,7 @@ function transformTap(fn, opt = {}) {
|
|
|
19
20
|
await fn(chunk, index++);
|
|
20
21
|
}
|
|
21
22
|
catch (err) {
|
|
22
|
-
|
|
23
|
+
logger.error(err);
|
|
23
24
|
// suppressed error
|
|
24
25
|
}
|
|
25
26
|
cb(null, chunk); // pass through the item
|
|
@@ -5,5 +5,7 @@ import { TransformOptions, WritableTyped } from '../stream.model';
|
|
|
5
5
|
* Currently does NOT (!) maintain backpressure.
|
|
6
6
|
* Error in the forked pipeline will propagate up to the main pipeline (and log error, to be sure).
|
|
7
7
|
* Will wait until all forked pipelines are completed before completing the stream.
|
|
8
|
+
*
|
|
9
|
+
* @experimental
|
|
8
10
|
*/
|
|
9
11
|
export declare function writableFork<T>(chains: NodeJS.WritableStream[][], opt?: TransformOptions): WritableTyped<T>;
|
|
@@ -8,6 +8,8 @@ const __1 = require("../..");
|
|
|
8
8
|
* Currently does NOT (!) maintain backpressure.
|
|
9
9
|
* Error in the forked pipeline will propagate up to the main pipeline (and log error, to be sure).
|
|
10
10
|
* Will wait until all forked pipelines are completed before completing the stream.
|
|
11
|
+
*
|
|
12
|
+
* @experimental
|
|
11
13
|
*/
|
|
12
14
|
function writableFork(chains, opt) {
|
|
13
15
|
const readables = [];
|
package/package.json
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { Transform } from 'stream'
|
|
2
|
+
import { CommonLogger } from '@naturalcycles/js-lib'
|
|
2
3
|
import { TransformOptions, TransformTyped } from '../stream.model'
|
|
3
4
|
|
|
5
|
+
export interface TransformLimitOptions extends TransformOptions {
|
|
6
|
+
logger?: CommonLogger
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
/**
|
|
5
10
|
* 0 or falsy value means "no limit"
|
|
6
11
|
*/
|
|
7
12
|
export function transformLimit<IN>(
|
|
8
13
|
limit?: number,
|
|
9
|
-
opt:
|
|
14
|
+
opt: TransformLimitOptions = {},
|
|
10
15
|
): TransformTyped<IN, IN> {
|
|
16
|
+
const { logger = console } = opt
|
|
11
17
|
let index = 0
|
|
12
18
|
let ended = false
|
|
13
19
|
|
|
@@ -25,7 +31,7 @@ export function transformLimit<IN>(
|
|
|
25
31
|
|
|
26
32
|
if (limit && index === limit) {
|
|
27
33
|
ended = true
|
|
28
|
-
|
|
34
|
+
logger.log(`transformLimit: limit of ${limit} reached`)
|
|
29
35
|
// this.emit('end') // this makes it "halt" on Node 14 lts
|
|
30
36
|
}
|
|
31
37
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Transform } from 'stream'
|
|
2
2
|
import { inspect, InspectOptions } from 'util'
|
|
3
|
-
import { SimpleMovingAverage, _mb, _since, AnyObject } from '@naturalcycles/js-lib'
|
|
3
|
+
import { SimpleMovingAverage, _mb, _since, AnyObject, CommonLogger } from '@naturalcycles/js-lib'
|
|
4
4
|
import { dayjs } from '@naturalcycles/time-lib'
|
|
5
5
|
import { boldWhite, dimGrey, white, yellow } from '../../colors'
|
|
6
6
|
import { hasColors } from '../../colors/colors'
|
|
@@ -86,6 +86,8 @@ export interface TransformLogProgressOptions<IN = any> extends TransformOptions
|
|
|
86
86
|
*/
|
|
87
87
|
logEvery?: number
|
|
88
88
|
|
|
89
|
+
logger?: CommonLogger
|
|
90
|
+
|
|
89
91
|
/**
|
|
90
92
|
* Function to return extra properties to the "progress object".
|
|
91
93
|
*
|
|
@@ -124,6 +126,7 @@ export function transformLogProgress<IN = any>(
|
|
|
124
126
|
logEvery = 1000,
|
|
125
127
|
batchSize = 1,
|
|
126
128
|
extra,
|
|
129
|
+
logger = console,
|
|
127
130
|
} = opt
|
|
128
131
|
const logProgress = opt.logProgress !== false && logEvery !== 0 // true by default
|
|
129
132
|
const logEvery10 = logEvery * 10
|
|
@@ -172,7 +175,7 @@ export function transformLogProgress<IN = any>(
|
|
|
172
175
|
const rps10 = Math.round(sma.push(lastRPS))
|
|
173
176
|
if (mem.rss > peakRSS) peakRSS = mem.rss
|
|
174
177
|
|
|
175
|
-
|
|
178
|
+
logger.log(
|
|
176
179
|
inspect(
|
|
177
180
|
{
|
|
178
181
|
[final ? `${metric}_final` : metric]: batchedProgress,
|
|
@@ -202,13 +205,13 @@ export function transformLogProgress<IN = any>(
|
|
|
202
205
|
perHour = Math.round(perHour / 1000) + 'K'
|
|
203
206
|
}
|
|
204
207
|
|
|
205
|
-
|
|
208
|
+
logger.log(
|
|
206
209
|
`${dimGrey(dayjs().toPretty())} ${white(metric)} took ${yellow(
|
|
207
210
|
_since(started),
|
|
208
211
|
)} so far to process ${yellow(batchedProgress)} rows, ~${yellow(perHour)}/hour`,
|
|
209
212
|
)
|
|
210
213
|
} else if (final) {
|
|
211
|
-
|
|
214
|
+
logger.log(
|
|
212
215
|
`${boldWhite(metric)} took ${yellow(_since(started))} to process ${yellow(
|
|
213
216
|
batchedProgress,
|
|
214
217
|
)} rows with total RPS of ${yellow(rpsTotal)}`,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Transform } from 'stream'
|
|
2
|
-
import { ErrorMode, Mapper } from '@naturalcycles/js-lib'
|
|
2
|
+
import { CommonLogger, ErrorMode, Mapper } from '@naturalcycles/js-lib'
|
|
3
3
|
import { TransformTyped } from '../stream.model'
|
|
4
4
|
|
|
5
5
|
export interface TransformMapSimpleOptions {
|
|
@@ -9,6 +9,8 @@ export interface TransformMapSimpleOptions {
|
|
|
9
9
|
* @default ErrorMode.THROW_IMMEDIATELY
|
|
10
10
|
*/
|
|
11
11
|
errorMode?: ErrorMode.THROW_IMMEDIATELY | ErrorMode.SUPPRESS
|
|
12
|
+
|
|
13
|
+
logger?: CommonLogger
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
/**
|
|
@@ -25,7 +27,7 @@ export function transformMapSimple<IN = any, OUT = IN>(
|
|
|
25
27
|
opt: TransformMapSimpleOptions = {},
|
|
26
28
|
): TransformTyped<IN, OUT> {
|
|
27
29
|
let index = -1
|
|
28
|
-
const { errorMode = ErrorMode.THROW_IMMEDIATELY } = opt
|
|
30
|
+
const { errorMode = ErrorMode.THROW_IMMEDIATELY, logger = console } = opt
|
|
29
31
|
|
|
30
32
|
return new Transform({
|
|
31
33
|
objectMode: true,
|
|
@@ -33,7 +35,7 @@ export function transformMapSimple<IN = any, OUT = IN>(
|
|
|
33
35
|
try {
|
|
34
36
|
cb(null, mapper(chunk, ++index))
|
|
35
37
|
} catch (err) {
|
|
36
|
-
|
|
38
|
+
logger.error(err)
|
|
37
39
|
|
|
38
40
|
if (errorMode === ErrorMode.SUPPRESS) {
|
|
39
41
|
cb() // suppress the error
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Transform } from 'stream'
|
|
2
|
-
import { AggregatedError, ErrorMode, Mapper, Predicate } from '@naturalcycles/js-lib'
|
|
2
|
+
import { AggregatedError, CommonLogger, ErrorMode, Mapper, Predicate } from '@naturalcycles/js-lib'
|
|
3
3
|
import { yellow } from '../../colors'
|
|
4
4
|
import { TransformTyped } from '../stream.model'
|
|
5
5
|
import { notNullishPredicate } from './transformMap'
|
|
@@ -43,6 +43,8 @@ export interface TransformMapSyncOptions<IN = any, OUT = IN> {
|
|
|
43
43
|
* @default `stream`
|
|
44
44
|
*/
|
|
45
45
|
metric?: string
|
|
46
|
+
|
|
47
|
+
logger?: CommonLogger
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
/**
|
|
@@ -62,6 +64,7 @@ export function transformMapSync<IN = any, OUT = IN>(
|
|
|
62
64
|
onError,
|
|
63
65
|
metric = 'stream',
|
|
64
66
|
objectMode = true,
|
|
67
|
+
logger = console,
|
|
65
68
|
} = opt
|
|
66
69
|
let isRejected = false
|
|
67
70
|
let errors = 0
|
|
@@ -92,7 +95,7 @@ export function transformMapSync<IN = any, OUT = IN>(
|
|
|
92
95
|
cb(null, v)
|
|
93
96
|
}
|
|
94
97
|
} catch (err) {
|
|
95
|
-
|
|
98
|
+
logger.error(err)
|
|
96
99
|
errors++
|
|
97
100
|
|
|
98
101
|
logErrorStats()
|
|
@@ -134,6 +137,6 @@ export function transformMapSync<IN = any, OUT = IN>(
|
|
|
134
137
|
function logErrorStats(final = false): void {
|
|
135
138
|
if (!errors) return
|
|
136
139
|
|
|
137
|
-
|
|
140
|
+
logger.log(`${metric} ${final ? 'final ' : ''}errors: ${yellow(errors)}`)
|
|
138
141
|
}
|
|
139
142
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Transform } from 'stream'
|
|
2
|
-
import { AsyncMapper } from '@naturalcycles/js-lib'
|
|
2
|
+
import { AsyncMapper, CommonLogger } from '@naturalcycles/js-lib'
|
|
3
3
|
import { TransformOptions, TransformTyped } from '../stream.model'
|
|
4
4
|
|
|
5
|
+
export interface TransformTapOptions extends TransformOptions {
|
|
6
|
+
logger?: CommonLogger
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
/**
|
|
6
10
|
* Similar to RxJS `tap` - allows to run a function for each stream item, without affecting the result.
|
|
7
11
|
* Item is passed through to the output.
|
|
@@ -10,8 +14,9 @@ import { TransformOptions, TransformTyped } from '../stream.model'
|
|
|
10
14
|
*/
|
|
11
15
|
export function transformTap<IN>(
|
|
12
16
|
fn: AsyncMapper<IN, any>,
|
|
13
|
-
opt:
|
|
17
|
+
opt: TransformTapOptions = {},
|
|
14
18
|
): TransformTyped<IN, IN> {
|
|
19
|
+
const { logger = console } = opt
|
|
15
20
|
let index = 0
|
|
16
21
|
|
|
17
22
|
return new Transform({
|
|
@@ -23,7 +28,7 @@ export function transformTap<IN>(
|
|
|
23
28
|
try {
|
|
24
29
|
await fn(chunk, index++)
|
|
25
30
|
} catch (err) {
|
|
26
|
-
|
|
31
|
+
logger.error(err)
|
|
27
32
|
// suppressed error
|
|
28
33
|
}
|
|
29
34
|
|
|
@@ -7,6 +7,8 @@ import { TransformOptions, WritableTyped } from '../stream.model'
|
|
|
7
7
|
* Currently does NOT (!) maintain backpressure.
|
|
8
8
|
* Error in the forked pipeline will propagate up to the main pipeline (and log error, to be sure).
|
|
9
9
|
* Will wait until all forked pipelines are completed before completing the stream.
|
|
10
|
+
*
|
|
11
|
+
* @experimental
|
|
10
12
|
*/
|
|
11
13
|
export function writableFork<T>(
|
|
12
14
|
chains: NodeJS.WritableStream[][],
|