@tanstack/db
Version:
A reactive client store for building super fast apps on sync
1 lines • 3.63 kB
Source Map (JSON)
{"version":3,"file":"sync-persistence.cjs","sources":["../../src/sync-persistence.ts"],"sourcesContent":["import { InvalidSyncPersistenceCapabilityError } from './errors'\nimport type { SyncPersistenceCapabilityV1 } from './types'\n\n/**\n * @internal\n * Unstable cross-package protocol for persistence-aware collection adapters.\n * Application code should not construct or depend on this value directly.\n */\nexport const SYNC_PERSISTENCE_PROTOCOL =\n `@tanstack/db/sync-persistence` as const\n/** @internal See {@link SYNC_PERSISTENCE_PROTOCOL}. */\nexport const SYNC_PERSISTENCE_VERSION = 1 as const\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === `object` && value !== null\n}\n\nfunction requireFunction(\n value: Record<string, unknown>,\n key: string,\n path = key,\n): void {\n if (typeof value[key] !== `function`) {\n throw new InvalidSyncPersistenceCapabilityError(\n `${path} must be a function`,\n )\n }\n}\n\n/**\n * Validates the cross-package structural persistence protocol before a sync\n * adapter uses it. Null explicitly means that the collection has no\n * persistence capability; undefined means a wrapper dropped the required\n * field. Any advertised capability must be complete.\n *\n * @internal This is adapter infrastructure, not an application API.\n */\nexport function validateSyncPersistenceCapability<\n TKey extends string | number = string | number,\n>(value: unknown): SyncPersistenceCapabilityV1<TKey> | null {\n if (value === null) return null\n if (!isRecord(value)) {\n throw new InvalidSyncPersistenceCapabilityError(\n `expected null or a complete capability object`,\n )\n }\n if (value.protocol !== SYNC_PERSISTENCE_PROTOCOL) {\n throw new InvalidSyncPersistenceCapabilityError(\n `protocol must be \"${SYNC_PERSISTENCE_PROTOCOL}\"`,\n )\n }\n if (value.version !== SYNC_PERSISTENCE_VERSION) {\n throw new InvalidSyncPersistenceCapabilityError(\n `version must be ${SYNC_PERSISTENCE_VERSION}`,\n )\n }\n requireFunction(value, `hydrateBaseline`)\n requireFunction(value, `scanPersistedRows`)\n\n const resumeSnapshot = value.resumeSnapshot\n if (!isRecord(resumeSnapshot)) {\n throw new InvalidSyncPersistenceCapabilityError(\n `resumeSnapshot must be an object`,\n )\n }\n requireFunction(resumeSnapshot, `certify`, `resumeSnapshot.certify`)\n requireFunction(\n resumeSnapshot,\n `getKeySetEvidence`,\n `resumeSnapshot.getKeySetEvidence`,\n )\n requireFunction(\n resumeSnapshot,\n `expectCurrentCommit`,\n `resumeSnapshot.expectCurrentCommit`,\n )\n\n return value as SyncPersistenceCapabilityV1<TKey>\n}\n"],"names":["InvalidSyncPersistenceCapabilityError"],"mappings":";;;AAQO,MAAM,4BACX;AAEK,MAAM,2BAA2B;AAExC,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,gBACP,OACA,KACA,OAAO,KACD;AACN,MAAI,OAAO,MAAM,GAAG,MAAM,YAAY;AACpC,UAAM,IAAIA,OAAAA;AAAAA,MACR,GAAG,IAAI;AAAA,IAAA;AAAA,EAEX;AACF;AAUO,SAAS,kCAEd,OAA0D;AAC1D,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,UAAM,IAAIA,OAAAA;AAAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,MAAM,aAAa,2BAA2B;AAChD,UAAM,IAAIA,OAAAA;AAAAA,MACR,qBAAqB,yBAAyB;AAAA,IAAA;AAAA,EAElD;AACA,MAAI,MAAM,YAAY,0BAA0B;AAC9C,UAAM,IAAIA,OAAAA;AAAAA,MACR,mBAAmB,wBAAwB;AAAA,IAAA;AAAA,EAE/C;AACA,kBAAgB,OAAO,iBAAiB;AACxC,kBAAgB,OAAO,mBAAmB;AAE1C,QAAM,iBAAiB,MAAM;AAC7B,MAAI,CAAC,SAAS,cAAc,GAAG;AAC7B,UAAM,IAAIA,OAAAA;AAAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,kBAAgB,gBAAgB,WAAW,wBAAwB;AACnE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,SAAO;AACT;;;;"}