validno 0.1.7 → 0.1.8

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.
package/dist/Schema.js CHANGED
@@ -3,7 +3,9 @@ export const defaultSchemaKeys = [
3
3
  "required",
4
4
  "type",
5
5
  "eachType",
6
- "rules"
6
+ "rules",
7
+ "title",
8
+ "customMessage"
7
9
  ];
8
10
  export class Schema {
9
11
  constructor(inputSchema) {
package/dist/validate.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import checkRules from "./checkRules.js";
2
2
  import checkType from "./checkType.js";
3
- import { defaultSchemaKeys } from "./Schema.js";
4
3
  import _errors from "./utils/errors.js";
5
4
  import _validations from "./utils/validations.js";
5
+ import { defaultSchemaKeys } from "./Schema.js";
6
6
  export const getResultDefaults = () => {
7
7
  return {
8
8
  ok: null,
@@ -11,7 +11,9 @@ export const getResultDefaults = () => {
11
11
  passed: [],
12
12
  errors: [],
13
13
  byKeys: {},
14
- errorsByKeys: {}
14
+ byTitles: {},
15
+ errorsByKeys: {},
16
+ errorsByTitles: {}
15
17
  };
16
18
  };
17
19
  const checkIsNested = (obj) => {
@@ -32,12 +34,15 @@ export const mergeResults = (resultsOld, resultsNew) => {
32
34
  output.missed = [...resultsOld.missed, ...resultsNew.missed];
33
35
  output.passed = [...resultsOld.passed, ...resultsNew.passed];
34
36
  output.byKeys = Object.assign(Object.assign({}, resultsOld.byKeys), resultsNew.byKeys);
37
+ output.byTitles = Object.assign(Object.assign({}, resultsOld.byTitles), resultsNew.byTitles);
35
38
  output.errorsByKeys = Object.assign(Object.assign({}, resultsOld.errorsByKeys), resultsNew.errorsByKeys);
39
+ output.errorsByTitles = Object.assign(Object.assign({}, resultsOld.errorsByTitles), resultsNew.errorsByTitles);
36
40
  return output;
37
41
  };
38
42
  export function handleReqKey(key, data, reqs, deepKey = key) {
39
43
  let results = getResultDefaults();
40
44
  const hasNested = checkIsNested(reqs);
45
+ const keyTitle = 'title' in reqs ? reqs.title : deepKey;
41
46
  const missedCheck = [];
42
47
  const typeChecked = [];
43
48
  const rulesChecked = [];
@@ -46,11 +51,13 @@ export function handleReqKey(key, data, reqs, deepKey = key) {
46
51
  results.missed.push(deepKey);
47
52
  results.failed.push(deepKey);
48
53
  results.byKeys[deepKey] = false;
54
+ results.byTitles[keyTitle] = false;
49
55
  return results;
50
56
  }
51
57
  if (hasNested) {
52
58
  const nestedReqKeys = Object.keys(reqs);
53
59
  results.byKeys[deepKey] = true;
60
+ results.byTitles[keyTitle] = true;
54
61
  let i = 0;
55
62
  while (i < nestedReqKeys.length) {
56
63
  const reqKeyI = nestedReqKeys[i];
@@ -61,13 +68,20 @@ export function handleReqKey(key, data, reqs, deepKey = key) {
61
68
  return results;
62
69
  }
63
70
  if (reqs.required === true && key in data === false || data === undefined) {
64
- const errMsg = _errors.getMissingError(deepKey);
71
+ let errMsg = _errors.getMissingError(deepKey);
72
+ if (reqs.customMessage && typeof reqs.customMessage === 'function') {
73
+ errMsg = reqs.customMessage({
74
+ value: data[key], key: deepKey, title: keyTitle, reqs: reqs, schema: this.schema
75
+ });
76
+ }
65
77
  missedCheck.push(false);
66
78
  results.missed.push(deepKey);
67
79
  results.failed.push(deepKey);
68
80
  results.errors.push(errMsg);
69
81
  results.byKeys[deepKey] = false;
82
+ results.byTitles[keyTitle] = false;
70
83
  results.errorsByKeys[deepKey] = [errMsg];
84
+ results.errorsByTitles[keyTitle] = [errMsg];
71
85
  return results;
72
86
  }
73
87
  const typeCheck = checkType(key, data[key], reqs, deepKey);
@@ -83,8 +97,11 @@ export function handleReqKey(key, data, reqs, deepKey = key) {
83
97
  ruleCheck.details.forEach((el) => {
84
98
  if (deepKey in results.errorsByKeys)
85
99
  results.errorsByKeys[deepKey] = [];
100
+ if (deepKey in results.errorsByTitles)
101
+ results.errorsByTitles[keyTitle] = [];
86
102
  results.errors.push(el);
87
103
  results.errorsByKeys[deepKey] = ['1'];
104
+ results.errorsByTitles[keyTitle] = ['1'];
88
105
  });
89
106
  }
90
107
  if (missedCheck.length)
@@ -98,7 +115,11 @@ export function handleReqKey(key, data, reqs, deepKey = key) {
98
115
  results.errorsByKeys[deepKey] = [
99
116
  ...results.errors
100
117
  ];
118
+ results.errorsByTitles[keyTitle] = [
119
+ ...results.errors
120
+ ];
101
121
  results.byKeys[deepKey] = (missedCheck.length + typeChecked.length + rulesChecked.length) === 0;
122
+ results.byTitles[keyTitle] = (missedCheck.length + typeChecked.length + rulesChecked.length) === 0;
102
123
  return results;
103
124
  }
104
125
  const isCheckNeeded = (key, hasLimits, onlyKeys) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "validno",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/Schema.ts CHANGED
@@ -5,6 +5,8 @@ export type TSchemaItem = {
5
5
  type: any,
6
6
  eachType?: any,
7
7
  rules?: {},
8
+ title?: string,
9
+ customMessage?: Function
8
10
  }
9
11
 
10
12
  export type TSchemaInput = {
@@ -15,14 +17,18 @@ export const enum ESchemaFields {
15
17
  Required = 'required',
16
18
  Type = 'type',
17
19
  EachType = 'eachType',
18
- Rules = 'rules'
20
+ Rules = 'rules',
21
+ Title = 'title',
22
+ CustomMessage = 'customMessage'
19
23
  }
20
24
 
21
25
  export const defaultSchemaKeys = [
22
26
  ESchemaFields.Required,
23
27
  ESchemaFields.Type,
24
28
  ESchemaFields.EachType,
25
- ESchemaFields.Rules
29
+ ESchemaFields.Rules,
30
+ ESchemaFields.Title,
31
+ ESchemaFields.CustomMessage
26
32
  ]
27
33
 
28
34
  export type TSchema = TSchemaInput
package/src/validate.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import checkRules from "./checkRules.js";
2
2
  import checkType from "./checkType.js";
3
- import { defaultSchemaKeys, Schema, TSchemaInput } from "./Schema.js";
4
3
  import _errors from "./utils/errors.js";
5
4
  import _validations from "./utils/validations.js";
5
+ import { defaultSchemaKeys, Schema, TSchemaInput } from "./Schema.js";
6
6
 
7
7
  export type TResult = {
8
8
  ok: null | boolean,
@@ -10,8 +10,10 @@ export type TResult = {
10
10
  failed: string[],
11
11
  passed: string[],
12
12
  errors: string[],
13
- byKeys: {[key: string]: boolean}
14
- errorsByKeys: {[key: string]: string[]}
13
+ byKeys: {[key: string]: boolean},
14
+ byTitles: {[key: string]: boolean},
15
+ errorsByKeys: {[key: string]: string[]},
16
+ errorsByTitles: {[key: string]: string[]}
15
17
  };
16
18
 
17
19
  export const getResultDefaults = (): TResult => {
@@ -22,7 +24,9 @@ export const getResultDefaults = (): TResult => {
22
24
  passed: [],
23
25
  errors: [],
24
26
  byKeys: {},
25
- errorsByKeys: {}
27
+ byTitles: {},
28
+ errorsByKeys: {},
29
+ errorsByTitles: {}
26
30
  };
27
31
  }
28
32
 
@@ -46,7 +50,9 @@ export const mergeResults = (resultsOld: TResult, resultsNew: TResult) => {
46
50
  output.missed = [...resultsOld.missed, ...resultsNew.missed]
47
51
  output.passed = [...resultsOld.passed, ...resultsNew.passed]
48
52
  output.byKeys = {...resultsOld.byKeys, ...resultsNew.byKeys}
53
+ output.byTitles = {...resultsOld.byTitles, ...resultsNew.byTitles}
49
54
  output.errorsByKeys = {...resultsOld.errorsByKeys, ...resultsNew.errorsByKeys}
55
+ output.errorsByTitles = {...resultsOld.errorsByTitles, ...resultsNew.errorsByTitles}
50
56
 
51
57
  return output
52
58
  }
@@ -54,6 +60,7 @@ export const mergeResults = (resultsOld: TResult, resultsNew: TResult) => {
54
60
  export function handleReqKey(this: any, key: string, data: any, reqs: TSchemaInput, deepKey = key) {
55
61
  let results = getResultDefaults()
56
62
  const hasNested = checkIsNested(reqs)
63
+ const keyTitle = 'title' in reqs ? reqs.title : deepKey
57
64
 
58
65
  const missedCheck: boolean[] = [];
59
66
  const typeChecked: boolean[] = [];
@@ -68,6 +75,8 @@ export function handleReqKey(this: any, key: string, data: any, reqs: TSchemaInp
68
75
  results.missed.push(deepKey)
69
76
  results.failed.push(deepKey)
70
77
  results.byKeys[deepKey] = false
78
+ // @ts-ignore
79
+ results.byTitles[keyTitle] = false
71
80
  return results
72
81
  }
73
82
 
@@ -75,6 +84,8 @@ export function handleReqKey(this: any, key: string, data: any, reqs: TSchemaInp
75
84
  if (hasNested) {
76
85
  const nestedReqKeys: string[] = Object.keys(reqs)
77
86
  results.byKeys[deepKey] = true
87
+ // @ts-ignore
88
+ results.byTitles[keyTitle] = true
78
89
 
79
90
  let i = 0;
80
91
  while (i < nestedReqKeys.length) {
@@ -100,14 +111,25 @@ export function handleReqKey(this: any, key: string, data: any, reqs: TSchemaInp
100
111
  // Check missing keys
101
112
  // @ts-ignore
102
113
  if (reqs.required === true && key in data === false || data === undefined) {
103
- const errMsg = _errors.getMissingError(deepKey)
114
+ let errMsg = _errors.getMissingError(deepKey)
115
+
116
+ if (reqs.customMessage && typeof reqs.customMessage === 'function') {
117
+ // @ts-ignore
118
+ errMsg = reqs.customMessage({
119
+ value: data[key], key: deepKey, title: keyTitle, reqs: reqs, schema: this.schema
120
+ })
121
+ }
104
122
 
105
123
  missedCheck.push(false)
106
124
  results.missed.push(deepKey)
107
125
  results.failed.push(deepKey)
108
126
  results.errors.push(errMsg)
109
127
  results.byKeys[deepKey] = false
128
+ // @ts-ignore
129
+ results.byTitles[keyTitle] = false
110
130
  results.errorsByKeys[deepKey] = [errMsg]
131
+ // @ts-ignore
132
+ results.errorsByTitles[keyTitle] = [errMsg]
111
133
  return results
112
134
  }
113
135
 
@@ -129,9 +151,14 @@ export function handleReqKey(this: any, key: string, data: any, reqs: TSchemaInp
129
151
  rulesChecked.push(false)
130
152
  ruleCheck.details.forEach((el) => {
131
153
  if (deepKey in results.errorsByKeys) results.errorsByKeys[deepKey] = []
154
+ // @ts-ignore
155
+ if (deepKey in results.errorsByTitles) results.errorsByTitles[keyTitle] = []
156
+
132
157
  results.errors.push(el)
133
158
 
134
159
  results.errorsByKeys[deepKey] = ['1']
160
+ // @ts-ignore
161
+ results.errorsByTitles[keyTitle] = ['1']
135
162
  })
136
163
  }
137
164
 
@@ -148,10 +175,20 @@ export function handleReqKey(this: any, key: string, data: any, reqs: TSchemaInp
148
175
  ...results.errors
149
176
  ]
150
177
 
178
+ // @ts-ignore
179
+ results.errorsByTitles[keyTitle] = [
180
+ ...results.errors
181
+ ]
182
+
151
183
  results.byKeys[deepKey] = (
152
184
  missedCheck.length + typeChecked.length + rulesChecked.length
153
185
  ) === 0
154
186
 
187
+ // @ts-ignore
188
+ results.byTitles[keyTitle] = (
189
+ missedCheck.length + typeChecked.length + rulesChecked.length
190
+ ) === 0
191
+
155
192
  return results
156
193
  }
157
194