UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

58 lines (57 loc) 2.15 kB
import { serializeValue } from "@tanstack/db-ivm"; import { normalizeValue } from "../utils/comparison.js"; import { createRuntimeReferenceIdentityFactory, getRuntimeReferenceIdentity } from "./runtime-reference-identity.js"; const PARENT_CONTEXT = /* @__PURE__ */ Symbol(`tanstack_db_parent_context`); function equalityIdentity(value, referenceIdentity) { const normalized = normalizeValue(value); if (typeof normalized === `object` && normalized !== null || typeof normalized === `function` || typeof normalized === `symbol`) { return referenceIdentity(normalized); } return normalized; } function exactIdentity(value, referenceIdentity) { if (typeof value === `object` && value !== null || typeof value === `function` || typeof value === `symbol`) { return referenceIdentity(value); } if (typeof value === `number`) { if (Object.is(value, -0)) return [`number`, `-0`]; if (Number.isNaN(value)) return [`number`, `NaN`]; } return value; } function createValueIdentity() { const referenceIdentity = createRuntimeReferenceIdentityFactory(); const equality = (value) => equalityIdentity(value, referenceIdentity); return { equality, exact: (value) => exactIdentity(value, referenceIdentity), serializeEquality: (value) => serializeValue(equality(value)) }; } function getEqualityValueIdentity(value) { return equalityIdentity(value, getRuntimeReferenceIdentity); } function createParentContext(value, identity) { return { [PARENT_CONTEXT]: true, value, identity }; } function isParentContext(context) { return typeof context === `object` && context !== null && PARENT_CONTEXT in context; } function getParentContextValue(context) { if (isParentContext(context)) return context.value; if (typeof context === `object` && context !== null) { return context; } return void 0; } function getParentContextIdentity(context) { return isParentContext(context) ? context.identity : context; } export { createParentContext, createValueIdentity, getEqualityValueIdentity, getParentContextIdentity, getParentContextValue }; //# sourceMappingURL=equality-value-identity.js.map