ejv 2.0.4 → 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 -1266
  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 -1264
  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,1264 +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 = numberScheme.min || scheme.parent?.min;
247
- if (!numberTester(effectiveMin)) {
248
- return new EjvError({
249
- type: ErrorType.INVALID_SCHEMES,
250
- message: createErrorMsg(ErrorMsg.MIN_SHOULD_BE_NUMBER),
251
- data: data,
252
- errorScheme: numberScheme,
253
- isSchemeError: true
254
- });
255
- }
256
- if (definedTester(numberScheme.exclusiveMin)) {
257
- if (!booleanTester(numberScheme.exclusiveMin)) {
258
- return new EjvError({
259
- type: ErrorType.INVALID_SCHEMES,
260
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
261
- data: data,
262
- errorScheme: numberScheme,
263
- isSchemeError: true
264
- });
265
- }
266
- }
267
- if (numberScheme.exclusiveMin) {
268
- if (!exclusiveMinNumberTester(valueAsNumber, effectiveMin)) {
269
- result = new EjvError({
270
- type: ErrorType.BIGGER_THAN,
271
- message: createErrorMsg(ErrorMsg.BIGGER_THAN, {
272
- placeholders: [effectiveMin]
273
- }),
274
- data,
275
- path: _options.path,
276
- errorScheme: numberScheme,
277
- errorData: value
278
- });
279
- break;
280
- }
281
- }
282
- else {
283
- if (!minNumberTester(valueAsNumber, effectiveMin)) {
284
- result = new EjvError({
285
- type: ErrorType.BIGGER_THAN_OR_EQUAL,
286
- message: createErrorMsg(ErrorMsg.BIGGER_THAN_OR_EQUAL, {
287
- placeholders: [effectiveMin]
288
- }),
289
- data,
290
- path: _options.path,
291
- errorScheme: numberScheme,
292
- errorData: value
293
- });
294
- break;
295
- }
296
- }
297
- }
298
- if (definedTester(numberScheme.max)
299
- || definedTester(scheme.parent?.max)) {
300
- const effectiveMax = numberScheme.max || scheme.parent?.max;
301
- if (!numberTester(effectiveMax)) {
302
- return new EjvError({
303
- type: ErrorType.INVALID_SCHEMES,
304
- message: createErrorMsg(ErrorMsg.MAX_SHOULD_BE_NUMBER),
305
- data: data,
306
- errorScheme: numberScheme,
307
- isSchemeError: true
308
- });
309
- }
310
- if (definedTester(numberScheme.exclusiveMax)) {
311
- if (!booleanTester(numberScheme.exclusiveMax)) {
312
- return new EjvError({
313
- type: ErrorType.INVALID_SCHEMES,
314
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
315
- data: data,
316
- errorScheme: numberScheme,
317
- isSchemeError: true
318
- });
319
- }
320
- }
321
- if (numberScheme.exclusiveMax) {
322
- if (!exclusiveMaxNumberTester(valueAsNumber, effectiveMax)) {
323
- result = new EjvError({
324
- type: ErrorType.SMALLER_THAN,
325
- message: createErrorMsg(ErrorMsg.SMALLER_THAN, {
326
- placeholders: [effectiveMax]
327
- }),
328
- data,
329
- path: _options.path,
330
- errorScheme: numberScheme,
331
- errorData: value
332
- });
333
- break;
334
- }
335
- }
336
- else {
337
- if (!maxNumberTester(valueAsNumber, effectiveMax)) {
338
- result = new EjvError({
339
- type: ErrorType.SMALLER_THAN_OR_EQUAL,
340
- message: createErrorMsg(ErrorMsg.SMALLER_THAN_OR_EQUAL, {
341
- placeholders: [effectiveMax]
342
- }),
343
- data,
344
- path: _options.path,
345
- errorScheme: numberScheme,
346
- errorData: value
347
- });
348
- break;
349
- }
350
- }
351
- }
352
- if (definedTester(numberScheme.format)) {
353
- let formats;
354
- const allNumberFormat = Object.values(NumberFormat);
355
- if (!arrayTester(numberScheme.format)) {
356
- const formatAsString = numberScheme.format;
357
- if (!enumTester(formatAsString, allNumberFormat)) {
358
- return new EjvError({
359
- type: ErrorType.INVALID_SCHEMES,
360
- message: createErrorMsg(ErrorMsg.INVALID_NUMBER_FORMAT, {
361
- placeholders: [formatAsString]
362
- }),
363
- data: data,
364
- errorScheme: numberScheme,
365
- isSchemeError: true
366
- });
367
- }
368
- formats = [numberScheme.format];
369
- }
370
- else {
371
- const formatAsArray = numberScheme.format;
372
- const errorFormat = formatAsArray.find((format) => {
373
- return !enumTester(format, allNumberFormat);
374
- });
375
- if (errorFormat) {
376
- return new EjvError({
377
- type: ErrorType.INVALID_SCHEMES,
378
- message: createErrorMsg(ErrorMsg.INVALID_NUMBER_FORMAT, {
379
- placeholders: [errorFormat]
380
- }),
381
- data: data,
382
- errorScheme: numberScheme,
383
- isSchemeError: true
384
- });
385
- }
386
- formats = numberScheme.format;
387
- }
388
- const someFormatIsWrong = formats.some((format) => {
389
- let valid = false;
390
- switch (format) {
391
- case NumberFormat.INTEGER:
392
- valid = integerTester(valueAsNumber);
393
- break;
394
- case NumberFormat.INDEX:
395
- valid = indexTester(valueAsNumber);
396
- break;
397
- }
398
- return valid;
399
- });
400
- if (!someFormatIsWrong) {
401
- if (!arrayTester(numberScheme.format)) {
402
- result = new EjvError({
403
- type: ErrorType.FORMAT,
404
- message: createErrorMsg(ErrorMsg.FORMAT, {
405
- placeholders: [numberScheme.format]
406
- }),
407
- data,
408
- path: _options.path,
409
- errorScheme: numberScheme,
410
- errorData: value
411
- });
412
- }
413
- else {
414
- result = new EjvError({
415
- type: ErrorType.FORMAT_ONE_OF,
416
- message: createErrorMsg(ErrorMsg.FORMAT_ONE_OF, {
417
- placeholders: [JSON.stringify(numberScheme.format)]
418
- }),
419
- data,
420
- path: _options.path,
421
- errorScheme: numberScheme,
422
- errorData: value
423
- });
424
- }
425
- break;
426
- }
427
- }
428
- break;
429
- }
430
- case DataType.STRING: {
431
- const valueAsString = value;
432
- const stringScheme = scheme;
433
- if (definedTester(stringScheme.enum)) {
434
- if (!arrayTester(stringScheme.enum)) {
435
- return new EjvError({
436
- type: ErrorType.INVALID_SCHEMES,
437
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_ARRAY),
438
- data: data,
439
- errorScheme: stringScheme,
440
- isSchemeError: true
441
- });
442
- }
443
- const enumArr = stringScheme.enum;
444
- if (!arrayTypeOfTester(enumArr, DataType.STRING)) {
445
- return new EjvError({
446
- type: ErrorType.INVALID_SCHEMES,
447
- message: createErrorMsg(ErrorMsg.ENUM_SHOULD_BE_STRINGS),
448
- data: data,
449
- errorScheme: stringScheme,
450
- isSchemeError: true
451
- });
452
- }
453
- if (!enumTester(valueAsString, enumArr)) {
454
- result = new EjvError({
455
- type: ErrorType.ONE_VALUE_OF,
456
- message: createErrorMsg(ErrorMsg.ONE_VALUE_OF, {
457
- placeholders: [JSON.stringify(stringScheme.enum)]
458
- }),
459
- data,
460
- path: _options.path,
461
- errorScheme: stringScheme,
462
- errorData: value
463
- });
464
- break;
465
- }
466
- }
467
- if (definedTester(stringScheme.length)) {
468
- const length = stringScheme.length;
469
- if (!(numberTester(length) && integerTester(length))) {
470
- return new EjvError({
471
- type: ErrorType.INVALID_SCHEMES,
472
- message: createErrorMsg(ErrorMsg.LENGTH_SHOULD_BE_INTEGER),
473
- data: data,
474
- errorScheme: stringScheme,
475
- isSchemeError: true
476
- });
477
- }
478
- if (!lengthTester(valueAsString, length)) {
479
- result = new EjvError({
480
- type: ErrorType.LENGTH,
481
- message: createErrorMsg(ErrorMsg.LENGTH, {
482
- placeholders: [length]
483
- }),
484
- data,
485
- path: _options.path,
486
- errorScheme: stringScheme,
487
- errorData: value
488
- });
489
- break;
490
- }
491
- }
492
- if (definedTester(stringScheme.minLength)) {
493
- const minLength = stringScheme.minLength;
494
- if (!(numberTester(minLength) && integerTester(minLength))) {
495
- return new EjvError({
496
- type: ErrorType.INVALID_SCHEMES,
497
- message: createErrorMsg(ErrorMsg.MIN_LENGTH_SHOULD_BE_INTEGER),
498
- data: data,
499
- errorScheme: stringScheme,
500
- isSchemeError: true
501
- });
502
- }
503
- if (!minLengthTester(valueAsString, minLength)) {
504
- result = new EjvError({
505
- type: ErrorType.MIN_LENGTH,
506
- message: createErrorMsg(ErrorMsg.MIN_LENGTH, {
507
- placeholders: ['' + minLength]
508
- }),
509
- data,
510
- path: _options.path,
511
- errorScheme: stringScheme,
512
- errorData: value
513
- });
514
- break;
515
- }
516
- }
517
- if (definedTester(stringScheme.maxLength)) {
518
- const maxLength = stringScheme.maxLength;
519
- if (!(numberTester(maxLength) && integerTester(maxLength))) {
520
- return new EjvError({
521
- type: ErrorType.INVALID_SCHEMES,
522
- message: createErrorMsg(ErrorMsg.MAX_LENGTH_SHOULD_BE_INTEGER),
523
- data: data,
524
- errorScheme: stringScheme,
525
- isSchemeError: true
526
- });
527
- }
528
- if (!maxLengthTester(valueAsString, maxLength)) {
529
- result = new EjvError({
530
- type: ErrorType.MAX_LENGTH,
531
- message: createErrorMsg(ErrorMsg.MAX_LENGTH, {
532
- placeholders: ['' + maxLength]
533
- }),
534
- data,
535
- path: _options.path,
536
- errorScheme: stringScheme,
537
- errorData: value
538
- });
539
- break;
540
- }
541
- }
542
- if (definedTester(stringScheme.format)) {
543
- let formats;
544
- const allStringFormat = Object.values(StringFormat);
545
- if (!arrayTester(stringScheme.format)) {
546
- const formatAsString = stringScheme.format;
547
- if (!enumTester(formatAsString, allStringFormat)) {
548
- return new EjvError({
549
- type: ErrorType.INVALID_SCHEMES,
550
- message: createErrorMsg(ErrorMsg.INVALID_STRING_FORMAT, {
551
- placeholders: [formatAsString]
552
- }),
553
- data: data,
554
- errorScheme: stringScheme,
555
- isSchemeError: true
556
- });
557
- }
558
- formats = [stringScheme.format];
559
- }
560
- else {
561
- const formatAsArray = stringScheme.format;
562
- const errorFormat = formatAsArray.find((format) => {
563
- return !enumTester(format, allStringFormat);
564
- });
565
- if (errorFormat) {
566
- return new EjvError({
567
- type: ErrorType.INVALID_SCHEMES,
568
- message: createErrorMsg(ErrorMsg.INVALID_STRING_FORMAT, {
569
- placeholders: [errorFormat]
570
- }),
571
- data: data,
572
- errorScheme: stringScheme,
573
- isSchemeError: true
574
- });
575
- }
576
- formats = stringScheme.format;
577
- }
578
- const foundFormatMatching = formats.some((format) => {
579
- let valid = false;
580
- switch (format) {
581
- case StringFormat.EMAIL:
582
- valid = emailTester(valueAsString);
583
- break;
584
- case StringFormat.DATE:
585
- valid = dateFormatTester(valueAsString);
586
- break;
587
- case StringFormat.TIME:
588
- valid = timeFormatTester(valueAsString);
589
- break;
590
- case StringFormat.DATE_TIME:
591
- valid = dateTimeFormatTester(valueAsString);
592
- break;
593
- }
594
- return valid;
595
- });
596
- if (!foundFormatMatching) {
597
- if (!arrayTester(stringScheme.format)) {
598
- result = new EjvError({
599
- type: ErrorType.FORMAT,
600
- message: createErrorMsg(ErrorMsg.FORMAT, {
601
- placeholders: [stringScheme.format]
602
- }),
603
- data,
604
- path: _options.path,
605
- errorScheme: stringScheme,
606
- errorData: value
607
- });
608
- }
609
- else {
610
- result = new EjvError({
611
- type: ErrorType.FORMAT_ONE_OF,
612
- message: createErrorMsg(ErrorMsg.FORMAT_ONE_OF, {
613
- placeholders: [JSON.stringify(stringScheme.format)]
614
- }),
615
- data,
616
- path: _options.path,
617
- errorScheme: stringScheme,
618
- errorData: value
619
- });
620
- }
621
- break;
622
- }
623
- }
624
- if (definedTester(stringScheme.pattern)) {
625
- // check parameter
626
- if (stringScheme.pattern === null) {
627
- return new EjvError({
628
- type: ErrorType.INVALID_SCHEMES,
629
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
630
- placeholders: ['null']
631
- }),
632
- data: data,
633
- errorScheme: stringScheme,
634
- isSchemeError: true
635
- });
636
- }
637
- const isValidPattern = (pattern) => {
638
- return (stringTester(pattern) && minLengthTester(pattern, 1))
639
- || (regExpTester(pattern) && pattern.toString() !== '/(?:)/' && pattern.toString() !== '/null/');
640
- };
641
- const patternToString = (pattern) => {
642
- let regExpStr;
643
- if (pattern === null) {
644
- regExpStr = '/null/';
645
- }
646
- else if (stringTester(pattern)) {
647
- if (minLengthTester(pattern, 1)) {
648
- regExpStr = new RegExp(pattern).toString();
649
- }
650
- else {
651
- regExpStr = '//';
652
- }
653
- }
654
- else {
655
- regExpStr = pattern.toString();
656
- }
657
- // empty regular expression
658
- if (regExpStr === '/(?:)/') {
659
- regExpStr = '//';
660
- }
661
- return regExpStr;
662
- };
663
- const createArrayErrorMsg = (patternsAsArray) => {
664
- return '[' + patternsAsArray.map((onePattern) => {
665
- return patternToString(onePattern);
666
- }).join(', ') + ']';
667
- };
668
- if (arrayTester(stringScheme.pattern)) {
669
- const patternsAsArray = stringScheme.pattern;
670
- if (!minLengthTester(patternsAsArray, 1)) { // empty array
671
- return new EjvError({
672
- type: ErrorType.INVALID_SCHEMES,
673
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
674
- placeholders: [createArrayErrorMsg(patternsAsArray)]
675
- }),
676
- data: data,
677
- errorScheme: stringScheme,
678
- isSchemeError: true
679
- });
680
- }
681
- try {
682
- const regExpPatterns = patternsAsArray.map((pattern) => {
683
- if (!isValidPattern(pattern)) {
684
- throw new Error(createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
685
- placeholders: [createArrayErrorMsg(patternsAsArray)]
686
- }));
687
- }
688
- return new RegExp(pattern);
689
- });
690
- // check value
691
- const foundMatchPattern = regExpPatterns.some((regexp) => {
692
- return stringRegExpTester(valueAsString, regexp);
693
- });
694
- if (!foundMatchPattern) {
695
- result = new EjvError({
696
- type: ErrorType.PATTERN_ONE_OF,
697
- message: createErrorMsg(ErrorMsg.PATTERN_ONE_OF, {
698
- placeholders: [createArrayErrorMsg(patternsAsArray)]
699
- }),
700
- data,
701
- path: _options.path,
702
- errorScheme: stringScheme,
703
- errorData: value
704
- });
705
- break;
706
- }
707
- }
708
- catch (e) {
709
- return new EjvError({
710
- type: ErrorType.INVALID_SCHEMES,
711
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
712
- placeholders: [createArrayErrorMsg(patternsAsArray)]
713
- }),
714
- data: data,
715
- errorScheme: stringScheme,
716
- isSchemeError: true
717
- });
718
- }
719
- }
720
- else {
721
- const patternAsOne = stringScheme.pattern;
722
- if (!isValidPattern(patternAsOne)) {
723
- return new EjvError({
724
- type: ErrorType.INVALID_SCHEMES,
725
- message: createErrorMsg(ErrorMsg.INVALID_STRING_PATTERN, {
726
- placeholders: [patternToString(patternAsOne)]
727
- }),
728
- data: data,
729
- errorScheme: stringScheme,
730
- isSchemeError: true
731
- });
732
- }
733
- // check value
734
- const regExp = new RegExp(patternAsOne);
735
- if (!stringRegExpTester(valueAsString, regExp)) {
736
- result = new EjvError({
737
- type: ErrorType.PATTERN,
738
- message: createErrorMsg(ErrorMsg.PATTERN, {
739
- placeholders: [patternToString(patternAsOne)]
740
- }),
741
- data,
742
- path: _options.path,
743
- errorScheme: stringScheme,
744
- errorData: value
745
- });
746
- break;
747
- }
748
- }
749
- }
750
- break;
751
- }
752
- case DataType.OBJECT: {
753
- const valueAsObject = value;
754
- const objectScheme = scheme;
755
- if (definedTester(objectScheme.allowNoProperty)) {
756
- if (!booleanTester(objectScheme.allowNoProperty)) {
757
- return new EjvError({
758
- type: ErrorType.INVALID_SCHEMES,
759
- message: createErrorMsg(ErrorMsg.ALLOW_NO_PROPERTY_SHOULD_BE_BOOLEAN),
760
- data: data,
761
- errorScheme: objectScheme,
762
- isSchemeError: true
763
- });
764
- }
765
- if (!objectScheme.allowNoProperty && !hasPropertyTester(valueAsObject)) {
766
- result = new EjvError({
767
- type: ErrorType.PROPERTY,
768
- message: ErrorMsg.PROPERTY,
769
- data,
770
- path: _options.path,
771
- errorScheme: objectScheme,
772
- errorData: value
773
- });
774
- break;
775
- }
776
- }
777
- if (definedTester(objectScheme.properties)) {
778
- if (!arrayTester(objectScheme.properties)) {
779
- return new EjvError({
780
- type: ErrorType.INVALID_SCHEMES,
781
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_BE_ARRAY),
782
- data: data,
783
- errorScheme: objectScheme,
784
- isSchemeError: true
785
- });
786
- }
787
- const properties = objectScheme.properties;
788
- if (!minLengthTester(properties, 1)) {
789
- return new EjvError({
790
- type: ErrorType.INVALID_SCHEMES,
791
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_HAVE_ITEMS),
792
- data: data,
793
- errorScheme: objectScheme,
794
- isSchemeError: true
795
- });
796
- }
797
- if (!arrayTypeOfTester(properties, DataType.OBJECT)) {
798
- return new EjvError({
799
- type: ErrorType.INVALID_SCHEMES,
800
- message: createErrorMsg(ErrorMsg.PROPERTIES_SHOULD_BE_ARRAY_OF_OBJECT),
801
- data: data,
802
- errorScheme: objectScheme,
803
- isSchemeError: true
804
- });
805
- }
806
- if (!objectTester(value)) {
807
- result = new EjvError({
808
- type: ErrorType.TYPE_MISMATCH,
809
- message: createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
810
- placeholders: ['object']
811
- }),
812
- data,
813
- path: _options.path,
814
- errorScheme: objectScheme,
815
- errorData: value
816
- });
817
- break;
818
- }
819
- const partialData = data[key];
820
- const partialScheme = objectScheme.properties;
821
- scheme.parent = objectScheme;
822
- // call recursively
823
- result = _ejv(partialData, partialScheme, _options);
824
- if (result) {
825
- // inject original data
826
- result.data = data;
827
- }
828
- }
829
- break;
830
- }
831
- case DataType.DATE: {
832
- const valueAsDate = value;
833
- const dateScheme = scheme;
834
- const parentDateScheme = scheme.parent;
835
- if (definedTester(dateScheme.min)
836
- || definedTester(parentDateScheme?.min)) {
837
- const minDateCandidate = dateScheme.min || parentDateScheme?.min;
838
- if (!((stringTester(minDateCandidate)
839
- && (dateFormatTester(minDateCandidate)
840
- || dateTimeFormatTester(minDateCandidate)))
841
- || dateTester(minDateCandidate))) {
842
- return new EjvError({
843
- type: ErrorType.INVALID_SCHEMES,
844
- message: createErrorMsg(ErrorMsg.MIN_DATE_SHOULD_BE_DATE_OR_STRING),
845
- data: data,
846
- errorScheme: dateScheme,
847
- isSchemeError: true
848
- });
849
- }
850
- const effectiveMin = new Date(minDateCandidate);
851
- if (definedTester(dateScheme.exclusiveMin)) {
852
- if (!booleanTester(dateScheme.exclusiveMin)) {
853
- return new EjvError({
854
- type: ErrorType.INVALID_SCHEMES,
855
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN),
856
- data: data,
857
- errorScheme: dateScheme,
858
- isSchemeError: true
859
- });
860
- }
861
- if (dateScheme.exclusiveMin) {
862
- if (!exclusiveMinDateTester(valueAsDate, effectiveMin)) {
863
- result = new EjvError({
864
- type: ErrorType.AFTER_DATE,
865
- message: createErrorMsg(ErrorMsg.AFTER_DATE, {
866
- placeholders: [effectiveMin.toISOString()]
867
- }),
868
- data,
869
- path: _options.path,
870
- errorScheme: dateScheme,
871
- errorData: value
872
- });
873
- break;
874
- }
875
- }
876
- else {
877
- if (!minDateTester(valueAsDate, effectiveMin)) {
878
- result = new EjvError({
879
- type: ErrorType.AFTER_OR_SAME_DATE,
880
- message: createErrorMsg(ErrorMsg.AFTER_OR_SAME_DATE, {
881
- placeholders: [effectiveMin.toISOString()]
882
- }),
883
- data,
884
- path: _options.path,
885
- errorScheme: dateScheme,
886
- errorData: value
887
- });
888
- break;
889
- }
890
- }
891
- }
892
- else {
893
- if (!minDateTester(valueAsDate, effectiveMin)) {
894
- result = new EjvError({
895
- type: ErrorType.AFTER_OR_SAME_DATE,
896
- message: createErrorMsg(ErrorMsg.AFTER_OR_SAME_DATE, {
897
- placeholders: [effectiveMin.toISOString()]
898
- }),
899
- data,
900
- path: _options.path,
901
- errorScheme: dateScheme,
902
- errorData: value
903
- });
904
- break;
905
- }
906
- }
907
- }
908
- if (definedTester(dateScheme.max)
909
- || definedTester(parentDateScheme?.max)) {
910
- const maxDateCandidate = dateScheme.max || parentDateScheme?.max;
911
- if (!((stringTester(maxDateCandidate)
912
- && (dateFormatTester(maxDateCandidate)
913
- || dateTimeFormatTester(maxDateCandidate)))
914
- || dateTester(maxDateCandidate))) {
915
- return new EjvError({
916
- type: ErrorType.INVALID_SCHEMES,
917
- message: createErrorMsg(ErrorMsg.MAX_DATE_SHOULD_BE_DATE_OR_STRING),
918
- data: data,
919
- errorScheme: dateScheme,
920
- isSchemeError: true
921
- });
922
- }
923
- const effectiveMax = new Date(maxDateCandidate);
924
- if (definedTester(dateScheme.exclusiveMax)) {
925
- if (!booleanTester(dateScheme.exclusiveMax)) {
926
- return new EjvError({
927
- type: ErrorType.INVALID_SCHEMES,
928
- message: createErrorMsg(ErrorMsg.EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN),
929
- data: data,
930
- errorScheme: dateScheme,
931
- isSchemeError: true
932
- });
933
- }
934
- }
935
- if (dateScheme.exclusiveMax) {
936
- if (!exclusiveMaxDateTester(valueAsDate, effectiveMax)) {
937
- result = new EjvError({
938
- type: ErrorType.BEFORE_DATE,
939
- message: createErrorMsg(ErrorMsg.BEFORE_DATE, {
940
- placeholders: [effectiveMax.toISOString()]
941
- }),
942
- data,
943
- path: _options.path,
944
- errorScheme: dateScheme,
945
- errorData: value
946
- });
947
- break;
948
- }
949
- }
950
- else {
951
- if (!maxDateTester(valueAsDate, effectiveMax)) {
952
- result = new EjvError({
953
- type: ErrorType.BEFORE_OR_SAME_DATE,
954
- message: createErrorMsg(ErrorMsg.BEFORE_OR_SAME_DATE, {
955
- placeholders: [effectiveMax.toISOString()]
956
- }),
957
- data,
958
- path: _options.path,
959
- errorScheme: dateScheme,
960
- errorData: value
961
- });
962
- break;
963
- }
964
- }
965
- }
966
- break;
967
- }
968
- case DataType.ARRAY: {
969
- const valueAsArray = value;
970
- const arrayScheme = scheme;
971
- if (definedTester(arrayScheme.length)) {
972
- const length = arrayScheme.length;
973
- if (!(numberTester(length) && integerTester(length))) {
974
- return new EjvError({
975
- type: ErrorType.INVALID_SCHEMES,
976
- message: createErrorMsg(ErrorMsg.LENGTH_SHOULD_BE_INTEGER),
977
- data: data,
978
- errorScheme: arrayScheme,
979
- isSchemeError: true
980
- });
981
- }
982
- if (!lengthTester(valueAsArray, length)) {
983
- result = new EjvError({
984
- type: ErrorType.LENGTH,
985
- message: createErrorMsg(ErrorMsg.LENGTH, {
986
- placeholders: ['' + length]
987
- }),
988
- data,
989
- path: _options.path,
990
- errorScheme: arrayScheme,
991
- errorData: value
992
- });
993
- break;
994
- }
995
- }
996
- if (definedTester(arrayScheme.minLength)) {
997
- const minLength = arrayScheme.minLength;
998
- if (!(numberTester(arrayScheme.minLength) && integerTester(minLength))) {
999
- return new EjvError({
1000
- type: ErrorType.INVALID_SCHEMES,
1001
- message: createErrorMsg(ErrorMsg.MIN_LENGTH_SHOULD_BE_INTEGER),
1002
- data: data,
1003
- errorScheme: arrayScheme,
1004
- isSchemeError: true
1005
- });
1006
- }
1007
- if (!minLengthTester(valueAsArray, minLength)) {
1008
- result = new EjvError({
1009
- type: ErrorType.MIN_LENGTH,
1010
- message: createErrorMsg(ErrorMsg.MIN_LENGTH, {
1011
- placeholders: ['' + minLength]
1012
- }),
1013
- data,
1014
- path: _options.path,
1015
- errorScheme: arrayScheme,
1016
- errorData: value
1017
- });
1018
- break;
1019
- }
1020
- }
1021
- if (definedTester(arrayScheme.maxLength)) {
1022
- const maxLength = arrayScheme.maxLength;
1023
- if (!(numberTester(arrayScheme.maxLength) && integerTester(maxLength))) {
1024
- return new EjvError({
1025
- type: ErrorType.INVALID_SCHEMES,
1026
- message: createErrorMsg(ErrorMsg.MAX_LENGTH_SHOULD_BE_INTEGER),
1027
- data: data,
1028
- errorScheme: arrayScheme,
1029
- isSchemeError: true
1030
- });
1031
- }
1032
- if (!maxLengthTester(valueAsArray, maxLength)) {
1033
- result = new EjvError({
1034
- type: ErrorType.MAX_LENGTH,
1035
- message: createErrorMsg(ErrorMsg.MAX_LENGTH, {
1036
- placeholders: ['' + maxLength]
1037
- }),
1038
- data,
1039
- path: _options.path,
1040
- errorScheme: arrayScheme,
1041
- errorData: value
1042
- });
1043
- break;
1044
- }
1045
- }
1046
- if (definedTester(arrayScheme.unique)) {
1047
- if (!booleanTester(arrayScheme.unique)) {
1048
- return new EjvError({
1049
- type: ErrorType.INVALID_SCHEMES,
1050
- message: createErrorMsg(ErrorMsg.UNIQUE_SHOULD_BE_BOOLEAN),
1051
- data: data,
1052
- errorScheme: arrayScheme,
1053
- isSchemeError: true
1054
- });
1055
- }
1056
- if (arrayScheme.unique && !uniqueItemsTester(valueAsArray)) {
1057
- result = new EjvError({
1058
- type: ErrorType.UNIQUE_ITEMS,
1059
- message: ErrorMsg.UNIQUE_ITEMS,
1060
- data,
1061
- path: _options.path,
1062
- errorScheme: arrayScheme,
1063
- errorData: value
1064
- });
1065
- break;
1066
- }
1067
- }
1068
- if (definedTester(arrayScheme.items)) {
1069
- // convert array to object
1070
- if (valueAsArray.length > 0) {
1071
- const now = new Date();
1072
- const tempKeyArr = valueAsArray.map((_value, i) => {
1073
- return '' + (+now + i);
1074
- });
1075
- if (stringTester(arrayScheme.items) // by DataType
1076
- || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items, DataType.STRING)) // by DataType[]
1077
- ) {
1078
- const itemTypes = (arrayTester(arrayScheme.items)
1079
- ? arrayScheme.items
1080
- : [arrayScheme.items]);
1081
- const itemTypeError = itemTypes.find((type) => {
1082
- return !definedTester(type)
1083
- || !stringTester(type)
1084
- || !enumTester(type, allDataType);
1085
- });
1086
- if (itemTypeError) {
1087
- return new EjvError({
1088
- type: ErrorType.INVALID_SCHEMES,
1089
- message: createErrorMsg(ErrorMsg.SCHEMES_HAS_INVALID_TYPE, {
1090
- placeholders: [itemTypeError]
1091
- }),
1092
- data: data,
1093
- errorScheme: scheme,
1094
- isSchemeError: true
1095
- });
1096
- }
1097
- const partialData = {};
1098
- const partialSchemes = [];
1099
- tempKeyArr.forEach((tempKey, i) => {
1100
- partialData[tempKey] = valueAsArray[i];
1101
- partialSchemes.push({
1102
- key: tempKey,
1103
- type: itemTypes
1104
- });
1105
- });
1106
- scheme.parent = arrayScheme;
1107
- // call recursively
1108
- const partialResult = _ejv(partialData, partialSchemes, _options);
1109
- // convert new EjvError
1110
- if (partialResult) {
1111
- let errorMsg;
1112
- if (arrayTester(arrayScheme.items)) {
1113
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_TYPE, {
1114
- placeholders: [JSON.stringify(itemTypes)]
1115
- });
1116
- }
1117
- else {
1118
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_TYPE, {
1119
- placeholders: [arrayScheme.items]
1120
- });
1121
- }
1122
- const partialKeys = (partialResult.path || '').split('/');
1123
- const partialKey = partialKeys[partialKeys.length - 1];
1124
- const partialScheme = partialSchemes.find((_scheme) => {
1125
- return _scheme.key === partialKey;
1126
- });
1127
- const partialKeyIndex = partialSchemes.indexOf(partialScheme);
1128
- result = new EjvError({
1129
- type: ErrorType.ITEMS_TYPE,
1130
- message: errorMsg,
1131
- data,
1132
- path: [..._options.path, '' + partialKeyIndex],
1133
- errorScheme: partialScheme,
1134
- errorData: partialData[partialKey]
1135
- });
1136
- }
1137
- break;
1138
- }
1139
- else if ((objectTester(arrayScheme.items) && arrayScheme.items !== null) // by Scheme
1140
- || (arrayTester(arrayScheme.items) && arrayTypeOfTester(arrayScheme.items, DataType.OBJECT)) // by Scheme[]
1141
- ) {
1142
- const itemsAsSchemes = arrayTester(arrayScheme.items)
1143
- ? arrayScheme.items
1144
- : [arrayScheme.items];
1145
- let partialError = null;
1146
- // use for() instead of forEach() to break
1147
- const valueLength = valueAsArray.length;
1148
- for (let arrIndex = 0; arrIndex < valueLength; arrIndex++) {
1149
- const oneValue = valueAsArray[arrIndex];
1150
- const partialData = {};
1151
- const partialSchemes = [];
1152
- const tempKeyForThisValue = tempKeyArr[arrIndex];
1153
- partialData[tempKeyForThisValue] = oneValue;
1154
- partialSchemes.push(...itemsAsSchemes.map((oneScheme) => {
1155
- const newScheme = clone(oneScheme); // divide instance
1156
- newScheme.key = tempKeyForThisValue;
1157
- return newScheme;
1158
- }));
1159
- const partialResults = partialSchemes.map((partialScheme) => {
1160
- // call recursively
1161
- const partialResult = _ejv(partialData, [partialScheme], _options);
1162
- if (partialResult) {
1163
- partialResult.path = (partialResult.path || '').replace(tempKeyForThisValue, '' + arrIndex);
1164
- }
1165
- return partialResult;
1166
- });
1167
- if (!partialResults.some((oneResult) => oneResult === null)) {
1168
- partialError = partialResults.find((oneResult) => {
1169
- return !!oneResult;
1170
- });
1171
- break;
1172
- }
1173
- }
1174
- if (partialError) {
1175
- let errorType;
1176
- let errorMsg;
1177
- if (!!itemsAsSchemes && itemsAsSchemes.length > 1) {
1178
- errorType = ErrorType.ITEMS_SCHEMES;
1179
- errorMsg = createErrorMsg(ErrorMsg.ITEMS_SCHEMES, {
1180
- placeholders: [JSON.stringify(itemsAsSchemes)]
1181
- });
1182
- }
1183
- else {
1184
- errorType = partialError.type;
1185
- errorMsg = partialError.message;
1186
- if (errorType === ErrorType.REQUIRED) {
1187
- // REQUIRED in array is TYPE_MISMATCH except with nullable === true
1188
- errorType = ErrorType.TYPE_MISMATCH;
1189
- errorMsg = createErrorMsg(ErrorMsg.TYPE_MISMATCH, {
1190
- placeholders: [JSON.stringify(arrayScheme.items)]
1191
- });
1192
- }
1193
- }
1194
- result = new EjvError({
1195
- type: errorType,
1196
- message: errorMsg,
1197
- data
1198
- });
1199
- if (errorType === ErrorType.INVALID_SCHEMES) {
1200
- result.errorScheme = arrayScheme;
1201
- result.isSchemeError = true;
1202
- result.isDataError = false;
1203
- }
1204
- else {
1205
- result.path = partialError.path;
1206
- result.errorData = partialError.errorData;
1207
- }
1208
- break;
1209
- }
1210
- }
1211
- else {
1212
- return new EjvError({
1213
- type: ErrorType.INVALID_SCHEMES,
1214
- message: createErrorMsg(ErrorMsg.INVALID_ITEMS_SCHEME, {
1215
- placeholders: [JSON.stringify(arrayScheme.items)]
1216
- }),
1217
- data: data,
1218
- errorScheme: arrayScheme,
1219
- isSchemeError: true
1220
- });
1221
- }
1222
- }
1223
- }
1224
- break;
1225
- }
1226
- }
1227
- if (result) {
1228
- break;
1229
- }
1230
- }
1231
- if (result !== null && definedTester(options.customErrorMsg)) {
1232
- const customErrorMsgObj = options.customErrorMsg;
1233
- // override error message
1234
- const customMsg = customErrorMsgObj[result.type];
1235
- if (definedTester(customMsg)) {
1236
- result.message = customMsg;
1237
- }
1238
- }
1239
- return result;
1240
- };
1241
- export const ejv = (data, schemes, options) => {
1242
- // check data itself
1243
- if (!definedTester(data) || !objectTester(data) || data === null) {
1244
- return new EjvError({
1245
- type: ErrorType.NO_DATA,
1246
- message: ErrorMsg.NO_DATA,
1247
- data: data,
1248
- path: undefined,
1249
- errorScheme: undefined,
1250
- errorData: data,
1251
- isSchemeError: false
1252
- });
1253
- }
1254
- const internalOption = (options
1255
- ? {
1256
- ...options
1257
- }
1258
- : {});
1259
- if (!definedTester(internalOption.path)) {
1260
- internalOption.path = [];
1261
- }
1262
- return _ejv(data, schemes, internalOption);
1263
- };
1264
- //# sourceMappingURL=ejv.js.map