API reference@evolu/commonEq › eqData

function eqData<Actual, Expected>(
  actual: Actual,
  expected: Expected,
  ...dataError: EqDataError<Actual | Expected>
): boolean;

Defined in: packages/common/src/Eq.ts:255

Compares two Data values.

Primitive values use SameValueZero, so NaN equals itself and 0 equals -0. Arrays and Object properties are ordered and keyed respectively. Sets and Maps compare their elements and entries without regard to insertion order. Dates compare their time values, while Uint8Arrays compare their bytes. Cyclic and shared data graphs are supported.

The compile-time validation recursively accepts ordinary interfaces whose properties consist only of Data. Runtime representation details are trusted; use the Data Type at an unknown boundary.

Example

import { assertTrue, eqData } from "@evolu/common";

interface User {
  readonly name: string;
  readonly roles: ReadonlySet<string>;
}

const first: User = { name: "Ada", roles: new Set(["admin", "author"]) };
const second: User = {
  name: "Ada",
  roles: new Set(["author", "admin"]),
};

assertTrue(eqData(first, second));