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/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { ejv } from './ejv';
2
- export { DataType, NumberFormat, StringFormat, ErrorMsg, ErrorType } from './constants';
2
+ export { DATA_TYPE, NUMBER_FORMAT, STRING_FORMAT, ERROR_MESSAGE, ERROR_TYPE } from './constants';
3
3
  export {
4
4
  BooleanScheme,
5
5
  NumberScheme,
package/src/interfaces.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { DataType, ErrorType, NumberFormat, StringFormat } from './constants';
1
+ import { DATA_TYPE, ERROR_TYPE, NUMBER_FORMAT, STRING_FORMAT } from './constants';
2
2
 
3
- export type AllDataType = string | string[] | DataType | DataType[];
3
+ export type AllDataType = string | string[] | DATA_TYPE | DATA_TYPE[];
4
4
 
5
5
 
6
6
  interface CommonScheme {
@@ -29,14 +29,16 @@ export interface MinMaxScheme<T> extends CommonScheme, MinMax<T> {
29
29
 
30
30
  export interface NumberScheme extends MinMaxScheme<number> {
31
31
  enum?: number[];
32
+ notEnum?: number[];
32
33
 
33
- format?: string | string[] | NumberFormat | NumberFormat[];
34
+ format?: string | string[] | NUMBER_FORMAT | NUMBER_FORMAT[];
34
35
  }
35
36
 
36
37
  export interface StringScheme extends CommonScheme {
37
38
  enum?: string[];
39
+ notEnum?: string[];
38
40
 
39
- format?: string | string[] | StringFormat | StringFormat[];
41
+ format?: string | string[] | STRING_FORMAT | STRING_FORMAT[];
40
42
  pattern?: string | string[] | RegExp | RegExp[];
41
43
 
42
44
  length?: number;
@@ -49,11 +51,8 @@ export interface ObjectScheme extends CommonScheme {
49
51
  allowNoProperty?: boolean; // true
50
52
  }
51
53
 
52
-
53
- /* eslint-disable @typescript-eslint/no-empty-interface */
54
- export interface DateScheme extends MinMaxScheme<string | Date> {
55
- // min, max string for date string
56
- }
54
+ // min, max string for date string
55
+ export type DateScheme = MinMaxScheme<string | Date>
57
56
 
58
57
  // no additional rule
59
58
  export type RegExpScheme = CommonScheme;
@@ -79,7 +78,7 @@ export type Scheme =
79
78
 
80
79
  export interface Options {
81
80
  customErrorMsg?: {
82
- [key in ErrorType]?: string;
81
+ [key in ERROR_TYPE]?: string;
83
82
  };
84
83
  }
85
84
 
@@ -88,7 +87,7 @@ export interface InternalOptions extends Options {
88
87
  }
89
88
 
90
89
  export class EjvError {
91
- public type: ErrorType;
90
+ public type: ERROR_TYPE;
92
91
  public message: string;
93
92
 
94
93
  public data: unknown;
@@ -101,7 +100,7 @@ export class EjvError {
101
100
  public isDataError: boolean;
102
101
 
103
102
  constructor (param: {
104
- type: ErrorType,
103
+ type: ERROR_TYPE,
105
104
  message: string,
106
105
 
107
106
  data: unknown,
package/src/tester.ts CHANGED
@@ -1,35 +1,35 @@
1
- import { DataType } from './constants';
1
+ import { DATA_TYPE } from './constants';
2
2
  import { AnyObject } from './interfaces';
3
3
 
4
- export const typeTester = (value: unknown, type: DataType): boolean => {
4
+ export const typeTester = (value: unknown, type: DATA_TYPE): boolean => {
5
5
  let valid: boolean;
6
6
 
7
7
  switch (type) {
8
- case DataType.BOOLEAN:
8
+ case DATA_TYPE.BOOLEAN:
9
9
  valid = booleanTester(value);
10
10
  break;
11
11
 
12
- case DataType.NUMBER:
12
+ case DATA_TYPE.NUMBER:
13
13
  valid = numberTester(value);
14
14
  break;
15
15
 
16
- case DataType.STRING:
16
+ case DATA_TYPE.STRING:
17
17
  valid = stringTester(value);
18
18
  break;
19
19
 
20
- case DataType.OBJECT:
20
+ case DATA_TYPE.OBJECT:
21
21
  valid = objectTester(value);
22
22
  break;
23
23
 
24
- case DataType.DATE:
24
+ case DATA_TYPE.DATE:
25
25
  valid = dateTester(value);
26
26
  break;
27
27
 
28
- case DataType.REGEXP:
28
+ case DATA_TYPE.REGEXP:
29
29
  valid = regExpTester(value);
30
30
  break;
31
31
 
32
- case DataType.ARRAY:
32
+ case DATA_TYPE.ARRAY:
33
33
  valid = arrayTester(value);
34
34
  break;
35
35
  }
@@ -45,6 +45,10 @@ export const enumTester = <T> (value: T, arr: T[]): boolean => {
45
45
  return arr.includes(value);
46
46
  };
47
47
 
48
+ export const notEnumTester = <T> (value: T, arr: T[]): boolean => {
49
+ return !enumTester(value, arr);
50
+ };
51
+
48
52
  export const lengthTester = (value: string | unknown[], length: number): boolean => {
49
53
  return value.length === length;
50
54
  };
@@ -291,7 +295,7 @@ export const arrayTester = (value: unknown): value is unknown[] => {
291
295
  return Array.isArray(value);
292
296
  };
293
297
 
294
- export const arrayTypeOfTester = (array: unknown[], type: DataType): boolean => {
298
+ export const arrayTypeOfTester = (array: unknown[], type: DATA_TYPE): boolean => {
295
299
  return array.every((item: unknown): boolean => {
296
300
  return typeTester(item, type);
297
301
  });
package/src/util.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AnyObject } from './interfaces';
2
- import { ErrorMsg } from './constants';
2
+ import { ERROR_MESSAGE } from './constants';
3
3
 
4
4
 
5
5
  enum CloneDataType {
@@ -104,7 +104,7 @@ export const sift = <T> (arr: T[]): T[] => {
104
104
  };
105
105
 
106
106
 
107
- export const createErrorMsg = (errorMsg: ErrorMsg, param?: {
107
+ export const createErrorMsg = (errorMsg: ERROR_MESSAGE, param?: {
108
108
  placeholders?: (string | number)[]
109
109
  }): string => {
110
110
  let result: string = errorMsg;
package/.eslintrc.json DELETED
@@ -1,88 +0,0 @@
1
- {
2
- "env": {
3
- "browser": true,
4
- "es2021": true,
5
- "node": true
6
- },
7
- "extends": [
8
- "eslint:recommended",
9
- "plugin:@typescript-eslint/recommended"
10
- ],
11
- "parser": "@typescript-eslint/parser",
12
- "parserOptions": {
13
- "ecmaVersion": 2020,
14
- "sourceType": "module"
15
- },
16
- "plugins": [
17
- "@typescript-eslint"
18
- ],
19
- "rules": {
20
- "indent": "off",
21
- "@typescript-eslint/indent": [
22
- "warn",
23
- "tab",
24
- {
25
- "ignoreComments": true,
26
- "SwitchCase": 1,
27
- "ignoredNodes": [
28
- "CallExpression *",
29
- "ExpressionStatement *"
30
- ]
31
- }
32
- ],
33
- "linebreak-style": [
34
- "warn",
35
- "windows"
36
- ],
37
- "arrow-parens": "warn",
38
- "quotes": [
39
- "warn",
40
- "single"
41
- ],
42
- "semi": [
43
- "warn",
44
- "always"
45
- ],
46
- "no-shadow": "off",
47
- "@typescript-eslint/no-shadow": "warn",
48
- "no-trailing-spaces": "warn",
49
- "no-var": "warn",
50
- "prefer-const": "warn",
51
- "space-before-function-paren": "warn",
52
- "brace-style": [
53
- "warn",
54
- "stroustrup"
55
- ],
56
- "key-spacing": [
57
- "warn",
58
- {
59
- "beforeColon": false,
60
- "afterColon": true
61
- }
62
- ],
63
- "@typescript-eslint/type-annotation-spacing": [
64
- "warn",
65
- {
66
- "before": false,
67
- "after": true,
68
- "overrides": {
69
- "arrow": {
70
- "before": true,
71
- "after": true
72
- }
73
- }
74
- }
75
- ],
76
- "@typescript-eslint/explicit-function-return-type": "warn",
77
- "@typescript-eslint/no-inferrable-types": "off",
78
- "@typescript-eslint/no-non-null-assertion": "warn",
79
- "@typescript-eslint/no-empty-function": "warn",
80
- "@typescript-eslint/no-unused-vars": "warn",
81
- "@typescript-eslint/explicit-module-boundary-types": "warn",
82
- "operator-linebreak": [
83
- "warn",
84
- "before"
85
- ],
86
- "no-param-reassign": "warn"
87
- }
88
- }
@@ -1,118 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ErrorMsg = exports.ErrorType = exports.StringFormat = exports.NumberFormat = exports.DataType = void 0;
4
- var DataType;
5
- (function (DataType) {
6
- DataType["BOOLEAN"] = "boolean";
7
- DataType["NUMBER"] = "number";
8
- DataType["STRING"] = "string";
9
- DataType["OBJECT"] = "object";
10
- DataType["DATE"] = "date";
11
- DataType["REGEXP"] = "regexp";
12
- DataType["ARRAY"] = "array";
13
- })(DataType || (exports.DataType = DataType = {}));
14
- var NumberFormat;
15
- (function (NumberFormat) {
16
- NumberFormat["INTEGER"] = "integer";
17
- NumberFormat["INDEX"] = "index";
18
- })(NumberFormat || (exports.NumberFormat = NumberFormat = {}));
19
- var StringFormat;
20
- (function (StringFormat) {
21
- StringFormat["EMAIL"] = "email";
22
- StringFormat["DATE"] = "date";
23
- StringFormat["DATE_TIME"] = "date-time";
24
- StringFormat["TIME"] = "time";
25
- // URL = 'url',
26
- // IP = 'ip', // ipv4 || ipv6
27
- // IPV4 = 'ipv4',
28
- // IPV6 = 'ipv6'
29
- })(StringFormat || (exports.StringFormat = StringFormat = {}));
30
- var ErrorType;
31
- (function (ErrorType) {
32
- // about ejv() running
33
- ErrorType["NO_DATA"] = "NO_DATA";
34
- ErrorType["NO_SCHEME"] = "NO_SCHEME";
35
- ErrorType["INVALID_SCHEMES"] = "INVALID_SCHEMES";
36
- // not match with scheme
37
- ErrorType["REQUIRED"] = "REQUIRED";
38
- ErrorType["TYPE_MISMATCH"] = "TYPE_MISMATCH";
39
- ErrorType["TYPE_MISMATCH_ONE_OF"] = "TYPE_MISMATCH_ONE_OF";
40
- ErrorType["ONE_VALUE_OF"] = "ONE_VALUE_OF";
41
- ErrorType["FORMAT"] = "FORMAT";
42
- ErrorType["FORMAT_ONE_OF"] = "FORMAT_ONE_OF";
43
- ErrorType["BIGGER_THAN_OR_EQUAL"] = "BIGGER_THAN_OR_EQUAL";
44
- ErrorType["BIGGER_THAN"] = "BIGGER_THAN";
45
- ErrorType["SMALLER_THAN_OR_EQUAL"] = "SMALLER_THAN_OR_EQUAL";
46
- ErrorType["SMALLER_THAN"] = "SMALLER_THAN";
47
- ErrorType["LENGTH"] = "LENGTH";
48
- ErrorType["MIN_LENGTH"] = "MIN_LENGTH";
49
- ErrorType["MAX_LENGTH"] = "MAX_LENGTH";
50
- ErrorType["PATTERN"] = "PATTERN";
51
- ErrorType["PATTERN_ONE_OF"] = "PATTERN_ONE_OF";
52
- ErrorType["PROPERTY"] = "PROPERTY";
53
- ErrorType["AFTER_OR_SAME_DATE"] = "AFTER_OR_SAME_DATE";
54
- ErrorType["AFTER_DATE"] = "AFTER_DATE";
55
- ErrorType["BEFORE_OR_SAME_DATE"] = "BEFORE_OR_SAME_DATE";
56
- ErrorType["BEFORE_DATE"] = "BEFORE_DATE";
57
- ErrorType["UNIQUE_ITEMS"] = "UNIQUE_ITEMS";
58
- ErrorType["ITEMS_TYPE"] = "ITEMS_TYPE";
59
- ErrorType["ITEMS_SCHEMES"] = "ITEMS_SCHEMES";
60
- })(ErrorType || (exports.ErrorType = ErrorType = {}));
61
- var ErrorMsg;
62
- (function (ErrorMsg) {
63
- // about Error
64
- ErrorMsg["NO_DATA"] = "no data to validate";
65
- ErrorMsg["NO_SCHEME"] = "no scheme";
66
- ErrorMsg["NO_ARRAY_SCHEME"] = "schemes should be array";
67
- ErrorMsg["NO_OBJECT_ARRAY_SCHEME"] = "schemes should be array of object";
68
- ErrorMsg["EMPTY_SCHEME"] = "schemes should not be empty";
69
- ErrorMsg["SCHEMES_SHOULD_HAVE_TYPE"] = "schemes should have type";
70
- ErrorMsg["SCHEMES_HAS_INVALID_TYPE"] = "schemes has invalid type: <<1>>";
71
- ErrorMsg["SCHEMES_HAS_DUPLICATED_TYPE"] = "schemes has duplicated type: <<1>>";
72
- ErrorMsg["ENUM_SHOULD_BE_ARRAY"] = "enum should be array";
73
- ErrorMsg["ENUM_SHOULD_BE_NUMBERS"] = "enum values should be numbers";
74
- ErrorMsg["ENUM_SHOULD_BE_STRINGS"] = "enum values should be strings";
75
- ErrorMsg["MIN_SHOULD_BE_NUMBER"] = "min should be number";
76
- ErrorMsg["EXCLUSIVE_MIN_SHOULD_BE_BOOLEAN"] = "exclusiveMin should be a boolean";
77
- ErrorMsg["MAX_SHOULD_BE_NUMBER"] = "max should be number";
78
- ErrorMsg["EXCLUSIVE_MAX_SHOULD_BE_BOOLEAN"] = "exclusiveMax should be a boolean";
79
- ErrorMsg["INVALID_NUMBER_FORMAT"] = "invalid number format: <<1>>";
80
- ErrorMsg["INVALID_STRING_FORMAT"] = "invalid string format: <<1>>";
81
- ErrorMsg["INVALID_STRING_PATTERN"] = "invalid string pattern: <<1>>";
82
- ErrorMsg["LENGTH_SHOULD_BE_INTEGER"] = "length should be a integer";
83
- ErrorMsg["MIN_LENGTH_SHOULD_BE_INTEGER"] = "minLength should be a integer";
84
- ErrorMsg["MAX_LENGTH_SHOULD_BE_INTEGER"] = "maxLength should be a integer";
85
- ErrorMsg["PROPERTIES_SHOULD_BE_ARRAY"] = "properties should be array";
86
- ErrorMsg["PROPERTIES_SHOULD_HAVE_ITEMS"] = "properties should have items";
87
- ErrorMsg["PROPERTIES_SHOULD_BE_ARRAY_OF_OBJECT"] = "properties should be array of object";
88
- ErrorMsg["ALLOW_NO_PROPERTY_SHOULD_BE_BOOLEAN"] = "allowNoProperty should be a boolean";
89
- ErrorMsg["MIN_DATE_SHOULD_BE_DATE_OR_STRING"] = "min should be Date or string representing date";
90
- ErrorMsg["MAX_DATE_SHOULD_BE_DATE_OR_STRING"] = "max should be Date or string representing date";
91
- ErrorMsg["UNIQUE_SHOULD_BE_BOOLEAN"] = "unique should be a boolean";
92
- ErrorMsg["INVALID_ITEMS_SCHEME"] = "invalid schemes of array items: <<1>>";
93
- // about EjvError
94
- ErrorMsg["REQUIRED"] = "value is required";
95
- ErrorMsg["TYPE_MISMATCH"] = "the value should be a <<1>>";
96
- ErrorMsg["TYPE_MISMATCH_ONE_OF"] = "the value should be type of <<1>>";
97
- ErrorMsg["ONE_VALUE_OF"] = "the value should be one of <<1>>";
98
- ErrorMsg["FORMAT"] = "the value should be a form of <<1>>";
99
- ErrorMsg["FORMAT_ONE_OF"] = "the value should be form of one of <<1>>";
100
- ErrorMsg["BIGGER_THAN_OR_EQUAL"] = "the value should be bigger or equal than <<1>>";
101
- ErrorMsg["BIGGER_THAN"] = "the value should be bigger than <<1>>";
102
- ErrorMsg["SMALLER_THAN_OR_EQUAL"] = "the value should be smaller or equal than <<1>>";
103
- ErrorMsg["SMALLER_THAN"] = "the value should be smaller than <<1>>";
104
- ErrorMsg["LENGTH"] = "the value should be length of <<1>>";
105
- ErrorMsg["MIN_LENGTH"] = "the value should be longer than <<1>>";
106
- ErrorMsg["MAX_LENGTH"] = "the value should be shorter than <<1>>";
107
- ErrorMsg["PATTERN"] = "the value should be pattern of <<1>>";
108
- ErrorMsg["PATTERN_ONE_OF"] = "the value should be one of pattern of <<1>>";
109
- ErrorMsg["PROPERTY"] = "the value should have property";
110
- ErrorMsg["AFTER_OR_SAME_DATE"] = "the value should be after or same date than <<1>>";
111
- ErrorMsg["AFTER_DATE"] = "the value should be after date than <<1>>";
112
- ErrorMsg["BEFORE_OR_SAME_DATE"] = "the value should be before or same date than <<1>>";
113
- ErrorMsg["BEFORE_DATE"] = "the value should be before date than <<1>>";
114
- ErrorMsg["UNIQUE_ITEMS"] = "the array should be unique items";
115
- ErrorMsg["ITEMS_TYPE"] = "the array should have items in type of <<1>>";
116
- ErrorMsg["ITEMS_SCHEMES"] = "the array should have items matched with schemes of <<1>>";
117
- })(ErrorMsg || (exports.ErrorMsg = ErrorMsg = {}));
118
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"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"}