UNPKG

hu

Version:

Functional utility helper library

134 lines 5.55 kB
{ 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;