if (typeof globalThis.__tropelDeepEqual !== 'function') {
globalThis.__tropelDeepEqual = function __tropelDeepEqual(a, b, seen) {
if (a === b) return true;
if (typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b)) return true;
if (a === null || b === null || a === undefined || b === undefined) return a === b;
if (typeof a !== typeof b) return false;
if (a instanceof Date || b instanceof Date) {
if (!(a instanceof Date && b instanceof Date)) return false;
var ta = a.getTime(), tb = b.getTime();
return (isNaN(ta) && isNaN(tb)) || ta === tb;
}
if (a instanceof RegExp || b instanceof RegExp) {
if (!(a instanceof RegExp && b instanceof RegExp)) return false;
return String(a) === String(b);
}
if (a instanceof ArrayBuffer || b instanceof ArrayBuffer) {
if (!(a instanceof ArrayBuffer) || !(b instanceof ArrayBuffer)) return false;
if (a.byteLength !== b.byteLength) return false;
var va = new Uint8Array(a), vb = new Uint8Array(b);
for (var i = 0; i < va.length; i++) {
if (va[i] !== vb[i]) return false;
}
return true;
}
if (a instanceof DataView || b instanceof DataView) {
if (!(a instanceof DataView && b instanceof DataView)) return false;
if (a.byteLength !== b.byteLength) return false;
var da = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
var db = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
for (var i = 0; i < da.length; i++) {
if (da[i] !== db[i]) return false;
}
return true;
}
if (ArrayBuffer.isView(a) && !(a instanceof DataView) ||
ArrayBuffer.isView(b) && !(b instanceof DataView)) {
if (!ArrayBuffer.isView(a) || !ArrayBuffer.isView(b)) return false;
if (a.constructor !== b.constructor) return false;
if (a.byteLength !== b.byteLength) return false;
var ta = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
var tb = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
for (var i = 0; i < ta.length; i++) {
if (ta[i] !== tb[i]) return false;
}
return true;
}
if (Array.isArray(a)) {
if (!Array.isArray(b) || a.length !== b.length) return false;
seen = seen || [];
for (var s = 0; s < seen.length; s++) {
if (seen[s][0] === a && seen[s][1] === b) return true;
}
seen.push([a, b]);
for (var i = 0; i < a.length; i++) {
if (!__tropelDeepEqual(a[i], b[i], seen)) {
seen.pop();
return false;
}
}
seen.pop();
return true;
}
if (typeof a === 'object') {
if (Array.isArray(b) || b === null || b === undefined) return false;
if (a instanceof Map || b instanceof Map) {
if (!(b instanceof Map) || a.size !== b.size) return false;
seen = seen || [];
for (var s = 0; s < seen.length; s++) {
if (seen[s][0] === a && seen[s][1] === b) return true;
}
seen.push([a, b]);
var aEntries = Array.from(a.entries());
var bEntries = Array.from(b.entries());
var usedB = [];
outer:
for (var mi = 0; mi < aEntries.length; mi++) {
for (var mj = 0; mj < bEntries.length; mj++) {
if (usedB[mj]) continue;
if (__tropelDeepEqual(aEntries[mi][0], bEntries[mj][0], seen) &&
__tropelDeepEqual(aEntries[mi][1], bEntries[mj][1], seen)) {
usedB[mj] = true;
continue outer;
}
}
seen.pop();
return false;
}
seen.pop();
return true;
}
if (a instanceof Set || b instanceof Set) {
if (!(b instanceof Set) || a.size !== b.size) return false;
seen = seen || [];
for (var s = 0; s < seen.length; s++) {
if (seen[s][0] === a && seen[s][1] === b) return true;
}
seen.push([a, b]);
var aMembers = Array.from(a);
var bMembers = Array.from(b);
var usedS = [];
outer2:
for (var si = 0; si < aMembers.length; si++) {
for (var sj = 0; sj < bMembers.length; sj++) {
if (usedS[sj]) continue;
if (__tropelDeepEqual(aMembers[si], bMembers[sj], seen)) {
usedS[sj] = true;
continue outer2;
}
}
seen.pop();
return false;
}
seen.pop();
return true;
}
if (a instanceof Error || b instanceof Error) {
if (!(a instanceof Error) || !(b instanceof Error)) return false;
if (a.constructor !== b.constructor || a.message !== b.message || a.name !== b.name) {
return false;
}
seen = seen || [];
for (var e = 0; e < seen.length; e++) {
if (seen[e][0] === a && seen[e][1] === b) return true;
}
seen.push([a, b]);
var errorKeysA = Object.keys(a).sort();
var errorKeysB = Object.keys(b).sort();
if (errorKeysA.length !== errorKeysB.length) {
seen.pop();
return false;
}
for (var ei = 0; ei < errorKeysA.length; ei++) {
if (errorKeysA[ei] !== errorKeysB[ei] ||
!__tropelDeepEqual(a[errorKeysA[ei]], b[errorKeysB[ei]], seen)) {
seen.pop();
return false;
}
}
seen.pop();
return true;
}
if (Object.getPrototypeOf(a) !== Object.prototype ||
Object.getPrototypeOf(b) !== Object.prototype) {
return a === b;
}
seen = seen || [];
for (var k = 0; k < seen.length; k++) {
if (seen[k][0] === a && seen[k][1] === b) return true;
}
seen.push([a, b]);
var keysA = Object.keys(a).sort();
var keysB = Object.keys(b).sort();
if (keysA.length !== keysB.length) {
seen.pop();
return false;
}
for (var j = 0; j < keysA.length; j++) {
if (keysA[j] !== keysB[j] || !__tropelDeepEqual(a[keysA[j]], b[keysB[j]], seen)) {
seen.pop();
return false;
}
}
seen.pop();
return true;
}
return a === b;
};
}