{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-theresa/src/client/reactive/utils/equality.js"],"names":["shallowEqualsArray","arr1","arr2","length","index","shallowEqualsSet","set1","set2","size","val","has","shallowEqualsMap","map1","map2","key","value","entries","get","shallowEquals","obj1","obj2","keys1","Object","keys","keys2","hasOwnProperty2","prototype","hasOwnProperty","bind","valueA","valueB","deepEquals","objA","objB","comparedObjects","Map","ensureComparedObjectsFor","obj","set","Set","comparedObjectsHAS","comparedObjectsADD","add","isAlreadyCompared","markAsAlreadyCompared","objectsStillToCompare","currentPair","pop","push"],"mappings":"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","file":"equality.js","sourcesContent":["// checks elements of arrays pairwise for identity equality\nexport function shallowEqualsArray(arr1, arr2) {\n  if (arr1 === arr2) { return true; }\n  if (arr1.length !== arr2.length) { return false; }\n\n  for (let index = 0; index < arr1.length; index++) {\n    if (arr1[index] !== arr2[index]) { return false; }\n  }\n\n  return true;\n}\n\n// checks elements for identity equality\nexport function shallowEqualsSet(set1, set2) {\n  if (set1 === set2) { return true; }\n  if (set1.size !== set2.size) return false;\n  \n  for (let val of set1) {\n    if (!set2.has(val)) { return false; }\n  }\n  \n  return true;\n}\n\n// checks keys and values for identity equality\nexport function shallowEqualsMap(map1, map2) {\n  if (map1 === map2) { return true; }\n  if (map1.size !== map2.size) return false;\n  \n  for (let [key, value] of map1.entries()) {\n    if (value !== map2.get(key)) { return false; }\n  }\n  \n  return true;\n}\n\n\n// checks all properties for identity equality\nexport function shallowEquals(obj1, obj2) {\n  // strict equality\n  if (obj1 === obj2) { return true; }\n  \n  // only for object-like values\n  if (typeof obj1 !== \"object\" || !obj1 || typeof obj2 !== \"object\" || !obj2) {\n    return false;\n  }\n\n  const keys1 = Object.keys(obj1);\n  const keys2 = Object.keys(obj2);\n\n  // same number of keys\n  if (keys1.length !== keys2.length) {\n    return false;\n  }\n\n  const hasOwnProperty2 = Object.prototype.hasOwnProperty.bind(obj2);\n\n  // Test for A's keys different from B.\n  for (let index = 0; index < keys1.length; index++) {\n    const key = keys1[index];\n\n    if (!hasOwnProperty2(key)) {\n      return false;\n    }\n\n    const valueA = obj1[key];\n    const valueB = obj2[key];\n\n    if(valueA !== valueB) { return false; }\n  }\n\n  return true;\n}\n\n\n// deeply checks all properties for equality\nexport function deepEquals(objA, objB) {\n  \n  // objects that are already marked as compared\n  const comparedObjects = new Map(); // Map<Object, Set<Object>>\n  function ensureComparedObjectsFor(obj) {\n    if(!comparedObjects.has(obj)) {\n      comparedObjects.set(obj, new Set());\n    }\n  }\n  function comparedObjectsHAS(obj, obj2) {\n    ensureComparedObjectsFor(obj);\n    return comparedObjects.get(obj).has(obj2);\n  }\n  function comparedObjectsADD(obj, obj2) {\n    ensureComparedObjectsFor(obj);\n    comparedObjects.get(obj).add(obj2);\n  }\n\n  function isAlreadyCompared(obj1, obj2) {\n    return comparedObjectsHAS(obj1, obj2) || comparedObjectsHAS(obj2, obj1);\n  }\n  function markAsAlreadyCompared(obj1, obj2) {\n    comparedObjectsADD(obj1, obj2);\n    comparedObjectsADD(obj2, obj1);\n  }\n\n  const objectsStillToCompare = [[objA,objB]];\n  \n  let currentPair;\n  while(currentPair = objectsStillToCompare.pop()) {\n    const [obj1, obj2] = currentPair;\n    \n    // strict equality\n    if (obj1 === obj2) { continue; }\n\n    // only for object-like values\n    if (typeof obj1 !== \"object\" || !obj1 || typeof obj2 !== \"object\" || !obj2) {\n      return false;\n    }\n\n    const keys1 = Object.keys(obj1);\n    const keys2 = Object.keys(obj2);\n\n    // same number of keys\n    if (keys1.length !== keys2.length) {\n      return false;\n    }\n\n    const hasOwnProperty2 = Object.prototype.hasOwnProperty.bind(obj2);\n\n    // Test for A's keys different from B.\n    for (let index = 0; index < keys1.length; index++) {\n      const key = keys1[index];\n\n      if (!hasOwnProperty2(key)) {\n        return false;\n      }\n\n      const valueA = obj1[key];\n      const valueB = obj2[key];\n\n      if(!isAlreadyCompared(valueA, valueB)) {\n        markAsAlreadyCompared(valueA, valueB);\n        objectsStillToCompare.push([valueA, valueB]);\n      }\n    }\n  }\n\n  return true;\n}\n"]}