UNPKG

@grafana/faro-core

Version:
59 lines 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deepEqual = deepEqual; const is_1 = require("./is"); // This function was inspired by fast-deep-equal // fast-deep-equal has issues with Rollup and also it checks for some edge cases that we don't need function deepEqual(a, b) { if (a === b) { return true; } // Using isTypeOf instead of isNumber as isNumber also checks against NaN if ((0, is_1.isTypeof)(a, 'number') && isNaN(a)) { return (0, is_1.isTypeof)(b, 'number') && isNaN(b); } const aIsArray = (0, is_1.isArray)(a); const bIsArray = (0, is_1.isArray)(b); if (aIsArray !== bIsArray) { return false; } if (aIsArray && bIsArray) { const length = a.length; if (length !== b.length) { return false; } for (let idx = length; idx-- !== 0;) { if (!deepEqual(a[idx], b[idx])) { return false; } } return true; } const aIsObject = (0, is_1.isObject)(a); const bIsObject = (0, is_1.isObject)(b); if (aIsObject !== bIsObject) { return false; } if (a && b && aIsObject && bIsObject) { const aKeys = Object.keys(a); const bKeys = Object.keys(b); const aLength = aKeys.length; const bLength = bKeys.length; if (aLength !== bLength) { return false; } for (let aKey of aKeys) { if (!bKeys.includes(aKey)) { return false; } } for (let aKey of aKeys) { if (!deepEqual(a[aKey], b[aKey])) { return false; } } return true; } return false; } //# sourceMappingURL=deepEqual.js.map