1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.transformMapSync = void 0;
|
4 | const js_lib_1 = require("@naturalcycles/js-lib");
|
5 | const stream_1 = require("stream");
|
6 | const colors_1 = require("../../colors");
|
7 | const transformMap_1 = require("./transformMap");
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | function transformMapSync(mapper, opt = {}) {
|
13 | let index = 0;
|
14 | const { predicate = transformMap_1.notNullishPredicate, errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput = false, onError, metric = 'stream', objectMode = true, } = opt;
|
15 | let isRejected = false;
|
16 | let errors = 0;
|
17 | const collectedErrors = [];
|
18 | return new stream_1.Transform({
|
19 | objectMode,
|
20 | ...opt,
|
21 | transform(chunk, _encoding, cb) {
|
22 |
|
23 | if (isRejected && errorMode === js_lib_1.ErrorMode.THROW_IMMEDIATELY)
|
24 | return cb();
|
25 | try {
|
26 | if (!predicate(chunk, index++)) {
|
27 | cb();
|
28 | return;
|
29 | }
|
30 |
|
31 | const v = mapper(chunk, index);
|
32 | if (flattenArrayOutput && Array.isArray(v)) {
|
33 |
|
34 | v.forEach(item => this.push(item));
|
35 | }
|
36 | else {
|
37 | cb(null, v);
|
38 | }
|
39 | }
|
40 | catch (err) {
|
41 | console.error(err);
|
42 | errors++;
|
43 | logErrorStats();
|
44 | if (onError) {
|
45 | try {
|
46 | onError(err, chunk);
|
47 | }
|
48 | catch { }
|
49 | }
|
50 | if (errorMode === js_lib_1.ErrorMode.THROW_IMMEDIATELY) {
|
51 | isRejected = true;
|
52 |
|
53 | return cb(err);
|
54 | }
|
55 | if (errorMode === js_lib_1.ErrorMode.THROW_AGGREGATED) {
|
56 | collectedErrors.push(err);
|
57 | }
|
58 | cb();
|
59 | }
|
60 | },
|
61 | final(cb) {
|
62 |
|
63 | logErrorStats(true);
|
64 | if (collectedErrors.length) {
|
65 |
|
66 | cb(new js_lib_1.AggregatedError(collectedErrors));
|
67 | }
|
68 | else {
|
69 |
|
70 | cb();
|
71 | }
|
72 | },
|
73 | });
|
74 | function logErrorStats(final = false) {
|
75 | if (!errors)
|
76 | return;
|
77 | console.log(`${metric} ${final ? 'final ' : ''}errors: ${colors_1.yellow(errors)}`);
|
78 | }
|
79 | }
|
80 | exports.transformMapSync = transformMapSync;
|