ejv 1.1.11 → 2.0.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 (75) hide show
  1. package/.eslintrc.json +88 -0
  2. package/.mocharc.json +8 -0
  3. package/CHANGELOG.md +109 -68
  4. package/LICENSE +21 -21
  5. package/README-KR.md +596 -592
  6. package/README.md +599 -595
  7. package/build/{constants.js → cjs/constants.js} +44 -45
  8. package/build/cjs/constants.js.map +1 -0
  9. package/build/cjs/ejv.js +1263 -0
  10. package/build/cjs/ejv.js.map +1 -0
  11. package/build/{public_api.js → cjs/index.js} +4 -4
  12. package/build/cjs/index.js.map +1 -0
  13. package/build/cjs/interfaces.js +29 -0
  14. package/build/cjs/interfaces.js.map +1 -0
  15. package/build/cjs/package.json +1 -0
  16. package/build/{tester.js → cjs/tester.js} +87 -82
  17. package/build/cjs/tester.js.map +1 -0
  18. package/build/cjs/util.js +103 -0
  19. package/build/cjs/util.js.map +1 -0
  20. package/build/constants.d.ts +36 -39
  21. package/build/esm/constants.js +115 -0
  22. package/build/esm/constants.js.map +1 -0
  23. package/build/esm/ejv.js +1261 -0
  24. package/build/esm/ejv.js.map +1 -0
  25. package/build/esm/index.js +4 -0
  26. package/build/esm/index.js.map +1 -0
  27. package/build/esm/interfaces.js +33 -0
  28. package/build/esm/interfaces.js.map +1 -0
  29. package/build/esm/package.json +1 -0
  30. package/build/esm/tester.js +240 -0
  31. package/build/esm/tester.js.map +1 -0
  32. package/build/esm/util.js +96 -0
  33. package/build/esm/util.js.map +1 -0
  34. package/build/index.d.ts +3 -0
  35. package/build/interfaces.d.ts +53 -13
  36. package/build/scripts/add-js-extensions.js +46 -0
  37. package/build/scripts/add-js-extensions.js.map +1 -0
  38. package/build/tester.d.ts +16 -17
  39. package/build/util.d.ts +7 -1
  40. package/package.json +50 -39
  41. package/scripts/add-js-extensions.ts +59 -0
  42. package/spec/ArrayScheme.ts +1021 -0
  43. package/spec/CommonScheme.ts +251 -0
  44. package/spec/DateScheme.ts +472 -0
  45. package/spec/NumberScheme.ts +1032 -0
  46. package/spec/ObjectScheme.ts +499 -0
  47. package/spec/RegExpScheme.ts +112 -0
  48. package/spec/StringScheme.ts +1239 -0
  49. package/spec/common-test-util.ts +63 -0
  50. package/spec/ejv.spec.ts +209 -4634
  51. package/spec/testers.spec.ts +833 -832
  52. package/src/constants.ts +155 -156
  53. package/src/ejv.ts +1648 -1071
  54. package/src/index.ts +14 -0
  55. package/src/interfaces.ts +149 -63
  56. package/src/tester.ts +308 -302
  57. package/src/util.ts +124 -59
  58. package/tsconfig.cjs.json +8 -0
  59. package/tsconfig.esm.json +7 -0
  60. package/tsconfig.json +22 -19
  61. package/tsconfig.scripts.json +14 -0
  62. package/tsconfig.types.json +9 -0
  63. package/build/constants.js.map +0 -1
  64. package/build/ejv.js +0 -687
  65. package/build/ejv.js.map +0 -1
  66. package/build/interfaces.js +0 -15
  67. package/build/interfaces.js.map +0 -1
  68. package/build/public_api.d.ts +0 -3
  69. package/build/public_api.js.map +0 -1
  70. package/build/tester.js.map +0 -1
  71. package/build/util.js +0 -68
  72. package/build/util.js.map +0 -1
  73. package/spec/common-test-runner.ts +0 -17
  74. package/src/public_api.ts +0 -3
  75. package/tsconfig.spec.json +0 -19
package/src/util.ts CHANGED
@@ -1,59 +1,124 @@
1
- export const clone = (obj : any) : any => {
2
- let result : any = null;
3
-
4
- if (!!obj) {
5
- let type : string = typeof obj;
6
-
7
- if (type === 'object') {
8
- if (obj.push !== undefined && typeof obj.push === 'function') {
9
- type = 'array';
10
- } else if (obj.getFullYear !== undefined && typeof obj.getFullYear === 'function') {
11
- type = 'date';
12
- } else if (obj.byteLength !== undefined) {
13
- type = 'buffer';
14
- } else if (obj.exec !== undefined && obj.test !== undefined) {
15
- type = 'regexp';
16
- }
17
- }
18
-
19
- switch (type) {
20
- case 'boolean':
21
- case 'number':
22
- case 'function':
23
- case 'string':
24
- case 'buffer':
25
- // ok with simple copy
26
- result = obj;
27
- break;
28
-
29
- case 'regexp':
30
- result = new RegExp(obj);
31
- break;
32
-
33
- case 'date':
34
- result = new Date(obj);
35
- break;
36
-
37
- case 'array':
38
- result = [...obj.map((one : any) => {
39
- return clone(one);
40
- })];
41
- break;
42
-
43
- case 'object':
44
- // sanitize default false
45
- result = {};
46
-
47
- Object.keys(obj)
48
- .forEach(key => {
49
- // recursively call
50
- result[key] = clone(obj[key]);
51
- });
52
- break;
53
- }
54
- } else {
55
- result = obj; // do not copy null & undefined
56
- }
57
-
58
- return result;
59
- };
1
+ import { AnyObject } from './interfaces';
2
+ import { ErrorMsg } from './constants';
3
+
4
+
5
+ enum CloneDataType {
6
+ Boolean = 'boolean',
7
+ Number = 'number',
8
+ Function = 'function',
9
+ String = 'string',
10
+ Buffer = 'buffer',
11
+ Object = 'object',
12
+ Array = 'array',
13
+ Date = 'date',
14
+ RegExp = 'regexp'
15
+ }
16
+
17
+ export const isArray = <T> (value: unknown): value is T[] => {
18
+ return value !== undefined
19
+ && value !== null
20
+ && Array.isArray(value);
21
+ };
22
+
23
+
24
+ // sanitize removes undefined & null fields from object. default false
25
+ export const clone = <T> (obj: T, sanitize?: boolean): T => {
26
+ let result !: T;
27
+
28
+ if (obj) {
29
+ let type: CloneDataType = typeof obj as CloneDataType;
30
+
31
+ if (type === CloneDataType.Object) {
32
+ const objAsObject: AnyObject = obj as unknown as AnyObject;
33
+
34
+ if (isArray(objAsObject)) {
35
+ type = CloneDataType.Array;
36
+ }
37
+ else if (objAsObject instanceof Date) {
38
+ type = CloneDataType.Date;
39
+ }
40
+ else if (objAsObject instanceof RegExp) {
41
+ type = CloneDataType.RegExp;
42
+ }
43
+ else if (objAsObject.byteLength
44
+ && typeof objAsObject.byteLength === 'function') {
45
+ type = CloneDataType.Buffer;
46
+ }
47
+ }
48
+
49
+ switch (type) {
50
+ case CloneDataType.Date: {
51
+ const objAsDate: Date = obj as unknown as Date;
52
+ result = new Date(objAsDate) as unknown as T;
53
+ break;
54
+ }
55
+
56
+ case CloneDataType.Array: {
57
+ const objAsArray: unknown[] = obj as unknown as unknown[];
58
+ result = objAsArray.map((one: unknown): unknown => {
59
+ return clone(one);
60
+ }) as unknown as T;
61
+ break;
62
+ }
63
+
64
+ case CloneDataType.Object: {
65
+ // sanitize default false
66
+ result = {} as unknown as T;
67
+
68
+ const entries: [string, unknown][] = Object.entries(obj)
69
+ .filter(([, value]): boolean => {
70
+ return sanitize
71
+ ? value !== undefined && value !== null
72
+ : true;
73
+ });
74
+
75
+
76
+ for (const [key, value] of entries) {
77
+ // call recursively
78
+ (result as unknown as AnyObject)[key] = clone(value, sanitize);
79
+ }
80
+ break;
81
+ }
82
+
83
+ default:
84
+ // simple copy
85
+ result = obj;
86
+ }
87
+ }
88
+ else {
89
+ result = obj; // do not copy null & undefined
90
+ }
91
+
92
+ return result;
93
+ };
94
+
95
+
96
+ export const sift = <T> (arr: T[]): T[] => {
97
+ return arr.reduce((acc: T[], cur: T) => {
98
+ if (cur !== null && cur !== undefined && !acc.includes(cur)) {
99
+ acc.push(cur);
100
+ }
101
+
102
+ return acc;
103
+ }, []);
104
+ };
105
+
106
+
107
+ export const createErrorMsg = (errorMsg: ErrorMsg, param?: {
108
+ placeholders?: (string | number)[]
109
+ }): string => {
110
+ let result: string = errorMsg;
111
+
112
+ if (param?.placeholders) {
113
+ param.placeholders.forEach((strToReplace: string | number, i: number): void => {
114
+ result = result.replace(
115
+ `<<${ i + 1 }>>`,
116
+ typeof strToReplace === 'string'
117
+ ? strToReplace
118
+ : '' + strToReplace
119
+ );
120
+ });
121
+ }
122
+
123
+ return result;
124
+ };
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "build/cjs",
5
+ "module": "commonjs",
6
+ "target": "ES6"
7
+ }
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "build/esm",
5
+ "module": "ES2022"
6
+ }
7
+ }
package/tsconfig.json CHANGED
@@ -1,19 +1,22 @@
1
- {
2
- "compilerOptions": {
3
- "module": "commonjs",
4
- "target": "es5",
5
- "sourceMap": true,
6
- "strict": true,
7
- "outDir": "build",
8
- "declaration": true,
9
- "declarationDir": "build",
10
- "lib": [
11
- "es2018",
12
- "dom"
13
- ]
14
- },
15
- "exclude": [
16
- "node_modules",
17
- "spec"
18
- ]
19
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "sourceMap": true,
5
+ "forceConsistentCasingInFileNames": true,
6
+ "strict": true,
7
+ "noImplicitReturns": true,
8
+ "noFallthroughCasesInSwitch": true,
9
+ "lib": [
10
+ "ES2022",
11
+ "dom"
12
+ ]
13
+ },
14
+ "include": [
15
+ "src"
16
+ ],
17
+ "exclude": [
18
+ "node_modules",
19
+ "spec",
20
+ "scripts"
21
+ ]
22
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "build/scripts",
5
+ "module": "commonjs"
6
+ },
7
+ "include": [
8
+ "scripts"
9
+ ],
10
+ "exclude": [
11
+ "node_modules",
12
+ "spec"
13
+ ]
14
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "emitDeclarationOnly": true,
5
+ "outDir": "build",
6
+ "declaration": true,
7
+ "declarationDir": "build"
8
+ }
9
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}