1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const validation_1 = require("../error/validation");
|
4 | const validator_1 = require("./validator");
|
5 | class ItemValidator {
|
6 | get item() {
|
7 | return this._item;
|
8 | }
|
9 | get optional() {
|
10 | if (!this._optionalInstance) {
|
11 | this._optionalInstance = new ItemValidator(this._item, true);
|
12 | }
|
13 | return this._optionalInstance;
|
14 | }
|
15 | constructor(item, isOptional = false) {
|
16 | this._item = Object.assign({}, item);
|
17 | this._isOptional = isOptional;
|
18 | }
|
19 | isInt(field, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {
|
20 | return validator_1.Validator.isInt(this._item[field], min, max);
|
21 | }
|
22 | isNumber(field, min = Number.MIN_SAFE_INTEGER / 128, max = Number.MAX_SAFE_INTEGER / 128) {
|
23 | return validator_1.Validator.isNumber(this._item[field], min, max);
|
24 | }
|
25 | escape(field) {
|
26 | return validator_1.Validator.escape(this._item[field]);
|
27 | }
|
28 | isString(field, min = 1, max = 256) {
|
29 | return validator_1.Validator.isString(this._item[field], min, max);
|
30 | }
|
31 | isEmail(field) {
|
32 | return validator_1.Validator.isEmail(this._item[field]);
|
33 | }
|
34 | isDate(field, min, max) {
|
35 | return validator_1.Validator.isDate(this._item[field], min, max);
|
36 | }
|
37 | isArray(field, iterator) {
|
38 | return validator_1.Validator.isArray(this._item[field], iterator);
|
39 | }
|
40 | }
|
41 | exports.ItemValidator = ItemValidator;
|
42 | function wrap(fn) {
|
43 | return function (field, ...args) {
|
44 | try {
|
45 | if (this._isOptional && !this._item.hasOwnProperty(field)) {
|
46 | return undefined;
|
47 | }
|
48 | return fn.apply(this, [field].concat(args));
|
49 | }
|
50 | catch (error) {
|
51 | const err = error instanceof validation_1.ValidationError ?
|
52 | error :
|
53 | new validation_1.ValidationError(validation_1.ValidationError.VALIDATION);
|
54 | err.details.invalidField = field;
|
55 | err.details.invalidValue = this._item[field];
|
56 | throw err;
|
57 | }
|
58 | };
|
59 | }
|
60 | Object.getOwnPropertyNames(ItemValidator.prototype).forEach((key) => {
|
61 | if (typeof Object.getOwnPropertyDescriptor(ItemValidator.prototype, key).get !== 'undefined') {
|
62 | return;
|
63 | }
|
64 | const value = ItemValidator.prototype[key];
|
65 | if (typeof value === 'function' && value.name !== 'constructor') {
|
66 | ItemValidator.prototype[key] = wrap(value);
|
67 | }
|
68 | });
|