UNPKG

1.46 kBJavaScriptView Raw
1'use strict';
2
3const typeOf = v => ({}).toString.call(v).slice(8, -1);
4
5module.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};