{"version":3,"sources":["../../../src/utils/differ.ts"],"sourcesContent":["const type = {\n\tstring: (v: unknown): v is string => v?.constructor?.name === 'String',\n\tregex: (v: unknown): v is RegExp => v?.constructor?.name === 'RegExp',\n\tsymbol: (v: unknown): v is Symbol => v?.constructor?.name === 'Symbol',\n\tfunction: (v: unknown): v is Function => v?.constructor?.name === 'Function',\n\tbigint: (v: unknown): v is BigInt => v?.constructor?.name === 'BigInt',\n\tnumber: (v: unknown): v is number => v?.constructor?.name === 'Number' && !Number.isNaN(v),\n\tnan: (v: unknown): v is number => Number.isNaN(v),\n\tnull: (v: unknown): v is null => v === null,\n\tundefined: (v: unknown): v is undefined => v === undefined,\n\tboolean: (v: unknown): v is boolean => v?.constructor?.name === 'Boolean',\n\tarray: (v: unknown): v is unknown[] => Array.isArray(v),\n\tdate: (v: unknown): v is Date => v?.constructor?.name === 'Date' && v instanceof Date && !Number.isNaN(v.getTime()),\n\tset: (value: unknown): value is Set<unknown> => value?.constructor?.name === 'Set',\n\tobject: (value: unknown): value is object => value?.constructor?.name === 'Object',\n\tmap: (value: unknown): value is Map<unknown, unknown> => value?.constructor?.name === 'Map',\n}\n\nfunction getDiff(val1: any, val2: any, parent?: string) {\n\tif (!type.object(val1) || !type.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 (type.object(obj1) && type.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 (type.string(v1)) return v1 === v2\n\tif (type.number(v1)) return v1 === v2\n\tif (type.bigint(v1)) return v1 === v2\n\tif (type.boolean(v1)) return v1 === v2\n\tif (type.null(v1)) return v1 === v2\n\tif (type.undefined(v1)) return v1 === v2\n\tif (type.function(v1)) return v1 === v2\n\n\tif (type.regex(v1)) return type.regex(v2) && v1.source === v2.source\n\tif (type.nan(v1)) return type.nan(v2)\n\tif (type.date(v1)) return type.date(v2) && v1.getTime() === v2.getTime()\n\n\tconst [val1, val2] = [v1, v2].map((v) => {\n\t\tif (type.map(v)) return Object.fromEntries(v.entries())\n\t\tif (type.set(v)) return [...v]\n\t\treturn v\n\t})\n\n\tif (val1 === val2) return true\n\n\tif (type.array(val1)) {\n\t\tif (!type.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 (type.object(val1) && type.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] = type.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 (type.undefined(v1)) return v2\n\tif (type.undefined(v2)) return v1\n\tif (type.array(v1) && type.array(v2)) {\n\t\treturn Array.from({ length: Math.max(v1.length, v2.length) }, (_, i) => merge(v1[i], v2[i]))\n\t}\n\tif (type.object(v1) && type.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":["differ_exports","__export","diff","equal","from","merge","__toCommonJS","type","v","value","getDiff","val1","val2","parent","keys","key","parentKey","obj1","obj2","v1","v2","c","keys1","keys2","deepMerge","to","merged","obj","formObject","acc","k","_","i"]}