flowbite-react
Version:
Official React components built for Flowbite and Tailwind CSS
1 lines • 3.3 kB
Source Map (JSON)
{"version":3,"file":"is-equal.cjs","sources":["../../src/helpers/is-equal.ts"],"sourcesContent":["/**\n * Performs a deep equality comparison between two values.\n *\n * This function recursively compares objects and arrays, handling special cases like:\n * - RegExp objects (comparing source and flags)\n * - Objects with custom valueOf or toString methods\n * - Arrays (comparing length and each element)\n * - NaN values (which are considered equal to each other)\n *\n * @param {any} a - The first value to compare\n * @param {any} b - The second value to compare\n * @returns {boolean} True if the values are deeply equal, false otherwise\n *\n * @example\n * ```ts\n * isEqual({a: 1, b: 2}, {a: 1, b: 2}); // true\n * isEqual([1, 2, 3], [1, 2, 3]); // true\n * isEqual(/abc/g, /abc/g); // true\n * isEqual(NaN, NaN); // true\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isEqual(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n return a.every((item, index) => isEqual(item, b[index]));\n }\n\n if (a.constructor === RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a.valueOf !== Object.prototype.valueOf) {\n return a.valueOf() === b.valueOf();\n }\n\n if (a.toString !== Object.prototype.toString) {\n return a.toString() === b.toString();\n }\n const aKeys = Object.keys(a);\n\n if (aKeys.length !== Object.keys(b).length) {\n return false;\n }\n\n return aKeys.every((key) => Object.prototype.hasOwnProperty.call(b, key) && isEqual(a[key], b[key]));\n }\n\n // true if both NaN, false otherwise\n return a !== a && b !== b;\n}\n"],"names":[],"mappings":";;AACO,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;AAC9B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACf,IAAI,OAAO,IAAI;AACf;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAChE,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE;AACzC,MAAM,OAAO,KAAK;AAClB;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1B,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;AACjC,QAAQ,OAAO,KAAK;AACpB;AACA,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,EAAE;AAClC,MAAM,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AACzD;AACA,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;AAChD,MAAM,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;AACxC;AACA,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;AAClD,MAAM,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;AAC1C;AACA,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AAChD,MAAM,OAAO,KAAK;AAClB;AACA,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxG;AACA,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B;;;;"}