@tanstack/db
Version:
A reactive client store for building super fast apps on sync
1 lines • 4.57 kB
Source Map (JSON)
{"version":3,"file":"equality-value-identity.cjs","sources":["../../../src/query/equality-value-identity.ts"],"sourcesContent":["import { serializeValue } from '@tanstack/db-ivm'\nimport { normalizeValue } from '../utils/comparison.js'\nimport {\n createRuntimeReferenceIdentityFactory,\n getRuntimeReferenceIdentity,\n} from './runtime-reference-identity.js'\n\nconst PARENT_CONTEXT = Symbol(`tanstack_db_parent_context`)\n\ntype ParentContext = {\n [PARENT_CONTEXT]: true\n value: Record<string, unknown>\n identity: unknown\n}\n\ntype ReferenceIdentity = typeof getRuntimeReferenceIdentity\n\nexport type ValueIdentity = {\n equality: (value: unknown) => unknown\n exact: (value: unknown) => unknown\n serializeEquality: (value: unknown) => string\n}\n\nfunction equalityIdentity(\n value: unknown,\n referenceIdentity: ReferenceIdentity,\n): unknown {\n const normalized = normalizeValue(value)\n if (\n (typeof normalized === `object` && normalized !== null) ||\n typeof normalized === `function` ||\n typeof normalized === `symbol`\n ) {\n return referenceIdentity(normalized as object | symbol)\n }\n return normalized\n}\n\nfunction exactIdentity(\n value: unknown,\n referenceIdentity: ReferenceIdentity,\n): unknown {\n if (\n (typeof value === `object` && value !== null) ||\n typeof value === `function` ||\n typeof value === `symbol`\n ) {\n return referenceIdentity(value)\n }\n if (typeof value === `number`) {\n if (Object.is(value, -0)) return [`number`, `-0`]\n if (Number.isNaN(value)) return [`number`, `NaN`]\n }\n return value\n}\n\nexport function createValueIdentity(): ValueIdentity {\n const referenceIdentity = createRuntimeReferenceIdentityFactory()\n const equality = (value: unknown) =>\n equalityIdentity(value, referenceIdentity)\n return {\n equality,\n exact: (value) => exactIdentity(value, referenceIdentity),\n serializeEquality: (value) => serializeValue(equality(value)),\n }\n}\n\n/** Preserve the value relation used by equality predicates in keyed state. */\nexport function getEqualityValueIdentity(value: unknown): unknown {\n return equalityIdentity(value, getRuntimeReferenceIdentity)\n}\n\n/** Keep compiler identity outside the namespace that holds user aliases. */\nexport function createParentContext(\n value: Record<string, unknown>,\n identity: unknown,\n): ParentContext {\n return { [PARENT_CONTEXT]: true, value, identity }\n}\n\nfunction isParentContext(context: unknown): context is ParentContext {\n return (\n typeof context === `object` && context !== null && PARENT_CONTEXT in context\n )\n}\n\nexport function getParentContextValue(\n context: unknown,\n): Record<string, unknown> | undefined {\n if (isParentContext(context)) return context.value\n if (typeof context === `object` && context !== null) {\n return context as Record<string, unknown>\n }\n return undefined\n}\n\n/**\n * The envelope is structural D2 state, but its value keeps the user's alias\n * namespace separate from compiler identity. A later insert or retract can\n * therefore rebuild the same route without reserving a user-visible key.\n */\nexport function getParentContextIdentity(context: unknown): unknown {\n return isParentContext(context) ? context.identity : context\n}\n"],"names":["normalizeValue","createRuntimeReferenceIdentityFactory","serializeValue","getRuntimeReferenceIdentity"],"mappings":";;;;;AAOA,MAAM,wCAAwB,4BAA4B;AAgB1D,SAAS,iBACP,OACA,mBACS;AACT,QAAM,aAAaA,WAAAA,eAAe,KAAK;AACvC,MACG,OAAO,eAAe,YAAY,eAAe,QAClD,OAAO,eAAe,cACtB,OAAO,eAAe,UACtB;AACA,WAAO,kBAAkB,UAA6B;AAAA,EACxD;AACA,SAAO;AACT;AAEA,SAAS,cACP,OACA,mBACS;AACT,MACG,OAAO,UAAU,YAAY,UAAU,QACxC,OAAO,UAAU,cACjB,OAAO,UAAU,UACjB;AACA,WAAO,kBAAkB,KAAK;AAAA,EAChC;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,OAAO,GAAG,OAAO,EAAE,EAAG,QAAO,CAAC,UAAU,IAAI;AAChD,QAAI,OAAO,MAAM,KAAK,EAAG,QAAO,CAAC,UAAU,KAAK;AAAA,EAClD;AACA,SAAO;AACT;AAEO,SAAS,sBAAqC;AACnD,QAAM,oBAAoBC,yBAAAA,sCAAA;AAC1B,QAAM,WAAW,CAAC,UAChB,iBAAiB,OAAO,iBAAiB;AAC3C,SAAO;AAAA,IACL;AAAA,IACA,OAAO,CAAC,UAAU,cAAc,OAAO,iBAAiB;AAAA,IACxD,mBAAmB,CAAC,UAAUC,qBAAe,SAAS,KAAK,CAAC;AAAA,EAAA;AAEhE;AAGO,SAAS,yBAAyB,OAAyB;AAChE,SAAO,iBAAiB,OAAOC,oDAA2B;AAC5D;AAGO,SAAS,oBACd,OACA,UACe;AACf,SAAO,EAAE,CAAC,cAAc,GAAG,MAAM,OAAO,SAAA;AAC1C;AAEA,SAAS,gBAAgB,SAA4C;AACnE,SACE,OAAO,YAAY,YAAY,YAAY,QAAQ,kBAAkB;AAEzE;AAEO,SAAS,sBACd,SACqC;AACrC,MAAI,gBAAgB,OAAO,EAAG,QAAO,QAAQ;AAC7C,MAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACnD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,SAAS,yBAAyB,SAA2B;AAClE,SAAO,gBAAgB,OAAO,IAAI,QAAQ,WAAW;AACvD;;;;;;"}