Hello from MCP server

List Files | Just Commands | Repo | Logs

← back |
import { CapacitorSQLite, SQLiteConnection } from "@capacitor-community/sqlite";

export async function deleteIndexedDatabase(dbName: string): Promise<void> {
  return new Promise((resolve, reject) => {
    const deleteRequest = indexedDB.deleteDatabase(dbName);

    deleteRequest.onsuccess = () => {
      resolve();
    };

    deleteRequest.onerror = () => {
      console.error(
        `❌ Failed to delete IndexedDB: ${dbName}`,
        deleteRequest.error,
      );
      reject(deleteRequest.error);
    };

    deleteRequest.onblocked = () => {
      console.warn(
        `⚠️ Delete blocked for: ${dbName} (close all tabs using this database)`,
      );
      resolve();
    };
  });
}

export async function clearAllIndexedDB(): Promise<void> {
  try {
    if ("indexedDB" in window) {
      // Get all database names
      const databases = await indexedDB.databases();

      // Delete each database
      for (const db of databases) {
        if (db.name) {
          await deleteIndexedDatabase(db.name);
        }
      }

    } else {
      // IndexedDB not available
    }
  } catch (error) {
    console.error("Error clearing IndexedDB:", error);
    throw error;
  }
}

export async function deleteDatabase(dbName: string): Promise<void> {
  try {
    // Close any existing connections first
    const sqlite = new SQLiteConnection(CapacitorSQLite);
    const isConnection = await sqlite.isConnection(dbName, false);
    if (isConnection.result) {
      await sqlite.closeConnection(dbName, false);
    }

    // Delete the database using the plugin directly
    await CapacitorSQLite.deleteDatabase({ database: dbName });
  } catch (error) {
    console.error(`Error deleting database ${dbName}:`, error);
    throw error;
  }
}

/*
export async function forceDeleteDatabase(dbName: string): Promise<void> {
  try {
    const sqlite = new SQLiteConnection(CapacitorSQLite);

    // Always create/open connection first
    const db = await sqlite.createConnection(
      dbName,
      false, // not encrypted
      "no-encryption",
      1, // version
      false, // not readonly
    );

    // Try to open (this ensures the database exists)
    try {
      await db.open();
    } catch (openError) {
      return;
    }

    // Close it
    await db.close();

    // Now delete
    await CapacitorSQLite.deleteDatabase({ database: dbName });
  } catch (error) {
    console.error(`Error force deleting database ${dbName}:`, error);
    throw error;
  }
}
*/