@pol-studios/powersync 1.0.6 → 1.0.7
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/CacheSettingsManager-1exbOC6S.d.ts +261 -0
- package/dist/attachments/index.d.ts +65 -355
- package/dist/attachments/index.js +24 -6
- package/dist/{types-Cd7RhNqf.d.ts → background-sync-ChCXW-EV.d.ts} +53 -2
- package/dist/chunk-4C3RY5SU.js +204 -0
- package/dist/chunk-4C3RY5SU.js.map +1 -0
- package/dist/{chunk-3AYXHQ4W.js → chunk-53WH2JJV.js} +111 -47
- package/dist/chunk-53WH2JJV.js.map +1 -0
- package/dist/chunk-A4IBBWGO.js +377 -0
- package/dist/chunk-A4IBBWGO.js.map +1 -0
- package/dist/chunk-BREGB4WL.js +1768 -0
- package/dist/chunk-BREGB4WL.js.map +1 -0
- package/dist/{chunk-EJ23MXPQ.js → chunk-CGL33PL4.js} +3 -1
- package/dist/chunk-CGL33PL4.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/chunk-DHYUBVP7.js +131 -0
- package/dist/chunk-DHYUBVP7.js.map +1 -0
- package/dist/chunk-FV2HXEIY.js +124 -0
- package/dist/chunk-FV2HXEIY.js.map +1 -0
- package/dist/chunk-GKF7TOMT.js +1 -0
- package/dist/{chunk-R4YFWQ3Q.js → chunk-H772V6XQ.js} +304 -51
- package/dist/chunk-H772V6XQ.js.map +1 -0
- package/dist/{chunk-62J2DPKX.js → chunk-HFOFLW5F.js} +396 -412
- package/dist/chunk-HFOFLW5F.js.map +1 -0
- package/dist/chunk-KGSFAE5B.js +1 -0
- package/dist/chunk-LNL64IJZ.js +1 -0
- package/dist/chunk-MKD2VCX3.js +32 -0
- package/dist/chunk-MKD2VCX3.js.map +1 -0
- package/dist/{chunk-7EMDVIZX.js → chunk-N75DEF5J.js} +19 -1
- package/dist/chunk-N75DEF5J.js.map +1 -0
- package/dist/chunk-P6WOZO7H.js +49 -0
- package/dist/chunk-P6WOZO7H.js.map +1 -0
- package/dist/chunk-TGBT5XBE.js +1 -0
- package/dist/chunk-TGBT5XBE.js.map +1 -0
- package/dist/chunk-UEYRTLKE.js +72 -0
- package/dist/chunk-UEYRTLKE.js.map +1 -0
- package/dist/chunk-WGHNIAF7.js +329 -0
- package/dist/chunk-WGHNIAF7.js.map +1 -0
- package/dist/chunk-WQ5MPAVC.js +449 -0
- package/dist/chunk-WQ5MPAVC.js.map +1 -0
- package/dist/{chunk-FPTDATY5.js → chunk-XQAJM2MW.js} +22 -11
- package/dist/chunk-XQAJM2MW.js.map +1 -0
- package/dist/chunk-YSTEESEG.js +676 -0
- package/dist/chunk-YSTEESEG.js.map +1 -0
- package/dist/chunk-ZEOKPWUC.js +1165 -0
- package/dist/chunk-ZEOKPWUC.js.map +1 -0
- package/dist/connector/index.d.ts +182 -3
- package/dist/connector/index.js +12 -4
- package/dist/core/index.d.ts +5 -3
- package/dist/core/index.js +5 -2
- package/dist/error/index.d.ts +54 -0
- package/dist/error/index.js +8 -0
- package/dist/error/index.js.map +1 -0
- package/dist/index.d.ts +100 -12
- package/dist/index.js +148 -38
- package/dist/index.native.d.ts +20 -10
- package/dist/index.native.js +148 -39
- package/dist/index.web.d.ts +20 -10
- package/dist/index.web.js +149 -39
- package/dist/maintenance/index.d.ts +118 -0
- package/dist/maintenance/index.js +17 -0
- package/dist/maintenance/index.js.map +1 -0
- package/dist/platform/index.d.ts +16 -1
- package/dist/platform/index.js +2 -0
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/index.native.d.ts +2 -2
- package/dist/platform/index.native.js +2 -1
- package/dist/platform/index.web.d.ts +1 -1
- package/dist/platform/index.web.js +2 -1
- package/dist/pol-attachment-queue-C7YNXXhK.d.ts +676 -0
- package/dist/provider/index.d.ts +447 -21
- package/dist/provider/index.js +33 -13
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.js +28 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.native.d.ts +6 -0
- package/dist/storage/index.native.js +26 -0
- package/dist/storage/index.native.js.map +1 -0
- package/dist/storage/index.web.d.ts +6 -0
- package/dist/storage/index.web.js +26 -0
- package/dist/storage/index.web.js.map +1 -0
- package/dist/storage/upload/index.d.ts +55 -0
- package/dist/storage/upload/index.js +15 -0
- package/dist/storage/upload/index.js.map +1 -0
- package/dist/storage/upload/index.native.d.ts +57 -0
- package/dist/storage/upload/index.native.js +14 -0
- package/dist/storage/upload/index.native.js.map +1 -0
- package/dist/storage/upload/index.web.d.ts +5 -0
- package/dist/storage/upload/index.web.js +14 -0
- package/dist/storage/upload/index.web.js.map +1 -0
- package/dist/{index-l3iL9Jte.d.ts → supabase-connector-qLm-WHkM.d.ts} +90 -25
- package/dist/sync/index.d.ts +288 -23
- package/dist/sync/index.js +22 -10
- package/dist/types-BVacP54t.d.ts +52 -0
- package/dist/types-Bgvx7-E8.d.ts +187 -0
- package/dist/{types-afHtE1U_.d.ts → types-CDqWh56B.d.ts} +2 -0
- package/package.json +72 -2
- package/dist/chunk-32OLICZO.js +0 -1
- package/dist/chunk-3AYXHQ4W.js.map +0 -1
- package/dist/chunk-5FIMA26D.js +0 -1
- package/dist/chunk-62J2DPKX.js.map +0 -1
- package/dist/chunk-7EMDVIZX.js.map +0 -1
- package/dist/chunk-EJ23MXPQ.js.map +0 -1
- package/dist/chunk-FPTDATY5.js.map +0 -1
- package/dist/chunk-KCDG2MNP.js +0 -1431
- package/dist/chunk-KCDG2MNP.js.map +0 -1
- package/dist/chunk-OLHGI472.js +0 -1
- package/dist/chunk-PAFBKNL3.js +0 -99
- package/dist/chunk-PAFBKNL3.js.map +0 -1
- package/dist/chunk-R4YFWQ3Q.js.map +0 -1
- package/dist/chunk-V6LJ6MR2.js +0 -740
- package/dist/chunk-V6LJ6MR2.js.map +0 -1
- package/dist/chunk-VJCL2SWD.js +0 -1
- package/dist/failed-upload-store-C0cLxxPz.d.ts +0 -33
- /package/dist/{chunk-32OLICZO.js.map → chunk-DGUM43GV.js.map} +0 -0
- /package/dist/{chunk-5FIMA26D.js.map → chunk-GKF7TOMT.js.map} +0 -0
- /package/dist/{chunk-OLHGI472.js.map → chunk-KGSFAE5B.js.map} +0 -0
- /package/dist/{chunk-VJCL2SWD.js.map → chunk-LNL64IJZ.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider/context.ts","../src/provider/hooks.ts"],"sourcesContent":["/**\n * React Contexts for @pol-studios/powersync\n *\n * This module creates the React contexts used by the PowerSyncProvider.\n */\n\nimport { createContext } from 'react';\nimport type { PowerSyncContextValue, SyncStatusContextValue, ConnectionHealthContextValue, SyncMetricsContextValue, ConnectionStatusContextValue, SyncActivityContextValue, PendingMutationsContextValue, FailedTransactionsContextValue, CompletedTransactionsContextValue, SyncModeContextValue } from './types';\nimport type { PolAttachmentQueue } from '../attachments/pol-attachment-queue';\n\n// ─── Main PowerSync Context ──────────────────────────────────────────────────\n\n/**\n * Main context for PowerSync database instance and related state.\n *\n * Provides access to:\n * - PowerSync database instance\n * - SupabaseConnector instance\n * - AttachmentQueue instance (if configured)\n * - Initialization state\n *\n * @example\n * ```typescript\n * const { db, isReady, error } = useContext(PowerSyncContext);\n * ```\n */\nexport const PowerSyncContext = createContext<PowerSyncContextValue | null>(null);\nPowerSyncContext.displayName = 'PowerSyncContext';\n\n// ─── Sync Status Context ─────────────────────────────────────────────────────\n\n/**\n * Context for sync status updates.\n *\n * Provides access to:\n * - Current sync status (connected, syncing, etc.)\n * - Pending mutations count\n * - Paused state\n * - Last synced timestamp\n *\n * @example\n * ```typescript\n * const { status, pendingCount, isPaused } = useContext(SyncStatusContext);\n * ```\n */\nexport const SyncStatusContext = createContext<SyncStatusContextValue | null>(null);\nSyncStatusContext.displayName = 'SyncStatusContext';\n\n// ─── Split Contexts (Performance Optimization) ───────────────────────────────\n// These focused contexts allow components to subscribe to only the data they need.\n\n/**\n * Context for connection status only.\n * Subscribe to this instead of SyncStatusContext when you only need connection state.\n */\nexport const ConnectionStatusContext = createContext<ConnectionStatusContextValue | null>(null);\nConnectionStatusContext.displayName = 'ConnectionStatusContext';\n\n/**\n * Context for sync activity (uploading/downloading).\n * Subscribe to this instead of SyncStatusContext when you only need sync progress.\n */\nexport const SyncActivityContext = createContext<SyncActivityContextValue | null>(null);\nSyncActivityContext.displayName = 'SyncActivityContext';\n\n/**\n * Context for pending mutations.\n * Subscribe to this instead of SyncStatusContext when you only need pending upload info.\n */\nexport const PendingMutationsContext = createContext<PendingMutationsContextValue | null>(null);\nPendingMutationsContext.displayName = 'PendingMutationsContext';\n\n/**\n * Context for failed transactions.\n * Subscribe to this instead of SyncStatusContext when you only need error info.\n */\nexport const FailedTransactionsContext = createContext<FailedTransactionsContextValue | null>(null);\nFailedTransactionsContext.displayName = 'FailedTransactionsContext';\n\n/**\n * Context for completed transactions.\n * Subscribe to this instead of SyncStatusContext when you only need sync history.\n */\nexport const CompletedTransactionsContext = createContext<CompletedTransactionsContextValue | null>(null);\nCompletedTransactionsContext.displayName = 'CompletedTransactionsContext';\n\n/**\n * Context for sync mode control.\n * Subscribe to this instead of SyncStatusContext when you only need sync mode.\n */\nexport const SyncModeContext = createContext<SyncModeContextValue | null>(null);\nSyncModeContext.displayName = 'SyncModeContext';\n\n// ─── Connection Health Context ───────────────────────────────────────────────\n\n/**\n * Context for connection health monitoring.\n *\n * Provides access to:\n * - Health status (healthy, degraded, disconnected)\n * - Latency measurements\n * - Health check timestamps\n * - Failure counts\n *\n * @example\n * ```typescript\n * const { health } = useContext(ConnectionHealthContext);\n * if (health.status === 'degraded') {\n * showWarning('Connection is slow');\n * }\n * ```\n */\nexport const ConnectionHealthContext = createContext<ConnectionHealthContextValue | null>(null);\nConnectionHealthContext.displayName = 'ConnectionHealthContext';\n\n// ─── Sync Metrics Context ────────────────────────────────────────────────────\n\n/**\n * Context for sync metrics and statistics.\n *\n * Provides access to:\n * - Sync operation counts\n * - Sync durations\n * - Data transfer amounts\n * - Error tracking\n *\n * @example\n * ```typescript\n * const { metrics } = useContext(SyncMetricsContext);\n * console.log(`Total syncs: ${metrics.totalSyncs}`);\n * ```\n */\nexport const SyncMetricsContext = createContext<SyncMetricsContextValue | null>(null);\nSyncMetricsContext.displayName = 'SyncMetricsContext';\n\n// ─── Attachment Queue Context ────────────────────────────────────────────────\n\n/**\n * Context for the attachment queue (if configured).\n *\n * Provides direct access to the AttachmentQueue instance for:\n * - Checking attachment sync stats\n * - Pausing/resuming downloads\n * - Getting local URIs for attachments\n *\n * @example\n * ```typescript\n * const attachmentQueue = useContext(AttachmentQueueContext);\n * if (attachmentQueue) {\n * const stats = await attachmentQueue.getStats();\n * console.log(`Downloaded: ${stats.syncedCount}/${stats.totalExpected}`);\n * }\n * ```\n */\nexport const AttachmentQueueContext = createContext<PolAttachmentQueue | null>(null);\nAttachmentQueueContext.displayName = 'AttachmentQueueContext';","import { c as _c } from \"react/compiler-runtime\";\n/**\n * React Hooks for @pol-studios/powersync\n *\n * This module provides React hooks for accessing PowerSync functionality\n * within the provider's context.\n */\n\nimport { useContext, useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport type { AbstractPowerSyncDatabase, SyncStatus, ConnectionHealth, SyncMetrics, CrudEntry, EntitySyncState, FailedTransaction, CompletedTransaction, SyncError } from '../core/types';\nimport type { PlatformAdapter } from '../platform/types';\nimport type { PowerSyncContextValue, SyncStatusContextValue, ConnectionHealthContextValue, SyncMetricsContextValue, ConnectionStatusContextValue, SyncActivityContextValue, PendingMutationsContextValue, FailedTransactionsContextValue, CompletedTransactionsContextValue, SyncModeContextValue } from './types';\nimport type { SyncScope, SyncControlActions } from '../sync/types';\nimport type { PolAttachmentQueue } from '../attachments/pol-attachment-queue';\nimport type { SupabaseConnector } from '../connector/supabase-connector';\nimport { PowerSyncContext, SyncStatusContext, ConnectionHealthContext, SyncMetricsContext, AttachmentQueueContext, ConnectionStatusContext, SyncActivityContext, PendingMutationsContext, FailedTransactionsContext, CompletedTransactionsContext, SyncModeContext } from './context';\nimport type { SyncMode } from '../core/types';\n// Note: STORAGE_KEY_PAUSED and STORAGE_KEY_SYNC_MODE are handled by the status tracker\n\n// Track warned call sites to avoid console spam during re-renders.\n// Intentionally module-scoped: This is a dev-only debugging feature that tracks\n// which call sites have already been warned about using deprecated hooks.\n// The Set persists across React lifecycles by design to prevent duplicate warnings.\nconst warnedSyncStatusCallSites = __DEV__ ? new Set<string>() : null;\n\n// Duration to show 'synced' state after entity finishes syncing\nconst SYNCED_DISPLAY_DURATION_MS = 3000;\n\n// ─── Main Hook ───────────────────────────────────────────────────────────────\n\n/**\n * Hook to access the PowerSync database and related services.\n *\n * @returns PowerSync context value with database, connector, and state\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function MyComponent() {\n * const { db, isReady, error } = usePowerSync();\n *\n * if (!isReady) return <LoadingSpinner />;\n * if (error) return <Error message={error.message} />;\n *\n * // Use db for queries\n * const users = await db.getAll('SELECT * FROM users');\n * }\n * ```\n */\nexport function usePowerSync() {\n const context = useContext(PowerSyncContext);\n if (!context) {\n throw new Error(\"usePowerSync must be used within a PowerSyncProvider\");\n }\n return context as PowerSyncContextValue<TSchema>;\n}\n\n// ─── Sync Status Hook ────────────────────────────────────────────────────────\n\n/**\n * @deprecated This hook causes re-renders on any status change.\n * Use focused hooks instead:\n *\n * | Old (useSyncStatus) | New hook |\n * |--------------------------------|-----------------------------|\n * | connected, hasSynced | useConnectionStatus() |\n * | uploading, downloading | useSyncActivityContext() |\n * | pendingCount, pendingMutations | usePendingMutationsContext()|\n * | failedTransactions | useFailedTransactions() |\n * | syncMode, setSyncMode | useSyncMode() |\n * | triggerSync, pause, resume | useSyncControl() |\n *\n * @returns Sync status with connection state, pending uploads, and progress\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function SyncIndicator() {\n * const { status, pendingCount, isPaused } = useSyncStatus();\n *\n * if (status.downloading) {\n * const { current, target, percentage } = status.downloadProgress ?? {};\n * return <Progress value={percentage} label={`${current}/${target}`} />;\n * }\n *\n * if (pendingCount > 0) {\n * return <Badge>{pendingCount} pending uploads</Badge>;\n * }\n *\n * return <Text>Synced</Text>;\n * }\n * ```\n */\nexport function useSyncStatus() {\n if (__DEV__ && warnedSyncStatusCallSites) {\n const stack = new Error().stack?.split(\"\\n\")[2] ?? \"unknown\";\n if (!warnedSyncStatusCallSites.has(stack)) {\n warnedSyncStatusCallSites.add(stack);\n console.warn(\"[useSyncStatus] Deprecated: This hook causes re-renders on any status change. Use focused hooks: useConnectionStatus, useSyncActivityContext, usePendingMutationsContext, etc. See migration guide in JSDoc.\");\n }\n }\n const context = useContext(SyncStatusContext);\n if (!context) {\n throw new Error(\"useSyncStatus must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n// ─── Focused Context Hooks (Performance Optimization) ────────────────────────\n// These hooks subscribe to only specific data, preventing unnecessary re-renders.\n\n/**\n * Hook to access connection status only.\n * Use this instead of useSyncStatus when you only need connection state.\n *\n * @returns Connection status with connected, connecting, hasSynced states\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function ConnectionBadge() {\n * const { connected, connecting } = useConnectionStatus();\n *\n * if (connecting) return <Badge>Connecting...</Badge>;\n * return <Badge color={connected ? 'green' : 'red'}>{connected ? 'Online' : 'Offline'}</Badge>;\n * }\n * ```\n */\nexport function useConnectionStatus() {\n const context = useContext(ConnectionStatusContext);\n if (!context) {\n throw new Error(\"useConnectionStatus must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n/**\n * Hook to access sync activity (uploading/downloading).\n * Use this instead of useSyncStatus when you only need sync progress.\n *\n * @returns Sync activity with uploading, downloading, and downloadProgress\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function SyncProgressBar() {\n * const { downloading, downloadProgress } = useSyncActivityContext();\n *\n * if (!downloading) return null;\n * return <ProgressBar value={downloadProgress?.percentage ?? 0} />;\n * }\n * ```\n */\nexport function useSyncActivityContext() {\n const context = useContext(SyncActivityContext);\n if (!context) {\n throw new Error(\"useSyncActivityContext must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n/**\n * Hook to access pending mutations.\n * Use this instead of useSyncStatus when you only need pending upload info.\n *\n * @returns Pending mutations with count and discard functions\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function PendingChangesIndicator() {\n * const { pendingCount } = usePendingMutationsContext();\n *\n * if (pendingCount === 0) return null;\n * return <Badge>{pendingCount} pending</Badge>;\n * }\n * ```\n */\nexport function usePendingMutationsContext() {\n const context = useContext(PendingMutationsContext);\n if (!context) {\n throw new Error(\"usePendingMutationsContext must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n/**\n * Hook to access failed transactions.\n * Use this instead of useSyncStatus when you only need error info.\n *\n * @returns Failed transactions with error counts and clear/retry functions\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function SyncErrorBanner() {\n * const { hasUploadErrors, permanentErrorCount, retryFailure, failedTransactions } = useFailedTransactionsContext();\n *\n * if (!hasUploadErrors) return null;\n * return (\n * <Banner onRetry={() => failedTransactions.forEach(f => retryFailure(f.id))}>\n * {permanentErrorCount} changes failed to sync\n * </Banner>\n * );\n * }\n * ```\n */\nexport function useFailedTransactionsContext() {\n const context = useContext(FailedTransactionsContext);\n if (!context) {\n throw new Error(\"useFailedTransactionsContext must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n/**\n * Hook to access completed transactions history.\n * Use this instead of useSyncStatus when you only need sync history.\n *\n * @returns Completed transactions with clear function\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function RecentSyncs() {\n * const { completedTransactions, clearCompletedHistory } = useCompletedTransactionsContext();\n *\n * return (\n * <View>\n * {completedTransactions.map(t => (\n * <Text key={t.id}>Synced {t.affectedEntityIds.length} items</Text>\n * ))}\n * <Button onPress={clearCompletedHistory}>Clear</Button>\n * </View>\n * );\n * }\n * ```\n */\nexport function useCompletedTransactionsContext() {\n const context = useContext(CompletedTransactionsContext);\n if (!context) {\n throw new Error(\"useCompletedTransactionsContext must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n/**\n * Hook to access sync mode control.\n * Use this instead of useSyncStatus when you only need sync mode.\n *\n * @returns Sync mode with isPaused state and control functions\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function SyncModeToggle() {\n * const { syncMode, isPaused, setSyncMode } = useSyncModeContext();\n *\n * return (\n * <Toggle\n * value={!isPaused}\n * onValueChange={(on) => setSyncMode(on ? 'push-pull' : 'offline')}\n * label={isPaused ? 'Offline' : syncMode}\n * />\n * );\n * }\n * ```\n */\nexport function useSyncModeContext() {\n const context = useContext(SyncModeContext);\n if (!context) {\n throw new Error(\"useSyncModeContext must be used within a PowerSyncProvider\");\n }\n return context;\n}\n\n// ─── Sync Control Hook ───────────────────────────────────────────────────────\n\n/**\n * Hook to control sync operations.\n *\n * @returns Actions for triggering, pausing, and resuming sync\n *\n * @example\n * ```typescript\n * function SyncControls() {\n * const { triggerSync, syncNow, pause, resume, disconnect, setSyncMode } = useSyncControl();\n * const { isPaused, syncMode } = useSyncStatus();\n *\n * return (\n * <View>\n * <Button onPress={syncNow}>Sync Now</Button>\n * {isPaused ? (\n * <Button onPress={resume}>Resume</Button>\n * ) : (\n * <Button onPress={pause}>Pause</Button>\n * )}\n * </View>\n * );\n * }\n * ```\n */\nexport function useSyncControl() {\n const $ = _c(35);\n const {\n db,\n connector,\n platform\n } = usePowerSync();\n const {\n setSyncMode: setContextSyncMode,\n setForceNextUpload\n } = useSyncModeContext();\n const scopeRef = useRef(null);\n let t0;\n if ($[0] !== connector || $[1] !== db || $[2] !== platform || $[3] !== setContextSyncMode) {\n t0 = async mode => {\n await setContextSyncMode(mode);\n if (mode === \"offline\") {\n if (db?.connected) {\n platform.logger.info(\"[useSyncControl] Mode changed to offline - disconnecting\");\n await db.disconnect();\n }\n } else {\n if (db && connector && !db.connected) {\n platform.logger.info(\"[useSyncControl] Mode changed to\", mode, \"- reconnecting\");\n await db.connect(connector);\n }\n }\n };\n $[0] = connector;\n $[1] = db;\n $[2] = platform;\n $[3] = setContextSyncMode;\n $[4] = t0;\n } else {\n t0 = $[4];\n }\n const setSyncMode = t0;\n let t1;\n if ($[5] !== connector || $[6] !== db || $[7] !== platform || $[8] !== setForceNextUpload) {\n t1 = async () => {\n if (!db || !connector) {\n platform.logger.warn(\"[useSyncControl] Cannot sync - database not initialized\");\n return;\n }\n setForceNextUpload(true);\n platform.logger.info(\"[useSyncControl] Sync Now triggered - forcing full sync\");\n if (db.connected) {\n await db.disconnect();\n }\n await db.connect(connector);\n platform.logger.info(\"[useSyncControl] Connected, sync should start automatically\");\n };\n $[5] = connector;\n $[6] = db;\n $[7] = platform;\n $[8] = setForceNextUpload;\n $[9] = t1;\n } else {\n t1 = $[9];\n }\n const syncNow = t1;\n let t2;\n if ($[10] !== connector || $[11] !== db || $[12] !== platform || $[13] !== setContextSyncMode) {\n t2 = async () => {\n if (!db || !connector) {\n platform.logger.warn(\"[useSyncControl] Cannot trigger sync - not initialized\");\n return;\n }\n await setContextSyncMode(\"push-pull\");\n if (db.connected) {\n platform.logger.info(\"[useSyncControl] Disconnecting to force fresh sync...\");\n await db.disconnect();\n }\n platform.logger.info(\"[useSyncControl] Connecting...\");\n await db.connect(connector);\n platform.logger.info(\"[useSyncControl] Connected, sync should start automatically\");\n };\n $[10] = connector;\n $[11] = db;\n $[12] = platform;\n $[13] = setContextSyncMode;\n $[14] = t2;\n } else {\n t2 = $[14];\n }\n const triggerSync = t2;\n let t3;\n if ($[15] !== platform || $[16] !== setSyncMode) {\n t3 = async () => {\n await setSyncMode(\"offline\");\n platform.logger.info(\"[useSyncControl] Sync paused\");\n };\n $[15] = platform;\n $[16] = setSyncMode;\n $[17] = t3;\n } else {\n t3 = $[17];\n }\n const pause = t3;\n let t4;\n if ($[18] !== platform || $[19] !== setSyncMode) {\n t4 = async () => {\n await setSyncMode(\"push-pull\");\n platform.logger.info(\"[useSyncControl] Sync resumed\");\n };\n $[18] = platform;\n $[19] = setSyncMode;\n $[20] = t4;\n } else {\n t4 = $[20];\n }\n const resume = t4;\n let t5;\n if ($[21] !== db || $[22] !== platform) {\n t5 = async () => {\n if (!db) {\n platform.logger.warn(\"[useSyncControl] Cannot disconnect - not initialized\");\n return;\n }\n platform.logger.info(\"[useSyncControl] Disconnecting...\");\n await db.disconnect();\n platform.logger.info(\"[useSyncControl] Disconnected\");\n };\n $[21] = db;\n $[22] = platform;\n $[23] = t5;\n } else {\n t5 = $[23];\n }\n const disconnect = t5;\n let t6;\n if ($[24] !== connector || $[25] !== platform) {\n t6 = scope => {\n scopeRef.current = scope;\n if (connector && scope) {\n connector.setActiveProjectIds(scope.ids);\n platform.logger.info(\"[useSyncControl] Scope set:\", scope);\n }\n };\n $[24] = connector;\n $[25] = platform;\n $[26] = t6;\n } else {\n t6 = $[26];\n }\n const setScope = t6;\n let t7;\n if ($[27] !== disconnect || $[28] !== pause || $[29] !== resume || $[30] !== setScope || $[31] !== setSyncMode || $[32] !== syncNow || $[33] !== triggerSync) {\n t7 = {\n triggerSync,\n syncNow,\n pause,\n resume,\n disconnect,\n setScope,\n setSyncMode\n };\n $[27] = disconnect;\n $[28] = pause;\n $[29] = resume;\n $[30] = setScope;\n $[31] = setSyncMode;\n $[32] = syncNow;\n $[33] = triggerSync;\n $[34] = t7;\n } else {\n t7 = $[34];\n }\n return t7;\n}\n\n// ─── Sync Mode Hook ──────────────────────────────────────────────────────────\n\n/**\n * Hook to get and set the current sync mode.\n *\n * @returns Object with current mode, setter, and capability flags\n *\n * @example\n * ```typescript\n * function SyncModeSelector() {\n * const { mode, setMode, canUpload, canDownload } = useSyncMode();\n *\n * return (\n * <View>\n * <Text>Current mode: {mode}</Text>\n * <Text>Can upload: {canUpload ? 'Yes' : 'No'}</Text>\n * <Button onPress={() => setMode('pull-only')}>Download Only</Button>\n * </View>\n * );\n * }\n * ```\n */\nexport function useSyncMode() {\n const $ = _c(6);\n const {\n syncMode,\n setSyncMode,\n networkReachable\n } = useSyncModeContext();\n const t0 = networkReachable && syncMode === \"push-pull\";\n const t1 = syncMode !== \"offline\";\n let t2;\n if ($[0] !== networkReachable || $[1] !== setSyncMode || $[2] !== syncMode || $[3] !== t0 || $[4] !== t1) {\n t2 = {\n mode: syncMode,\n setMode: setSyncMode,\n canUpload: t0,\n canDownload: t1,\n networkReachable\n };\n $[0] = networkReachable;\n $[1] = setSyncMode;\n $[2] = syncMode;\n $[3] = t0;\n $[4] = t1;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n return t2;\n}\n\n// ─── Connection Health Hook ──────────────────────────────────────────────────\n\n/**\n * Hook to access connection health status.\n *\n * @returns Current connection health with latency and failure tracking\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function ConnectionIndicator() {\n * const health = useConnectionHealth();\n *\n * const statusColor = {\n * healthy: 'green',\n * degraded: 'yellow',\n * disconnected: 'red',\n * }[health.status];\n *\n * return (\n * <View>\n * <StatusDot color={statusColor} />\n * {health.latency && <Text>{health.latency}ms</Text>}\n * </View>\n * );\n * }\n * ```\n */\nexport function useConnectionHealth() {\n const context = useContext(ConnectionHealthContext);\n if (!context) {\n throw new Error(\"useConnectionHealth must be used within a PowerSyncProvider\");\n }\n return context.health;\n}\n\n// ─── Sync Metrics Hook ───────────────────────────────────────────────────────\n\n/**\n * Hook to access sync metrics.\n *\n * @returns Sync metrics including success rates, timing, and data transfer\n * @throws Error if used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function SyncStats() {\n * const metrics = useSyncMetrics();\n *\n * const successRate = metrics.totalSyncs > 0\n * ? (metrics.successfulSyncs / metrics.totalSyncs * 100).toFixed(1)\n * : 100;\n *\n * return (\n * <View>\n * <Text>Total syncs: {metrics.totalSyncs}</Text>\n * <Text>Success rate: {successRate}%</Text>\n * <Text>Avg duration: {metrics.averageSyncDuration ?? 'N/A'}ms</Text>\n * </View>\n * );\n * }\n * ```\n */\nexport function useSyncMetrics() {\n const context = useContext(SyncMetricsContext);\n if (!context) {\n throw new Error(\"useSyncMetrics must be used within a PowerSyncProvider\");\n }\n return context.metrics;\n}\n\n// ─── Attachment Queue Hook ───────────────────────────────────────────────────\n\n/**\n * Hook to access the attachment queue (if configured).\n *\n * @returns AttachmentQueue instance or null if not configured\n *\n * @example\n * ```typescript\n * function PhotoStats() {\n * const attachmentQueue = useAttachmentQueue();\n * const [stats, setStats] = useState(null);\n *\n * useEffect(() => {\n * if (!attachmentQueue) return;\n *\n * return attachmentQueue.onProgress((newStats) => {\n * setStats(newStats);\n * });\n * }, [attachmentQueue]);\n *\n * if (!stats) return null;\n *\n * return (\n * <View>\n * <Text>Photos: {stats.syncedCount}/{stats.totalExpected}</Text>\n * <Text>Cache used: {formatBytes(stats.syncedSize)}</Text>\n * </View>\n * );\n * }\n * ```\n */\nexport function useAttachmentQueue() {\n return useContext(AttachmentQueueContext);\n}\n\n// ─── Attachment Queue Ready Hook ─────────────────────────────────────────────\n\n/**\n * Hook to check if the attachment queue has finished initializing.\n *\n * This is useful when you need to wait for the attachment queue to be ready\n * before performing upload operations. The attachment queue initializes\n * asynchronously after the database is ready, so there's a brief period\n * where `isReady` is true but `attachmentQueueReady` is false.\n *\n * @returns Whether the attachment queue is ready (true if initialized or if attachments not configured)\n *\n * @example\n * ```typescript\n * function UploadButton() {\n * const attachmentQueue = useAttachmentQueue();\n * const attachmentQueueReady = useAttachmentQueueReady();\n *\n * if (!attachmentQueueReady) {\n * return <Button disabled>Initializing...</Button>;\n * }\n *\n * if (!attachmentQueue) {\n * return <Text>Uploads not configured</Text>;\n * }\n *\n * return <Button onPress={handleUpload}>Upload</Button>;\n * }\n * ```\n */\nexport function useAttachmentQueueReady() {\n const {\n attachmentQueueReady\n } = usePowerSync();\n return attachmentQueueReady;\n}\n\n// ─── Database Query Hook ─────────────────────────────────────────────────────\n\n/**\n * Hook to get the PowerSync database instance.\n * Throws if not ready.\n *\n * @returns The PowerSync database instance\n * @throws Error if not initialized or used outside of PowerSyncProvider\n *\n * @example\n * ```typescript\n * function UserList() {\n * const db = useDatabase();\n * const [users, setUsers] = useState([]);\n *\n * useEffect(() => {\n * db.getAll('SELECT * FROM users').then(setUsers);\n * }, [db]);\n *\n * return <FlatList data={users} />;\n * }\n * ```\n */\nexport function useDatabase() {\n const {\n db,\n isReady,\n error\n } = usePowerSync();\n if (error) {\n throw error;\n }\n if (!isReady || !db) {\n throw new Error(\"PowerSync database is not ready\");\n }\n return db;\n}\n\n// ─── Platform Adapter Hook ───────────────────────────────────────────────────\n\n/**\n * Hook to access the platform adapter.\n *\n * @returns The platform adapter instance\n *\n * @example\n * ```typescript\n * function FileViewer({ filePath }) {\n * const { platform } = usePowerSync();\n *\n * const handleOpen = async () => {\n * const content = await platform.fileSystem.readFile(filePath);\n * // Process content...\n * };\n *\n * return <Button onPress={handleOpen}>Open File</Button>;\n * }\n * ```\n */\nexport function usePlatform() {\n const {\n platform\n } = usePowerSync();\n return platform;\n}\n\n// ─── Online Status Hook ──────────────────────────────────────────────────────\n\n/**\n * Hook to track online/offline status using the platform's network adapter.\n *\n * @returns Whether the device is currently connected to the internet\n *\n * @example\n * ```typescript\n * function OfflineBanner() {\n * const isOnline = useOnlineStatus();\n *\n * if (isOnline) return null;\n *\n * return <Banner type=\"warning\">You are offline</Banner>;\n * }\n * ```\n */\nexport function useOnlineStatus() {\n const $ = _c(4);\n const {\n platform\n } = usePowerSync();\n const [isOnline, setIsOnline] = useState(true);\n let t0;\n if ($[0] !== platform.network) {\n t0 = () => {\n platform.network.isConnected().then(setIsOnline);\n const unsubscribe = platform.network.addConnectionListener(setIsOnline);\n return unsubscribe;\n };\n $[0] = platform.network;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== platform) {\n t1 = [platform];\n $[2] = platform;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n useEffect(t0, t1);\n return isOnline;\n}\n\n// ─── Pending Mutations Hook ──────────────────────────────────────────────────\n\n/**\n * Hook to get pending mutations that need to be uploaded.\n *\n * @returns Array of pending CRUD entries and count\n *\n * @example\n * ```typescript\n * function PendingChanges() {\n * const { mutations, count } = usePendingMutations();\n *\n * if (count === 0) return null;\n *\n * return (\n * <View>\n * <Text>{count} changes pending upload</Text>\n * <FlatList\n * data={mutations}\n * renderItem={({ item }) => (\n * <Text>{item.op} on {item.table}</Text>\n * )}\n * />\n * </View>\n * );\n * }\n * ```\n */\nexport function usePendingMutations() {\n const $ = _c(3);\n const {\n pendingMutations,\n pendingCount\n } = usePendingMutationsContext();\n let t0;\n if ($[0] !== pendingCount || $[1] !== pendingMutations) {\n t0 = {\n mutations: pendingMutations,\n count: pendingCount\n };\n $[0] = pendingCount;\n $[1] = pendingMutations;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// ─── Is Syncing Hook ─────────────────────────────────────────────────────────\n\n/**\n * Hook to check if sync is currently active.\n *\n * @returns Whether sync is currently in progress (uploading or downloading)\n *\n * @example\n * ```typescript\n * function SyncButton() {\n * const isSyncing = useIsSyncing();\n * const { triggerSync } = useSyncControl();\n *\n * return (\n * <Button\n * onPress={triggerSync}\n * disabled={isSyncing}\n * >\n * {isSyncing ? 'Syncing...' : 'Sync Now'}\n * </Button>\n * );\n * }\n * ```\n */\nexport function useIsSyncing() {\n const {\n uploading,\n downloading\n } = useSyncActivityContext();\n return uploading || downloading;\n}\n\n// ─── Download Progress Hook ──────────────────────────────────────────────────\n\n/**\n * Hook to get download progress during sync.\n *\n * @returns Download progress or null if not downloading\n *\n * @example\n * ```typescript\n * function DownloadProgress() {\n * const progress = useDownloadProgress();\n *\n * if (!progress) return null;\n *\n * return (\n * <ProgressBar\n * value={progress.percentage}\n * label={`${progress.current}/${progress.target} operations`}\n * />\n * );\n * }\n * ```\n */\nexport function useDownloadProgress() {\n const {\n downloadProgress\n } = useSyncActivityContext();\n return downloadProgress;\n}\n\n// ─── Entity Sync Status Hook ─────────────────────────────────────────────────\n\n/**\n * Return type for useEntitySyncStatus hook.\n */\nexport interface EntitySyncStatusResult {\n /** Current sync state for this entity */\n state: EntitySyncState;\n /** Error details if state is 'error' */\n error: SyncError | null;\n /** Number of pending operations for this entity */\n pendingOperations: number;\n /** The failed transaction if any */\n failedTransaction: FailedTransaction | null;\n /** Dismiss the failure (remove from tracking) */\n dismiss: () => void;\n}\n\n/**\n * Hook to get sync status for a specific entity.\n *\n * Combines local mutation state (from pending mutations) with\n * failure state to provide a unified status for UI.\n *\n * @param entityId - The entity ID to check status for\n * @returns Unified sync state and actions\n *\n * @example\n * ```typescript\n * function EquipmentHeader({ unitId }) {\n * const { state, error, dismiss } = useEntitySyncStatus(unitId);\n *\n * const borderColor = {\n * idle: 'transparent',\n * saving: 'orange',\n * syncing: 'amber',\n * synced: 'green',\n * error: 'red',\n * }[state];\n * }\n * ```\n */\nexport function useEntitySyncStatus(entityId: string | undefined): EntitySyncStatusResult {\n // Use focused context hooks instead of deprecated useSyncStatus\n const {\n pendingMutations\n } = usePendingMutationsContext();\n const {\n failedTransactions,\n clearFailure\n } = useFailedTransactionsContext();\n const [, forceUpdate] = useState(0);\n\n // Track recently synced entities with timestamps using a ref (avoids module-level mutable state)\n const recentlySyncedRef = useRef<Map<string, number>>(new Map());\n\n // Find if entity is in pending mutations\n // Check both entry.id (PowerSync's internal CRUD entry ID) and entry.opData?.id (the actual record ID)\n const entityPendingMutations = useMemo(() => {\n if (!entityId) return [];\n return pendingMutations.filter(entry => entry.id === entityId || String(entry.opData?.id) === entityId);\n }, [entityId, pendingMutations]);\n\n // Find if entity has a failed transaction\n const failedTransaction = useMemo(() => {\n if (!entityId) return null;\n return failedTransactions.find(ft => ft.affectedEntityIds.includes(entityId)) ?? null;\n }, [entityId, failedTransactions]);\n\n // Track transition from syncing to synced\n const wasSyncingRef = useRef(false);\n const isCurrentlySyncing = entityPendingMutations.length > 0;\n\n // When entity transitions from syncing to not syncing (and no error),\n // mark it as recently synced\n useEffect(() => {\n if (!entityId) return;\n if (wasSyncingRef.current && !isCurrentlySyncing && !failedTransaction) {\n recentlySyncedRef.current.set(entityId, Date.now());\n\n // Schedule cleanup after the display duration\n const timer = setTimeout(() => {\n const syncedAt = recentlySyncedRef.current.get(entityId);\n if (syncedAt && Date.now() - syncedAt >= SYNCED_DISPLAY_DURATION_MS) {\n recentlySyncedRef.current.delete(entityId);\n forceUpdate(n => n + 1);\n }\n }, SYNCED_DISPLAY_DURATION_MS);\n return () => {\n clearTimeout(timer);\n recentlySyncedRef.current.delete(entityId);\n };\n }\n wasSyncingRef.current = isCurrentlySyncing;\n }, [entityId, isCurrentlySyncing, failedTransaction]);\n\n // Determine current state\n const state = useMemo((): EntitySyncState => {\n if (!entityId) return 'idle';\n\n // Check for ANY failure (highest priority)\n // Both permanent and transient failures should show error state\n // The UI can use failedTransaction.isPermanent to distinguish if needed\n if (failedTransaction) {\n return 'error';\n }\n\n // Check if currently syncing\n if (entityPendingMutations.length > 0) {\n return 'syncing';\n }\n\n // Check if recently synced\n const syncedAt_0 = recentlySyncedRef.current.get(entityId);\n if (syncedAt_0 && Date.now() - syncedAt_0 < SYNCED_DISPLAY_DURATION_MS) {\n return 'synced';\n }\n return 'idle';\n }, [entityId, failedTransaction, entityPendingMutations.length]);\n\n // Get error from failed transaction\n const error = failedTransaction?.error ?? null;\n\n // Dismiss function - clears the failure from tracking\n const dismiss = useCallback(() => {\n if (failedTransaction) {\n clearFailure(failedTransaction.id);\n }\n }, [failedTransaction, clearFailure]);\n return {\n state,\n error,\n pendingOperations: entityPendingMutations.length,\n failedTransaction,\n dismiss\n };\n}\n\n// ─── Upload Status Hook ──────────────────────────────────────────────────────\n\n/**\n * Return type for useUploadStatus hook.\n */\nexport interface UploadStatusResult {\n /** Number of operations waiting to upload */\n pendingCount: number;\n /** Number of failed transactions */\n failedCount: number;\n /** Number of permanent failures needing user action */\n permanentFailureCount: number;\n /** Whether there are any errors */\n hasErrors: boolean;\n /** Whether there are permanent errors needing attention */\n hasPermanentErrors: boolean;\n /** All failed transactions */\n failedTransactions: FailedTransaction[];\n /** Trigger sync retry (reconnect) */\n retryAll: () => Promise<void>;\n /** Dismiss all failures */\n dismissAll: () => void;\n}\n\n/**\n * Hook to get overall upload status across all entities.\n *\n * @returns Upload status with counts and actions\n *\n * @example\n * ```typescript\n * function SyncStatusBar() {\n * const { pendingCount, failedCount, hasPermanentErrors, retryAll } = useUploadStatus();\n *\n * if (hasPermanentErrors) {\n * return <Banner onRetry={retryAll}>\n * {failedCount} changes failed to sync\n * </Banner>;\n * }\n * }\n * ```\n */\nexport function useUploadStatus() {\n const $ = _c(12);\n const {\n pendingCount\n } = usePendingMutationsContext();\n const {\n failedTransactions,\n hasUploadErrors,\n permanentErrorCount,\n clearAllFailures\n } = useFailedTransactionsContext();\n const {\n triggerSync\n } = useSyncControl();\n let t0;\n if ($[0] !== triggerSync) {\n t0 = async () => {\n await triggerSync();\n };\n $[0] = triggerSync;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const retryAll = t0;\n let t1;\n if ($[2] !== clearAllFailures) {\n t1 = () => {\n clearAllFailures();\n };\n $[2] = clearAllFailures;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n const dismissAll = t1;\n const t2 = permanentErrorCount > 0;\n let t3;\n if ($[4] !== dismissAll || $[5] !== failedTransactions || $[6] !== hasUploadErrors || $[7] !== pendingCount || $[8] !== permanentErrorCount || $[9] !== retryAll || $[10] !== t2) {\n t3 = {\n pendingCount,\n failedCount: failedTransactions.length,\n permanentFailureCount: permanentErrorCount,\n hasErrors: hasUploadErrors,\n hasPermanentErrors: t2,\n failedTransactions,\n retryAll,\n dismissAll\n };\n $[4] = dismissAll;\n $[5] = failedTransactions;\n $[6] = hasUploadErrors;\n $[7] = pendingCount;\n $[8] = permanentErrorCount;\n $[9] = retryAll;\n $[10] = t2;\n $[11] = t3;\n } else {\n t3 = $[11];\n }\n return t3;\n}\n\n// ─── Sync Activity Hook ──────────────────────────────────────────────────────\n\n/**\n * Return type for useSyncActivity hook.\n */\nexport interface SyncActivityResult {\n /** Pending CRUD entries waiting to be synced */\n pending: CrudEntry[];\n /** Failed transactions that need attention */\n failed: FailedTransaction[];\n /** Recently completed transactions */\n completed: CompletedTransaction[];\n /** New completed transactions since last notification display (for toasts/banners) */\n newCompleted: CompletedTransaction[];\n /** Counts summary */\n counts: {\n pending: number;\n failed: number;\n completed: number;\n newCompleted: number;\n };\n /** Whether there is any sync activity to show (pending or failed) */\n hasActivity: boolean;\n /** Retry all failed transactions */\n retryAll: () => Promise<void>;\n /** Retry a specific failed transaction */\n retryFailure: (failureId: string) => Promise<void>;\n /** Dismiss a specific failure */\n dismissFailure: (failureId: string) => void;\n /** Clear all completed transactions from the list */\n clearCompleted: () => void;\n /** Clear a specific completed transaction from the list */\n clearCompletedItem: (completedId: string) => void;\n /** Mark notifications as seen (for auto-dismiss functionality) */\n markNotificationsAsSeen: () => void;\n}\n\n/**\n * Hook to get comprehensive sync activity including pending, failed, and completed transactions.\n *\n * Uses the provider's completed transaction tracking via the status tracker.\n *\n * @returns Sync activity with all transaction states and actions\n *\n * @example\n * ```typescript\n * function SyncActivityBanner() {\n * const { pending, failed, completed, counts, hasActivity, retryAll, clearCompleted } = useSyncActivity();\n *\n * if (!hasActivity && completed.length === 0) return null;\n *\n * return (\n * <View>\n * <Text>{counts.pending} syncing, {counts.failed} failed</Text>\n * {failed.length > 0 && <Button onPress={retryAll}>Retry All</Button>}\n * </View>\n * );\n * }\n * ```\n */\nexport function useSyncActivity() {\n const $ = _c(24);\n const {\n pendingMutations\n } = usePendingMutationsContext();\n const {\n failedTransactions,\n clearFailure,\n retryFailure\n } = useFailedTransactionsContext();\n const {\n completedTransactions,\n clearCompletedHistory,\n clearCompletedItem,\n newCompletedTransactions,\n markNotificationsAsSeen\n } = useCompletedTransactionsContext();\n const {\n uploading: isUploading,\n downloading: isDownloading\n } = useSyncActivityContext();\n const {\n triggerSync\n } = useSyncControl();\n let t0;\n if ($[0] !== triggerSync) {\n t0 = async () => {\n await triggerSync();\n };\n $[0] = triggerSync;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const retryAll = t0;\n let t1;\n if ($[2] !== clearFailure) {\n t1 = failureId => {\n clearFailure(failureId);\n };\n $[2] = clearFailure;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n const dismissFailure = t1;\n let t2;\n if ($[4] !== clearCompletedHistory) {\n t2 = () => {\n clearCompletedHistory();\n };\n $[4] = clearCompletedHistory;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n const clearCompleted = t2;\n let t3;\n if ($[6] !== completedTransactions.length || $[7] !== failedTransactions.length || $[8] !== newCompletedTransactions.length || $[9] !== pendingMutations.length) {\n t3 = {\n pending: pendingMutations.length,\n failed: failedTransactions.length,\n completed: completedTransactions.length,\n newCompleted: newCompletedTransactions.length\n };\n $[6] = completedTransactions.length;\n $[7] = failedTransactions.length;\n $[8] = newCompletedTransactions.length;\n $[9] = pendingMutations.length;\n $[10] = t3;\n } else {\n t3 = $[10];\n }\n const counts = t3;\n const hasActivity = isUploading || isDownloading || failedTransactions.length > 0;\n let t4;\n if ($[11] !== clearCompleted || $[12] !== clearCompletedItem || $[13] !== completedTransactions || $[14] !== counts || $[15] !== dismissFailure || $[16] !== failedTransactions || $[17] !== hasActivity || $[18] !== markNotificationsAsSeen || $[19] !== newCompletedTransactions || $[20] !== pendingMutations || $[21] !== retryAll || $[22] !== retryFailure) {\n t4 = {\n pending: pendingMutations,\n failed: failedTransactions,\n completed: completedTransactions,\n newCompleted: newCompletedTransactions,\n counts,\n hasActivity,\n retryAll,\n retryFailure,\n dismissFailure,\n clearCompleted,\n clearCompletedItem,\n markNotificationsAsSeen\n };\n $[11] = clearCompleted;\n $[12] = clearCompletedItem;\n $[13] = completedTransactions;\n $[14] = counts;\n $[15] = dismissFailure;\n $[16] = failedTransactions;\n $[17] = hasActivity;\n $[18] = markNotificationsAsSeen;\n $[19] = newCompletedTransactions;\n $[20] = pendingMutations;\n $[21] = retryAll;\n $[22] = retryFailure;\n $[23] = t4;\n } else {\n t4 = $[23];\n }\n return t4;\n}\n\n// ============================================================================\n// Renamed Hooks (cleaner API)\n// ============================================================================\n\n// Note: useSyncActivity and usePendingMutations already exist as higher-level hooks\n// with different return types (lines 707 and 1049). The focused context hooks\n// (useSyncActivityContext, usePendingMutationsContext) retain the \"Context\" suffix\n// to distinguish them from the convenience hooks.\n\n/**\n * Get failed transactions state and retry/dismiss functions.\n * Alias for useFailedTransactionsContext.\n */\nexport const useFailedTransactions = useFailedTransactionsContext;\n\n/**\n * Get completed transactions state and clear function.\n * Alias for useCompletedTransactionsContext.\n */\nexport const useCompletedTransactions = useCompletedTransactionsContext;"],"mappings":"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","names":[]}
|