jsoncmp
Version:
Fast and type-safe deep comparison for JSON-compatible data.
2 lines (1 loc) • 1.11 kB
JavaScript
;const{keys:t,prototype:{hasOwnProperty:e}}=Object,r="object"==typeof process,o=("object"==typeof window||"object"==typeof self)&&"object"==typeof navigator&&"string"==typeof navigator.userAgent,n="object"===globalThis.chrome||o&&navigator.userAgent.search(/chrome/i)>-1||r&&void 0!==process.versions?.v8&&"object"!=typeof Bun,s=void 0!==globalThis.$?.IsHTMLDDA||o&&null!==navigator.userAgent.match(/^(?!.*(chrome|crios)).*safari/i)||r&&void 0!==process.versions?.webkit;module.exports=function r(o,i){if(null===o||null===i||"object"!=typeof o||"object"!=typeof i)return o===i;const c=Array.isArray(o),f=Array.isArray(i);if(c&&f){const t=o.length;if(t!==i.length)return!1;for(let e=t-1;e>=0;e--){const t=o[e],n=i[e];if(t!==n&&!r(t,n))return!1}return!0}if(!c&&!f){const c=t(o),f=c.length;if(f!==t(i).length)return!1;if(n&&f>1&&f<20||s&&f<66)for(const t in o){const n=i[t];if(void 0===n&&!e.call(i,t))return!1;const s=o[t];if(s!==n&&!r(s,n))return!1}else for(let t=f-1;t>=0;t--){const n=c[t],s=i[n];if(void 0===s&&!e.call(i,n))return!1;const f=o[n];if(f!==s&&!r(f,s))return!1}return!0}return!1};