1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.normalize = exports.isNumberValid = undefined;
|
7 |
|
8 | var _typeof2 = require('babel-runtime/helpers/typeof');
|
9 |
|
10 | var _typeof3 = _interopRequireDefault(_typeof2);
|
11 |
|
12 | var _getIterator2 = require('babel-runtime/core-js/get-iterator');
|
13 |
|
14 | var _getIterator3 = _interopRequireDefault(_getIterator2);
|
15 |
|
16 | var _isInteger = require('babel-runtime/core-js/number/is-integer');
|
17 |
|
18 | var _isInteger2 = _interopRequireDefault(_isInteger);
|
19 |
|
20 | var _lodash = require('lodash');
|
21 |
|
22 | var _lodash2 = _interopRequireDefault(_lodash);
|
23 |
|
24 | var _defaults = require('./defaults');
|
25 |
|
26 | var defaults = _interopRequireWildcard(_defaults);
|
27 |
|
28 | var _text = require('./text');
|
29 |
|
30 | var _text2 = _interopRequireDefault(_text);
|
31 |
|
32 | var _error = require('./error');
|
33 |
|
34 | function _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 |
|
36 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
37 |
|
38 | var isNumberValid = exports.isNumberValid = function isNumberValid(n) {
|
39 | return (0, _isInteger2.default)(parseFloat(n)) && _lodash2.default.inRange(n, 8);
|
40 | };
|
41 |
|
42 | var 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 |
|
56 | var 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 |
|
101 | var 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 |
|