UNPKG

react-instantsearch-core

Version:
53 lines (48 loc) 1.95 kB
"use strict"; 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; }