import { getDatabaseSizeSql } from '@supabase/pg-meta' import { useQuery } from '@tanstack/react-query' import { databaseKeys } from './keys' import { executeSql, ExecuteSqlError } from '@/data/sql/execute-sql-query' import { UseCustomQueryOptions } from '@/types' export type DatabaseSizeVariables = { projectRef?: string connectionString?: string | null } export async function getDatabaseSize( { projectRef, connectionString }: DatabaseSizeVariables, signal?: AbortSignal ) { const sql = getDatabaseSizeSql() const { result } = await executeSql( { projectRef, connectionString, sql, queryKey: ['database-size'], }, signal ) const dbSize = result?.[0]?.db_size if (typeof dbSize !== 'number') { throw new Error('Error fetching dbSize') } return dbSize } export type DatabaseSizeData = Awaited> export type DatabaseSizeError = ExecuteSqlError export const useDatabaseSizeQuery = ( { projectRef, connectionString }: DatabaseSizeVariables, { enabled = true, ...options }: UseCustomQueryOptions = {} ) => useQuery({ queryKey: databaseKeys.databaseSize(projectRef), queryFn: ({ signal }) => getDatabaseSize({ projectRef, connectionString }, signal), enabled: enabled && typeof projectRef !== 'undefined', ...options, })