Yevhen Klymentiev
dark
light
console
darkness
y.klymentiev@gmail.com
Reusable Snippets|Practical utility code for everyday use — custom-built and ready to share

deleteIndexedDBDatabase

Deletes an entire IndexedDB database by name.

TypeScript
Copied!
1/**
2 * Deletes an entire IndexedDB database by name.
3 *
4 * @param dbName - The name of the IndexedDB database to delete.
5 * @returns A Promise that resolves when the database is deleted.
6 */
7export function deleteIndexedDBDatabase(dbName: string): Promise<void> {
8  return new Promise((resolve, reject) => {
9    const request = indexedDB.deleteDatabase(dbName);
10
11    request.onsuccess = () => resolve();
12    request.onerror = () => reject(request.error);
13    request.onblocked = () =>
14      console.warn(`Delete operation for "${dbName}" is blocked`);
15  });
16}
  • Complete Database Removal

    Efficiently deletes the entire database, including all object stores and data, without needing to clear them individually.

  • Promise-Based Handling

    Clean async/await-compatible interface for integrating into asynchronous workflows.

  • Minimal API Surface

    Offers a direct and focused abstraction over indexedDB.deleteDatabase, reducing boilerplate.

  • Blocked State Awareness

    Handles the onblocked event with a warning, which is often overlooked in lower-level implementations.

Tests | Examples

TypeScript
Copied!
1import { openIndexedDB } from './openIndexedDB';
2
3test('deleteIndexedDBDatabase - deletes the database by name', async () => {
4  const dbName = 'TestDB_Delete';
5
6  // Create and immediately close DB
7  const db = await openIndexedDB(dbName, 1, {
8    upgrade(db) {
9      db.createObjectStore('items', { keyPath: 'id' });
10    }
11  });
12  db.close();
13
14  // Delete it
15  await deleteIndexedDBDatabase(dbName);
16
17  // Try to open the DB again — should recreate it cleanly
18  const db2 = await openIndexedDB(dbName, 1, {
19    upgrade(db) {
20      db.createObjectStore('items', { keyPath: 'id' });
21    }
22  });
23
24  const storeNames = Array.from(db2.objectStoreNames);
25  expect(storeNames).toContain('items');
26
27  db2.close();
28});

Common Use Cases

  • Reset Application Storage

    Fully remove application data during logout, user profile deletion, or a hard reset feature.

  • Testing and QA

    Clear IndexedDB completely between automated test runs or development sessions.

  • Version Conflicts or Corruption Recovery

    Resolve issues from schema mismatches or corrupted stores by deleting and recreating the database.

  • Feature Rollback

    Remove a previously introduced data layer when disabling or reverting an experimental feature.

Codebase: Utilities -> Storage -> deleteIndexedDBDatabase | Yevhen Klymentiev