{"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":["diff","from"]}