12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import _typeof from "@babel/runtime/helpers/esm/typeof";
- import warning from "./warning";
- /**
- * Deeply compares two object literals.
- * @param obj1 object 1
- * @param obj2 object 2
- * @param shallow shallow compare
- * @returns
- */
- function isEqual(obj1, obj2) {
- var shallow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f
- var refSet = new Set();
- function deepEqual(a, b) {
- var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
- var circular = refSet.has(a);
- warning(!circular, 'Warning: There may be circular references');
- if (circular) {
- return false;
- }
- if (a === b) {
- return true;
- }
- if (shallow && level > 1) {
- return false;
- }
- refSet.add(a);
- var newLevel = level + 1;
- if (Array.isArray(a)) {
- if (!Array.isArray(b) || a.length !== b.length) {
- return false;
- }
- for (var i = 0; i < a.length; i++) {
- if (!deepEqual(a[i], b[i], newLevel)) {
- return false;
- }
- }
- return true;
- }
- if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {
- var keys = Object.keys(a);
- if (keys.length !== Object.keys(b).length) {
- return false;
- }
- return keys.every(function (key) {
- return deepEqual(a[key], b[key], newLevel);
- });
- }
- // other
- return false;
- }
- return deepEqual(obj1, obj2);
- }
- export default isEqual;
|