- Refactor PlatformServiceFactory to use globalThis-based singleton storage - Store singleton in globalThis/window/self for persistence across module reloads - Add comprehensive debug logging for singleton lifecycle tracking - Implement Proxy-based lazy initialization to avoid circular dependencies - Add HMR support to preserve singleton across hot module replacement - Enhance CapacitorPlatformService database connection recovery - Improve getOrCreateConnection() with robust error handling - Add recovery path for 'already exists' desync scenarios - Wrap retrieveConnection and db.open() calls in try-catch blocks - Handle cases where retrieveConnection throws instead of returning null - Add 50ms delay after closeConnection to allow native cleanup - Add shared SQLite connection manager (sqlite.ts) - Centralize SQLiteConnection instance creation - Prevent connection desync issues across the application This addresses the issue where PlatformService singleton was being recreated on navigation, causing repeated database initialization attempts and connection desync errors.
21 lines
656 B
TypeScript
21 lines
656 B
TypeScript
/**
|
|
* Shared SQLite connection manager for Capacitor platform
|
|
*
|
|
* Ensures only one SQLiteConnection instance exists across the application,
|
|
* preventing connection desync issues and unnecessary connection recreation.
|
|
*/
|
|
|
|
import { CapacitorSQLite, SQLiteConnection } from "@capacitor-community/sqlite";
|
|
|
|
/**
|
|
* Native Capacitor SQLite plugin instance
|
|
* This is the bridge to the native SQLite implementation
|
|
*/
|
|
export const CAP_SQLITE = CapacitorSQLite;
|
|
|
|
/**
|
|
* Shared SQLite connection manager
|
|
* Use this instance throughout the application - do not create new SQLiteConnection instances
|
|
*/
|
|
export const SQLITE = new SQLiteConnection(CAP_SQLITE);
|