@naturalcycles/nodejs-lib 12.38.0 → 12.42.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 +28 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -3
- package/dist/validation/joi/joi.model.d.ts +1 -1
- package/dist/validation/joi/joi.shared.schemas.d.ts +5 -1
- package/dist/validation/joi/joi.shared.schemas.js +15 -1
- package/dist/validation/joi/joi.validation.error.d.ts +5 -0
- package/dist/validation/joi/joi.validation.util.js +3 -2
- package/package.json +1 -1
- package/src/index.ts +6 -0
- package/src/validation/joi/joi.model.ts +3 -1
- package/src/validation/joi/joi.shared.schemas.ts +20 -0
- package/src/validation/joi/joi.validation.error.ts +5 -0
- package/src/validation/joi/joi.validation.util.ts +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
# [12.42.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.41.0...v12.42.0) (2021-10-19)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* JoiValidationError to include full `annotation` ([c17756e](https://github.com/NaturalCycles/nodejs-lib/commit/c17756e1f8760987e62f6bee35f72fe7449b5671))
|
|
7
|
+
|
|
8
|
+
# [12.41.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.40.0...v12.41.0) (2021-10-18)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* increase joiError length from 1000 to 2000 characters ([1c40dce](https://github.com/NaturalCycles/nodejs-lib/commit/1c40dce8dadc46d63b84f46f4c67546bd703ac7e))
|
|
14
|
+
|
|
15
|
+
# [12.40.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.39.0...v12.40.0) (2021-10-15)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* export baseDBEntitySchema, savedDBEntitySchema ([f4644ad](https://github.com/NaturalCycles/nodejs-lib/commit/f4644ad25aed0021fad5b9091e9e10cec6884e53))
|
|
21
|
+
|
|
22
|
+
# [12.39.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.38.0...v12.39.0) (2021-10-11)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* **joi:** oneOfSchema ([8376400](https://github.com/NaturalCycles/nodejs-lib/commit/8376400aa384e2c88fc4e66f17cb0575eac63296))
|
|
28
|
+
|
|
1
29
|
# [12.38.0](https://github.com/NaturalCycles/nodejs-lib/compare/v12.37.0...v12.38.0) (2021-10-06)
|
|
2
30
|
|
|
3
31
|
|
package/dist/index.d.ts
CHANGED
|
@@ -59,8 +59,8 @@ import { AjvValidationError, AjvValidationErrorData } from './validation/ajv/ajv
|
|
|
59
59
|
import { getAjv } from './validation/ajv/getAjv';
|
|
60
60
|
import { ExtendedJoi, Joi } from './validation/joi/joi.extensions';
|
|
61
61
|
import { AnySchemaTyped, ArraySchemaTyped, BooleanSchemaTyped, NumberSchemaTyped, ObjectSchemaTyped, SchemaTyped, StringSchemaTyped } from './validation/joi/joi.model';
|
|
62
|
-
import { anyObjectSchema, anySchema, arraySchema, 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';
|
|
62
|
+
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
63
|
import { JoiValidationError, JoiValidationErrorData } from './validation/joi/joi.validation.error';
|
|
64
64
|
import { convert, getValidationResult, isValid, JoiValidationResult, undefinedIfInvalid, validate } from './validation/joi/joi.validation.util';
|
|
65
65
|
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, 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, };
|
|
66
|
+
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, };
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
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 = 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.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");
|
|
@@ -152,11 +152,14 @@ const joi_shared_schemas_1 = require("./validation/joi/joi.shared.schemas");
|
|
|
152
152
|
Object.defineProperty(exports, "anyObjectSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.anyObjectSchema; } });
|
|
153
153
|
Object.defineProperty(exports, "anySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.anySchema; } });
|
|
154
154
|
Object.defineProperty(exports, "arraySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.arraySchema; } });
|
|
155
|
+
Object.defineProperty(exports, "oneOfSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.oneOfSchema; } });
|
|
155
156
|
Object.defineProperty(exports, "binarySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.binarySchema; } });
|
|
156
157
|
Object.defineProperty(exports, "booleanDefaultToFalseSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.booleanDefaultToFalseSchema; } });
|
|
157
158
|
Object.defineProperty(exports, "booleanSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.booleanSchema; } });
|
|
158
159
|
Object.defineProperty(exports, "dateStringSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.dateStringSchema; } });
|
|
159
160
|
Object.defineProperty(exports, "emailSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.emailSchema; } });
|
|
161
|
+
Object.defineProperty(exports, "baseDBEntitySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.baseDBEntitySchema; } });
|
|
162
|
+
Object.defineProperty(exports, "savedDBEntitySchema", { enumerable: true, get: function () { return joi_shared_schemas_1.savedDBEntitySchema; } });
|
|
160
163
|
Object.defineProperty(exports, "idSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.idSchema; } });
|
|
161
164
|
Object.defineProperty(exports, "integerSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.integerSchema; } });
|
|
162
165
|
Object.defineProperty(exports, "ipAddressSchema", { enumerable: true, get: function () { return joi_shared_schemas_1.ipAddressSchema; } });
|
|
@@ -21,7 +21,7 @@ export interface FunctionSchemaTyped<T> extends FunctionSchema {
|
|
|
21
21
|
}
|
|
22
22
|
export interface NumberSchemaTyped extends NumberSchema, AnySchemaTyped<number> {
|
|
23
23
|
}
|
|
24
|
-
export interface ObjectSchemaTyped<IN, OUT = IN> extends ObjectSchema
|
|
24
|
+
export interface ObjectSchemaTyped<IN, OUT = IN> extends ObjectSchema<IN>, AnySchemaTyped<IN, OUT> {
|
|
25
25
|
}
|
|
26
26
|
export interface StringSchemaTyped extends StringSchema, AnySchemaTyped<string> {
|
|
27
27
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SavedDBEntity } from '@naturalcycles/js-lib';
|
|
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;
|
|
4
5
|
export declare const stringSchema: import("./string.extensions").ExtendedStringSchema;
|
|
@@ -12,6 +13,7 @@ export declare function arraySchema<T>(items?: AnySchemaTyped<T, T>): ArraySchem
|
|
|
12
13
|
export declare function objectSchema<IN, OUT = IN>(schema?: {
|
|
13
14
|
[key in keyof Partial<IN>]: AnySchemaTyped<IN[key]>;
|
|
14
15
|
}): ObjectSchemaTyped<IN, OUT>;
|
|
16
|
+
export declare function oneOfSchema<T = any>(...schemas: AnySchemaTyped<any>[]): AlternativesSchemaTyped<T>;
|
|
15
17
|
export declare const anySchema: import("joi").AnySchema;
|
|
16
18
|
export declare const anyObjectSchema: import("joi").ObjectSchema<any>;
|
|
17
19
|
/**
|
|
@@ -41,3 +43,5 @@ export declare const semVerSchema: import("./string.extensions").ExtendedStringS
|
|
|
41
43
|
export declare const userAgentSchema: import("./string.extensions").ExtendedStringSchema;
|
|
42
44
|
export declare const utcOffsetSchema: import("./number.extensions").ExtendedNumberSchema;
|
|
43
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.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);
|
|
@@ -20,6 +20,10 @@ function objectSchema(schema) {
|
|
|
20
20
|
return joi_extensions_1.Joi.object(schema);
|
|
21
21
|
}
|
|
22
22
|
exports.objectSchema = objectSchema;
|
|
23
|
+
function oneOfSchema(...schemas) {
|
|
24
|
+
return joi_extensions_1.Joi.alternatives(schemas);
|
|
25
|
+
}
|
|
26
|
+
exports.oneOfSchema = oneOfSchema;
|
|
23
27
|
exports.anySchema = joi_extensions_1.Joi.any();
|
|
24
28
|
exports.anyObjectSchema = joi_extensions_1.Joi.object().options({ stripUnknown: false });
|
|
25
29
|
// 1g498efj5sder3324zer
|
|
@@ -61,3 +65,13 @@ exports.utcOffsetSchema = exports.numberSchema
|
|
|
61
65
|
.max(14 * 60)
|
|
62
66
|
.dividable(15);
|
|
63
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 >
|
|
113
|
+
if (annotation.length > 4000) {
|
|
114
114
|
// Annotation message is too big and will be replaced by stringified `error.details` instead
|
|
115
|
-
tokens.push(
|
|
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
package/src/index.ts
CHANGED
|
@@ -135,11 +135,14 @@ import {
|
|
|
135
135
|
anyObjectSchema,
|
|
136
136
|
anySchema,
|
|
137
137
|
arraySchema,
|
|
138
|
+
oneOfSchema,
|
|
138
139
|
binarySchema,
|
|
139
140
|
booleanDefaultToFalseSchema,
|
|
140
141
|
booleanSchema,
|
|
141
142
|
dateStringSchema,
|
|
142
143
|
emailSchema,
|
|
144
|
+
baseDBEntitySchema,
|
|
145
|
+
savedDBEntitySchema,
|
|
143
146
|
idSchema,
|
|
144
147
|
integerSchema,
|
|
145
148
|
ipAddressSchema,
|
|
@@ -232,8 +235,11 @@ export {
|
|
|
232
235
|
arraySchema,
|
|
233
236
|
binarySchema,
|
|
234
237
|
objectSchema,
|
|
238
|
+
oneOfSchema,
|
|
235
239
|
anySchema,
|
|
236
240
|
anyObjectSchema,
|
|
241
|
+
baseDBEntitySchema,
|
|
242
|
+
savedDBEntitySchema,
|
|
237
243
|
idSchema,
|
|
238
244
|
unixTimestampSchema,
|
|
239
245
|
verSchema,
|
|
@@ -38,5 +38,7 @@ export interface BooleanSchemaTyped extends BooleanSchema, AnySchemaTyped<boolea
|
|
|
38
38
|
export interface DateSchemaTyped<T> extends DateSchema {}
|
|
39
39
|
export interface FunctionSchemaTyped<T> extends FunctionSchema {}
|
|
40
40
|
export interface NumberSchemaTyped extends NumberSchema, AnySchemaTyped<number> {}
|
|
41
|
-
export interface ObjectSchemaTyped<IN, OUT = IN>
|
|
41
|
+
export interface ObjectSchemaTyped<IN, OUT = IN>
|
|
42
|
+
extends ObjectSchema<IN>,
|
|
43
|
+
AnySchemaTyped<IN, OUT> {}
|
|
42
44
|
export interface StringSchemaTyped extends StringSchema, AnySchemaTyped<string> {}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { BaseDBEntity, SavedDBEntity } from '@naturalcycles/js-lib'
|
|
1
2
|
import { Joi } from './joi.extensions'
|
|
2
3
|
import {
|
|
4
|
+
AlternativesSchemaTyped,
|
|
3
5
|
AnySchemaTyped,
|
|
4
6
|
ArraySchemaTyped,
|
|
5
7
|
BooleanSchemaTyped,
|
|
@@ -29,6 +31,12 @@ export function objectSchema<IN, OUT = IN>(schema?: {
|
|
|
29
31
|
return Joi.object(schema)
|
|
30
32
|
}
|
|
31
33
|
|
|
34
|
+
export function oneOfSchema<T = any>(
|
|
35
|
+
...schemas: AnySchemaTyped<any>[]
|
|
36
|
+
): AlternativesSchemaTyped<T> {
|
|
37
|
+
return Joi.alternatives(schemas)
|
|
38
|
+
}
|
|
39
|
+
|
|
32
40
|
export const anySchema = Joi.any()
|
|
33
41
|
export const anyObjectSchema = Joi.object().options({ stripUnknown: false })
|
|
34
42
|
|
|
@@ -80,3 +88,15 @@ export const utcOffsetSchema = numberSchema
|
|
|
80
88
|
.dividable(15)
|
|
81
89
|
|
|
82
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 >
|
|
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
|
|
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
|
}
|