170 lines
3.8 KiB
JavaScript
170 lines
3.8 KiB
JavaScript
function _typeof(obj) {
|
|
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
|
_typeof = function (obj) {
|
|
return typeof obj;
|
|
};
|
|
} else {
|
|
_typeof = function (obj) {
|
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
};
|
|
}
|
|
|
|
return _typeof(obj);
|
|
}
|
|
|
|
// Generated by CoffeeScript 2.4.1
|
|
var _snake_case, _clone, _compare, is_object, is_object_literal, merge, _mutate, _snake_case2;
|
|
|
|
merge = function merge() {
|
|
return _mutate.apply(void 0, [{}].concat(Array.prototype.slice.call(arguments)));
|
|
};
|
|
|
|
_clone = function clone(target) {
|
|
if (Array.isArray(target)) {
|
|
return target.map(function (element) {
|
|
return _clone(element);
|
|
});
|
|
} else if (target && _typeof(target) === 'object') {
|
|
return _mutate({}, target);
|
|
} else {
|
|
return target;
|
|
}
|
|
};
|
|
|
|
_mutate = function mutate() {
|
|
var i, j, name, ref, source, target, v;
|
|
target = arguments[0];
|
|
|
|
for (i = j = 1, ref = arguments.length; 1 <= ref ? j < ref : j > ref; i = 1 <= ref ? ++j : --j) {
|
|
source = arguments[i];
|
|
|
|
if (is_object_literal(source)) {
|
|
if (!is_object_literal(target)) {
|
|
target = {};
|
|
}
|
|
|
|
for (name in source) {
|
|
target[name] = _mutate(target[name], source[name]);
|
|
}
|
|
} else if (Array.isArray(source)) {
|
|
target = function () {
|
|
var k, len, results;
|
|
results = [];
|
|
|
|
for (k = 0, len = source.length; k < len; k++) {
|
|
v = source[k];
|
|
results.push(_mutate(void 0, v));
|
|
}
|
|
|
|
return results;
|
|
}();
|
|
} else if (source !== void 0) {
|
|
target = source;
|
|
}
|
|
}
|
|
|
|
return target;
|
|
};
|
|
|
|
_snake_case2 = function snake_case(source) {
|
|
var convert = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
var name, src, target, u;
|
|
target = {};
|
|
|
|
if (is_object_literal(source)) {
|
|
u = typeof convert === 'number' && convert > 0 ? convert - 1 : convert;
|
|
|
|
for (name in source) {
|
|
src = source[name];
|
|
|
|
if (convert) {
|
|
name = _snake_case(name);
|
|
}
|
|
|
|
target[name] = _snake_case2(src, u);
|
|
}
|
|
} else {
|
|
target = source;
|
|
}
|
|
|
|
return target;
|
|
};
|
|
|
|
_compare = function compare(el1, el2) {
|
|
var i, j, k, key, keys1, keys2, len, ref;
|
|
|
|
if (is_object_literal(el1)) {
|
|
if (!is_object_literal(el2)) {
|
|
return false;
|
|
}
|
|
|
|
keys1 = Object.keys(el1).sort();
|
|
keys2 = Object.keys(el2).sort();
|
|
|
|
if (keys1.length !== keys2.length) {
|
|
return false;
|
|
}
|
|
|
|
for (i = j = 0, len = keys1.length; j < len; i = ++j) {
|
|
key = keys1[i];
|
|
|
|
if (key !== keys2[i]) {
|
|
return false;
|
|
}
|
|
|
|
if (!_compare(el1[key], el2[key])) {
|
|
return false;
|
|
}
|
|
}
|
|
} else if (Array.isArray(el1)) {
|
|
if (!Array.isArray(el2)) {
|
|
return false;
|
|
}
|
|
|
|
if (el1.length !== el2.length) {
|
|
return false;
|
|
}
|
|
|
|
for (i = k = 0, ref = el1.length; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) {
|
|
if (!_compare(el1[i], el2[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
if (el1 !== el2) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
_snake_case = function _snake_case(str) {
|
|
return str.replace(/([A-Z])/g, function (_, match, index) {
|
|
return '_' + match.toLowerCase();
|
|
});
|
|
};
|
|
|
|
is_object = function is_object(obj) {
|
|
return obj && _typeof(obj) === 'object' && !Array.isArray(obj);
|
|
};
|
|
|
|
is_object_literal = function is_object_literal(obj) {
|
|
var test;
|
|
test = obj;
|
|
|
|
if (_typeof(obj) !== 'object' || obj === null) {
|
|
return false;
|
|
} else {
|
|
while (!false) {
|
|
if (Object.getPrototypeOf(test = Object.getPrototypeOf(test)) === null) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return Object.getPrototypeOf(obj) === test;
|
|
}
|
|
};
|
|
|
|
export { _clone as clone, _compare as compare, is_object, is_object_literal, merge, _mutate as mutate, _snake_case2 as snake_case };
|