@naturalcycles/nodejs-lib 15.3.0 → 15.5.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 (98) hide show
  1. package/dist/bin/slack-this.js +1 -1
  2. package/dist/csv/csvReader.js +1 -1
  3. package/dist/csv/csvWriter.js +1 -1
  4. package/dist/diff/tableDiff.js +1 -1
  5. package/dist/{exec2.d.ts → exec2/exec2.d.ts} +1 -1
  6. package/dist/{exec2.js → exec2/exec2.js} +4 -4
  7. package/dist/fs/fs2.js +1 -1
  8. package/dist/index.d.ts +0 -3
  9. package/dist/index.js +0 -3
  10. package/dist/jwt/jwt.service.js +2 -1
  11. package/dist/script/runScript.d.ts +1 -0
  12. package/dist/script/runScript.js +6 -6
  13. package/dist/secret/secrets-decrypt.util.js +1 -1
  14. package/dist/secret/secrets-encrypt.util.js +1 -1
  15. package/dist/security/secret.util.js +2 -2
  16. package/dist/slack/index.d.ts +2 -0
  17. package/dist/slack/index.js +2 -0
  18. package/dist/slack/slack.service.js +3 -3
  19. package/dist/slack/slack.service.model.d.ts +1 -1
  20. package/dist/stream/ndjson/ndjson.model.js +1 -1
  21. package/dist/stream/ndjson/ndjsonMap.js +1 -1
  22. package/dist/stream/ndjson/ndjsonStreamForEach.d.ts +2 -1
  23. package/dist/stream/ndjson/ndjsonStreamForEach.js +6 -3
  24. package/dist/stream/pipeline/pipeline.js +2 -2
  25. package/dist/stream/readable/readableForEach.d.ts +1 -1
  26. package/dist/stream/readable/readableForEach.js +1 -1
  27. package/dist/stream/sizeStack.d.ts +1 -1
  28. package/dist/stream/sizeStack.js +1 -1
  29. package/dist/stream/transform/transformLimit.d.ts +1 -1
  30. package/dist/stream/transform/transformLimit.js +2 -1
  31. package/dist/stream/transform/transformMap.js +3 -3
  32. package/dist/stream/transform/transformMapSimple.d.ts +1 -1
  33. package/dist/stream/transform/transformMapSimple.js +1 -1
  34. package/dist/stream/transform/transformOffset.js +1 -1
  35. package/dist/stream/transform/transformThrottle.js +1 -1
  36. package/dist/stream/transform/worker/transformMultiThreaded.js +2 -2
  37. package/dist/stream/writable/writableForEach.d.ts +1 -1
  38. package/dist/stream/writable/writableForEach.js +2 -1
  39. package/dist/stream/writable/writableFork.js +2 -1
  40. package/dist/string/inspect.js +1 -1
  41. package/dist/util/buildInfo.util.js +2 -2
  42. package/dist/util/git2.js +1 -1
  43. package/dist/validation/ajv/ajvSchema.d.ts +10 -8
  44. package/dist/validation/ajv/ajvSchema.js +29 -27
  45. package/dist/validation/ajv/ajvValidationError.d.ts +1 -1
  46. package/dist/validation/ajv/ajvValidationError.js +1 -1
  47. package/dist/validation/ajv/getAjv.d.ts +10 -1
  48. package/dist/validation/ajv/getAjv.js +11 -1
  49. package/dist/validation/ajv/index.d.ts +0 -1
  50. package/dist/validation/ajv/index.js +0 -1
  51. package/dist/validation/joi/joi.validation.error.d.ts +1 -1
  52. package/dist/validation/joi/joi.validation.error.js +1 -1
  53. package/dist/validation/joi/joi.validation.util.d.ts +2 -0
  54. package/dist/validation/joi/joi.validation.util.js +3 -1
  55. package/dist/validation/joi/string.extensions.js +1 -1
  56. package/package.json +7 -5
  57. package/src/bin/slack-this.ts +1 -1
  58. package/src/csv/csvReader.ts +1 -1
  59. package/src/csv/csvWriter.ts +1 -1
  60. package/src/diff/tableDiff.ts +1 -1
  61. package/src/{exec2.ts → exec2/exec2.ts} +4 -4
  62. package/src/fs/fs2.ts +1 -1
  63. package/src/index.ts +0 -3
  64. package/src/jwt/jwt.service.ts +2 -1
  65. package/src/script/runScript.ts +6 -8
  66. package/src/secret/secrets-decrypt.util.ts +1 -1
  67. package/src/secret/secrets-encrypt.util.ts +1 -1
  68. package/src/security/secret.util.ts +2 -2
  69. package/src/slack/index.ts +2 -0
  70. package/src/slack/slack.service.model.ts +1 -1
  71. package/src/slack/slack.service.ts +4 -5
  72. package/src/stream/ndjson/ndjson.model.ts +1 -1
  73. package/src/stream/ndjson/ndjsonMap.ts +1 -1
  74. package/src/stream/ndjson/ndjsonStreamForEach.ts +7 -5
  75. package/src/stream/pipeline/pipeline.ts +2 -2
  76. package/src/stream/readable/readableForEach.ts +2 -2
  77. package/src/stream/sizeStack.ts +1 -1
  78. package/src/stream/transform/transformLimit.ts +2 -1
  79. package/src/stream/transform/transformMap.ts +3 -3
  80. package/src/stream/transform/transformMapSimple.ts +1 -1
  81. package/src/stream/transform/transformOffset.ts +1 -1
  82. package/src/stream/transform/transformThrottle.ts +1 -1
  83. package/src/stream/transform/worker/transformMultiThreaded.ts +2 -2
  84. package/src/stream/writable/writableForEach.ts +2 -2
  85. package/src/stream/writable/writableFork.ts +3 -3
  86. package/src/string/inspect.ts +1 -1
  87. package/src/util/buildInfo.util.ts +2 -2
  88. package/src/util/git2.ts +1 -1
  89. package/src/validation/ajv/ajvSchema.ts +43 -33
  90. package/src/validation/ajv/ajvValidationError.ts +1 -1
  91. package/src/validation/ajv/getAjv.ts +12 -1
  92. package/src/validation/ajv/index.ts +0 -1
  93. package/src/validation/joi/joi.validation.error.ts +1 -1
  94. package/src/validation/joi/joi.validation.util.ts +3 -1
  95. package/src/validation/joi/string.extensions.ts +1 -1
  96. package/dist/validation/ajv/ajv.util.d.ts +0 -21
  97. package/dist/validation/ajv/ajv.util.js +0 -28
  98. package/src/validation/ajv/ajv.util.ts +0 -38
@@ -1,5 +1,4 @@
1
1
  import Ajv from 'ajv';
2
- export * from './ajv.util.js';
3
2
  export * from './ajvSchema.js';
4
3
  export * from './ajvValidationError.js';
5
4
  export * from './getAjv.js';
@@ -1,5 +1,4 @@
1
1
  import Ajv from 'ajv';
2
- export * from './ajv.util.js';
3
2
  export * from './ajvSchema.js';
4
3
  export * from './ajvValidationError.js';
5
4
  export * from './getAjv.js';
@@ -1,5 +1,5 @@
1
1
  import type { ErrorData } from '@naturalcycles/js-lib/error';
2
- import { AppError } from '@naturalcycles/js-lib/error';
2
+ import { AppError } from '@naturalcycles/js-lib/error/error.util.js';
3
3
  import type { ValidationErrorItem } from 'joi';
4
4
  /**
5
5
  * Example of ValidationErrorItem:
@@ -1,4 +1,4 @@
1
- import { AppError } from '@naturalcycles/js-lib/error';
1
+ import { AppError } from '@naturalcycles/js-lib/error/error.util.js';
2
2
  export class JoiValidationError extends AppError {
3
3
  constructor(message, data) {
4
4
  super(message, data, {
@@ -17,6 +17,8 @@ export declare function validate<T>(input: any, schema?: AnySchema<T>, objectNam
17
17
  * Returns JoiValidationResult with converted value and error (if any).
18
18
  * Does not throw.
19
19
  *
20
+ * Joi does NOT mutate the input.
21
+ *
20
22
  * If `schema` is undefined - returns value as is.
21
23
  */
22
24
  export declare function getValidationResult<T>(input: any, schema?: AnySchema<T>, objectName?: string, options?: ValidationOptions): JoiValidationResult<T>;
@@ -6,7 +6,7 @@
6
6
  * "Converts" mean e.g trims all strings from leading/trailing spaces.
7
7
  */
8
8
  import { _hb, _isObject } from '@naturalcycles/js-lib';
9
- import { _truncateMiddle } from '@naturalcycles/js-lib/string';
9
+ import { _truncateMiddle } from '@naturalcycles/js-lib/string/string.util.js';
10
10
  import { JoiValidationError } from './joi.validation.error.js';
11
11
  // Strip colors in production (for e.g Sentry reporting)
12
12
  // const stripColors = process.env.NODE_ENV === 'production' || !!process.env.GAE_INSTANCE
@@ -50,6 +50,8 @@ export function validate(input, schema, objectName, opt = {}) {
50
50
  * Returns JoiValidationResult with converted value and error (if any).
51
51
  * Does not throw.
52
52
  *
53
+ * Joi does NOT mutate the input.
54
+ *
53
55
  * If `schema` is undefined - returns value as is.
54
56
  */
55
57
  export function getValidationResult(input, schema, objectName, options = {}) {
@@ -1,4 +1,4 @@
1
- import { localTime } from '@naturalcycles/js-lib/datetime';
1
+ import { localTime } from '@naturalcycles/js-lib/datetime/localTime.js';
2
2
  export function stringExtensions(joi) {
3
3
  return {
4
4
  type: 'string',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@naturalcycles/nodejs-lib",
3
3
  "type": "module",
4
- "version": "15.3.0",
4
+ "version": "15.5.0",
5
5
  "dependencies": {
6
6
  "@naturalcycles/js-lib": "^15",
7
7
  "@types/js-yaml": "^4",
@@ -22,22 +22,25 @@
22
22
  "yargs": "^18"
23
23
  },
24
24
  "devDependencies": {
25
- "@naturalcycles/dev-lib": "*",
26
- "@types/through2-concurrent": "^2"
25
+ "@types/through2-concurrent": "^2",
26
+ "@naturalcycles/dev-lib": "19.11.0"
27
27
  },
28
28
  "exports": {
29
29
  ".": "./dist/index.js",
30
30
  "./lruMemoCache": "./dist/cache/lruMemoCache.js",
31
31
  "./colors": "./dist/colors/colors.js",
32
32
  "./csv": "./dist/csv/index.js",
33
- "./exec2": "./dist/exec2.js",
33
+ "./exec2": "./dist/exec2/exec2.js",
34
34
  "./fs2": "./dist/fs/fs2.js",
35
35
  "./env": "./dist/fs/json2env.js",
36
36
  "./kpy": "./dist/fs/kpy.js",
37
37
  "./yaml2": "./dist/fs/yaml2.js",
38
38
  "./glob": "./dist/glob/index.js",
39
39
  "./jwt": "./dist/jwt/jwt.service.js",
40
+ "./runScript": "./dist/script/runScript.js",
41
+ "./slack": "./dist/slack/index.js",
40
42
  "./stream": "./dist/stream/index.js",
43
+ "./stream/*.js": "./dist/stream/*.js",
41
44
  "./yargs": "./dist/yargs/yargs.util.js",
42
45
  "./ajv": "./dist/validation/ajv/index.js",
43
46
  "./joi": "./dist/validation/joi/index.js",
@@ -60,7 +63,6 @@
60
63
  "!src/**/__snapshots__",
61
64
  "!src/**/__exclude"
62
65
  ],
63
- "main": "dist/index.js",
64
66
  "types": "dist/index.d.ts",
65
67
  "publishConfig": {
66
68
  "access": "public"
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { SlackService } from '../index.js'
4
3
  import { runScript } from '../script/runScript.js'
4
+ import { SlackService } from '../slack/index.js'
5
5
  import { _yargs } from '../yargs/yargs.util.js'
6
6
 
7
7
  runScript(async () => {
@@ -1,6 +1,6 @@
1
1
  // Inspired by: https://gist.github.com/Jezternz/c8e9fafc2c114e079829974e3764db75
2
2
 
3
- import { _assert } from '@naturalcycles/js-lib/error'
3
+ import { _assert } from '@naturalcycles/js-lib/error/assert.js'
4
4
  import type { AnyObject } from '@naturalcycles/js-lib/types'
5
5
 
6
6
  export interface CSVReaderConfig {
@@ -1,6 +1,6 @@
1
1
  // Inspired by: https://github.com/ryu1kn/csv-writer/
2
2
 
3
- import { _assert } from '@naturalcycles/js-lib/error'
3
+ import { _assert } from '@naturalcycles/js-lib/error/assert.js'
4
4
  import type { AnyObject } from '@naturalcycles/js-lib/types'
5
5
 
6
6
  export interface CSVWriterConfig {
@@ -1,4 +1,4 @@
1
- import { _truncate } from '@naturalcycles/js-lib/string'
1
+ import { _truncate } from '@naturalcycles/js-lib/string/string.util.js'
2
2
  import type { AnyObject } from '@naturalcycles/js-lib/types'
3
3
 
4
4
  export interface TableDiffOptions {
@@ -1,13 +1,13 @@
1
1
  import { execSync, spawn, spawnSync } from 'node:child_process'
2
- import { _since } from '@naturalcycles/js-lib/datetime'
3
- import { AppError } from '@naturalcycles/js-lib/error'
4
- import { _substringAfterLast } from '@naturalcycles/js-lib/string'
2
+ import { _since } from '@naturalcycles/js-lib/datetime/time.util.js'
3
+ import { AppError } from '@naturalcycles/js-lib/error/error.util.js'
4
+ import { _substringAfterLast } from '@naturalcycles/js-lib/string/string.util.js'
5
5
  import type {
6
6
  AnyObject,
7
7
  NumberOfMilliseconds,
8
8
  UnixTimestampMillis,
9
9
  } from '@naturalcycles/js-lib/types'
10
- import { dimGrey, dimRed, hasColors, white } from './colors/colors.js'
10
+ import { dimGrey, dimRed, hasColors, white } from '../colors/colors.js'
11
11
 
12
12
  /**
13
13
  * Set of utility functions to work with Spawn / Exec.
package/src/fs/fs2.ts CHANGED
@@ -18,7 +18,7 @@ import type { RmOptions, Stats } from 'node:fs'
18
18
  import fs from 'node:fs'
19
19
  import fsp from 'node:fs/promises'
20
20
  import path from 'node:path'
21
- import { _jsonParse } from '@naturalcycles/js-lib/string'
21
+ import { _jsonParse } from '@naturalcycles/js-lib/string/json.util.js'
22
22
 
23
23
  /**
24
24
  * fs2 conveniently groups filesystem functions together.
package/src/index.ts CHANGED
@@ -2,14 +2,11 @@ export * from './buffer/buffer.util.js'
2
2
  export * from './diff/tableDiff.js'
3
3
  export * from './infra/process.util.js'
4
4
  export * from './log/log.util.js'
5
- export * from './script/runScript.js'
6
5
  export * from './security/crypto.util.js'
7
6
  export * from './security/hash.util.js'
8
7
  export * from './security/id.util.js'
9
8
  export * from './security/nanoid.js'
10
9
  export * from './security/secret.util.js'
11
- export * from './slack/slack.service.js'
12
- export * from './slack/slack.service.model.js'
13
10
  export * from './string/inspect.js'
14
11
  export * from './util/buildInfo.util.js'
15
12
  export * from './util/env.util.js'
@@ -1,5 +1,6 @@
1
1
  import type { ErrorData } from '@naturalcycles/js-lib/error'
2
- import { _assert, _errorDataAppend } from '@naturalcycles/js-lib/error'
2
+ import { _assert } from '@naturalcycles/js-lib/error/assert.js'
3
+ import { _errorDataAppend } from '@naturalcycles/js-lib/error/error.util.js'
3
4
  import type { AnyObject, JWTString } from '@naturalcycles/js-lib/types'
4
5
  import type { AnySchema } from 'joi'
5
6
  import type { Algorithm, JwtHeader, SignOptions, VerifyOptions } from 'jsonwebtoken'
@@ -1,8 +1,10 @@
1
+ import 'dotenv/config'
1
2
  import os from 'node:os'
2
3
  import type { CommonLogger } from '@naturalcycles/js-lib/log'
3
- import { pDelay } from '@naturalcycles/js-lib/promise'
4
- import { setGlobalStringifyFunction } from '@naturalcycles/js-lib/string'
4
+ import { pDelay } from '@naturalcycles/js-lib/promise/pDelay.js'
5
+ import { setGlobalStringifyFunction } from '@naturalcycles/js-lib/string/stringify.js'
5
6
  import type { AnyObject } from '@naturalcycles/js-lib/types'
7
+ import { dimGrey } from '../colors/colors.js'
6
8
  import { inspectStringifyFn } from '../string/inspect.js'
7
9
 
8
10
  export interface RunScriptOptions {
@@ -46,6 +48,7 @@ const { DEBUG_RUN_SCRIPT } = process.env
46
48
  * Set env DEBUG_RUN_SCRIPT for extra debugging.
47
49
  */
48
50
  export function runScript(fn: (...args: any[]) => any, opt: RunScriptOptions = {}): void {
51
+ checkAndlogEnvironment()
49
52
  setGlobalStringifyFunction(inspectStringifyFn)
50
53
 
51
54
  const { logger = console, noExit, registerUncaughtExceptionHandlers = true } = opt
@@ -69,9 +72,6 @@ export function runScript(fn: (...args: any[]) => any, opt: RunScriptOptions = {
69
72
 
70
73
  void (async () => {
71
74
  try {
72
- await import('dotenv/config')
73
- await checkAndlogEnvironment()
74
-
75
75
  await fn()
76
76
 
77
77
  await pDelay() // to ensure all async operations are completed
@@ -93,9 +93,7 @@ export function runScript(fn: (...args: any[]) => any, opt: RunScriptOptions = {
93
93
  })()
94
94
  }
95
95
 
96
- async function checkAndlogEnvironment(): Promise<void> {
97
- const { dimGrey } = await import('../colors/colors.js')
98
-
96
+ function checkAndlogEnvironment(): void {
99
97
  const {
100
98
  platform,
101
99
  arch,
@@ -1,6 +1,6 @@
1
1
  import fs from 'node:fs'
2
2
  import path from 'node:path'
3
- import { _assert } from '@naturalcycles/js-lib/error'
3
+ import { _assert } from '@naturalcycles/js-lib/error/assert.js'
4
4
  import { globSync } from 'tinyglobby'
5
5
  import { dimGrey, yellow } from '../colors/colors.js'
6
6
  import { fs2 } from '../fs/fs2.js'
@@ -1,6 +1,6 @@
1
1
  import fs from 'node:fs'
2
2
  import path from 'node:path'
3
- import { _assert } from '@naturalcycles/js-lib/error'
3
+ import { _assert } from '@naturalcycles/js-lib/error/assert.js'
4
4
  import { globSync } from 'tinyglobby'
5
5
  import { dimGrey, yellow } from '../colors/colors.js'
6
6
  import { fs2 } from '../fs/fs2.js'
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync } from 'node:fs'
2
- import { _assert } from '@naturalcycles/js-lib/error'
3
- import { _jsonParseIfPossible } from '@naturalcycles/js-lib/string'
2
+ import { _assert } from '@naturalcycles/js-lib/error/assert.js'
3
+ import { _jsonParseIfPossible } from '@naturalcycles/js-lib/string/json.util.js'
4
4
  import type { Base64String, StringMap } from '@naturalcycles/js-lib/types'
5
5
  import { decryptObject, decryptRandomIVBuffer } from './crypto.util.js'
6
6
 
@@ -0,0 +1,2 @@
1
+ export * from './slack.service.js'
2
+ export * from './slack.service.model.js'
@@ -1,6 +1,6 @@
1
1
  import type { CommonLogger } from '@naturalcycles/js-lib/log'
2
2
  import type { AnyObject } from '@naturalcycles/js-lib/types'
3
- import type { InspectAnyOptions } from '../index.js'
3
+ import type { InspectAnyOptions } from '../string/inspect.js'
4
4
 
5
5
  /**
6
6
  * Properties that exists both in SlackApiBody (as per Slack API) and SlackMessage (our abstraction).
@@ -1,15 +1,14 @@
1
- import { localTime } from '@naturalcycles/js-lib/datetime'
1
+ import { localTime } from '@naturalcycles/js-lib/datetime/localTime.js'
2
2
  import { type Fetcher, getFetcher } from '@naturalcycles/js-lib/http'
3
3
  import {
4
4
  type CommonLogger,
5
5
  commonLoggerMinLevel,
6
6
  type CommonLogLevel,
7
7
  } from '@naturalcycles/js-lib/log'
8
- import { _omit } from '@naturalcycles/js-lib/object'
9
- import { PQueue } from '@naturalcycles/js-lib/promise'
8
+ import { _omit } from '@naturalcycles/js-lib/object/object.util.js'
9
+ import { PQueue } from '@naturalcycles/js-lib/promise/pQueue.js'
10
10
  import type { AnyObject } from '@naturalcycles/js-lib/types'
11
- import type { InspectAnyOptions } from '../index.js'
12
- import { _inspect } from '../index.js'
11
+ import { _inspect, type InspectAnyOptions } from '../index.js'
13
12
  import type {
14
13
  SlackApiBody,
15
14
  SlackAttachmentField,
@@ -1,5 +1,5 @@
1
1
  import { _hb } from '@naturalcycles/js-lib'
2
- import { _ms } from '@naturalcycles/js-lib/datetime'
2
+ import { _ms } from '@naturalcycles/js-lib/datetime/time.util.js'
3
3
  import { boldWhite, dimWhite } from '../../colors/colors.js'
4
4
 
5
5
  export class NDJsonStats {
@@ -1,4 +1,4 @@
1
- import { ErrorMode } from '@naturalcycles/js-lib/error'
1
+ import { ErrorMode } from '@naturalcycles/js-lib/error/errorMode.js'
2
2
  import type { AbortableAsyncMapper } from '@naturalcycles/js-lib/types'
3
3
  import {
4
4
  createReadStreamAsNDJSON,
@@ -1,11 +1,13 @@
1
- import { ErrorMode } from '@naturalcycles/js-lib/error'
1
+ import { ErrorMode } from '@naturalcycles/js-lib/error/errorMode.js'
2
2
  import type { AbortableAsyncMapper } from '@naturalcycles/js-lib/types'
3
+ import { _pipeline } from '../pipeline/pipeline.js'
3
4
  import {
4
- createReadStreamAsNDJSON,
5
+ transformLogProgress,
5
6
  type TransformLogProgressOptions,
6
- type TransformMapOptions,
7
- } from '../index.js'
8
- import { _pipeline, transformLogProgress, transformMap, writableVoid } from '../index.js'
7
+ } from '../transform/transformLogProgress.js'
8
+ import { transformMap, type TransformMapOptions } from '../transform/transformMap.js'
9
+ import { writableVoid } from '../writable/writableVoid.js'
10
+ import { createReadStreamAsNDJSON } from './createReadStreamAsNDJSON.js'
9
11
 
10
12
  export interface NDJSONStreamForEachOptions<IN = any>
11
13
  extends TransformMapOptions<IN, void>,
@@ -1,9 +1,9 @@
1
1
  import type { Readable, Writable } from 'node:stream'
2
2
  import { Transform } from 'node:stream'
3
3
  import { pipeline } from 'node:stream/promises'
4
- import { _last } from '@naturalcycles/js-lib'
4
+ import { _last } from '@naturalcycles/js-lib/array/array.util.js'
5
5
  import type { DeferredPromise } from '@naturalcycles/js-lib/promise'
6
- import { pDefer } from '@naturalcycles/js-lib/promise'
6
+ import { pDefer } from '@naturalcycles/js-lib/promise/pDefer.js'
7
7
  import type { AnyFunction } from '@naturalcycles/js-lib/types'
8
8
  import { writablePushToArray } from '../writable/writablePushToArray.js'
9
9
 
@@ -1,7 +1,7 @@
1
1
  import type { AbortableAsyncMapper, IndexedMapper } from '@naturalcycles/js-lib/types'
2
2
  import { _passNothingPredicate } from '@naturalcycles/js-lib/types'
3
- import type { ReadableTyped } from '../index.js'
4
- import { _pipeline } from '../index.js'
3
+ import { _pipeline } from '../pipeline/pipeline.js'
4
+ import type { ReadableTyped } from '../stream.model.js'
5
5
  import type { TransformMapOptions } from '../transform/transformMap.js'
6
6
  import { transformMap } from '../transform/transformMap.js'
7
7
 
@@ -1,6 +1,6 @@
1
1
  import { _hb } from '@naturalcycles/js-lib'
2
2
  import type { CommonLogger } from '@naturalcycles/js-lib/log'
3
- import { NumberStack } from '@naturalcycles/js-lib/math'
3
+ import { NumberStack } from '@naturalcycles/js-lib/math/stack.util.js'
4
4
  import { yellow } from '../colors/colors.js'
5
5
  import { gzipBuffer } from '../zip/zip.util.js'
6
6
 
@@ -1,8 +1,9 @@
1
1
  import type { Readable } from 'node:stream'
2
2
  import type { CommonLogger } from '@naturalcycles/js-lib/log'
3
- import { AbortableTransform, transformNoOp } from '../index.js'
3
+ import { AbortableTransform } from '../pipeline/pipeline.js'
4
4
  import type { TransformOptions, TransformTyped } from '../stream.model.js'
5
5
  import { pipelineClose } from '../stream.util.js'
6
+ import { transformNoOp } from './transformNoOp.js'
6
7
 
7
8
  export interface TransformLimitOptions extends TransformOptions {
8
9
  /**
@@ -1,9 +1,9 @@
1
1
  import { _hc } from '@naturalcycles/js-lib'
2
- import { _since } from '@naturalcycles/js-lib/datetime'
2
+ import { _since } from '@naturalcycles/js-lib/datetime/time.util.js'
3
3
  import { _anyToError, ErrorMode } from '@naturalcycles/js-lib/error'
4
4
  import type { CommonLogger } from '@naturalcycles/js-lib/log'
5
- import { pFilter } from '@naturalcycles/js-lib/promise'
6
- import { _stringify } from '@naturalcycles/js-lib/string'
5
+ import { pFilter } from '@naturalcycles/js-lib/promise/pFilter.js'
6
+ import { _stringify } from '@naturalcycles/js-lib/string/stringify.js'
7
7
  import {
8
8
  type AbortableAsyncMapper,
9
9
  type AsyncPredicate,
@@ -1,5 +1,5 @@
1
1
  import { Transform } from 'node:stream'
2
- import { ErrorMode } from '@naturalcycles/js-lib/error'
2
+ import { ErrorMode } from '@naturalcycles/js-lib/error/errorMode.js'
3
3
  import type { CommonLogger } from '@naturalcycles/js-lib/log'
4
4
  import type { IndexedMapper } from '@naturalcycles/js-lib/types'
5
5
  import type { TransformTyped } from '../stream.model.js'
@@ -1,6 +1,6 @@
1
1
  import { Transform } from 'node:stream'
2
- import { transformNoOp } from '../index.js'
3
2
  import type { TransformOptions, TransformTyped } from '../stream.model.js'
3
+ import { transformNoOp } from './transformNoOp.js'
4
4
 
5
5
  export interface TransformOffsetOptions extends TransformOptions {
6
6
  /**
@@ -1,7 +1,7 @@
1
1
  import { Transform } from 'node:stream'
2
2
  import { _ms, _since, localTime } from '@naturalcycles/js-lib/datetime'
3
3
  import type { DeferredPromise } from '@naturalcycles/js-lib/promise'
4
- import { pDefer } from '@naturalcycles/js-lib/promise'
4
+ import { pDefer } from '@naturalcycles/js-lib/promise/pDefer.js'
5
5
  import type {
6
6
  NumberOfSeconds,
7
7
  PositiveInteger,
@@ -1,7 +1,7 @@
1
1
  import { Worker } from 'node:worker_threads'
2
- import { _range } from '@naturalcycles/js-lib'
2
+ import { _range } from '@naturalcycles/js-lib/array/range.js'
3
3
  import type { DeferredPromise } from '@naturalcycles/js-lib/promise'
4
- import { pDefer } from '@naturalcycles/js-lib/promise'
4
+ import { pDefer } from '@naturalcycles/js-lib/promise/pDefer.js'
5
5
  import type { AnyObject } from '@naturalcycles/js-lib/types'
6
6
  import through2Concurrent from 'through2-concurrent'
7
7
  import type { TransformTyped } from '../../stream.model.js'
@@ -1,8 +1,8 @@
1
1
  import type { AsyncIndexedMapper, IndexedMapper } from '@naturalcycles/js-lib/types'
2
2
  import { _passNothingPredicate } from '@naturalcycles/js-lib/types'
3
- import type { TransformMapOptions } from '../index.js'
4
- import { transformMap, transformMapSync } from '../index.js'
5
3
  import type { WritableTyped } from '../stream.model.js'
4
+ import { transformMap, type TransformMapOptions } from '../transform/transformMap.js'
5
+ import { transformMapSync } from '../transform/transformMapSync.js'
6
6
 
7
7
  /**
8
8
  * Just an alias to transformMap that declares OUT as void.
@@ -1,7 +1,7 @@
1
1
  import { Writable } from 'node:stream'
2
- import type { ReadableTyped } from '../index.js'
3
- import { _pipeline, readableCreate } from '../index.js'
4
- import type { TransformOptions, WritableTyped } from '../stream.model.js'
2
+ import { _pipeline } from '../pipeline/pipeline.js'
3
+ import { readableCreate } from '../readable/readableCreate.js'
4
+ import type { ReadableTyped, TransformOptions, WritableTyped } from '../stream.model.js'
5
5
 
6
6
  /**
7
7
  * Allows "forking" a stream inside pipeline into a number of pipeline chains (2 or more).
@@ -1,7 +1,7 @@
1
1
  import type { InspectOptions } from 'node:util'
2
2
  import { inspect } from 'node:util'
3
3
  import type { JsonStringifyFunction, StringifyOptions } from '@naturalcycles/js-lib/string'
4
- import { _stringify } from '@naturalcycles/js-lib/string'
4
+ import { _stringify } from '@naturalcycles/js-lib/string/stringify.js'
5
5
 
6
6
  export interface InspectAnyOptions extends StringifyOptions, InspectOptions {}
7
7
 
@@ -1,6 +1,6 @@
1
1
  import type { BuildInfo } from '@naturalcycles/js-lib'
2
- import { localTime } from '@naturalcycles/js-lib/datetime'
3
- import { _filterUndefinedValues } from '@naturalcycles/js-lib/object'
2
+ import { localTime } from '@naturalcycles/js-lib/datetime/localTime.js'
3
+ import { _filterUndefinedValues } from '@naturalcycles/js-lib/object/object.util.js'
4
4
  import type { AnyObject, UnixTimestamp } from '@naturalcycles/js-lib/types'
5
5
  import { fs2 } from '../fs/fs2.js'
6
6
  import { git2 } from './git2.js'
package/src/util/git2.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { execSync } from 'node:child_process'
2
2
  import { basename } from 'node:path'
3
3
  import type { UnixTimestamp } from '@naturalcycles/js-lib/types'
4
- import { exec2 } from '../exec2.js'
4
+ import { exec2 } from '../exec2/exec2.js'
5
5
 
6
6
  /**
7
7
  * Set of utility functions to work with git.
@@ -1,10 +1,9 @@
1
- import { _isObject } from '@naturalcycles/js-lib'
1
+ import { _isObject, _lazyValue } from '@naturalcycles/js-lib'
2
2
  import type { JsonSchema, JsonSchemaBuilder } from '@naturalcycles/js-lib/json-schema'
3
3
  import { JsonSchemaAnyBuilder } from '@naturalcycles/js-lib/json-schema'
4
4
  import { _filterNullishValues } from '@naturalcycles/js-lib/object'
5
5
  import { _substringBefore } from '@naturalcycles/js-lib/string'
6
- import type { Ajv, ValidateFunction } from 'ajv'
7
- import { fs2 } from '../../fs/fs2.js'
6
+ import type { Ajv } from 'ajv'
8
7
  import { _inspect } from '../../string/inspect.js'
9
8
  import { AjvValidationError } from './ajvValidationError.js'
10
9
  import { getAjv } from './getAjv.js'
@@ -25,7 +24,7 @@ export interface AjvSchemaCfg {
25
24
  * Dependent schemas to pass to Ajv instance constructor.
26
25
  * Simpler than instantiating and passing ajv instance yourself.
27
26
  */
28
- schemas?: (JsonSchema | JsonSchemaBuilder | AjvSchema)[]
27
+ // schemas?: (JsonSchema | JsonSchemaBuilder | AjvSchema)[]
29
28
 
30
29
  objectName?: string
31
30
 
@@ -36,7 +35,13 @@ export interface AjvSchemaCfg {
36
35
  *
37
36
  * This option is a "shortcut" to skip creating and passing Ajv instance.
38
37
  */
39
- coerceTypes?: boolean
38
+ // coerceTypes?: boolean
39
+
40
+ /**
41
+ * If true - schema will be compiled on-demand (lazily).
42
+ * Default: false.
43
+ */
44
+ lazy?: boolean
40
45
  }
41
46
 
42
47
  /**
@@ -51,23 +56,40 @@ export class AjvSchema<T = unknown> {
51
56
  cfg: Partial<AjvSchemaCfg> = {},
52
57
  ) {
53
58
  this.cfg = {
59
+ lazy: false,
54
60
  ...cfg,
55
- ajv:
56
- cfg.ajv ||
57
- getAjv({
58
- schemas: cfg.schemas?.map(s => {
59
- if (s instanceof AjvSchema) return s.schema
60
- if (s instanceof JsonSchemaAnyBuilder) return s.build()
61
- return s as JsonSchema
62
- }),
63
- coerceTypes: cfg.coerceTypes || false,
64
- // verbose: true,
65
- }),
61
+ ajv: cfg.ajv || getAjv(),
62
+ // ajv:
63
+ // cfg.ajv ||
64
+ // getAjv({
65
+ // schemas: cfg.schemas?.map(s => {
66
+ // if (s instanceof AjvSchema) return s.schema
67
+ // if (s instanceof JsonSchemaAnyBuilder) return s.build()
68
+ // return s as JsonSchema
69
+ // }),
70
+ // coerceTypes: cfg.coerceTypes || false,
71
+ // // verbose: true,
72
+ // }),
66
73
  // Auto-detecting "ObjectName" from $id of the schema (e.g "Address.schema.json")
67
74
  objectName: cfg.objectName || (schema.$id ? _substringBefore(schema.$id, '.') : undefined),
68
75
  }
69
76
 
70
- this.validateFunction = this.cfg.ajv.compile<T>(schema)
77
+ if (!cfg.lazy) {
78
+ this.getValidateFunction() // compile eagerly
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Shortcut for AjvSchema.create(schema, { lazy: true })
84
+ */
85
+ static createLazy<T>(
86
+ schema: JsonSchemaBuilder<T> | JsonSchema<T> | AjvSchema<T>,
87
+ cfg: Partial<AjvSchemaCfg> = {},
88
+ ): AjvSchema<T> {
89
+ return AjvSchema.create(schema, {
90
+ lazy: true,
91
+ ...cfg,
92
+ })
71
93
  }
72
94
 
73
95
  /**
@@ -90,21 +112,9 @@ export class AjvSchema<T = unknown> {
90
112
  return new AjvSchema<T>(schema as JsonSchema<T>, cfg)
91
113
  }
92
114
 
93
- /**
94
- * Create AjvSchema directly from a filePath of json schema.
95
- * Convenient method that just does fs.readFileSync for you.
96
- */
97
- static readJsonSync<T = unknown>(
98
- filePath: string,
99
- cfg: Partial<AjvSchemaCfg> = {},
100
- ): AjvSchema<T> {
101
- fs2.requireFileToExist(filePath)
102
- const schema = fs2.readJson<JsonSchema<T>>(filePath)
103
- return new AjvSchema<T>(schema, cfg)
104
- }
105
-
106
115
  readonly cfg: AjvSchemaCfg
107
- private readonly validateFunction: ValidateFunction<T>
116
+
117
+ private getValidateFunction = _lazyValue(() => this.cfg.ajv.compile<T>(this.schema))
108
118
 
109
119
  /**
110
120
  * It returns the original object just for convenience.
@@ -121,13 +131,13 @@ export class AjvSchema<T = unknown> {
121
131
  }
122
132
 
123
133
  isValid(obj: T): boolean {
124
- return this.validateFunction(obj)
134
+ return this.getValidateFunction()(obj)
125
135
  }
126
136
 
127
137
  getValidationError(obj: T, opt: AjvValidationOptions = {}): AjvValidationError | undefined {
128
138
  if (this.isValid(obj)) return
129
139
 
130
- const errors = this.validateFunction.errors!
140
+ const errors = this.getValidateFunction().errors!
131
141
 
132
142
  const {
133
143
  objectId = _isObject(obj) ? (obj['id' as keyof T] as any) : undefined,
@@ -1,5 +1,5 @@
1
1
  import type { ErrorData } from '@naturalcycles/js-lib/error'
2
- import { AppError } from '@naturalcycles/js-lib/error'
2
+ import { AppError } from '@naturalcycles/js-lib/error/error.util.js'
3
3
  import type { ErrorObject } from 'ajv'
4
4
 
5
5
  export interface AjvValidationErrorData extends ErrorData {