@tanstack/db
Version:
A reactive client store for building super fast apps on sync
58 lines (57 loc) • 2.39 kB
JavaScript
;
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