UNPKG

4.75 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.getObject = getObject;
7exports.purge = purge;
8exports.extract = extract;
9exports.get = get;
10exports.performGetOnProperties = performGetOnProperties;
11exports.filterProperties = filterProperties;
12exports.filterPropertiesOnValues = filterPropertiesOnValues;
13exports.isObject = exports.cloneWithout = void 0;
14
15function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
16
17function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
18
19function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
20
21function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
23var keys = Object.keys,
24 entries = Object.entries;
25/**
26 * Get a shallow clone of an object without the specified properties.
27 *
28 * @param {Object} object
29 * @param {*} exclusions
30 * @return {Object}
31 */
32
33var cloneWithout = function cloneWithout(object) {
34 for (var _len = arguments.length, exclusions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
35 exclusions[_key - 1] = arguments[_key];
36 }
37
38 return keys(object).reduce(function (accumulator, key) {
39 if (!exclusions.includes(key)) {
40 accumulator[key] = object[key];
41 }
42
43 return accumulator;
44 }, {});
45};
46/**
47 * @param {Object|string} value
48 * @return {boolean}
49 */
50
51
52exports.cloneWithout = cloneWithout;
53
54var isObject = function isObject(value) {
55 return typeof value !== 'string';
56};
57/**
58 * @param {Array} array
59 * @return {Object}
60 */
61
62
63exports.isObject = isObject;
64
65function getObject(array) {
66 var _array$filter = array.filter(function (value) {
67 return isObject(value);
68 }),
69 _array$filter2 = _slicedToArray(_array$filter, 2),
70 object = _array$filter2[0],
71 invalid = _array$filter2[1];
72
73 if (object === undefined) {
74 throw new TypeError('no object');
75 }
76
77 if (invalid !== undefined) {
78 throw new TypeError('multiple objects');
79 }
80
81 return object;
82}
83/**
84 * @param {Array} rest
85 * @return {Object}
86 */
87
88
89function purge() {
90 for (var _len2 = arguments.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
91 rest[_key2] = arguments[_key2];
92 }
93
94 var object = getObject(rest);
95 return entries(object).reduce(function (accumulator, _ref) {
96 var _ref2 = _slicedToArray(_ref, 2),
97 key = _ref2[0],
98 value = _ref2[1];
99
100 if (!rest.includes(key)) {
101 accumulator[key] = value;
102 }
103
104 return accumulator;
105 }, {});
106}
107/**
108 * @param rest
109 * @return {Array}
110 */
111
112
113function extract() {
114 for (var _len3 = arguments.length, rest = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
115 rest[_key3] = arguments[_key3];
116 }
117
118 var object = getObject(rest);
119
120 var map = function map(value) {
121 if (value === object) {
122 return purge.apply(void 0, rest);
123 }
124
125 return object[value];
126 };
127
128 return rest.map(map);
129} // ZS-FIXME: complicated and unreadable.
130// 1) add ESDoc documentation for function purpose, paramaters and return value
131// 2) write unit tests
132// 3) enable ESLint
133// 4) refactor
134
135/*eslint-disable*/
136
137
138function get(obj, path, def) {
139 var fullPath = path.replace(/\[/g, '.').replace(/]/g, '').split('.').filter(Boolean);
140 if (!obj) return def || undefined;
141 return fullPath.every(everyFunc) ? obj : def;
142
143 function everyFunc(step) {
144 return !(step && obj && (obj = obj[step]) === undefined);
145 }
146}
147/**
148 * @param {Object} object
149 * @param {Object} paramGetters
150 * @return {Object}
151 */
152
153
154function performGetOnProperties(object, paramGetters) {
155 return keys(object).reduce(function (acc, param) {
156 acc[param] = get(object, paramGetters[param]);
157 return acc;
158 }, {});
159}
160/**
161 * @param {Object} object
162 * @param rest
163 * @return {Object}
164 */
165
166
167function filterProperties(object) {
168 for (var _len4 = arguments.length, rest = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
169 rest[_key4 - 1] = arguments[_key4];
170 }
171
172 return rest.reduce(function addProperty(accumulator, x) {
173 if (object.hasOwnProperty(x)) {
174 accumulator[x] = object[x];
175 }
176
177 return accumulator;
178 }, {});
179}
180
181function filterPropertiesOnValues(object, filter) {
182 return keys(object).reduce(function filterProps(accumulator, x) {
183 if (filter(object[x])) {
184 accumulator[x] = object[x];
185 }
186
187 return accumulator;
188 }, {});
189}
\No newline at end of file