@prabhask5/stellar-engine 1.1.6 → 1.1.8
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 +68 -25
- package/dist/actions/remoteChange.d.ts +143 -18
- package/dist/actions/remoteChange.d.ts.map +1 -1
- package/dist/actions/remoteChange.js +182 -58
- package/dist/actions/remoteChange.js.map +1 -1
- package/dist/actions/truncateTooltip.d.ts +56 -0
- package/dist/actions/truncateTooltip.d.ts.map +1 -0
- package/dist/actions/truncateTooltip.js +312 -0
- package/dist/actions/truncateTooltip.js.map +1 -0
- package/dist/auth/admin.d.ts +40 -3
- package/dist/auth/admin.d.ts.map +1 -1
- package/dist/auth/admin.js +45 -5
- package/dist/auth/admin.js.map +1 -1
- package/dist/auth/crypto.d.ts +55 -5
- package/dist/auth/crypto.d.ts.map +1 -1
- package/dist/auth/crypto.js +58 -5
- package/dist/auth/crypto.js.map +1 -1
- package/dist/auth/deviceVerification.d.ts +236 -20
- package/dist/auth/deviceVerification.d.ts.map +1 -1
- package/dist/auth/deviceVerification.js +293 -40
- package/dist/auth/deviceVerification.js.map +1 -1
- package/dist/auth/displayUtils.d.ts +98 -0
- package/dist/auth/displayUtils.d.ts.map +1 -0
- package/dist/auth/displayUtils.js +133 -0
- package/dist/auth/displayUtils.js.map +1 -0
- package/dist/auth/loginGuard.d.ts +108 -14
- package/dist/auth/loginGuard.d.ts.map +1 -1
- package/dist/auth/loginGuard.js +153 -31
- package/dist/auth/loginGuard.js.map +1 -1
- package/dist/auth/offlineCredentials.d.ts +132 -15
- package/dist/auth/offlineCredentials.d.ts.map +1 -1
- package/dist/auth/offlineCredentials.js +167 -23
- package/dist/auth/offlineCredentials.js.map +1 -1
- package/dist/auth/offlineLogin.d.ts +96 -10
- package/dist/auth/offlineLogin.d.ts.map +1 -1
- package/dist/auth/offlineLogin.js +82 -15
- package/dist/auth/offlineLogin.js.map +1 -1
- package/dist/auth/offlineSession.d.ts +83 -9
- package/dist/auth/offlineSession.d.ts.map +1 -1
- package/dist/auth/offlineSession.js +104 -13
- package/dist/auth/offlineSession.js.map +1 -1
- package/dist/auth/resolveAuthState.d.ts +70 -8
- package/dist/auth/resolveAuthState.d.ts.map +1 -1
- package/dist/auth/resolveAuthState.js +142 -46
- package/dist/auth/resolveAuthState.js.map +1 -1
- package/dist/auth/singleUser.d.ts +390 -37
- package/dist/auth/singleUser.d.ts.map +1 -1
- package/dist/auth/singleUser.js +505 -133
- package/dist/auth/singleUser.js.map +1 -1
- package/dist/bin/install-pwa.d.ts +25 -0
- package/dist/bin/install-pwa.d.ts.map +1 -0
- package/dist/bin/install-pwa.js +2197 -0
- package/dist/bin/install-pwa.js.map +1 -0
- package/dist/config.d.ts +132 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +87 -9
- package/dist/config.js.map +1 -1
- package/dist/conflicts.d.ts +246 -23
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +495 -46
- package/dist/conflicts.js.map +1 -1
- package/dist/data.d.ts +338 -18
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +385 -34
- package/dist/data.js.map +1 -1
- package/dist/database.d.ts +72 -14
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +120 -29
- package/dist/database.js.map +1 -1
- package/dist/debug.d.ts +77 -1
- package/dist/debug.d.ts.map +1 -1
- package/dist/debug.js +88 -1
- package/dist/debug.js.map +1 -1
- package/dist/deviceId.d.ts +38 -7
- package/dist/deviceId.d.ts.map +1 -1
- package/dist/deviceId.js +68 -10
- package/dist/deviceId.js.map +1 -1
- package/dist/engine.d.ts +175 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +831 -110
- package/dist/engine.js.map +1 -1
- package/dist/entries/actions.d.ts +14 -0
- package/dist/entries/actions.d.ts.map +1 -1
- package/dist/entries/actions.js +27 -1
- package/dist/entries/actions.js.map +1 -1
- package/dist/entries/auth.d.ts +16 -0
- package/dist/entries/auth.d.ts.map +1 -1
- package/dist/entries/auth.js +73 -1
- package/dist/entries/auth.js.map +1 -1
- package/dist/entries/config.d.ts +12 -0
- package/dist/entries/config.d.ts.map +1 -1
- package/dist/entries/config.js +18 -1
- package/dist/entries/config.js.map +1 -1
- package/dist/entries/kit.d.ts +21 -9
- package/dist/entries/kit.d.ts.map +1 -1
- package/dist/entries/kit.js +57 -8
- package/dist/entries/kit.js.map +1 -1
- package/dist/entries/stores.d.ts +11 -0
- package/dist/entries/stores.d.ts.map +1 -1
- package/dist/entries/stores.js +43 -2
- package/dist/entries/stores.js.map +1 -1
- package/dist/entries/types.d.ts +11 -1
- package/dist/entries/types.d.ts.map +1 -1
- package/dist/entries/types.js +10 -0
- package/dist/entries/types.js.map +1 -1
- package/dist/entries/utils.d.ts +7 -1
- package/dist/entries/utils.d.ts.map +1 -1
- package/dist/entries/utils.js +23 -2
- package/dist/entries/utils.js.map +1 -1
- package/dist/entries/vite.d.ts +20 -0
- package/dist/entries/vite.d.ts.map +1 -0
- package/dist/entries/vite.js +26 -0
- package/dist/entries/vite.js.map +1 -0
- package/dist/index.d.ts +33 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +176 -21
- package/dist/index.js.map +1 -1
- package/dist/kit/auth.d.ts +80 -0
- package/dist/kit/auth.d.ts.map +1 -0
- package/dist/kit/auth.js +72 -0
- package/dist/kit/auth.js.map +1 -0
- package/dist/kit/confirm.d.ts +111 -0
- package/dist/kit/confirm.d.ts.map +1 -0
- package/dist/kit/confirm.js +169 -0
- package/dist/kit/confirm.js.map +1 -0
- package/dist/kit/loads.d.ts +189 -0
- package/dist/kit/loads.d.ts.map +1 -0
- package/dist/kit/loads.js +205 -0
- package/dist/kit/loads.js.map +1 -0
- package/dist/kit/server.d.ts +175 -0
- package/dist/kit/server.d.ts.map +1 -0
- package/dist/kit/server.js +297 -0
- package/dist/kit/server.js.map +1 -0
- package/dist/kit/sw.d.ts +176 -0
- package/dist/kit/sw.d.ts.map +1 -0
- package/dist/kit/sw.js +320 -0
- package/dist/kit/sw.js.map +1 -0
- package/dist/queue.d.ts +274 -0
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +556 -38
- package/dist/queue.js.map +1 -1
- package/dist/realtime.d.ts +241 -27
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +633 -109
- package/dist/realtime.js.map +1 -1
- package/dist/runtime/runtimeConfig.d.ts +91 -16
- package/dist/runtime/runtimeConfig.d.ts.map +1 -1
- package/dist/runtime/runtimeConfig.js +146 -19
- package/dist/runtime/runtimeConfig.js.map +1 -1
- package/dist/stores/authState.d.ts +150 -11
- package/dist/stores/authState.d.ts.map +1 -1
- package/dist/stores/authState.js +169 -17
- package/dist/stores/authState.js.map +1 -1
- package/dist/stores/network.d.ts +39 -0
- package/dist/stores/network.d.ts.map +1 -1
- package/dist/stores/network.js +169 -16
- package/dist/stores/network.js.map +1 -1
- package/dist/stores/remoteChanges.d.ts +327 -52
- package/dist/stores/remoteChanges.d.ts.map +1 -1
- package/dist/stores/remoteChanges.js +337 -75
- package/dist/stores/remoteChanges.js.map +1 -1
- package/dist/stores/sync.d.ts +130 -0
- package/dist/stores/sync.d.ts.map +1 -1
- package/dist/stores/sync.js +167 -7
- package/dist/stores/sync.js.map +1 -1
- package/dist/supabase/auth.d.ts +326 -19
- package/dist/supabase/auth.d.ts.map +1 -1
- package/dist/supabase/auth.js +374 -26
- package/dist/supabase/auth.js.map +1 -1
- package/dist/supabase/client.d.ts +79 -6
- package/dist/supabase/client.d.ts.map +1 -1
- package/dist/supabase/client.js +158 -15
- package/dist/supabase/client.js.map +1 -1
- package/dist/supabase/validate.d.ts +101 -7
- package/dist/supabase/validate.d.ts.map +1 -1
- package/dist/supabase/validate.js +117 -8
- package/dist/supabase/validate.js.map +1 -1
- package/dist/sw/build/vite-plugin.d.ts +74 -0
- package/dist/sw/build/vite-plugin.d.ts.map +1 -0
- package/dist/sw/build/vite-plugin.js +183 -0
- package/dist/sw/build/vite-plugin.js.map +1 -0
- package/dist/sw/sw.js +669 -0
- package/dist/types.d.ts +150 -45
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -10
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +55 -13
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +83 -22
- package/dist/utils.js.map +1 -1
- package/package.json +20 -22
- package/src/components/DeferredChangesBanner.svelte +477 -0
- package/src/components/SyncStatus.svelte +1732 -0
- package/dist/crdt/awareness.d.ts +0 -54
- package/dist/crdt/awareness.d.ts.map +0 -1
- package/dist/crdt/awareness.js +0 -219
- package/dist/crdt/awareness.js.map +0 -1
- package/dist/crdt/doc.d.ts +0 -56
- package/dist/crdt/doc.d.ts.map +0 -1
- package/dist/crdt/doc.js +0 -130
- package/dist/crdt/doc.js.map +0 -1
- package/dist/crdt/index.d.ts +0 -15
- package/dist/crdt/index.d.ts.map +0 -1
- package/dist/crdt/index.js +0 -20
- package/dist/crdt/index.js.map +0 -1
- package/dist/crdt/offline.d.ts +0 -91
- package/dist/crdt/offline.d.ts.map +0 -1
- package/dist/crdt/offline.js +0 -353
- package/dist/crdt/offline.js.map +0 -1
- package/dist/crdt/sync.d.ts +0 -58
- package/dist/crdt/sync.d.ts.map +0 -1
- package/dist/crdt/sync.js +0 -399
- package/dist/crdt/sync.js.map +0 -1
- package/dist/crdt/types.d.ts +0 -62
- package/dist/crdt/types.d.ts.map +0 -1
- package/dist/crdt/types.js +0 -7
- package/dist/crdt/types.js.map +0 -1
- package/dist/email/sendEmail.d.ts +0 -31
- package/dist/email/sendEmail.d.ts.map +0 -1
- package/dist/email/sendEmail.js +0 -39
- package/dist/email/sendEmail.js.map +0 -1
- package/dist/email/validateSmtp.d.ts +0 -18
- package/dist/email/validateSmtp.d.ts.map +0 -1
- package/dist/email/validateSmtp.js +0 -33
- package/dist/email/validateSmtp.js.map +0 -1
- package/dist/entries/crdt.d.ts +0 -3
- package/dist/entries/crdt.d.ts.map +0 -1
- package/dist/entries/crdt.js +0 -13
- package/dist/entries/crdt.js.map +0 -1
- package/dist/entries/email.d.ts +0 -4
- package/dist/entries/email.d.ts.map +0 -1
- package/dist/entries/email.js +0 -4
- package/dist/entries/email.js.map +0 -1
- package/dist/kit/authPresets.d.ts +0 -28
- package/dist/kit/authPresets.d.ts.map +0 -1
- package/dist/kit/authPresets.js +0 -23
- package/dist/kit/authPresets.js.map +0 -1
- package/dist/kit/configEndpoint.d.ts +0 -18
- package/dist/kit/configEndpoint.d.ts.map +0 -1
- package/dist/kit/configEndpoint.js +0 -27
- package/dist/kit/configEndpoint.js.map +0 -1
- package/dist/kit/deployEndpoint.d.ts +0 -22
- package/dist/kit/deployEndpoint.d.ts.map +0 -1
- package/dist/kit/deployEndpoint.js +0 -79
- package/dist/kit/deployEndpoint.js.map +0 -1
- package/dist/kit/layoutLoad.d.ts +0 -23
- package/dist/kit/layoutLoad.d.ts.map +0 -1
- package/dist/kit/layoutLoad.js +0 -41
- package/dist/kit/layoutLoad.js.map +0 -1
- package/dist/kit/protectedLoad.d.ts +0 -16
- package/dist/kit/protectedLoad.d.ts.map +0 -1
- package/dist/kit/protectedLoad.js +0 -28
- package/dist/kit/protectedLoad.js.map +0 -1
- package/dist/kit/setupLoad.d.ts +0 -11
- package/dist/kit/setupLoad.d.ts.map +0 -1
- package/dist/kit/setupLoad.js +0 -28
- package/dist/kit/setupLoad.js.map +0 -1
- package/dist/kit/validateEndpoint.d.ts +0 -9
- package/dist/kit/validateEndpoint.d.ts.map +0 -1
- package/dist/kit/validateEndpoint.js +0 -25
- package/dist/kit/validateEndpoint.js.map +0 -1
- package/dist/kit/vercelApi.d.ts +0 -6
- package/dist/kit/vercelApi.d.ts.map +0 -1
- package/dist/kit/vercelApi.js +0 -48
- package/dist/kit/vercelApi.js.map +0 -1
package/dist/stores/sync.d.ts
CHANGED
|
@@ -1,34 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Sync Status Store
|
|
3
|
+
*
|
|
4
|
+
* Tracks the overall synchronization state between the local database and the
|
|
5
|
+
* remote Supabase backend. Provides a unified view of sync progress, errors,
|
|
6
|
+
* realtime connection health, and tab visibility for UI status indicators.
|
|
7
|
+
*
|
|
8
|
+
* **Svelte Store Pattern:**
|
|
9
|
+
* Uses a custom writable store created via `createSyncStatusStore()`. The store
|
|
10
|
+
* exposes the standard `subscribe` method for reactive UI binding, plus focused
|
|
11
|
+
* setter methods for each aspect of the sync state. Closure variables
|
|
12
|
+
* (`currentStatus`, `syncingStartTime`, `pendingStatusChange`) maintain
|
|
13
|
+
* timing state outside the store to implement the anti-flicker logic.
|
|
14
|
+
*
|
|
15
|
+
* **Reactive Architecture:**
|
|
16
|
+
* The sync engine calls `setStatus()` to transition through sync lifecycle phases
|
|
17
|
+
* (idle -> syncing -> idle/error). UI components subscribe to the store to display
|
|
18
|
+
* sync indicators, error banners, and connection badges. The store enforces a
|
|
19
|
+
* minimum display time for the 'syncing' state to prevent visual flickering on
|
|
20
|
+
* fast sync operations.
|
|
21
|
+
*
|
|
22
|
+
* @see {@link ../types} for the SyncStatus type definition
|
|
23
|
+
* @see {@link ./network} for the network connectivity store that gates sync
|
|
24
|
+
* @see {@link ./remoteChanges} for remote change tracking during sync
|
|
25
|
+
*/
|
|
1
26
|
import type { SyncStatus } from '../types';
|
|
27
|
+
/**
|
|
28
|
+
* Detailed sync error record for debugging and error history display.
|
|
29
|
+
* Stored in the `syncErrors` array (capped at `MAX_ERROR_HISTORY` entries).
|
|
30
|
+
*/
|
|
2
31
|
export interface SyncError {
|
|
32
|
+
/** Database table where the error occurred */
|
|
3
33
|
table: string;
|
|
34
|
+
/** The sync operation that failed (e.g., 'push', 'pull', 'upsert') */
|
|
4
35
|
operation: string;
|
|
36
|
+
/** Unique identifier of the entity involved in the failed operation */
|
|
5
37
|
entityId: string;
|
|
38
|
+
/** Human-readable error message */
|
|
6
39
|
message: string;
|
|
40
|
+
/** ISO 8601 timestamp of when the error occurred */
|
|
7
41
|
timestamp: string;
|
|
8
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Supabase Realtime channel connection state.
|
|
45
|
+
* Tracks the lifecycle of the realtime subscription independently of sync status.
|
|
46
|
+
*/
|
|
9
47
|
export type RealtimeState = 'disconnected' | 'connecting' | 'connected' | 'error';
|
|
48
|
+
/**
|
|
49
|
+
* Complete internal state shape for the sync status store.
|
|
50
|
+
*/
|
|
10
51
|
interface SyncState {
|
|
52
|
+
/** Current high-level sync lifecycle phase */
|
|
11
53
|
status: SyncStatus;
|
|
54
|
+
/** Number of local changes waiting to be pushed to the remote */
|
|
12
55
|
pendingCount: number;
|
|
56
|
+
/** User-friendly error message for display in UI banners */
|
|
13
57
|
lastError: string | null;
|
|
58
|
+
/** Raw technical error string for debugging (e.g., Supabase error codes) */
|
|
14
59
|
lastErrorDetails: string | null;
|
|
60
|
+
/** Rolling history of detailed sync errors (capped at MAX_ERROR_HISTORY) */
|
|
15
61
|
syncErrors: SyncError[];
|
|
62
|
+
/** ISO 8601 timestamp of the last successful sync completion */
|
|
16
63
|
lastSyncTime: string | null;
|
|
64
|
+
/** Human-readable status message (e.g., "Syncing 3 changes...") */
|
|
17
65
|
syncMessage: string | null;
|
|
66
|
+
/**
|
|
67
|
+
* Whether the browser tab is currently visible.
|
|
68
|
+
* Used to throttle or pause sync operations when the app is backgrounded.
|
|
69
|
+
*/
|
|
18
70
|
isTabVisible: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Current state of the Supabase Realtime channel connection.
|
|
73
|
+
* Tracked separately from `status` since realtime can disconnect
|
|
74
|
+
* independently of the push/pull sync cycle.
|
|
75
|
+
*/
|
|
19
76
|
realtimeState: RealtimeState;
|
|
20
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Singleton sync status store used throughout the application.
|
|
80
|
+
*
|
|
81
|
+
* @see {@link createSyncStatusStore} for implementation details
|
|
82
|
+
*/
|
|
21
83
|
export declare const syncStatusStore: {
|
|
22
84
|
subscribe: (this: void, run: import("svelte/store").Subscriber<SyncState>, invalidate?: () => void) => import("svelte/store").Unsubscriber;
|
|
85
|
+
/**
|
|
86
|
+
* Set the high-level sync status with anti-flicker protection.
|
|
87
|
+
*
|
|
88
|
+
* Transition rules:
|
|
89
|
+
* - Redundant updates (same status) are ignored to prevent unnecessary re-renders,
|
|
90
|
+
* except for 'syncing' which always resets the timer.
|
|
91
|
+
* - Entering 'syncing' clears previous errors and records the start time.
|
|
92
|
+
* - Leaving 'syncing' enforces `MIN_SYNCING_TIME` ms minimum display duration.
|
|
93
|
+
* - Transitioning to 'idle' clears the `lastError` field.
|
|
94
|
+
*
|
|
95
|
+
* @param status - The new sync status to set
|
|
96
|
+
*
|
|
97
|
+
* @see {@link MIN_SYNCING_TIME} for the anti-flicker threshold
|
|
98
|
+
*/
|
|
23
99
|
setStatus: (status: SyncStatus) => void;
|
|
100
|
+
/**
|
|
101
|
+
* Update the count of local changes pending remote push.
|
|
102
|
+
*
|
|
103
|
+
* @param count - Number of pending changes
|
|
104
|
+
*/
|
|
24
105
|
setPendingCount: (count: number) => void;
|
|
106
|
+
/**
|
|
107
|
+
* Set or clear the error messages (both user-friendly and raw/technical).
|
|
108
|
+
*
|
|
109
|
+
* @param friendly - Human-readable error message for UI display, or null to clear
|
|
110
|
+
* @param raw - Optional raw technical error string for debugging
|
|
111
|
+
*/
|
|
25
112
|
setError: (friendly: string | null, raw?: string | null) => void;
|
|
113
|
+
/**
|
|
114
|
+
* Append a detailed sync error to the rolling error history.
|
|
115
|
+
* The history is capped at `MAX_ERROR_HISTORY` entries (oldest discarded first).
|
|
116
|
+
*
|
|
117
|
+
* @param error - The detailed sync error record to add
|
|
118
|
+
*
|
|
119
|
+
* @see {@link SyncError} for the error record structure
|
|
120
|
+
* @see {@link MAX_ERROR_HISTORY} for the history size limit
|
|
121
|
+
*/
|
|
26
122
|
addSyncError: (error: SyncError) => void;
|
|
123
|
+
/**
|
|
124
|
+
* Clear all entries from the sync error history.
|
|
125
|
+
* Typically called when a new sync cycle begins successfully.
|
|
126
|
+
*/
|
|
27
127
|
clearSyncErrors: () => void;
|
|
128
|
+
/**
|
|
129
|
+
* Record the timestamp of the last successful sync completion.
|
|
130
|
+
*
|
|
131
|
+
* @param time - ISO 8601 formatted timestamp string
|
|
132
|
+
*/
|
|
28
133
|
setLastSyncTime: (time: string) => void;
|
|
134
|
+
/**
|
|
135
|
+
* Set or clear the human-readable sync progress message.
|
|
136
|
+
*
|
|
137
|
+
* @param message - Status text (e.g., "Pushing 3 changes...") or null to clear
|
|
138
|
+
*/
|
|
29
139
|
setSyncMessage: (message: string | null) => void;
|
|
140
|
+
/**
|
|
141
|
+
* Update the tab visibility flag.
|
|
142
|
+
* Used by the sync engine to pause or throttle operations when backgrounded.
|
|
143
|
+
*
|
|
144
|
+
* @param visible - Whether the browser tab is currently visible
|
|
145
|
+
*/
|
|
30
146
|
setTabVisible: (visible: boolean) => void;
|
|
147
|
+
/**
|
|
148
|
+
* Update the Supabase Realtime channel connection state.
|
|
149
|
+
*
|
|
150
|
+
* @param realtimeState - The current realtime connection state
|
|
151
|
+
*
|
|
152
|
+
* @see {@link RealtimeState} for possible values
|
|
153
|
+
*/
|
|
31
154
|
setRealtimeState: (realtimeState: RealtimeState) => void;
|
|
155
|
+
/**
|
|
156
|
+
* Reset the entire store to its initial default state.
|
|
157
|
+
*
|
|
158
|
+
* Cleans up any pending delayed status transitions and resets all closure
|
|
159
|
+
* variables. Called during logout or app teardown to prevent stale state
|
|
160
|
+
* from carrying over.
|
|
161
|
+
*/
|
|
32
162
|
reset: () => void;
|
|
33
163
|
};
|
|
34
164
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/stores/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/stores/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM3C;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IAEd,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAElB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAElF;;GAEG;AACH,UAAU,SAAS;IACjB,8CAA8C;IAC9C,MAAM,EAAE,UAAU,CAAC;IAEnB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IAErB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,4EAA4E;IAC5E,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,aAAa,EAAE,aAAa,CAAC;CAC9B;AA+QD;;;;GAIG;AACH,eAAO,MAAM,eAAe;;IA3LxB;;;;;;;;;;;;;OAaG;wBACiB,UAAU;IA4D9B;;;;OAIG;6BACsB,MAAM;IAE/B;;;;;OAKG;yBACkB,MAAM,GAAG,IAAI,QAAQ,MAAM,GAAG,IAAI;IAOvD;;;;;;;;OAQG;0BACmB,SAAS;IAM/B;;;OAGG;;IAGH;;;;OAIG;4BACqB,MAAM;IAE9B;;;;OAIG;8BACuB,MAAM,GAAG,IAAI;IAGvC;;;;;OAKG;6BACsB,OAAO;IAEhC;;;;;;OAMG;sCAC+B,aAAa;IAG/C;;;;;;OAMG;;CAiC+C,CAAC"}
|
package/dist/stores/sync.js
CHANGED
|
@@ -1,8 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Sync Status Store
|
|
3
|
+
*
|
|
4
|
+
* Tracks the overall synchronization state between the local database and the
|
|
5
|
+
* remote Supabase backend. Provides a unified view of sync progress, errors,
|
|
6
|
+
* realtime connection health, and tab visibility for UI status indicators.
|
|
7
|
+
*
|
|
8
|
+
* **Svelte Store Pattern:**
|
|
9
|
+
* Uses a custom writable store created via `createSyncStatusStore()`. The store
|
|
10
|
+
* exposes the standard `subscribe` method for reactive UI binding, plus focused
|
|
11
|
+
* setter methods for each aspect of the sync state. Closure variables
|
|
12
|
+
* (`currentStatus`, `syncingStartTime`, `pendingStatusChange`) maintain
|
|
13
|
+
* timing state outside the store to implement the anti-flicker logic.
|
|
14
|
+
*
|
|
15
|
+
* **Reactive Architecture:**
|
|
16
|
+
* The sync engine calls `setStatus()` to transition through sync lifecycle phases
|
|
17
|
+
* (idle -> syncing -> idle/error). UI components subscribe to the store to display
|
|
18
|
+
* sync indicators, error banners, and connection badges. The store enforces a
|
|
19
|
+
* minimum display time for the 'syncing' state to prevent visual flickering on
|
|
20
|
+
* fast sync operations.
|
|
21
|
+
*
|
|
22
|
+
* @see {@link ../types} for the SyncStatus type definition
|
|
23
|
+
* @see {@link ./network} for the network connectivity store that gates sync
|
|
24
|
+
* @see {@link ./remoteChanges} for remote change tracking during sync
|
|
25
|
+
*/
|
|
1
26
|
import { writable } from 'svelte/store';
|
|
2
|
-
//
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Constants
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Minimum time (ms) to display the 'syncing' status in the UI.
|
|
32
|
+
* Prevents visual flickering when sync completes faster than the user can
|
|
33
|
+
* perceive the status change.
|
|
34
|
+
*/
|
|
3
35
|
const MIN_SYNCING_TIME = 500;
|
|
4
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Maximum number of detailed error entries to retain in the `syncErrors` array.
|
|
38
|
+
* Older entries are discarded (FIFO) when this limit is reached.
|
|
39
|
+
*/
|
|
5
40
|
const MAX_ERROR_HISTORY = 10;
|
|
41
|
+
// =============================================================================
|
|
42
|
+
// Store Factory
|
|
43
|
+
// =============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Creates the singleton sync status store.
|
|
46
|
+
*
|
|
47
|
+
* The store implements anti-flicker logic for the 'syncing' status: when
|
|
48
|
+
* transitioning away from 'syncing', it ensures the syncing indicator was
|
|
49
|
+
* displayed for at least `MIN_SYNCING_TIME` ms. If the sync completed faster,
|
|
50
|
+
* the status transition is delayed to meet the minimum display time.
|
|
51
|
+
*
|
|
52
|
+
* Closure variables outside the store maintain timing state:
|
|
53
|
+
* - `currentStatus` - Tracks the last-set status for redundancy filtering
|
|
54
|
+
* - `syncingStartTime` - Records when 'syncing' status was entered
|
|
55
|
+
* - `pendingStatusChange` - Holds a delayed status transition (with its timeout handle)
|
|
56
|
+
*
|
|
57
|
+
* @returns A Svelte-compatible store with sync-specific setter methods
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```ts
|
|
61
|
+
* // Sync engine usage:
|
|
62
|
+
* syncStatusStore.setStatus('syncing');
|
|
63
|
+
* syncStatusStore.setSyncMessage('Pushing 5 changes...');
|
|
64
|
+
* await pushChanges();
|
|
65
|
+
* syncStatusStore.setStatus('idle');
|
|
66
|
+
*
|
|
67
|
+
* // Component usage:
|
|
68
|
+
* $: showSpinner = $syncStatusStore.status === 'syncing';
|
|
69
|
+
* $: showError = $syncStatusStore.lastError !== null;
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
6
72
|
function createSyncStatusStore() {
|
|
7
73
|
const { subscribe, set, update } = writable({
|
|
8
74
|
status: 'idle',
|
|
@@ -15,33 +81,62 @@ function createSyncStatusStore() {
|
|
|
15
81
|
isTabVisible: true,
|
|
16
82
|
realtimeState: 'disconnected'
|
|
17
83
|
});
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Anti-Flicker Timing State
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
/** The last status value that was actually applied to the store */
|
|
18
88
|
let currentStatus = 'idle';
|
|
89
|
+
/** Timestamp when 'syncing' status was entered; null when not syncing */
|
|
19
90
|
let syncingStartTime = null;
|
|
91
|
+
/**
|
|
92
|
+
* Holds a pending delayed status transition.
|
|
93
|
+
* When sync completes before `MIN_SYNCING_TIME`, the final status change
|
|
94
|
+
* is scheduled via setTimeout to prevent UI flickering.
|
|
95
|
+
*/
|
|
20
96
|
let pendingStatusChange = null;
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Store Methods
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
21
100
|
return {
|
|
22
101
|
subscribe,
|
|
102
|
+
/**
|
|
103
|
+
* Set the high-level sync status with anti-flicker protection.
|
|
104
|
+
*
|
|
105
|
+
* Transition rules:
|
|
106
|
+
* - Redundant updates (same status) are ignored to prevent unnecessary re-renders,
|
|
107
|
+
* except for 'syncing' which always resets the timer.
|
|
108
|
+
* - Entering 'syncing' clears previous errors and records the start time.
|
|
109
|
+
* - Leaving 'syncing' enforces `MIN_SYNCING_TIME` ms minimum display duration.
|
|
110
|
+
* - Transitioning to 'idle' clears the `lastError` field.
|
|
111
|
+
*
|
|
112
|
+
* @param status - The new sync status to set
|
|
113
|
+
*
|
|
114
|
+
* @see {@link MIN_SYNCING_TIME} for the anti-flicker threshold
|
|
115
|
+
*/
|
|
23
116
|
setStatus: (status) => {
|
|
24
|
-
|
|
117
|
+
/* Ignore redundant status updates to prevent unnecessary re-renders.
|
|
118
|
+
* Exception: 'syncing' is always processed to reset the timer. */
|
|
25
119
|
if (status === currentStatus && status !== 'syncing') {
|
|
26
120
|
return;
|
|
27
121
|
}
|
|
28
|
-
|
|
122
|
+
/* Clear any pending delayed status change from a previous transition */
|
|
29
123
|
if (pendingStatusChange) {
|
|
30
124
|
clearTimeout(pendingStatusChange.timeout);
|
|
31
125
|
pendingStatusChange = null;
|
|
32
126
|
}
|
|
33
127
|
if (status === 'syncing') {
|
|
34
|
-
|
|
128
|
+
/* Starting sync - record the time and clear previous errors */
|
|
35
129
|
syncingStartTime = Date.now();
|
|
36
130
|
currentStatus = status;
|
|
37
131
|
update((state) => ({ ...state, status, lastError: null, syncErrors: [] }));
|
|
38
132
|
}
|
|
39
133
|
else if (syncingStartTime !== null) {
|
|
40
|
-
|
|
134
|
+
/* Ending sync - enforce minimum display time to prevent flickering */
|
|
41
135
|
const elapsed = Date.now() - syncingStartTime;
|
|
42
136
|
const remaining = MIN_SYNCING_TIME - elapsed;
|
|
43
137
|
if (remaining > 0) {
|
|
44
|
-
|
|
138
|
+
/* Sync completed too fast - delay the status change so the user
|
|
139
|
+
* can see the syncing indicator for at least MIN_SYNCING_TIME */
|
|
45
140
|
pendingStatusChange = {
|
|
46
141
|
status,
|
|
47
142
|
timeout: setTimeout(() => {
|
|
@@ -57,6 +152,7 @@ function createSyncStatusStore() {
|
|
|
57
152
|
};
|
|
58
153
|
}
|
|
59
154
|
else {
|
|
155
|
+
/* Sync took long enough - apply the status change immediately */
|
|
60
156
|
syncingStartTime = null;
|
|
61
157
|
currentStatus = status;
|
|
62
158
|
update((state) => ({
|
|
@@ -67,6 +163,7 @@ function createSyncStatusStore() {
|
|
|
67
163
|
}
|
|
68
164
|
}
|
|
69
165
|
else {
|
|
166
|
+
/* Direct status change (not coming from 'syncing') */
|
|
70
167
|
currentStatus = status;
|
|
71
168
|
update((state) => ({
|
|
72
169
|
...state,
|
|
@@ -75,22 +172,77 @@ function createSyncStatusStore() {
|
|
|
75
172
|
}));
|
|
76
173
|
}
|
|
77
174
|
},
|
|
175
|
+
/**
|
|
176
|
+
* Update the count of local changes pending remote push.
|
|
177
|
+
*
|
|
178
|
+
* @param count - Number of pending changes
|
|
179
|
+
*/
|
|
78
180
|
setPendingCount: (count) => update((state) => ({ ...state, pendingCount: count })),
|
|
181
|
+
/**
|
|
182
|
+
* Set or clear the error messages (both user-friendly and raw/technical).
|
|
183
|
+
*
|
|
184
|
+
* @param friendly - Human-readable error message for UI display, or null to clear
|
|
185
|
+
* @param raw - Optional raw technical error string for debugging
|
|
186
|
+
*/
|
|
79
187
|
setError: (friendly, raw) => update((state) => ({
|
|
80
188
|
...state,
|
|
81
189
|
lastError: friendly,
|
|
82
190
|
lastErrorDetails: raw ?? null
|
|
83
191
|
})),
|
|
192
|
+
/**
|
|
193
|
+
* Append a detailed sync error to the rolling error history.
|
|
194
|
+
* The history is capped at `MAX_ERROR_HISTORY` entries (oldest discarded first).
|
|
195
|
+
*
|
|
196
|
+
* @param error - The detailed sync error record to add
|
|
197
|
+
*
|
|
198
|
+
* @see {@link SyncError} for the error record structure
|
|
199
|
+
* @see {@link MAX_ERROR_HISTORY} for the history size limit
|
|
200
|
+
*/
|
|
84
201
|
addSyncError: (error) => update((state) => ({
|
|
85
202
|
...state,
|
|
86
203
|
syncErrors: [...state.syncErrors, error].slice(-MAX_ERROR_HISTORY)
|
|
87
204
|
})),
|
|
205
|
+
/**
|
|
206
|
+
* Clear all entries from the sync error history.
|
|
207
|
+
* Typically called when a new sync cycle begins successfully.
|
|
208
|
+
*/
|
|
88
209
|
clearSyncErrors: () => update((state) => ({ ...state, syncErrors: [] })),
|
|
210
|
+
/**
|
|
211
|
+
* Record the timestamp of the last successful sync completion.
|
|
212
|
+
*
|
|
213
|
+
* @param time - ISO 8601 formatted timestamp string
|
|
214
|
+
*/
|
|
89
215
|
setLastSyncTime: (time) => update((state) => ({ ...state, lastSyncTime: time })),
|
|
216
|
+
/**
|
|
217
|
+
* Set or clear the human-readable sync progress message.
|
|
218
|
+
*
|
|
219
|
+
* @param message - Status text (e.g., "Pushing 3 changes...") or null to clear
|
|
220
|
+
*/
|
|
90
221
|
setSyncMessage: (message) => update((state) => ({ ...state, syncMessage: message })),
|
|
222
|
+
/**
|
|
223
|
+
* Update the tab visibility flag.
|
|
224
|
+
* Used by the sync engine to pause or throttle operations when backgrounded.
|
|
225
|
+
*
|
|
226
|
+
* @param visible - Whether the browser tab is currently visible
|
|
227
|
+
*/
|
|
91
228
|
setTabVisible: (visible) => update((state) => ({ ...state, isTabVisible: visible })),
|
|
229
|
+
/**
|
|
230
|
+
* Update the Supabase Realtime channel connection state.
|
|
231
|
+
*
|
|
232
|
+
* @param realtimeState - The current realtime connection state
|
|
233
|
+
*
|
|
234
|
+
* @see {@link RealtimeState} for possible values
|
|
235
|
+
*/
|
|
92
236
|
setRealtimeState: (realtimeState) => update((state) => ({ ...state, realtimeState })),
|
|
237
|
+
/**
|
|
238
|
+
* Reset the entire store to its initial default state.
|
|
239
|
+
*
|
|
240
|
+
* Cleans up any pending delayed status transitions and resets all closure
|
|
241
|
+
* variables. Called during logout or app teardown to prevent stale state
|
|
242
|
+
* from carrying over.
|
|
243
|
+
*/
|
|
93
244
|
reset: () => {
|
|
245
|
+
/* Clean up pending anti-flicker timeout to avoid orphaned callbacks */
|
|
94
246
|
if (pendingStatusChange) {
|
|
95
247
|
clearTimeout(pendingStatusChange.timeout);
|
|
96
248
|
pendingStatusChange = null;
|
|
@@ -111,5 +263,13 @@ function createSyncStatusStore() {
|
|
|
111
263
|
}
|
|
112
264
|
};
|
|
113
265
|
}
|
|
266
|
+
// =============================================================================
|
|
267
|
+
// Singleton Store Instance
|
|
268
|
+
// =============================================================================
|
|
269
|
+
/**
|
|
270
|
+
* Singleton sync status store used throughout the application.
|
|
271
|
+
*
|
|
272
|
+
* @see {@link createSyncStatusStore} for implementation details
|
|
273
|
+
*/
|
|
114
274
|
export const syncStatusStore = createSyncStatusStore();
|
|
115
275
|
//# sourceMappingURL=sync.js.map
|
package/dist/stores/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/stores/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/stores/sync.ts"],"names":[],"mappings":"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"}
|