@firtoz/collection-sync 4.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -0
- package/dist/cache-manager.d.ts +52 -0
- package/dist/cache-manager.js +5 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/chunk-3EHHMLSV.js +57 -0
- package/dist/chunk-3EHHMLSV.js.map +1 -0
- package/dist/chunk-43KYAIKY.js +46 -0
- package/dist/chunk-43KYAIKY.js.map +1 -0
- package/dist/chunk-4BEXLBCH.js +64 -0
- package/dist/chunk-4BEXLBCH.js.map +1 -0
- package/dist/chunk-5V6BSQAB.js +148 -0
- package/dist/chunk-5V6BSQAB.js.map +1 -0
- package/dist/chunk-5VMFQT5Z.js +112 -0
- package/dist/chunk-5VMFQT5Z.js.map +1 -0
- package/dist/chunk-6EHROJFY.js +111 -0
- package/dist/chunk-6EHROJFY.js.map +1 -0
- package/dist/chunk-6X3434GJ.js +21 -0
- package/dist/chunk-6X3434GJ.js.map +1 -0
- package/dist/chunk-BGJH6PH2.js +175 -0
- package/dist/chunk-BGJH6PH2.js.map +1 -0
- package/dist/chunk-BJJEAKXL.js +252 -0
- package/dist/chunk-BJJEAKXL.js.map +1 -0
- package/dist/chunk-GWIOC5CP.js +51 -0
- package/dist/chunk-GWIOC5CP.js.map +1 -0
- package/dist/chunk-HMLY7DHA.js +12 -0
- package/dist/chunk-HMLY7DHA.js.map +1 -0
- package/dist/chunk-I6RJWBGF.js +112 -0
- package/dist/chunk-I6RJWBGF.js.map +1 -0
- package/dist/chunk-M5MJHS6A.js +10 -0
- package/dist/chunk-M5MJHS6A.js.map +1 -0
- package/dist/chunk-O3KBDCEI.js +615 -0
- package/dist/chunk-O3KBDCEI.js.map +1 -0
- package/dist/chunk-OP53UBPN.js +19 -0
- package/dist/chunk-OP53UBPN.js.map +1 -0
- package/dist/chunk-P3JOTUAB.js +802 -0
- package/dist/chunk-P3JOTUAB.js.map +1 -0
- package/dist/chunk-QJP4GSJH.js +373 -0
- package/dist/chunk-QJP4GSJH.js.map +1 -0
- package/dist/chunk-RDDS7JQW.js +623 -0
- package/dist/chunk-RDDS7JQW.js.map +1 -0
- package/dist/chunk-TEH7V76G.js +209 -0
- package/dist/chunk-TEH7V76G.js.map +1 -0
- package/dist/chunk-UJ24XW52.js +20 -0
- package/dist/chunk-UJ24XW52.js.map +1 -0
- package/dist/chunk-UVZJL6QV.js +18 -0
- package/dist/chunk-UVZJL6QV.js.map +1 -0
- package/dist/chunk-XC4QNFSQ.js +238 -0
- package/dist/chunk-XC4QNFSQ.js.map +1 -0
- package/dist/chunk-YD5LVGWX.js +125 -0
- package/dist/chunk-YD5LVGWX.js.map +1 -0
- package/dist/chunk-YYGPIHHJ.js +166 -0
- package/dist/chunk-YYGPIHHJ.js.map +1 -0
- package/dist/connect-partial-sync.d.ts +41 -0
- package/dist/connect-partial-sync.js +6 -0
- package/dist/connect-partial-sync.js.map +1 -0
- package/dist/connect-sync.d.ts +26 -0
- package/dist/connect-sync.js +5 -0
- package/dist/connect-sync.js.map +1 -0
- package/dist/create-partial-synced-collection.d.ts +24 -0
- package/dist/create-partial-synced-collection.js +8 -0
- package/dist/create-partial-synced-collection.js.map +1 -0
- package/dist/create-synced-collection.d.ts +26 -0
- package/dist/create-synced-collection.js +8 -0
- package/dist/create-synced-collection.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/partial-sync-client-bridge.d.ts +157 -0
- package/dist/partial-sync-client-bridge.js +6 -0
- package/dist/partial-sync-client-bridge.js.map +1 -0
- package/dist/partial-sync-interest.d.ts +48 -0
- package/dist/partial-sync-interest.js +6 -0
- package/dist/partial-sync-interest.js.map +1 -0
- package/dist/partial-sync-mutation-handler.d.ts +31 -0
- package/dist/partial-sync-mutation-handler.js +6 -0
- package/dist/partial-sync-mutation-handler.js.map +1 -0
- package/dist/partial-sync-predicate-match.d.ts +8 -0
- package/dist/partial-sync-predicate-match.js +4 -0
- package/dist/partial-sync-predicate-match.js.map +1 -0
- package/dist/partial-sync-row-key.d.ts +41 -0
- package/dist/partial-sync-row-key.js +4 -0
- package/dist/partial-sync-row-key.js.map +1 -0
- package/dist/partial-sync-server-bridge.d.ts +102 -0
- package/dist/partial-sync-server-bridge.js +8 -0
- package/dist/partial-sync-server-bridge.js.map +1 -0
- package/dist/react/constants.d.ts +12 -0
- package/dist/react/constants.js +4 -0
- package/dist/react/constants.js.map +1 -0
- package/dist/react/index.d.ts +19 -0
- package/dist/react/index.js +17 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/partial-sync-adapter.d.ts +40 -0
- package/dist/react/partial-sync-adapter.js +4 -0
- package/dist/react/partial-sync-adapter.js.map +1 -0
- package/dist/react/partial-sync-utils.d.ts +42 -0
- package/dist/react/partial-sync-utils.js +5 -0
- package/dist/react/partial-sync-utils.js.map +1 -0
- package/dist/react/range-conditions-expression.d.ts +49 -0
- package/dist/react/range-conditions-expression.js +4 -0
- package/dist/react/range-conditions-expression.js.map +1 -0
- package/dist/react/types.d.ts +196 -0
- package/dist/react/types.js +3 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/usePartialSyncCollection.d.ts +20 -0
- package/dist/react/usePartialSyncCollection.js +10 -0
- package/dist/react/usePartialSyncCollection.js.map +1 -0
- package/dist/react/usePartialSyncViewport.d.ts +20 -0
- package/dist/react/usePartialSyncViewport.js +7 -0
- package/dist/react/usePartialSyncViewport.js.map +1 -0
- package/dist/react/usePartialSyncWindow.d.ts +17 -0
- package/dist/react/usePartialSyncWindow.js +12 -0
- package/dist/react/usePartialSyncWindow.js.map +1 -0
- package/dist/react/usePredicateFilteredRows.d.ts +20 -0
- package/dist/react/usePredicateFilteredRows.js +6 -0
- package/dist/react/usePredicateFilteredRows.js.map +1 -0
- package/dist/sync-client-bridge.d.ts +48 -0
- package/dist/sync-client-bridge.js +6 -0
- package/dist/sync-client-bridge.js.map +1 -0
- package/dist/sync-protocol.d.ts +378 -0
- package/dist/sync-protocol.js +4 -0
- package/dist/sync-protocol.js.map +1 -0
- package/dist/sync-server-bridge.d.ts +35 -0
- package/dist/sync-server-bridge.js +6 -0
- package/dist/sync-server-bridge.js.map +1 -0
- package/dist/with-sync.d.ts +107 -0
- package/dist/with-sync.js +7 -0
- package/dist/with-sync.js.map +1 -0
- package/package.json +27 -21
- package/src/connect-partial-sync.ts +16 -12
- package/src/connect-sync.ts +12 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/usePartialSyncWindow.ts"],"names":["usageBytes","quotaBytes"],"mappings":"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","file":"chunk-O3KBDCEI.js","sourcesContent":["import {\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\tuseSyncExternalStore,\n} from \"react\";\nimport { CacheManager } from \"../cache-manager\";\nimport { connectPartialSync } from \"../connect-partial-sync\";\nimport {\n\tPartialSyncClientBridge,\n\ttype PartialSyncRangePatchAppliedEvent,\n\ttype PartialSyncState,\n} from \"../partial-sync-client-bridge\";\nimport type { RangeFingerprint, SyncClientMessage } from \"../sync-protocol\";\nimport { DEFAULT_PAGE_LIMIT, DEFAULT_SEEK_COOLDOWN_MS } from \"./constants\";\nimport { partialSyncRowKey } from \"../partial-sync-row-key\";\nimport {\n\tassertSyncUtils,\n\tcomputeFingerprintForIndexWindow,\n\tdefaultPartialSyncVersionMs,\n\tgetPartialSyncRowByMapId,\n\ttryIdsForIndexWindow,\n} from \"./partial-sync-utils\";\nimport type {\n\tPartialSyncItem,\n\tPartialSyncRowSlotView,\n\tUsePartialSyncWindowOptions,\n\tUsePartialSyncWindowResult,\n\tViewportInfo,\n} from \"./types\";\n\nexport {\n\tDEFAULT_PAGE_LIMIT,\n\tDEFAULT_SEEK_COOLDOWN_MS,\n\tDEFAULT_SEEK_ROW_GAP,\n\tDEFAULT_VIEWPORT_RANGE_MAX_WAIT_MS,\n\tDEFAULT_VIEWPORT_RANGE_QUIET_MS,\n} from \"./constants\";\n\nexport function usePartialSyncWindow<\n\tTItem extends PartialSyncItem,\n\tTSortColumn extends keyof TItem & string,\n>({\n\tcollection,\n\tsort,\n\tgetSortValue,\n\twsUrl,\n\twsTransport = \"json\",\n\tserializeJson = JSON.stringify,\n\tdeserializeJson = JSON.parse,\n\tgetVersionMs = defaultPartialSyncVersionMs,\n\tgetSortPositions,\n\tpageLimit = DEFAULT_PAGE_LIMIT,\n\tseekCooldownMs = DEFAULT_SEEK_COOLDOWN_MS,\n\tpartialWindowResetKey,\n\tmutationBridge,\n\tmergeTransportSend,\n\tcollectionId,\n\tcacheDisplayMode = \"immediate\",\n}: UsePartialSyncWindowOptions<\n\tTItem,\n\tTSortColumn\n>): UsePartialSyncWindowResult<TItem> {\n\tconst [windowStartIndex, setWindowStartIndex] = useState(0);\n\tconst [totalCount, setTotalCount] = useState(0);\n\tconst [nextCursor, setNextCursor] = useState<unknown | null>(null);\n\tconst [hasMore, setHasMore] = useState(true);\n\t/** True only while `requestRangeQuery` is in flight (server). Not set for cache-only window moves. */\n\tconst [rangeRequestInFlight, setRangeRequestInFlight] = useState(false);\n\tconst [pendingServerRange, setPendingServerRange] = useState<{\n\t\tstart: number;\n\t\tendExclusive: number;\n\t} | null>(null);\n\tconst [bridgeState, setBridgeState] = useState<PartialSyncState>({\n\t\tstatus: \"offline\",\n\t});\n\tconst [viewportInfo, setViewportInfo] = useState<ViewportInfo>({\n\t\tfirstVisibleIndex: 0,\n\t\tlastVisibleIndex: 0,\n\t});\n\tconst viewportInfoRef = useRef(viewportInfo);\n\tviewportInfoRef.current = viewportInfo;\n\tconst [lastSeekMeta, setLastSeekMeta] = useState<{\n\t\toffset: number;\n\t\treason: \"scroll\" | \"scrollSettled\";\n\t} | null>(null);\n\tconst [collectionVersion, setCollectionVersion] = useState(0);\n\tconst [indexMapVersion, setIndexMapVersion] = useState(0);\n\n\tconst globalIndexMapRef = useRef(new Map<number, string | number>());\n\tconst denseRowsRef = useRef<TItem[]>([]);\n\tconst windowStartRef = useRef(windowStartIndex);\n\twindowStartRef.current = windowStartIndex;\n\tconst sortRef = useRef(sort);\n\tsortRef.current = sort;\n\tconst totalCountRef = useRef(totalCount);\n\ttotalCountRef.current = totalCount;\n\tconst fetchGenRef = useRef(0);\n\tconst seekCooldownUntilRef = useRef(0);\n\tconst seekToViewportRef = useRef<\n\t\t(\n\t\t\tfirstVisibleIndex: number,\n\t\t\topts?: {\n\t\t\t\tscrollSettled?: boolean;\n\t\t\t\tlastVisibleIndex?: number;\n\t\t\t\tforce?: boolean;\n\t\t\t},\n\t\t) => void\n\t>(() => {});\n\tconst invalidateSeekTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n\t\tnull,\n\t);\n\n\tconst getSortValueRef = useRef(getSortValue);\n\tgetSortValueRef.current = getSortValue;\n\tconst getSortPositionsRef = useRef(getSortPositions);\n\tgetSortPositionsRef.current = getSortPositions;\n\tconst getVersionMsRef = useRef(getVersionMs);\n\tgetVersionMsRef.current = getVersionMs;\n\n\tconst serializeJsonRef = useRef(serializeJson);\n\tserializeJsonRef.current = serializeJson;\n\tconst deserializeJsonRef = useRef(deserializeJson);\n\tdeserializeJsonRef.current = deserializeJson;\n\n\tconst bumpIndexMap = useCallback(() => {\n\t\tsetIndexMapVersion((v) => v + 1);\n\t}, []);\n\n\tconst syncUtils = useMemo(\n\t\t() => assertSyncUtils<TItem>(collection.utils),\n\t\t[collection],\n\t);\n\n\tconst syncUtilsRef = useRef(syncUtils);\n\tsyncUtilsRef.current = syncUtils;\n\n\tconst collectionRef = useRef(collection);\n\tcollectionRef.current = collection;\n\n\tconst cacheManager = useMemo(\n\t\t() =>\n\t\t\tnew CacheManager<TItem>({\n\t\t\t\tgetStorageEstimate: async () => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof navigator === \"undefined\" ||\n\t\t\t\t\t\t!navigator.storage?.estimate\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst usageBytes = 0;\n\t\t\t\t\t\tconst quotaBytes = 50 * 1024 * 1024;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tusageBytes,\n\t\t\t\t\t\t\tquotaBytes,\n\t\t\t\t\t\t\tutilizationRatio: usageBytes / quotaBytes,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst estimate = await navigator.storage.estimate();\n\t\t\t\t\tconst usageBytes = estimate.usage ?? 0;\n\t\t\t\t\tconst quotaBytes = estimate.quota ?? 1;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tusageBytes,\n\t\t\t\t\t\tquotaBytes,\n\t\t\t\t\t\tutilizationRatio: usageBytes / quotaBytes,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tdeleteRows: async (keys) => {\n\t\t\t\t\tconst keySet = new Set<string | number>();\n\t\t\t\t\tfor (const k of keys) {\n\t\t\t\t\t\tkeySet.add(k);\n\t\t\t\t\t\tkeySet.add(String(k));\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [idx, id] of globalIndexMapRef.current) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tkeySet.has(id) ||\n\t\t\t\t\t\t\tkeySet.has(String(id)) ||\n\t\t\t\t\t\t\t(typeof id === \"string\" &&\n\t\t\t\t\t\t\t\t/^-?\\d+$/.test(id) &&\n\t\t\t\t\t\t\t\tkeySet.has(Number(id)))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tglobalIndexMapRef.current.delete(idx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbumpIndexMap();\n\t\t\t\t\tawait syncUtilsRef.current.receiveSync(\n\t\t\t\t\t\tkeys.map((key) => ({ type: \"delete\", key }) as const),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t}),\n\t\t[bumpIndexMap],\n\t);\n\n\tconst cacheManagerRef = useRef(cacheManager);\n\tcacheManagerRef.current = cacheManager;\n\n\t// Bridge identity must stay stable: `connectPartialSync` runs in layout effect and\n\t// calls `setConnecting` / `setConnected`, which updates React state. If `bridge`\n\t// were recreated whenever `collection` (hence syncUtils/cacheManager) changed,\n\t// that effect would re-run every render → infinite updates.\n\tconst partialClientId = mutationBridge?.clientId;\n\n\tconst bridge = useMemo(\n\t\t() =>\n\t\t\tnew PartialSyncClientBridge<TItem>({\n\t\t\t\t...(partialClientId !== undefined ? { clientId: partialClientId } : {}),\n\t\t\t\t...(collectionId !== undefined ? { collectionId } : {}),\n\t\t\t\tcollection: {\n\t\t\t\t\tget: (key) => getPartialSyncRowByMapId(collectionRef.current, key),\n\t\t\t\t\tutils: {\n\t\t\t\t\t\treceiveSync: (messages) =>\n\t\t\t\t\t\t\tsyncUtilsRef.current.receiveSync(messages),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsend: () => {},\n\t\t\t\tonStateChange: (state) => setBridgeState(state),\n\t\t\t\tbeforeApplyRows: async (incomingRows) => {\n\t\t\t\t\tconst sortNow = sortRef.current;\n\t\t\t\t\tconst rowsNow = denseRowsRef.current;\n\t\t\t\t\tconst sortPos = getSortPositionsRef.current;\n\t\t\t\t\tconst gsv = getSortValueRef.current;\n\t\t\t\t\tconst cm = cacheManagerRef.current;\n\t\t\t\t\tcm.recordFetchedRows(incomingRows, (row) =>\n\t\t\t\t\t\tsortPos !== undefined\n\t\t\t\t\t\t\t? sortPos(row)\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t[sortNow.column]: gsv(row, sortNow.column),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tconst firstRow = rowsNow[0] ?? incomingRows[0];\n\t\t\t\t\tconst lastRow =\n\t\t\t\t\t\trowsNow[rowsNow.length - 1] ??\n\t\t\t\t\t\tincomingRows[incomingRows.length - 1];\n\t\t\t\t\tconst result = await cm.evictIfNeeded({\n\t\t\t\t\t\tsortColumn: sortNow.column as string,\n\t\t\t\t\t\tsortDirection: sortNow.direction,\n\t\t\t\t\t\tfromValue:\n\t\t\t\t\t\t\tfirstRow !== undefined ? gsv(firstRow, sortNow.column) : \"\",\n\t\t\t\t\t\ttoValue: lastRow !== undefined ? gsv(lastRow, sortNow.column) : \"\",\n\t\t\t\t\t});\n\t\t\t\t\tsetBridgeState((previous) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tprevious.status === \"partial\" ||\n\t\t\t\t\t\t\tprevious.status === \"realtime\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...previous,\n\t\t\t\t\t\t\t\tcacheUtilization: result.estimate.utilizationRatio,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn previous;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonViewTransition: (e) => {\n\t\t\t\t\tif (e.type === \"exitView\" && e.change.type === \"update\") {\n\t\t\t\t\t\tconst key = partialSyncRowKey(e.change.value.id);\n\t\t\t\t\t\tlet removed = false;\n\t\t\t\t\t\tfor (const [idx, mappedId] of [\n\t\t\t\t\t\t\t...globalIndexMapRef.current.entries(),\n\t\t\t\t\t\t]) {\n\t\t\t\t\t\t\tif (mappedId === key) {\n\t\t\t\t\t\t\t\tglobalIndexMapRef.current.delete(idx);\n\t\t\t\t\t\t\t\tremoved = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (removed) {\n\t\t\t\t\t\t\tbumpIndexMap();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonRangePatchApplied: ({\n\t\t\t\t\tchange,\n\t\t\t\t\tviewTransition,\n\t\t\t\t}: PartialSyncRangePatchAppliedEvent<TItem>) => {\n\t\t\t\t\tif (change.type !== \"update\" || viewTransition !== undefined) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (change.previousValue === undefined) return;\n\t\t\t\t\tconst col = sortRef.current.column;\n\t\t\t\t\tconst gsv = getSortValueRef.current;\n\t\t\t\t\tif (\n\t\t\t\t\t\tgsv(change.previousValue as TItem, col) === gsv(change.value, col)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst rowKey = partialSyncRowKey(change.value.id);\n\t\t\t\t\tconst inDense = denseRowsRef.current.some(\n\t\t\t\t\t\t(r) => partialSyncRowKey(r.id) === rowKey,\n\t\t\t\t\t);\n\t\t\t\t\tif (!inDense) return;\n\t\t\t\t\tif (invalidateSeekTimerRef.current !== null) {\n\t\t\t\t\t\tclearTimeout(invalidateSeekTimerRef.current);\n\t\t\t\t\t}\n\t\t\t\t\tinvalidateSeekTimerRef.current = setTimeout(() => {\n\t\t\t\t\t\tinvalidateSeekTimerRef.current = null;\n\t\t\t\t\t\tseekToViewportRef.current(\n\t\t\t\t\t\t\tviewportInfoRef.current.firstVisibleIndex,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}, 80);\n\t\t\t\t},\n\t\t\t}),\n\t\t[partialClientId, collectionId, bumpIndexMap],\n\t);\n\n\t// Do not list serializeJson / deserializeJson as effect deps: callers often pass\n\t// inline lambdas (new reference every render). That would re-run this layout effect\n\t// every time → cleanup calls setConnected(false) and the next run calls setConnecting,\n\t// each firing onStateChange → maximum update depth exceeded.\n\tconst mutationBridgeRef = useRef(mutationBridge);\n\tmutationBridgeRef.current = mutationBridge;\n\n\tconst mergeTransportSendRef = useRef(mergeTransportSend);\n\tmergeTransportSendRef.current = mergeTransportSend;\n\n\tuseLayoutEffect(() => {\n\t\tconst disconnect = connectPartialSync(bridge, {\n\t\t\turl: wsUrl,\n\t\t\ttransport: wsTransport,\n\t\t\tsetTransportSend: (send) => {\n\t\t\t\tbridge.setSend((message: SyncClientMessage) => send(message));\n\t\t\t\tmergeTransportSendRef.current?.(send);\n\t\t\t},\n\t\t\tserializeJson: (value: unknown) => serializeJsonRef.current(value),\n\t\t\tdeserializeJson: (raw: string) => deserializeJsonRef.current(raw),\n\t\t\tmutationBridge: mutationBridgeRef.current,\n\t\t});\n\t\treturn () => {\n\t\t\tdisconnect();\n\t\t};\n\t}, [bridge, wsTransport, wsUrl]);\n\n\tconst confirmedKeysRevision = useSyncExternalStore(\n\t\t(onStoreChange) => bridge.subscribeConfirmedKeysRevision(onStoreChange),\n\t\t() => bridge.serverConfirmedKeysRevision,\n\t\t() => 0,\n\t);\n\n\tconst indexRows = useMemo(() => {\n\t\tvoid collectionVersion;\n\t\tvoid indexMapVersion;\n\t\tvoid confirmedKeysRevision;\n\t\tconst start = windowStartIndex;\n\t\tconst out: TItem[] = [];\n\t\tfor (let i = 0; ; i += 1) {\n\t\t\tconst id = globalIndexMapRef.current.get(start + i);\n\t\t\tif (id === undefined) break;\n\t\t\tconst row = getPartialSyncRowByMapId(collection, id);\n\t\t\tif (row === undefined) continue;\n\t\t\tout.push(row);\n\t\t}\n\t\tif (cacheDisplayMode === \"confirmed\") {\n\t\t\treturn out.filter((row) =>\n\t\t\t\tbridge.serverConfirmedKeys.has(partialSyncRowKey(row.id)),\n\t\t\t);\n\t\t}\n\t\treturn out;\n\t}, [\n\t\tbridge,\n\t\tcacheDisplayMode,\n\t\tcollection,\n\t\tcollectionVersion,\n\t\tconfirmedKeysRevision,\n\t\tindexMapVersion,\n\t\twindowStartIndex,\n\t]);\n\n\tconst rows = indexRows;\n\n\tuseLayoutEffect(() => {\n\t\tdenseRowsRef.current = rows;\n\t}, [rows]);\n\n\tconst getRowSlot = useCallback(\n\t\t(globalIndex: number): PartialSyncRowSlotView<TItem> => {\n\t\t\tvoid collectionVersion;\n\t\t\tvoid indexMapVersion;\n\t\t\tconst id = globalIndexMapRef.current.get(globalIndex);\n\t\t\tconst row =\n\t\t\t\tid !== undefined ? getPartialSyncRowByMapId(collection, id) : undefined;\n\t\t\tif (row !== undefined) {\n\t\t\t\tconst ws = windowStartIndex;\n\t\t\t\tconst denseEnd = ws + rows.length;\n\t\t\t\tconst inDense = globalIndex >= ws && globalIndex < denseEnd;\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tslot: inDense ? \"ready\" : \"ready_global\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (id !== undefined) {\n\t\t\t\treturn { row: undefined, slot: \"stale_map\" };\n\t\t\t}\n\t\t\tif (\n\t\t\t\trangeRequestInFlight &&\n\t\t\t\tpendingServerRange !== null &&\n\t\t\t\tglobalIndex >= pendingServerRange.start &&\n\t\t\t\tglobalIndex < pendingServerRange.endExclusive\n\t\t\t) {\n\t\t\t\treturn { row: undefined, slot: \"server\" };\n\t\t\t}\n\t\t\treturn { row: undefined, slot: \"none\" };\n\t\t},\n\t\t[\n\t\t\tcollection,\n\t\t\tcollectionVersion,\n\t\t\tindexMapVersion,\n\t\t\twindowStartIndex,\n\t\t\trows.length,\n\t\t\trangeRequestInFlight,\n\t\t\tpendingServerRange,\n\t\t],\n\t);\n\n\tconst recordIdsAtOffset = useCallback(\n\t\t(offset: number, fetchedRows: TItem[]) => {\n\t\t\tfor (let i = 0; i < fetchedRows.length; i += 1) {\n\t\t\t\tglobalIndexMapRef.current.set(\n\t\t\t\t\toffset + i,\n\t\t\t\t\tpartialSyncRowKey(fetchedRows[i].id),\n\t\t\t\t);\n\t\t\t}\n\t\t\tbumpIndexMap();\n\t\t},\n\t\t[bumpIndexMap],\n\t);\n\n\tconst fetchNext = useCallback(async () => {\n\t\tif (rangeRequestInFlight || !hasMore) return;\n\t\tconst gen = fetchGenRef.current;\n\t\tconst fetchStart = windowStartRef.current + denseRowsRef.current.length;\n\t\tsetPendingServerRange({\n\t\t\tstart: fetchStart,\n\t\t\tendExclusive: fetchStart + pageLimit,\n\t\t});\n\t\tsetRangeRequestInFlight(true);\n\t\ttry {\n\t\t\tconst result = await bridge.requestRangeQuery({\n\t\t\t\tkind: \"index\",\n\t\t\t\tmode: \"cursor\",\n\t\t\t\tsort: sortRef.current as { column: string; direction: \"asc\" | \"desc\" },\n\t\t\t\tlimit: pageLimit,\n\t\t\t\tafterCursor: nextCursor,\n\t\t\t});\n\t\t\tif (gen !== fetchGenRef.current) return;\n\n\t\t\tif (result.invalidateWindow && result.rows.length === 0) {\n\t\t\t\tconst again = await bridge.requestRangeQuery({\n\t\t\t\t\tkind: \"index\",\n\t\t\t\t\tmode: \"cursor\",\n\t\t\t\t\tsort: sortRef.current as {\n\t\t\t\t\t\tcolumn: string;\n\t\t\t\t\t\tdirection: \"asc\" | \"desc\";\n\t\t\t\t\t},\n\t\t\t\t\tlimit: pageLimit,\n\t\t\t\t\tafterCursor: nextCursor,\n\t\t\t\t});\n\t\t\t\tif (gen !== fetchGenRef.current) return;\n\t\t\t\trecordIdsAtOffset(\n\t\t\t\t\twindowStartRef.current + denseRowsRef.current.length,\n\t\t\t\t\tagain.rows,\n\t\t\t\t);\n\t\t\t\tsetTotalCount(again.totalCount);\n\t\t\t\tsetNextCursor(again.lastCursor);\n\t\t\t\tsetHasMore(again.rows.length === pageLimit);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (result.upToDate) {\n\t\t\t\tsetTotalCount(result.totalCount);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trecordIdsAtOffset(\n\t\t\t\twindowStartRef.current + denseRowsRef.current.length,\n\t\t\t\tresult.rows,\n\t\t\t);\n\t\t\tsetTotalCount(result.totalCount);\n\t\t\tsetNextCursor(result.lastCursor);\n\t\t\tsetHasMore(result.rows.length === pageLimit);\n\t\t} catch (error: unknown) {\n\t\t\tif (\n\t\t\t\terror !== null &&\n\t\t\t\ttypeof error === \"object\" &&\n\t\t\t\t\"name\" in error &&\n\t\t\t\terror.name === \"AbortError\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (gen === fetchGenRef.current) {\n\t\t\t\tsetPendingServerRange(null);\n\t\t\t\tsetRangeRequestInFlight(false);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tbridge,\n\t\thasMore,\n\t\trangeRequestInFlight,\n\t\tnextCursor,\n\t\tpageLimit,\n\t\trecordIdsAtOffset,\n\t]);\n\n\tconst seekToViewport = useCallback(\n\t\t(\n\t\t\tfirstVisibleIndex: number,\n\t\t\toptions?: {\n\t\t\t\tscrollSettled?: boolean;\n\t\t\t\tlastVisibleIndex?: number;\n\t\t\t\tforce?: boolean;\n\t\t\t},\n\t\t) => {\n\t\t\tconst offset = Math.max(0, firstVisibleIndex);\n\t\t\tconst loadedEndExclusive =\n\t\t\t\twindowStartRef.current + denseRowsRef.current.length;\n\t\t\t// For scrollSettled, `lastVisibleIndex` comes from scroll geometry (viewport height), not\n\t\t\t// TanStack overscan — safe to require the whole visible span to fit in the dense window.\n\t\t\t// Without last, keep first-only (e.g. non-settled callers).\n\t\t\tconst lastForDense =\n\t\t\t\toptions?.scrollSettled === true &&\n\t\t\t\ttypeof options.lastVisibleIndex === \"number\"\n\t\t\t\t\t? options.lastVisibleIndex\n\t\t\t\t\t: firstVisibleIndex;\n\t\t\tconst inDenseWindow =\n\t\t\t\tdenseRowsRef.current.length > 0 &&\n\t\t\t\tfirstVisibleIndex >= windowStartRef.current &&\n\t\t\t\tlastForDense < loadedEndExclusive;\n\n\t\t\tif (options?.scrollSettled === true && inDenseWindow && !options?.force) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst now = Date.now();\n\t\t\tif (!options?.force && now < seekCooldownUntilRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!options?.scrollSettled) {\n\t\t\t\t// Live scroll: virtualizer updates indices before `windowStartIndex` catches up (seek was\n\t\t\t\t// scrollSettled-only). If the first visible row is outside [windowStart, loadedEnd), reconcile\n\t\t\t\t// immediately (throttled) so we do not paint \"not cached yet\" until scrollend.\n\t\t\t\tconst ws = windowStartRef.current;\n\t\t\t\tconst f = firstVisibleIndex;\n\t\t\t\tconst firstInsideDense =\n\t\t\t\t\tdenseRowsRef.current.length > 0 && f >= ws && f < loadedEndExclusive;\n\t\t\t\tif (firstInsideDense && !options?.force) return;\n\t\t\t}\n\t\t\tseekCooldownUntilRef.current = now + seekCooldownMs;\n\n\t\t\tsetLastSeekMeta({\n\t\t\t\toffset,\n\t\t\t\treason: options?.scrollSettled === true ? \"scrollSettled\" : \"scroll\",\n\t\t\t});\n\t\t\tfetchGenRef.current += 1;\n\t\t\tconst gen = fetchGenRef.current;\n\t\t\tbridge.abortRangeRequests();\n\n\t\t\tconst want = Math.min(\n\t\t\t\tpageLimit,\n\t\t\t\tMath.max(0, totalCountRef.current - offset),\n\t\t\t);\n\t\t\tif (totalCountRef.current > 0 && want === 0) {\n\t\t\t\tsetWindowStartIndex(offset);\n\t\t\t\twindowStartRef.current = offset;\n\t\t\t\tsetNextCursor(null);\n\t\t\t\tsetHasMore(false);\n\t\t\t\tsetPendingServerRange(null);\n\t\t\t\tsetRangeRequestInFlight(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst ids = tryIdsForIndexWindow(\n\t\t\t\tglobalIndexMapRef.current,\n\t\t\t\toffset,\n\t\t\t\twant,\n\t\t\t\ttotalCountRef.current,\n\t\t\t);\n\t\t\tif (ids !== null) {\n\t\t\t\tsetWindowStartIndex(offset);\n\t\t\t\tconst lastId = ids[ids.length - 1];\n\t\t\t\tconst gsv = getSortValueRef.current;\n\t\t\t\tconst lastRow =\n\t\t\t\t\tlastId !== undefined\n\t\t\t\t\t\t? getPartialSyncRowByMapId(collection, lastId)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tsetNextCursor(\n\t\t\t\t\tlastRow !== undefined ? gsv(lastRow, sortRef.current.column) : null,\n\t\t\t\t);\n\t\t\t\tsetHasMore(offset + ids.length < totalCountRef.current);\n\t\t\t\tsetPendingServerRange(null);\n\t\t\t\tbumpIndexMap();\n\t\t\t\twindowStartRef.current = offset;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet fingerprint: RangeFingerprint | undefined;\n\t\t\tif (totalCountRef.current > 0 && want > 0) {\n\t\t\t\tconst fp = computeFingerprintForIndexWindow(\n\t\t\t\t\tcollection,\n\t\t\t\t\tglobalIndexMapRef.current,\n\t\t\t\t\toffset,\n\t\t\t\t\twant,\n\t\t\t\t\t(row) => getVersionMsRef.current(row),\n\t\t\t\t);\n\t\t\t\tif (fp !== undefined) {\n\t\t\t\t\tfingerprint = fp;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetWindowStartIndex(offset);\n\t\t\twindowStartRef.current = offset;\n\t\t\tsetNextCursor(null);\n\t\t\tsetHasMore(true);\n\t\t\tsetPendingServerRange({ start: offset, endExclusive: offset + want });\n\t\t\tsetRangeRequestInFlight(true);\n\t\t\tvoid (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tlet result = await bridge.requestRangeQuery(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: \"index\",\n\t\t\t\t\t\t\tmode: \"offset\",\n\t\t\t\t\t\t\tsort: sortRef.current as {\n\t\t\t\t\t\t\t\tcolumn: string;\n\t\t\t\t\t\t\t\tdirection: \"asc\" | \"desc\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlimit: pageLimit,\n\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t);\n\t\t\t\t\tif (gen !== fetchGenRef.current) return;\n\n\t\t\t\t\tif (result.upToDate) {\n\t\t\t\t\t\tsetTotalCount(result.totalCount);\n\t\t\t\t\t\tsetHasMore(offset + pageLimit < result.totalCount);\n\t\t\t\t\t\tconst gsv = getSortValueRef.current;\n\t\t\t\t\t\tconst lastId =\n\t\t\t\t\t\t\tglobalIndexMapRef.current.get(offset + want - 1) ??\n\t\t\t\t\t\t\tglobalIndexMapRef.current.get(offset + pageLimit - 1);\n\t\t\t\t\t\tconst lastRow =\n\t\t\t\t\t\t\tlastId !== undefined\n\t\t\t\t\t\t\t\t? getPartialSyncRowByMapId(collection, lastId)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tsetNextCursor(\n\t\t\t\t\t\t\tlastRow !== undefined\n\t\t\t\t\t\t\t\t? gsv(lastRow, sortRef.current.column)\n\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (result.invalidateWindow && result.rows.length === 0) {\n\t\t\t\t\t\tresult = await bridge.requestRangeQuery({\n\t\t\t\t\t\t\tkind: \"index\",\n\t\t\t\t\t\t\tmode: \"offset\",\n\t\t\t\t\t\t\tsort: sortRef.current as {\n\t\t\t\t\t\t\t\tcolumn: string;\n\t\t\t\t\t\t\t\tdirection: \"asc\" | \"desc\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlimit: pageLimit,\n\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (gen !== fetchGenRef.current) return;\n\t\t\t\t\t}\n\n\t\t\t\t\trecordIdsAtOffset(offset, result.rows);\n\t\t\t\t\tsetTotalCount(result.totalCount);\n\t\t\t\t\tsetNextCursor(result.lastCursor);\n\t\t\t\t\tsetHasMore(result.rows.length === pageLimit);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tif (\n\t\t\t\t\t\terror !== null &&\n\t\t\t\t\t\ttypeof error === \"object\" &&\n\t\t\t\t\t\t\"name\" in error &&\n\t\t\t\t\t\terror.name === \"AbortError\"\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (gen === fetchGenRef.current) {\n\t\t\t\t\t\tsetPendingServerRange(null);\n\t\t\t\t\t\tsetRangeRequestInFlight(false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t},\n\t\t[\n\t\t\tbridge,\n\t\t\tbumpIndexMap,\n\t\t\tcollection,\n\t\t\tpageLimit,\n\t\t\trecordIdsAtOffset,\n\t\t\tseekCooldownMs,\n\t\t],\n\t);\n\n\tseekToViewportRef.current = seekToViewport;\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (invalidateSeekTimerRef.current !== null) {\n\t\t\t\tclearTimeout(invalidateSeekTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst sub = collection.subscribeChanges(() => {\n\t\t\t// Remove individual stale map entries (row deleted from collection, but map still\n\t\t\t// references it). This is lightweight: no wholesale clear, no force-seek, no abort.\n\t\t\t// `indexRows` already skips stale entries so the UI stays populated.\n\t\t\tlet removedStaleMapEntry = false;\n\t\t\tif (globalIndexMapRef.current.size > 0) {\n\t\t\t\tfor (const [idx, id] of globalIndexMapRef.current) {\n\t\t\t\t\tif (getPartialSyncRowByMapId(collection, id) === undefined) {\n\t\t\t\t\t\tglobalIndexMapRef.current.delete(idx);\n\t\t\t\t\t\tremovedStaleMapEntry = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (removedStaleMapEntry) {\n\t\t\t\tbumpIndexMap();\n\t\t\t}\n\n\t\t\tsetCollectionVersion((v) => v + 1);\n\t\t\tconst sortNow = sortRef.current;\n\t\t\tconst sortPos = getSortPositionsRef.current;\n\t\t\tconst gsv = getSortValueRef.current;\n\t\t\tcacheManagerRef.current.resyncSortPositionsForTrackedRows(\n\t\t\t\t(key) => getPartialSyncRowByMapId(collection, key),\n\t\t\t\t(row) =>\n\t\t\t\t\tsortPos !== undefined\n\t\t\t\t\t\t? sortPos(row)\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t[sortNow.column]: gsv(row, sortNow.column),\n\t\t\t\t\t\t\t},\n\t\t\t);\n\t\t});\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}, [bumpIndexMap, collection]);\n\n\tconst seekAfterScrollSettled = useCallback(\n\t\t(firstVisibleIndex: number, lastVisibleIndex?: number) => {\n\t\t\tseekToViewport(firstVisibleIndex, {\n\t\t\t\tscrollSettled: true,\n\t\t\t\tlastVisibleIndex,\n\t\t\t});\n\t\t},\n\t\t[seekToViewport],\n\t);\n\n\t// Re-run when sort or logical collection identity changes — not on TanStack `collection` ref churn.\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: intentional narrow deps; truncate uses syncUtilsRef\n\tuseEffect(() => {\n\t\tfetchGenRef.current += 1;\n\t\tbridge.abortRangeRequests();\n\t\tbridge.clearTrackedRowIds();\n\t\tsetWindowStartIndex(0);\n\t\tsetTotalCount(0);\n\t\tsetNextCursor(null);\n\t\tsetHasMore(true);\n\t\tsetLastSeekMeta(null);\n\t\tsetRangeRequestInFlight(false);\n\t\tsetPendingServerRange(null);\n\t\tglobalIndexMapRef.current.clear();\n\t\tbumpIndexMap();\n\t\tvoid syncUtilsRef.current.truncate();\n\t\tcacheManager.clear();\n\t}, [\n\t\tbridge,\n\t\tbumpIndexMap,\n\t\tcacheManager,\n\t\tsort.column,\n\t\tsort.direction,\n\t\tpartialWindowResetKey ?? \"\",\n\t]);\n\n\tuseEffect(() => {\n\t\tif (rows.length === 0 && !rangeRequestInFlight && hasMore) {\n\t\t\tvoid fetchNext();\n\t\t}\n\t}, [fetchNext, hasMore, rangeRequestInFlight, rows.length]);\n\n\treturn {\n\t\tbridge,\n\t\tcacheManager,\n\t\trows,\n\t\twindowStartIndex,\n\t\ttotalCount,\n\t\trangeRequestInFlight,\n\t\thasMore,\n\t\tfetchNext,\n\t\tseekToViewport,\n\t\tseekAfterScrollSettled,\n\t\tbridgeState,\n\t\tviewportInfo,\n\t\tsetViewportInfo,\n\t\tlastSeekMeta,\n\t\tgetRowSlot,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { withSync } from './chunk-YYGPIHHJ.js';
|
|
2
|
+
import { createCollection } from '@tanstack/db';
|
|
3
|
+
|
|
4
|
+
function createPartialSyncedCollection(baseOptions, syncOptions) {
|
|
5
|
+
const { options, bridge, setTransportSend } = withSync(baseOptions, {
|
|
6
|
+
...syncOptions,
|
|
7
|
+
sendSyncHelloOnConnect: syncOptions?.sendSyncHelloOnConnect ?? false,
|
|
8
|
+
forwardTruncateToMutations: syncOptions?.forwardTruncateToMutations ?? false
|
|
9
|
+
});
|
|
10
|
+
const collection = createCollection(
|
|
11
|
+
options
|
|
12
|
+
);
|
|
13
|
+
bridge.setRowGet((key) => collection.get(key));
|
|
14
|
+
return { collection, bridge, setTransportSend };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { createPartialSyncedCollection };
|
|
18
|
+
//# sourceMappingURL=chunk-OP53UBPN.js.map
|
|
19
|
+
//# sourceMappingURL=chunk-OP53UBPN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/create-partial-synced-collection.ts"],"names":[],"mappings":";;;AAgBO,SAAS,6BAAA,CAEd,aAAsB,WAAA,EAA+B;AAEtD,EAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,gBAAA,EAAiB,GAAI,SAAS,WAAA,EAAa;AAAA,IACnE,GAAG,WAAA;AAAA,IACH,sBAAA,EAAwB,aAAa,sBAAA,IAA0B,KAAA;AAAA,IAC/D,0BAAA,EACC,aAAa,0BAAA,IAA8B;AAAA,GAC5C,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,gBAAA;AAAA,IAClB;AAAA,GACD;AACA,EAAA,MAAA,CAAO,UAAU,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAA,CAAI,GAAG,CAAC,CAAA;AAC7C,EAAA,OAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,gBAAA,EAAiB;AAC/C","file":"chunk-OP53UBPN.js","sourcesContent":["import type { Collection } from \"@tanstack/db\";\nimport { createCollection } from \"@tanstack/db\";\nimport {\n\twithSync,\n\ttype AnyWithSyncableCollectionConfig,\n\ttype InferItemFromCollectionOptions,\n\ttype WithSyncOptions,\n} from \"./with-sync\";\n\n/**\n * Like {@link createSyncedCollection}, but defaults `sendSyncHelloOnConnect` to `false` and\n * `forwardTruncateToMutations` to `false` for use with {@link connectPartialSync} +\n * {@link usePartialSyncWindow} (`mutateBatch` without `syncHello`). Local window resets call\n * `truncate()` on the collection; those must not be sent to the server or they can batch with user\n * edits and wipe authoritative data.\n */\nexport function createPartialSyncedCollection<\n\tTConfig extends AnyWithSyncableCollectionConfig,\n>(baseOptions: TConfig, syncOptions?: WithSyncOptions) {\n\ttype TItem = InferItemFromCollectionOptions<TConfig>;\n\tconst { options, bridge, setTransportSend } = withSync(baseOptions, {\n\t\t...syncOptions,\n\t\tsendSyncHelloOnConnect: syncOptions?.sendSyncHelloOnConnect ?? false,\n\t\tforwardTruncateToMutations:\n\t\t\tsyncOptions?.forwardTruncateToMutations ?? false,\n\t});\n\tconst collection = createCollection(\n\t\toptions as never,\n\t) as unknown as Collection<TItem>;\n\tbridge.setRowGet((key) => collection.get(key));\n\treturn { collection, bridge, setTransportSend };\n}\n"]}
|