@syncular/client-react 0.0.6-135 → 0.0.6-136

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.
@@ -43,6 +43,23 @@ export interface SyncProviderProps<DB extends SyncClientDb, Identity extends {
43
43
  onError?: (error: SyncError) => void;
44
44
  onConflict?: (conflict: ConflictInfo) => void;
45
45
  onDataChange?: (scopes: string[]) => void;
46
+ /**
47
+ * Debounce window (ms) for coalescing `data:change` events.
48
+ * - `0` (default): emit immediately
49
+ * - `>0`: merge scopes and emit once per window
50
+ */
51
+ dataChangeDebounceMs?: number;
52
+ /**
53
+ * Debounce override while sync is actively running.
54
+ * Falls back to `dataChangeDebounceMs` when omitted.
55
+ */
56
+ dataChangeDebounceMsWhenSyncing?: number;
57
+ /**
58
+ * Debounce override while connection is reconnecting.
59
+ * Falls back to `dataChangeDebounceMsWhenSyncing` (if syncing) and then
60
+ * `dataChangeDebounceMs` when omitted.
61
+ */
62
+ dataChangeDebounceMsWhenReconnecting?: number;
46
63
  plugins?: SyncClientPlugin[];
47
64
  /** Custom SHA-256 hash function (for platforms without crypto.subtle, e.g. React Native) */
48
65
  sha256?: (bytes: Uint8Array) => Promise<string>;
@@ -178,6 +195,12 @@ export interface UseSyncQueryResult<T> {
178
195
  lastSyncAt: number | null;
179
196
  refetch: () => Promise<void>;
180
197
  }
198
+ interface UseSyncQueryMetrics {
199
+ executions: number;
200
+ coalescedRefreshes: number;
201
+ skippedDataUpdates: number;
202
+ lastDurationMs: number | null;
203
+ }
181
204
  export interface UseSyncQueryOptions {
182
205
  enabled?: boolean;
183
206
  deps?: unknown[];
@@ -185,6 +208,15 @@ export interface UseSyncQueryOptions {
185
208
  watchTables?: string[];
186
209
  pollIntervalMs?: number;
187
210
  staleAfterMs?: number;
211
+ /**
212
+ * If true (default), non-urgent hook state updates are scheduled in
213
+ * `startTransition` to keep UI interactions responsive under bursty sync.
214
+ */
215
+ transitionUpdates?: boolean;
216
+ /**
217
+ * Optional low-overhead instrumentation callback for query executions.
218
+ */
219
+ onMetrics?: (metrics: UseSyncQueryMetrics) => void;
188
220
  }
189
221
  export interface UseQueryResult<T> {
190
222
  data: T | undefined;
@@ -272,6 +304,22 @@ export interface UseOutboxResult {
272
304
  clearFailed: () => Promise<number>;
273
305
  clearAll: () => Promise<number>;
274
306
  }
307
+ interface UseOutboxMetrics {
308
+ refreshes: number;
309
+ coalescedRefreshes: number;
310
+ lastDurationMs: number | null;
311
+ }
312
+ interface UseOutboxOptions {
313
+ /**
314
+ * If true (default), non-urgent outbox state updates are scheduled in
315
+ * `startTransition` to reduce render contention during sync bursts.
316
+ */
317
+ transitionUpdates?: boolean;
318
+ /**
319
+ * Optional low-overhead instrumentation callback for outbox refreshes.
320
+ */
321
+ onMetrics?: (metrics: UseOutboxMetrics) => void;
322
+ }
275
323
  export interface UsePresenceResult<TMetadata = Record<string, unknown>> {
276
324
  presence: PresenceEntry<TMetadata>[];
277
325
  isLoading: boolean;
@@ -291,7 +339,7 @@ export declare function createSyncularReact<DB extends SyncClientDb, Identity ex
291
339
  } = {
292
340
  actorId: string;
293
341
  }>(): {
294
- readonly SyncProvider: ({ db, transport, sync, identity, clientId, limitCommits, limitSnapshotRows, maxSnapshotPages, stateId, pollIntervalMs, maxRetries, migrate, onMigrationError, realtimeEnabled, realtimeFallbackPollMs, onError, onConflict, onDataChange, plugins, sha256, autoStart, renderWhileStarting, children, }: SyncProviderProps<DB, Identity>) => ReactNode;
342
+ readonly SyncProvider: ({ db, transport, sync, identity, clientId, limitCommits, limitSnapshotRows, maxSnapshotPages, stateId, pollIntervalMs, maxRetries, migrate, onMigrationError, realtimeEnabled, realtimeFallbackPollMs, onError, onConflict, onDataChange, dataChangeDebounceMs, dataChangeDebounceMsWhenSyncing, dataChangeDebounceMsWhenReconnecting, plugins, sha256, autoStart, renderWhileStarting, children, }: SyncProviderProps<DB, Identity>) => ReactNode;
295
343
  readonly useSyncContext: () => SyncContextValue<DB>;
296
344
  readonly useEngine: () => SyncEngine<DB>;
297
345
  readonly useSyncEngine: () => UseSyncEngineResult;
@@ -308,7 +356,7 @@ export declare function createSyncularReact<DB extends SyncClientDb, Identity ex
308
356
  readonly useQuery: <TResult>(queryFn: (ctx: QueryContext<DB>) => ExecutableQuery<TResult> | Promise<TResult>, options?: UseQueryOptions) => UseQueryResult<TResult>;
309
357
  readonly useMutation: <TTable extends keyof DB & string>(options: UseMutationOptions<TTable>) => UseMutationResult<TTable>;
310
358
  readonly useMutations: (options?: UseMutationsOptions) => MutationsHook<DB>;
311
- readonly useOutbox: () => UseOutboxResult;
359
+ readonly useOutbox: (options?: UseOutboxOptions) => UseOutboxResult;
312
360
  readonly useConflicts: () => UseConflictsResult;
313
361
  readonly useResolveConflict: (options?: UseResolveConflictOptions) => UseResolveConflictResult;
314
362
  readonly usePresence: <TMetadata = Record<string, unknown>>(scopeKey: string) => UsePresenceResult<TMetadata>;
@@ -1 +1 @@
1
- {"version":3,"file":"createSyncularReact.d.ts","sourceRoot":"","sources":["../src/createSyncularReact.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSyncularReact.d.ts","sourceRoot":"","sources":["../src/createSyncularReact.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createMutationsApi, createOutboxCommit, createQueryContext, enqueueOutboxCommit, FingerprintCollector, resolveConflict as resolveConflictDb, SyncEngine, } from '@syncular/client';
3
3
  import { sql } from 'kysely';
4
- import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
4
+ import { createContext, startTransition, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
5
5
  function isRecord(value) {
6
6
  return typeof value === 'object' && value !== null && !Array.isArray(value);
7
7
  }
@@ -55,7 +55,7 @@ const SYNC_SUBSCRIPTION_REFRESH_EVENTS = [
55
55
  ];
56
56
  export function createSyncularReact() {
57
57
  const SyncContext = createContext(null);
58
- function SyncProvider({ db, transport, sync, identity, clientId, limitCommits, limitSnapshotRows, maxSnapshotPages, stateId, pollIntervalMs, maxRetries, migrate, onMigrationError, realtimeEnabled, realtimeFallbackPollMs, onError, onConflict, onDataChange, plugins, sha256, autoStart = true, renderWhileStarting = true, children, }) {
58
+ function SyncProvider({ db, transport, sync, identity, clientId, limitCommits, limitSnapshotRows, maxSnapshotPages, stateId, pollIntervalMs, maxRetries, migrate, onMigrationError, realtimeEnabled, realtimeFallbackPollMs, onError, onConflict, onDataChange, dataChangeDebounceMs, dataChangeDebounceMsWhenSyncing, dataChangeDebounceMsWhenReconnecting, plugins, sha256, autoStart = true, renderWhileStarting = true, children, }) {
59
59
  const resolvedSubscriptions = useMemo(() => sync.subscriptions(identity), [sync, identity]);
60
60
  const config = useMemo(() => ({
61
61
  db,
@@ -77,6 +77,9 @@ export function createSyncularReact() {
77
77
  onError,
78
78
  onConflict,
79
79
  onDataChange,
80
+ dataChangeDebounceMs,
81
+ dataChangeDebounceMsWhenSyncing,
82
+ dataChangeDebounceMsWhenReconnecting,
80
83
  plugins,
81
84
  sha256,
82
85
  }), [
@@ -99,6 +102,9 @@ export function createSyncularReact() {
99
102
  onError,
100
103
  onConflict,
101
104
  onDataChange,
105
+ dataChangeDebounceMs,
106
+ dataChangeDebounceMsWhenSyncing,
107
+ dataChangeDebounceMsWhenReconnecting,
102
108
  plugins,
103
109
  sha256,
104
110
  ]);
@@ -285,23 +291,15 @@ export function createSyncularReact() {
285
291
  }
286
292
  function useTransportHealth() {
287
293
  const engine = useEngine();
294
+ const getSnapshot = useCallback(() => engine.getTransportHealth(), [engine]);
288
295
  const health = useSyncExternalStore(useCallback((callback) => {
289
- const unsubscribers = [
290
- engine.subscribe(callback),
291
- engine.on('connection:change', callback),
292
- engine.on('sync:complete', callback),
293
- engine.on('sync:error', callback),
294
- ];
295
- return () => {
296
- for (const unsubscribe of unsubscribers)
297
- unsubscribe();
298
- };
299
- }, [engine]), useCallback(() => engine.getTransportHealth(), [engine]), useCallback(() => engine.getTransportHealth(), [engine]));
296
+ return engine.subscribeSelector(getSnapshot, callback);
297
+ }, [engine, getSnapshot]), getSnapshot, getSnapshot);
300
298
  return useMemo(() => ({ health }), [health]);
301
299
  }
302
300
  function useAsyncEngineResource(options) {
303
301
  const engine = useEngine();
304
- const { initialValue, load, refreshOn, pollIntervalMs, shouldPoll } = options;
302
+ const { initialValue, load, refreshOn, pollIntervalMs, shouldPoll, transitionUpdates = true, } = options;
305
303
  const loadRef = useRef(load);
306
304
  loadRef.current = load;
307
305
  const [value, setValue] = useState(initialValue);
@@ -309,7 +307,16 @@ export function createSyncularReact() {
309
307
  const [error, setError] = useState(null);
310
308
  const loadedRef = useRef(false);
311
309
  const versionRef = useRef(0);
312
- const refresh = useCallback(async () => {
310
+ const inFlightRefreshRef = useRef(null);
311
+ const refreshQueuedRef = useRef(false);
312
+ const applyUpdate = useCallback((update) => {
313
+ if (transitionUpdates) {
314
+ startTransition(update);
315
+ return;
316
+ }
317
+ update();
318
+ }, [transitionUpdates]);
319
+ const refreshOnce = useCallback(async () => {
313
320
  const version = ++versionRef.current;
314
321
  const isCurrent = () => version === versionRef.current;
315
322
  if (!loadedRef.current) {
@@ -319,21 +326,45 @@ export function createSyncularReact() {
319
326
  const next = await loadRef.current();
320
327
  if (!isCurrent())
321
328
  return;
322
- setValue(next);
323
- setError(null);
329
+ applyUpdate(() => {
330
+ setValue(next);
331
+ setError(null);
332
+ });
324
333
  }
325
334
  catch (err) {
326
335
  if (!isCurrent())
327
336
  return;
328
- setError(err instanceof Error ? err : new Error(String(err)));
337
+ applyUpdate(() => {
338
+ setError(err instanceof Error ? err : new Error(String(err)));
339
+ });
329
340
  }
330
341
  finally {
331
342
  if (isCurrent()) {
332
343
  loadedRef.current = true;
333
- setIsLoading(false);
344
+ applyUpdate(() => {
345
+ setIsLoading(false);
346
+ });
334
347
  }
335
348
  }
336
- }, []);
349
+ }, [applyUpdate]);
350
+ const refresh = useCallback(async () => {
351
+ refreshQueuedRef.current = true;
352
+ if (inFlightRefreshRef.current) {
353
+ await inFlightRefreshRef.current;
354
+ return;
355
+ }
356
+ const runLoop = async () => {
357
+ while (refreshQueuedRef.current) {
358
+ refreshQueuedRef.current = false;
359
+ await refreshOnce();
360
+ }
361
+ };
362
+ const inFlight = runLoop().finally(() => {
363
+ inFlightRefreshRef.current = null;
364
+ });
365
+ inFlightRefreshRef.current = inFlight;
366
+ await inFlight;
367
+ }, [refreshOnce]);
337
368
  useEffect(() => {
338
369
  void refresh();
339
370
  }, [refresh]);
@@ -491,7 +522,7 @@ export function createSyncularReact() {
491
522
  }), [resolve, isPending, error, reset]);
492
523
  }
493
524
  function useSyncQuery(queryFn, options = {}) {
494
- const { enabled = true, deps = [], keyField = 'id', watchTables = [], pollIntervalMs, staleAfterMs, } = options;
525
+ const { enabled = true, deps = [], keyField = 'id', watchTables = [], pollIntervalMs, staleAfterMs, transitionUpdates = true, onMetrics, } = options;
495
526
  const { db } = useSyncContext();
496
527
  const engine = useEngine();
497
528
  const watchTablesSet = useMemo(() => new Set(watchTables), [watchTables]);
@@ -507,15 +538,42 @@ export function createSyncularReact() {
507
538
  const fingerprintCollectorRef = useRef(new FingerprintCollector());
508
539
  const previousFingerprintRef = useRef('');
509
540
  const hasLoadedRef = useRef(false);
510
- const executeQuery = useCallback(async () => {
541
+ const inFlightQueryRef = useRef(null);
542
+ const queryQueuedRef = useRef(false);
543
+ const metricsRef = useRef({
544
+ executions: 0,
545
+ coalescedRefreshes: 0,
546
+ skippedDataUpdates: 0,
547
+ lastDurationMs: null,
548
+ });
549
+ const onMetricsRef = useRef(onMetrics);
550
+ onMetricsRef.current = onMetrics;
551
+ const emitMetrics = useCallback(() => {
552
+ onMetricsRef.current?.({ ...metricsRef.current });
553
+ }, []);
554
+ const applyUpdate = useCallback((update) => {
555
+ if (transitionUpdates) {
556
+ startTransition(update);
557
+ return;
558
+ }
559
+ update();
560
+ }, [transitionUpdates]);
561
+ const executeQueryOnce = useCallback(async () => {
562
+ const startedAt = Date.now();
563
+ metricsRef.current.executions += 1;
511
564
  if (!enabled) {
512
565
  if (previousFingerprintRef.current !== 'disabled') {
513
566
  previousFingerprintRef.current = 'disabled';
514
- setData(undefined);
515
567
  }
516
- setLastSyncAt(engine.getState().lastSyncAt);
517
- setIsLoading(false);
568
+ const snapshotLastSyncAt = engine.getState().lastSyncAt;
569
+ applyUpdate(() => {
570
+ setData(undefined);
571
+ setLastSyncAt(snapshotLastSyncAt);
572
+ setIsLoading(false);
573
+ });
518
574
  hasLoadedRef.current = true;
575
+ metricsRef.current.lastDurationMs = Date.now() - startedAt;
576
+ emitMetrics();
519
577
  return;
520
578
  }
521
579
  const version = ++versionRef.current;
@@ -532,47 +590,77 @@ export function createSyncularReact() {
532
590
  : await fnResult;
533
591
  if (version === versionRef.current) {
534
592
  watchedScopesRef.current = scopeCollector;
535
- setLastSyncAt(engine.getState().lastSyncAt);
593
+ const snapshotLastSyncAt = engine.getState().lastSyncAt;
536
594
  const fingerprint = fingerprintCollectorRef.current.getCombined();
537
- if (fingerprint !== previousFingerprintRef.current ||
538
- fingerprint === '') {
595
+ const didFingerprintChange = fingerprint !== previousFingerprintRef.current ||
596
+ fingerprint === '';
597
+ if (didFingerprintChange) {
539
598
  previousFingerprintRef.current = fingerprint;
540
- setData(result);
541
599
  }
542
- setError(null);
600
+ else {
601
+ metricsRef.current.skippedDataUpdates += 1;
602
+ }
603
+ applyUpdate(() => {
604
+ setLastSyncAt(snapshotLastSyncAt);
605
+ if (didFingerprintChange) {
606
+ setData(result);
607
+ }
608
+ setError(null);
609
+ });
543
610
  }
544
611
  }
545
612
  catch (err) {
546
613
  if (version === versionRef.current) {
547
- setError(err instanceof Error ? err : new Error(String(err)));
614
+ applyUpdate(() => {
615
+ setError(err instanceof Error ? err : new Error(String(err)));
616
+ });
548
617
  }
549
618
  }
550
619
  finally {
551
620
  if (version === versionRef.current) {
552
- setIsLoading(false);
621
+ applyUpdate(() => {
622
+ setIsLoading(false);
623
+ });
553
624
  hasLoadedRef.current = true;
625
+ metricsRef.current.lastDurationMs = Date.now() - startedAt;
626
+ emitMetrics();
554
627
  }
555
628
  }
556
- }, [db, enabled, engine, keyField]);
629
+ }, [db, enabled, engine, keyField, applyUpdate, emitMetrics]);
630
+ const executeQuery = useCallback(async () => {
631
+ queryQueuedRef.current = true;
632
+ if (inFlightQueryRef.current) {
633
+ metricsRef.current.coalescedRefreshes += 1;
634
+ emitMetrics();
635
+ await inFlightQueryRef.current;
636
+ return;
637
+ }
638
+ const runLoop = async () => {
639
+ while (queryQueuedRef.current) {
640
+ queryQueuedRef.current = false;
641
+ await executeQueryOnce();
642
+ }
643
+ };
644
+ const inFlight = runLoop().finally(() => {
645
+ inFlightQueryRef.current = null;
646
+ });
647
+ inFlightQueryRef.current = inFlight;
648
+ await inFlight;
649
+ }, [executeQueryOnce, emitMetrics]);
557
650
  useEffect(() => {
558
651
  executeQuery();
559
652
  // eslint-disable-next-line react-hooks/exhaustive-deps
560
653
  }, [executeQuery, ...deps]);
654
+ const getLastSyncAtSnapshot = useCallback(() => engine.getState().lastSyncAt, [engine]);
561
655
  useEffect(() => {
562
- const unsubscribe = engine.subscribe(() => {
563
- const nextLastSyncAt = engine.getState().lastSyncAt;
564
- setLastSyncAt((previous) => previous === nextLastSyncAt ? previous : nextLastSyncAt);
565
- });
566
- return unsubscribe;
567
- }, [engine]);
568
- useEffect(() => {
569
- if (!enabled)
570
- return;
571
- const unsubscribe = engine.on('sync:complete', () => {
572
- void executeQuery();
656
+ const unsubscribe = engine.subscribeSelector(getLastSyncAtSnapshot, () => {
657
+ const snapshotLastSyncAt = getLastSyncAtSnapshot();
658
+ applyUpdate(() => {
659
+ setLastSyncAt(snapshotLastSyncAt);
660
+ });
573
661
  });
574
662
  return unsubscribe;
575
- }, [engine, enabled, executeQuery]);
663
+ }, [engine, getLastSyncAtSnapshot, applyUpdate]);
576
664
  useEffect(() => {
577
665
  if (!enabled)
578
666
  return;
@@ -844,9 +932,10 @@ export function createSyncularReact() {
844
932
  $reset: reset,
845
933
  }), [api, error, isPending, reset]);
846
934
  }
847
- function useOutbox() {
935
+ function useOutbox(options = {}) {
848
936
  const { db } = useSyncContext();
849
937
  const engine = useEngine();
938
+ const { transitionUpdates = true, onMetrics } = options;
850
939
  const [stats, setStats] = useState({
851
940
  pending: 0,
852
941
  sending: 0,
@@ -857,11 +946,31 @@ export function createSyncularReact() {
857
946
  const [pending, setPending] = useState([]);
858
947
  const [failed, setFailed] = useState([]);
859
948
  const [isLoading, setIsLoading] = useState(true);
860
- const refresh = useCallback(async () => {
949
+ const inFlightRefreshRef = useRef(null);
950
+ const refreshQueuedRef = useRef(false);
951
+ const metricsRef = useRef({
952
+ refreshes: 0,
953
+ coalescedRefreshes: 0,
954
+ lastDurationMs: null,
955
+ });
956
+ const onMetricsRef = useRef(onMetrics);
957
+ onMetricsRef.current = onMetrics;
958
+ const emitMetrics = useCallback(() => {
959
+ onMetricsRef.current?.({ ...metricsRef.current });
960
+ }, []);
961
+ const applyUpdate = useCallback((update) => {
962
+ if (transitionUpdates) {
963
+ startTransition(update);
964
+ return;
965
+ }
966
+ update();
967
+ }, [transitionUpdates]);
968
+ const refreshOnce = useCallback(async () => {
969
+ const startedAt = Date.now();
970
+ metricsRef.current.refreshes += 1;
861
971
  try {
862
972
  setIsLoading(true);
863
973
  const newStats = await engine.refreshOutboxStats({ emit: false });
864
- setStats(newStats);
865
974
  const rowsResult = await sql `
866
975
  select
867
976
  ${sql.ref('id')},
@@ -902,16 +1011,45 @@ export function createSyncularReact() {
902
1011
  attemptCount: Number(row.attempt_count),
903
1012
  };
904
1013
  });
905
- setPending(commits.filter((c) => c.status === 'pending'));
906
- setFailed(commits.filter((c) => c.status === 'failed'));
1014
+ const nextPending = commits.filter((c) => c.status === 'pending');
1015
+ const nextFailed = commits.filter((c) => c.status === 'failed');
1016
+ applyUpdate(() => {
1017
+ setStats(newStats);
1018
+ setPending(nextPending);
1019
+ setFailed(nextFailed);
1020
+ });
907
1021
  }
908
1022
  catch (err) {
909
1023
  console.error('[useOutbox] Failed to refresh:', err);
910
1024
  }
911
1025
  finally {
912
- setIsLoading(false);
1026
+ applyUpdate(() => {
1027
+ setIsLoading(false);
1028
+ });
1029
+ metricsRef.current.lastDurationMs = Date.now() - startedAt;
1030
+ emitMetrics();
913
1031
  }
914
- }, [db, engine]);
1032
+ }, [db, engine, applyUpdate, emitMetrics]);
1033
+ const refresh = useCallback(async () => {
1034
+ refreshQueuedRef.current = true;
1035
+ if (inFlightRefreshRef.current) {
1036
+ metricsRef.current.coalescedRefreshes += 1;
1037
+ emitMetrics();
1038
+ await inFlightRefreshRef.current;
1039
+ return;
1040
+ }
1041
+ const runLoop = async () => {
1042
+ while (refreshQueuedRef.current) {
1043
+ refreshQueuedRef.current = false;
1044
+ await refreshOnce();
1045
+ }
1046
+ };
1047
+ const inFlight = runLoop().finally(() => {
1048
+ inFlightRefreshRef.current = null;
1049
+ });
1050
+ inFlightRefreshRef.current = inFlight;
1051
+ await inFlight;
1052
+ }, [refreshOnce, emitMetrics]);
915
1053
  useEffect(() => {
916
1054
  refresh();
917
1055
  }, [refresh]);
@@ -921,12 +1059,6 @@ export function createSyncularReact() {
921
1059
  });
922
1060
  return unsubscribe;
923
1061
  }, [engine, refresh]);
924
- useEffect(() => {
925
- const unsubscribe = engine.on('sync:complete', () => {
926
- refresh();
927
- });
928
- return unsubscribe;
929
- }, [engine, refresh]);
930
1062
  const hasUnsent = stats.pending > 0 || stats.failed > 0;
931
1063
  const clearFailed = useCallback(async () => {
932
1064
  const count = await engine.clearFailedCommits();