1 | 'use strict';
|
2 |
|
3 | const typeOf = v => ({}).toString.call(v).slice(8, -1);
|
4 |
|
5 | module.exports = {
|
6 | typeOf,
|
7 | throwIf: {
|
8 | notBoolean(obj) {
|
9 | for(const key in obj) {
|
10 | if(![true, false].includes(obj[key])) {
|
11 | throw new Error(`Property "${key}" should be Boolean type.`);
|
12 | }
|
13 | }
|
14 | },
|
15 | notAllowedLang(obj) {
|
16 | for(const key in obj) {
|
17 | const langs = ['ru', 'ua'];
|
18 | if(!langs.includes(obj[key])) {
|
19 | throw new Error(`Property "${key}" should be one of provided: ${langs.join(', ')}.`);
|
20 | }
|
21 | }
|
22 | },
|
23 | notDate(time) {
|
24 | if(!(time instanceof Date)) {
|
25 | throw new Error('Sorry. Only Date instances are supported.');
|
26 | }
|
27 | },
|
28 | notNumber(obj) {
|
29 | for(const key in obj) {
|
30 | if(typeOf(obj[key]) !== 'Number' || isNaN(obj[key])) {
|
31 | throw new Error(`Property "${key}" should be a number.`);
|
32 | }
|
33 | }
|
34 | },
|
35 | notNumberInRange(obj, from, to) {
|
36 | this.notNumber(obj);
|
37 | for(const key in obj) {
|
38 | if(obj[key] < from || to < obj[key]) {
|
39 | throw new Error(`Property "${key}" should be in ${from}..${to} range.`);
|
40 | }
|
41 | }
|
42 | },
|
43 | notEnumerableProperty(obj, props) {
|
44 | const keys = Object.keys(obj);
|
45 | for(const prop in props) {
|
46 | if(!keys.includes(prop)) {
|
47 | throw new Error(`Unknown setting property as "${prop}".`);
|
48 | }
|
49 | }
|
50 | },
|
51 | },
|
52 | };
|