1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const validator = require("validator");
|
4 | const validation_1 = require("../error/validation");
|
5 | class Validator {
|
6 | static isInt(value, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {
|
7 | value = Validator.isNumber(value, min, max);
|
8 | if (!validator.isInt(value.toString())) {
|
9 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_INT);
|
10 | }
|
11 | return value;
|
12 | }
|
13 | static isNumber(value, min = Number.MIN_SAFE_INTEGER / 128, max = Number.MAX_SAFE_INTEGER / 128) {
|
14 | value = parseFloat(Validator.isString(value));
|
15 | if (!isNaN(value)) {
|
16 | if (value >= min && value <= max) {
|
17 | return value;
|
18 | }
|
19 | throw new validation_1.ValidationError(validation_1.ValidationError.NUMBER_OUT_OF_BOUNDS);
|
20 | }
|
21 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_NUMBER);
|
22 | }
|
23 | static escape(value) {
|
24 | return validator.escape(value || '');
|
25 | }
|
26 | static isString(value, min = 1, max = 256) {
|
27 | if (typeof value === 'number') {
|
28 | value = value.toString();
|
29 | }
|
30 | if (typeof value === 'string') {
|
31 | const processedValue = value.trim();
|
32 | if (processedValue.length >= min && processedValue.length <= max) {
|
33 | return Validator.escape(processedValue);
|
34 | }
|
35 | throw new validation_1.ValidationError(validation_1.ValidationError.STRING_OUT_OF_BOUNDS);
|
36 | }
|
37 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_STRING);
|
38 | }
|
39 | static isEmail(value) {
|
40 | const email = Validator.isString(value).toLowerCase();
|
41 | if (validator.isEmail(email)) {
|
42 | return email;
|
43 | }
|
44 | else {
|
45 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_EMAIL);
|
46 | }
|
47 | }
|
48 | static isArray(array, iterator) {
|
49 | if (!(array instanceof Array) || array.length === 0) {
|
50 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_ARRAY);
|
51 | }
|
52 | if (typeof iterator === 'function') {
|
53 | return array.map((el) => iterator(el));
|
54 | }
|
55 | return array;
|
56 | }
|
57 | static isDate(value, min, max) {
|
58 | const strDate = Validator.isString(value);
|
59 | if (!strDate) {
|
60 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_DATE);
|
61 | }
|
62 | const isISO8601 = validator.isISO8601(strDate);
|
63 | if (!isISO8601) {
|
64 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_DATE);
|
65 | }
|
66 | const date = new Date(strDate);
|
67 | if (isNaN(date.getTime())) {
|
68 | throw new validation_1.ValidationError(validation_1.ValidationError.NO_DATE);
|
69 | }
|
70 | if (min instanceof Date && date.getTime() < min.getTime()) {
|
71 | throw new validation_1.ValidationError(validation_1.ValidationError.DATE_OUT_OF_BOUNDS);
|
72 | }
|
73 | if (max instanceof Date && date.getTime() > max.getTime()) {
|
74 | throw new validation_1.ValidationError(validation_1.ValidationError.DATE_OUT_OF_BOUNDS);
|
75 | }
|
76 | return date;
|
77 | }
|
78 | }
|
79 | exports.Validator = Validator;
|