ejv 2.0.5 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.mocharc.json +1 -1
  2. package/CHANGELOG.md +18 -0
  3. package/README-KR.md +166 -165
  4. package/README.md +182 -178
  5. package/eslint.config.mjs +59 -0
  6. package/package.json +18 -13
  7. package/spec/ArrayScheme.ts +46 -46
  8. package/spec/CommonScheme.ts +15 -15
  9. package/spec/DateScheme.ts +22 -22
  10. package/spec/NumberScheme.ts +229 -121
  11. package/spec/ObjectScheme.ts +22 -22
  12. package/spec/RegExpScheme.ts +5 -5
  13. package/spec/StringScheme.ts +223 -126
  14. package/spec/common-test-util.ts +2 -2
  15. package/spec/ejv.spec.ts +20 -20
  16. package/spec/testers.spec.ts +5 -5
  17. package/src/constants.ts +12 -5
  18. package/src/ejv.ts +291 -202
  19. package/src/index.ts +1 -1
  20. package/src/interfaces.ts +11 -12
  21. package/src/tester.ts +14 -10
  22. package/src/util.ts +2 -2
  23. package/.eslintrc.json +0 -88
  24. package/build/cjs/constants.js +0 -118
  25. package/build/cjs/constants.js.map +0 -1
  26. package/build/cjs/ejv.js +0 -1270
  27. package/build/cjs/ejv.js.map +0 -1
  28. package/build/cjs/index.js +0 -14
  29. package/build/cjs/index.js.map +0 -1
  30. package/build/cjs/interfaces.js +0 -29
  31. package/build/cjs/interfaces.js.map +0 -1
  32. package/build/cjs/package.json +0 -1
  33. package/build/cjs/tester.js +0 -274
  34. package/build/cjs/tester.js.map +0 -1
  35. package/build/cjs/util.js +0 -103
  36. package/build/cjs/util.js.map +0 -1
  37. package/build/constants.d.ts +0 -101
  38. package/build/ejv.d.ts +0 -2
  39. package/build/esm/constants.js +0 -115
  40. package/build/esm/constants.js.map +0 -1
  41. package/build/esm/ejv.js +0 -1268
  42. package/build/esm/ejv.js.map +0 -1
  43. package/build/esm/index.js +0 -4
  44. package/build/esm/index.js.map +0 -1
  45. package/build/esm/interfaces.js +0 -33
  46. package/build/esm/interfaces.js.map +0 -1
  47. package/build/esm/package.json +0 -1
  48. package/build/esm/tester.js +0 -240
  49. package/build/esm/tester.js.map +0 -1
  50. package/build/esm/util.js +0 -96
  51. package/build/esm/util.js.map +0 -1
  52. package/build/index.d.ts +0 -3
  53. package/build/interfaces.d.ts +0 -76
  54. package/build/scripts/add-js-extensions.js +0 -46
  55. package/build/scripts/add-js-extensions.js.map +0 -1
  56. package/build/tester.d.ts +0 -33
  57. package/build/util.d.ts +0 -7
package/build/esm/ejv.js DELETED
@@ -1,1268 +0,0 @@
1
- import { EjvError } from './interfaces.js';
2
- import { DataType, ErrorMsg, ErrorType, NumberFormat, StringFormat } from './constants.js';
3
- import { arrayTester, arrayTypeOfTester, booleanTester, dateFormatTester, dateTester, dateTimeFormatTester, definedTester, emailTester, enumTester, exclusiveMaxDateTester, exclusiveMaxNumberTester, exclusiveMinDateTester, exclusiveMinNumberTester, hasPropertyTester, indexTester, integerTester, lengthTester, maxDateTester, maxLengthTester, maxNumberTester, minDateTester, minLengthTester, minNumberTester, numberTester, objectTester, regExpTester, stringRegExpTester, stringTester, timeFormatTester, typeTester, uniqueItemsTester } from './tester.js';
4
- import { clone, createErrorMsg, sift } from './util.js';
5
- function _getEffectiveTypes(scheme) {
6
- let result;
7
- if (definedTester(scheme.type)) {
8
- result = (arrayTester(scheme.type)
9
- ? scheme.type
10
- : [scheme.type]);
11
- }
12
- else if (definedTester(scheme.parent)) {
13
- result = _getEffectiveTypes(scheme.parent);
14
- }
15
- return result;
16
- }
17
- const _ejv = (data, schemes, options) => {
18
- // check schemes
19
- if (!definedTester(schemes) || schemes === null) {
20
- return new EjvError({
21
- type: ErrorType.NO_SCHEME,
22
- message: ErrorMsg.NO_SCHEME,
23
- data: data,
24
- errorScheme: schemes,
25
- isSchemeError: true
26
- });
27
- }
28
- if (!arrayTester(schemes)) {
29
- return new EjvError({
30
- type: ErrorType.INVALID_SCHEMES,
31
- message: ErrorMsg.NO_ARRAY_SCHEME,
32
- data: data,
33
- errorScheme: schemes,
34
- isSchemeError: true
35
- });
36
- }
37
- if (!arrayTypeOfTester(schemes, DataType.OBJECT)) {
38
- return new EjvError({
39
- type: ErrorType.INVALID_SCHEMES,
40
- message: ErrorMsg.NO_OBJECT_ARRAY_SCHEME,
41
- data: data,
42
- errorScheme: schemes,
43
- isSchemeError: true
44
- });
45
- }
46
- if (!minLengthTester(schemes, 1)) {
47
- return new EjvError({
48
- type: ErrorType.INVALID_SCHEMES,
49
- message: ErrorMsg.EMPTY_SCHEME,
50
- data: data,
51
- errorScheme: schemes,
52
- isSchemeError: true
53
- });
54
- }
55
- // check data by schemes
56
- let result = null;
57
- // use for() instead of forEach() to stop
58
- for (const scheme of schemes) {
59
- const key = scheme.key;
60
- const _options = clone(options); // divide instance
61
- let value;
62
- if (key) {
63
- value = data[key];
64
- _options.path.push(key);
65
- }
66
- const types = _getEffectiveTypes(scheme);
67
- if (!definedTester(types)) {
68
- return new EjvError({
69
- type: ErrorType.INVALID_SCHEMES,
70
- message: ErrorMsg.SCHEMES_SHOULD_HAVE_TYPE,
71
- data: data,
72
- errorScheme: scheme,
73
- isSchemeError: true
74
- });
75
- }
76
- const allDataType = Object.values(DataType);
77
- const typeError = types.find((type) => {
78
- return !definedTester(type)
79
- || !stringTester(type)
80
- || !enumTester(type, allDataType);
81
- });
82
- if (typeError) {
83
- return new EjvError({
84
- type: ErrorType.INVALID_SCHEMES,
85
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_INVALID_TYPE, {
86
- placeholders: [typeError]
87
- }),
88
- data: data,
89
- errorScheme: scheme,
90
- isSchemeError: true
91
- });
92
- }
93
- if (!uniqueItemsTester(types)) {
94
- const notUniqueItems = types.filter((type) => {
95
- return types.filter((_type) => _type === type).length > 1;
96
- });
97
- const notUniqueItemsSifted = sift(notUniqueItems);
98
- return new EjvError({
99
- type: ErrorType.INVALID_SCHEMES,
100
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_DUPLICATED_TYPE, {
101
- placeholders: [notUniqueItemsSifted.join(', ')]
102
- }),
103
- data: data,
104
- errorScheme: scheme,
105
- isSchemeError: true
106
- });
107
- }
108
- if (!definedTester(value)) {
109
- if (scheme.optional !== true) {
110
- result = new EjvError({
111
- type: ErrorType.REQUIRED,
112
- message: createErrorMsg(ErrorMsg.REQUIRED),
113
- data,
114
- path: _options.path,
115
- errorScheme: scheme,
116
- errorData: value
117
- });
118
- break;
119
- }
120
- else {
121
- continue;
122
- }
123
- }
124
- if (value === null) {
125
- if (scheme.nullable !== true) {
126
- result = new EjvError({
127
- type: ErrorType.REQUIRED,
128
- message: createErrorMsg(ErrorMsg.REQUIRED),
129
- data,
130
- path: _options.path,
131
- errorScheme: scheme,
132
- errorData: value
133
- });
134
- break;
135
- }
136
- else {
137
- continue;
138
- }
139
- }
140
- const typeResolved = types.find((type) => {
141
- return typeTester(value, type);
142
- });
143
- if (typeResolved) {
144
- if (definedTester(scheme.type)) {
145
- if (!arrayTester(scheme.type)) {
146
- if (scheme.type !== typeResolved) {
147
- result = new EjvError({
148
- type: ErrorType.TYPE_MISMATCH,
149
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
150
- placeholders: [scheme.type]
151
- }),
152
- data,
153
- path: _options.path,
154
- errorScheme: scheme,
155
- errorData: value
156
- });
157
- }
158
- }
159
- else {
160
- if (!scheme.type.includes(typeResolved)) {
161
- result = new EjvError({
162
- type: ErrorType.TYPE_MISMATCH_ONE_OF,
163
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH_ONE_OF, {
164
- placeholders: [JSON.stringify(scheme.type)]
165
- }),
166
- data,
167
- path: _options.path,
168
- errorScheme: scheme,
169
- errorData: value
170
- });
171
- }
172
- }
173
- }
174
- // else do additional validation
175
- }
176
- else {
177
- // type is not resolved
178
- const typesForMsg = scheme.type || scheme.parent?.type;
179
- if (!arrayTester(typesForMsg)) {
180
- result = new EjvError({
181
- type: ErrorType.TYPE_MISMATCH,
182
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
183
- placeholders: [typesForMsg]
184
- }),
185
- data,
186
- path: _options.path,
187
- errorScheme: scheme,
188
- errorData: value
189
- });
190
- }
191
- else {
192
- result = new EjvError({
193
- type: ErrorType.TYPE_MISMATCH_ONE_OF,
194
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH_ONE_OF, {
195
- placeholders: [JSON.stringify(typesForMsg)]
196
- }),
197
- data,
198
- path: _options.path,
199
- errorScheme: scheme,
200
- errorData: value
201
- });
202
- }
203
- break;
204
- }
205
- // additional check for type resolved
206
- switch (typeResolved) {
207
- case DataType.NUMBER: {
208
- const valueAsNumber = value;
209
- const numberScheme = scheme;
210
- if (definedTester(numberScheme.enum)) {
211
- if (!arrayTester(numberScheme.enum)) {
212
- return new EjvError({
213
- type: ErrorType.INVALID_SCHEMES,
214
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_ARRAY),
215
- data: data,
216
- errorScheme: numberScheme,
217
- isSchemeError: true
218
- });
219
- }
220
- const enumArr = numberScheme.enum;
221
- if (!arrayTypeOfTester(enumArr, DataType.NUMBER)) {
222
- return new EjvError({
223
- type: ErrorType.INVALID_SCHEMES,
224
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_NUMBERS),
225
- data: data,
226
- errorScheme: numberScheme,
227
- isSchemeError: true
228
- });
229
- }
230
- if (!enumTester(valueAsNumber, enumArr)) {
231
- result = new EjvError({
232
- type: ErrorType.ONE_VALUE_OF,
233
- message: createErrorMsg(ErrorMsg.ONE_VALUE_OF, {
234
- placeholders: [JSON.stringify(enumArr)]
235
- }),
236
- data,
237
- path: _options.path,
238
- errorScheme: numberScheme,
239
- errorData: value
240
- });
241
- break;
242
- }
243
- }
244
- if (definedTester(numberScheme.min)
245
- || definedTester(scheme.parent?.min)) {
246
- const effectiveMin = definedTester(numberScheme.min)
247
- ? numberScheme.min
248
- : scheme.parent?.min;
249
- if (!numberTester(effectiveMin)) {
250
- return new EjvError({
251
- type: ErrorType.INVALID_SCHEMES,
252
- message: createErrorMsg(ErrorMsg.MIN_SHOULD_BE_NUMBER),
253
- data: data,
254
- errorScheme: numberScheme,
255
- isSchemeError: true
256
- });
257
- }
258
- if (definedTester(numberScheme.exclusiveMin)) {
259
- if (!booleanTester(numberScheme.exclusiveMin)) {
260
- return new EjvError({
261
- type: ErrorType.INVALID_SCHEMES,
262
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
263
- data: data,
264
- errorScheme: numberScheme,
265
- isSchemeError: true
266
- });
267
- }
268
- }
269
- if (numberScheme.exclusiveMin) {
270
- if (!exclusiveMinNumberTester(valueAsNumber, effectiveMin)) {
271
- result = new EjvError({
272
- type: ErrorType.BIGGER_THAN,
273
- message: createErrorMsg(ErrorMsg.BIGGER_THAN, {
274
- placeholders: [effectiveMin]
275
- }),
276
- data,
277
- path: _options.path,
278
- errorScheme: numberScheme,
279
- errorData: value
280
- });
281
- break;
282
- }
283
- }
284
- else {
285
- if (!minNumberTester(valueAsNumber, effectiveMin)) {
286
- result = new EjvError({
287
- type: ErrorType.BIGGER_THAN_OR_EQUAL,
288
- message: createErrorMsg(ErrorMsg.BIGGER_THAN_OR_EQUAL, {
289
- placeholders: [effectiveMin]
290
- }),
291
- data,
292
- path: _options.path,
293
- errorScheme: numberScheme,
294
- errorData: value
295
- });
296
- break;
297
- }
298
- }
299
- }
300
- if (definedTester(numberScheme.max)
301
- || definedTester(scheme.parent?.max)) {
302
- const effectiveMax = definedTester(numberScheme.max)
303
- ? numberScheme.max
304
- : scheme.parent?.max;
305
- if (!numberTester(effectiveMax)) {
306
- return new EjvError({
307
- type: ErrorType.INVALID_SCHEMES,
308
- message: createErrorMsg(ErrorMsg.MAX_SHOULD_BE_NUMBER),
309
- data: data,
310
- errorScheme: numberScheme,
311
- isSchemeError: true
312
- });
313
- }
314
- if (definedTester(numberScheme.exclusiveMax)) {
315
- if (!booleanTester(numberScheme.exclusiveMax)) {
316
- return new EjvError({
317
- type: ErrorType.INVALID_SCHEMES,
318
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
319
- data: data,
320
- errorScheme: numberScheme,
321
- isSchemeError: true
322
- });
323
- }
324
- }
325
- if (numberScheme.exclusiveMax) {
326
- if (!exclusiveMaxNumberTester(valueAsNumber, effectiveMax)) {
327
- result = new EjvError({
328
- type: ErrorType.SMALLER_THAN,
329
- message: createErrorMsg(ErrorMsg.SMALLER_THAN, {
330
- placeholders: [effectiveMax]
331
- }),
332
- data,
333
- path: _options.path,
334
- errorScheme: numberScheme,
335
- errorData: value
336
- });
337
- break;
338
- }
339
- }
340
- else {
341
- if (!maxNumberTester(valueAsNumber, effectiveMax)) {
342
- result = new EjvError({
343
- type: ErrorType.SMALLER_THAN_OR_EQUAL,
344
- message: createErrorMsg(ErrorMsg.SMALLER_THAN_OR_EQUAL, {
345
- placeholders: [effectiveMax]
346
- }),
347
- data,
348
- path: _options.path,
349
- errorScheme: numberScheme,
350
- errorData: value
351
- });
352
- break;
353
- }
354
- }
355
- }
356
- if (definedTester(numberScheme.format)) {
357
- let formats;
358
- const allNumberFormat = Object.values(NumberFormat);
359
- if (!arrayTester(numberScheme.format)) {
360
- const formatAsString = numberScheme.format;
361
- if (!enumTester(formatAsString, allNumberFormat)) {
362
- return new EjvError({
363
- type: ErrorType.INVALID_SCHEMES,
364
- message: createErrorMsg(ErrorMsg.INVALID_NUMBER_FORMAT, {
365
- placeholders: [formatAsString]
366
- }),
367
- data: data,
368
- errorScheme: numberScheme,
369
- isSchemeError: true
370
- });
371
- }
372
- formats = [numberScheme.format];
373
- }
374
- else {
375
- const formatAsArray = numberScheme.format;
376
- const errorFormat = formatAsArray.find((format) => {
377
- return !enumTester(format, allNumberFormat);
378
- });
379
- if (errorFormat) {
380
- return new EjvError({
381
- type: ErrorType.INVALID_SCHEMES,
382
- message: createErrorMsg(ErrorMsg.INVALID_NUMBER_FORMAT, {
383
- placeholders: [errorFormat]
384
- }),
385
- data: data,
386
- errorScheme: numberScheme,
387
- isSchemeError: true
388
- });
389
- }
390
- formats = numberScheme.format;
391
- }
392
- const someFormatIsWrong = formats.some((format) => {
393
- let valid = false;
394
- switch (format) {
395
- case NumberFormat.INTEGER:
396
- valid = integerTester(valueAsNumber);
397
- break;
398
- case NumberFormat.INDEX:
399
- valid = indexTester(valueAsNumber);
400
- break;
401
- }
402
- return valid;
403
- });
404
- if (!someFormatIsWrong) {
405
- if (!arrayTester(numberScheme.format)) {
406
- result = new EjvError({
407
- type: ErrorType.FORMAT,
408
- message: createErrorMsg(ErrorMsg.FORMAT, {
409
- placeholders: [numberScheme.format]
410
- }),
411
- data,
412
- path: _options.path,
413
- errorScheme: numberScheme,
414
- errorData: value
415
- });
416
- }
417
- else {
418
- result = new EjvError({
419
- type: ErrorType.FORMAT_ONE_OF,
420
- message: createErrorMsg(ErrorMsg.FORMAT_ONE_OF, {
421
- placeholders: [JSON.stringify(numberScheme.format)]
422
- }),
423
- data,
424
- path: _options.path,
425
- errorScheme: numberScheme,
426
- errorData: value
427
- });
428
- }
429
- break;
430
- }
431
- }
432
- break;
433
- }
434
- case DataType.STRING: {
435
- const valueAsString = value;
436
- const stringScheme = scheme;
437
- if (definedTester(stringScheme.enum)) {
438
- if (!arrayTester(stringScheme.enum)) {
439
- return new EjvError({
440
- type: ErrorType.INVALID_SCHEMES,
441
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_ARRAY),
442
- data: data,
443
- errorScheme: stringScheme,
444
- isSchemeError: true
445
- });
446
- }
447
- const enumArr = stringScheme.enum;
448
- if (!arrayTypeOfTester(enumArr, DataType.STRING)) {
449
- return new EjvError({
450
- type: ErrorType.INVALID_SCHEMES,
451
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_STRINGS),
452
- data: data,
453
- errorScheme: stringScheme,
454
- isSchemeError: true
455
- });
456
- }
457
- if (!enumTester(valueAsString, enumArr)) {
458
- result = new EjvError({
459
- type: ErrorType.ONE_VALUE_OF,
460
- message: createErrorMsg(ErrorMsg.ONE_VALUE_OF, {
461
- placeholders: [JSON.stringify(stringScheme.enum)]
462
- }),
463
- data,
464
- path: _options.path,
465
- errorScheme: stringScheme,
466
- errorData: value
467
- });
468
- break;
469
- }
470
- }
471
- if (definedTester(stringScheme.length)) {
472
- const length = stringScheme.length;
473
- if (!(numberTester(length) && integerTester(length))) {
474
- return new EjvError({
475
- type: ErrorType.INVALID_SCHEMES,
476
- message: createErrorMsg(ErrorMsg.LENGTH_SHOULD_BE_INTEGER),
477
- data: data,
478
- errorScheme: stringScheme,
479
- isSchemeError: true
480
- });
481
- }
482
- if (!lengthTester(valueAsString, length)) {
483
- result = new EjvError({
484
- type: ErrorType.LENGTH,
485
- message: createErrorMsg(ErrorMsg.LENGTH, {
486
- placeholders: [length]
487
- }),
488
- data,
489
- path: _options.path,
490
- errorScheme: stringScheme,
491
- errorData: value
492
- });
493
- break;
494
- }
495
- }
496
- if (definedTester(stringScheme.minLength)) {
497
- const minLength = stringScheme.minLength;
498
- if (!(numberTester(minLength) && integerTester(minLength))) {
499
- return new EjvError({
500
- type: ErrorType.INVALID_SCHEMES,
501
- message: createErrorMsg(ErrorMsg.MIN_LENGTH_SHOULD_BE_INTEGER),
502
- data: data,
503
- errorScheme: stringScheme,
504
- isSchemeError: true
505
- });
506
- }
507
- if (!minLengthTester(valueAsString, minLength)) {
508
- result = new EjvError({
509
- type: ErrorType.MIN_LENGTH,
510
- message: createErrorMsg(ErrorMsg.MIN_LENGTH, {
511
- placeholders: ['' + minLength]
512
- }),
513
- data,
514
- path: _options.path,
515
- errorScheme: stringScheme,
516
- errorData: value
517
- });
518
- break;
519
- }
520
- }
521
- if (definedTester(stringScheme.maxLength)) {
522
- const maxLength = stringScheme.maxLength;
523
- if (!(numberTester(maxLength) && integerTester(maxLength))) {
524
- return new EjvError({
525
- type: ErrorType.INVALID_SCHEMES,
526
- message: createErrorMsg(ErrorMsg.MAX_LENGTH_SHOULD_BE_INTEGER),
527
- data: data,
528
- errorScheme: stringScheme,
529
- isSchemeError: true
530
- });
531
- }
532
- if (!maxLengthTester(valueAsString, maxLength)) {
533
- result = new EjvError({
534
- type: ErrorType.MAX_LENGTH,
535
- message: createErrorMsg(ErrorMsg.MAX_LENGTH, {
536
- placeholders: ['' + maxLength]
537
- }),
538
- data,
539
- path: _options.path,
540
- errorScheme: stringScheme,
541
- errorData: value
542
- });
543
- break;
544
- }
545
- }
546
- if (definedTester(stringScheme.format)) {
547
- let formats;
548
- const allStringFormat = Object.values(StringFormat);
549
- if (!arrayTester(stringScheme.format)) {
550
- const formatAsString = stringScheme.format;
551
- if (!enumTester(formatAsString, allStringFormat)) {
552
- return new EjvError({
553
- type: ErrorType.INVALID_SCHEMES,
554
- message: createErrorMsg(ErrorMsg.INVALID_STRING_FORMAT, {
555
- placeholders: [formatAsString]
556
- }),
557
- data: data,
558
- errorScheme: stringScheme,
559
- isSchemeError: true
560
- });
561
- }
562
- formats = [stringScheme.format];
563
- }
564
- else {
565
- const formatAsArray = stringScheme.format;
566
- const errorFormat = formatAsArray.find((format) => {
567
- return !enumTester(format, allStringFormat);
568
- });
569
- if (errorFormat) {
570
- return new EjvError({
571
- type: ErrorType.INVALID_SCHEMES,
572
- message: createErrorMsg(ErrorMsg.INVALID_STRING_FORMAT, {
573
- placeholders: [errorFormat]
574
- }),
575
- data: data,
576
- errorScheme: stringScheme,
577
- isSchemeError: true
578
- });
579
- }
580
- formats = stringScheme.format;
581
- }
582
- const foundFormatMatching = formats.some((format) => {
583
- let valid = false;
584
- switch (format) {
585
- case StringFormat.EMAIL:
586
- valid = emailTester(valueAsString);
587
- break;
588
- case StringFormat.DATE:
589
- valid = dateFormatTester(valueAsString);
590
- break;
591
- case StringFormat.TIME:
592
- valid = timeFormatTester(valueAsString);
593
- break;
594
- case StringFormat.DATE_TIME:
595
- valid = dateTimeFormatTester(valueAsString);
596
- break;
597
- }
598
- return valid;
599
- });
600
- if (!foundFormatMatching) {
601
- if (!arrayTester(stringScheme.format)) {
602
- result = new EjvError({
603
- type: ErrorType.FORMAT,
604
- message: createErrorMsg(ErrorMsg.FORMAT, {
605
- placeholders: [stringScheme.format]
606
- }),
607
- data,
608
- path: _options.path,
609
- errorScheme: stringScheme,
610
- errorData: value
611
- });
612
- }
613
- else {
614
- result = new EjvError({
615
- type: ErrorType.FORMAT_ONE_OF,
616
- message: createErrorMsg(ErrorMsg.FORMAT_ONE_OF, {
617
- placeholders: [JSON.stringify(stringScheme.format)]
618
- }),
619
- data,
620
- path: _options.path,
621
- errorScheme: stringScheme,
622
- errorData: value
623
- });
624
- }
625
- break;
626
- }
627
- }
628
- if (definedTester(stringScheme.pattern)) {
629
- // check parameter
630
- if (stringScheme.pattern === null) {
631
- return new EjvError({
632
- type: ErrorType.INVALID_SCHEMES,
633
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
634
- placeholders: ['null']
635
- }),
636
- data: data,
637
- errorScheme: stringScheme,
638
- isSchemeError: true
639
- });
640
- }
641
- const isValidPattern = (pattern) => {
642
- return (stringTester(pattern) && minLengthTester(pattern, 1))
643
- || (regExpTester(pattern) && pattern.toString() !== '/(?:)/' && pattern.toString() !== '/null/');
644
- };
645
- const patternToString = (pattern) => {
646
- let regExpStr;
647
- if (pattern === null) {
648
- regExpStr = '/null/';
649
- }
650
- else if (stringTester(pattern)) {
651
- if (minLengthTester(pattern, 1)) {
652
- regExpStr = new RegExp(pattern).toString();
653
- }
654
- else {
655
- regExpStr = '//';
656
- }
657
- }
658
- else {
659
- regExpStr = pattern.toString();
660
- }
661
- // empty regular expression
662
- if (regExpStr === '/(?:)/') {
663
- regExpStr = '//';
664
- }
665
- return regExpStr;
666
- };
667
- const createArrayErrorMsg = (patternsAsArray) => {
668
- return '[' + patternsAsArray.map((onePattern) => {
669
- return patternToString(onePattern);
670
- }).join(', ') + ']';
671
- };
672
- if (arrayTester(stringScheme.pattern)) {
673
- const patternsAsArray = stringScheme.pattern;
674
- if (!minLengthTester(patternsAsArray, 1)) { // empty array
675
- return new EjvError({
676
- type: ErrorType.INVALID_SCHEMES,
677
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
678
- placeholders: [createArrayErrorMsg(patternsAsArray)]
679
- }),
680
- data: data,
681
- errorScheme: stringScheme,
682
- isSchemeError: true
683
- });
684
- }
685
- try {
686
- const regExpPatterns = patternsAsArray.map((pattern) => {
687
- if (!isValidPattern(pattern)) {
688
- throw new Error(createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
689
- placeholders: [createArrayErrorMsg(patternsAsArray)]
690
- }));
691
- }
692
- return new RegExp(pattern);
693
- });
694
- // check value
695
- const foundMatchPattern = regExpPatterns.some((regexp) => {
696
- return stringRegExpTester(valueAsString, regexp);
697
- });
698
- if (!foundMatchPattern) {
699
- result = new EjvError({
700
- type: ErrorType.PATTERN_ONE_OF,
701
- message: createErrorMsg(ErrorMsg.PATTERN_ONE_OF, {
702
- placeholders: [createArrayErrorMsg(patternsAsArray)]
703
- }),
704
- data,
705
- path: _options.path,
706
- errorScheme: stringScheme,
707
- errorData: value
708
- });
709
- break;
710
- }
711
- }
712
- catch (e) {
713
- return new EjvError({
714
- type: ErrorType.INVALID_SCHEMES,
715
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
716
- placeholders: [createArrayErrorMsg(patternsAsArray)]
717
- }),
718
- data: data,
719
- errorScheme: stringScheme,
720
- isSchemeError: true
721
- });
722
- }
723
- }
724
- else {
725
- const patternAsOne = stringScheme.pattern;
726
- if (!isValidPattern(patternAsOne)) {
727
- return new EjvError({
728
- type: ErrorType.INVALID_SCHEMES,
729
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
730
- placeholders: [patternToString(patternAsOne)]
731
- }),
732
- data: data,
733
- errorScheme: stringScheme,
734
- isSchemeError: true
735
- });
736
- }
737
- // check value
738
- const regExp = new RegExp(patternAsOne);
739
- if (!stringRegExpTester(valueAsString, regExp)) {
740
- result = new EjvError({
741
- type: ErrorType.PATTERN,
742
- message: createErrorMsg(ErrorMsg.PATTERN, {
743
- placeholders: [patternToString(patternAsOne)]
744
- }),
745
- data,
746
- path: _options.path,
747
- errorScheme: stringScheme,
748
- errorData: value
749
- });
750
- break;
751
- }
752
- }
753
- }
754
- break;
755
- }
756
- case DataType.OBJECT: {
757
- const valueAsObject = value;
758
- const objectScheme = scheme;
759
- if (definedTester(objectScheme.allowNoProperty)) {
760
- if (!booleanTester(objectScheme.allowNoProperty)) {
761
- return new EjvError({
762
- type: ErrorType.INVALID_SCHEMES,
763
- message: createErrorMsg(ErrorMsg.ALLOW_NO_PROPERTY_SHOULD_BE_BOOLEAN),
764
- data: data,
765
- errorScheme: objectScheme,
766
- isSchemeError: true
767
- });
768
- }
769
- if (!objectScheme.allowNoProperty && !hasPropertyTester(valueAsObject)) {
770
- result = new EjvError({
771
- type: ErrorType.PROPERTY,
772
- message: ErrorMsg.PROPERTY,
773
- data,
774
- path: _options.path,
775
- errorScheme: objectScheme,
776
- errorData: value
777
- });
778
- break;
779
- }
780
- }
781
- if (definedTester(objectScheme.properties)) {
782
- if (!arrayTester(objectScheme.properties)) {
783
- return new EjvError({
784
- type: ErrorType.INVALID_SCHEMES,
785
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_BE_ARRAY),
786
- data: data,
787
- errorScheme: objectScheme,
788
- isSchemeError: true
789
- });
790
- }
791
- const properties = objectScheme.properties;
792
- if (!minLengthTester(properties, 1)) {
793
- return new EjvError({
794
- type: ErrorType.INVALID_SCHEMES,
795
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_HAVE_ITEMS),
796
- data: data,
797
- errorScheme: objectScheme,
798
- isSchemeError: true
799
- });
800
- }
801
- if (!arrayTypeOfTester(properties, DataType.OBJECT)) {
802
- return new EjvError({
803
- type: ErrorType.INVALID_SCHEMES,
804
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_BE_ARRAY_OF_OBJECT),
805
- data: data,
806
- errorScheme: objectScheme,
807
- isSchemeError: true
808
- });
809
- }
810
- if (!objectTester(value)) {
811
- result = new EjvError({
812
- type: ErrorType.TYPE_MISMATCH,
813
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
814
- placeholders: ['object']
815
- }),
816
- data,
817
- path: _options.path,
818
- errorScheme: objectScheme,
819
- errorData: value
820
- });
821
- break;
822
- }
823
- const partialData = data[key];
824
- const partialScheme = objectScheme.properties;
825
- scheme.parent = objectScheme;
826
- // call recursively
827
- result = _ejv(partialData, partialScheme, _options);
828
- if (result) {
829
- // inject original data
830
- result.data = data;
831
- }
832
- }
833
- break;
834
- }
835
- case DataType.DATE: {
836
- const valueAsDate = value;
837
- const dateScheme = scheme;
838
- const parentDateScheme = scheme.parent;
839
- if (definedTester(dateScheme.min)
840
- || definedTester(parentDateScheme?.min)) {
841
- const minDateCandidate = dateScheme.min || parentDateScheme?.min;
842
- if (!((stringTester(minDateCandidate)
843
- && (dateFormatTester(minDateCandidate)
844
- || dateTimeFormatTester(minDateCandidate)))
845
- || dateTester(minDateCandidate))) {
846
- return new EjvError({
847
- type: ErrorType.INVALID_SCHEMES,
848
- message: createErrorMsg(ErrorMsg.MIN_DATE_SHOULD_BE_DATE_OR_STRING),
849
- data: data,
850
- errorScheme: dateScheme,
851
- isSchemeError: true
852
- });
853
- }
854
- const effectiveMin = new Date(minDateCandidate);
855
- if (definedTester(dateScheme.exclusiveMin)) {
856
- if (!booleanTester(dateScheme.exclusiveMin)) {
857
- return new EjvError({
858
- type: ErrorType.INVALID_SCHEMES,
859
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
860
- data: data,
861
- errorScheme: dateScheme,
862
- isSchemeError: true
863
- });
864
- }
865
- if (dateScheme.exclusiveMin) {
866
- if (!exclusiveMinDateTester(valueAsDate, effectiveMin)) {
867
- result = new EjvError({
868
- type: ErrorType.AFTER_DATE,
869
- message: createErrorMsg(ErrorMsg.AFTER_DATE, {
870
- placeholders: [effectiveMin.toISOString()]
871
- }),
872
- data,
873
- path: _options.path,
874
- errorScheme: dateScheme,
875
- errorData: value
876
- });
877
- break;
878
- }
879
- }
880
- else {
881
- if (!minDateTester(valueAsDate, effectiveMin)) {
882
- result = new EjvError({
883
- type: ErrorType.AFTER_OR_SAME_DATE,
884
- message: createErrorMsg(ErrorMsg.AFTER_OR_SAME_DATE, {
885
- placeholders: [effectiveMin.toISOString()]
886
- }),
887
- data,
888
- path: _options.path,
889
- errorScheme: dateScheme,
890
- errorData: value
891
- });
892
- break;
893
- }
894
- }
895
- }
896
- else {
897
- if (!minDateTester(valueAsDate, effectiveMin)) {
898
- result = new EjvError({
899
- type: ErrorType.AFTER_OR_SAME_DATE,
900
- message: createErrorMsg(ErrorMsg.AFTER_OR_SAME_DATE, {
901
- placeholders: [effectiveMin.toISOString()]
902
- }),
903
- data,
904
- path: _options.path,
905
- errorScheme: dateScheme,
906
- errorData: value
907
- });
908
- break;
909
- }
910
- }
911
- }
912
- if (definedTester(dateScheme.max)
913
- || definedTester(parentDateScheme?.max)) {
914
- const maxDateCandidate = dateScheme.max || parentDateScheme?.max;
915
- if (!((stringTester(maxDateCandidate)
916
- && (dateFormatTester(maxDateCandidate)
917
- || dateTimeFormatTester(maxDateCandidate)))
918
- || dateTester(maxDateCandidate))) {
919
- return new EjvError({
920
- type: ErrorType.INVALID_SCHEMES,
921
- message: createErrorMsg(ErrorMsg.MAX_DATE_SHOULD_BE_DATE_OR_STRING),
922
- data: data,
923
- errorScheme: dateScheme,
924
- isSchemeError: true
925
- });
926
- }
927
- const effectiveMax = new Date(maxDateCandidate);
928
- if (definedTester(dateScheme.exclusiveMax)) {
929
- if (!booleanTester(dateScheme.exclusiveMax)) {
930
- return new EjvError({
931
- type: ErrorType.INVALID_SCHEMES,
932
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
933
- data: data,
934
- errorScheme: dateScheme,
935
- isSchemeError: true
936
- });
937
- }
938
- }
939
- if (dateScheme.exclusiveMax) {
940
- if (!exclusiveMaxDateTester(valueAsDate, effectiveMax)) {
941
- result = new EjvError({
942
- type: ErrorType.BEFORE_DATE,
943
- message: createErrorMsg(ErrorMsg.BEFORE_DATE, {
944
- placeholders: [effectiveMax.toISOString()]
945
- }),
946
- data,
947
- path: _options.path,
948
- errorScheme: dateScheme,
949
- errorData: value
950
- });
951
- break;
952
- }
953
- }
954
- else {
955
- if (!maxDateTester(valueAsDate, effectiveMax)) {
956
- result = new EjvError({
957
- type: ErrorType.BEFORE_OR_SAME_DATE,
958
- message: createErrorMsg(ErrorMsg.BEFORE_OR_SAME_DATE, {
959
- placeholders: [effectiveMax.toISOString()]
960
- }),
961
- data,
962
- path: _options.path,
963
- errorScheme: dateScheme,
964
- errorData: value
965
- });
966
- break;
967
- }
968
- }
969
- }
970
- break;
971
- }
972
- case DataType.ARRAY: {
973
- const valueAsArray = value;
974
- const arrayScheme = scheme;
975
- if (definedTester(arrayScheme.length)) {
976
- const length = arrayScheme.length;
977
- if (!(numberTester(length) && integerTester(length))) {
978
- return new EjvError({
979
- type: ErrorType.INVALID_SCHEMES,
980
- message: createErrorMsg(ErrorMsg.LENGTH_SHOULD_BE_INTEGER),
981
- data: data,
982
- errorScheme: arrayScheme,
983
- isSchemeError: true
984
- });
985
- }
986
- if (!lengthTester(valueAsArray, length)) {
987
- result = new EjvError({
988
- type: ErrorType.LENGTH,
989
- message: createErrorMsg(ErrorMsg.LENGTH, {
990
- placeholders: ['' + length]
991
- }),
992
- data,
993
- path: _options.path,
994
- errorScheme: arrayScheme,
995
- errorData: value
996
- });
997
- break;
998
- }
999
- }
1000
- if (definedTester(arrayScheme.minLength)) {
1001
- const minLength = arrayScheme.minLength;
1002
- if (!(numberTester(arrayScheme.minLength) && integerTester(minLength))) {
1003
- return new EjvError({
1004
- type: ErrorType.INVALID_SCHEMES,
1005
- message: createErrorMsg(ErrorMsg.MIN_LENGTH_SHOULD_BE_INTEGER),
1006
- data: data,
1007
- errorScheme: arrayScheme,
1008
- isSchemeError: true
1009
- });
1010
- }
1011
- if (!minLengthTester(valueAsArray, minLength)) {
1012
- result = new EjvError({
1013
- type: ErrorType.MIN_LENGTH,
1014
- message: createErrorMsg(ErrorMsg.MIN_LENGTH, {
1015
- placeholders: ['' + minLength]
1016
- }),
1017
- data,
1018
- path: _options.path,
1019
- errorScheme: arrayScheme,
1020
- errorData: value
1021
- });
1022
- break;
1023
- }
1024
- }
1025
- if (definedTester(arrayScheme.maxLength)) {
1026
- const maxLength = arrayScheme.maxLength;
1027
- if (!(numberTester(arrayScheme.maxLength) && integerTester(maxLength))) {
1028
- return new EjvError({
1029
- type: ErrorType.INVALID_SCHEMES,
1030
- message: createErrorMsg(ErrorMsg.MAX_LENGTH_SHOULD_BE_INTEGER),
1031
- data: data,
1032
- errorScheme: arrayScheme,
1033
- isSchemeError: true
1034
- });
1035
- }
1036
- if (!maxLengthTester(valueAsArray, maxLength)) {
1037
- result = new EjvError({
1038
- type: ErrorType.MAX_LENGTH,
1039
- message: createErrorMsg(ErrorMsg.MAX_LENGTH, {
1040
- placeholders: ['' + maxLength]
1041
- }),
1042
- data,
1043
- path: _options.path,
1044
- errorScheme: arrayScheme,
1045
- errorData: value
1046
- });
1047
- break;
1048
- }
1049
- }
1050
- if (definedTester(arrayScheme.unique)) {
1051
- if (!booleanTester(arrayScheme.unique)) {
1052
- return new EjvError({
1053
- type: ErrorType.INVALID_SCHEMES,
1054
- message: createErrorMsg(ErrorMsg.UNIQUE_SHOULD_BE_BOOLEAN),
1055
- data: data,
1056
- errorScheme: arrayScheme,
1057
- isSchemeError: true
1058
- });
1059
- }
1060
- if (arrayScheme.unique && !uniqueItemsTester(valueAsArray)) {
1061
- result = new EjvError({
1062
- type: ErrorType.UNIQUE_ITEMS,
1063
- message: ErrorMsg.UNIQUE_ITEMS,
1064
- data,
1065
- path: _options.path,
1066
- errorScheme: arrayScheme,
1067
- errorData: value
1068
- });
1069
- break;
1070
- }
1071
- }
1072
- if (definedTester(arrayScheme.items)) {
1073
- // convert array to object
1074
- if (valueAsArray.length > 0) {
1075
- const now = new Date();
1076
- const tempKeyArr = valueAsArray.map((_value, i) => {
1077
- return '' + (+now + i);
1078
- });
1079
- if (stringTester(arrayScheme.items) // by DataType
1080
- || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items, DataType.STRING)) // by DataType[]
1081
- ) {
1082
- const itemTypes = (arrayTester(arrayScheme.items)
1083
- ? arrayScheme.items
1084
- : [arrayScheme.items]);
1085
- const itemTypeError = itemTypes.find((type) => {
1086
- return !definedTester(type)
1087
- || !stringTester(type)
1088
- || !enumTester(type, allDataType);
1089
- });
1090
- if (itemTypeError) {
1091
- return new EjvError({
1092
- type: ErrorType.INVALID_SCHEMES,
1093
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_INVALID_TYPE, {
1094
- placeholders: [itemTypeError]
1095
- }),
1096
- data: data,
1097
- errorScheme: scheme,
1098
- isSchemeError: true
1099
- });
1100
- }
1101
- const partialData = {};
1102
- const partialSchemes = [];
1103
- tempKeyArr.forEach((tempKey, i) => {
1104
- partialData[tempKey] = valueAsArray[i];
1105
- partialSchemes.push({
1106
- key: tempKey,
1107
- type: itemTypes
1108
- });
1109
- });
1110
- scheme.parent = arrayScheme;
1111
- // call recursively
1112
- const partialResult = _ejv(partialData, partialSchemes, _options);
1113
- // convert new EjvError
1114
- if (partialResult) {
1115
- let errorMsg;
1116
- if (arrayTester(arrayScheme.items)) {
1117
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_TYPE, {
1118
- placeholders: [JSON.stringify(itemTypes)]
1119
- });
1120
- }
1121
- else {
1122
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_TYPE, {
1123
- placeholders: [arrayScheme.items]
1124
- });
1125
- }
1126
- const partialKeys = (partialResult.path || '').split('/');
1127
- const partialKey = partialKeys[partialKeys.length - 1];
1128
- const partialScheme = partialSchemes.find((_scheme) => {
1129
- return _scheme.key === partialKey;
1130
- });
1131
- const partialKeyIndex = partialSchemes.indexOf(partialScheme);
1132
- result = new EjvError({
1133
- type: ErrorType.ITEMS_TYPE,
1134
- message: errorMsg,
1135
- data,
1136
- path: [..._options.path, '' + partialKeyIndex],
1137
- errorScheme: partialScheme,
1138
- errorData: partialData[partialKey]
1139
- });
1140
- }
1141
- break;
1142
- }
1143
- else if ((objectTester(arrayScheme.items) && arrayScheme.items !== null) // by Scheme
1144
- || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items, DataType.OBJECT)) // by Scheme[]
1145
- ) {
1146
- const itemsAsSchemes = arrayTester(arrayScheme.items)
1147
- ? arrayScheme.items
1148
- : [arrayScheme.items];
1149
- let partialError = null;
1150
- // use for() instead of forEach() to break
1151
- const valueLength = valueAsArray.length;
1152
- for (let arrIndex = 0; arrIndex < valueLength; arrIndex++) {
1153
- const oneValue = valueAsArray[arrIndex];
1154
- const partialData = {};
1155
- const partialSchemes = [];
1156
- const tempKeyForThisValue = tempKeyArr[arrIndex];
1157
- partialData[tempKeyForThisValue] = oneValue;
1158
- partialSchemes.push(...itemsAsSchemes.map((oneScheme) => {
1159
- const newScheme = clone(oneScheme); // divide instance
1160
- newScheme.key = tempKeyForThisValue;
1161
- return newScheme;
1162
- }));
1163
- const partialResults = partialSchemes.map((partialScheme) => {
1164
- // call recursively
1165
- const partialResult = _ejv(partialData, [partialScheme], _options);
1166
- if (partialResult) {
1167
- partialResult.path = (partialResult.path || '').replace(tempKeyForThisValue, '' + arrIndex);
1168
- }
1169
- return partialResult;
1170
- });
1171
- if (!partialResults.some((oneResult) => oneResult === null)) {
1172
- partialError = partialResults.find((oneResult) => {
1173
- return !!oneResult;
1174
- });
1175
- break;
1176
- }
1177
- }
1178
- if (partialError) {
1179
- let errorType;
1180
- let errorMsg;
1181
- if (!!itemsAsSchemes && itemsAsSchemes.length > 1) {
1182
- errorType = ErrorType.ITEMS_SCHEMES;
1183
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_SCHEMES, {
1184
- placeholders: [JSON.stringify(itemsAsSchemes)]
1185
- });
1186
- }
1187
- else {
1188
- errorType = partialError.type;
1189
- errorMsg = partialError.message;
1190
- if (errorType === ErrorType.REQUIRED) {
1191
- // REQUIRED in array is TYPE_MISMATCH except with nullable === true
1192
- errorType = ErrorType.TYPE_MISMATCH;
1193
- errorMsg = createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
1194
- placeholders: [JSON.stringify(arrayScheme.items)]
1195
- });
1196
- }
1197
- }
1198
- result = new EjvError({
1199
- type: errorType,
1200
- message: errorMsg,
1201
- data
1202
- });
1203
- if (errorType === ErrorType.INVALID_SCHEMES) {
1204
- result.errorScheme = arrayScheme;
1205
- result.isSchemeError = true;
1206
- result.isDataError = false;
1207
- }
1208
- else {
1209
- result.path = partialError.path;
1210
- result.errorData = partialError.errorData;
1211
- }
1212
- break;
1213
- }
1214
- }
1215
- else {
1216
- return new EjvError({
1217
- type: ErrorType.INVALID_SCHEMES,
1218
- message: createErrorMsg(ErrorMsg.INVALID_ITEMS_SCHEME, {
1219
- placeholders: [JSON.stringify(arrayScheme.items)]
1220
- }),
1221
- data: data,
1222
- errorScheme: arrayScheme,
1223
- isSchemeError: true
1224
- });
1225
- }
1226
- }
1227
- }
1228
- break;
1229
- }
1230
- }
1231
- if (result) {
1232
- break;
1233
- }
1234
- }
1235
- if (result !== null && definedTester(options.customErrorMsg)) {
1236
- const customErrorMsgObj = options.customErrorMsg;
1237
- // override error message
1238
- const customMsg = customErrorMsgObj[result.type];
1239
- if (definedTester(customMsg)) {
1240
- result.message = customMsg;
1241
- }
1242
- }
1243
- return result;
1244
- };
1245
- export const ejv = (data, schemes, options) => {
1246
- // check data itself
1247
- if (!definedTester(data) || !objectTester(data) || data === null) {
1248
- return new EjvError({
1249
- type: ErrorType.NO_DATA,
1250
- message: ErrorMsg.NO_DATA,
1251
- data: data,
1252
- path: undefined,
1253
- errorScheme: undefined,
1254
- errorData: data,
1255
- isSchemeError: false
1256
- });
1257
- }
1258
- const internalOption = (options
1259
- ? {
1260
- ...options
1261
- }
1262
- : {});
1263
- if (!definedTester(internalOption.path)) {
1264
- internalOption.path = [];
1265
- }
1266
- return _ejv(data, schemes, internalOption);
1267
- };
1268
- //# sourceMappingURL=ejv.js.map