@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.
- package/dist/createSyncularReact.d.ts +50 -2
- package/dist/createSyncularReact.d.ts.map +1 -1
- package/dist/createSyncularReact.js +190 -58
- package/dist/createSyncularReact.js.map +1 -1
- package/dist/useSyncGroup.d.ts.map +1 -1
- package/dist/useSyncGroup.js +1 -7
- package/dist/useSyncGroup.js.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/hooks.test.tsx +130 -0
- package/src/createSyncularReact.tsx +282 -62
- package/src/useSyncGroup.ts +3 -7
|
@@ -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
|
-
|
|
290
|
-
|
|
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
|
|
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
|
-
|
|
323
|
-
|
|
329
|
+
applyUpdate(() => {
|
|
330
|
+
setValue(next);
|
|
331
|
+
setError(null);
|
|
332
|
+
});
|
|
324
333
|
}
|
|
325
334
|
catch (err) {
|
|
326
335
|
if (!isCurrent())
|
|
327
336
|
return;
|
|
328
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
517
|
-
|
|
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
|
-
|
|
593
|
+
const snapshotLastSyncAt = engine.getState().lastSyncAt;
|
|
536
594
|
const fingerprint = fingerprintCollectorRef.current.getCombined();
|
|
537
|
-
|
|
538
|
-
fingerprint === ''
|
|
595
|
+
const didFingerprintChange = fingerprint !== previousFingerprintRef.current ||
|
|
596
|
+
fingerprint === '';
|
|
597
|
+
if (didFingerprintChange) {
|
|
539
598
|
previousFingerprintRef.current = fingerprint;
|
|
540
|
-
setData(result);
|
|
541
599
|
}
|
|
542
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
563
|
-
const
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
906
|
-
|
|
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
|
-
|
|
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();
|