@naturalcycles/nodejs-lib 12.39.0 → 12.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [12.43.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.42.0...v12.43.0) (2021-10-20)
2
+
3
+
4
+ ### Features
5
+
6
+ * hasColors, transformLogProgress to use it ([d5f7244](https://github.com/NaturalCycles/nodejs-lib/commit/d5f724488a8ee3239cf49c29ec9f9ffad5b95340))
7
+
8
+ # [12.42.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.41.0...v12.42.0) (2021-10-19)
9
+
10
+
11
+ ### Features
12
+
13
+ * JoiValidationError to include full `annotation` ([c17756e](https://github.com/NaturalCycles/nodejs-lib/commit/c17756e1f8760987e62f6bee35f72fe7449b5671))
14
+
15
+ # [12.41.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.40.0...v12.41.0) (2021-10-18)
16
+
17
+
18
+ ### Features
19
+
20
+ * increase joiError length from 1000 to 2000 characters ([1c40dce](https://github.com/NaturalCycles/nodejs-lib/commit/1c40dce8dadc46d63b84f46f4c67546bd703ac7e))
21
+
22
+ # [12.40.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.39.0...v12.40.0) (2021-10-15)
23
+
24
+
25
+ ### Features
26
+
27
+ * export baseDBEntitySchema, savedDBEntitySchema ([f4644ad](https://github.com/NaturalCycles/nodejs-lib/commit/f4644ad25aed0021fad5b9091e9e10cec6884e53))
28
+
1
29
  # [12.39.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.38.0...v12.39.0) (2021-10-11)
2
30
 
3
31
 
@@ -0,0 +1 @@
1
+ export declare function hasColors(): boolean;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasColors = void 0;
4
+ const supporsColorLib = require('supports-color');
5
+ function hasColors() {
6
+ if (process.env['NO_COLOR'])
7
+ return false; // https://no-color.org/
8
+ return !!supporsColorLib.stdout;
9
+ }
10
+ exports.hasColors = hasColors;
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ import { Debug, DebugLogLevel, IDebug, IDebugger } from './log/debug';
11
11
  import { base64ToBuffer, base64ToString, bufferToBase64, hash, md5, stringToBase64 } from './security/hash.util';
12
12
  import { ALPHABET_ALPHANUMERIC, ALPHABET_ALPHANUMERIC_LOWERCASE, ALPHABET_ALPHANUMERIC_UPPERCASE, ALPHABET_LOWERCASE, ALPHABET_NUMBER, ALPHABET_UPPERCASE, stringId, stringIdAsync, stringIdUnsafe } from './security/id.util';
13
13
  import { getSecretMap, loadSecretsFromEnv, loadSecretsFromJsonFile, removeSecretsFromEnv, secret, secretOptional, setSecretMap } from './security/secret.util';
14
+ import { hasColors } from './colors/colors';
14
15
  import { slackDefaultMessagePrefixHook, SlackService } from './slack/slack.service';
15
16
  import { SlackApiBody, SlackMessage, SlackMessagePrefixHook, SlackMessageProps, SlackServiceCfg } from './slack/slack.service.model';
16
17
  import { NDJsonStats } from './stream/ndjson/ndjson.model';
@@ -59,8 +60,8 @@ import { AjvValidationError, AjvValidationErrorData } from './validation/ajv/ajv
59
60
  import { getAjv } from './validation/ajv/getAjv';
60
61
  import { ExtendedJoi, Joi } from './validation/joi/joi.extensions';
61
62
  import { AnySchemaTyped, ArraySchemaTyped, BooleanSchemaTyped, NumberSchemaTyped, ObjectSchemaTyped, SchemaTyped, StringSchemaTyped } from './validation/joi/joi.model';
62
- import { anyObjectSchema, anySchema, arraySchema, oneOfSchema, binarySchema, booleanDefaultToFalseSchema, booleanSchema, dateStringSchema, emailSchema, idSchema, integerSchema, ipAddressSchema, numberSchema, objectSchema, percentageSchema, semVerSchema, SEM_VER_PATTERN, slugSchema, stringSchema, unixTimestampSchema, urlSchema, userAgentSchema, utcOffsetSchema, verSchema } from './validation/joi/joi.shared.schemas';
63
+ 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';
63
64
  import { JoiValidationError, JoiValidationErrorData } from './validation/joi/joi.validation.error';
64
65
  import { convert, getValidationResult, isValid, JoiValidationResult, undefinedIfInvalid, validate } from './validation/joi/joi.validation.util';
65
66
  export type { 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, };
66
- export { JoiValidationError, validate, getValidationResult, isValid, undefinedIfInvalid, convert, Joi, booleanSchema, booleanDefaultToFalseSchema, stringSchema, numberSchema, integerSchema, percentageSchema, dateStringSchema, arraySchema, binarySchema, objectSchema, oneOfSchema, anySchema, anyObjectSchema, 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, stringToBase64, base64ToString, bufferToBase64, base64ToBuffer, Debug, DebugLogLevel, getSecretMap, setSecretMap, loadSecretsFromEnv, loadSecretsFromJsonFile, removeSecretsFromEnv, secret, secretOptional, memoryUsage, memoryUsageFull, SlackService, slackDefaultMessagePrefixHook, readableCreate, readableFrom, readableFromArray, readableToArray, readableForEach, readableForEachSync, readableMap, readableMapToArray, _pipeline, transformBuffer, ndJsonFileRead, ndJsonFileWrite, ndjsonStreamForEach, pipelineFromNDJsonFile, pipelineToNDJsonFile, NDJsonStats, streamToNDJsonFile, transformJsonParse, bufferReviver, transformToNDJson, transformFilter, transformFilterSync, transformMap, transformMapSync, transformMapSimple, transformNoOp, writableForEach, writablePushToArray, transformSplit, transformToString, transformToArray, transformTap, transformLogProgress, transformLimit, writableVoid, writableFork, transformMultiThreaded, BaseWorkerClass, tableDiff, inspectAny, getGot, HTTPError, TimeoutError, _chunkBuffer, Ajv, getAjv, AjvSchema, AjvValidationError, readJsonSchemas, readAjvSchemas, };
67
+ 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, stringToBase64, base64ToString, bufferToBase64, base64ToBuffer, Debug, DebugLogLevel, getSecretMap, setSecretMap, loadSecretsFromEnv, loadSecretsFromJsonFile, removeSecretsFromEnv, secret, secretOptional, memoryUsage, memoryUsageFull, SlackService, slackDefaultMessagePrefixHook, readableCreate, readableFrom, readableFromArray, readableToArray, readableForEach, readableForEachSync, readableMap, readableMapToArray, _pipeline, transformBuffer, ndJsonFileRead, ndJsonFileWrite, ndjsonStreamForEach, pipelineFromNDJsonFile, pipelineToNDJsonFile, NDJsonStats, streamToNDJsonFile, transformJsonParse, bufferReviver, transformToNDJson, transformFilter, transformFilterSync, transformMap, transformMapSync, transformMapSimple, transformNoOp, writableForEach, writablePushToArray, transformSplit, transformToString, transformToArray, transformTap, transformLogProgress, transformLimit, writableVoid, writableFork, transformMultiThreaded, BaseWorkerClass, tableDiff, inspectAny, getGot, HTTPError, TimeoutError, _chunkBuffer, Ajv, getAjv, AjvSchema, AjvValidationError, readJsonSchemas, readAjvSchemas, hasColors, };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALPHABET_ALPHANUMERIC_LOWERCASE = exports.ALPHABET_UPPERCASE = 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.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.transformSplit = exports.writablePushToArray = exports.writableForEach = exports.transformNoOp = 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.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.DebugLogLevel = exports.Debug = exports.base64ToBuffer = exports.bufferToBase64 = exports.base64ToString = exports.stringToBase64 = exports.hash = exports.md5 = exports.ALPHABET_ALPHANUMERIC = exports.ALPHABET_ALPHANUMERIC_UPPERCASE = void 0;
5
- exports.readAjvSchemas = exports.readJsonSchemas = exports.AjvValidationError = exports.AjvSchema = exports.getAjv = exports.Ajv = exports._chunkBuffer = exports.TimeoutError = exports.HTTPError = exports.getGot = exports.inspectAny = exports.tableDiff = exports.BaseWorkerClass = exports.transformMultiThreaded = exports.writableFork = exports.writableVoid = exports.transformLimit = exports.transformLogProgress = exports.transformTap = exports.transformToArray = exports.transformToString = void 0;
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.writableForEach = exports.transformNoOp = 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.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.DebugLogLevel = exports.Debug = exports.base64ToBuffer = exports.bufferToBase64 = exports.base64ToString = exports.stringToBase64 = exports.hash = exports.md5 = exports.ALPHABET_ALPHANUMERIC = exports.ALPHABET_ALPHANUMERIC_UPPERCASE = exports.ALPHABET_ALPHANUMERIC_LOWERCASE = exports.ALPHABET_UPPERCASE = void 0;
5
+ exports.hasColors = exports.readAjvSchemas = exports.readJsonSchemas = exports.AjvValidationError = exports.AjvSchema = exports.getAjv = exports.Ajv = exports._chunkBuffer = exports.TimeoutError = exports.HTTPError = exports.getGot = 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 = void 0;
6
6
  const ajv_1 = require("ajv");
7
7
  exports.Ajv = ajv_1.default;
8
8
  const got_1 = require("got");
@@ -46,6 +46,8 @@ Object.defineProperty(exports, "removeSecretsFromEnv", { enumerable: true, get:
46
46
  Object.defineProperty(exports, "secret", { enumerable: true, get: function () { return secret_util_1.secret; } });
47
47
  Object.defineProperty(exports, "secretOptional", { enumerable: true, get: function () { return secret_util_1.secretOptional; } });
48
48
  Object.defineProperty(exports, "setSecretMap", { enumerable: true, get: function () { return secret_util_1.setSecretMap; } });
49
+ const colors_1 = require("./colors/colors");
50
+ Object.defineProperty(exports, "hasColors", { enumerable: true, get: function () { return colors_1.hasColors; } });
49
51
  const slack_service_1 = require("./slack/slack.service");
50
52
  Object.defineProperty(exports, "slackDefaultMessagePrefixHook", { enumerable: true, get: function () { return slack_service_1.slackDefaultMessagePrefixHook; } });
51
53
  Object.defineProperty(exports, "SlackService", { enumerable: true, get: function () { return slack_service_1.SlackService; } });
@@ -158,6 +160,8 @@ Object.defineProperty(exports, "booleanDefaultToFalseSchema", { enumerable: true
158
160
  Object.defineProperty(exports, "booleanSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.booleanSchema; } });
159
161
  Object.defineProperty(exports, "dateStringSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.dateStringSchema; } });
160
162
  Object.defineProperty(exports, "emailSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.emailSchema; } });
163
+ Object.defineProperty(exports, "baseDBEntitySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.baseDBEntitySchema; } });
164
+ Object.defineProperty(exports, "savedDBEntitySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.savedDBEntitySchema; } });
161
165
  Object.defineProperty(exports, "idSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.idSchema; } });
162
166
  Object.defineProperty(exports, "integerSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.integerSchema; } });
163
167
  Object.defineProperty(exports, "ipAddressSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.ipAddressSchema; } });
@@ -6,8 +6,9 @@ const util_1 = require("util");
6
6
  const js_lib_1 = require("@naturalcycles/js-lib");
7
7
  const time_lib_1 = require("@naturalcycles/time-lib");
8
8
  const colors_1 = require("../../colors");
9
+ const colors_2 = require("../../colors/colors");
9
10
  const inspectOpt = {
10
- colors: true,
11
+ colors: (0, colors_2.hasColors)(),
11
12
  breakLength: 300,
12
13
  };
13
14
  /**
@@ -1,3 +1,4 @@
1
+ import { SavedDBEntity } from '@naturalcycles/js-lib';
1
2
  import { AlternativesSchemaTyped, AnySchemaTyped, ArraySchemaTyped, BooleanSchemaTyped, ObjectSchemaTyped, StringSchemaTyped } from './joi.model';
2
3
  export declare const booleanSchema: BooleanSchemaTyped;
3
4
  export declare const booleanDefaultToFalseSchema: BooleanSchemaTyped;
@@ -42,3 +43,5 @@ export declare const semVerSchema: import("./string.extensions").ExtendedStringS
42
43
  export declare const userAgentSchema: import("./string.extensions").ExtendedStringSchema;
43
44
  export declare const utcOffsetSchema: import("./number.extensions").ExtendedNumberSchema;
44
45
  export declare const ipAddressSchema: import("./string.extensions").ExtendedStringSchema;
46
+ export declare const baseDBEntitySchema: ObjectSchemaTyped<Partial<SavedDBEntity>, Partial<SavedDBEntity>>;
47
+ export declare const savedDBEntitySchema: ObjectSchemaTyped<SavedDBEntity, SavedDBEntity>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_PATTERN = exports.emailSchema = exports.verSchema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_PATTERN = exports.idSchema = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0;
3
+ exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_PATTERN = exports.emailSchema = exports.verSchema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_PATTERN = exports.idSchema = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0;
4
4
  const joi_extensions_1 = require("./joi.extensions");
5
5
  exports.booleanSchema = joi_extensions_1.Joi.boolean();
6
6
  exports.booleanDefaultToFalseSchema = joi_extensions_1.Joi.boolean().default(false);
@@ -65,3 +65,13 @@ exports.utcOffsetSchema = exports.numberSchema
65
65
  .max(14 * 60)
66
66
  .dividable(15);
67
67
  exports.ipAddressSchema = exports.stringSchema.ip();
68
+ exports.baseDBEntitySchema = objectSchema({
69
+ id: exports.stringSchema.optional(),
70
+ created: exports.unixTimestampSchema.optional(),
71
+ updated: exports.unixTimestampSchema.optional(),
72
+ });
73
+ exports.savedDBEntitySchema = objectSchema({
74
+ id: exports.stringSchema,
75
+ created: exports.unixTimestampSchema,
76
+ updated: exports.unixTimestampSchema,
77
+ });
@@ -14,6 +14,11 @@ export interface JoiValidationErrorData extends ErrorData {
14
14
  joiValidationErrorItems: ValidationErrorItem[];
15
15
  joiValidationObjectName?: string;
16
16
  joiValidationObjectId?: string;
17
+ /**
18
+ * Error "annotation" is stripped in Error.message.
19
+ * This field contains the "full" annotation.
20
+ */
21
+ annotation?: string;
17
22
  }
18
23
  export declare class JoiValidationError extends AppError<JoiValidationErrorData> {
19
24
  constructor(message: string, data: JoiValidationErrorData);
@@ -110,9 +110,9 @@ function createError(value, err, objectName) {
110
110
  tokens.push('Invalid ' + [objectName, objectId].filter(Boolean).join('.'));
111
111
  }
112
112
  const annotation = err.annotate(stripColors);
113
- if (annotation.length > 1000) {
113
+ if (annotation.length > 4000) {
114
114
  // Annotation message is too big and will be replaced by stringified `error.details` instead
115
- tokens.push(annotation.slice(0, 1000), `... ${Math.ceil(annotation.length / 1024)} KB message truncated`);
115
+ tokens.push((0, js_lib_1._truncateMiddle)(annotation, 4000, `\n... ${(0, js_lib_1._hb)(annotation.length)} message truncated ...\n`));
116
116
  // Up to 5 `details`
117
117
  tokens.push(...err.details.slice(0, 5).map(i => `${i.message} @ .${i.path.join('.')}`));
118
118
  if (err.details.length > 5)
@@ -126,5 +126,6 @@ function createError(value, err, objectName) {
126
126
  joiValidationErrorItems: err.details,
127
127
  ...(objectName && { joiValidationObjectName: objectName }),
128
128
  ...(objectId && { joiValidationObjectId: objectId }),
129
+ annotation,
129
130
  });
130
131
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/nodejs-lib",
3
- "version": "12.39.0",
3
+ "version": "12.43.0",
4
4
  "scripts": {
5
5
  "prepare": "husky install",
6
6
  "docs-serve": "vuepress dev docs",
@@ -36,6 +36,7 @@
36
36
  "lru-cache": "^6.0.0",
37
37
  "move-file": "^2.0.0",
38
38
  "nanoid": "^3.0.0",
39
+ "supports-color": "^8.0.0",
39
40
  "through2-concurrent": "^2.0.0",
40
41
  "yargs": "^17.0.0"
41
42
  },
@@ -0,0 +1,6 @@
1
+ const supporsColorLib = require('supports-color')
2
+
3
+ export function hasColors(): boolean {
4
+ if (process.env['NO_COLOR']) return false // https://no-color.org/
5
+ return !!supporsColorLib.stdout
6
+ }
package/src/index.ts CHANGED
@@ -36,6 +36,7 @@ import {
36
36
  secretOptional,
37
37
  setSecretMap,
38
38
  } from './security/secret.util'
39
+ import { hasColors } from './colors/colors'
39
40
  import { slackDefaultMessagePrefixHook, SlackService } from './slack/slack.service'
40
41
  import {
41
42
  SlackApiBody,
@@ -141,6 +142,8 @@ import {
141
142
  booleanSchema,
142
143
  dateStringSchema,
143
144
  emailSchema,
145
+ baseDBEntitySchema,
146
+ savedDBEntitySchema,
144
147
  idSchema,
145
148
  integerSchema,
146
149
  ipAddressSchema,
@@ -236,6 +239,8 @@ export {
236
239
  oneOfSchema,
237
240
  anySchema,
238
241
  anyObjectSchema,
242
+ baseDBEntitySchema,
243
+ savedDBEntitySchema,
239
244
  idSchema,
240
245
  unixTimestampSchema,
241
246
  verSchema,
@@ -337,4 +342,5 @@ export {
337
342
  AjvValidationError,
338
343
  readJsonSchemas,
339
344
  readAjvSchemas,
345
+ hasColors,
340
346
  }
@@ -3,6 +3,7 @@ import { inspect, InspectOptions } from 'util'
3
3
  import { SimpleMovingAverage, _mb, _since } from '@naturalcycles/js-lib'
4
4
  import { dayjs } from '@naturalcycles/time-lib'
5
5
  import { boldWhite, dimGrey, white, yellow } from '../../colors'
6
+ import { hasColors } from '../../colors/colors'
6
7
  import { TransformOptions, TransformTyped } from '../stream.model'
7
8
 
8
9
  export interface TransformLogProgressOptions<IN = any> extends TransformOptions {
@@ -94,7 +95,7 @@ export interface TransformLogProgressOptions<IN = any> extends TransformOptions
94
95
  }
95
96
 
96
97
  const inspectOpt: InspectOptions = {
97
- colors: true,
98
+ colors: hasColors(),
98
99
  breakLength: 300,
99
100
  }
100
101
 
@@ -1,3 +1,4 @@
1
+ import { BaseDBEntity, SavedDBEntity } from '@naturalcycles/js-lib'
1
2
  import { Joi } from './joi.extensions'
2
3
  import {
3
4
  AlternativesSchemaTyped,
@@ -87,3 +88,15 @@ export const utcOffsetSchema = numberSchema
87
88
  .dividable(15)
88
89
 
89
90
  export const ipAddressSchema = stringSchema.ip()
91
+
92
+ export const baseDBEntitySchema = objectSchema<BaseDBEntity>({
93
+ id: stringSchema.optional(),
94
+ created: unixTimestampSchema.optional(),
95
+ updated: unixTimestampSchema.optional(),
96
+ })
97
+
98
+ export const savedDBEntitySchema = objectSchema<SavedDBEntity>({
99
+ id: stringSchema,
100
+ created: unixTimestampSchema,
101
+ updated: unixTimestampSchema,
102
+ })
@@ -15,6 +15,11 @@ export interface JoiValidationErrorData extends ErrorData {
15
15
  joiValidationErrorItems: ValidationErrorItem[]
16
16
  joiValidationObjectName?: string
17
17
  joiValidationObjectId?: string
18
+ /**
19
+ * Error "annotation" is stripped in Error.message.
20
+ * This field contains the "full" annotation.
21
+ */
22
+ annotation?: string
18
23
  }
19
24
 
20
25
  export class JoiValidationError extends AppError<JoiValidationErrorData> {
@@ -6,7 +6,7 @@
6
6
  * "Converts" mean e.g trims all strings from leading/trailing spaces.
7
7
  */
8
8
 
9
- import { _isObject } from '@naturalcycles/js-lib'
9
+ import { _hb, _isObject, _truncateMiddle } from '@naturalcycles/js-lib'
10
10
  import { ValidationError, ValidationOptions } from 'joi'
11
11
  import { AnySchemaTyped } from './joi.model'
12
12
  import { JoiValidationError } from './joi.validation.error'
@@ -146,11 +146,11 @@ function createError(value: any, err: ValidationError, objectName?: string): Joi
146
146
 
147
147
  const annotation = err.annotate(stripColors)
148
148
 
149
- if (annotation.length > 1000) {
149
+ if (annotation.length > 4000) {
150
150
  // Annotation message is too big and will be replaced by stringified `error.details` instead
151
+
151
152
  tokens.push(
152
- annotation.slice(0, 1000),
153
- `... ${Math.ceil(annotation.length / 1024)} KB message truncated`,
153
+ _truncateMiddle(annotation, 4000, `\n... ${_hb(annotation.length)} message truncated ...\n`),
154
154
  )
155
155
 
156
156
  // Up to 5 `details`
@@ -167,5 +167,6 @@ function createError(value: any, err: ValidationError, objectName?: string): Joi
167
167
  joiValidationErrorItems: err.details,
168
168
  ...(objectName && { joiValidationObjectName: objectName }),
169
169
  ...(objectId && { joiValidationObjectId: objectId }),
170
+ annotation,
170
171
  })
171
172
  }