{"version":3,"file":"json.mjs","sources":["../../src/utils/json.ts"],"sourcesContent":["import { isArray, isObject, zip, isEqual, uniq } from 'lodash/fp';\n\nconst createContext = (): Context => ({ path: [] });\n\n/**\n * Compute differences between two JSON objects and returns them\n *\n * @param a - First object\n * @param b - Second object\n * @param ctx - Context used to keep track of the current path during recursion\n */\nexport const diff = (a: unknown, b: unknown, ctx: Context = createContext()): Diff[] => {\n const diffs: Diff[] = [];\n const { path } = ctx;\n\n const aType = typeof a;\n const bType = typeof b;\n\n // Define helpers\n\n const added = () => {\n diffs.push({ kind: 'added', path, type: bType, value: b });\n return diffs;\n };\n\n const deleted = () => {\n diffs.push({ kind: 'deleted', path, type: aType, value: a });\n return diffs;\n };\n\n const modified = () => {\n diffs.push({\n kind: 'modified',\n path,\n types: [aType, bType],\n values: [a, b],\n });\n return diffs;\n };\n\n if (isArray(a) && isArray(b)) {\n let k = 0;\n\n for (const [aItem, bItem] of zip(a, b)) {\n const kCtx: Context = { path: [...path, k.toString()] };\n const kDiffs = diff(aItem, bItem, kCtx);\n\n diffs.push(...kDiffs);\n\n k += 1;\n }\n\n return diffs;\n }\n\n if (isObject(a) && isObject(b)) {\n const keys = uniq(Object.keys(a).concat(Object.keys(b)));\n\n for (const key of keys) {\n const aValue = (a as Record)[key];\n const bValue = (b as Record)[key];\n\n const nestedDiffs = diff(aValue, bValue, { path: [...path, key] });\n\n diffs.push(...nestedDiffs);\n }\n\n return diffs;\n }\n\n if (!isEqual(a, b)) {\n if (aType === 'undefined') {\n return added();\n }\n\n if (bType === 'undefined') {\n return deleted();\n }\n\n return modified();\n }\n\n return diffs;\n};\n\nexport interface AddedDiff {\n kind: 'added';\n path: string[];\n type: string;\n value: T;\n}\n\nexport interface ModifiedDiff {\n kind: 'modified';\n path: string[];\n types: [string, string];\n values: [T, P];\n}\n\nexport interface DeletedDiff {\n kind: 'deleted';\n path: string[];\n type: string;\n value: T;\n}\n\nexport type Diff = AddedDiff | ModifiedDiff | DeletedDiff;\n\nexport interface Context {\n path: string[];\n}\n"],"names":["createContext","path","diff","a","b","ctx","diffs","aType","bType","added","push","kind","type","value","deleted","modified","types","values","isArray","k","aItem","bItem","zip","kCtx","toString","kDiffs","isObject","keys","uniq","Object","concat","key","aValue","bValue","nestedDiffs","isEqual"],"mappings":"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"}