UNPKG

2.47 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const validation_1 = require("../error/validation");
4const validator_1 = require("./validator");
5class 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}
41exports.ItemValidator = ItemValidator;
42function 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}
60Object.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});