UNPKG

3.96 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.normalize = exports.isNumberValid = undefined;
7
8var _typeof2 = require('babel-runtime/helpers/typeof');
9
10var _typeof3 = _interopRequireDefault(_typeof2);
11
12var _getIterator2 = require('babel-runtime/core-js/get-iterator');
13
14var _getIterator3 = _interopRequireDefault(_getIterator2);
15
16var _isInteger = require('babel-runtime/core-js/number/is-integer');
17
18var _isInteger2 = _interopRequireDefault(_isInteger);
19
20var _lodash = require('lodash');
21
22var _lodash2 = _interopRequireDefault(_lodash);
23
24var _defaults = require('./defaults');
25
26var defaults = _interopRequireWildcard(_defaults);
27
28var _text = require('./text');
29
30var _text2 = _interopRequireDefault(_text);
31
32var _error = require('./error');
33
34function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38var isNumberValid = exports.isNumberValid = function isNumberValid(n) {
39 return (0, _isInteger2.default)(parseFloat(n)) && _lodash2.default.inRange(n, 8);
40};
41
42var normArr = function normArr(arr, opts) {
43 if (arr.length > 8) {
44 throw new _error.BadOptionsError(opts, _text2.default.tooManyLevels(arr.length));
45 }
46
47 return arr.map(function (val) {
48 if (val && _lodash2.default.isString(val)) return val;
49 if (_lodash2.default.isNumber(val) && isFinite(val)) return val.toString();
50 if (_lodash2.default.isNull(val) || _lodash2.default.isUndefined(val)) return undefined;
51
52 throw new _error.BadOptionsError(opts, _text2.default.levelNotString(val));
53 });
54};
55
56var normObj = function normObj(obj, opts) {
57 var lvlNums = _lodash2.default.values(obj);
58
59 var _iteratorNormalCompletion = true;
60 var _didIteratorError = false;
61 var _iteratorError = undefined;
62
63 try {
64 for (var _iterator = (0, _getIterator3.default)(lvlNums), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
65 var num = _step.value;
66
67 if (!isNumberValid(num)) {
68 throw new _error.BadOptionsError(opts, _text2.default.invalidLevelNum(num));
69 }
70 }
71 } catch (err) {
72 _didIteratorError = true;
73 _iteratorError = err;
74 } finally {
75 try {
76 if (!_iteratorNormalCompletion && _iterator.return) {
77 _iterator.return();
78 }
79 } finally {
80 if (_didIteratorError) {
81 throw _iteratorError;
82 }
83 }
84 }
85
86 var duplicates = (0, _lodash2.default)(obj).countBy().pick(function (lvl) {
87 return lvl > 1;
88 }).keys().value();
89
90 if (duplicates.length) {
91 throw new _error.BadOptionsError(opts, _text2.default.duplicateLevelNums(duplicates));
92 }
93
94 return _lodash2.default.reduce(obj, function (arr, i, name) {
95 var reducedArr = arr;
96 reducedArr[i] = name;
97 return reducedArr;
98 }, []);
99};
100
101var normalize = exports.normalize = function normalize(opts) {
102 var custom = opts.levels;
103
104 if (!_lodash2.default.isUndefined(custom) && !_lodash2.default.isNull(custom) && !_lodash2.default.isObject(custom)) {
105 throw new _error.BadOptionsError(opts, _text2.default.levelsNotObj(typeof custom === 'undefined' ? 'undefined' : (0, _typeof3.default)(custom)));
106 }
107
108 if (!custom) {
109 return defaults.levels.slice();
110 }
111
112 custom = _lodash2.default.isArray(custom) ? normArr(custom, opts) : normObj(custom, opts);
113
114 var levels = defaults.levels.map(function (lvl, i) {
115 return custom[i] || lvl;
116 });
117
118 var duplicates = (0, _lodash2.default)(levels).countBy().pick(function (count) {
119 return count > 1;
120 }).keys().value();
121
122 if (duplicates.length) {
123 throw new _error.BadOptionsError(opts, _text2.default.duplicateLevels(duplicates));
124 }
125
126 return levels;
127};
128//# sourceMappingURL=levels.js.map