{
  "version": 3,
  "sources": ["../../src/diff/utils.ts"],
  "sourcesContent": ["/**\n * Deep check for objects for collisions\n * Check primitives if their values are different\n *\n * @param a - First value to compare\n * @param b - Second value to compare\n * @returns true if there is a collision, false otherwise\n *\n * @example\n * // Objects with different values for same key\n * isKeyCollisions({ a: 1 }, { a: 2 }) // true\n *\n * // Objects with different types\n * isKeyCollisions({ a: 1 }, { a: '1' }) // true\n *\n * // Objects with no collisions\n * isKeyCollisions({ a: 1 }, { b: 2 }) // false\n *\n * // Nested objects with collision\n * isKeyCollisions({ a: { b: 1 } }, { a: { b: 2 } }) // true\n */\nexport const isKeyCollisions = (a: unknown, b: unknown) => {\n  if (typeof a !== typeof b) {\n    return true\n  }\n\n  if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {\n    const keys = new Set([...Object.keys(a), ...Object.keys(b)])\n\n    for (const key of keys) {\n      if (a[key] !== undefined && b[key] !== undefined) {\n        if (isKeyCollisions(a[key], b[key])) {\n          return true\n        }\n      }\n    }\n    return false\n  }\n\n  // We handle all primitives here\n  return a !== b\n}\n\n/**\n * Deep merges two objects, combining their properties recursively.\n *\n * \u26A0\uFE0F Note: This operation assumes there are no key collisions between the objects.\n * Use isKeyCollisions() to check for collisions before merging.\n *\n * @param a - Target object to merge into\n * @param b - Source object to merge from\n * @returns The merged object (mutates and returns a)\n *\n * @example\n * // Simple merge\n * const a = { name: 'John' }\n * const b = { age: 30 }\n * mergeObjects(a, b) // { name: 'John', age: 30 }\n *\n * // Nested merge\n * const a = { user: { name: 'John' } }\n * const b = { user: { age: 30 } }\n * mergeObjects(a, b) // { user: { name: 'John', age: 30 } }\n */\nexport const mergeObjects = (a: Record<string, unknown>, b: Record<string, unknown>): Record<string, unknown> => {\n  for (const key in b) {\n    if (!(key in a)) {\n      a[key] = b[key]\n    } else {\n      const aValue = a[key]\n      const bValue = b[key]\n\n      if (typeof aValue === 'object' && aValue !== null && typeof bValue === 'object' && bValue !== null) {\n        a[key] = mergeObjects(aValue as Record<string, unknown>, bValue as Record<string, unknown>)\n      }\n    }\n  }\n\n  return a\n}\n\n/**\n * Checks if two arrays have the same elements in the same order.\n *\n * @param a - First array to compare\n * @param b - Second array to compare\n * @returns True if arrays have same length and elements, false otherwise\n *\n * @example\n * // Arrays with same elements\n * isArrayEqual([1, 2, 3], [1, 2, 3]) // true\n *\n * // Arrays with different elements\n * isArrayEqual([1, 2, 3], [1, 2, 4]) // false\n *\n * // Arrays with different lengths\n * isArrayEqual([1, 2], [1, 2, 3]) // false\n */\nexport const isArrayEqual = <T>(a: T[], b: T[]) => {\n  if (a.length !== b.length) {\n    return false\n  }\n\n  for (let i = 0; i <= a.length; ++i) {\n    if (a[i] !== b[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n"],
  "mappings": "AAqBO,MAAM,kBAAkB,CAAC,GAAY,MAAe;AACzD,MAAI,OAAO,MAAM,OAAO,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,MAAM,QAAQ,MAAM,MAAM;AAC9E,UAAM,OAAO,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC;AAE3D,eAAW,OAAO,MAAM;AACtB,UAAI,EAAE,GAAG,MAAM,UAAa,EAAE,GAAG,MAAM,QAAW;AAChD,YAAI,gBAAgB,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG;AACnC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAGA,SAAO,MAAM;AACf;AAuBO,MAAM,eAAe,CAAC,GAA4B,MAAwD;AAC/G,aAAW,OAAO,GAAG;AACnB,QAAI,EAAE,OAAO,IAAI;AACf,QAAE,GAAG,IAAI,EAAE,GAAG;AAAA,IAChB,OAAO;AACL,YAAM,SAAS,EAAE,GAAG;AACpB,YAAM,SAAS,EAAE,GAAG;AAEpB,UAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,OAAO,WAAW,YAAY,WAAW,MAAM;AAClG,UAAE,GAAG,IAAI,aAAa,QAAmC,MAAiC;AAAA,MAC5F;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAmBO,MAAM,eAAe,CAAI,GAAQ,MAAW;AACjD,MAAI,EAAE,WAAW,EAAE,QAAQ;AACzB,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG;AAClC,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG;AACjB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;",
  "names": []
}
