UNPKG

@t1mmen/srtd

Version:

Supabase Repeatable Template Definitions (srtd): 🪄 Live-reloading SQL templates for Supabase DX. Make your database changes reviewable and migrations maintainable! 🚀

58 lines • 1.97 kB
// hooks/useDatabaseConnection.ts import { useEffect, useState } from 'react'; import { testConnection } from '../utils/databaseConnection.js'; function parseDbError(error) { if (error instanceof Error) { if (error.message.includes('Connection terminated unexpectedly')) { return 'Database connection lost. Is Supabase running?'; } if (error.message.includes('ECONNREFUSED')) { return 'Unable to connect to database. Is Supabase running?'; } return error.message.split('\n')[0] || error.message; } return String(error); } export function useDatabaseConnection(checkInterval = 3000) { const [state, setState] = useState({ isConnected: false, isChecking: true, error: undefined, }); useEffect(() => { let mounted = true; async function checkConnection() { if (!mounted) return; setState(prev => ({ ...prev, isChecking: true })); try { if (!mounted) return; const isConnected = await testConnection(); setState({ isConnected, error: undefined, isChecking: false, }); } catch (err) { if (!mounted) return; setState({ isConnected: false, error: parseDbError(err), isChecking: false, }); } } void checkConnection(); const intervalId = !state.isConnected ? setInterval(checkConnection, checkInterval) : undefined; return () => { mounted = false; if (intervalId) clearInterval(intervalId); }; }, [checkInterval, state.isConnected]); return state; } //# sourceMappingURL=useDatabaseConnection.js.map