@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/sync-protocol.ts"],"names":[],"mappings":"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","file":"chunk-BJJEAKXL.js","sourcesContent":["import type { SyncMessage } from \"@firtoz/db-helpers\";\nimport { exhaustiveGuard } from \"@firtoz/maybe-error\";\nimport { z } from \"zod\";\n\n/** Default {@link SyncClientMessage} / {@link SyncServerMessage} `collectionId` when omitted on the wire. */\nexport const DEFAULT_SYNC_COLLECTION_ID = \"default\" as const;\n\nconst collectionIdSchema = z\n\t.string()\n\t.min(1)\n\t.default(DEFAULT_SYNC_COLLECTION_ID);\n\nconst mutationTypeSchema = z.enum([\"insert\", \"update\", \"delete\", \"truncate\"]);\n\nexport const mutationIntentSchema = z.object({\n\tclientMutationId: z.string().min(1),\n\ttype: mutationTypeSchema,\n\tvalue: z.record(z.string(), z.unknown()).optional(),\n\tpreviousValue: z.record(z.string(), z.unknown()).optional(),\n\tkey: z.union([z.string(), z.number()]).optional(),\n});\n\nexport type MutationIntent = z.infer<typeof mutationIntentSchema>;\n\nexport type SyncSortDirection = \"asc\" | \"desc\";\nexport type SyncRangeSort = {\n\tcolumn: string;\n\tdirection: SyncSortDirection;\n};\n\n/** Fixed operator set for predicate-based range queries (e.g. spatial filters). */\nexport type RangeConditionOp =\n\t| \"gt\"\n\t| \"gte\"\n\t| \"lt\"\n\t| \"lte\"\n\t| \"eq\"\n\t| \"neq\"\n\t| \"between\";\n\nexport type RangeCondition = {\n\tcolumn: string;\n\top: RangeConditionOp;\n\tvalue: unknown;\n\t/** Required when `op` is `\"between\"`. */\n\tvalueTo?: unknown;\n};\n\nexport type IndexRangeCursor = {\n\tkind: \"index\";\n\tmode: \"cursor\";\n\tsort: SyncRangeSort;\n\tlimit: number;\n\tafterCursor: unknown | null;\n};\n\nexport type IndexRangeOffset = {\n\tkind: \"index\";\n\tmode: \"offset\";\n\tsort: SyncRangeSort;\n\tlimit: number;\n\toffset: number;\n};\n\nexport type PredicateRange = {\n\tkind: \"predicate\";\n\tconditions: RangeCondition[];\n\tsort?: SyncRangeSort;\n\tlimit?: number;\n};\n\nexport type SyncRange = IndexRangeCursor | IndexRangeOffset | PredicateRange;\n\n/** Client watermark for reconciliation (max row version in range + count). */\nexport type RangeFingerprint = {\n\tversion: number;\n\tcount: number;\n};\n\nconst syncRangeSortSchema = z.object({\n\tcolumn: z.string().min(1),\n\tdirection: z.enum([\"asc\", \"desc\"]),\n});\n\nconst rangeConditionOpSchema = z.enum([\n\t\"gt\",\n\t\"gte\",\n\t\"lt\",\n\t\"lte\",\n\t\"eq\",\n\t\"neq\",\n\t\"between\",\n]);\n\nconst rangeConditionSchema = z.object({\n\tcolumn: z.string().min(1),\n\top: rangeConditionOpSchema,\n\tvalue: z.unknown(),\n\tvalueTo: z.unknown().optional(),\n});\n\nconst indexRangeCursorSchema = z.object({\n\tkind: z.literal(\"index\"),\n\tmode: z.literal(\"cursor\"),\n\tsort: syncRangeSortSchema,\n\tlimit: z.number().int().positive(),\n\tafterCursor: z.unknown().nullable(),\n});\n\nconst indexRangeOffsetSchema = z.object({\n\tkind: z.literal(\"index\"),\n\tmode: z.literal(\"offset\"),\n\tsort: syncRangeSortSchema,\n\tlimit: z.number().int().positive(),\n\toffset: z.number().int().nonnegative(),\n});\n\nconst predicateRangeSchema = z.object({\n\tkind: z.literal(\"predicate\"),\n\tconditions: z.array(rangeConditionSchema).min(1),\n\tsort: syncRangeSortSchema.optional(),\n\tlimit: z.number().int().positive().optional(),\n});\n\nexport const syncRangeSchema: z.ZodType<SyncRange> = z.union([\n\tindexRangeCursorSchema,\n\tindexRangeOffsetSchema,\n\tpredicateRangeSchema,\n]);\n\nconst rangeFingerprintSchema = z.object({\n\tversion: z.number().int().nonnegative(),\n\tcount: z.number().int().nonnegative(),\n});\n\nexport function createClientMessageSchema() {\n\treturn z.discriminatedUnion(\"type\", [\n\t\tz.object({\n\t\t\ttype: z.literal(\"mutateBatch\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\tmutations: z.array(mutationIntentSchema).min(1),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"syncHello\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\tlastAckedServerVersion: z.number().int().nonnegative(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"ping\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\ttimestamp: z.number(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"queryRange\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\trequestId: z.string().min(1),\n\t\t\tsort: z.object({\n\t\t\t\tcolumn: z.string().min(1),\n\t\t\t\tdirection: z.enum([\"asc\", \"desc\"]),\n\t\t\t}),\n\t\t\tlimit: z.number().int().positive(),\n\t\t\tafterCursor: z.unknown().nullable(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"queryByOffset\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\trequestId: z.string().min(1),\n\t\t\tsort: z.object({\n\t\t\t\tcolumn: z.string().min(1),\n\t\t\t\tdirection: z.enum([\"asc\", \"desc\"]),\n\t\t\t}),\n\t\t\tlimit: z.number().int().positive(),\n\t\t\toffset: z.number().int().nonnegative(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"rangeQuery\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\trequestId: z.string().min(1),\n\t\t\trange: syncRangeSchema,\n\t\t\tfingerprint: rangeFingerprintSchema.optional(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"rangeReconcile\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\trequestId: z.string().min(1),\n\t\t\trange: syncRangeSchema,\n\t\t\tmanifest: z.array(\n\t\t\t\tz.object({\n\t\t\t\t\tid: z.union([z.string(), z.number()]),\n\t\t\t\t\tversion: z.number().int().nonnegative(),\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t]);\n}\n\nexport type SyncClientMessage = z.infer<\n\tReturnType<typeof createClientMessageSchema>\n>;\n\nexport const clientMessageSchema = createClientMessageSchema();\n\n/** How to apply {@link SyncServerMessage} `syncBackfill` changes on the client. */\nexport type SyncBackfillMode = \"snapshot\" | \"delta\";\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n\t? Omit<T, K>\n\t: never;\n\n/** Client payload before `collectionId` is attached (bridge outbox helpers). */\nexport type SyncClientMessageBody = DistributiveOmit<\n\tSyncClientMessage,\n\t\"collectionId\"\n>;\n\nexport function createServerMessageSchema<\n\tTItem = unknown,\n\tTKey extends string | number = string | number,\n>() {\n\tconst syncMessageSchema = z.custom<SyncMessage<TItem, TKey>>();\n\treturn z.discriminatedUnion(\"type\", [\n\t\tz.object({\n\t\t\ttype: z.literal(\"ack\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\tclientMutationIds: z.array(z.string().min(1)),\n\t\t\tserverVersion: z.number().int().nonnegative(),\n\t\t\tchanges: z.array(syncMessageSchema),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"syncBatch\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tserverVersion: z.number().int().nonnegative(),\n\t\t\tchanges: z.array(syncMessageSchema),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"syncBackfill\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tmode: z.enum([\"snapshot\", \"delta\"]),\n\t\t\tserverVersion: z.number().int().nonnegative(),\n\t\t\tchanges: z.array(syncMessageSchema),\n\t\t\tchunkIndex: z.number().int().nonnegative().optional(),\n\t\t\ttotalChunks: z.number().int().positive().optional(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"reject\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tclientId: z.string().min(1),\n\t\t\tclientMutationId: z.string().min(1),\n\t\t\treason: z.string().min(1),\n\t\t\tcorrectiveChanges: z.array(syncMessageSchema).default([]),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"pong\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\ttimestamp: z.number(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"queryRangeChunk\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\trequestId: z.string().min(1),\n\t\t\trows: z.array(z.custom<TItem>()),\n\t\t\ttotalCount: z.number().int().nonnegative(),\n\t\t\tlastCursor: z.unknown().nullable(),\n\t\t\thasMore: z.boolean(),\n\t\t\tchunkIndex: z.number().int().nonnegative(),\n\t\t\tdone: z.boolean(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"rangePatch\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\tchange: syncMessageSchema,\n\t\t\tviewTransition: z.enum([\"enterView\", \"exitView\"]).optional(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"rangeUpToDate\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\trequestId: z.string().min(1),\n\t\t\ttotalCount: z.number().int().nonnegative(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"rangeDelta\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\trequestId: z.string().min(1),\n\t\t\ttotalCount: z.number().int().nonnegative(),\n\t\t\tchanges: z.array(syncMessageSchema),\n\t\t\tlastCursor: z.unknown().optional(),\n\t\t}),\n\t\tz.object({\n\t\t\ttype: z.literal(\"rangeReconcileResult\"),\n\t\t\tcollectionId: collectionIdSchema,\n\t\t\trequestId: z.string().min(1),\n\t\t\tadded: z.array(syncMessageSchema),\n\t\t\tupdated: z.array(syncMessageSchema),\n\t\t\tstale: z.array(z.union([z.string(), z.number()])),\n\t\t\tmovedHints: z.array(\n\t\t\t\tz.object({\n\t\t\t\t\tid: z.union([z.string(), z.number()]),\n\t\t\t\t\thint: z.record(z.string(), z.unknown()),\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttotalCount: z.number().int().nonnegative(),\n\t\t}),\n\t]);\n}\n\nexport type SyncServerMessage<\n\tTItem = unknown,\n\tTKey extends string | number = string | number,\n> = z.infer<ReturnType<typeof createServerMessageSchema<TItem, TKey>>>;\n\n/** Server payload before `collectionId` is attached (bridge outbox helpers). */\nexport type SyncServerMessageBody<\n\tTItem = unknown,\n\tTKey extends string | number = string | number,\n> = DistributiveOmit<SyncServerMessage<TItem, TKey>, \"collectionId\">;\n\n/** Attach `collectionId` to an outbound server message (single-collection servers). */\nexport function withServerCollectionId<TItem, TKey extends string | number>(\n\tcollectionId: string,\n\tmessage: SyncServerMessage<TItem, TKey>,\n): SyncServerMessage<TItem, TKey> {\n\treturn { ...message, collectionId };\n}\n\nexport const serverMessageSchema = createServerMessageSchema();\n\nexport function toSyncMessage(intent: MutationIntent): SyncMessage {\n\tswitch (intent.type) {\n\t\tcase \"insert\":\n\t\t\tif (!intent.value) throw new Error(\"Insert intent requires value\");\n\t\t\treturn { type: \"insert\", value: intent.value };\n\t\tcase \"update\":\n\t\t\tif (!intent.value || !intent.previousValue) {\n\t\t\t\tthrow new Error(\"Update intent requires value and previousValue\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"update\",\n\t\t\t\tvalue: intent.value,\n\t\t\t\tpreviousValue: intent.previousValue,\n\t\t\t};\n\t\tcase \"delete\":\n\t\t\tif (intent.key === undefined)\n\t\t\t\tthrow new Error(\"Delete intent requires key\");\n\t\t\treturn { type: \"delete\", key: intent.key };\n\t\tcase \"truncate\":\n\t\t\treturn { type: \"truncate\" };\n\t\tdefault:\n\t\t\texhaustiveGuard(intent.type);\n\t}\n}\n\nexport function createClientMutationId(prefix = \"m\"): string {\n\treturn `${prefix}_${crypto.randomUUID()}`;\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createClientMessageSchema, createServerMessageSchema } from './chunk-BJJEAKXL.js';
|
|
2
|
+
import { StandardSchemaWebSocketClient } from '@firtoz/websocket-do/schema-client';
|
|
3
|
+
|
|
4
|
+
function connectSync(bridge, options) {
|
|
5
|
+
const clientSchema = createClientMessageSchema();
|
|
6
|
+
const serverSchema = createServerMessageSchema();
|
|
7
|
+
const useMsgpack = options.transport === "msgpack";
|
|
8
|
+
const schemaClient = new StandardSchemaWebSocketClient({
|
|
9
|
+
url: options.url,
|
|
10
|
+
clientSchema,
|
|
11
|
+
serverSchema,
|
|
12
|
+
enableBufferMessages: useMsgpack,
|
|
13
|
+
...useMsgpack ? {} : {
|
|
14
|
+
serializeJson: options.serializeJson ?? JSON.stringify,
|
|
15
|
+
deserializeJson: options.deserializeJson ?? JSON.parse
|
|
16
|
+
},
|
|
17
|
+
onMessage: (msg) => {
|
|
18
|
+
options.onServerMessage?.(msg);
|
|
19
|
+
void bridge.handleServerMessage(msg);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
options.setTransportSend((message) => {
|
|
23
|
+
void schemaClient.send(message).catch((err) => {
|
|
24
|
+
console.error("[connectSync] WebSocket send failed", err);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
bridge.setConnected(false);
|
|
28
|
+
const onOpen = () => {
|
|
29
|
+
bridge.setConnected(true);
|
|
30
|
+
};
|
|
31
|
+
const onClose = () => {
|
|
32
|
+
bridge.setConnected(false);
|
|
33
|
+
};
|
|
34
|
+
schemaClient.socket.addEventListener("open", onOpen);
|
|
35
|
+
schemaClient.socket.addEventListener("close", onClose);
|
|
36
|
+
if (schemaClient.socket.readyState === WebSocket.OPEN) {
|
|
37
|
+
onOpen();
|
|
38
|
+
}
|
|
39
|
+
return () => {
|
|
40
|
+
schemaClient.socket.removeEventListener("open", onOpen);
|
|
41
|
+
schemaClient.socket.removeEventListener("close", onClose);
|
|
42
|
+
bridge.setConnected(false);
|
|
43
|
+
options.setTransportSend(() => {
|
|
44
|
+
});
|
|
45
|
+
schemaClient.close();
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { connectSync };
|
|
50
|
+
//# sourceMappingURL=chunk-GWIOC5CP.js.map
|
|
51
|
+
//# sourceMappingURL=chunk-GWIOC5CP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connect-sync.ts"],"names":[],"mappings":";;;AA6BO,SAAS,WAAA,CACf,QACA,OAAA,EACa;AACb,EAAA,MAAM,eAAe,yBAAA,EAA0B;AAC/C,EAAA,MAAM,eAAe,yBAAA,EAAiC;AACtD,EAAA,MAAM,UAAA,GAAa,QAAQ,SAAA,KAAc,SAAA;AAEzC,EAAA,MAAM,YAAA,GAAe,IAAI,6BAAA,CAA8B;AAAA,IACtD,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,YAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA,EAAsB,UAAA;AAAA,IACtB,GAAI,UAAA,GACD,EAAC,GACD;AAAA,MACA,aAAA,EAAe,OAAA,CAAQ,aAAA,IAAiB,IAAA,CAAK,SAAA;AAAA,MAC7C,eAAA,EAAiB,OAAA,CAAQ,eAAA,IAAmB,IAAA,CAAK;AAAA,KAClD;AAAA,IACF,SAAA,EAAW,CAAC,GAAA,KAAQ;AACnB,MAAA,OAAA,CAAQ,kBAAkB,GAAG,CAAA;AAC7B,MAAA,KAAK,MAAA,CAAO,oBAAoB,GAAG,CAAA;AAAA,IACpC;AAAA,GACA,CAAA;AAED,EAAA,OAAA,CAAQ,gBAAA,CAAiB,CAAC,OAAA,KAAY;AACrC,IAAA,KAAK,aAAa,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAiB;AACvD,MAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,GAAG,CAAA;AAAA,IACzD,CAAC,CAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AAEzB,EAAA,MAAM,SAAS,MAAM;AACpB,IAAA,MAAA,CAAO,aAAa,IAAI,CAAA;AAAA,EACzB,CAAA;AACA,EAAA,MAAM,UAAU,MAAM;AACrB,IAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AAAA,EAC1B,CAAA;AAEA,EAAA,YAAA,CAAa,MAAA,CAAO,gBAAA,CAAiB,MAAA,EAAQ,MAAM,CAAA;AACnD,EAAA,YAAA,CAAa,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,OAAO,CAAA;AAErD,EAAA,IAAI,YAAA,CAAa,MAAA,CAAO,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AACtD,IAAA,MAAA,EAAO;AAAA,EACR;AAEA,EAAA,OAAO,MAAM;AACZ,IAAA,YAAA,CAAa,MAAA,CAAO,mBAAA,CAAoB,MAAA,EAAQ,MAAM,CAAA;AACtD,IAAA,YAAA,CAAa,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AACxD,IAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AACzB,IAAA,OAAA,CAAQ,iBAAiB,MAAM;AAAA,IAAC,CAAC,CAAA;AACjC,IAAA,YAAA,CAAa,KAAA,EAAM;AAAA,EACpB,CAAA;AACD","file":"chunk-GWIOC5CP.js","sourcesContent":["import { StandardSchemaWebSocketClient } from \"@firtoz/websocket-do/schema-client\";\nimport type { SyncClientBridge } from \"./sync-client-bridge\";\nimport type { PartialSyncRowShape } from \"./partial-sync-row-key\";\nimport {\n\tcreateClientMessageSchema,\n\tcreateServerMessageSchema,\n\ttype SyncClientMessage,\n\ttype SyncServerMessage,\n} from \"./sync-protocol\";\n\nexport type ConnectSyncTransport = \"json\" | \"msgpack\";\n\nexport type ConnectSyncOptions<TItem = unknown> = {\n\t/** WebSocket URL (e.g. `wss://host/room/x/websocket`). */\n\turl: string;\n\ttransport?: ConnectSyncTransport;\n\t/** Prefer a module-level function or `useCallback`; a new inline function each render can churn effects. */\n\tserializeJson?: (value: unknown) => string;\n\t/** Prefer a module-level function or `useCallback`; a new inline function each render can churn effects. */\n\tdeserializeJson?: (raw: string) => unknown;\n\t/** Wire transport after {@link SyncClientBridge} is created (from {@link withSync}). */\n\tsetTransportSend: (send: (msg: SyncClientMessage) => void) => void;\n\t/** Optional tap before messages reach the bridge (e.g. debug / inspector). */\n\tonServerMessage?: (msg: SyncServerMessage<TItem>) => void;\n};\n\n/**\n * Connects a {@link SyncClientBridge} to a WebSocket using the same codec as `StandardSchemaSession` (`@firtoz/websocket-do`) on the server.\n */\nexport function connectSync<TItem extends PartialSyncRowShape>(\n\tbridge: SyncClientBridge<TItem>,\n\toptions: ConnectSyncOptions<TItem>,\n): () => void {\n\tconst clientSchema = createClientMessageSchema();\n\tconst serverSchema = createServerMessageSchema<TItem>();\n\tconst useMsgpack = options.transport === \"msgpack\";\n\n\tconst schemaClient = new StandardSchemaWebSocketClient({\n\t\turl: options.url,\n\t\tclientSchema,\n\t\tserverSchema,\n\t\tenableBufferMessages: useMsgpack,\n\t\t...(useMsgpack\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tserializeJson: options.serializeJson ?? JSON.stringify,\n\t\t\t\t\tdeserializeJson: options.deserializeJson ?? JSON.parse,\n\t\t\t\t}),\n\t\tonMessage: (msg) => {\n\t\t\toptions.onServerMessage?.(msg);\n\t\t\tvoid bridge.handleServerMessage(msg);\n\t\t},\n\t});\n\n\toptions.setTransportSend((message) => {\n\t\tvoid schemaClient.send(message).catch((err: unknown) => {\n\t\t\tconsole.error(\"[connectSync] WebSocket send failed\", err);\n\t\t});\n\t});\n\n\tbridge.setConnected(false);\n\n\tconst onOpen = () => {\n\t\tbridge.setConnected(true);\n\t};\n\tconst onClose = () => {\n\t\tbridge.setConnected(false);\n\t};\n\n\tschemaClient.socket.addEventListener(\"open\", onOpen);\n\tschemaClient.socket.addEventListener(\"close\", onClose);\n\n\tif (schemaClient.socket.readyState === WebSocket.OPEN) {\n\t\tonOpen();\n\t}\n\n\treturn () => {\n\t\tschemaClient.socket.removeEventListener(\"open\", onOpen);\n\t\tschemaClient.socket.removeEventListener(\"close\", onClose);\n\t\tbridge.setConnected(false);\n\t\toptions.setTransportSend(() => {});\n\t\tschemaClient.close();\n\t};\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
9
|
+
|
|
10
|
+
export { __privateAdd, __privateGet, __privateMethod, __privateSet };
|
|
11
|
+
//# sourceMappingURL=chunk-HMLY7DHA.js.map
|
|
12
|
+
//# sourceMappingURL=chunk-HMLY7DHA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-HMLY7DHA.js"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { assertSyncUtils, getPartialSyncRowByMapId, primePartialSyncBridgeCachedIdsFromCollection } from './chunk-4BEXLBCH.js';
|
|
2
|
+
import { connectPartialSync } from './chunk-XC4QNFSQ.js';
|
|
3
|
+
import { PartialSyncClientBridge } from './chunk-P3JOTUAB.js';
|
|
4
|
+
import { useState, useMemo, useRef, useLayoutEffect } from 'react';
|
|
5
|
+
|
|
6
|
+
function usePartialSyncCollection({
|
|
7
|
+
collection,
|
|
8
|
+
mutationBridge,
|
|
9
|
+
wsUrl,
|
|
10
|
+
wsTransport = "json",
|
|
11
|
+
serializeJson = JSON.stringify,
|
|
12
|
+
deserializeJson = JSON.parse,
|
|
13
|
+
mergeTransportSend,
|
|
14
|
+
collectionId,
|
|
15
|
+
beforeApplyRows
|
|
16
|
+
}) {
|
|
17
|
+
const [bridgeState, setBridgeState] = useState({
|
|
18
|
+
status: "offline"
|
|
19
|
+
});
|
|
20
|
+
const syncUtils = useMemo(
|
|
21
|
+
() => assertSyncUtils(collection.utils),
|
|
22
|
+
[collection]
|
|
23
|
+
);
|
|
24
|
+
const syncUtilsRef = useRef(syncUtils);
|
|
25
|
+
syncUtilsRef.current = syncUtils;
|
|
26
|
+
const partialClientId = mutationBridge.clientId;
|
|
27
|
+
const collectionRef = useRef(collection);
|
|
28
|
+
collectionRef.current = collection;
|
|
29
|
+
const bridge = useMemo(
|
|
30
|
+
() => new PartialSyncClientBridge({
|
|
31
|
+
clientId: partialClientId,
|
|
32
|
+
...collectionId !== void 0 ? { collectionId } : {},
|
|
33
|
+
collection: {
|
|
34
|
+
get: (key) => getPartialSyncRowByMapId(collectionRef.current, key),
|
|
35
|
+
utils: {
|
|
36
|
+
receiveSync: (messages) => syncUtilsRef.current.receiveSync(messages)
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
send: () => {
|
|
40
|
+
},
|
|
41
|
+
onStateChange: (state) => {
|
|
42
|
+
setBridgeState(state);
|
|
43
|
+
},
|
|
44
|
+
...beforeApplyRows !== void 0 ? { beforeApplyRows } : {}
|
|
45
|
+
}),
|
|
46
|
+
[beforeApplyRows, collectionId, partialClientId]
|
|
47
|
+
);
|
|
48
|
+
const serializeJsonRef = useRef(serializeJson);
|
|
49
|
+
serializeJsonRef.current = serializeJson;
|
|
50
|
+
const deserializeJsonRef = useRef(deserializeJson);
|
|
51
|
+
deserializeJsonRef.current = deserializeJson;
|
|
52
|
+
const mutationBridgeRef = useRef(mutationBridge);
|
|
53
|
+
mutationBridgeRef.current = mutationBridge;
|
|
54
|
+
const mergeTransportSendRef = useRef(mergeTransportSend);
|
|
55
|
+
mergeTransportSendRef.current = mergeTransportSend;
|
|
56
|
+
useLayoutEffect(() => {
|
|
57
|
+
primePartialSyncBridgeCachedIdsFromCollection(bridge, collection);
|
|
58
|
+
let cancelled = false;
|
|
59
|
+
let seeded = false;
|
|
60
|
+
const trySeed = () => {
|
|
61
|
+
if (cancelled || seeded) return;
|
|
62
|
+
const rows = Array.from(collection.entries(), ([, v]) => v);
|
|
63
|
+
if (rows.length === 0) return;
|
|
64
|
+
bridge.seedHydratedLocalRows(rows);
|
|
65
|
+
seeded = true;
|
|
66
|
+
};
|
|
67
|
+
const changeSubscription = collection.subscribeChanges(trySeed, {
|
|
68
|
+
includeInitialState: true
|
|
69
|
+
});
|
|
70
|
+
queueMicrotask(trySeed);
|
|
71
|
+
let intervalId;
|
|
72
|
+
intervalId = setInterval(() => {
|
|
73
|
+
trySeed();
|
|
74
|
+
if (seeded && intervalId !== void 0) {
|
|
75
|
+
clearInterval(intervalId);
|
|
76
|
+
intervalId = void 0;
|
|
77
|
+
}
|
|
78
|
+
}, 50);
|
|
79
|
+
const stopId = setTimeout(() => {
|
|
80
|
+
if (intervalId !== void 0) {
|
|
81
|
+
clearInterval(intervalId);
|
|
82
|
+
}
|
|
83
|
+
}, 1e4);
|
|
84
|
+
return () => {
|
|
85
|
+
cancelled = true;
|
|
86
|
+
changeSubscription.unsubscribe();
|
|
87
|
+
if (intervalId !== void 0) clearInterval(intervalId);
|
|
88
|
+
clearTimeout(stopId);
|
|
89
|
+
};
|
|
90
|
+
}, [bridge, collection]);
|
|
91
|
+
useLayoutEffect(() => {
|
|
92
|
+
const disconnect = connectPartialSync(bridge, {
|
|
93
|
+
url: wsUrl,
|
|
94
|
+
transport: wsTransport,
|
|
95
|
+
setTransportSend: (send) => {
|
|
96
|
+
bridge.setSend((message) => send(message));
|
|
97
|
+
mergeTransportSendRef.current?.(send);
|
|
98
|
+
},
|
|
99
|
+
serializeJson: (value) => serializeJsonRef.current(value),
|
|
100
|
+
deserializeJson: (raw) => deserializeJsonRef.current(raw),
|
|
101
|
+
mutationBridge: mutationBridgeRef.current
|
|
102
|
+
});
|
|
103
|
+
return () => {
|
|
104
|
+
disconnect();
|
|
105
|
+
};
|
|
106
|
+
}, [bridge, wsTransport, wsUrl]);
|
|
107
|
+
return { bridge, bridgeState };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { usePartialSyncCollection };
|
|
111
|
+
//# sourceMappingURL=chunk-I6RJWBGF.js.map
|
|
112
|
+
//# sourceMappingURL=chunk-I6RJWBGF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/usePartialSyncCollection.ts"],"names":[],"mappings":"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","file":"chunk-I6RJWBGF.js","sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { connectPartialSync } from \"../connect-partial-sync\";\nimport { PartialSyncClientBridge } from \"../partial-sync-client-bridge\";\nimport type { PartialSyncState } from \"../partial-sync-client-bridge\";\nimport type { SyncClientMessage } from \"../sync-protocol\";\nimport {\n\tassertSyncUtils,\n\tgetPartialSyncRowByMapId,\n\tprimePartialSyncBridgeCachedIdsFromCollection,\n} from \"./partial-sync-utils\";\nimport type {\n\tPartialSyncItem,\n\tUsePartialSyncCollectionOptions,\n\tUsePartialSyncCollectionResult,\n} from \"./types\";\n\n/**\n * WebSocket + {@link PartialSyncClientBridge} wiring shared by predicate viewports and custom UIs.\n * Pair with {@link usePartialSyncViewport} for N-dimensional `rangeQuery` + local predicate rows.\n */\nexport function usePartialSyncCollection<TItem extends PartialSyncItem>({\n\tcollection,\n\tmutationBridge,\n\twsUrl,\n\twsTransport = \"json\",\n\tserializeJson = JSON.stringify,\n\tdeserializeJson = JSON.parse,\n\tmergeTransportSend,\n\tcollectionId,\n\tbeforeApplyRows,\n}: UsePartialSyncCollectionOptions<TItem>): UsePartialSyncCollectionResult<TItem> {\n\tconst [bridgeState, setBridgeState] = useState<PartialSyncState>({\n\t\tstatus: \"offline\",\n\t});\n\n\tconst syncUtils = useMemo(\n\t\t() => assertSyncUtils<TItem>(collection.utils),\n\t\t[collection],\n\t);\n\tconst syncUtilsRef = useRef(syncUtils);\n\tsyncUtilsRef.current = syncUtils;\n\n\tconst partialClientId = mutationBridge.clientId;\n\n\tconst collectionRef = useRef(collection);\n\tcollectionRef.current = collection;\n\n\tconst bridge = useMemo(\n\t\t() =>\n\t\t\tnew PartialSyncClientBridge<TItem>({\n\t\t\t\tclientId: 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) => {\n\t\t\t\t\tsetBridgeState(state);\n\t\t\t\t},\n\t\t\t\t...(beforeApplyRows !== undefined ? { beforeApplyRows } : {}),\n\t\t\t}),\n\t\t[beforeApplyRows, collectionId, partialClientId],\n\t);\n\n\tconst serializeJsonRef = useRef(serializeJson);\n\tserializeJsonRef.current = serializeJson;\n\tconst deserializeJsonRef = useRef(deserializeJson);\n\tdeserializeJsonRef.current = deserializeJson;\n\tconst mutationBridgeRef = useRef(mutationBridge);\n\tmutationBridgeRef.current = mutationBridge;\n\tconst mergeTransportSendRef = useRef(mergeTransportSend);\n\tmergeTransportSendRef.current = mergeTransportSend;\n\n\t/**\n\t * Keep the object returned by `subscribeChanges` and call `.unsubscribe()` on it. Destructuring\n\t * `{ unsubscribe }` drops the method receiver, so TanStack's `unsubscribe()` runs with `this === undefined`\n\t * and throws (e.g. reading `truncateCleanup`).\n\t *\n\t * Declare this layout effect before the WebSocket one so teardown runs `unsubscribe` before\n\t * `disconnect` (layout cleanups run in declaration order in practice).\n\t */\n\tuseLayoutEffect(() => {\n\t\tprimePartialSyncBridgeCachedIdsFromCollection(bridge, collection);\n\t\tlet cancelled = false;\n\t\tlet seeded = false;\n\t\tconst trySeed = () => {\n\t\t\tif (cancelled || seeded) return;\n\t\t\tconst rows = Array.from(collection.entries(), ([, v]) => v);\n\t\t\tif (rows.length === 0) return;\n\t\t\tbridge.seedHydratedLocalRows(rows);\n\t\t\tseeded = true;\n\t\t};\n\t\tconst changeSubscription = collection.subscribeChanges(trySeed, {\n\t\t\tincludeInitialState: true,\n\t\t});\n\t\tqueueMicrotask(trySeed);\n\t\tlet intervalId: ReturnType<typeof setInterval> | undefined;\n\t\tintervalId = setInterval(() => {\n\t\t\ttrySeed();\n\t\t\tif (seeded && intervalId !== undefined) {\n\t\t\t\tclearInterval(intervalId);\n\t\t\t\tintervalId = undefined;\n\t\t\t}\n\t\t}, 50);\n\t\tconst stopId = setTimeout(() => {\n\t\t\tif (intervalId !== undefined) {\n\t\t\t\tclearInterval(intervalId);\n\t\t\t}\n\t\t}, 10_000);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tchangeSubscription.unsubscribe();\n\t\t\tif (intervalId !== undefined) clearInterval(intervalId);\n\t\t\tclearTimeout(stopId);\n\t\t};\n\t}, [bridge, collection]);\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\treturn { bridge, bridgeState };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// src/react/constants.ts
|
|
2
|
+
var DEFAULT_PAGE_LIMIT = 50;
|
|
3
|
+
var DEFAULT_SEEK_ROW_GAP = 80;
|
|
4
|
+
var DEFAULT_SEEK_COOLDOWN_MS = 200;
|
|
5
|
+
var DEFAULT_VIEWPORT_RANGE_QUIET_MS = 72;
|
|
6
|
+
var DEFAULT_VIEWPORT_RANGE_MAX_WAIT_MS = 200;
|
|
7
|
+
|
|
8
|
+
export { DEFAULT_PAGE_LIMIT, DEFAULT_SEEK_COOLDOWN_MS, DEFAULT_SEEK_ROW_GAP, DEFAULT_VIEWPORT_RANGE_MAX_WAIT_MS, DEFAULT_VIEWPORT_RANGE_QUIET_MS };
|
|
9
|
+
//# sourceMappingURL=chunk-M5MJHS6A.js.map
|
|
10
|
+
//# sourceMappingURL=chunk-M5MJHS6A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/constants.ts"],"names":[],"mappings":";AAAO,IAAM,kBAAA,GAAqB;AAC3B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,wBAAA,GAA2B;AAGjC,IAAM,+BAAA,GAAkC;AAKxC,IAAM,kCAAA,GAAqC","file":"chunk-M5MJHS6A.js","sourcesContent":["export const DEFAULT_PAGE_LIMIT = 50;\nexport const DEFAULT_SEEK_ROW_GAP = 80;\nexport const DEFAULT_SEEK_COOLDOWN_MS = 200;\n\n/** Default quiet period before coalesced predicate `rangeQuery` after viewport motion. */\nexport const DEFAULT_VIEWPORT_RANGE_QUIET_MS = 72;\n/**\n * Default max time between predicate `rangeQuery` calls while the viewport keeps changing\n * (still issues a fetch even during continuous motion).\n */\nexport const DEFAULT_VIEWPORT_RANGE_MAX_WAIT_MS = 200;\n"]}
|