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/.mocharc.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "require": [
3
- "ts-node/register"
3
+ "tsx"
4
4
  ],
5
5
  "spec": [
6
6
  "spec/**/*.ts"
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Change Log
2
2
 
3
+ # 2.1.0
4
+
5
+ - improvement
6
+ - `notEnum` added
7
+ - README indent optimized
8
+ - dependencies version up
9
+ - `typescript@5.6.2`
10
+ - `eslint@9.12.0`
11
+
12
+ # 2.0.5
13
+
14
+ - bug fix
15
+ - `min`, `max` error fix
16
+
17
+ # 2.0.3
18
+
19
+ - spec error fix
20
+
3
21
  # 2.0.2
4
22
 
5
23
  - improvement
package/README-KR.md CHANGED
@@ -45,16 +45,17 @@ var ejv = _ejv.ejv;
45
45
  - TypeScript
46
46
 
47
47
  ```typescript
48
- const error : null | EjvError = ejv({
49
- a : 10
48
+ const error: null | EjvError = ejv({
49
+ a: 10
50
50
  }, [{
51
- key : 'a',
52
- type : 'number'
51
+ key: 'a',
52
+ type: 'number'
53
53
  }]);
54
54
 
55
55
  if (!error) {
56
56
  console.log('검사 성공');
57
- } else {
57
+ }
58
+ else {
58
59
  console.log('검사 실패');
59
60
  }
60
61
  ```
@@ -63,10 +64,10 @@ if (!error) {
63
64
 
64
65
  ```javascript
65
66
  var error = ejv({
66
- a : 10
67
+ a: 10
67
68
  }, [{
68
- key : 'a',
69
- type : 'number'
69
+ key: 'a',
70
+ type: 'number'
70
71
  }]);
71
72
 
72
73
  if (!error) {
@@ -111,8 +112,8 @@ JSON 객체에 있는 `a` 프로퍼티를 검사하려면 `key : 'a'`라고 지
111
112
  ejv({
112
113
  // 빈 객체
113
114
  }, [{
114
- key : 'a',
115
- optional : true // 프로퍼티가 선언되지 않아도 에러가 발생하지 않습니다.
115
+ key: 'a',
116
+ optional: true // 프로퍼티가 선언되지 않아도 에러가 발생하지 않습니다.
116
117
  }]);
117
118
  ```
118
119
 
@@ -123,10 +124,10 @@ ejv({
123
124
 
124
125
  ```typescript
125
126
  ejv({
126
- a : null
127
+ a: null
127
128
  }, [{
128
- key : 'a',
129
- nullable : true
129
+ key: 'a',
130
+ nullable: true
130
131
  }]);
131
132
  ```
132
133
 
@@ -137,36 +138,36 @@ ejv({
137
138
 
138
139
  ```typescript
139
140
  ejv({
140
- a : 1,
141
- b : 'hello'
141
+ a: 1,
142
+ b: 'hello'
142
143
  }, [{
143
- key : 'a',
144
- type : 'number',
145
- enum : [1, 2, 3] // 1, 2, 3 값을 허용합니다.
144
+ key: 'a',
145
+ type: 'number',
146
+ enum: [1, 2, 3] // 1, 2, 3 값을 허용합니다.
146
147
  }, {
147
- key : 'b',
148
- type : 'string',
149
- enum : ['hello', 'ejv'] // 'hello'나 'ejv' 값을 허용합니다.
148
+ key: 'b',
149
+ type: 'string',
150
+ enum: ['hello', 'ejv'] // 'hello'나 'ejv' 값을 허용합니다.
150
151
  }]);
151
152
  ```
152
153
 
153
- - `enumReverse : number[] | string[]`
154
+ - `notEnumse : number[] | string[]`
154
155
 
155
156
  배열로 전달되는 값을 허용하지 않습니다. 이 옵션의 결과는 `enum` 옵션의 결과와 반대입니다.
156
157
  이 옵션은 `type : number`과 `type : string` 검사규칙에 사용할 수 있습니다.
157
158
 
158
159
  ```typescript
159
160
  ejv({
160
- a : 1,
161
- b : 'hello'
161
+ a: 1,
162
+ b: 'hello'
162
163
  }, [{
163
- key : 'a',
164
- type : 'number',
165
- enumReverse : [1, 2, 3] // 1, 2, 3 값을 허용하지 않습니다.
164
+ key: 'a',
165
+ type: 'number',
166
+ notEnum: [1, 2, 3] // 1, 2, 3 값을 허용하지 않습니다.
166
167
  }, {
167
- key : 'b',
168
- type : 'string',
169
- enumReverse : ['hello', 'ejv'] // 'hello'나 'ejv' 값을 허용하지 않습니다.
168
+ key: 'b',
169
+ type: 'string',
170
+ notEnum: ['hello', 'ejv'] // 'hello'나 'ejv' 값을 허용하지 않습니다.
170
171
  }]);
171
172
  ```
172
173
 
@@ -185,17 +186,17 @@ ejv({
185
186
 
186
187
  ```typescript
187
188
  ejv({
188
- num1 : 10,
189
- num2 : 10
189
+ num1: 10,
190
+ num2: 10
190
191
  }, [{
191
- key : 'num1',
192
- type : 'number',
193
- min : 10 // 성공
192
+ key: 'num1',
193
+ type: 'number',
194
+ min: 10 // 성공
194
195
  }, {
195
- key : 'num2',
196
- type : 'number',
197
- min : 10,
198
- exclusiveMin : true // 실패
196
+ key: 'num2',
197
+ type: 'number',
198
+ min: 10,
199
+ exclusiveMin: true // 실패
199
200
  }]);
200
201
  ```
201
202
 
@@ -212,17 +213,17 @@ ejv({
212
213
 
213
214
  ```typescript
214
215
  ejv({
215
- num1 : 10,
216
- num2 : 10
216
+ num1: 10,
217
+ num2: 10
217
218
  }, [{
218
- key : 'num1',
219
- type : 'number',
220
- max : 10 // 성공
219
+ key: 'num1',
220
+ type: 'number',
221
+ max: 10 // 성공
221
222
  }, {
222
- key : 'num2',
223
- type : 'number',
224
- max : 10,
225
- exclusiveMax : true // 실패
223
+ key: 'num2',
224
+ type: 'number',
225
+ max: 10,
226
+ exclusiveMax: true // 실패
226
227
  }]);
227
228
  ```
228
229
 
@@ -232,10 +233,10 @@ ejv({
232
233
  배열로 지정된 경우에는 주어진 형식 중 하나에 해당되면 검사를 통과합니다.
233
234
  사용할 수 있는 값은 다음과 같습니다.
234
235
 
235
- 포맷|예
236
- ---|---
237
- `'integer'`|정수만 허용합니다. ex) -1, 0, 1, ...
238
- `'index'`|인덱스만 허용합니다. `format : 'integer', min : 0`을 설정한 것과 같습니다. ex) 0, 1, 2, ...
236
+ 포맷 | 예
237
+ -------------|--------------------------------------------------------------------------
238
+ `'integer'` | 정수만 허용합니다. ex) -1, 0, 1, ...
239
+ `'index'` | 인덱스만 허용합니다. `format : 'integer', min : 0`을 설정한 것과 같습니다. ex) 0, 1, 2, ...
239
240
 
240
241
  #### `'string'` 타입 옵션
241
242
 
@@ -243,12 +244,12 @@ ejv({
243
244
 
244
245
  문자열의 형식을 검사합니다. 배열로 지정된 경우에는 주어진 형식 중 하나에 해당되면 검사를 통과합니다. 사용할 수 있는 값은 다음과 같습니다.
245
246
 
246
- 포맷|예
247
- ---|---
248
- `'email'`|이메일 형식인지 검사합니다. [RFC 5322 3.4.1](https://tools.ietf.org/html/rfc5322#section-3.4.1) 스펙을 기준으로 합니다. ex) `'email@domain.com'`
249
- `'date'`|날짜 형식인지 검사합니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 스펙을 기준으로 합니다. ex) `'2018-12-29'`
250
- `'time'`|시간 형식인지 검사합니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 스펙을 기준으로 합니다. ex) `'21:07:35'`
251
- `'date-time'`|날짜-시간 형식인지 검사합니다. [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) 스펙과 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 스펙을 기준으로 합니다. ex) `'2018-12-29T21:07:35Z'`
247
+ 포맷 | 예
248
+ ---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------
249
+ `'email'` | 이메일 형식인지 검사합니다. [RFC 5322 3.4.1](https://tools.ietf.org/html/rfc5322#section-3.4.1) 스펙을 기준으로 합니다. ex) `'email@domain.com'`
250
+ `'date'` | 날짜 형식인지 검사합니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 스펙을 기준으로 합니다. ex) `'2018-12-29'`
251
+ `'time'` | 시간 형식인지 검사합니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 스펙을 기준으로 합니다. ex) `'21:07:35'`
252
+ `'date-time'` | 날짜-시간 형식인지 검사합니다. [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) 스펙과 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 스펙을 기준으로 합니다. ex) `'2018-12-29T21:07:35Z'`
252
253
 
253
254
  - `length : number`
254
255
 
@@ -256,11 +257,11 @@ ejv({
256
257
 
257
258
  ```typescript
258
259
  ejv({
259
- str : 'hello'
260
+ str: 'hello'
260
261
  }, [{
261
- key : 'str',
262
- type : 'string',
263
- length : 5
262
+ key: 'str',
263
+ type: 'string',
264
+ length: 5
264
265
  }]);
265
266
  ````
266
267
 
@@ -270,11 +271,11 @@ ejv({
270
271
 
271
272
  ```typescript
272
273
  ejv({
273
- str : 'hello'
274
+ str: 'hello'
274
275
  }, [{
275
- key : 'str',
276
- type : 'string',
277
- minLength : 5
276
+ key: 'str',
277
+ type: 'string',
278
+ minLength: 5
278
279
  }]);
279
280
  ````
280
281
 
@@ -284,11 +285,11 @@ ejv({
284
285
 
285
286
  ```typescript
286
287
  ejv({
287
- str : 'hello'
288
+ str: 'hello'
288
289
  }, [{
289
- key : 'str',
290
- type : 'string',
291
- maxLength : 5
290
+ key: 'str',
291
+ type: 'string',
292
+ maxLength: 5
292
293
  }]);
293
294
  ````
294
295
 
@@ -300,23 +301,23 @@ ejv({
300
301
 
301
302
  ```typescript
302
303
  ejv({
303
- str : 'abc'
304
+ str: 'abc'
304
305
  }, [{
305
- key : 'str',
306
- type : 'string',
307
- pattern : 'abc'
306
+ key: 'str',
307
+ type: 'string',
308
+ pattern: 'abc'
308
309
  }, {
309
- key : 'str',
310
- type : 'string',
311
- pattern : ['abc', 'ac']
310
+ key: 'str',
311
+ type: 'string',
312
+ pattern: ['abc', 'ac']
312
313
  }, {
313
- key : 'str',
314
- type : 'string',
315
- pattern : /abc/
314
+ key: 'str',
315
+ type: 'string',
316
+ pattern: /abc/
316
317
  }, {
317
- key : 'str',
318
- type : 'string',
319
- pattern : [/abc/, /ac/]
318
+ key: 'str',
319
+ type: 'string',
320
+ pattern: [/abc/, /ac/]
320
321
  }]);
321
322
  ```
322
323
 
@@ -330,11 +331,11 @@ ejv({
330
331
 
331
332
  ```typescript
332
333
  ejv({
333
- obj : {}
334
+ obj: {}
334
335
  }, [{
335
- key : 'obj',
336
- type : 'object',
337
- allowNoProperty : false // 실패
336
+ key: 'obj',
337
+ type: 'object',
338
+ allowNoProperty: false // 실패
338
339
  }]);
339
340
  ```
340
341
 
@@ -345,19 +346,19 @@ ejv({
345
346
 
346
347
  ```typescript
347
348
  ejv({
348
- data : {
349
- num : 10,
350
- str : 'ejv'
349
+ data: {
350
+ num: 10,
351
+ str: 'ejv'
351
352
  }
352
353
  }, [{
353
- key : 'data',
354
- type : 'object',
355
- properties : [{
356
- key : 'num',
357
- type : 'number'
354
+ key: 'data',
355
+ type: 'object',
356
+ properties: [{
357
+ key: 'num',
358
+ type: 'number'
358
359
  }, {
359
- key : 'str',
360
- type : 'string'
360
+ key: 'str',
361
+ type: 'string'
361
362
  }]
362
363
  }]);
363
364
  ```
@@ -378,25 +379,25 @@ ejv({
378
379
 
379
380
  ```typescript
380
381
  ejv({
381
- date1 : new Date(2019, 11, 30)
382
+ date1: new Date(2019, 11, 30)
382
383
  }, [{
383
- key : 'date1',
384
- type : 'date',
385
- min : new Date(2019, 11, 30) // 성공
384
+ key: 'date1',
385
+ type: 'date',
386
+ min: new Date(2019, 11, 30) // 성공
386
387
  }, {
387
- key : 'date1',
388
- type : 'date',
389
- min : new Date(2019, 11, 30),
390
- exclusiveMin : true // 실패
388
+ key: 'date1',
389
+ type: 'date',
390
+ min: new Date(2019, 11, 30),
391
+ exclusiveMin: true // 실패
391
392
  }, {
392
- key : 'date1',
393
- type : 'date',
394
- min : '2019-12-30T00:00:00Z' // 성공
393
+ key: 'date1',
394
+ type: 'date',
395
+ min: '2019-12-30T00:00:00Z' // 성공
395
396
  }, {
396
- key : 'date1',
397
- type : 'date',
398
- min : '2019-12-30T00:00:00Z',
399
- exclusiveMin : true // 실패
397
+ key: 'date1',
398
+ type: 'date',
399
+ min: '2019-12-30T00:00:00Z',
400
+ exclusiveMin: true // 실패
400
401
  }]);
401
402
  ```
402
403
 
@@ -414,25 +415,25 @@ ejv({
414
415
 
415
416
  ```typescript
416
417
  ejv({
417
- date1 : new Date(2019, 11, 30)
418
+ date1: new Date(2019, 11, 30)
418
419
  }, [{
419
- key : 'date1',
420
- type : 'date',
421
- max : new Date(2019, 11, 30) // 성공
420
+ key: 'date1',
421
+ type: 'date',
422
+ max: new Date(2019, 11, 30) // 성공
422
423
  }, {
423
- key : 'date1',
424
- type : 'date',
425
- max : new Date(2019, 11, 30),
426
- exclusiveMax : true // 실패
424
+ key: 'date1',
425
+ type: 'date',
426
+ max: new Date(2019, 11, 30),
427
+ exclusiveMax: true // 실패
427
428
  }, {
428
- key : 'date1',
429
- type : 'date',
430
- max : '2019-12-30T00:00:00Z' // 성공
429
+ key: 'date1',
430
+ type: 'date',
431
+ max: '2019-12-30T00:00:00Z' // 성공
431
432
  }, {
432
- key : 'date1',
433
- type : 'date',
434
- max : '2019-12-30T00:00:00Z',
435
- exclusiveMax : true // 실패
433
+ key: 'date1',
434
+ type: 'date',
435
+ max: '2019-12-30T00:00:00Z',
436
+ exclusiveMax: true // 실패
436
437
  }]);
437
438
  ```
438
439
 
@@ -444,11 +445,11 @@ ejv({
444
445
 
445
446
  ```typescript
446
447
  ejv({
447
- arr : [1, 2]
448
+ arr: [1, 2]
448
449
  }, [{
449
- key : 'arr',
450
- type : 'array',
451
- length : 2
450
+ key: 'arr',
451
+ type: 'array',
452
+ length: 2
452
453
  }]);
453
454
  ````
454
455
 
@@ -458,11 +459,11 @@ ejv({
458
459
 
459
460
  ```typescript
460
461
  ejv({
461
- arr : [1, 2]
462
+ arr: [1, 2]
462
463
  }, [{
463
- key : 'arr',
464
- type : 'array',
465
- minLength : 2
464
+ key: 'arr',
465
+ type: 'array',
466
+ minLength: 2
466
467
  }]);
467
468
  ````
468
469
 
@@ -472,11 +473,11 @@ ejv({
472
473
 
473
474
  ```typescript
474
475
  ejv({
475
- arr : [1, 2, 3]
476
+ arr: [1, 2, 3]
476
477
  }, [{
477
- key : 'arr',
478
- type : 'array',
479
- maxLength : 3
478
+ key: 'arr',
479
+ type: 'array',
480
+ maxLength: 3
480
481
  }]);
481
482
  ````
482
483
 
@@ -494,14 +495,14 @@ ejv({
494
495
 
495
496
  ```typescript
496
497
  ejv({
497
- arr : [1, 2, 3]
498
+ arr: [1, 2, 3]
498
499
  }, [{
499
- key : 'arr',
500
- type : 'array',
501
- items : [{
502
- type : 'number',
503
- min : 1,
504
- max : 3
500
+ key: 'arr',
501
+ type: 'array',
502
+ items: [{
503
+ type: 'number',
504
+ min: 1,
505
+ max: 3
505
506
  }]
506
507
  }])
507
508
  ```
@@ -511,15 +512,15 @@ ejv({
511
512
  검사할 프로퍼티의 타입을 지정합니다.
512
513
  사용할 수 있는 값은 다음과 같습니다.
513
514
 
514
- 타입|예
515
- ---|---
516
- `'boolean'`|`true`, `false`
517
- `'number'`|`0`, `1`, `1.5`, ...
518
- `'string'`|`'ejv'`, `'hello'`, ...
519
- `'object'`|`{}`, `{ key : 123 }`, ...
520
- `'date'`|`new Date`
521
- `'regexp'`|`new RegExp(/./)`, `/./`, ...
522
- `'array'`|`[]`, `[1, 2, 3]`, ...
515
+ 타입 | 예
516
+ -------------|-------------------------------
517
+ `'boolean'` | `true`, `false`
518
+ `'number'` | `0`, `1`, `1.5`, ...
519
+ `'string'` | `'ejv'`, `'hello'`, ...
520
+ `'object'` | `{}`, `{ key : 123 }`, ...
521
+ `'date'` | `new Date`
522
+ `'regexp'` | `new RegExp(/./)`, `/./`, ...
523
+ `'array'` | `[]`, `[1, 2, 3]`, ...
523
524
 
524
525
  ## `EjvError`
525
526
 
@@ -554,11 +555,11 @@ ejv({
554
555
  ```typescript
555
556
  import { ejv, EjvError } from 'ejv';
556
557
 
557
- const error : null | EjvError = ejv({
558
- a : 10
558
+ const error: null | EjvError = ejv({
559
+ a: 10
559
560
  }, [{
560
- key : 'a',
561
- type : 'string'
561
+ key: 'a',
562
+ type: 'string'
562
563
  }]);
563
564
 
564
565
  console.log(error.type); // 'TYPE_MISMATCH'
@@ -581,14 +582,14 @@ ejv가 제공하는 에러 메시지를 다른 내용으로 변경하려면 `Ejv
581
582
  ```typescript
582
583
  import { ejv, EjvError, ErrorType } from 'ejv';
583
584
 
584
- const error : null | EjvError = ejv({
585
- a : 10
585
+ const error: null | EjvError = ejv({
586
+ a: 10
586
587
  }, [{
587
- key : 'a',
588
- type : 'string'
588
+ key: 'a',
589
+ type: 'string'
589
590
  }, {
590
- customErrorMsg : {
591
- [ErrorType.TYPE_MISMATCH] : 'property "a" should be a "string".'
591
+ customErrorMsg: {
592
+ [ErrorType.TYPE_MISMATCH]: 'property "a" should be a "string".'
592
593
  }
593
594
  }]);
594
595