{"version":3,"sources":["../../../src/utils/differ.ts"],"sourcesContent":["import { isType } from './isType'\n\nfunction getDiff(val1: any, val2: any, parent?: string) {\n\tif (!isType.object(val1) || !isType.object(val2)) return []\n\tconst keys = [...new Set(Object.keys(val1).concat(Object.keys(val2)))]\n\tconst diff: string[] = []\n\tfor (const key of keys) {\n\t\tconst parentKey = (parent ? `${parent}.` : '') + key\n\t\tif (!(key in val1) || !(key in val2)) {\n\t\t\tdiff.push(parentKey)\n\t\t\tcontinue\n\t\t}\n\t\tconst obj1 = val1[key]\n\t\tconst obj2 = val2[key]\n\t\tif (isType.object(obj1) && isType.object(obj2)) diff.push(...getDiff(obj1, obj2, parentKey))\n\t\telse if (!equal(obj1, obj2)) diff.push(parentKey)\n\t}\n\treturn diff\n}\n\nexport function equal(v1: unknown, v2: unknown): boolean {\n\tif (v1 === v2) return true\n\n\tif (isType.string(v1)) return v1 === v2\n\tif (isType.number(v1)) return v1 === v2\n\tif (isType.bigint(v1)) return v1 === v2\n\tif (isType.boolean(v1)) return v1 === v2\n\tif (isType.null(v1)) return v1 === v2\n\tif (isType.undefined(v1)) return v1 === v2\n\tif (isType.function(v1)) return v1 === v2\n\n\tif (isType.regex(v1)) return isType.regex(v2) && v1.source === v2.source\n\tif (isType.nan(v1)) return isType.nan(v2)\n\tif (isType.date(v1)) return isType.date(v2) && v1.getTime() === v2.getTime()\n\n\tconst [val1, val2] = [v1, v2].map((v) => {\n\t\tif (isType.map(v)) return Object.fromEntries(v.entries())\n\t\tif (isType.set(v)) return [...v]\n\t\treturn v\n\t})\n\n\tif (val1 === val2) return true\n\n\tif (isType.array(val1)) {\n\t\tif (!isType.array(val2)) return false\n\t\tif (val1.length !== val2.length) return false\n\t\treturn val1.every((c, i) => equal(c, val2.at(i)))\n\t}\n\n\tif (isType.object(val1) && isType.object(val2)) {\n\t\tconst keys1 = Object.keys(val1 ?? {})\n\t\tconst keys2 = Object.keys(val2 ?? {})\n\t\tif (keys1.length !== keys2.length) return false\n\t\tconst keys = [...new Set(keys1.concat(keys2))]\n\t\treturn keys.every((key) => key in val1 && key in val2 && equal(val1[key], val2[key]))\n\t}\n\n\treturn false\n}\n\nexport function diff(val1: unknown, val2: unknown) {\n\treturn getDiff(val1, val2)\n}\n\nexport function from(keys: string[]) {\n\tconst deepMerge = (from: object, to: object) =>\n\t\tObject.entries(from ?? {}).reduce(\n\t\t\t(merged, [key, obj]) => {\n\t\t\t\tmerged[key] = isType.object(obj) ? deepMerge(obj, merged[key] ?? {}) : obj\n\t\t\t\treturn merged\n\t\t\t},\n\t\t\t{ ...to },\n\t\t)\n\n\tconst formObject = (key: string) =>\n\t\tkey\n\t\t\t.split('.')\n\t\t\t.reverse()\n\t\t\t.reduce<Record<string, any>>((acc, k) => ({ [k]: acc ?? true }), null as any)\n\n\treturn keys.map(formObject).reduce(deepMerge, {})\n}\n\nexport function merge(v1: unknown, v2: unknown) {\n\tif (isType.undefined(v1)) return v2\n\tif (isType.undefined(v2)) return v1\n\tif (isType.array(v1) && isType.array(v2)) {\n\t\treturn Array.from({ length: Math.max(v1.length, v2.length) }, (_, i) => merge(v1[i], v2[i]))\n\t}\n\tif (isType.object(v1) && isType.object(v2)) {\n\t\tconst keys = new Set([...Object.keys(v1), ...Object.keys(v2)])\n\t\treturn Array.from(keys).reduce(\n\t\t\t(acc, key) => {\n\t\t\t\tacc[key] = merge(v1[key], v2[key])\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, any>,\n\t\t)\n\t}\n\treturn v2\n}\n"],"mappings":"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","names":["isType","getDiff","val1","val2","parent","keys","diff","key","parentKey","obj1","obj2","equal","v1","v2","v","c","i","keys1","keys2","from","deepMerge","to","merged","obj","formObject","acc","k","merge","_"]}