UNPKG

@modern-kit/utils

Version:
1 lines 5.32 kB
{"version":3,"file":"index.cjs","sources":["../../../src/validator/isEqual/isEqual.utils.ts","../../../src/validator/isEqual/index.ts"],"sourcesContent":["import { isNumber } from '../isNumber';\nimport { isFunction } from '../isFunction';\n\nconst compareObjectOrArray = (\n source: any,\n target: any,\n visited: WeakMap<object, any>\n) => {\n const sourceKeys = Object.keys(source);\n const targetKeys = Object.keys(target);\n\n if (sourceKeys.length !== targetKeys.length) {\n return false;\n }\n\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n\n if (\n !targetKeys.includes(key) ||\n !isEqualInternal(source[key], target[key], visited)\n ) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const isEqualInternal = (\n source: any,\n target: any,\n visited: WeakMap<object, any>\n) => {\n // Primitive Type\n if (source === target) {\n return true;\n }\n\n // NaN\n if (isNumber(source) && isNumber(target) && isNaN(source) && isNaN(target)) {\n return true;\n }\n\n // Function\n if (isFunction(source) && isFunction(target)) {\n return source.toString() === target.toString();\n }\n\n // Returns false if either is not an object\n if (\n typeof source !== 'object' ||\n typeof target !== 'object' ||\n source === null ||\n target === null\n ) {\n return false;\n }\n\n // Handling Circular References\n if (visited.has(source) && visited.get(source) === target) {\n return true;\n }\n\n visited.set(source, target);\n\n // Returns false if the constructors are different.\n if (source.constructor !== target.constructor) {\n return false;\n }\n\n // Set\n if (source instanceof Set) {\n if (source.size !== target.size) return false;\n\n const sourceSetToArr = [...source];\n const targetSetToArr = [...target];\n\n return compareObjectOrArray(sourceSetToArr, targetSetToArr, visited);\n }\n\n // Map\n if (source instanceof Map) {\n if (source.size !== target.size) return false;\n\n for (const [key, value] of source) {\n if (\n !target.has(key) ||\n !isEqualInternal(value, target.get(key), visited)\n ) {\n return false;\n }\n }\n return true;\n }\n\n // Object & Array\n return compareObjectOrArray(source, target, visited);\n};\n","import { isEqualInternal } from './isEqual.utils';\n\n/**\n * @description 주어진 두 값이 동일한지 여부를 판단합니다. `원시 값`, `객체`, `배열`, `Set`, `Map` 및 `함수`에 대해 정확한 비교를 수행합니다.\n *\n * @param {any} source - 비교할 첫 번째 값입니다.\n * @param {any} target - 비교할 두 번째 값입니다.\n * @returns {boolean} - 두 값이 동일하면 true, 그렇지 않으면 false를 반환합니다.\n *\n * @example\n * isEqual({ a: 1 }, { a: 1 }); // true\n * isEqual({ a: 1 }, { b: 1 }); // false\n */\nexport function isEqual(source: any, target: any): boolean {\n const visited = new WeakMap();\n\n return isEqualInternal(source, target, visited);\n}\n"],"names":["isNumber","isFunction"],"mappings":"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"}