@6thbridge/utils 1.0.11 → 1.0.13
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/lib/logger/logger.js +1 -1
- package/lib/logger/logger.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/validator.d.ts +6 -17
- package/lib/utils/validator.js +5 -5
- package/lib/utils/validator.js.map +1 -1
- package/lib/utils/validator.spec.d.ts +1 -0
- package/lib/utils/validator.spec.js +288 -0
- package/lib/utils/validator.spec.js.map +1 -0
- package/package.json +1 -1
package/lib/utils/validator.d.ts
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
import * as Joi from
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
4
|
-
|
|
5
|
-
data?: undefined;
|
|
6
|
-
} | {
|
|
7
|
-
data: any;
|
|
8
|
-
error?: undefined;
|
|
9
|
-
};
|
|
1
|
+
import * as Joi from 'joi';
|
|
2
|
+
import { FunctionResult } from '../types';
|
|
3
|
+
export declare function validate(schema: any, payload: any): string | null;
|
|
4
|
+
export declare function validateStrict(schema: any, payload: any, options?: any): FunctionResult<Record<string, any>>;
|
|
10
5
|
export declare class ValidatorUtil {
|
|
11
|
-
static validate(schema:
|
|
12
|
-
static validateStrict(schema:
|
|
13
|
-
error: any;
|
|
14
|
-
data?: undefined;
|
|
15
|
-
} | {
|
|
16
|
-
data: any;
|
|
17
|
-
error?: undefined;
|
|
18
|
-
};
|
|
6
|
+
static validate(schema: Joi.SchemaMap, payload: Record<string, any>): string | null;
|
|
7
|
+
static validateStrict(schema: Joi.SchemaMap, payload: Record<string, any>, options?: Joi.ValidationOptions): FunctionResult<Record<string, any>>;
|
|
19
8
|
}
|
|
20
9
|
export { Joi };
|
package/lib/utils/validator.js
CHANGED
|
@@ -36,17 +36,17 @@ function validateStrict(schema, payload, options = {}) {
|
|
|
36
36
|
exports.validateStrict = validateStrict;
|
|
37
37
|
class ValidatorUtil {
|
|
38
38
|
static validate(schema, payload) {
|
|
39
|
-
|
|
40
|
-
const { error } =
|
|
39
|
+
const parsedSchema = Joi.object(schema);
|
|
40
|
+
const { error } = parsedSchema.validate(payload, {
|
|
41
41
|
allowUnknown: true,
|
|
42
42
|
});
|
|
43
43
|
if (error)
|
|
44
44
|
return error.details[0].message.replace(/['"]/g, '');
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
47
|
-
static validateStrict(schema, payload, options
|
|
48
|
-
|
|
49
|
-
const { error, value } =
|
|
47
|
+
static validateStrict(schema, payload, options) {
|
|
48
|
+
const parsedSchema = Joi.object(schema);
|
|
49
|
+
const { error, value } = parsedSchema.validate(payload, Object.assign({ allowUnknown: true }, options));
|
|
50
50
|
if (error)
|
|
51
51
|
return { error: error.details[0].message.replace(/['"]/g, '') };
|
|
52
52
|
return { data: value };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAoClB,kBAAG;AAjCZ,SAAgB,QAAQ,CAAC,MAAW,EAAE,OAAY;IAChD,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAFD,4BAEC;AAED,SAAgB,cAAc,CAAC,MAAW,EAAE,OAAY,EAAE,UAAe,EAAE;IACzE,OAAO,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAFD,wCAEC;AAED,MAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,MAAqB,EAAE,OAA4B;QACjE,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC/C,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAqB,EAAE,OAA4B,EAAE,OAA+B;QACxG,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,kBACpD,YAAY,EAAE,IAAI,IAAK,OAAO,EAC9B,CAAC;QAEH,IAAI,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAE3E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;CAEF;AAvBD,sCAuBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const Joi = __importStar(require("joi"));
|
|
27
|
+
const validator_1 = require("./validator");
|
|
28
|
+
describe('Validator', () => {
|
|
29
|
+
describe('validate function', () => {
|
|
30
|
+
it('should return null for valid data', () => {
|
|
31
|
+
// Arrange
|
|
32
|
+
const schema = {
|
|
33
|
+
name: Joi.string().required(),
|
|
34
|
+
age: Joi.number().required(),
|
|
35
|
+
};
|
|
36
|
+
const payload = {
|
|
37
|
+
name: 'John Doe',
|
|
38
|
+
age: 30,
|
|
39
|
+
extraField: 'This is allowed due to allowUnknown: true',
|
|
40
|
+
};
|
|
41
|
+
// Act
|
|
42
|
+
const result = (0, validator_1.validate)(schema, payload);
|
|
43
|
+
// Assert
|
|
44
|
+
expect(result).toBeNull();
|
|
45
|
+
});
|
|
46
|
+
it('should return error message for invalid data', () => {
|
|
47
|
+
// Arrange
|
|
48
|
+
const schema = {
|
|
49
|
+
name: Joi.string().required(),
|
|
50
|
+
age: Joi.number().required(),
|
|
51
|
+
};
|
|
52
|
+
const payload = {
|
|
53
|
+
name: 'John Doe',
|
|
54
|
+
// Missing required age field
|
|
55
|
+
};
|
|
56
|
+
// Act
|
|
57
|
+
const result = (0, validator_1.validate)(schema, payload);
|
|
58
|
+
// Assert
|
|
59
|
+
expect(result).toBeDefined();
|
|
60
|
+
expect(typeof result).toBe('string');
|
|
61
|
+
expect(result).toContain('age');
|
|
62
|
+
expect(result).toContain('required');
|
|
63
|
+
});
|
|
64
|
+
it('should strip quotes from error messages', () => {
|
|
65
|
+
// Arrange
|
|
66
|
+
const schema = {
|
|
67
|
+
email: Joi.string().email().required(),
|
|
68
|
+
};
|
|
69
|
+
const payload = {
|
|
70
|
+
email: 'invalid-email',
|
|
71
|
+
};
|
|
72
|
+
// Act
|
|
73
|
+
const result = (0, validator_1.validate)(schema, payload);
|
|
74
|
+
// Assert
|
|
75
|
+
expect(result).toBeDefined();
|
|
76
|
+
expect(result).not.toContain('"');
|
|
77
|
+
expect(result).not.toContain("'");
|
|
78
|
+
expect(result).toContain('email');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('validateStrict function', () => {
|
|
82
|
+
it('should return data object for valid data', () => {
|
|
83
|
+
// Arrange
|
|
84
|
+
const schema = {
|
|
85
|
+
name: Joi.string().required(),
|
|
86
|
+
age: Joi.number().required(),
|
|
87
|
+
};
|
|
88
|
+
const payload = {
|
|
89
|
+
name: 'John Doe',
|
|
90
|
+
age: 30,
|
|
91
|
+
extraField: 'This is allowed due to allowUnknown: true',
|
|
92
|
+
};
|
|
93
|
+
// Act
|
|
94
|
+
const result = (0, validator_1.validateStrict)(schema, payload);
|
|
95
|
+
// Assert
|
|
96
|
+
expect(result).toHaveProperty('data');
|
|
97
|
+
expect(result.data).toEqual(expect.objectContaining({
|
|
98
|
+
name: 'John Doe',
|
|
99
|
+
age: 30,
|
|
100
|
+
extraField: 'This is allowed due to allowUnknown: true',
|
|
101
|
+
}));
|
|
102
|
+
});
|
|
103
|
+
it('should return error object for invalid data', () => {
|
|
104
|
+
// Arrange
|
|
105
|
+
const schema = {
|
|
106
|
+
name: Joi.string().required(),
|
|
107
|
+
age: Joi.number().required(),
|
|
108
|
+
};
|
|
109
|
+
const payload = {
|
|
110
|
+
name: 'John Doe',
|
|
111
|
+
// Missing required age field
|
|
112
|
+
};
|
|
113
|
+
// Act
|
|
114
|
+
const result = (0, validator_1.validateStrict)(schema, payload);
|
|
115
|
+
// Assert
|
|
116
|
+
expect(result).toHaveProperty('error');
|
|
117
|
+
expect(typeof result.error).toBe('string');
|
|
118
|
+
expect(result.error).toContain('age');
|
|
119
|
+
expect(result.error).toContain('required');
|
|
120
|
+
});
|
|
121
|
+
it('should accept and apply custom validation options', () => {
|
|
122
|
+
// Arrange
|
|
123
|
+
const schema = {
|
|
124
|
+
name: Joi.string().required(),
|
|
125
|
+
age: Joi.number().required(),
|
|
126
|
+
};
|
|
127
|
+
const payload = {
|
|
128
|
+
name: 'John Doe',
|
|
129
|
+
extraField: 'This will be stripped',
|
|
130
|
+
};
|
|
131
|
+
const options = {
|
|
132
|
+
allowUnknown: false,
|
|
133
|
+
stripUnknown: true,
|
|
134
|
+
};
|
|
135
|
+
// Act
|
|
136
|
+
const result = (0, validator_1.validateStrict)(schema, payload, options);
|
|
137
|
+
// Assert
|
|
138
|
+
expect(result).toHaveProperty('error');
|
|
139
|
+
expect(result.error).toContain('age');
|
|
140
|
+
expect(result.error).toContain('required');
|
|
141
|
+
});
|
|
142
|
+
it('should strip quotes from error messages', () => {
|
|
143
|
+
// Arrange
|
|
144
|
+
const schema = {
|
|
145
|
+
email: Joi.string().email().required(),
|
|
146
|
+
};
|
|
147
|
+
const payload = {
|
|
148
|
+
email: 'invalid-email',
|
|
149
|
+
};
|
|
150
|
+
// Act
|
|
151
|
+
const result = (0, validator_1.validateStrict)(schema, payload);
|
|
152
|
+
// Assert
|
|
153
|
+
expect(result).toHaveProperty('error');
|
|
154
|
+
expect(result.error).not.toContain('"');
|
|
155
|
+
expect(result.error).not.toContain("'");
|
|
156
|
+
expect(result.error).toContain('email');
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('ValidatorUtil', () => {
|
|
160
|
+
describe('validate', () => {
|
|
161
|
+
it('should return null for valid data', () => {
|
|
162
|
+
// Arrange
|
|
163
|
+
const schema = {
|
|
164
|
+
name: Joi.string().required(),
|
|
165
|
+
age: Joi.number().required(),
|
|
166
|
+
};
|
|
167
|
+
const payload = {
|
|
168
|
+
name: 'John Doe',
|
|
169
|
+
age: 30,
|
|
170
|
+
};
|
|
171
|
+
// Act
|
|
172
|
+
const result = validator_1.ValidatorUtil.validate(schema, payload);
|
|
173
|
+
// Assert
|
|
174
|
+
expect(result).toBeNull();
|
|
175
|
+
});
|
|
176
|
+
it('should return error message for invalid data', () => {
|
|
177
|
+
// Arrange
|
|
178
|
+
const schema = {
|
|
179
|
+
name: Joi.string().required(),
|
|
180
|
+
age: Joi.number().min(18).required(),
|
|
181
|
+
};
|
|
182
|
+
const payload = {
|
|
183
|
+
name: 'John Doe',
|
|
184
|
+
age: 17,
|
|
185
|
+
};
|
|
186
|
+
// Act
|
|
187
|
+
const result = validator_1.ValidatorUtil.validate(schema, payload);
|
|
188
|
+
// Assert
|
|
189
|
+
expect(result).toBeDefined();
|
|
190
|
+
expect(typeof result).toBe('string');
|
|
191
|
+
expect(result).toContain('age');
|
|
192
|
+
expect(result).toContain('18');
|
|
193
|
+
});
|
|
194
|
+
it('should allow unknown fields by default', () => {
|
|
195
|
+
// Arrange
|
|
196
|
+
const schema = {
|
|
197
|
+
name: Joi.string().required(),
|
|
198
|
+
};
|
|
199
|
+
const payload = {
|
|
200
|
+
name: 'John Doe',
|
|
201
|
+
unknown: 'value',
|
|
202
|
+
};
|
|
203
|
+
// Act
|
|
204
|
+
const result = validator_1.ValidatorUtil.validate(schema, payload);
|
|
205
|
+
// Assert
|
|
206
|
+
expect(result).toBeNull();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('validateStrict', () => {
|
|
210
|
+
it('should return data object for valid data', () => {
|
|
211
|
+
// Arrange
|
|
212
|
+
const schema = {
|
|
213
|
+
name: Joi.string().required(),
|
|
214
|
+
age: Joi.number().required(),
|
|
215
|
+
};
|
|
216
|
+
const payload = {
|
|
217
|
+
name: 'John Doe',
|
|
218
|
+
age: 30,
|
|
219
|
+
};
|
|
220
|
+
// Act
|
|
221
|
+
const result = validator_1.ValidatorUtil.validateStrict(schema, payload);
|
|
222
|
+
// Assert
|
|
223
|
+
expect(result).toHaveProperty('data');
|
|
224
|
+
expect(result.data).toEqual(expect.objectContaining({
|
|
225
|
+
name: 'John Doe',
|
|
226
|
+
age: 30,
|
|
227
|
+
}));
|
|
228
|
+
});
|
|
229
|
+
it('should return error object for invalid data', () => {
|
|
230
|
+
// Arrange
|
|
231
|
+
const schema = {
|
|
232
|
+
name: Joi.string().required(),
|
|
233
|
+
age: Joi.number().min(18).required(),
|
|
234
|
+
};
|
|
235
|
+
const payload = {
|
|
236
|
+
name: 'John Doe',
|
|
237
|
+
age: 17,
|
|
238
|
+
};
|
|
239
|
+
// Act
|
|
240
|
+
const result = validator_1.ValidatorUtil.validateStrict(schema, payload);
|
|
241
|
+
// Assert
|
|
242
|
+
expect(result).toHaveProperty('error');
|
|
243
|
+
expect(typeof result.error).toBe('string');
|
|
244
|
+
expect(result.error).toContain('age');
|
|
245
|
+
});
|
|
246
|
+
it('should merge custom options with defaults', () => {
|
|
247
|
+
// Arrange
|
|
248
|
+
const schema = {
|
|
249
|
+
name: Joi.string().required(),
|
|
250
|
+
};
|
|
251
|
+
const payload = {
|
|
252
|
+
name: 'John Doe',
|
|
253
|
+
unknown: 'value',
|
|
254
|
+
};
|
|
255
|
+
const options = {
|
|
256
|
+
abortEarly: false,
|
|
257
|
+
};
|
|
258
|
+
// Act
|
|
259
|
+
const result = validator_1.ValidatorUtil.validateStrict(schema, payload, options);
|
|
260
|
+
// Assert
|
|
261
|
+
expect(result).toHaveProperty('data');
|
|
262
|
+
expect(result.data).toEqual(expect.objectContaining({
|
|
263
|
+
name: 'John Doe',
|
|
264
|
+
unknown: 'value',
|
|
265
|
+
}));
|
|
266
|
+
});
|
|
267
|
+
it('should allow overriding allowUnknown option', () => {
|
|
268
|
+
// Arrange
|
|
269
|
+
const schema = {
|
|
270
|
+
name: Joi.string().required(),
|
|
271
|
+
};
|
|
272
|
+
const payload = {
|
|
273
|
+
name: 'John Doe',
|
|
274
|
+
unknown: 'value',
|
|
275
|
+
};
|
|
276
|
+
const options = {
|
|
277
|
+
allowUnknown: false,
|
|
278
|
+
};
|
|
279
|
+
// Act
|
|
280
|
+
const result = validator_1.ValidatorUtil.validateStrict(schema, payload, options);
|
|
281
|
+
// Assert
|
|
282
|
+
expect(result).toHaveProperty('error');
|
|
283
|
+
expect(result.error).toContain('unknown');
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
//# sourceMappingURL=validator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.spec.js","sourceRoot":"","sources":["../../src/utils/validator.spec.ts"],"names":[],"mappings":"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"}
|