@naturalcycles/nodejs-lib 12.58.0 → 12.59.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 (46) hide show
  1. package/dist/index.d.ts +19 -18
  2. package/dist/index.js +19 -92
  3. package/dist/log/log.util.d.ts +4 -0
  4. package/dist/log/log.util.js +11 -0
  5. package/dist/stream/ndjson/ndjsonMap.d.ts +2 -2
  6. package/dist/stream/ndjson/ndjsonMap.js +4 -3
  7. package/dist/stream/ndjson/ndjsonStreamForEach.d.ts +2 -2
  8. package/dist/stream/pipeline/pipeline.d.ts +25 -3
  9. package/dist/stream/pipeline/pipeline.js +76 -9
  10. package/dist/stream/readable/readableCreate.d.ts +8 -0
  11. package/dist/stream/readable/readableCreate.js +9 -1
  12. package/dist/stream/readable/readableForEach.d.ts +2 -2
  13. package/dist/stream/readable/readableFromArray.d.ts +2 -2
  14. package/dist/stream/readable/readableFromArray.js +17 -13
  15. package/dist/stream/readable/readableMap.d.ts +2 -2
  16. package/dist/stream/readable/readableMap.js +22 -17
  17. package/dist/stream/stream.util.d.ts +4 -0
  18. package/dist/stream/stream.util.js +24 -0
  19. package/dist/stream/transform/transformLimit.d.ts +32 -1
  20. package/dist/stream/transform/transformLimit.js +33 -16
  21. package/dist/stream/transform/transformMap.d.ts +2 -11
  22. package/dist/stream/transform/transformMap.js +55 -67
  23. package/dist/stream/transform/worker/workerClassProxy.js +1 -0
  24. package/dist/stream/writable/writableLimit.d.ts +9 -0
  25. package/dist/stream/writable/writableLimit.js +29 -0
  26. package/dist/stream/writable/writableVoid.d.ts +8 -1
  27. package/dist/stream/writable/writableVoid.js +5 -1
  28. package/package.json +1 -1
  29. package/src/index.ts +17 -156
  30. package/src/log/log.util.ts +9 -0
  31. package/src/stream/ndjson/ndjsonMap.ts +7 -5
  32. package/src/stream/ndjson/ndjsonStreamForEach.ts +2 -2
  33. package/src/stream/pipeline/pipeline.ts +102 -9
  34. package/src/stream/readable/readableCreate.ts +9 -1
  35. package/src/stream/readable/readableForEach.ts +2 -2
  36. package/src/stream/readable/readableFromArray.ts +18 -21
  37. package/src/stream/readable/readableMap.ts +24 -21
  38. package/src/stream/stream.util.ts +29 -0
  39. package/src/stream/transform/transformLimit.ts +66 -20
  40. package/src/stream/transform/transformMap.ts +74 -93
  41. package/src/stream/transform/worker/workerClassProxy.js +1 -0
  42. package/src/stream/writable/writableLimit.ts +28 -0
  43. package/src/stream/writable/writableVoid.ts +13 -1
  44. package/dist/stream/transform/legacy/transformMap.d.ts +0 -17
  45. package/dist/stream/transform/legacy/transformMap.js +0 -94
  46. package/src/stream/transform/legacy/transformMap.ts +0 -133
package/dist/index.d.ts CHANGED
@@ -4,14 +4,15 @@ import type { AfterResponseHook, BeforeErrorHook, BeforeRequestHook, Got } from
4
4
  import { AnySchema, ValidationErrorItem } from 'joi';
5
5
  import { _chunkBuffer } from './buffer/buffer.util';
6
6
  import { tableDiff, TableDiffOptions } from './diff/tableDiff';
7
- import { getGot } from './got/getGot';
7
+ export * from './got/getGot';
8
8
  import { GetGotOptions } from './got/got.model';
9
- import { memoryUsage, memoryUsageFull, processSharedUtil } from './infra/process.util';
9
+ export * from './infra/process.util';
10
10
  import { Debug, IDebug, IDebugger } from './log/debug';
11
- import { base64ToBuffer, base64ToString, bufferToBase64, hash, md5, hashAsBuffer, md5AsBuffer, stringToBase64 } from './security/hash.util';
12
- import { ALPHABET_ALPHANUMERIC, ALPHABET_ALPHANUMERIC_LOWERCASE, ALPHABET_ALPHANUMERIC_UPPERCASE, ALPHABET_LOWERCASE, ALPHABET_NUMBER, ALPHABET_UPPERCASE, stringId, stringIdAsync, stringIdUnsafe } from './security/id.util';
13
- import { getSecretMap, loadSecretsFromEnv, loadSecretsFromJsonFile, removeSecretsFromEnv, secret, secretOptional, setSecretMap } from './security/secret.util';
11
+ export * from './security/hash.util';
12
+ export * from './security/id.util';
13
+ export * from './security/secret.util';
14
14
  import { hasColors } from './colors/colors';
15
+ export * from './log/log.util';
15
16
  import { slackDefaultMessagePrefixHook, SlackService } from './slack/slack.service';
16
17
  import { SlackApiBody, SlackMessage, SlackMessagePrefixHook, SlackMessageProps, SlackServiceCfg } from './slack/slack.service.model';
17
18
  import { NDJsonStats } from './stream/ndjson/ndjson.model';
@@ -24,7 +25,7 @@ import { pipelineToNDJsonFile, PipelineToNDJsonFileOptions } from './stream/ndjs
24
25
  import { streamToNDJsonFile } from './stream/ndjson/streamToNDJsonFile';
25
26
  import { bufferReviver, transformJsonParse, TransformJsonParseOptions } from './stream/ndjson/transformJsonParse';
26
27
  import { transformToNDJson, TransformToNDJsonOptions } from './stream/ndjson/transformToNDJson';
27
- import { _pipeline } from './stream/pipeline/pipeline';
28
+ export * from './stream/pipeline/pipeline';
28
29
  import { readableCreate, readableFrom } from './stream/readable/readableCreate';
29
30
  import { readableForEach, readableForEachSync } from './stream/readable/readableForEach';
30
31
  import { readableFromArray } from './stream/readable/readableFromArray';
@@ -32,10 +33,10 @@ import { readableMap } from './stream/readable/readableMap';
32
33
  import { readableMapToArray } from './stream/readable/readableMapToArray';
33
34
  import { readableToArray } from './stream/readable/readableToArray';
34
35
  import { ReadableTyped, TransformOptions, TransformTyped, WritableTyped } from './stream/stream.model';
35
- import { transformBuffer } from './stream/transform/transformBuffer';
36
- import { transformFilter, transformFilterSync } from './stream/transform/transformFilter';
37
- import { transformLimit } from './stream/transform/transformLimit';
38
- import { transformLogProgress, TransformLogProgressOptions } from './stream/transform/transformLogProgress';
36
+ export * from './stream/transform/transformBuffer';
37
+ export * from './stream/transform/transformFilter';
38
+ export * from './stream/transform/transformLimit';
39
+ export * from './stream/transform/transformLogProgress';
39
40
  import { transformMap, TransformMapOptions } from './stream/transform/transformMap';
40
41
  import { transformMapSimple } from './stream/transform/transformMapSimple';
41
42
  import { transformNoOp } from './stream/transform/transformNoOp';
@@ -48,23 +49,23 @@ import { BaseWorkerClass, WorkerClassInterface } from './stream/transform/worker
48
49
  import { transformMultiThreaded, TransformMultiThreadedOptions } from './stream/transform/worker/transformMultiThreaded';
49
50
  import { WorkerInput, WorkerOutput } from './stream/transform/worker/transformMultiThreaded.model';
50
51
  export * from './stream/writable/writableForEach';
51
- import { writableFork } from './stream/writable/writableFork';
52
- import { writablePushToArray } from './stream/writable/writablePushToArray';
53
- import { writableVoid } from './stream/writable/writableVoid';
52
+ export * from './stream/writable/writableFork';
53
+ export * from './stream/writable/writablePushToArray';
54
+ export * from './stream/writable/writableVoid';
54
55
  import { inspectAny, InspectAnyOptions, inspectAnyStringifyFn } from './string/inspectAny';
55
- import { requireEnvKeys, requireFileToExist } from './util/env.util';
56
+ export * from './util/env.util';
56
57
  import { LRUMemoCache } from './util/lruMemoCache';
57
- import { gunzipBuffer, gunzipToString, gzipBuffer, gzipString, unzipBuffer, unzipToString, zipBuffer, zipString } from './util/zip.util';
58
+ export * from './util/zip.util';
58
59
  import { readAjvSchemas, readJsonSchemas } from './validation/ajv/ajv.util';
59
60
  import { AjvSchema, AjvSchemaCfg, AjvValidationOptions } from './validation/ajv/ajvSchema';
60
61
  import { AjvValidationError, AjvValidationErrorData } from './validation/ajv/ajvValidationError';
61
62
  import { getAjv } from './validation/ajv/getAjv';
62
63
  import { ExtendedJoi, Joi } from './validation/joi/joi.extensions';
63
64
  import { AnySchemaTyped, ArraySchemaTyped, BooleanSchemaTyped, NumberSchemaTyped, ObjectSchemaTyped, SchemaTyped, StringSchemaTyped } from './validation/joi/joi.model';
64
- import { anyObjectSchema, anySchema, arraySchema, oneOfSchema, binarySchema, booleanDefaultToFalseSchema, booleanSchema, dateStringSchema, emailSchema, baseDBEntitySchema, savedDBEntitySchema, idSchema, integerSchema, ipAddressSchema, numberSchema, objectSchema, percentageSchema, semVerSchema, SEM_VER_PATTERN, slugSchema, stringSchema, unixTimestampSchema, urlSchema, userAgentSchema, utcOffsetSchema, verSchema } from './validation/joi/joi.shared.schemas';
65
+ export * from './validation/joi/joi.shared.schemas';
65
66
  import { JoiValidationError, JoiValidationErrorData } from './validation/joi/joi.validation.error';
66
67
  import { convert, getValidationResult, isValid, JoiValidationResult, undefinedIfInvalid, validate } from './validation/joi/joi.validation.util';
67
68
  import { sanitizeHTML, SanitizeHTMLOptions } from './validation/sanitize.util';
68
69
  import { runScript, RunScriptOptions } from './script';
69
- export type { RunScriptOptions, JoiValidationErrorData, JoiValidationResult, ValidationErrorItem, ExtendedJoi, SchemaTyped, AnySchema, AnySchemaTyped, ArraySchemaTyped, BooleanSchemaTyped, NumberSchemaTyped, ObjectSchemaTyped, StringSchemaTyped, IDebug, IDebugger, SlackServiceCfg, SlackMessage, SlackMessageProps, SlackApiBody, SlackMessagePrefixHook, ReadableTyped, WritableTyped, TransformTyped, PipelineFromNDJsonFileOptions, PipelineToNDJsonFileOptions, TransformJsonParseOptions, TransformToNDJsonOptions, TransformMapOptions, TransformMapSyncOptions, NDJSONStreamForEachOptions, TransformOptions, TransformLogProgressOptions, TransformMultiThreadedOptions, WorkerClassInterface, WorkerInput, WorkerOutput, TableDiffOptions, InspectAnyOptions, Got, GetGotOptions, AfterResponseHook, BeforeErrorHook, BeforeRequestHook, AjvValidationOptions, AjvSchemaCfg, AjvValidationErrorData, SanitizeHTMLOptions, };
70
- export { JoiValidationError, validate, getValidationResult, isValid, undefinedIfInvalid, convert, Joi, booleanSchema, booleanDefaultToFalseSchema, stringSchema, numberSchema, integerSchema, percentageSchema, dateStringSchema, arraySchema, binarySchema, objectSchema, oneOfSchema, anySchema, anyObjectSchema, baseDBEntitySchema, savedDBEntitySchema, idSchema, unixTimestampSchema, verSchema, emailSchema, SEM_VER_PATTERN, semVerSchema, userAgentSchema, utcOffsetSchema, ipAddressSchema, slugSchema, urlSchema, processSharedUtil, zipBuffer, gzipBuffer, unzipBuffer, gunzipBuffer, zipString, gzipString, unzipToString, gunzipToString, requireEnvKeys, requireFileToExist, LRUMemoCache, stringId, stringIdAsync, stringIdUnsafe, ALPHABET_NUMBER, ALPHABET_LOWERCASE, ALPHABET_UPPERCASE, ALPHABET_ALPHANUMERIC_LOWERCASE, ALPHABET_ALPHANUMERIC_UPPERCASE, ALPHABET_ALPHANUMERIC, md5, hash, hashAsBuffer, md5AsBuffer, stringToBase64, base64ToString, bufferToBase64, base64ToBuffer, Debug, getSecretMap, setSecretMap, loadSecretsFromEnv, loadSecretsFromJsonFile, removeSecretsFromEnv, secret, secretOptional, memoryUsage, memoryUsageFull, SlackService, slackDefaultMessagePrefixHook, readableCreate, readableFrom, readableFromArray, readableToArray, readableForEach, readableForEachSync, readableMap, readableMapToArray, _pipeline, transformBuffer, ndjsonMap, ndJsonFileRead, ndJsonFileWrite, ndjsonStreamForEach, pipelineFromNDJsonFile, pipelineToNDJsonFile, NDJsonStats, streamToNDJsonFile, transformJsonParse, bufferReviver, transformToNDJson, transformFilter, transformFilterSync, transformMap, transformMapSync, transformMapSimple, transformNoOp, writablePushToArray, transformSplit, transformToString, transformToArray, transformTap, transformLogProgress, transformLimit, writableVoid, writableFork, transformMultiThreaded, BaseWorkerClass, tableDiff, inspectAny, inspectAnyStringifyFn, getGot, HTTPError, TimeoutError, _chunkBuffer, Ajv, getAjv, AjvSchema, AjvValidationError, readJsonSchemas, readAjvSchemas, hasColors, sanitizeHTML, runScript, };
70
+ export type { RunScriptOptions, JoiValidationErrorData, JoiValidationResult, ValidationErrorItem, ExtendedJoi, SchemaTyped, AnySchema, AnySchemaTyped, ArraySchemaTyped, BooleanSchemaTyped, NumberSchemaTyped, ObjectSchemaTyped, StringSchemaTyped, IDebug, IDebugger, SlackServiceCfg, SlackMessage, SlackMessageProps, SlackApiBody, SlackMessagePrefixHook, ReadableTyped, WritableTyped, TransformTyped, PipelineFromNDJsonFileOptions, PipelineToNDJsonFileOptions, TransformJsonParseOptions, TransformToNDJsonOptions, TransformMapOptions, TransformMapSyncOptions, NDJSONStreamForEachOptions, TransformOptions, TransformMultiThreadedOptions, WorkerClassInterface, WorkerInput, WorkerOutput, TableDiffOptions, InspectAnyOptions, Got, GetGotOptions, AfterResponseHook, BeforeErrorHook, BeforeRequestHook, AjvValidationOptions, AjvSchemaCfg, AjvValidationErrorData, SanitizeHTMLOptions, };
71
+ export { JoiValidationError, validate, getValidationResult, isValid, undefinedIfInvalid, convert, Joi, LRUMemoCache, Debug, SlackService, slackDefaultMessagePrefixHook, readableCreate, readableFrom, readableFromArray, readableToArray, readableForEach, readableForEachSync, readableMap, readableMapToArray, ndjsonMap, ndJsonFileRead, ndJsonFileWrite, ndjsonStreamForEach, pipelineFromNDJsonFile, pipelineToNDJsonFile, NDJsonStats, streamToNDJsonFile, transformJsonParse, bufferReviver, transformToNDJson, transformMap, transformMapSync, transformMapSimple, transformNoOp, transformSplit, transformToString, transformToArray, transformTap, transformMultiThreaded, BaseWorkerClass, tableDiff, inspectAny, inspectAnyStringifyFn, HTTPError, TimeoutError, _chunkBuffer, Ajv, getAjv, AjvSchema, AjvValidationError, readJsonSchemas, readAjvSchemas, hasColors, sanitizeHTML, runScript, };
package/dist/index.js CHANGED
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALPHABET_LOWERCASE = exports.ALPHABET_NUMBER = exports.stringIdUnsafe = exports.stringIdAsync = exports.stringId = exports.LRUMemoCache = exports.requireFileToExist = exports.requireEnvKeys = exports.gunzipToString = exports.unzipToString = exports.gzipString = exports.zipString = exports.gunzipBuffer = exports.unzipBuffer = exports.gzipBuffer = exports.zipBuffer = exports.processSharedUtil = exports.urlSchema = exports.slugSchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_PATTERN = exports.emailSchema = exports.verSchema = exports.unixTimestampSchema = exports.idSchema = exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.binarySchema = exports.arraySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = exports.Joi = exports.convert = exports.undefinedIfInvalid = exports.isValid = exports.getValidationResult = exports.validate = exports.JoiValidationError = void 0;
4
- exports.transformMapSimple = exports.transformMapSync = exports.transformMap = exports.transformFilterSync = exports.transformFilter = exports.transformToNDJson = exports.bufferReviver = exports.transformJsonParse = exports.streamToNDJsonFile = exports.NDJsonStats = exports.pipelineToNDJsonFile = exports.pipelineFromNDJsonFile = exports.ndjsonStreamForEach = exports.ndJsonFileWrite = exports.ndJsonFileRead = exports.ndjsonMap = exports.transformBuffer = exports._pipeline = exports.readableMapToArray = exports.readableMap = exports.readableForEachSync = exports.readableForEach = exports.readableToArray = exports.readableFromArray = exports.readableFrom = exports.readableCreate = exports.slackDefaultMessagePrefixHook = exports.SlackService = exports.memoryUsageFull = exports.memoryUsage = exports.secretOptional = exports.secret = exports.removeSecretsFromEnv = exports.loadSecretsFromJsonFile = exports.loadSecretsFromEnv = exports.setSecretMap = exports.getSecretMap = exports.Debug = exports.base64ToBuffer = exports.bufferToBase64 = exports.base64ToString = exports.stringToBase64 = exports.md5AsBuffer = exports.hashAsBuffer = exports.hash = exports.md5 = exports.ALPHABET_ALPHANUMERIC = exports.ALPHABET_ALPHANUMERIC_UPPERCASE = exports.ALPHABET_ALPHANUMERIC_LOWERCASE = exports.ALPHABET_UPPERCASE = void 0;
5
- exports.runScript = exports.sanitizeHTML = exports.hasColors = exports.readAjvSchemas = exports.readJsonSchemas = exports.AjvValidationError = exports.AjvSchema = exports.getAjv = exports.Ajv = exports._chunkBuffer = exports.TimeoutError = exports.HTTPError = exports.getGot = exports.inspectAnyStringifyFn = exports.inspectAny = exports.tableDiff = exports.BaseWorkerClass = exports.transformMultiThreaded = exports.writableFork = exports.writableVoid = exports.transformLimit = exports.transformLogProgress = exports.transformTap = exports.transformToArray = exports.transformToString = exports.transformSplit = exports.writablePushToArray = exports.transformNoOp = void 0;
3
+ exports.AjvValidationError = exports.AjvSchema = exports.getAjv = exports.Ajv = exports._chunkBuffer = exports.TimeoutError = exports.HTTPError = exports.inspectAnyStringifyFn = exports.inspectAny = exports.tableDiff = exports.BaseWorkerClass = exports.transformMultiThreaded = exports.transformTap = exports.transformToArray = exports.transformToString = exports.transformSplit = exports.transformNoOp = exports.transformMapSimple = exports.transformMapSync = exports.transformMap = exports.transformToNDJson = exports.bufferReviver = exports.transformJsonParse = exports.streamToNDJsonFile = exports.NDJsonStats = exports.pipelineToNDJsonFile = exports.pipelineFromNDJsonFile = exports.ndjsonStreamForEach = exports.ndJsonFileWrite = exports.ndJsonFileRead = exports.ndjsonMap = exports.readableMapToArray = exports.readableMap = exports.readableForEachSync = exports.readableForEach = exports.readableToArray = exports.readableFromArray = exports.readableFrom = exports.readableCreate = exports.slackDefaultMessagePrefixHook = exports.SlackService = exports.Debug = exports.LRUMemoCache = exports.Joi = exports.convert = exports.undefinedIfInvalid = exports.isValid = exports.getValidationResult = exports.validate = exports.JoiValidationError = void 0;
4
+ exports.runScript = exports.sanitizeHTML = exports.hasColors = exports.readAjvSchemas = exports.readJsonSchemas = void 0;
6
5
  const tslib_1 = require("tslib");
7
6
  const ajv_1 = require("ajv");
8
7
  exports.Ajv = ajv_1.default;
@@ -13,43 +12,16 @@ const buffer_util_1 = require("./buffer/buffer.util");
13
12
  Object.defineProperty(exports, "_chunkBuffer", { enumerable: true, get: function () { return buffer_util_1._chunkBuffer; } });
14
13
  const tableDiff_1 = require("./diff/tableDiff");
15
14
  Object.defineProperty(exports, "tableDiff", { enumerable: true, get: function () { return tableDiff_1.tableDiff; } });
16
- const getGot_1 = require("./got/getGot");
17
- Object.defineProperty(exports, "getGot", { enumerable: true, get: function () { return getGot_1.getGot; } });
18
- const process_util_1 = require("./infra/process.util");
19
- Object.defineProperty(exports, "memoryUsage", { enumerable: true, get: function () { return process_util_1.memoryUsage; } });
20
- Object.defineProperty(exports, "memoryUsageFull", { enumerable: true, get: function () { return process_util_1.memoryUsageFull; } });
21
- Object.defineProperty(exports, "processSharedUtil", { enumerable: true, get: function () { return process_util_1.processSharedUtil; } });
15
+ (0, tslib_1.__exportStar)(require("./got/getGot"), exports);
16
+ (0, tslib_1.__exportStar)(require("./infra/process.util"), exports);
22
17
  const debug_1 = require("./log/debug");
23
18
  Object.defineProperty(exports, "Debug", { enumerable: true, get: function () { return debug_1.Debug; } });
24
- const hash_util_1 = require("./security/hash.util");
25
- Object.defineProperty(exports, "base64ToBuffer", { enumerable: true, get: function () { return hash_util_1.base64ToBuffer; } });
26
- Object.defineProperty(exports, "base64ToString", { enumerable: true, get: function () { return hash_util_1.base64ToString; } });
27
- Object.defineProperty(exports, "bufferToBase64", { enumerable: true, get: function () { return hash_util_1.bufferToBase64; } });
28
- Object.defineProperty(exports, "hash", { enumerable: true, get: function () { return hash_util_1.hash; } });
29
- Object.defineProperty(exports, "md5", { enumerable: true, get: function () { return hash_util_1.md5; } });
30
- Object.defineProperty(exports, "hashAsBuffer", { enumerable: true, get: function () { return hash_util_1.hashAsBuffer; } });
31
- Object.defineProperty(exports, "md5AsBuffer", { enumerable: true, get: function () { return hash_util_1.md5AsBuffer; } });
32
- Object.defineProperty(exports, "stringToBase64", { enumerable: true, get: function () { return hash_util_1.stringToBase64; } });
33
- const id_util_1 = require("./security/id.util");
34
- Object.defineProperty(exports, "ALPHABET_ALPHANUMERIC", { enumerable: true, get: function () { return id_util_1.ALPHABET_ALPHANUMERIC; } });
35
- Object.defineProperty(exports, "ALPHABET_ALPHANUMERIC_LOWERCASE", { enumerable: true, get: function () { return id_util_1.ALPHABET_ALPHANUMERIC_LOWERCASE; } });
36
- Object.defineProperty(exports, "ALPHABET_ALPHANUMERIC_UPPERCASE", { enumerable: true, get: function () { return id_util_1.ALPHABET_ALPHANUMERIC_UPPERCASE; } });
37
- Object.defineProperty(exports, "ALPHABET_LOWERCASE", { enumerable: true, get: function () { return id_util_1.ALPHABET_LOWERCASE; } });
38
- Object.defineProperty(exports, "ALPHABET_NUMBER", { enumerable: true, get: function () { return id_util_1.ALPHABET_NUMBER; } });
39
- Object.defineProperty(exports, "ALPHABET_UPPERCASE", { enumerable: true, get: function () { return id_util_1.ALPHABET_UPPERCASE; } });
40
- Object.defineProperty(exports, "stringId", { enumerable: true, get: function () { return id_util_1.stringId; } });
41
- Object.defineProperty(exports, "stringIdAsync", { enumerable: true, get: function () { return id_util_1.stringIdAsync; } });
42
- Object.defineProperty(exports, "stringIdUnsafe", { enumerable: true, get: function () { return id_util_1.stringIdUnsafe; } });
43
- const secret_util_1 = require("./security/secret.util");
44
- Object.defineProperty(exports, "getSecretMap", { enumerable: true, get: function () { return secret_util_1.getSecretMap; } });
45
- Object.defineProperty(exports, "loadSecretsFromEnv", { enumerable: true, get: function () { return secret_util_1.loadSecretsFromEnv; } });
46
- Object.defineProperty(exports, "loadSecretsFromJsonFile", { enumerable: true, get: function () { return secret_util_1.loadSecretsFromJsonFile; } });
47
- Object.defineProperty(exports, "removeSecretsFromEnv", { enumerable: true, get: function () { return secret_util_1.removeSecretsFromEnv; } });
48
- Object.defineProperty(exports, "secret", { enumerable: true, get: function () { return secret_util_1.secret; } });
49
- Object.defineProperty(exports, "secretOptional", { enumerable: true, get: function () { return secret_util_1.secretOptional; } });
50
- Object.defineProperty(exports, "setSecretMap", { enumerable: true, get: function () { return secret_util_1.setSecretMap; } });
19
+ (0, tslib_1.__exportStar)(require("./security/hash.util"), exports);
20
+ (0, tslib_1.__exportStar)(require("./security/id.util"), exports);
21
+ (0, tslib_1.__exportStar)(require("./security/secret.util"), exports);
51
22
  const colors_1 = require("./colors/colors");
52
23
  Object.defineProperty(exports, "hasColors", { enumerable: true, get: function () { return colors_1.hasColors; } });
24
+ (0, tslib_1.__exportStar)(require("./log/log.util"), exports);
53
25
  const slack_service_1 = require("./slack/slack.service");
54
26
  Object.defineProperty(exports, "slackDefaultMessagePrefixHook", { enumerable: true, get: function () { return slack_service_1.slackDefaultMessagePrefixHook; } });
55
27
  Object.defineProperty(exports, "SlackService", { enumerable: true, get: function () { return slack_service_1.SlackService; } });
@@ -74,8 +46,7 @@ Object.defineProperty(exports, "bufferReviver", { enumerable: true, get: functio
74
46
  Object.defineProperty(exports, "transformJsonParse", { enumerable: true, get: function () { return transformJsonParse_1.transformJsonParse; } });
75
47
  const transformToNDJson_1 = require("./stream/ndjson/transformToNDJson");
76
48
  Object.defineProperty(exports, "transformToNDJson", { enumerable: true, get: function () { return transformToNDJson_1.transformToNDJson; } });
77
- const pipeline_1 = require("./stream/pipeline/pipeline");
78
- Object.defineProperty(exports, "_pipeline", { enumerable: true, get: function () { return pipeline_1._pipeline; } });
49
+ (0, tslib_1.__exportStar)(require("./stream/pipeline/pipeline"), exports);
79
50
  const readableCreate_1 = require("./stream/readable/readableCreate");
80
51
  Object.defineProperty(exports, "readableCreate", { enumerable: true, get: function () { return readableCreate_1.readableCreate; } });
81
52
  Object.defineProperty(exports, "readableFrom", { enumerable: true, get: function () { return readableCreate_1.readableFrom; } });
@@ -90,15 +61,10 @@ const readableMapToArray_1 = require("./stream/readable/readableMapToArray");
90
61
  Object.defineProperty(exports, "readableMapToArray", { enumerable: true, get: function () { return readableMapToArray_1.readableMapToArray; } });
91
62
  const readableToArray_1 = require("./stream/readable/readableToArray");
92
63
  Object.defineProperty(exports, "readableToArray", { enumerable: true, get: function () { return readableToArray_1.readableToArray; } });
93
- const transformBuffer_1 = require("./stream/transform/transformBuffer");
94
- Object.defineProperty(exports, "transformBuffer", { enumerable: true, get: function () { return transformBuffer_1.transformBuffer; } });
95
- const transformFilter_1 = require("./stream/transform/transformFilter");
96
- Object.defineProperty(exports, "transformFilter", { enumerable: true, get: function () { return transformFilter_1.transformFilter; } });
97
- Object.defineProperty(exports, "transformFilterSync", { enumerable: true, get: function () { return transformFilter_1.transformFilterSync; } });
98
- const transformLimit_1 = require("./stream/transform/transformLimit");
99
- Object.defineProperty(exports, "transformLimit", { enumerable: true, get: function () { return transformLimit_1.transformLimit; } });
100
- const transformLogProgress_1 = require("./stream/transform/transformLogProgress");
101
- Object.defineProperty(exports, "transformLogProgress", { enumerable: true, get: function () { return transformLogProgress_1.transformLogProgress; } });
64
+ (0, tslib_1.__exportStar)(require("./stream/transform/transformBuffer"), exports);
65
+ (0, tslib_1.__exportStar)(require("./stream/transform/transformFilter"), exports);
66
+ (0, tslib_1.__exportStar)(require("./stream/transform/transformLimit"), exports);
67
+ (0, tslib_1.__exportStar)(require("./stream/transform/transformLogProgress"), exports);
102
68
  const transformMap_1 = require("./stream/transform/transformMap");
103
69
  Object.defineProperty(exports, "transformMap", { enumerable: true, get: function () { return transformMap_1.transformMap; } });
104
70
  const transformMapSimple_1 = require("./stream/transform/transformMapSimple");
@@ -120,29 +86,16 @@ Object.defineProperty(exports, "BaseWorkerClass", { enumerable: true, get: funct
120
86
  const transformMultiThreaded_1 = require("./stream/transform/worker/transformMultiThreaded");
121
87
  Object.defineProperty(exports, "transformMultiThreaded", { enumerable: true, get: function () { return transformMultiThreaded_1.transformMultiThreaded; } });
122
88
  (0, tslib_1.__exportStar)(require("./stream/writable/writableForEach"), exports);
123
- const writableFork_1 = require("./stream/writable/writableFork");
124
- Object.defineProperty(exports, "writableFork", { enumerable: true, get: function () { return writableFork_1.writableFork; } });
125
- const writablePushToArray_1 = require("./stream/writable/writablePushToArray");
126
- Object.defineProperty(exports, "writablePushToArray", { enumerable: true, get: function () { return writablePushToArray_1.writablePushToArray; } });
127
- const writableVoid_1 = require("./stream/writable/writableVoid");
128
- Object.defineProperty(exports, "writableVoid", { enumerable: true, get: function () { return writableVoid_1.writableVoid; } });
89
+ (0, tslib_1.__exportStar)(require("./stream/writable/writableFork"), exports);
90
+ (0, tslib_1.__exportStar)(require("./stream/writable/writablePushToArray"), exports);
91
+ (0, tslib_1.__exportStar)(require("./stream/writable/writableVoid"), exports);
129
92
  const inspectAny_1 = require("./string/inspectAny");
130
93
  Object.defineProperty(exports, "inspectAny", { enumerable: true, get: function () { return inspectAny_1.inspectAny; } });
131
94
  Object.defineProperty(exports, "inspectAnyStringifyFn", { enumerable: true, get: function () { return inspectAny_1.inspectAnyStringifyFn; } });
132
- const env_util_1 = require("./util/env.util");
133
- Object.defineProperty(exports, "requireEnvKeys", { enumerable: true, get: function () { return env_util_1.requireEnvKeys; } });
134
- Object.defineProperty(exports, "requireFileToExist", { enumerable: true, get: function () { return env_util_1.requireFileToExist; } });
95
+ (0, tslib_1.__exportStar)(require("./util/env.util"), exports);
135
96
  const lruMemoCache_1 = require("./util/lruMemoCache");
136
97
  Object.defineProperty(exports, "LRUMemoCache", { enumerable: true, get: function () { return lruMemoCache_1.LRUMemoCache; } });
137
- const zip_util_1 = require("./util/zip.util");
138
- Object.defineProperty(exports, "gunzipBuffer", { enumerable: true, get: function () { return zip_util_1.gunzipBuffer; } });
139
- Object.defineProperty(exports, "gunzipToString", { enumerable: true, get: function () { return zip_util_1.gunzipToString; } });
140
- Object.defineProperty(exports, "gzipBuffer", { enumerable: true, get: function () { return zip_util_1.gzipBuffer; } });
141
- Object.defineProperty(exports, "gzipString", { enumerable: true, get: function () { return zip_util_1.gzipString; } });
142
- Object.defineProperty(exports, "unzipBuffer", { enumerable: true, get: function () { return zip_util_1.unzipBuffer; } });
143
- Object.defineProperty(exports, "unzipToString", { enumerable: true, get: function () { return zip_util_1.unzipToString; } });
144
- Object.defineProperty(exports, "zipBuffer", { enumerable: true, get: function () { return zip_util_1.zipBuffer; } });
145
- Object.defineProperty(exports, "zipString", { enumerable: true, get: function () { return zip_util_1.zipString; } });
98
+ (0, tslib_1.__exportStar)(require("./util/zip.util"), exports);
146
99
  const ajv_util_1 = require("./validation/ajv/ajv.util");
147
100
  Object.defineProperty(exports, "readAjvSchemas", { enumerable: true, get: function () { return ajv_util_1.readAjvSchemas; } });
148
101
  Object.defineProperty(exports, "readJsonSchemas", { enumerable: true, get: function () { return ajv_util_1.readJsonSchemas; } });
@@ -154,33 +107,7 @@ const getAjv_1 = require("./validation/ajv/getAjv");
154
107
  Object.defineProperty(exports, "getAjv", { enumerable: true, get: function () { return getAjv_1.getAjv; } });
155
108
  const joi_extensions_1 = require("./validation/joi/joi.extensions");
156
109
  Object.defineProperty(exports, "Joi", { enumerable: true, get: function () { return joi_extensions_1.Joi; } });
157
- const joi_shared_schemas_1 = require("./validation/joi/joi.shared.schemas");
158
- Object.defineProperty(exports, "anyObjectSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.anyObjectSchema; } });
159
- Object.defineProperty(exports, "anySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.anySchema; } });
160
- Object.defineProperty(exports, "arraySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.arraySchema; } });
161
- Object.defineProperty(exports, "oneOfSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.oneOfSchema; } });
162
- Object.defineProperty(exports, "binarySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.binarySchema; } });
163
- Object.defineProperty(exports, "booleanDefaultToFalseSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.booleanDefaultToFalseSchema; } });
164
- Object.defineProperty(exports, "booleanSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.booleanSchema; } });
165
- Object.defineProperty(exports, "dateStringSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.dateStringSchema; } });
166
- Object.defineProperty(exports, "emailSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.emailSchema; } });
167
- Object.defineProperty(exports, "baseDBEntitySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.baseDBEntitySchema; } });
168
- Object.defineProperty(exports, "savedDBEntitySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.savedDBEntitySchema; } });
169
- Object.defineProperty(exports, "idSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.idSchema; } });
170
- Object.defineProperty(exports, "integerSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.integerSchema; } });
171
- Object.defineProperty(exports, "ipAddressSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.ipAddressSchema; } });
172
- Object.defineProperty(exports, "numberSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.numberSchema; } });
173
- Object.defineProperty(exports, "objectSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.objectSchema; } });
174
- Object.defineProperty(exports, "percentageSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.percentageSchema; } });
175
- Object.defineProperty(exports, "semVerSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.semVerSchema; } });
176
- Object.defineProperty(exports, "SEM_VER_PATTERN", { enumerable: true, get: function () { return joi_shared_schemas_1.SEM_VER_PATTERN; } });
177
- Object.defineProperty(exports, "slugSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.slugSchema; } });
178
- Object.defineProperty(exports, "stringSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.stringSchema; } });
179
- Object.defineProperty(exports, "unixTimestampSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.unixTimestampSchema; } });
180
- Object.defineProperty(exports, "urlSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.urlSchema; } });
181
- Object.defineProperty(exports, "userAgentSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.userAgentSchema; } });
182
- Object.defineProperty(exports, "utcOffsetSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.utcOffsetSchema; } });
183
- Object.defineProperty(exports, "verSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.verSchema; } });
110
+ (0, tslib_1.__exportStar)(require("./validation/joi/joi.shared.schemas"), exports);
184
111
  const joi_validation_error_1 = require("./validation/joi/joi.validation.error");
185
112
  Object.defineProperty(exports, "JoiValidationError", { enumerable: true, get: function () { return joi_validation_error_1.JoiValidationError; } });
186
113
  const joi_validation_util_1 = require("./validation/joi/joi.validation.util");
@@ -0,0 +1,4 @@
1
+ /**
2
+ * CommonLogger that logs to process.stdout directly (bypassing console.log).
3
+ */
4
+ export declare const stdoutLogger: import("@naturalcycles/js-lib").CommonLogger;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stdoutLogger = void 0;
4
+ const js_lib_1 = require("@naturalcycles/js-lib");
5
+ const index_1 = require("../index");
6
+ /**
7
+ * CommonLogger that logs to process.stdout directly (bypassing console.log).
8
+ */
9
+ exports.stdoutLogger = (0, js_lib_1.commonLoggerCreate)((_level, args) => {
10
+ process.stdout.write(args.map(a => (0, index_1.inspectAny)(a)).join(' ') + '\n');
11
+ });
@@ -1,4 +1,4 @@
1
- import { AsyncMapper } from '@naturalcycles/js-lib';
1
+ import { AbortableAsyncMapper } from '@naturalcycles/js-lib';
2
2
  import { TransformMapOptions, TransformLogProgressOptions } from '../..';
3
3
  export interface NDJSONMapOptions<IN = any, OUT = IN> extends TransformMapOptions<IN, OUT>, TransformLogProgressOptions<IN> {
4
4
  inputFilePath: string;
@@ -20,4 +20,4 @@ export interface NDJSONMapOptions<IN = any, OUT = IN> extends TransformMapOption
20
20
  * Unzips input file automatically, if it ends with `.gz`.
21
21
  * Zips output file automatically, if it ends with `.gz`.
22
22
  */
23
- export declare function ndjsonMap<IN = any, OUT = any>(mapper: AsyncMapper<IN, OUT>, opt: NDJSONMapOptions<IN, OUT>): Promise<void>;
23
+ export declare function ndjsonMap<IN = any, OUT = any>(mapper: AbortableAsyncMapper<IN, OUT>, opt: NDJSONMapOptions<IN, OUT>): Promise<void>;
@@ -18,19 +18,20 @@ async function ndjsonMap(mapper, opt) {
18
18
  });
19
19
  const transformUnzip = inputFilePath.endsWith('.gz') ? [(0, zlib_1.createUnzip)()] : [];
20
20
  const transformZip = outputFilePath.endsWith('.gz') ? [(0, zlib_1.createGzip)()] : [];
21
+ const readable = (0, fs_1.createReadStream)(inputFilePath);
21
22
  await (0, __1._pipeline)([
22
- (0, fs_1.createReadStream)(inputFilePath),
23
+ readable,
23
24
  ...transformUnzip,
24
25
  (0, __1.transformSplit)(),
25
26
  (0, __1.transformJsonParse)(),
26
- (0, __1.transformLimit)(limitInput),
27
+ (0, __1.transformLimit)({ limit: limitInput, sourceReadable: readable }),
27
28
  (0, __1.transformLogProgress)({ metric: 'read', ...opt }),
28
29
  (0, __1.transformMap)(mapper, {
29
30
  flattenArrayOutput: true,
30
31
  errorMode: js_lib_1.ErrorMode.SUPPRESS,
31
32
  ...opt,
32
33
  }),
33
- (0, __1.transformLimit)(limitOutput),
34
+ (0, __1.transformLimit)({ limit: limitOutput, sourceReadable: readable }),
34
35
  (0, __1.transformLogProgress)({ metric: 'saved', logEvery: logEveryOutput }),
35
36
  (0, __1.transformToNDJson)(),
36
37
  ...transformZip,
@@ -1,4 +1,4 @@
1
- import { AsyncMapper } from '@naturalcycles/js-lib';
1
+ import { AbortableAsyncMapper } from '@naturalcycles/js-lib';
2
2
  import { TransformLogProgressOptions, TransformMapOptions } from '../..';
3
3
  export interface NDJSONStreamForEachOptions<IN = any> extends TransformMapOptions<IN, void>, TransformLogProgressOptions<IN> {
4
4
  inputFilePath: string;
@@ -6,4 +6,4 @@ export interface NDJSONStreamForEachOptions<IN = any> extends TransformMapOption
6
6
  /**
7
7
  * Convenience function to `forEach` through an ndjson file.
8
8
  */
9
- export declare function ndjsonStreamForEach<T>(mapper: AsyncMapper<T, void>, opt: NDJSONStreamForEachOptions<T>): Promise<void>;
9
+ export declare function ndjsonStreamForEach<T>(mapper: AbortableAsyncMapper<T, void>, opt: NDJSONStreamForEachOptions<T>): Promise<void>;
@@ -1,6 +1,28 @@
1
1
  /// <reference types="node" />
2
- import { pipeline } from 'stream';
2
+ import { Readable, Transform } from 'stream';
3
+ import { DeferredPromise } from '@naturalcycles/js-lib';
4
+ declare type AnyStream = NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream;
5
+ export interface PipelineOptions {
6
+ /**
7
+ * Set to true to allow ERR_STREAM_PREMATURE_CLOSE.
8
+ * Required to support graceful close when using transformLimit
9
+ */
10
+ allowClose?: boolean;
11
+ }
3
12
  /**
4
- * Promisified stream.pipeline()
13
+ * Promisified `stream.pipeline`.
14
+ *
15
+ * Supports opt.allowClose, which allows transformLimit to work (to actually stop source Readable)
16
+ * without throwing an error (ERR_STREAM_PREMATURE_CLOSE).
5
17
  */
6
- export declare let _pipeline: typeof pipeline.__promisify__;
18
+ export declare function _pipeline(streams: AnyStream[], opt?: PipelineOptions): Promise<void>;
19
+ /**
20
+ * Convenience function to make _pipeline collect all items at the end of the stream (should be Transform, not Writeable!)
21
+ * and return.
22
+ */
23
+ export declare function _pipelineToArray<T>(streams: AnyStream[], opt?: PipelineOptions): Promise<T[]>;
24
+ export declare class AbortableTransform extends Transform {
25
+ sourceReadable?: Readable;
26
+ streamDone?: DeferredPromise;
27
+ }
28
+ export {};
@@ -1,15 +1,82 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._pipeline = void 0;
3
+ exports.AbortableTransform = exports._pipelineToArray = exports._pipeline = void 0;
4
4
  const stream_1 = require("stream");
5
- const util_1 = require("util");
5
+ const js_lib_1 = require("@naturalcycles/js-lib");
6
+ const index_1 = require("../../index");
6
7
  /**
7
- * Promisified stream.pipeline()
8
+ * Promisified `stream.pipeline`.
9
+ *
10
+ * Supports opt.allowClose, which allows transformLimit to work (to actually stop source Readable)
11
+ * without throwing an error (ERR_STREAM_PREMATURE_CLOSE).
8
12
  */
9
- exports._pipeline = (0, util_1.promisify)(stream_1.pipeline);
10
- // Workaround https://github.com/nodejs/node/issues/40191
11
- // todo: remove it when fix is released in 16.x and in AppEngine 16.x
12
- if (process.version >= 'v16.10') {
13
- const { pipeline } = require('stream/promises');
14
- exports._pipeline = ((streams) => pipeline(...streams));
13
+ async function _pipeline(streams, opt = {}) {
14
+ const first = streams[0];
15
+ const rest = streams.slice(1);
16
+ if (opt.allowClose) {
17
+ // Do the magic of making the pipeline "abortable"
18
+ //
19
+ // How does it work:
20
+ // It finds `sourceReadable` (basically, it's just first item in the passed array of streams)
21
+ // Finds last "writable" (last item), patches the `_final` method of it to detect when the whole pipeline is "done",
22
+ // sets the `streamDone` DeferredPromise that resolves when the pipeline is done.
23
+ // Scans through all passed items, finds those that are capable of "closing" the stream
24
+ // (currently its `transformLimit` or `transformMap`)
25
+ // Patches them by attaching `sourceReadable` and `streamDone`.
26
+ // These items (transformLimit and transformMap), when they need to "close the stream" - call `pipelineClose`.
27
+ // `pipelineClose` is the result of 2 sleepless nights of googling and experimentation:)
28
+ // It does:
29
+ // 1. Stops the "downstream" by doing `this.push(null)`.
30
+ // 2. Pauses the `sourceReadable` by calling sourceReadable.unpipe()
31
+ // 3. Waits for `streamDone` to ensure that downstream chunks are fully processed (e.g written to disk).
32
+ // 4. Calls `sourceReadable.destroy()`, which emits ERR_STREAM_PREMATURE_CLOSE
33
+ // 5. _pipeline (this function) catches that specific error and suppresses it (because it's expected and
34
+ // inevitable in this flow). Know a better way to close the stream? Tell me!
35
+ const streamDone = (0, js_lib_1.pDefer)();
36
+ const sourceReadable = first;
37
+ const last = (0, js_lib_1._last)(streams);
38
+ const lastFinal = last._final?.bind(last) || ((cb) => cb());
39
+ last._final = cb => {
40
+ lastFinal(() => {
41
+ cb();
42
+ streamDone.resolve();
43
+ });
44
+ };
45
+ rest.forEach(s => {
46
+ // console.log(s)
47
+ if (s instanceof AbortableTransform || s.constructor.name === 'DestroyableTransform') {
48
+ // console.log(`found ${s.constructor.name}, setting props`)
49
+ ;
50
+ s.sourceReadable = sourceReadable;
51
+ s.streamDone = streamDone;
52
+ }
53
+ });
54
+ }
55
+ return new Promise((resolve, reject) => {
56
+ (0, stream_1.pipeline)(first, ...rest, (err) => {
57
+ if (err) {
58
+ if (opt.allowClose && err?.code === 'ERR_STREAM_PREMATURE_CLOSE') {
59
+ console.log('_pipeline closed (as expected)');
60
+ return resolve();
61
+ }
62
+ // console.log(`_pipeline error`, err)
63
+ return reject(err);
64
+ }
65
+ resolve();
66
+ });
67
+ });
15
68
  }
69
+ exports._pipeline = _pipeline;
70
+ /**
71
+ * Convenience function to make _pipeline collect all items at the end of the stream (should be Transform, not Writeable!)
72
+ * and return.
73
+ */
74
+ async function _pipelineToArray(streams, opt = {}) {
75
+ const a = [];
76
+ await _pipeline([...streams, (0, index_1.writablePushToArray)(a)], opt);
77
+ return a;
78
+ }
79
+ exports._pipelineToArray = _pipelineToArray;
80
+ class AbortableTransform extends stream_1.Transform {
81
+ }
82
+ exports.AbortableTransform = AbortableTransform;
@@ -6,6 +6,14 @@ import { ReadableTyped } from '../stream.model';
6
6
  * Push `null` to it to complete (similar to RxJS `.complete()`).
7
7
  *
8
8
  * Difference from Readable.from() is that this readable is not "finished" yet and allows pushing more to it.
9
+ *
10
+ * Caution!
11
+ * The implementation of this Readable is not fully compliant,
12
+ * e.g the read() method doesn't return anything, so, it will hand the Node process (or cause it to process.exit(0))
13
+ * if read() will be called AFTER everything was pushed and Readable is closed (by pushing `null`).
14
+ * Beware of it when e.g doing unit testing! Jest prefers to hang (not exit-0).
15
+ *
16
+ * @deprecated because of the caution above
9
17
  */
10
18
  export declare function readableCreate<T>(items?: Iterable<T>, opt?: ReadableOptions): ReadableTyped<T>;
11
19
  /**
@@ -7,12 +7,20 @@ const stream_1 = require("stream");
7
7
  * Push `null` to it to complete (similar to RxJS `.complete()`).
8
8
  *
9
9
  * Difference from Readable.from() is that this readable is not "finished" yet and allows pushing more to it.
10
+ *
11
+ * Caution!
12
+ * The implementation of this Readable is not fully compliant,
13
+ * e.g the read() method doesn't return anything, so, it will hand the Node process (or cause it to process.exit(0))
14
+ * if read() will be called AFTER everything was pushed and Readable is closed (by pushing `null`).
15
+ * Beware of it when e.g doing unit testing! Jest prefers to hang (not exit-0).
16
+ *
17
+ * @deprecated because of the caution above
10
18
  */
11
19
  function readableCreate(items = [], opt) {
12
20
  const readable = new stream_1.Readable({
13
21
  objectMode: true,
14
22
  ...opt,
15
- read() { },
23
+ read() { }, // Caution, if this is called and Readable has not finished yet (null wasn't pushed) - it'll hang the process!
16
24
  });
17
25
  for (const item of items) {
18
26
  readable.push(item);
@@ -1,4 +1,4 @@
1
- import { AsyncMapper, Mapper } from '@naturalcycles/js-lib';
1
+ import { Mapper, AbortableAsyncMapper } from '@naturalcycles/js-lib';
2
2
  import { ReadableTyped } from '../../index';
3
3
  import { TransformMapOptions } from '../transform/transformMap';
4
4
  /**
@@ -7,7 +7,7 @@ import { TransformMapOptions } from '../transform/transformMap';
7
7
  *
8
8
  * @experimental
9
9
  */
10
- export declare function readableForEach<T>(readable: ReadableTyped<T>, mapper: AsyncMapper<T, void>, opt?: TransformMapOptions<T, void>): Promise<void>;
10
+ export declare function readableForEach<T>(readable: ReadableTyped<T>, mapper: AbortableAsyncMapper<T, void>, opt?: TransformMapOptions<T, void>): Promise<void>;
11
11
  /**
12
12
  * Convenience function to do `.forEach` over a Readable.
13
13
  * Typed! (unlike default Readable).
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { ReadableOptions } from 'stream';
3
- import { AsyncMapper } from '@naturalcycles/js-lib';
3
+ import { AbortableAsyncMapper } from '@naturalcycles/js-lib';
4
4
  import { ReadableTyped } from '../stream.model';
5
5
  /**
6
6
  * Create Readable from Array.
@@ -8,4 +8,4 @@ import { ReadableTyped } from '../stream.model';
8
8
  *
9
9
  * For simple cases use Readable.from(...) (Node.js 12+)
10
10
  */
11
- export declare function readableFromArray<IN, OUT>(items: IN[], mapper?: AsyncMapper<IN, OUT>, opt?: ReadableOptions): ReadableTyped<OUT>;
11
+ export declare function readableFromArray<IN, OUT>(items: IN[], mapper?: AbortableAsyncMapper<IN, OUT>, opt?: ReadableOptions): ReadableTyped<OUT>;
@@ -10,21 +10,25 @@ const js_lib_1 = require("@naturalcycles/js-lib");
10
10
  * For simple cases use Readable.from(...) (Node.js 12+)
11
11
  */
12
12
  function readableFromArray(items, mapper = js_lib_1._passthroughMapper, opt) {
13
- const readable = new stream_1.Readable({
13
+ let i = -1;
14
+ return new stream_1.Readable({
14
15
  objectMode: true,
15
16
  ...opt,
16
- read() { },
17
+ async read() {
18
+ i++;
19
+ if (i < items.length) {
20
+ try {
21
+ this.push(await mapper(items[i], i));
22
+ }
23
+ catch (err) {
24
+ console.error(err);
25
+ this.destroy(err);
26
+ }
27
+ }
28
+ else {
29
+ this.push(null); // end
30
+ }
31
+ },
17
32
  });
18
- void (0, js_lib_1.pMap)(items, async (item, index) => {
19
- readable.push(await mapper(item, index));
20
- }, { concurrency: 1 })
21
- .then(() => {
22
- readable.push(null); // done
23
- })
24
- .catch(err => {
25
- console.error(err);
26
- readable.push(err);
27
- });
28
- return readable;
29
33
  }
30
34
  exports.readableFromArray = readableFromArray;
@@ -1,3 +1,3 @@
1
- import { AsyncMapper } from '@naturalcycles/js-lib';
1
+ import { AbortableAsyncMapper } from '@naturalcycles/js-lib';
2
2
  import { ReadableTyped } from '../stream.model';
3
- export declare function readableMap<IN, OUT>(readable: ReadableTyped<IN>, mapper: AsyncMapper<IN, OUT>): ReadableTyped<OUT>;
3
+ export declare function readableMap<IN, OUT>(readable: ReadableTyped<IN>, mapper: AbortableAsyncMapper<IN, OUT>): ReadableTyped<OUT>;