react-instantsearch-core
Version:
⚡ Lightning-fast search for React, by Algolia
53 lines (48 loc) • 1.95 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dequal = dequal;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
/* eslint-disable complexity */
/*
* Code taken from dequal/lite v2.0.0
* https://github.com/lukeed/dequal/blob/9aa73181ac7e081cd330cac67d313632ac04bb02/src/lite.js
*
* It adds a 3rd argument `compare(a, b)` that lets execute custom logic to
* compare values.
* We use it to skip comparing function references.
*/
// eslint-disable-next-line @typescript-eslint/unbound-method
var has = Object.prototype.hasOwnProperty;
function dequal(foo, bar, compare) {
// start of custom implementation
if (compare !== null && compare !== void 0 && compare(foo, bar)) {
return true;
}
// end of custom implementation
var ctor;
var len;
if (foo === bar) return true;
if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
if (ctor === Date) return foo.getTime() === bar.getTime();
if (ctor === RegExp) return foo.toString() === bar.toString();
if (ctor === Array) {
if ((len = foo.length) === bar.length) {
while (len-- && dequal(foo[len], bar[len], compare));
}
return len === -1;
}
if (!ctor || _typeof(foo) === 'object') {
len = 0;
// eslint-disable-next-line guard-for-in, no-restricted-syntax
for (ctor in foo) {
if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor], compare)) return false;
}
return Object.keys(bar).length === len;
}
}
// eslint-disable-next-line no-self-compare
return foo !== foo && bar !== bar;
}
;