HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/coauthor/node_modules/fast-equals/src/objects.ts
import { createIsCircular } from './utils';

import type { InternalEqualityComparator } from '../index.d';

interface Dictionary<Value> {
  [key: string]: Value;
  $$typeof?: any;
}

const OWNER = '_owner';
const { hasOwnProperty } = Object.prototype;

/**
 * Whether the objects are equal in value.
 */
export function areObjectsEqual(
  a: Dictionary<any>,
  b: Dictionary<any>,
  isEqual: InternalEqualityComparator<any>,
  meta: any,
): boolean {
  const keysA = Object.keys(a);

  let index = keysA.length;

  if (Object.keys(b).length !== index) {
    return false;
  }

  let key: string;

  // Decrementing `while` showed faster results than either incrementing or
  // decrementing `for` loop and than an incrementing `while` loop. Declarative
  // methods like `some` / `every` were not used to avoid incurring the garbage
  // cost of anonymous callbacks.
  while (index-- > 0) {
    key = keysA[index];

    if (key === OWNER) {
      const reactElementA = !!a.$$typeof;
      const reactElementB = !!b.$$typeof;

      if ((reactElementA || reactElementB) && reactElementA !== reactElementB) {
        return false;
      }
    }

    if (
      !hasOwnProperty.call(b, key) ||
      !isEqual(a[key], b[key], key, key, a, b, meta)
    ) {
      return false;
    }
  }

  return true;
}

/**
 * Whether the objects are equal in value, including circular references.
 */
export const areObjectsEqualCircular = createIsCircular(areObjectsEqual);