@naturalcycles/nodejs-lib 13.45.3 → 14.0.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.
Files changed (197) hide show
  1. package/dist/bin/generate-build-info.js +15 -18
  2. package/dist/bin/json2env.js +6 -9
  3. package/dist/bin/kpy.js +6 -9
  4. package/dist/bin/secrets-decrypt.d.ts +1 -1
  5. package/dist/bin/secrets-decrypt.js +9 -12
  6. package/dist/bin/secrets-encrypt.d.ts +1 -1
  7. package/dist/bin/secrets-encrypt.js +9 -12
  8. package/dist/bin/secrets-gen-key.js +8 -11
  9. package/dist/bin/slack-this.js +6 -9
  10. package/dist/buffer/buffer.util.js +1 -4
  11. package/dist/colors/colors.d.ts +26 -27
  12. package/dist/colors/colors.js +29 -33
  13. package/dist/csv/csvReader.js +4 -8
  14. package/dist/csv/csvWriter.js +7 -12
  15. package/dist/csv/transformToCSV.d.ts +2 -2
  16. package/dist/csv/transformToCSV.js +5 -8
  17. package/dist/diff/tableDiff.js +4 -7
  18. package/dist/fs/fs2.d.ts +1 -1
  19. package/dist/fs/fs2.js +88 -94
  20. package/dist/fs/json2env.js +18 -28
  21. package/dist/fs/kpy.js +28 -33
  22. package/dist/index.d.ts +71 -71
  23. package/dist/index.js +73 -78
  24. package/dist/infra/process.util.js +23 -28
  25. package/dist/jwt/jwt.service.js +17 -21
  26. package/dist/log/log.util.js +4 -7
  27. package/dist/script/runScript.js +11 -15
  28. package/dist/secret/secrets-decrypt.util.js +18 -22
  29. package/dist/secret/secrets-encrypt.util.js +17 -21
  30. package/dist/security/crypto.util.js +24 -34
  31. package/dist/security/hash.util.js +19 -37
  32. package/dist/security/id.util.js +11 -18
  33. package/dist/security/nanoid.js +15 -20
  34. package/dist/security/secret.util.js +20 -30
  35. package/dist/slack/slack.service.d.ts +1 -1
  36. package/dist/slack/slack.service.js +13 -16
  37. package/dist/slack/slack.service.model.d.ts +1 -1
  38. package/dist/slack/slack.service.model.js +1 -2
  39. package/dist/stream/ndjson/ndjson.model.js +10 -16
  40. package/dist/stream/ndjson/ndjsonMap.d.ts +1 -1
  41. package/dist/stream/ndjson/ndjsonMap.js +11 -14
  42. package/dist/stream/ndjson/ndjsonStreamForEach.d.ts +1 -1
  43. package/dist/stream/ndjson/ndjsonStreamForEach.js +9 -12
  44. package/dist/stream/ndjson/transformJsonParse.d.ts +1 -1
  45. package/dist/stream/ndjson/transformJsonParse.js +4 -9
  46. package/dist/stream/ndjson/transformToNDJson.d.ts +1 -1
  47. package/dist/stream/ndjson/transformToNDJson.js +5 -8
  48. package/dist/stream/pipeline/pipeline.js +13 -17
  49. package/dist/stream/progressLogger.d.ts +1 -1
  50. package/dist/stream/progressLogger.js +32 -28
  51. package/dist/stream/readable/readableCreate.d.ts +1 -1
  52. package/dist/stream/readable/readableCreate.js +5 -9
  53. package/dist/stream/readable/readableForEach.d.ts +2 -2
  54. package/dist/stream/readable/readableForEach.js +7 -11
  55. package/dist/stream/readable/readableFromArray.d.ts +1 -1
  56. package/dist/stream/readable/readableFromArray.js +4 -7
  57. package/dist/stream/readable/readableToArray.d.ts +1 -1
  58. package/dist/stream/readable/readableToArray.js +1 -4
  59. package/dist/stream/sizeStack.js +9 -12
  60. package/dist/stream/stream.model.js +1 -2
  61. package/dist/stream/stream.util.js +1 -4
  62. package/dist/stream/transform/transformChunk.d.ts +1 -1
  63. package/dist/stream/transform/transformChunk.js +3 -6
  64. package/dist/stream/transform/transformFilter.d.ts +2 -2
  65. package/dist/stream/transform/transformFilter.js +6 -10
  66. package/dist/stream/transform/transformLimit.d.ts +2 -2
  67. package/dist/stream/transform/transformLimit.js +6 -11
  68. package/dist/stream/transform/transformLogProgress.d.ts +2 -2
  69. package/dist/stream/transform/transformLogProgress.js +5 -8
  70. package/dist/stream/transform/transformMap.d.ts +1 -1
  71. package/dist/stream/transform/transformMap.js +18 -22
  72. package/dist/stream/transform/transformMapSimple.d.ts +1 -1
  73. package/dist/stream/transform/transformMapSimple.js +6 -9
  74. package/dist/stream/transform/transformMapSync.d.ts +3 -3
  75. package/dist/stream/transform/transformMapSync.js +14 -19
  76. package/dist/stream/transform/transformNoOp.d.ts +1 -1
  77. package/dist/stream/transform/transformNoOp.js +3 -6
  78. package/dist/stream/transform/transformOffset.d.ts +1 -1
  79. package/dist/stream/transform/transformOffset.js +5 -8
  80. package/dist/stream/transform/transformSplit.d.ts +1 -1
  81. package/dist/stream/transform/transformSplit.js +5 -9
  82. package/dist/stream/transform/transformTap.d.ts +1 -1
  83. package/dist/stream/transform/transformTap.js +3 -6
  84. package/dist/stream/transform/transformTee.d.ts +1 -1
  85. package/dist/stream/transform/transformTee.js +7 -10
  86. package/dist/stream/transform/transformThrottle.d.ts +1 -1
  87. package/dist/stream/transform/transformThrottle.js +9 -12
  88. package/dist/stream/transform/transformToArray.d.ts +1 -1
  89. package/dist/stream/transform/transformToArray.js +3 -6
  90. package/dist/stream/transform/worker/baseWorkerClass.d.ts +1 -1
  91. package/dist/stream/transform/worker/baseWorkerClass.js +2 -5
  92. package/dist/stream/transform/worker/transformMultiThreaded.d.ts +1 -1
  93. package/dist/stream/transform/worker/transformMultiThreaded.js +12 -11
  94. package/dist/stream/transform/worker/transformMultiThreaded.model.js +1 -2
  95. package/dist/stream/transform/worker/workerClassProxy.js +6 -4
  96. package/dist/stream/writable/writableForEach.d.ts +2 -2
  97. package/dist/stream/writable/writableForEach.js +6 -10
  98. package/dist/stream/writable/writableFork.d.ts +1 -1
  99. package/dist/stream/writable/writableFork.js +6 -9
  100. package/dist/stream/writable/writableLimit.d.ts +1 -1
  101. package/dist/stream/writable/writableLimit.js +3 -6
  102. package/dist/stream/writable/writablePushToArray.d.ts +1 -1
  103. package/dist/stream/writable/writablePushToArray.js +3 -6
  104. package/dist/stream/writable/writableVoid.d.ts +1 -1
  105. package/dist/stream/writable/writableVoid.js +3 -6
  106. package/dist/string/inspect.js +8 -13
  107. package/dist/util/buildInfo.util.js +12 -15
  108. package/dist/util/env.util.js +5 -9
  109. package/dist/util/exec2.js +17 -21
  110. package/dist/util/git2.js +17 -20
  111. package/dist/util/lruMemoCache.js +4 -7
  112. package/dist/util/zip.util.js +14 -25
  113. package/dist/validation/ajv/ajv.util.d.ts +3 -3
  114. package/dist/validation/ajv/ajv.util.js +6 -10
  115. package/dist/validation/ajv/ajvSchema.d.ts +2 -2
  116. package/dist/validation/ajv/ajvSchema.js +17 -18
  117. package/dist/validation/ajv/ajvValidationError.js +2 -6
  118. package/dist/validation/ajv/getAjv.d.ts +1 -1
  119. package/dist/validation/ajv/getAjv.js +9 -9
  120. package/dist/validation/joi/joi.extensions.d.ts +2 -2
  121. package/dist/validation/joi/joi.extensions.js +6 -10
  122. package/dist/validation/joi/joi.model.js +1 -2
  123. package/dist/validation/joi/joi.shared.schemas.d.ts +2 -2
  124. package/dist/validation/joi/joi.shared.schemas.js +61 -74
  125. package/dist/validation/joi/joi.validation.error.js +2 -6
  126. package/dist/validation/joi/joi.validation.util.d.ts +1 -1
  127. package/dist/validation/joi/joi.validation.util.js +10 -17
  128. package/dist/validation/joi/number.extensions.js +1 -4
  129. package/dist/validation/joi/string.extensions.js +4 -7
  130. package/dist/yargs.util.js +5 -8
  131. package/package.json +5 -4
  132. package/src/bin/generate-build-info.ts +3 -3
  133. package/src/bin/json2env.ts +2 -2
  134. package/src/bin/kpy.ts +2 -2
  135. package/src/bin/secrets-decrypt.ts +7 -8
  136. package/src/bin/secrets-encrypt.ts +7 -8
  137. package/src/bin/secrets-gen-key.ts +2 -2
  138. package/src/bin/slack-this.ts +2 -2
  139. package/src/csv/transformToCSV.ts +3 -3
  140. package/src/fs/fs2.ts +4 -4
  141. package/src/fs/json2env.ts +2 -2
  142. package/src/fs/kpy.ts +2 -2
  143. package/src/index.ts +71 -71
  144. package/src/jwt/jwt.service.ts +2 -2
  145. package/src/log/log.util.ts +1 -1
  146. package/src/script/runScript.ts +4 -3
  147. package/src/secret/secrets-decrypt.util.ts +3 -3
  148. package/src/secret/secrets-encrypt.util.ts +3 -3
  149. package/src/security/crypto.util.ts +1 -1
  150. package/src/security/id.util.ts +1 -1
  151. package/src/security/secret.util.ts +2 -2
  152. package/src/slack/slack.service.model.ts +1 -1
  153. package/src/slack/slack.service.ts +3 -3
  154. package/src/stream/ndjson/ndjson.model.ts +1 -1
  155. package/src/stream/ndjson/ndjsonMap.ts +2 -2
  156. package/src/stream/ndjson/ndjsonStreamForEach.ts +2 -2
  157. package/src/stream/ndjson/transformJsonParse.ts +1 -1
  158. package/src/stream/ndjson/transformToNDJson.ts +1 -1
  159. package/src/stream/pipeline/pipeline.ts +1 -1
  160. package/src/stream/progressLogger.ts +3 -3
  161. package/src/stream/readable/readableCreate.ts +1 -1
  162. package/src/stream/readable/readableForEach.ts +4 -4
  163. package/src/stream/readable/readableFromArray.ts +1 -1
  164. package/src/stream/readable/readableToArray.ts +1 -1
  165. package/src/stream/sizeStack.ts +2 -2
  166. package/src/stream/transform/transformChunk.ts +1 -1
  167. package/src/stream/transform/transformFilter.ts +3 -3
  168. package/src/stream/transform/transformLimit.ts +3 -3
  169. package/src/stream/transform/transformLogProgress.ts +3 -3
  170. package/src/stream/transform/transformMap.ts +5 -5
  171. package/src/stream/transform/transformMapSimple.ts +1 -1
  172. package/src/stream/transform/transformMapSync.ts +5 -5
  173. package/src/stream/transform/transformNoOp.ts +1 -1
  174. package/src/stream/transform/transformOffset.ts +2 -2
  175. package/src/stream/transform/transformSplit.ts +1 -1
  176. package/src/stream/transform/transformTap.ts +1 -1
  177. package/src/stream/transform/transformTee.ts +3 -3
  178. package/src/stream/transform/transformThrottle.ts +1 -1
  179. package/src/stream/transform/transformToArray.ts +1 -1
  180. package/src/stream/transform/worker/baseWorkerClass.ts +1 -1
  181. package/src/stream/transform/worker/transformMultiThreaded.ts +8 -3
  182. package/src/stream/transform/worker/workerClassProxy.js +6 -4
  183. package/src/stream/writable/writableForEach.ts +3 -3
  184. package/src/stream/writable/writableFork.ts +3 -3
  185. package/src/stream/writable/writableLimit.ts +1 -1
  186. package/src/stream/writable/writablePushToArray.ts +1 -1
  187. package/src/stream/writable/writableVoid.ts +1 -1
  188. package/src/util/buildInfo.util.ts +2 -2
  189. package/src/util/exec2.ts +1 -1
  190. package/src/util/git2.ts +2 -2
  191. package/src/validation/ajv/ajv.util.ts +4 -4
  192. package/src/validation/ajv/ajvSchema.ts +4 -5
  193. package/src/validation/ajv/getAjv.ts +7 -3
  194. package/src/validation/joi/joi.extensions.ts +4 -4
  195. package/src/validation/joi/joi.shared.schemas.ts +3 -3
  196. package/src/validation/joi/joi.validation.util.ts +2 -2
  197. package/src/yargs.util.ts +1 -0
@@ -1,6 +1,6 @@
1
1
  import type { AsyncPredicate, Predicate } from '@naturalcycles/js-lib';
2
- import type { TransformOptions, TransformTyped } from '../stream.model';
3
- import type { TransformMapOptions } from './transformMap';
2
+ import type { TransformOptions, TransformTyped } from '../stream.model.js';
3
+ import type { TransformMapOptions } from './transformMap.js';
4
4
  /**
5
5
  * Just a convenience wrapper around `transformMap` that has built-in predicate filtering support.
6
6
  */
@@ -1,14 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformFilter = transformFilter;
4
- exports.transformFilterSync = transformFilterSync;
5
- const node_stream_1 = require("node:stream");
6
- const transformMap_1 = require("./transformMap");
1
+ import { Transform } from 'node:stream';
2
+ import { transformMap } from './transformMap.js';
7
3
  /**
8
4
  * Just a convenience wrapper around `transformMap` that has built-in predicate filtering support.
9
5
  */
10
- function transformFilter(predicate, opt = {}) {
11
- return (0, transformMap_1.transformMap)(v => v, {
6
+ export function transformFilter(predicate, opt = {}) {
7
+ return transformMap(v => v, {
12
8
  predicate,
13
9
  ...opt,
14
10
  });
@@ -16,9 +12,9 @@ function transformFilter(predicate, opt = {}) {
16
12
  /**
17
13
  * Sync version of `transformFilter`
18
14
  */
19
- function transformFilterSync(predicate, opt = {}) {
15
+ export function transformFilterSync(predicate, opt = {}) {
20
16
  let index = 0;
21
- return new node_stream_1.Transform({
17
+ return new Transform({
22
18
  objectMode: true,
23
19
  ...opt,
24
20
  transform(chunk, _, cb) {
@@ -1,7 +1,7 @@
1
1
  import type { Readable } from 'node:stream';
2
2
  import type { CommonLogger } from '@naturalcycles/js-lib';
3
- import { AbortableTransform } from '../../index';
4
- import type { TransformOptions, TransformTyped } from '../stream.model';
3
+ import { AbortableTransform } from '../../index.js';
4
+ import type { TransformOptions, TransformTyped } from '../stream.model.js';
5
5
  export interface TransformLimitOptions extends TransformOptions {
6
6
  /**
7
7
  * Nullish value (e.g 0 or undefined) would mean "no limit"
@@ -1,21 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransformLimit = void 0;
4
- exports.transformLimit = transformLimit;
5
- const index_1 = require("../../index");
6
- const stream_util_1 = require("../stream.util");
1
+ import { AbortableTransform, transformNoOp } from '../../index.js';
2
+ import { pipelineClose } from '../stream.util.js';
7
3
  /**
8
4
  * Class only exists to be able to do `instanceof TransformLimit`
9
5
  * and to set sourceReadable+streamDone to it in `_pipeline`.
10
6
  */
11
- class TransformLimit extends index_1.AbortableTransform {
7
+ export class TransformLimit extends AbortableTransform {
12
8
  }
13
- exports.TransformLimit = TransformLimit;
14
- function transformLimit(opt) {
9
+ export function transformLimit(opt) {
15
10
  const { logger = console, limit, debug } = opt;
16
11
  if (!limit) {
17
12
  // No limit - returning pass-through transform
18
- return (0, index_1.transformNoOp)();
13
+ return transformNoOp();
19
14
  }
20
15
  let i = 0; // so we start first chunk with 1
21
16
  let ended = false;
@@ -28,7 +23,7 @@ function transformLimit(opt) {
28
23
  ended = true;
29
24
  logger.log(`transformLimit of ${limit} reached`);
30
25
  this.push(chunk);
31
- (0, stream_util_1.pipelineClose)('transformLimit', this, opt.sourceReadable || this.sourceReadable, opt.streamDone || this.streamDone, logger);
26
+ pipelineClose('transformLimit', this, opt.sourceReadable || this.sourceReadable, opt.streamDone || this.streamDone, logger);
32
27
  cb(); // after pause
33
28
  }
34
29
  else if (!ended) {
@@ -1,5 +1,5 @@
1
- import type { ProgressLoggerCfg } from '../progressLogger';
2
- import type { TransformOptions, TransformTyped } from '../stream.model';
1
+ import type { ProgressLoggerCfg } from '../progressLogger.js';
2
+ import type { TransformOptions, TransformTyped } from '../stream.model.js';
3
3
  export interface TransformLogProgressOptions<IN = any> extends ProgressLoggerCfg<IN>, TransformOptions {
4
4
  }
5
5
  /**
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformLogProgress = transformLogProgress;
4
- const node_stream_1 = require("node:stream");
5
- const progressLogger_1 = require("../progressLogger");
1
+ import { Transform } from 'node:stream';
2
+ import { progressLogger } from '../progressLogger.js';
6
3
  /**
7
4
  * Pass-through transform that optionally logs progress.
8
5
  */
9
- function transformLogProgress(opt = {}) {
10
- const progress = (0, progressLogger_1.progressLogger)(opt);
11
- return new node_stream_1.Transform({
6
+ export function transformLogProgress(opt = {}) {
7
+ const progress = progressLogger(opt);
8
+ return new Transform({
12
9
  objectMode: true,
13
10
  ...opt,
14
11
  transform(chunk, _, cb) {
@@ -1,6 +1,6 @@
1
1
  import type { AbortableAsyncMapper, AsyncPredicate, CommonLogger, Promisable, StringMap, UnixTimestampMillis } from '@naturalcycles/js-lib';
2
2
  import { END, ErrorMode, SKIP } from '@naturalcycles/js-lib';
3
- import type { TransformTyped } from '../stream.model';
3
+ import type { TransformTyped } from '../stream.model.js';
4
4
  export interface TransformMapOptions<IN = any, OUT = IN> {
5
5
  /**
6
6
  * Set true to support "multiMap" - possibility to return [] and emit 1 result for each item in the array.
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformMap = transformMap;
4
- exports.transformMapStatsSummary = transformMapStatsSummary;
5
- const js_lib_1 = require("@naturalcycles/js-lib");
6
- const through2Concurrent = require("through2-concurrent");
7
- const colors_1 = require("../../colors/colors");
8
- const stream_util_1 = require("../stream.util");
1
+ import { _anyToError, _hc, _since, _stringify, END, ErrorMode, pFilter, SKIP, } from '@naturalcycles/js-lib';
2
+ import through2Concurrent from 'through2-concurrent';
3
+ import { yellow } from '../../colors/colors.js';
4
+ import { pipelineClose } from '../stream.util.js';
9
5
  // doesn't work, cause here we don't construct our Transform instance ourselves
10
6
  // export class TransformMap extends AbortableTransform {}
11
7
  /**
@@ -20,9 +16,9 @@ const stream_util_1 = require("../stream.util");
20
16
  *
21
17
  * If an Array is returned by `mapper` - it will be flattened and multiple results will be emitted from it. Tested by Array.isArray().
22
18
  */
23
- function transformMap(mapper, opt = {}) {
19
+ export function transformMap(mapper, opt = {}) {
24
20
  const { concurrency = 16, predicate, // we now default to "no predicate" (meaning pass-everything)
25
- errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput, onError, onDone, metric = 'stream', logger = console, } = opt;
21
+ errorMode = ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput, onError, onDone, metric = 'stream', logger = console, } = opt;
26
22
  const started = Date.now();
27
23
  let index = -1;
28
24
  let countOut = 0;
@@ -76,18 +72,18 @@ function transformMap(mapper, opt = {}) {
76
72
  const currentIndex = ++index;
77
73
  try {
78
74
  const res = await mapper(chunk, currentIndex);
79
- const passedResults = await (0, js_lib_1.pFilter)(flattenArrayOutput && Array.isArray(res) ? res : [res], async (r) => {
80
- if (r === js_lib_1.END) {
75
+ const passedResults = await pFilter(flattenArrayOutput && Array.isArray(res) ? res : [res], async (r) => {
76
+ if (r === END) {
81
77
  isSettled = true; // will be checked later
82
78
  return false;
83
79
  }
84
- return r !== js_lib_1.SKIP && (!predicate || (await predicate(r, currentIndex)));
80
+ return r !== SKIP && (!predicate || (await predicate(r, currentIndex)));
85
81
  });
86
82
  countOut += passedResults.length;
87
83
  passedResults.forEach(r => this.push(r));
88
84
  if (isSettled) {
89
85
  logger.log(`transformMap END received at index ${currentIndex}`);
90
- (0, stream_util_1.pipelineClose)('transformMap', this, this.sourceReadable, this.streamDone, logger);
86
+ pipelineClose('transformMap', this, this.sourceReadable, this.streamDone, logger);
91
87
  }
92
88
  cb(); // done processing
93
89
  }
@@ -97,11 +93,11 @@ function transformMap(mapper, opt = {}) {
97
93
  logErrorStats();
98
94
  if (onError) {
99
95
  try {
100
- onError((0, js_lib_1._anyToError)(err), chunk);
96
+ onError(_anyToError(err), chunk);
101
97
  }
102
98
  catch { }
103
99
  }
104
- if (errorMode === js_lib_1.ErrorMode.THROW_IMMEDIATELY) {
100
+ if (errorMode === ErrorMode.THROW_IMMEDIATELY) {
105
101
  isSettled = true;
106
102
  try {
107
103
  await onDone?.({
@@ -118,7 +114,7 @@ function transformMap(mapper, opt = {}) {
118
114
  }
119
115
  return cb(err); // Emit error immediately
120
116
  }
121
- if (errorMode === js_lib_1.ErrorMode.THROW_AGGREGATED) {
117
+ if (errorMode === ErrorMode.THROW_AGGREGATED) {
122
118
  collectedErrors.push(err);
123
119
  }
124
120
  // Tell input stream that we're done processing, but emit nothing to output - not error nor result
@@ -128,21 +124,21 @@ function transformMap(mapper, opt = {}) {
128
124
  function logErrorStats(final = false) {
129
125
  if (!errors)
130
126
  return;
131
- logger.log(`${metric} ${final ? 'final ' : ''}errors: ${(0, colors_1.yellow)(errors)}`);
127
+ logger.log(`${metric} ${final ? 'final ' : ''}errors: ${yellow(errors)}`);
132
128
  }
133
129
  }
134
130
  /**
135
131
  * Renders TransformMapStatsSummary into a friendly string,
136
132
  * to be used e.g in Github Actions summary or Slack.
137
133
  */
138
- function transformMapStatsSummary(summary) {
134
+ export function transformMapStatsSummary(summary) {
139
135
  const { countIn, countOut, countErrors, started, name = 'Transform', extra = {} } = summary;
140
136
  return [
141
137
  `### ${name} summary\n`,
142
- `${(0, js_lib_1._since)(started)} spent`,
143
- `${(0, js_lib_1._hc)(countIn)} / ${(0, js_lib_1._hc)(countOut)} row(s) in / out`,
138
+ `${_since(started)} spent`,
139
+ `${_hc(countIn)} / ${_hc(countOut)} row(s) in / out`,
144
140
  countErrors ? `${countErrors} error(s)` : '',
145
- ...Object.entries(extra).map(([k, v]) => `${k}: ${(0, js_lib_1._stringify)(v)}`),
141
+ ...Object.entries(extra).map(([k, v]) => `${k}: ${_stringify(v)}`),
146
142
  ]
147
143
  .filter(Boolean)
148
144
  .join('\n');
@@ -1,6 +1,6 @@
1
1
  import type { CommonLogger, Mapper } from '@naturalcycles/js-lib';
2
2
  import { ErrorMode } from '@naturalcycles/js-lib';
3
- import type { TransformTyped } from '../stream.model';
3
+ import type { TransformTyped } from '../stream.model.js';
4
4
  export interface TransformMapSimpleOptions {
5
5
  /**
6
6
  * Only supports THROW_IMMEDIATELY (default) and SUPPRESS.
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformMapSimple = transformMapSimple;
4
- const node_stream_1 = require("node:stream");
5
- const js_lib_1 = require("@naturalcycles/js-lib");
1
+ import { Transform } from 'node:stream';
2
+ import { ErrorMode } from '@naturalcycles/js-lib';
6
3
  /**
7
4
  * Simplest version of `transformMap`.
8
5
  * errorMode: IMMEDIATE
@@ -12,10 +9,10 @@ const js_lib_1 = require("@naturalcycles/js-lib");
12
9
  * Sync (not async) version of transformMap.
13
10
  * Supposedly faster, for cases when async is not needed.
14
11
  */
15
- function transformMapSimple(mapper, opt = {}) {
12
+ export function transformMapSimple(mapper, opt = {}) {
16
13
  let index = -1;
17
- const { errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, logger = console } = opt;
18
- return new node_stream_1.Transform({
14
+ const { errorMode = ErrorMode.THROW_IMMEDIATELY, logger = console } = opt;
15
+ return new Transform({
19
16
  objectMode: true,
20
17
  transform(chunk, _, cb) {
21
18
  try {
@@ -23,7 +20,7 @@ function transformMapSimple(mapper, opt = {}) {
23
20
  }
24
21
  catch (err) {
25
22
  logger.error(err);
26
- if (errorMode === js_lib_1.ErrorMode.SUPPRESS) {
23
+ if (errorMode === ErrorMode.SUPPRESS) {
27
24
  cb(); // suppress the error
28
25
  }
29
26
  else {
@@ -1,8 +1,8 @@
1
1
  import type { CommonLogger, Mapper, Predicate } from '@naturalcycles/js-lib';
2
2
  import { END, ErrorMode, SKIP } from '@naturalcycles/js-lib';
3
- import { AbortableTransform } from '../pipeline/pipeline';
4
- import type { TransformTyped } from '../stream.model';
5
- import type { TransformMapStats } from './transformMap';
3
+ import { AbortableTransform } from '../pipeline/pipeline.js';
4
+ import type { TransformTyped } from '../stream.model.js';
5
+ import type { TransformMapStats } from './transformMap.js';
6
6
  export interface TransformMapSyncOptions<IN = any, OUT = IN> {
7
7
  /**
8
8
  * @default true
@@ -1,21 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransformMapSync = void 0;
4
- exports.transformMapSync = transformMapSync;
5
- const js_lib_1 = require("@naturalcycles/js-lib");
6
- const colors_1 = require("../../colors/colors");
7
- const pipeline_1 = require("../pipeline/pipeline");
8
- const stream_util_1 = require("../stream.util");
9
- class TransformMapSync extends pipeline_1.AbortableTransform {
1
+ import { _anyToError, END, ErrorMode, SKIP } from '@naturalcycles/js-lib';
2
+ import { yellow } from '../../colors/colors.js';
3
+ import { AbortableTransform } from '../pipeline/pipeline.js';
4
+ import { pipelineClose } from '../stream.util.js';
5
+ export class TransformMapSync extends AbortableTransform {
10
6
  }
11
- exports.TransformMapSync = TransformMapSync;
12
7
  /**
13
8
  * Sync (not async) version of transformMap.
14
9
  * Supposedly faster, for cases when async is not needed.
15
10
  */
16
- function transformMapSync(mapper, opt = {}) {
11
+ export function transformMapSync(mapper, opt = {}) {
17
12
  const { predicate, // defaults to "no predicate" (pass everything)
18
- errorMode = js_lib_1.ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput = false, onError, onDone, metric = 'stream', objectMode = true, logger = console, } = opt;
13
+ errorMode = ErrorMode.THROW_IMMEDIATELY, flattenArrayOutput = false, onError, onDone, metric = 'stream', objectMode = true, logger = console, } = opt;
19
14
  const started = Date.now();
20
15
  let index = -1;
21
16
  let countOut = 0;
@@ -34,17 +29,17 @@ function transformMapSync(mapper, opt = {}) {
34
29
  // map and pass through
35
30
  const v = mapper(chunk, currentIndex);
36
31
  const passedResults = (flattenArrayOutput && Array.isArray(v) ? v : [v]).filter(r => {
37
- if (r === js_lib_1.END) {
32
+ if (r === END) {
38
33
  isSettled = true; // will be checked later
39
34
  return false;
40
35
  }
41
- return r !== js_lib_1.SKIP && (!predicate || predicate(r, currentIndex));
36
+ return r !== SKIP && (!predicate || predicate(r, currentIndex));
42
37
  });
43
38
  countOut += passedResults.length;
44
39
  passedResults.forEach(r => this.push(r));
45
40
  if (isSettled) {
46
41
  logger.log(`transformMapSync END received at index ${currentIndex}`);
47
- (0, stream_util_1.pipelineClose)('transformMapSync', this, this.sourceReadable, this.streamDone, logger);
42
+ pipelineClose('transformMapSync', this, this.sourceReadable, this.streamDone, logger);
48
43
  }
49
44
  cb(); // done processing
50
45
  }
@@ -54,11 +49,11 @@ function transformMapSync(mapper, opt = {}) {
54
49
  logErrorStats();
55
50
  if (onError) {
56
51
  try {
57
- onError((0, js_lib_1._anyToError)(err), chunk);
52
+ onError(_anyToError(err), chunk);
58
53
  }
59
54
  catch { }
60
55
  }
61
- if (errorMode === js_lib_1.ErrorMode.THROW_IMMEDIATELY) {
56
+ if (errorMode === ErrorMode.THROW_IMMEDIATELY) {
62
57
  isSettled = true;
63
58
  try {
64
59
  onDone?.({
@@ -76,7 +71,7 @@ function transformMapSync(mapper, opt = {}) {
76
71
  // Emit error immediately
77
72
  return cb(err);
78
73
  }
79
- if (errorMode === js_lib_1.ErrorMode.THROW_AGGREGATED) {
74
+ if (errorMode === ErrorMode.THROW_AGGREGATED) {
80
75
  collectedErrors.push(err);
81
76
  }
82
77
  cb();
@@ -124,6 +119,6 @@ function transformMapSync(mapper, opt = {}) {
124
119
  function logErrorStats(final = false) {
125
120
  if (!errors)
126
121
  return;
127
- logger.log(`${metric} ${final ? 'final ' : ''}errors: ${(0, colors_1.yellow)(errors)}`);
122
+ logger.log(`${metric} ${final ? 'final ' : ''}errors: ${yellow(errors)}`);
128
123
  }
129
124
  }
@@ -1,4 +1,4 @@
1
- import type { TransformTyped } from '../stream.model';
1
+ import type { TransformTyped } from '../stream.model.js';
2
2
  /**
3
3
  * Transform that does nothing (pass the data through).
4
4
  * Can be used e.g to convert "not-valid" stream (e.g one that `transformMap` is producing)
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformNoOp = transformNoOp;
4
- const node_stream_1 = require("node:stream");
1
+ import { Transform } from 'node:stream';
5
2
  /**
6
3
  * Transform that does nothing (pass the data through).
7
4
  * Can be used e.g to convert "not-valid" stream (e.g one that `transformMap` is producing)
8
5
  * into a "valid" stream (that implements async-iteration interface).
9
6
  */
10
- function transformNoOp() {
11
- return new node_stream_1.Transform({
7
+ export function transformNoOp() {
8
+ return new Transform({
12
9
  objectMode: true,
13
10
  transform(chunk, _, cb) {
14
11
  cb(null, chunk);
@@ -1,4 +1,4 @@
1
- import type { TransformOptions, TransformTyped } from '../stream.model';
1
+ import type { TransformOptions, TransformTyped } from '../stream.model.js';
2
2
  export interface TransformOffsetOptions extends TransformOptions {
3
3
  /**
4
4
  * How many items to skip (offset) in the stream.
@@ -1,16 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformOffset = transformOffset;
4
- const node_stream_1 = require("node:stream");
5
- const index_1 = require("../../index");
6
- function transformOffset(opt) {
1
+ import { Transform } from 'node:stream';
2
+ import { transformNoOp } from '../../index.js';
3
+ export function transformOffset(opt) {
7
4
  const { offset } = opt;
8
5
  if (!offset) {
9
6
  // No offset - returning pass-through transform
10
- return (0, index_1.transformNoOp)();
7
+ return transformNoOp();
11
8
  }
12
9
  let i = 0; // so we start first chunk with 1
13
- return new node_stream_1.Transform({
10
+ return new Transform({
14
11
  objectMode: true,
15
12
  ...opt,
16
13
  transform(chunk, _, cb) {
@@ -1,4 +1,4 @@
1
- import type { TransformTyped } from '../stream.model';
1
+ import type { TransformTyped } from '../stream.model.js';
2
2
  /**
3
3
  * Transforms input Buffer/string stream into Buffer chunks (objectMode: true) split by newLine.
4
4
  *
@@ -1,8 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformSplitOnNewline = transformSplitOnNewline;
4
- exports.transformSplit = transformSplit;
5
- const node_stream_1 = require("node:stream");
1
+ import { Transform } from 'node:stream';
6
2
  // The code below is carefully adopted from: https://github.com/max-mapper/binary-split
7
3
  /**
8
4
  * Transforms input Buffer/string stream into Buffer chunks (objectMode: true) split by newLine.
@@ -12,9 +8,9 @@ const node_stream_1 = require("node:stream");
12
8
  * Same as binarySplit, but optimized (hard-coded) to split on NEWLINE (aka `\n`).
13
9
  * (+5-10% _pipeline speedup measured, compared to generic `binarySplit` on variable length delimiter)
14
10
  */
15
- function transformSplitOnNewline() {
11
+ export function transformSplitOnNewline() {
16
12
  let buffered;
17
- return new node_stream_1.Transform({
13
+ return new Transform({
18
14
  readableObjectMode: true,
19
15
  writableHighWaterMark: 64 * 1024,
20
16
  transform(buf, _enc, done) {
@@ -55,10 +51,10 @@ function transformSplitOnNewline() {
55
51
  * Please use slightly more optimized `transformSplitOnNewline` for NDJSON file parsing.
56
52
  * (+5-10% _pipeline speedup measured!)
57
53
  */
58
- function transformSplit(separator = '\n') {
54
+ export function transformSplit(separator = '\n') {
59
55
  const matcher = Buffer.from(separator);
60
56
  let buffered;
61
- return new node_stream_1.Transform({
57
+ return new Transform({
62
58
  readableObjectMode: true,
63
59
  writableHighWaterMark: 64 * 1024,
64
60
  transform(buf, _enc, done) {
@@ -1,5 +1,5 @@
1
1
  import type { AsyncMapper, CommonLogger } from '@naturalcycles/js-lib';
2
- import type { TransformOptions, TransformTyped } from '../stream.model';
2
+ import type { TransformOptions, TransformTyped } from '../stream.model.js';
3
3
  export interface TransformTapOptions extends TransformOptions {
4
4
  logger?: CommonLogger;
5
5
  }
@@ -1,17 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformTap = transformTap;
4
- const node_stream_1 = require("node:stream");
1
+ import { Transform } from 'node:stream';
5
2
  /**
6
3
  * Similar to RxJS `tap` - allows to run a function for each stream item, without affecting the result.
7
4
  * Item is passed through to the output.
8
5
  *
9
6
  * Can also act as a counter, since `index` is passed to `fn`
10
7
  */
11
- function transformTap(fn, opt = {}) {
8
+ export function transformTap(fn, opt = {}) {
12
9
  const { logger = console } = opt;
13
10
  let index = -1;
14
- return new node_stream_1.Transform({
11
+ return new Transform({
15
12
  objectMode: true,
16
13
  ...opt,
17
14
  async transform(chunk, _, cb) {
@@ -1,4 +1,4 @@
1
- import type { TransformTyped } from '../stream.model';
1
+ import type { TransformTyped } from '../stream.model.js';
2
2
  type AnyStream = NodeJS.WritableStream | NodeJS.ReadWriteStream;
3
3
  /**
4
4
  * Allows to "tee"/"fork" away from the "main pipeline" into the "secondary pipeline".
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformTee = transformTee;
4
- const node_stream_1 = require("node:stream");
5
- const pipeline_1 = require("../pipeline/pipeline");
6
- const readableCreate_1 = require("../readable/readableCreate");
1
+ import { Transform } from 'node:stream';
2
+ import { _pipeline } from '../pipeline/pipeline.js';
3
+ import { readableCreate } from '../readable/readableCreate.js';
7
4
  /**
8
5
  * Allows to "tee"/"fork" away from the "main pipeline" into the "secondary pipeline".
9
6
  *
@@ -13,10 +10,10 @@ const readableCreate_1 = require("../readable/readableCreate");
13
10
  *
14
11
  * @experimental
15
12
  */
16
- function transformTee(streams) {
17
- const readable = (0, readableCreate_1.readableCreate)();
18
- const secondPipelinePromise = (0, pipeline_1._pipeline)([readable, ...streams]);
19
- return new node_stream_1.Transform({
13
+ export function transformTee(streams) {
14
+ const readable = readableCreate();
15
+ const secondPipelinePromise = _pipeline([readable, ...streams]);
16
+ return new Transform({
20
17
  objectMode: true,
21
18
  transform(chunk, _, cb) {
22
19
  // pass to the "secondary" pipeline
@@ -1,5 +1,5 @@
1
1
  import type { NumberOfSeconds, PositiveInteger } from '@naturalcycles/js-lib';
2
- import type { TransformTyped } from '../stream.model';
2
+ import type { TransformTyped } from '../stream.model.js';
3
3
  export interface TransformThrottleOptions {
4
4
  /**
5
5
  * How many items to allow per `interval` of seconds.
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformThrottle = transformThrottle;
4
- const node_stream_1 = require("node:stream");
5
- const js_lib_1 = require("@naturalcycles/js-lib");
1
+ import { Transform } from 'node:stream';
2
+ import { _ms, _since, localTime, pDefer } from '@naturalcycles/js-lib';
6
3
  /**
7
4
  * Allows to throttle the throughput of the stream.
8
5
  * For example, when you have an API with rate limit of 5000 requests per minute,
@@ -20,13 +17,13 @@ const js_lib_1 = require("@naturalcycles/js-lib");
20
17
  *
21
18
  * @experimental
22
19
  */
23
- function transformThrottle(opt) {
20
+ export function transformThrottle(opt) {
24
21
  const { throughput, interval, debug } = opt;
25
22
  let count = 0;
26
23
  let start;
27
24
  let paused;
28
25
  let timeout;
29
- return new node_stream_1.Transform({
26
+ return new Transform({
30
27
  objectMode: true,
31
28
  async transform(item, _, cb) {
32
29
  // console.log('incoming', item, { paused: !!paused, count })
@@ -34,7 +31,7 @@ function transformThrottle(opt) {
34
31
  start = Date.now();
35
32
  timeout = setTimeout(() => onInterval(this), interval * 1000);
36
33
  if (debug) {
37
- console.log(`${js_lib_1.localTime.now().toPretty()} transformThrottle started with`, {
34
+ console.log(`${localTime.now().toPretty()} transformThrottle started with`, {
38
35
  throughput,
39
36
  interval,
40
37
  rps: Math.round(throughput / interval),
@@ -47,9 +44,9 @@ function transformThrottle(opt) {
47
44
  }
48
45
  if (++count >= throughput) {
49
46
  // console.log('pausing now after', {item, count})
50
- paused = (0, js_lib_1.pDefer)();
47
+ paused = pDefer();
51
48
  if (debug) {
52
- console.log(`${js_lib_1.localTime.now().toPretty()} transformThrottle activated: ${count} items passed in ${(0, js_lib_1._since)(start)}, will pause for ${(0, js_lib_1._ms)(interval * 1000 - (Date.now() - start))}`);
49
+ console.log(`${localTime.now().toPretty()} transformThrottle activated: ${count} items passed in ${_since(start)}, will pause for ${_ms(interval * 1000 - (Date.now() - start))}`);
53
50
  }
54
51
  }
55
52
  cb(null, item); // pass the item through
@@ -62,14 +59,14 @@ function transformThrottle(opt) {
62
59
  function onInterval(transform) {
63
60
  if (paused) {
64
61
  if (debug) {
65
- console.log(`${js_lib_1.localTime.now().toPretty()} transformThrottle resumed`);
62
+ console.log(`${localTime.now().toPretty()} transformThrottle resumed`);
66
63
  }
67
64
  paused.resolve();
68
65
  paused = undefined;
69
66
  }
70
67
  else {
71
68
  if (debug) {
72
- console.log(`${js_lib_1.localTime.now().toPretty()} transformThrottle passed ${count} (of max ${throughput}) items in ${(0, js_lib_1._since)(start)}`);
69
+ console.log(`${localTime.now().toPretty()} transformThrottle passed ${count} (of max ${throughput}) items in ${_since(start)}`);
73
70
  }
74
71
  }
75
72
  count = 0;
@@ -1,4 +1,4 @@
1
- import type { TransformOptions, TransformTyped } from '../stream.model';
1
+ import type { TransformOptions, TransformTyped } from '../stream.model.js';
2
2
  /**
3
3
  * Will collect all stream results in the array (keeping it in memory) and emit in the end as one result.
4
4
  */
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformToArray = transformToArray;
4
- const node_stream_1 = require("node:stream");
1
+ import { Transform } from 'node:stream';
5
2
  /**
6
3
  * Will collect all stream results in the array (keeping it in memory) and emit in the end as one result.
7
4
  */
8
- function transformToArray(opt = {}) {
5
+ export function transformToArray(opt = {}) {
9
6
  const res = [];
10
- return new node_stream_1.Transform({
7
+ return new Transform({
11
8
  objectMode: true,
12
9
  ...opt,
13
10
  transform(chunk, _, cb) {
@@ -1,4 +1,4 @@
1
- import type { BaseWorkerData } from './transformMultiThreaded.model';
1
+ import type { BaseWorkerData } from './transformMultiThreaded.model.js';
2
2
  export interface WorkerClassInterface<IN, OUT, WORKER_DATA extends BaseWorkerData = BaseWorkerData> {
3
3
  WorkerClass: BaseWorkerClass<IN, OUT, WORKER_DATA>;
4
4
  }