ejv 2.0.5 → 2.1.1

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 (49) hide show
  1. package/.mocharc.json +1 -1
  2. package/CHANGELOG.md +26 -0
  3. package/README-KR.md +166 -165
  4. package/README.md +182 -178
  5. package/build/cjs/constants.js +112 -107
  6. package/build/cjs/constants.js.map +1 -1
  7. package/build/cjs/ejv.js +245 -177
  8. package/build/cjs/ejv.js.map +1 -1
  9. package/build/cjs/index.js +6 -6
  10. package/build/cjs/index.js.map +1 -1
  11. package/build/cjs/interfaces.js.map +1 -1
  12. package/build/cjs/tester.js +12 -8
  13. package/build/cjs/tester.js.map +1 -1
  14. package/build/cjs/util.js.map +1 -1
  15. package/build/constants.d.ts +10 -5
  16. package/build/esm/constants.js +111 -106
  17. package/build/esm/constants.js.map +1 -1
  18. package/build/esm/ejv.js +247 -179
  19. package/build/esm/ejv.js.map +1 -1
  20. package/build/esm/index.js +1 -1
  21. package/build/esm/index.js.map +1 -1
  22. package/build/esm/interfaces.js.map +1 -1
  23. package/build/esm/tester.js +11 -8
  24. package/build/esm/tester.js.map +1 -1
  25. package/build/esm/util.js.map +1 -1
  26. package/build/index.d.ts +1 -1
  27. package/build/interfaces.d.ts +10 -9
  28. package/build/tester.d.ts +4 -3
  29. package/build/util.d.ts +2 -2
  30. package/eslint.config.mjs +59 -0
  31. package/package.json +17 -13
  32. package/spec/ArrayScheme.ts +46 -46
  33. package/spec/CommonScheme.ts +15 -15
  34. package/spec/DateScheme.ts +22 -22
  35. package/spec/NumberScheme.ts +229 -121
  36. package/spec/ObjectScheme.ts +22 -22
  37. package/spec/RegExpScheme.ts +5 -5
  38. package/spec/StringScheme.ts +223 -126
  39. package/spec/common-test-util.ts +2 -2
  40. package/spec/ejv.spec.ts +20 -20
  41. package/spec/testers.spec.ts +5 -5
  42. package/src/constants.ts +12 -5
  43. package/src/ejv.ts +291 -202
  44. package/src/index.ts +1 -1
  45. package/src/interfaces.ts +11 -12
  46. package/src/tester.ts +14 -10
  47. package/src/util.ts +2 -2
  48. package/tsconfig.json +2 -1
  49. package/.eslintrc.json +0 -88
package/src/ejv.ts CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  Scheme,
12
12
  StringScheme
13
13
  } from './interfaces';
14
- import { DataType, ErrorMsg, ErrorType, NumberFormat, StringFormat } from './constants';
14
+ import { DATA_TYPE, ERROR_MESSAGE, ERROR_TYPE, NUMBER_FORMAT, STRING_FORMAT } from './constants';
15
15
 
16
16
  import {
17
17
  arrayTester,
@@ -37,6 +37,7 @@ import {
37
37
  minDateTester,
38
38
  minLengthTester,
39
39
  minNumberTester,
40
+ notEnumTester,
40
41
  numberTester,
41
42
  objectTester,
42
43
  regExpTester,
@@ -49,13 +50,13 @@ import {
49
50
  import { clone, createErrorMsg, sift } from './util';
50
51
 
51
52
 
52
- function _getEffectiveTypes (scheme: Scheme): DataType[] | undefined {
53
- let result: DataType[] | undefined;
53
+ function _getEffectiveTypes (scheme: Scheme): DATA_TYPE[] | undefined {
54
+ let result: DATA_TYPE[] | undefined;
54
55
 
55
56
  if (definedTester(scheme.type)) {
56
57
  result = (arrayTester(scheme.type)
57
58
  ? scheme.type
58
- : [scheme.type]) as DataType[];
59
+ : [scheme.type]) as DATA_TYPE[];
59
60
  }
60
61
  else if (definedTester(scheme.parent)) {
61
62
  result = _getEffectiveTypes(scheme.parent);
@@ -68,8 +69,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
68
69
  // check schemes
69
70
  if (!definedTester(schemes) || schemes === null) {
70
71
  return new EjvError({
71
- type: ErrorType.NO_SCHEME,
72
- message: ErrorMsg.NO_SCHEME,
72
+ type: ERROR_TYPE.NO_SCHEME,
73
+ message: ERROR_MESSAGE.NO_SCHEME,
73
74
 
74
75
  data: data,
75
76
 
@@ -80,8 +81,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
80
81
 
81
82
  if (!arrayTester(schemes)) {
82
83
  return new EjvError({
83
- type: ErrorType.INVALID_SCHEMES,
84
- message: ErrorMsg.NO_ARRAY_SCHEME,
84
+ type: ERROR_TYPE.INVALID_SCHEMES,
85
+ message: ERROR_MESSAGE.NO_ARRAY_SCHEME,
85
86
 
86
87
  data: data,
87
88
 
@@ -90,10 +91,10 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
90
91
  });
91
92
  }
92
93
 
93
- if (!arrayTypeOfTester(schemes, DataType.OBJECT)) {
94
+ if (!arrayTypeOfTester(schemes, DATA_TYPE.OBJECT)) {
94
95
  return new EjvError({
95
- type: ErrorType.INVALID_SCHEMES,
96
- message: ErrorMsg.NO_OBJECT_ARRAY_SCHEME,
96
+ type: ERROR_TYPE.INVALID_SCHEMES,
97
+ message: ERROR_MESSAGE.NO_OBJECT_ARRAY_SCHEME,
97
98
 
98
99
  data: data,
99
100
 
@@ -104,8 +105,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
104
105
 
105
106
  if (!minLengthTester(schemes, 1)) {
106
107
  return new EjvError({
107
- type: ErrorType.INVALID_SCHEMES,
108
- message: ErrorMsg.EMPTY_SCHEME,
108
+ type: ERROR_TYPE.INVALID_SCHEMES,
109
+ message: ERROR_MESSAGE.EMPTY_SCHEME,
109
110
 
110
111
  data: data,
111
112
 
@@ -131,12 +132,12 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
131
132
  _options.path.push(key as string);
132
133
  }
133
134
 
134
- const types: DataType[] | undefined = _getEffectiveTypes(scheme);
135
+ const types: DATA_TYPE[] | undefined = _getEffectiveTypes(scheme);
135
136
 
136
137
  if (!definedTester(types)) {
137
138
  return new EjvError({
138
- type: ErrorType.INVALID_SCHEMES,
139
- message: ErrorMsg.SCHEMES_SHOULD_HAVE_TYPE,
139
+ type: ERROR_TYPE.INVALID_SCHEMES,
140
+ message: ERROR_MESSAGE.SCHEMES_SHOULD_HAVE_TYPE,
140
141
 
141
142
  data: data,
142
143
 
@@ -146,9 +147,9 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
146
147
  }
147
148
 
148
149
 
149
- const allDataType: DataType[] = Object.values(DataType);
150
+ const allDataType: DATA_TYPE[] = Object.values(DATA_TYPE);
150
151
 
151
- const typeError: string | undefined = types.find((type: DataType): boolean => {
152
+ const typeError: string | undefined = types.find((type: DATA_TYPE): boolean => {
152
153
  return !definedTester(type)
153
154
  || !stringTester(type)
154
155
  || !enumTester(type, allDataType);
@@ -156,8 +157,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
156
157
 
157
158
  if (typeError) {
158
159
  return new EjvError({
159
- type: ErrorType.INVALID_SCHEMES,
160
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_INVALID_TYPE, {
160
+ type: ERROR_TYPE.INVALID_SCHEMES,
161
+ message: createErrorMsg(ERROR_MESSAGE.SCHEMES_HAS_INVALID_TYPE, {
161
162
  placeholders: [typeError]
162
163
  }),
163
164
 
@@ -176,8 +177,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
176
177
  const notUniqueItemsSifted: string[] = sift(notUniqueItems);
177
178
 
178
179
  return new EjvError({
179
- type: ErrorType.INVALID_SCHEMES,
180
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_DUPLICATED_TYPE, {
180
+ type: ERROR_TYPE.INVALID_SCHEMES,
181
+ message: createErrorMsg(ERROR_MESSAGE.SCHEMES_HAS_DUPLICATED_TYPE, {
181
182
  placeholders: [notUniqueItemsSifted.join(', ')]
182
183
  }),
183
184
 
@@ -191,8 +192,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
191
192
  if (!definedTester(value)) {
192
193
  if (scheme.optional !== true) {
193
194
  result = new EjvError({
194
- type: ErrorType.REQUIRED,
195
- message: createErrorMsg(ErrorMsg.REQUIRED),
195
+ type: ERROR_TYPE.REQUIRED,
196
+ message: createErrorMsg(ERROR_MESSAGE.REQUIRED),
196
197
 
197
198
  data,
198
199
  path: _options.path,
@@ -210,8 +211,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
210
211
  if (value === null) {
211
212
  if (scheme.nullable !== true) {
212
213
  result = new EjvError({
213
- type: ErrorType.REQUIRED,
214
- message: createErrorMsg(ErrorMsg.REQUIRED),
214
+ type: ERROR_TYPE.REQUIRED,
215
+ message: createErrorMsg(ERROR_MESSAGE.REQUIRED),
215
216
 
216
217
  data,
217
218
  path: _options.path,
@@ -226,7 +227,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
226
227
  }
227
228
  }
228
229
 
229
- const typeResolved: DataType | undefined = types.find((type: DataType): type is DataType => {
230
+ const typeResolved: DATA_TYPE | undefined = types.find((type: DATA_TYPE): type is DATA_TYPE => {
230
231
  return typeTester(value, type);
231
232
  });
232
233
 
@@ -235,8 +236,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
235
236
  if (!arrayTester(scheme.type)) {
236
237
  if (scheme.type !== typeResolved) {
237
238
  result = new EjvError({
238
- type: ErrorType.TYPE_MISMATCH,
239
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
239
+ type: ERROR_TYPE.TYPE_MISMATCH,
240
+ message: createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH, {
240
241
  placeholders: [scheme.type]
241
242
  }),
242
243
 
@@ -251,8 +252,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
251
252
  else {
252
253
  if (!scheme.type.includes(typeResolved)) {
253
254
  result = new EjvError({
254
- type: ErrorType.TYPE_MISMATCH_ONE_OF,
255
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH_ONE_OF, {
255
+ type: ERROR_TYPE.TYPE_MISMATCH_ONE_OF,
256
+ message: createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH_ONE_OF, {
256
257
  placeholders: [JSON.stringify(scheme.type)]
257
258
  }),
258
259
 
@@ -273,8 +274,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
273
274
 
274
275
  if (!arrayTester(typesForMsg)) {
275
276
  result = new EjvError({
276
- type: ErrorType.TYPE_MISMATCH,
277
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
277
+ type: ERROR_TYPE.TYPE_MISMATCH,
278
+ message: createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH, {
278
279
  placeholders: [typesForMsg]
279
280
  }),
280
281
 
@@ -287,8 +288,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
287
288
  }
288
289
  else {
289
290
  result = new EjvError({
290
- type: ErrorType.TYPE_MISMATCH_ONE_OF,
291
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH_ONE_OF, {
291
+ type: ERROR_TYPE.TYPE_MISMATCH_ONE_OF,
292
+ message: createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH_ONE_OF, {
292
293
  placeholders: [JSON.stringify(typesForMsg)]
293
294
  }),
294
295
 
@@ -305,15 +306,15 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
305
306
 
306
307
  // additional check for type resolved
307
308
  switch (typeResolved) {
308
- case DataType.NUMBER: {
309
+ case DATA_TYPE.NUMBER: {
309
310
  const valueAsNumber: number = value as unknown as number;
310
311
  const numberScheme: NumberScheme = scheme as NumberScheme;
311
312
 
312
313
  if (definedTester(numberScheme.enum)) {
313
314
  if (!arrayTester(numberScheme.enum)) {
314
315
  return new EjvError({
315
- type: ErrorType.INVALID_SCHEMES,
316
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_ARRAY),
316
+ type: ERROR_TYPE.INVALID_SCHEMES,
317
+ message: createErrorMsg(ERROR_MESSAGE.ENUM_SHOULD_BE_ARRAY),
317
318
 
318
319
  data: data,
319
320
 
@@ -324,10 +325,10 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
324
325
 
325
326
  const enumArr: number[] = numberScheme.enum;
326
327
 
327
- if (!arrayTypeOfTester(enumArr, DataType.NUMBER)) {
328
+ if (!arrayTypeOfTester(enumArr, DATA_TYPE.NUMBER)) {
328
329
  return new EjvError({
329
- type: ErrorType.INVALID_SCHEMES,
330
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_NUMBERS),
330
+ type: ERROR_TYPE.INVALID_SCHEMES,
331
+ message: createErrorMsg(ERROR_MESSAGE.ENUM_SHOULD_BE_NUMBERS),
331
332
 
332
333
  data: data,
333
334
 
@@ -338,8 +339,52 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
338
339
 
339
340
  if (!enumTester(valueAsNumber, enumArr)) {
340
341
  result = new EjvError({
341
- type: ErrorType.ONE_VALUE_OF,
342
- message: createErrorMsg(ErrorMsg.ONE_VALUE_OF, {
342
+ type: ERROR_TYPE.ONE_VALUE_OF,
343
+ message: createErrorMsg(ERROR_MESSAGE.ONE_VALUE_OF, {
344
+ placeholders: [JSON.stringify(enumArr)]
345
+ }),
346
+
347
+ data,
348
+ path: _options.path,
349
+
350
+ errorScheme: numberScheme,
351
+ errorData: value
352
+ });
353
+ break;
354
+ }
355
+ }
356
+
357
+ if (definedTester(numberScheme.notEnum)) {
358
+ if (!arrayTester(numberScheme.notEnum)) {
359
+ return new EjvError({
360
+ type: ERROR_TYPE.INVALID_SCHEMES,
361
+ message: createErrorMsg(ERROR_MESSAGE.NOT_ENUM_SHOULD_BE_ARRAY),
362
+
363
+ data: data,
364
+
365
+ errorScheme: numberScheme,
366
+ isSchemeError: true
367
+ });
368
+ }
369
+
370
+ const enumArr: number[] = numberScheme.notEnum;
371
+
372
+ if (!arrayTypeOfTester(enumArr, DATA_TYPE.NUMBER)) {
373
+ return new EjvError({
374
+ type: ERROR_TYPE.INVALID_SCHEMES,
375
+ message: createErrorMsg(ERROR_MESSAGE.NOT_ENUM_SHOULD_BE_NUMBERS),
376
+
377
+ data: data,
378
+
379
+ errorScheme: numberScheme,
380
+ isSchemeError: true
381
+ });
382
+ }
383
+
384
+ if (!notEnumTester(valueAsNumber, enumArr)) {
385
+ result = new EjvError({
386
+ type: ERROR_TYPE.NOT_ONE_VALUE_OF,
387
+ message: createErrorMsg(ERROR_MESSAGE.NOT_ONE_VALUE_OF, {
343
388
  placeholders: [JSON.stringify(enumArr)]
344
389
  }),
345
390
 
@@ -363,8 +408,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
363
408
 
364
409
  if (!numberTester(effectiveMin)) {
365
410
  return new EjvError({
366
- type: ErrorType.INVALID_SCHEMES,
367
- message: createErrorMsg(ErrorMsg.MIN_SHOULD_BE_NUMBER),
411
+ type: ERROR_TYPE.INVALID_SCHEMES,
412
+ message: createErrorMsg(ERROR_MESSAGE.MIN_SHOULD_BE_NUMBER),
368
413
 
369
414
  data: data,
370
415
 
@@ -376,8 +421,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
376
421
  if (definedTester(numberScheme.exclusiveMin)) {
377
422
  if (!booleanTester(numberScheme.exclusiveMin)) {
378
423
  return new EjvError({
379
- type: ErrorType.INVALID_SCHEMES,
380
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
424
+ type: ERROR_TYPE.INVALID_SCHEMES,
425
+ message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
381
426
 
382
427
  data: data,
383
428
 
@@ -390,8 +435,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
390
435
  if (numberScheme.exclusiveMin) {
391
436
  if (!exclusiveMinNumberTester(valueAsNumber, effectiveMin)) {
392
437
  result = new EjvError({
393
- type: ErrorType.BIGGER_THAN,
394
- message: createErrorMsg(ErrorMsg.BIGGER_THAN, {
438
+ type: ERROR_TYPE.BIGGER_THAN,
439
+ message: createErrorMsg(ERROR_MESSAGE.BIGGER_THAN, {
395
440
  placeholders: [effectiveMin]
396
441
  }),
397
442
 
@@ -407,8 +452,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
407
452
  else {
408
453
  if (!minNumberTester(valueAsNumber, effectiveMin)) {
409
454
  result = new EjvError({
410
- type: ErrorType.BIGGER_THAN_OR_EQUAL,
411
- message: createErrorMsg(ErrorMsg.BIGGER_THAN_OR_EQUAL, {
455
+ type: ERROR_TYPE.BIGGER_THAN_OR_EQUAL,
456
+ message: createErrorMsg(ERROR_MESSAGE.BIGGER_THAN_OR_EQUAL, {
412
457
  placeholders: [effectiveMin]
413
458
  }),
414
459
 
@@ -431,8 +476,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
431
476
 
432
477
  if (!numberTester(effectiveMax)) {
433
478
  return new EjvError({
434
- type: ErrorType.INVALID_SCHEMES,
435
- message: createErrorMsg(ErrorMsg.MAX_SHOULD_BE_NUMBER),
479
+ type: ERROR_TYPE.INVALID_SCHEMES,
480
+ message: createErrorMsg(ERROR_MESSAGE.MAX_SHOULD_BE_NUMBER),
436
481
 
437
482
  data: data,
438
483
 
@@ -444,8 +489,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
444
489
  if (definedTester(numberScheme.exclusiveMax)) {
445
490
  if (!booleanTester(numberScheme.exclusiveMax)) {
446
491
  return new EjvError({
447
- type: ErrorType.INVALID_SCHEMES,
448
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
492
+ type: ERROR_TYPE.INVALID_SCHEMES,
493
+ message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
449
494
 
450
495
  data: data,
451
496
 
@@ -458,8 +503,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
458
503
  if (numberScheme.exclusiveMax) {
459
504
  if (!exclusiveMaxNumberTester(valueAsNumber, effectiveMax)) {
460
505
  result = new EjvError({
461
- type: ErrorType.SMALLER_THAN,
462
- message: createErrorMsg(ErrorMsg.SMALLER_THAN, {
506
+ type: ERROR_TYPE.SMALLER_THAN,
507
+ message: createErrorMsg(ERROR_MESSAGE.SMALLER_THAN, {
463
508
  placeholders: [effectiveMax]
464
509
  }),
465
510
 
@@ -475,8 +520,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
475
520
  else {
476
521
  if (!maxNumberTester(valueAsNumber, effectiveMax)) {
477
522
  result = new EjvError({
478
- type: ErrorType.SMALLER_THAN_OR_EQUAL,
479
- message: createErrorMsg(ErrorMsg.SMALLER_THAN_OR_EQUAL, {
523
+ type: ERROR_TYPE.SMALLER_THAN_OR_EQUAL,
524
+ message: createErrorMsg(ERROR_MESSAGE.SMALLER_THAN_OR_EQUAL, {
480
525
  placeholders: [effectiveMax]
481
526
  }),
482
527
 
@@ -492,17 +537,17 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
492
537
  }
493
538
 
494
539
  if (definedTester(numberScheme.format)) {
495
- let formats: NumberFormat[];
540
+ let formats: NUMBER_FORMAT[];
496
541
 
497
- const allNumberFormat: NumberFormat[] = Object.values(NumberFormat);
542
+ const allNumberFormat: NUMBER_FORMAT[] = Object.values(NUMBER_FORMAT);
498
543
 
499
544
  if (!arrayTester(numberScheme.format)) {
500
- const formatAsString: NumberFormat = numberScheme.format as NumberFormat;
545
+ const formatAsString: NUMBER_FORMAT = numberScheme.format as NUMBER_FORMAT;
501
546
 
502
547
  if (!enumTester(formatAsString, allNumberFormat)) {
503
548
  return new EjvError({
504
- type: ErrorType.INVALID_SCHEMES,
505
- message: createErrorMsg(ErrorMsg.INVALID_NUMBER_FORMAT, {
549
+ type: ERROR_TYPE.INVALID_SCHEMES,
550
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_NUMBER_FORMAT, {
506
551
  placeholders: [formatAsString]
507
552
  }),
508
553
 
@@ -513,19 +558,19 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
513
558
  });
514
559
  }
515
560
 
516
- formats = [numberScheme.format as NumberFormat];
561
+ formats = [numberScheme.format as NUMBER_FORMAT];
517
562
  }
518
563
  else {
519
- const formatAsArray: NumberFormat[] = numberScheme.format as NumberFormat[];
564
+ const formatAsArray: NUMBER_FORMAT[] = numberScheme.format as NUMBER_FORMAT[];
520
565
 
521
- const errorFormat: string | undefined = formatAsArray.find((format: NumberFormat): boolean => {
566
+ const errorFormat: string | undefined = formatAsArray.find((format: NUMBER_FORMAT): boolean => {
522
567
  return !enumTester(format, allNumberFormat);
523
568
  });
524
569
 
525
570
  if (errorFormat) {
526
571
  return new EjvError({
527
- type: ErrorType.INVALID_SCHEMES,
528
- message: createErrorMsg(ErrorMsg.INVALID_NUMBER_FORMAT, {
572
+ type: ERROR_TYPE.INVALID_SCHEMES,
573
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_NUMBER_FORMAT, {
529
574
  placeholders: [errorFormat]
530
575
  }),
531
576
 
@@ -536,18 +581,18 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
536
581
  });
537
582
  }
538
583
 
539
- formats = numberScheme.format as NumberFormat[];
584
+ formats = numberScheme.format as NUMBER_FORMAT[];
540
585
  }
541
586
 
542
- const someFormatIsWrong: boolean = formats.some((format: NumberFormat): boolean => {
587
+ const someFormatIsWrong: boolean = formats.some((format: NUMBER_FORMAT): boolean => {
543
588
  let valid: boolean = false;
544
589
 
545
590
  switch (format) {
546
- case NumberFormat.INTEGER:
591
+ case NUMBER_FORMAT.INTEGER:
547
592
  valid = integerTester(valueAsNumber);
548
593
  break;
549
594
 
550
- case NumberFormat.INDEX:
595
+ case NUMBER_FORMAT.INDEX:
551
596
  valid = indexTester(valueAsNumber);
552
597
  break;
553
598
  }
@@ -558,8 +603,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
558
603
  if (!someFormatIsWrong) {
559
604
  if (!arrayTester(numberScheme.format)) {
560
605
  result = new EjvError({
561
- type: ErrorType.FORMAT,
562
- message: createErrorMsg(ErrorMsg.FORMAT, {
606
+ type: ERROR_TYPE.FORMAT,
607
+ message: createErrorMsg(ERROR_MESSAGE.FORMAT, {
563
608
  placeholders: [numberScheme.format]
564
609
  }),
565
610
 
@@ -572,8 +617,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
572
617
  }
573
618
  else {
574
619
  result = new EjvError({
575
- type: ErrorType.FORMAT_ONE_OF,
576
- message: createErrorMsg(ErrorMsg.FORMAT_ONE_OF, {
620
+ type: ERROR_TYPE.FORMAT_ONE_OF,
621
+ message: createErrorMsg(ERROR_MESSAGE.FORMAT_ONE_OF, {
577
622
  placeholders: [JSON.stringify(numberScheme.format)]
578
623
  }),
579
624
 
@@ -590,15 +635,15 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
590
635
  break;
591
636
  }
592
637
 
593
- case DataType.STRING: {
638
+ case DATA_TYPE.STRING: {
594
639
  const valueAsString: string = value as unknown as string;
595
640
  const stringScheme: StringScheme = scheme as StringScheme;
596
641
 
597
642
  if (definedTester(stringScheme.enum)) {
598
643
  if (!arrayTester(stringScheme.enum)) {
599
644
  return new EjvError({
600
- type: ErrorType.INVALID_SCHEMES,
601
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_ARRAY),
645
+ type: ERROR_TYPE.INVALID_SCHEMES,
646
+ message: createErrorMsg(ERROR_MESSAGE.ENUM_SHOULD_BE_ARRAY),
602
647
 
603
648
  data: data,
604
649
 
@@ -609,10 +654,10 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
609
654
 
610
655
  const enumArr: string[] = stringScheme.enum;
611
656
 
612
- if (!arrayTypeOfTester(enumArr, DataType.STRING)) {
657
+ if (!arrayTypeOfTester(enumArr, DATA_TYPE.STRING)) {
613
658
  return new EjvError({
614
- type: ErrorType.INVALID_SCHEMES,
615
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_STRINGS),
659
+ type: ERROR_TYPE.INVALID_SCHEMES,
660
+ message: createErrorMsg(ERROR_MESSAGE.ENUM_SHOULD_BE_STRINGS),
616
661
 
617
662
  data: data,
618
663
 
@@ -623,8 +668,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
623
668
 
624
669
  if (!enumTester(valueAsString, enumArr)) {
625
670
  result = new EjvError({
626
- type: ErrorType.ONE_VALUE_OF,
627
- message: createErrorMsg(ErrorMsg.ONE_VALUE_OF, {
671
+ type: ERROR_TYPE.ONE_VALUE_OF,
672
+ message: createErrorMsg(ERROR_MESSAGE.ONE_VALUE_OF, {
628
673
  placeholders: [JSON.stringify(stringScheme.enum)]
629
674
  }),
630
675
 
@@ -638,13 +683,57 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
638
683
  }
639
684
  }
640
685
 
686
+ if (definedTester(stringScheme.notEnum)) {
687
+ if (!arrayTester(stringScheme.notEnum)) {
688
+ return new EjvError({
689
+ type: ERROR_TYPE.INVALID_SCHEMES,
690
+ message: createErrorMsg(ERROR_MESSAGE.NOT_ENUM_SHOULD_BE_ARRAY),
691
+
692
+ data: data,
693
+
694
+ errorScheme: stringScheme,
695
+ isSchemeError: true
696
+ });
697
+ }
698
+
699
+ const enumArr: string[] = stringScheme.notEnum;
700
+
701
+ if (!arrayTypeOfTester(enumArr, DATA_TYPE.STRING)) {
702
+ return new EjvError({
703
+ type: ERROR_TYPE.INVALID_SCHEMES,
704
+ message: createErrorMsg(ERROR_MESSAGE.NOT_ENUM_SHOULD_BE_STRINGS),
705
+
706
+ data: data,
707
+
708
+ errorScheme: stringScheme,
709
+ isSchemeError: true
710
+ });
711
+ }
712
+
713
+ if (!notEnumTester(valueAsString, enumArr)) {
714
+ result = new EjvError({
715
+ type: ERROR_TYPE.NOT_ONE_VALUE_OF,
716
+ message: createErrorMsg(ERROR_MESSAGE.NOT_ONE_VALUE_OF, {
717
+ placeholders: [JSON.stringify(stringScheme.notEnum)]
718
+ }),
719
+
720
+ data,
721
+ path: _options.path,
722
+
723
+ errorScheme: stringScheme,
724
+ errorData: value
725
+ });
726
+ break;
727
+ }
728
+ }
729
+
641
730
  if (definedTester(stringScheme.length)) {
642
731
  const length: number = stringScheme.length;
643
732
 
644
733
  if (!(numberTester(length) && integerTester(length))) {
645
734
  return new EjvError({
646
- type: ErrorType.INVALID_SCHEMES,
647
- message: createErrorMsg(ErrorMsg.LENGTH_SHOULD_BE_INTEGER),
735
+ type: ERROR_TYPE.INVALID_SCHEMES,
736
+ message: createErrorMsg(ERROR_MESSAGE.LENGTH_SHOULD_BE_INTEGER),
648
737
 
649
738
  data: data,
650
739
 
@@ -655,8 +744,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
655
744
 
656
745
  if (!lengthTester(valueAsString, length)) {
657
746
  result = new EjvError({
658
- type: ErrorType.LENGTH,
659
- message: createErrorMsg(ErrorMsg.LENGTH, {
747
+ type: ERROR_TYPE.LENGTH,
748
+ message: createErrorMsg(ERROR_MESSAGE.LENGTH, {
660
749
  placeholders: [length]
661
750
  }),
662
751
 
@@ -675,8 +764,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
675
764
 
676
765
  if (!(numberTester(minLength) && integerTester(minLength))) {
677
766
  return new EjvError({
678
- type: ErrorType.INVALID_SCHEMES,
679
- message: createErrorMsg(ErrorMsg.MIN_LENGTH_SHOULD_BE_INTEGER),
767
+ type: ERROR_TYPE.INVALID_SCHEMES,
768
+ message: createErrorMsg(ERROR_MESSAGE.MIN_LENGTH_SHOULD_BE_INTEGER),
680
769
 
681
770
  data: data,
682
771
 
@@ -687,8 +776,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
687
776
 
688
777
  if (!minLengthTester(valueAsString, minLength)) {
689
778
  result = new EjvError({
690
- type: ErrorType.MIN_LENGTH,
691
- message: createErrorMsg(ErrorMsg.MIN_LENGTH, {
779
+ type: ERROR_TYPE.MIN_LENGTH,
780
+ message: createErrorMsg(ERROR_MESSAGE.MIN_LENGTH, {
692
781
  placeholders: ['' + minLength]
693
782
  }),
694
783
 
@@ -707,8 +796,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
707
796
 
708
797
  if (!(numberTester(maxLength) && integerTester(maxLength))) {
709
798
  return new EjvError({
710
- type: ErrorType.INVALID_SCHEMES,
711
- message: createErrorMsg(ErrorMsg.MAX_LENGTH_SHOULD_BE_INTEGER),
799
+ type: ERROR_TYPE.INVALID_SCHEMES,
800
+ message: createErrorMsg(ERROR_MESSAGE.MAX_LENGTH_SHOULD_BE_INTEGER),
712
801
 
713
802
  data: data,
714
803
 
@@ -719,8 +808,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
719
808
 
720
809
  if (!maxLengthTester(valueAsString, maxLength)) {
721
810
  result = new EjvError({
722
- type: ErrorType.MAX_LENGTH,
723
- message: createErrorMsg(ErrorMsg.MAX_LENGTH, {
811
+ type: ERROR_TYPE.MAX_LENGTH,
812
+ message: createErrorMsg(ERROR_MESSAGE.MAX_LENGTH, {
724
813
  placeholders: ['' + maxLength]
725
814
  }),
726
815
 
@@ -735,17 +824,17 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
735
824
  }
736
825
 
737
826
  if (definedTester(stringScheme.format)) {
738
- let formats: StringFormat[];
827
+ let formats: STRING_FORMAT[];
739
828
 
740
- const allStringFormat: StringFormat[] = Object.values(StringFormat);
829
+ const allStringFormat: STRING_FORMAT[] = Object.values(STRING_FORMAT);
741
830
 
742
831
  if (!arrayTester(stringScheme.format)) {
743
832
  const formatAsString: string = stringScheme.format;
744
833
 
745
834
  if (!enumTester(formatAsString, allStringFormat)) {
746
835
  return new EjvError({
747
- type: ErrorType.INVALID_SCHEMES,
748
- message: createErrorMsg(ErrorMsg.INVALID_STRING_FORMAT, {
836
+ type: ERROR_TYPE.INVALID_SCHEMES,
837
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_STRING_FORMAT, {
749
838
  placeholders: [formatAsString]
750
839
  }),
751
840
 
@@ -756,7 +845,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
756
845
  });
757
846
  }
758
847
 
759
- formats = [stringScheme.format] as StringFormat[];
848
+ formats = [stringScheme.format] as STRING_FORMAT[];
760
849
  }
761
850
  else {
762
851
  const formatAsArray: string[] = stringScheme.format;
@@ -766,8 +855,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
766
855
 
767
856
  if (errorFormat) {
768
857
  return new EjvError({
769
- type: ErrorType.INVALID_SCHEMES,
770
- message: createErrorMsg(ErrorMsg.INVALID_STRING_FORMAT, {
858
+ type: ERROR_TYPE.INVALID_SCHEMES,
859
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_STRING_FORMAT, {
771
860
  placeholders: [errorFormat]
772
861
  }),
773
862
 
@@ -778,26 +867,26 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
778
867
  });
779
868
  }
780
869
 
781
- formats = stringScheme.format as StringFormat[];
870
+ formats = stringScheme.format as STRING_FORMAT[];
782
871
  }
783
872
 
784
- const foundFormatMatching: boolean = formats.some((format: StringFormat): boolean => {
873
+ const foundFormatMatching: boolean = formats.some((format: STRING_FORMAT): boolean => {
785
874
  let valid: boolean = false;
786
875
 
787
876
  switch (format) {
788
- case StringFormat.EMAIL:
877
+ case STRING_FORMAT.EMAIL:
789
878
  valid = emailTester(valueAsString);
790
879
  break;
791
880
 
792
- case StringFormat.DATE:
881
+ case STRING_FORMAT.DATE:
793
882
  valid = dateFormatTester(valueAsString);
794
883
  break;
795
884
 
796
- case StringFormat.TIME:
885
+ case STRING_FORMAT.TIME:
797
886
  valid = timeFormatTester(valueAsString);
798
887
  break;
799
888
 
800
- case StringFormat.DATE_TIME:
889
+ case STRING_FORMAT.DATE_TIME:
801
890
  valid = dateTimeFormatTester(valueAsString);
802
891
  break;
803
892
  }
@@ -808,9 +897,9 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
808
897
  if (!foundFormatMatching) {
809
898
  if (!arrayTester(stringScheme.format)) {
810
899
  result = new EjvError({
811
- type: ErrorType.FORMAT,
812
- message: createErrorMsg(ErrorMsg.FORMAT, {
813
- placeholders: [stringScheme.format as StringFormat]
900
+ type: ERROR_TYPE.FORMAT,
901
+ message: createErrorMsg(ERROR_MESSAGE.FORMAT, {
902
+ placeholders: [stringScheme.format as STRING_FORMAT]
814
903
  }),
815
904
 
816
905
  data,
@@ -822,8 +911,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
822
911
  }
823
912
  else {
824
913
  result = new EjvError({
825
- type: ErrorType.FORMAT_ONE_OF,
826
- message: createErrorMsg(ErrorMsg.FORMAT_ONE_OF, {
914
+ type: ERROR_TYPE.FORMAT_ONE_OF,
915
+ message: createErrorMsg(ERROR_MESSAGE.FORMAT_ONE_OF, {
827
916
  placeholders: [JSON.stringify(stringScheme.format)]
828
917
  }),
829
918
 
@@ -842,8 +931,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
842
931
  // check parameter
843
932
  if (stringScheme.pattern === null) {
844
933
  return new EjvError({
845
- type: ErrorType.INVALID_SCHEMES,
846
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
934
+ type: ERROR_TYPE.INVALID_SCHEMES,
935
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_STRING_PATTERN, {
847
936
  placeholders: ['null']
848
937
  }),
849
938
 
@@ -896,8 +985,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
896
985
 
897
986
  if (!minLengthTester(patternsAsArray, 1)) { // empty array
898
987
  return new EjvError({
899
- type: ErrorType.INVALID_SCHEMES,
900
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
988
+ type: ERROR_TYPE.INVALID_SCHEMES,
989
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_STRING_PATTERN, {
901
990
  placeholders: [createArrayErrorMsg(patternsAsArray)]
902
991
  }),
903
992
 
@@ -911,7 +1000,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
911
1000
  try {
912
1001
  const regExpPatterns: RegExp[] = patternsAsArray.map((pattern: string | RegExp): RegExp => {
913
1002
  if (!isValidPattern(pattern)) {
914
- throw new Error(createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
1003
+ throw new Error(createErrorMsg(ERROR_MESSAGE.INVALID_STRING_PATTERN, {
915
1004
  placeholders: [createArrayErrorMsg(patternsAsArray)]
916
1005
  }));
917
1006
  }
@@ -926,8 +1015,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
926
1015
 
927
1016
  if (!foundMatchPattern) {
928
1017
  result = new EjvError({
929
- type: ErrorType.PATTERN_ONE_OF,
930
- message: createErrorMsg(ErrorMsg.PATTERN_ONE_OF, {
1018
+ type: ERROR_TYPE.PATTERN_ONE_OF,
1019
+ message: createErrorMsg(ERROR_MESSAGE.PATTERN_ONE_OF, {
931
1020
  placeholders: [createArrayErrorMsg(patternsAsArray)]
932
1021
  }),
933
1022
 
@@ -940,10 +1029,10 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
940
1029
  break;
941
1030
  }
942
1031
  }
943
- catch (e: unknown) {
1032
+ catch (e: unknown) { // eslint-disable-line @typescript-eslint/no-unused-vars
944
1033
  return new EjvError({
945
- type: ErrorType.INVALID_SCHEMES,
946
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
1034
+ type: ERROR_TYPE.INVALID_SCHEMES,
1035
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_STRING_PATTERN, {
947
1036
  placeholders: [createArrayErrorMsg(patternsAsArray)]
948
1037
  }),
949
1038
 
@@ -959,8 +1048,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
959
1048
 
960
1049
  if (!isValidPattern(patternAsOne)) {
961
1050
  return new EjvError({
962
- type: ErrorType.INVALID_SCHEMES,
963
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
1051
+ type: ERROR_TYPE.INVALID_SCHEMES,
1052
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_STRING_PATTERN, {
964
1053
  placeholders: [patternToString(patternAsOne)]
965
1054
  }),
966
1055
 
@@ -976,8 +1065,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
976
1065
 
977
1066
  if (!stringRegExpTester(valueAsString, regExp)) {
978
1067
  result = new EjvError({
979
- type: ErrorType.PATTERN,
980
- message: createErrorMsg(ErrorMsg.PATTERN, {
1068
+ type: ERROR_TYPE.PATTERN,
1069
+ message: createErrorMsg(ERROR_MESSAGE.PATTERN, {
981
1070
  placeholders: [patternToString(patternAsOne)]
982
1071
  }),
983
1072
 
@@ -994,15 +1083,15 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
994
1083
  break;
995
1084
  }
996
1085
 
997
- case DataType.OBJECT: {
1086
+ case DATA_TYPE.OBJECT: {
998
1087
  const valueAsObject: AnyObject = value as unknown as AnyObject;
999
1088
  const objectScheme: ObjectScheme = scheme as ObjectScheme;
1000
1089
 
1001
1090
  if (definedTester(objectScheme.allowNoProperty)) {
1002
1091
  if (!booleanTester(objectScheme.allowNoProperty)) {
1003
1092
  return new EjvError({
1004
- type: ErrorType.INVALID_SCHEMES,
1005
- message: createErrorMsg(ErrorMsg.ALLOW_NO_PROPERTY_SHOULD_BE_BOOLEAN),
1093
+ type: ERROR_TYPE.INVALID_SCHEMES,
1094
+ message: createErrorMsg(ERROR_MESSAGE.ALLOW_NO_PROPERTY_SHOULD_BE_BOOLEAN),
1006
1095
 
1007
1096
  data: data,
1008
1097
 
@@ -1013,8 +1102,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1013
1102
 
1014
1103
  if (!objectScheme.allowNoProperty && !hasPropertyTester(valueAsObject)) {
1015
1104
  result = new EjvError({
1016
- type: ErrorType.PROPERTY,
1017
- message: ErrorMsg.PROPERTY,
1105
+ type: ERROR_TYPE.PROPERTY,
1106
+ message: ERROR_MESSAGE.PROPERTY,
1018
1107
 
1019
1108
  data,
1020
1109
  path: _options.path,
@@ -1029,8 +1118,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1029
1118
  if (definedTester(objectScheme.properties)) {
1030
1119
  if (!arrayTester(objectScheme.properties)) {
1031
1120
  return new EjvError({
1032
- type: ErrorType.INVALID_SCHEMES,
1033
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_BE_ARRAY),
1121
+ type: ERROR_TYPE.INVALID_SCHEMES,
1122
+ message: createErrorMsg(ERROR_MESSAGE.PROPERTIES_SHOULD_BE_ARRAY),
1034
1123
 
1035
1124
  data: data,
1036
1125
 
@@ -1043,8 +1132,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1043
1132
 
1044
1133
  if (!minLengthTester(properties, 1)) {
1045
1134
  return new EjvError({
1046
- type: ErrorType.INVALID_SCHEMES,
1047
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_HAVE_ITEMS),
1135
+ type: ERROR_TYPE.INVALID_SCHEMES,
1136
+ message: createErrorMsg(ERROR_MESSAGE.PROPERTIES_SHOULD_HAVE_ITEMS),
1048
1137
 
1049
1138
  data: data,
1050
1139
 
@@ -1053,10 +1142,10 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1053
1142
  });
1054
1143
  }
1055
1144
 
1056
- if (!arrayTypeOfTester(properties, DataType.OBJECT)) {
1145
+ if (!arrayTypeOfTester(properties, DATA_TYPE.OBJECT)) {
1057
1146
  return new EjvError({
1058
- type: ErrorType.INVALID_SCHEMES,
1059
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_BE_ARRAY_OF_OBJECT),
1147
+ type: ERROR_TYPE.INVALID_SCHEMES,
1148
+ message: createErrorMsg(ERROR_MESSAGE.PROPERTIES_SHOULD_BE_ARRAY_OF_OBJECT),
1060
1149
 
1061
1150
  data: data,
1062
1151
 
@@ -1067,8 +1156,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1067
1156
 
1068
1157
  if (!objectTester(value)) {
1069
1158
  result = new EjvError({
1070
- type: ErrorType.TYPE_MISMATCH,
1071
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
1159
+ type: ERROR_TYPE.TYPE_MISMATCH,
1160
+ message: createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH, {
1072
1161
  placeholders: ['object']
1073
1162
  }),
1074
1163
 
@@ -1096,7 +1185,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1096
1185
  break;
1097
1186
  }
1098
1187
 
1099
- case DataType.DATE: {
1188
+ case DATA_TYPE.DATE: {
1100
1189
  const valueAsDate: Date = value as unknown as Date;
1101
1190
  const dateScheme: DateScheme = scheme as DateScheme;
1102
1191
  const parentDateScheme: DateScheme | undefined = scheme.parent as DateScheme | undefined;
@@ -1115,8 +1204,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1115
1204
  || dateTester(minDateCandidate)
1116
1205
  )) {
1117
1206
  return new EjvError({
1118
- type: ErrorType.INVALID_SCHEMES,
1119
- message: createErrorMsg(ErrorMsg.MIN_DATE_SHOULD_BE_DATE_OR_STRING),
1207
+ type: ERROR_TYPE.INVALID_SCHEMES,
1208
+ message: createErrorMsg(ERROR_MESSAGE.MIN_DATE_SHOULD_BE_DATE_OR_STRING),
1120
1209
 
1121
1210
  data: data,
1122
1211
 
@@ -1130,8 +1219,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1130
1219
  if (definedTester(dateScheme.exclusiveMin)) {
1131
1220
  if (!booleanTester(dateScheme.exclusiveMin)) {
1132
1221
  return new EjvError({
1133
- type: ErrorType.INVALID_SCHEMES,
1134
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
1222
+ type: ERROR_TYPE.INVALID_SCHEMES,
1223
+ message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
1135
1224
 
1136
1225
  data: data,
1137
1226
 
@@ -1144,8 +1233,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1144
1233
  if (dateScheme.exclusiveMin) {
1145
1234
  if (!exclusiveMinDateTester(valueAsDate, effectiveMin)) {
1146
1235
  result = new EjvError({
1147
- type: ErrorType.AFTER_DATE,
1148
- message: createErrorMsg(ErrorMsg.AFTER_DATE, {
1236
+ type: ERROR_TYPE.AFTER_DATE,
1237
+ message: createErrorMsg(ERROR_MESSAGE.AFTER_DATE, {
1149
1238
  placeholders: [effectiveMin.toISOString()]
1150
1239
  }),
1151
1240
 
@@ -1162,8 +1251,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1162
1251
  else {
1163
1252
  if (!minDateTester(valueAsDate, effectiveMin)) {
1164
1253
  result = new EjvError({
1165
- type: ErrorType.AFTER_OR_SAME_DATE,
1166
- message: createErrorMsg(ErrorMsg.AFTER_OR_SAME_DATE, {
1254
+ type: ERROR_TYPE.AFTER_OR_SAME_DATE,
1255
+ message: createErrorMsg(ERROR_MESSAGE.AFTER_OR_SAME_DATE, {
1167
1256
  placeholders: [effectiveMin.toISOString()]
1168
1257
  }),
1169
1258
 
@@ -1182,8 +1271,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1182
1271
  else {
1183
1272
  if (!minDateTester(valueAsDate, effectiveMin)) {
1184
1273
  result = new EjvError({
1185
- type: ErrorType.AFTER_OR_SAME_DATE,
1186
- message: createErrorMsg(ErrorMsg.AFTER_OR_SAME_DATE, {
1274
+ type: ERROR_TYPE.AFTER_OR_SAME_DATE,
1275
+ message: createErrorMsg(ERROR_MESSAGE.AFTER_OR_SAME_DATE, {
1187
1276
  placeholders: [effectiveMin.toISOString()]
1188
1277
  }),
1189
1278
 
@@ -1212,8 +1301,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1212
1301
  || dateTester(maxDateCandidate)
1213
1302
  )) {
1214
1303
  return new EjvError({
1215
- type: ErrorType.INVALID_SCHEMES,
1216
- message: createErrorMsg(ErrorMsg.MAX_DATE_SHOULD_BE_DATE_OR_STRING),
1304
+ type: ERROR_TYPE.INVALID_SCHEMES,
1305
+ message: createErrorMsg(ERROR_MESSAGE.MAX_DATE_SHOULD_BE_DATE_OR_STRING),
1217
1306
 
1218
1307
  data: data,
1219
1308
 
@@ -1227,8 +1316,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1227
1316
  if (definedTester(dateScheme.exclusiveMax)) {
1228
1317
  if (!booleanTester(dateScheme.exclusiveMax)) {
1229
1318
  return new EjvError({
1230
- type: ErrorType.INVALID_SCHEMES,
1231
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
1319
+ type: ERROR_TYPE.INVALID_SCHEMES,
1320
+ message: createErrorMsg(ERROR_MESSAGE.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
1232
1321
 
1233
1322
  data: data,
1234
1323
 
@@ -1241,8 +1330,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1241
1330
  if (dateScheme.exclusiveMax) {
1242
1331
  if (!exclusiveMaxDateTester(valueAsDate, effectiveMax)) {
1243
1332
  result = new EjvError({
1244
- type: ErrorType.BEFORE_DATE,
1245
- message: createErrorMsg(ErrorMsg.BEFORE_DATE, {
1333
+ type: ERROR_TYPE.BEFORE_DATE,
1334
+ message: createErrorMsg(ERROR_MESSAGE.BEFORE_DATE, {
1246
1335
  placeholders: [effectiveMax.toISOString()]
1247
1336
  }),
1248
1337
 
@@ -1258,8 +1347,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1258
1347
  else {
1259
1348
  if (!maxDateTester(valueAsDate, effectiveMax)) {
1260
1349
  result = new EjvError({
1261
- type: ErrorType.BEFORE_OR_SAME_DATE,
1262
- message: createErrorMsg(ErrorMsg.BEFORE_OR_SAME_DATE, {
1350
+ type: ERROR_TYPE.BEFORE_OR_SAME_DATE,
1351
+ message: createErrorMsg(ERROR_MESSAGE.BEFORE_OR_SAME_DATE, {
1263
1352
  placeholders: [effectiveMax.toISOString()]
1264
1353
  }),
1265
1354
 
@@ -1276,7 +1365,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1276
1365
  break;
1277
1366
  }
1278
1367
 
1279
- case DataType.ARRAY: {
1368
+ case DATA_TYPE.ARRAY: {
1280
1369
  const valueAsArray: unknown[] = value as unknown as unknown[];
1281
1370
  const arrayScheme: ArrayScheme = scheme as ArrayScheme;
1282
1371
 
@@ -1285,8 +1374,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1285
1374
 
1286
1375
  if (!(numberTester(length) && integerTester(length))) {
1287
1376
  return new EjvError({
1288
- type: ErrorType.INVALID_SCHEMES,
1289
- message: createErrorMsg(ErrorMsg.LENGTH_SHOULD_BE_INTEGER),
1377
+ type: ERROR_TYPE.INVALID_SCHEMES,
1378
+ message: createErrorMsg(ERROR_MESSAGE.LENGTH_SHOULD_BE_INTEGER),
1290
1379
 
1291
1380
  data: data,
1292
1381
 
@@ -1297,8 +1386,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1297
1386
 
1298
1387
  if (!lengthTester(valueAsArray, length)) {
1299
1388
  result = new EjvError({
1300
- type: ErrorType.LENGTH,
1301
- message: createErrorMsg(ErrorMsg.LENGTH, {
1389
+ type: ERROR_TYPE.LENGTH,
1390
+ message: createErrorMsg(ERROR_MESSAGE.LENGTH, {
1302
1391
  placeholders: ['' + length]
1303
1392
  }),
1304
1393
 
@@ -1317,8 +1406,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1317
1406
 
1318
1407
  if (!(numberTester(arrayScheme.minLength) && integerTester(minLength))) {
1319
1408
  return new EjvError({
1320
- type: ErrorType.INVALID_SCHEMES,
1321
- message: createErrorMsg(ErrorMsg.MIN_LENGTH_SHOULD_BE_INTEGER),
1409
+ type: ERROR_TYPE.INVALID_SCHEMES,
1410
+ message: createErrorMsg(ERROR_MESSAGE.MIN_LENGTH_SHOULD_BE_INTEGER),
1322
1411
 
1323
1412
  data: data,
1324
1413
 
@@ -1329,8 +1418,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1329
1418
 
1330
1419
  if (!minLengthTester(valueAsArray, minLength)) {
1331
1420
  result = new EjvError({
1332
- type: ErrorType.MIN_LENGTH,
1333
- message: createErrorMsg(ErrorMsg.MIN_LENGTH, {
1421
+ type: ERROR_TYPE.MIN_LENGTH,
1422
+ message: createErrorMsg(ERROR_MESSAGE.MIN_LENGTH, {
1334
1423
  placeholders: ['' + minLength]
1335
1424
  }),
1336
1425
 
@@ -1349,8 +1438,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1349
1438
 
1350
1439
  if (!(numberTester(arrayScheme.maxLength) && integerTester(maxLength))) {
1351
1440
  return new EjvError({
1352
- type: ErrorType.INVALID_SCHEMES,
1353
- message: createErrorMsg(ErrorMsg.MAX_LENGTH_SHOULD_BE_INTEGER),
1441
+ type: ERROR_TYPE.INVALID_SCHEMES,
1442
+ message: createErrorMsg(ERROR_MESSAGE.MAX_LENGTH_SHOULD_BE_INTEGER),
1354
1443
 
1355
1444
  data: data,
1356
1445
 
@@ -1361,8 +1450,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1361
1450
 
1362
1451
  if (!maxLengthTester(valueAsArray, maxLength)) {
1363
1452
  result = new EjvError({
1364
- type: ErrorType.MAX_LENGTH,
1365
- message: createErrorMsg(ErrorMsg.MAX_LENGTH, {
1453
+ type: ERROR_TYPE.MAX_LENGTH,
1454
+ message: createErrorMsg(ERROR_MESSAGE.MAX_LENGTH, {
1366
1455
  placeholders: ['' + maxLength]
1367
1456
  }),
1368
1457
 
@@ -1379,8 +1468,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1379
1468
  if (definedTester(arrayScheme.unique)) {
1380
1469
  if (!booleanTester(arrayScheme.unique)) {
1381
1470
  return new EjvError({
1382
- type: ErrorType.INVALID_SCHEMES,
1383
- message: createErrorMsg(ErrorMsg.UNIQUE_SHOULD_BE_BOOLEAN),
1471
+ type: ERROR_TYPE.INVALID_SCHEMES,
1472
+ message: createErrorMsg(ERROR_MESSAGE.UNIQUE_SHOULD_BE_BOOLEAN),
1384
1473
 
1385
1474
  data: data,
1386
1475
 
@@ -1391,8 +1480,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1391
1480
 
1392
1481
  if (arrayScheme.unique && !uniqueItemsTester(valueAsArray)) {
1393
1482
  result = new EjvError({
1394
- type: ErrorType.UNIQUE_ITEMS,
1395
- message: ErrorMsg.UNIQUE_ITEMS,
1483
+ type: ERROR_TYPE.UNIQUE_ITEMS,
1484
+ message: ERROR_MESSAGE.UNIQUE_ITEMS,
1396
1485
 
1397
1486
  data,
1398
1487
  path: _options.path,
@@ -1413,13 +1502,13 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1413
1502
  });
1414
1503
 
1415
1504
  if (stringTester(arrayScheme.items) // by DataType
1416
- || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items as DataType[], DataType.STRING)) // by DataType[]
1505
+ || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items as DATA_TYPE[], DATA_TYPE.STRING)) // by DataType[]
1417
1506
  ) {
1418
- const itemTypes: DataType[] = (arrayTester(arrayScheme.items)
1507
+ const itemTypes: DATA_TYPE[] = (arrayTester(arrayScheme.items)
1419
1508
  ? arrayScheme.items
1420
- : [arrayScheme.items]) as DataType[];
1509
+ : [arrayScheme.items]) as DATA_TYPE[];
1421
1510
 
1422
- const itemTypeError: string | undefined = itemTypes.find((type: DataType): boolean => {
1511
+ const itemTypeError: string | undefined = itemTypes.find((type: DATA_TYPE): boolean => {
1423
1512
  return !definedTester(type)
1424
1513
  || !stringTester(type)
1425
1514
  || !enumTester(type, allDataType);
@@ -1427,8 +1516,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1427
1516
 
1428
1517
  if (itemTypeError) {
1429
1518
  return new EjvError({
1430
- type: ErrorType.INVALID_SCHEMES,
1431
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_INVALID_TYPE, {
1519
+ type: ERROR_TYPE.INVALID_SCHEMES,
1520
+ message: createErrorMsg(ERROR_MESSAGE.SCHEMES_HAS_INVALID_TYPE, {
1432
1521
  placeholders: [itemTypeError]
1433
1522
  }),
1434
1523
 
@@ -1461,12 +1550,12 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1461
1550
  let errorMsg: string;
1462
1551
 
1463
1552
  if (arrayTester(arrayScheme.items)) {
1464
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_TYPE, {
1553
+ errorMsg = createErrorMsg(ERROR_MESSAGE.ITEMS_TYPE, {
1465
1554
  placeholders: [JSON.stringify(itemTypes)]
1466
1555
  });
1467
1556
  }
1468
1557
  else {
1469
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_TYPE, {
1558
+ errorMsg = createErrorMsg(ERROR_MESSAGE.ITEMS_TYPE, {
1470
1559
  placeholders: [arrayScheme.items as string]
1471
1560
  });
1472
1561
  }
@@ -1481,7 +1570,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1481
1570
  const partialKeyIndex: number = partialSchemes.indexOf(partialScheme);
1482
1571
 
1483
1572
  result = new EjvError({
1484
- type: ErrorType.ITEMS_TYPE,
1573
+ type: ERROR_TYPE.ITEMS_TYPE,
1485
1574
  message: errorMsg,
1486
1575
 
1487
1576
  data,
@@ -1494,7 +1583,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1494
1583
  break;
1495
1584
  }
1496
1585
  else if ((objectTester(arrayScheme.items) && arrayScheme.items !== null) // by Scheme
1497
- || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items as Scheme[], DataType.OBJECT)) // by Scheme[]
1586
+ || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items as Scheme[], DATA_TYPE.OBJECT)) // by Scheme[]
1498
1587
  ) {
1499
1588
  const itemsAsSchemes: Scheme[] = arrayTester(arrayScheme.items)
1500
1589
  ? arrayScheme.items
@@ -1543,12 +1632,12 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1543
1632
  }
1544
1633
 
1545
1634
  if (partialError) {
1546
- let errorType: ErrorType;
1635
+ let errorType: ERROR_TYPE;
1547
1636
  let errorMsg: string;
1548
1637
 
1549
1638
  if (!!itemsAsSchemes && itemsAsSchemes.length > 1) {
1550
- errorType = ErrorType.ITEMS_SCHEMES;
1551
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_SCHEMES, {
1639
+ errorType = ERROR_TYPE.ITEMS_SCHEMES;
1640
+ errorMsg = createErrorMsg(ERROR_MESSAGE.ITEMS_SCHEMES, {
1552
1641
  placeholders: [JSON.stringify(itemsAsSchemes)]
1553
1642
  });
1554
1643
  }
@@ -1556,10 +1645,10 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1556
1645
  errorType = partialError.type;
1557
1646
  errorMsg = partialError.message;
1558
1647
 
1559
- if (errorType === ErrorType.REQUIRED) {
1648
+ if (errorType === ERROR_TYPE.REQUIRED) {
1560
1649
  // REQUIRED in array is TYPE_MISMATCH except with nullable === true
1561
- errorType = ErrorType.TYPE_MISMATCH;
1562
- errorMsg = createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
1650
+ errorType = ERROR_TYPE.TYPE_MISMATCH;
1651
+ errorMsg = createErrorMsg(ERROR_MESSAGE.TYPE_MISMATCH, {
1563
1652
  placeholders: [JSON.stringify(arrayScheme.items)]
1564
1653
  });
1565
1654
  }
@@ -1572,7 +1661,7 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1572
1661
  data
1573
1662
  });
1574
1663
 
1575
- if (errorType === ErrorType.INVALID_SCHEMES) {
1664
+ if (errorType === ERROR_TYPE.INVALID_SCHEMES) {
1576
1665
  result.errorScheme = arrayScheme;
1577
1666
  result.isSchemeError = true;
1578
1667
  result.isDataError = false;
@@ -1586,8 +1675,8 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1586
1675
  }
1587
1676
  else {
1588
1677
  return new EjvError({
1589
- type: ErrorType.INVALID_SCHEMES,
1590
- message: createErrorMsg(ErrorMsg.INVALID_ITEMS_SCHEME, {
1678
+ type: ERROR_TYPE.INVALID_SCHEMES,
1679
+ message: createErrorMsg(ERROR_MESSAGE.INVALID_ITEMS_SCHEME, {
1591
1680
  placeholders: [JSON.stringify(arrayScheme.items)]
1592
1681
  }),
1593
1682
 
@@ -1610,9 +1699,9 @@ const _ejv = <T> (data: T, schemes: Scheme[], options: InternalOptions): null |
1610
1699
 
1611
1700
  if (result !== null && definedTester(options.customErrorMsg)) {
1612
1701
  const customErrorMsgObj: {
1613
- [key in ErrorType]?: string;
1702
+ [key in ERROR_TYPE]?: string;
1614
1703
  } = options.customErrorMsg as {
1615
- [key in ErrorType]?: string;
1704
+ [key in ERROR_TYPE]?: string;
1616
1705
  };
1617
1706
 
1618
1707
  // override error message
@@ -1630,8 +1719,8 @@ export const ejv = (data: object, schemes: Scheme[], options?: Options): null |
1630
1719
  // check data itself
1631
1720
  if (!definedTester(data) || !objectTester(data) || data === null) {
1632
1721
  return new EjvError({
1633
- type: ErrorType.NO_DATA,
1634
- message: ErrorMsg.NO_DATA,
1722
+ type: ERROR_TYPE.NO_DATA,
1723
+ message: ERROR_MESSAGE.NO_DATA,
1635
1724
 
1636
1725
  data: data,
1637
1726
  path: undefined,