UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

58 lines (57 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const dbIvm = require("@tanstack/db-ivm"); const comparison = require("../utils/comparison.cjs"); const runtimeReferenceIdentity = require("./runtime-reference-identity.cjs"); const PARENT_CONTEXT = /* @__PURE__ */ Symbol(`tanstack_db_parent_context`); function equalityIdentity(value, referenceIdentity) { const normalized = comparison.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 = runtimeReferenceIdentity.createRuntimeReferenceIdentityFactory(); const equality = (value) => equalityIdentity(value, referenceIdentity); return { equality, exact: (value) => exactIdentity(value, referenceIdentity), serializeEquality: (value) => dbIvm.serializeValue(equality(value)) }; } function getEqualityValueIdentity(value) { return equalityIdentity(value, runtimeReferenceIdentity.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; } exports.createParentContext = createParentContext; exports.createValueIdentity = createValueIdentity; exports.getEqualityValueIdentity = getEqualityValueIdentity; exports.getParentContextIdentity = getParentContextIdentity; exports.getParentContextValue = getParentContextValue; //# sourceMappingURL=equality-value-identity.cjs.map