hu
Version:
Functional utility helper library
134 lines • 5.55 kB
JavaScript
{
var _ns_ = {
id: 'hu.lib.macros',
doc: void 0
};
var hu_lib_function = require('./function');
var curry = hu_lib_function.curry;
var compose = hu_lib_function.compose;
var hu_lib_type = require('./type');
var isString = hu_lib_type.isString;
var isArray = hu_lib_type.isArray;
var isNumber = hu_lib_type.isNumber;
var isUndef = hu_lib_type.isUndef;
var isObject = hu_lib_type.isObject;
}
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
void 0;
{
var _ns_ = {
id: 'hu.lib.equality',
doc: void 0
};
var hu_lib_number = require('./number');
var inc = hu_lib_number.inc;
var dec = hu_lib_number.dec;
var hu_lib_object = require('./object');
var keys = hu_lib_object.keys;
var hu_lib_type = require('./type');
var isDate = hu_lib_type.isDate;
var isArray = hu_lib_type.isArray;
var isObject = hu_lib_type.isObject;
var isFn = hu_lib_type.isFn;
var isNull = hu_lib_type.isNull;
var isUndef = hu_lib_type.isUndef;
var isString = hu_lib_type.isString;
var isNumber = hu_lib_type.isNumber;
var isBool = hu_lib_type.isBool;
var isIterable = hu_lib_type.isIterable;
var isPattern = hu_lib_type.isPattern;
var isPatternEqual = hu_lib_type.isPatternEqual;
var isDateEqual = hu_lib_type.isDateEqual;
}
var isDateEqual = exports.isDateEqual = function isDateEqual() {
var args = Array.prototype.slice.call(arguments, 0);
return curry(function (x, y) {
return isDate(x) && isDate(y) && Number(x) === Number(y);
}).apply(void 0, args);
};
var dateEqual = exports.dateEqual = isDateEqual;
var isPatternEqual = exports.isPatternEqual = function isPatternEqual() {
var args = Array.prototype.slice.call(arguments, 0);
return curry(function (x, y) {
return isPattern(x) && isPattern(y) && x.source === y.source && x.global === y.global && x.multiline === y.multiline && x.ignoreCase === y.ignoreCase;
}).apply(void 0, args);
};
var isRegExpEqual = exports.isRegExpEqual = isPatternEqual;
var patternEqual = exports.patternEqual = isPatternEqual;
var isArrayEqual = exports.isArrayEqual = function isArrayEqual() {
var args = Array.prototype.slice.call(arguments, 0);
return curry(function (x, y) {
return isArray(x) && isArray(y) && x.length === y.length && function loop() {
var recur = loop;
var xsø1 = x;
var ysø1 = y;
var indexø1 = 0;
var countø1 = x.length;
do {
recur = indexø1 < countø1 ? isEqual((xsø1 || 0)[indexø1], (ysø1 || 0)[indexø1]) ? (loop[0] = xsø1, loop[1] = ysø1, loop[2] = inc(indexø1), loop[3] = countø1, loop) : false : true;
} while (xsø1 = loop[0], ysø1 = loop[1], indexø1 = loop[2], countø1 = loop[3], recur === loop);
return recur;
}.call(this);
}).apply(void 0, args);
};
var arrayEqual = exports.arrayEqual = isArrayEqual;
var isObjectEqual = exports.isObjectEqual = function isObjectEqual() {
var args = Array.prototype.slice.call(arguments, 0);
return curry(function (x, y) {
return isObject(x) && isObject(y) && function () {
var xKeysø1 = keys(x);
var yKeysø1 = keys(y);
var xCountø1 = xKeysø1.length;
var yCountø1 = yKeysø1.length;
return xCountø1 === yCountø1 && function loop() {
var recur = loop;
var indexø1 = 0;
var countø1 = xCountø1;
var keysø1 = xKeysø1;
do {
recur = indexø1 < countø1 ? isEqual((x || 0)[(keysø1 || 0)[indexø1]], (y || 0)[(keysø1 || 0)[indexø1]]) ? (loop[0] = inc(indexø1), loop[1] = countø1, loop[2] = keysø1, loop) : false : true;
} while (indexø1 = loop[0], countø1 = loop[1], keysø1 = loop[2], recur === loop);
return recur;
}.call(this);
}.call(this);
}).apply(void 0, args);
};
var objectEqual = exports.objectEqual = isObjectEqual;
var isEqual = exports.isEqual = function isEqual() {
switch (arguments.length) {
case 1:
var x = arguments[0];
return true;
case 2:
var x = arguments[0];
var y = arguments[1];
return x === y || (isNull(x) ? isNull(y) : isUndef(y) ? isUndef(x) : isString(x) ? isString(y) && x === y : isNumber(x) ? isNumber(y) && x === y : isFn(x) ? false : isBool(x) ? false : isDate(x) ? isDateEqual(x, y) : isArray(x) ? isArrayEqual(x, y, [], []) : isPattern(x) ? isPatternEqual(x, y) : 'else' ? isObjectEqual(x, y) : void 0);
default:
var x = arguments[0];
var y = arguments[1];
var more = Array.prototype.slice.call(arguments, 2);
return function loop() {
var recur = loop;
var previousø1 = x;
var currentø1 = y;
var indexø1 = 0;
var countø1 = more.length;
do {
recur = isEqual(previousø1, currentø1) && (indexø1 < countø1 ? (loop[0] = currentø1, loop[1] = (more || 0)[indexø1], loop[2] = inc(indexø1), loop[3] = countø1, loop) : true);
} while (previousø1 = loop[0], currentø1 = loop[1], indexø1 = loop[2], countø1 = loop[3], recur === loop);
return recur;
}.call(this);
}
};
var equal = exports.equal = isEqual;
var isDeepEqual = exports.isDeepEqual = isEqual;
var deepEqual = exports.deepEqual = isEqual;