{"version":3,"sources":["../src/index.ts","../src/diff.ts","../src/diffWith.ts","../src/patch.ts"],"sourcesContent":["import diff from \"./diff\";\nimport diffWith from \"./diffWith\";\nimport patch from \"./patch\";\nimport type { DiffResult } from \"./types\";\n\nexport { diff, diffWith, patch, DiffResult };\n","import { ADDED, CHANGED, DELETED } from \"./constants\";\nimport { DiffResult } from \"./types\";\n\nfunction objDiff(\n  a: object,\n  b: object,\n  path: Array<string | number>,\n  _refs: WeakSet<WeakKey>\n): DiffResult[] {\n  const result: DiffResult[] = [];\n\n  if (\n    typeof a === \"object\" &&\n    typeof b === \"object\" &&\n    a !== null &&\n    b !== null\n  ) {\n    // For circular refs\n    if (_refs.has(a) && _refs.has(b)) {\n      return [];\n    }\n\n    _refs.add(a as WeakKey);\n    _refs.add(b as WeakKey);\n\n    if (Array.isArray(a) && Array.isArray(b)) {\n      for (let i = 0; i < a.length; i++) {\n        if (Object.hasOwn(b, i)) {\n          result.push(\n            ...objDiff(\n              a[i],\n              (b as Array<unknown>)[i] as object,\n              [...path, i],\n              _refs\n            )\n          );\n        } else {\n          result.push({ t: DELETED, p: [...path, i] });\n        }\n      }\n\n      for (let i = 0; i < (b as []).length; i++) {\n        if (!Object.hasOwn(a, i)) {\n          result.push({\n            t: ADDED,\n            p: [...path, i],\n            v: (b as Array<unknown>)[i],\n          });\n        }\n      }\n\n      _refs.delete(a);\n      _refs.delete(b);\n\n      return result;\n    }\n\n    if (\n      Object.prototype.toString.call(a) === \"[object Object]\" &&\n      Object.prototype.toString.call(b) === \"[object Object]\"\n    ) {\n      for (const k of Object.keys(a)) {\n        if (Object.hasOwn(b, k)) {\n          result.push(\n            ...objDiff(\n              (a as Record<string, unknown>)[k] as object,\n              (b as Record<string, unknown>)[k] as object,\n              [...path, k],\n              _refs\n            )\n          );\n        } else {\n          result.push({ t: DELETED, p: [...path, k] });\n        }\n      }\n\n      for (const k of Object.keys(b)) {\n        if (!Object.hasOwn(a, k)) {\n          result.push({\n            t: ADDED,\n            p: [...path, k],\n            v: (b as Record<string, unknown>)[k],\n          });\n        }\n      }\n\n      _refs.delete(a);\n      _refs.delete(b);\n\n      return result;\n    }\n\n    if (a instanceof Date && b instanceof Date) {\n      if (!Object.is(a.getTime(), (b as Date).getTime())) {\n        return [{ t: CHANGED, p: path, v: b }];\n      }\n    }\n\n    if (a instanceof Map && b instanceof Map) {\n      for (const k of a.keys()) {\n        if (b.has(k)) {\n          result.push(...objDiff(a.get(k), b.get(k), [...path, k], _refs));\n        } else {\n          result.push({ t: DELETED, p: [...path, k] });\n        }\n      }\n\n      for (const k of b.keys()) {\n        if (!a.has(k)) {\n          result.push({\n            t: ADDED,\n            p: [...path, k],\n            v: b.get(k),\n          });\n        }\n      }\n    }\n\n    if (a instanceof Set && b instanceof Set) {\n      const aArr = [...a];\n      const bArr = [...b];\n\n      for (let i = 0; i < aArr.length; i++) {\n        if (Object.hasOwn(bArr, i)) {\n          result.push(\n            ...objDiff(\n              aArr[i],\n              (bArr as Array<unknown>)[i] as object,\n              [...path, i],\n              _refs\n            )\n          );\n        } else {\n          result.push({ t: DELETED, p: [...path, i], v: aArr[i] });\n        }\n      }\n\n      for (let i = 0; i < (bArr as []).length; i++) {\n        if (!Object.hasOwn(aArr, i)) {\n          result.push({\n            t: ADDED,\n            p: [...path, i],\n            v: (bArr as Array<unknown>)[i],\n          });\n        }\n      }\n    }\n\n    if (\n      Object.prototype.toString.call(a) !== Object.prototype.toString.call(b)\n    ) {\n      return [{ t: CHANGED, p: path, v: b }];\n    }\n  } else {\n    if (!Object.is(a, b)) {\n      return [{ t: CHANGED, p: path, v: b }];\n    }\n  }\n\n  return result;\n}\n\n/**\n * Performs a deep difference between two objects.\n *\n * @example\n * diff({a: 1}, {a: 5}) //=> [{t: 2, p: ['a'], v: 5}]\n */\nexport default function diff(obj1: object, obj2: object): Array<DiffResult> {\n  return objDiff(obj1, obj2, [], new WeakSet());\n}\n","import { isObj } from \"@opentf/std\";\nimport { ADDED, CHANGED, DELETED } from \"./constants\";\nimport { DiffResult } from \"./types\";\n\nfunction objDiff(\n  a: object,\n  b: object,\n  path: Array<string | number>,\n  _refs: WeakSet<WeakKey>,\n  fn: (a: object, b: object) => boolean | undefined\n): DiffResult[] {\n  const result: DiffResult[] = [];\n\n  if (\n    typeof a === \"object\" &&\n    typeof b === \"object\" &&\n    a !== null &&\n    b !== null\n  ) {\n    // For circular refs\n    if (_refs.has(a) && _refs.has(b)) {\n      return [];\n    }\n\n    _refs.add(a as WeakKey);\n    _refs.add(b as WeakKey);\n\n    if (Array.isArray(a) && Array.isArray(b)) {\n      for (let i = 0; i < a.length; i++) {\n        if (Object.hasOwn(b, i)) {\n          result.push(\n            ...objDiff(\n              a[i],\n              (b as Array<unknown>)[i] as object,\n              [...path, i],\n              _refs,\n              fn\n            )\n          );\n        } else {\n          result.push({ t: DELETED, p: [...path, i] });\n        }\n      }\n\n      for (let i = 0; i < (b as []).length; i++) {\n        if (!Object.hasOwn(a, i)) {\n          result.push({\n            t: ADDED,\n            p: [...path, i],\n            v: (b as Array<unknown>)[i],\n          });\n        }\n      }\n\n      _refs.delete(a);\n      _refs.delete(b);\n\n      return result;\n    }\n\n    if (isObj(a) && isObj(b)) {\n      for (const k of Object.keys(a)) {\n        if (Object.hasOwn(b, k)) {\n          result.push(\n            ...objDiff(\n              (a as Record<string, unknown>)[k] as object,\n              (b as Record<string, unknown>)[k] as object,\n              [...path, k],\n              _refs,\n              fn\n            )\n          );\n        } else {\n          result.push({ t: DELETED, p: [...path, k] });\n        }\n      }\n\n      for (const k of Object.keys(b)) {\n        if (!Object.hasOwn(a, k)) {\n          result.push({\n            t: ADDED,\n            p: [...path, k],\n            v: (b as Record<string, unknown>)[k],\n          });\n        }\n      }\n\n      _refs.delete(a);\n      _refs.delete(b);\n\n      return result;\n    }\n\n    if (a instanceof Date && b instanceof Date) {\n      if (!Object.is(a.getTime(), (b as Date).getTime())) {\n        return [{ t: CHANGED, p: path, v: b }];\n      }\n    }\n\n    if (a instanceof Map && b instanceof Map) {\n      for (const k of a.keys()) {\n        if (b.has(k)) {\n          result.push(...objDiff(a.get(k), b.get(k), [...path, k], _refs, fn));\n        } else {\n          result.push({ t: DELETED, p: [...path, k] });\n        }\n      }\n\n      for (const k of b.keys()) {\n        if (!a.has(k)) {\n          result.push({\n            t: ADDED,\n            p: [...path, k],\n            v: b.get(k),\n          });\n        }\n      }\n    }\n\n    if (a instanceof Set && b instanceof Set) {\n      const aArr = [...a];\n      const bArr = [...b];\n\n      for (let i = 0; i < aArr.length; i++) {\n        if (Object.hasOwn(bArr, i)) {\n          result.push(\n            ...objDiff(\n              aArr[i],\n              (bArr as Array<unknown>)[i] as object,\n              [...path, i],\n              _refs,\n              fn\n            )\n          );\n        } else {\n          result.push({ t: DELETED, p: [...path, i], v: aArr[i] });\n        }\n      }\n\n      for (let i = 0; i < (bArr as []).length; i++) {\n        if (!Object.hasOwn(aArr, i)) {\n          result.push({\n            t: ADDED,\n            p: [...path, i],\n            v: (bArr as Array<unknown>)[i],\n          });\n        }\n      }\n    }\n\n    if (\n      Object.prototype.toString.call(a) !== Object.prototype.toString.call(b)\n    ) {\n      return [{ t: CHANGED, p: path, v: b }];\n    }\n\n    if (fn(a, b)) {\n      return [{ t: CHANGED, p: path, v: b }];\n    }\n  } else {\n    if (!Object.is(a, b)) {\n      return [{ t: CHANGED, p: path, v: b }];\n    }\n  }\n\n  return result;\n}\n\n/**\n * Performs a deep difference between two objects with custom comparator function.\n *\n * @example\n * diffWith({a: 1}, {a: 5}, (a, b) => {}) //=> [{t: 2, p: ['a'], v: 5}]\n */\nexport default function diffWith(\n  obj1: object,\n  obj2: object,\n  fn: (a: object, b: object) => boolean | undefined\n): Array<DiffResult> {\n  return objDiff(obj1, obj2, [], new WeakSet(), fn);\n}\n","import { clone, set, unset } from \"@opentf/std\";\nimport { DiffResult } from \"./types\";\n\n/**\n * You can apply the diff result onto the original object to get the modified object.\n *\n * @example\n * const a = {a: 1, b: 2};\n * const b = {a: 2, c: 3};\n * const out = patch(a, diff(a, b));\n * assert.deepStrictEqual(out, b); // ok\n */\nexport default function patch<T>(obj: T, patches: Array<DiffResult>): T {\n  const c = clone(obj);\n\n  for (const p of patches) {\n    if (p.t === 1 || p.t === 2) {\n      set(c, p.p, p.v);\n    }\n\n    if (p.t === 0) {\n      unset(c, p.p);\n    }\n  }\n\n  return c;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,aAAAC,EAAA,UAAAC,IAAA,eAAAC,EAAAL,GCGA,SAASM,EACPC,EACAC,EACAC,EACAC,EACc,CACd,IAAMC,EAAuB,CAAC,EAE9B,GACE,OAAOJ,GAAM,UACb,OAAOC,GAAM,UACbD,IAAM,MACNC,IAAM,KACN,CAEA,GAAIE,EAAM,IAAIH,CAAC,GAAKG,EAAM,IAAIF,CAAC,EAC7B,MAAO,CAAC,EAMV,GAHAE,EAAM,IAAIH,CAAY,EACtBG,EAAM,IAAIF,CAAY,EAElB,MAAM,QAAQD,CAAC,GAAK,MAAM,QAAQC,CAAC,EAAG,CACxC,QAASI,EAAI,EAAGA,EAAIL,EAAE,OAAQK,IACxB,OAAO,OAAOJ,EAAGI,CAAC,EACpBD,EAAO,KACL,GAAGL,EACDC,EAAEK,CAAC,EACFJ,EAAqBI,CAAC,EACvB,CAAC,GAAGH,EAAMG,CAAC,EACXF,CACF,CACF,EAEAC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGF,EAAMG,CAAC,CAAE,CAAC,EAI/C,QAASA,EAAI,EAAGA,EAAKJ,EAAS,OAAQI,IAC/B,OAAO,OAAOL,EAAGK,CAAC,GACrBD,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGF,EAAMG,CAAC,EACd,EAAIJ,EAAqBI,CAAC,CAC5B,CAAC,EAIL,OAAAF,EAAM,OAAOH,CAAC,EACdG,EAAM,OAAOF,CAAC,EAEPG,CACT,CAEA,GACE,OAAO,UAAU,SAAS,KAAKJ,CAAC,IAAM,mBACtC,OAAO,UAAU,SAAS,KAAKC,CAAC,IAAM,kBACtC,CACA,QAAWK,KAAK,OAAO,KAAKN,CAAC,EACvB,OAAO,OAAOC,EAAGK,CAAC,EACpBF,EAAO,KACL,GAAGL,EACAC,EAA8BM,CAAC,EAC/BL,EAA8BK,CAAC,EAChC,CAAC,GAAGJ,EAAMI,CAAC,EACXH,CACF,CACF,EAEAC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGF,EAAMI,CAAC,CAAE,CAAC,EAI/C,QAAWA,KAAK,OAAO,KAAKL,CAAC,EACtB,OAAO,OAAOD,EAAGM,CAAC,GACrBF,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGF,EAAMI,CAAC,EACd,EAAIL,EAA8BK,CAAC,CACrC,CAAC,EAIL,OAAAH,EAAM,OAAOH,CAAC,EACdG,EAAM,OAAOF,CAAC,EAEPG,CACT,CAEA,GAAIJ,aAAa,MAAQC,aAAa,MAChC,CAAC,OAAO,GAAGD,EAAE,QAAQ,EAAIC,EAAW,QAAQ,CAAC,EAC/C,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,EAIzC,GAAID,aAAa,KAAOC,aAAa,IAAK,CACxC,QAAWK,KAAKN,EAAE,KAAK,EACjBC,EAAE,IAAIK,CAAC,EACTF,EAAO,KAAK,GAAGL,EAAQC,EAAE,IAAIM,CAAC,EAAGL,EAAE,IAAIK,CAAC,EAAG,CAAC,GAAGJ,EAAMI,CAAC,EAAGH,CAAK,CAAC,EAE/DC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGF,EAAMI,CAAC,CAAE,CAAC,EAI/C,QAAWA,KAAKL,EAAE,KAAK,EAChBD,EAAE,IAAIM,CAAC,GACVF,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGF,EAAMI,CAAC,EACd,EAAGL,EAAE,IAAIK,CAAC,CACZ,CAAC,CAGP,CAEA,GAAIN,aAAa,KAAOC,aAAa,IAAK,CACxC,IAAMM,EAAO,CAAC,GAAGP,CAAC,EACZQ,EAAO,CAAC,GAAGP,CAAC,EAElB,QAASI,EAAI,EAAGA,EAAIE,EAAK,OAAQF,IAC3B,OAAO,OAAOG,EAAMH,CAAC,EACvBD,EAAO,KACL,GAAGL,EACDQ,EAAKF,CAAC,EACLG,EAAwBH,CAAC,EAC1B,CAAC,GAAGH,EAAMG,CAAC,EACXF,CACF,CACF,EAEAC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGF,EAAMG,CAAC,EAAG,EAAGE,EAAKF,CAAC,CAAE,CAAC,EAI3D,QAASA,EAAI,EAAGA,EAAKG,EAAY,OAAQH,IAClC,OAAO,OAAOE,EAAMF,CAAC,GACxBD,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGF,EAAMG,CAAC,EACd,EAAIG,EAAwBH,CAAC,CAC/B,CAAC,CAGP,CAEA,GACE,OAAO,UAAU,SAAS,KAAKL,CAAC,IAAM,OAAO,UAAU,SAAS,KAAKC,CAAC,EAEtE,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,CAEzC,SACM,CAAC,OAAO,GAAGD,EAAGC,CAAC,EACjB,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,EAIzC,OAAOG,CACT,CAQe,SAARK,EAAsBC,EAAcC,EAAiC,CAC1E,OAAOZ,EAAQW,EAAMC,EAAM,CAAC,EAAG,IAAI,OAAS,CAC9C,CC1KA,IAAAC,EAAsB,uBAItB,SAASC,EACPC,EACAC,EACAC,EACAC,EACAC,EACc,CACd,IAAMC,EAAuB,CAAC,EAE9B,GACE,OAAOL,GAAM,UACb,OAAOC,GAAM,UACbD,IAAM,MACNC,IAAM,KACN,CAEA,GAAIE,EAAM,IAAIH,CAAC,GAAKG,EAAM,IAAIF,CAAC,EAC7B,MAAO,CAAC,EAMV,GAHAE,EAAM,IAAIH,CAAY,EACtBG,EAAM,IAAIF,CAAY,EAElB,MAAM,QAAQD,CAAC,GAAK,MAAM,QAAQC,CAAC,EAAG,CACxC,QAASK,EAAI,EAAGA,EAAIN,EAAE,OAAQM,IACxB,OAAO,OAAOL,EAAGK,CAAC,EACpBD,EAAO,KACL,GAAGN,EACDC,EAAEM,CAAC,EACFL,EAAqBK,CAAC,EACvB,CAAC,GAAGJ,EAAMI,CAAC,EACXH,EACAC,CACF,CACF,EAEAC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGH,EAAMI,CAAC,CAAE,CAAC,EAI/C,QAASA,EAAI,EAAGA,EAAKL,EAAS,OAAQK,IAC/B,OAAO,OAAON,EAAGM,CAAC,GACrBD,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGH,EAAMI,CAAC,EACd,EAAIL,EAAqBK,CAAC,CAC5B,CAAC,EAIL,OAAAH,EAAM,OAAOH,CAAC,EACdG,EAAM,OAAOF,CAAC,EAEPI,CACT,CAEA,MAAI,SAAML,CAAC,MAAK,SAAMC,CAAC,EAAG,CACxB,QAAWM,KAAK,OAAO,KAAKP,CAAC,EACvB,OAAO,OAAOC,EAAGM,CAAC,EACpBF,EAAO,KACL,GAAGN,EACAC,EAA8BO,CAAC,EAC/BN,EAA8BM,CAAC,EAChC,CAAC,GAAGL,EAAMK,CAAC,EACXJ,EACAC,CACF,CACF,EAEAC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGH,EAAMK,CAAC,CAAE,CAAC,EAI/C,QAAWA,KAAK,OAAO,KAAKN,CAAC,EACtB,OAAO,OAAOD,EAAGO,CAAC,GACrBF,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGH,EAAMK,CAAC,EACd,EAAIN,EAA8BM,CAAC,CACrC,CAAC,EAIL,OAAAJ,EAAM,OAAOH,CAAC,EACdG,EAAM,OAAOF,CAAC,EAEPI,CACT,CAEA,GAAIL,aAAa,MAAQC,aAAa,MAChC,CAAC,OAAO,GAAGD,EAAE,QAAQ,EAAIC,EAAW,QAAQ,CAAC,EAC/C,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,EAIzC,GAAID,aAAa,KAAOC,aAAa,IAAK,CACxC,QAAWM,KAAKP,EAAE,KAAK,EACjBC,EAAE,IAAIM,CAAC,EACTF,EAAO,KAAK,GAAGN,EAAQC,EAAE,IAAIO,CAAC,EAAGN,EAAE,IAAIM,CAAC,EAAG,CAAC,GAAGL,EAAMK,CAAC,EAAGJ,EAAOC,CAAE,CAAC,EAEnEC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGH,EAAMK,CAAC,CAAE,CAAC,EAI/C,QAAWA,KAAKN,EAAE,KAAK,EAChBD,EAAE,IAAIO,CAAC,GACVF,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGH,EAAMK,CAAC,EACd,EAAGN,EAAE,IAAIM,CAAC,CACZ,CAAC,CAGP,CAEA,GAAIP,aAAa,KAAOC,aAAa,IAAK,CACxC,IAAMO,EAAO,CAAC,GAAGR,CAAC,EACZS,EAAO,CAAC,GAAGR,CAAC,EAElB,QAASK,EAAI,EAAGA,EAAIE,EAAK,OAAQF,IAC3B,OAAO,OAAOG,EAAMH,CAAC,EACvBD,EAAO,KACL,GAAGN,EACDS,EAAKF,CAAC,EACLG,EAAwBH,CAAC,EAC1B,CAAC,GAAGJ,EAAMI,CAAC,EACXH,EACAC,CACF,CACF,EAEAC,EAAO,KAAK,CAAE,EAAG,EAAS,EAAG,CAAC,GAAGH,EAAMI,CAAC,EAAG,EAAGE,EAAKF,CAAC,CAAE,CAAC,EAI3D,QAASA,EAAI,EAAGA,EAAKG,EAAY,OAAQH,IAClC,OAAO,OAAOE,EAAMF,CAAC,GACxBD,EAAO,KAAK,CACV,EAAG,EACH,EAAG,CAAC,GAAGH,EAAMI,CAAC,EACd,EAAIG,EAAwBH,CAAC,CAC/B,CAAC,CAGP,CAEA,GACE,OAAO,UAAU,SAAS,KAAKN,CAAC,IAAM,OAAO,UAAU,SAAS,KAAKC,CAAC,EAEtE,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,EAGvC,GAAIG,EAAGJ,EAAGC,CAAC,EACT,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,CAEzC,SACM,CAAC,OAAO,GAAGD,EAAGC,CAAC,EACjB,MAAO,CAAC,CAAE,EAAG,EAAS,EAAGC,EAAM,EAAGD,CAAE,CAAC,EAIzC,OAAOI,CACT,CAQe,SAARK,EACLC,EACAC,EACAR,EACmB,CACnB,OAAOL,EAAQY,EAAMC,EAAM,CAAC,EAAG,IAAI,QAAWR,CAAE,CAClD,CCpLA,IAAAS,EAAkC,uBAYnB,SAARC,EAA0BC,EAAQC,EAA+B,CACtE,IAAMC,KAAI,SAAMF,CAAG,EAEnB,QAAWG,KAAKF,GACVE,EAAE,IAAM,GAAKA,EAAE,IAAM,OACvB,OAAID,EAAGC,EAAE,EAAGA,EAAE,CAAC,EAGbA,EAAE,IAAM,MACV,SAAMD,EAAGC,EAAE,CAAC,EAIhB,OAAOD,CACT","names":["src_exports","__export","diff","diffWith","patch","__toCommonJS","objDiff","a","b","path","_refs","result","i","k","aArr","bArr","diff","obj1","obj2","import_std","objDiff","a","b","path","_refs","fn","result","i","k","aArr","bArr","diffWith","obj1","obj2","import_std","patch","obj","patches","c","p"]}