UNPKG

16.5 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const logger_1 = require("./logger");
4class NullableAssert {
5 constructor(assert) {
6 this.assert = assert;
7 }
8 signedFloat(value, constraints) {
9 return value === undefined ? undefined : this.assert.signedFloat(value, constraints);
10 }
11 uFloat(value, constraints) {
12 return value === undefined ? undefined : this.assert.uFloat(value, constraints);
13 }
14 signedInt(value, constraints) {
15 return value === undefined ? undefined : this.assert.signedInt(value, constraints);
16 }
17 uInt(value, constraints) {
18 return value === undefined ? undefined : this.assert.uInt(value, constraints);
19 }
20 string(value, constraints) {
21 return value === undefined ? undefined : this.assert.string(value, constraints);
22 }
23 noEmptyString(value, constraints) {
24 return value === undefined ? undefined : this.assert.noEmptyString(value, constraints);
25 }
26 date(value, constraints) {
27 return value === undefined ? undefined : this.assert.date(value, constraints);
28 }
29 array(value, constraints) {
30 return value === undefined ? undefined : this.assert.array(value, constraints);
31 }
32 noEmptyArray(value, constraints) {
33 return value === undefined ? undefined : this.assert.noEmptyArray(value, constraints);
34 }
35 bool(value) {
36 return value === undefined ? undefined : this.assert.bool(value);
37 }
38 email(value) {
39 return value === undefined ? undefined : this.assert.email(value);
40 }
41 object(value) {
42 return value === undefined ? undefined : this.assert.object(value);
43 }
44 noEmptyObject(value) {
45 return value === undefined ? undefined : this.assert.noEmptyObject(value);
46 }
47 union(value, union) {
48 return value === undefined ? undefined : this.assert.union(value, union);
49 }
50 enum(value, Enum) {
51 return value === undefined ? undefined : this.assert.enum(value, Enum);
52 }
53}
54class Assert {
55 constructor(ErrorFactory) {
56 this.ErrorFactory = ErrorFactory;
57 this.nullable = new NullableAssert(this);
58 }
59 error(name, json) {
60 throw new this.ErrorFactory(name, json);
61 }
62 validateNumber(value, constraints) {
63 if (typeof value !== 'number')
64 this.error('Value is not a number', { value });
65 if (Number.isNaN(value))
66 this.error('Value is NaN', { value });
67 if (!Number.isFinite(value))
68 this.error('Value is not finite', { value });
69 if (constraints !== undefined) {
70 this.between(value, constraints.min, constraints.max, 'Value');
71 }
72 }
73 between(value, min, max, error) {
74 if (min !== undefined && min > value)
75 this.error(error + ' should be >= ', { min, value });
76 if (max !== undefined && max < value)
77 this.error(error + ' should be <= ', { max, value });
78 }
79 validateUnsigned(value) {
80 if (value < 0)
81 this.error('Value should be 0 or positive', { value });
82 }
83 validateInt(value) {
84 if (value !== Math.ceil(value))
85 this.error('Value should be integer', { value });
86 }
87 signedFloat(value, constraints) {
88 this.validateNumber(value, constraints);
89 return value;
90 }
91 uFloat(value, constraints) {
92 this.signedFloat(value, constraints);
93 this.validateUnsigned(value);
94 return value;
95 }
96 signedInt(value, constraints) {
97 this.validateNumber(value, constraints);
98 this.validateInt(value);
99 return value;
100 }
101 uInt(value, constraints) {
102 this.signedInt(value, constraints);
103 this.validateUnsigned(value);
104 return value;
105 }
106 string(value, constraints) {
107 if (typeof value !== 'string')
108 this.error('Value is not a string', { value });
109 if (constraints !== undefined) {
110 this.between(value.length, constraints.minLen, constraints.maxLen, 'String length');
111 if (constraints.regexp !== undefined && constraints.regexp.test(value)) {
112 this.error('String is not valueidated by regexp ', { regexp: constraints.regexp.toString(), value });
113 }
114 }
115 return value;
116 }
117 noEmptyString(value, constraints) {
118 this.string(value, constraints);
119 if (value === '')
120 this.error('String should not be empty', { value });
121 return value;
122 }
123 date(value, constraints) {
124 if (!(value instanceof Date))
125 this.error('Value is not a date', { value });
126 if (Number.isNaN(value.getTime()))
127 this.error('Date is invalueid', { value });
128 if (constraints !== undefined) {
129 this.between(value.getTime(), constraints.min !== undefined ? constraints.min.getTime() : undefined, constraints.max !== undefined ? constraints.max.getTime() : undefined, 'Date');
130 }
131 return value;
132 }
133 array(value, constraints) {
134 if (!Array.isArray(value))
135 this.error('Value is not an array', { value });
136 if (constraints !== undefined)
137 this.between(value.length, constraints.minSize, constraints.maxSize, 'Array.length');
138 return value;
139 }
140 noEmptyArray(value, constraints) {
141 this.array(value, constraints);
142 if (value.length === 0)
143 this.error('Array should have elements', { value });
144 return value;
145 }
146 bool(value) {
147 if (typeof value !== 'boolean')
148 this.error('Value is not a boolean', { value });
149 return value;
150 }
151 email(value) {
152 this.string(value);
153 if (!/^\S+@\S+$/.test(value))
154 this.error('Value is an incorrect email', { value });
155 return value;
156 }
157 object(value) {
158 if (typeof value !== 'object' || value === null)
159 this.error('Value is not an object', { value });
160 return value;
161 }
162 noEmptyObject(value) {
163 this.object(value);
164 if (Object.keys(value).length === 0)
165 this.error('Object should have elements', { value });
166 return value;
167 }
168 union(value, union) {
169 if (!union.includes(value))
170 this.error(`Union doesn't have specified element`, { value });
171 return value;
172 }
173 enum(value, Enum) {
174 if (Enum[value] === undefined)
175 this.error(`Enum doesn't have specified element`, { value });
176 return value;
177 }
178}
179exports.Assert = Assert;
180exports.assert = new Assert(logger_1.Exception);
181exports.clientValidation = new Assert(logger_1.ClientException);
182//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Fzc2VydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFzRDtBQWF0RCxNQUFNLGNBQWM7SUE4Q25CLFlBQXNCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQTdDeEMsV0FBVyxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDcEUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDL0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDbEUsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDN0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQXlCLEVBQUUsV0FBOEI7UUFDL0QsT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFT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
\No newline at end of file