Ctrl K
ComunidadGuías…

app/utils/developer.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { flatten } from "es-toolkit/compat";
import stores from "~/stores";
import Store from "~/stores/base/Store";
import StorePersistence from "~/stores/base/StorePersistence";
import { flattenTree } from "@shared/utils/tree";

/**
 * Delete all databases in the browser.
 *
 * @returns A promise that resolves when all databases have been deleted.
 */
export async function deleteAllDatabases() {
  if (!window.indexedDB) {
    return;
  }

  // Close any connections this tab holds open, otherwise the deletions below
  // are blocked until they are, and in-flight reads and writes are aborted.
  stores.disablePersistence();

  const teamId = stores.auth.currentTeamId;
  if (teamId) {
    Object.values(stores).forEach((store) => {
      if (store instanceof Store && store.persistable) {
        window.indexedDB.deleteDatabase(
          StorePersistence.databaseName(store.apiEndpoint, teamId)
        );
      }
    });
  }

  if ("databases" in window.indexedDB) {
    const databases = await window.indexedDB.databases();

    for (const database of databases) {
      if (database.name) {
        window.indexedDB.deleteDatabase(database.name);
      }
    }
    return;
  }

  // If the browser does not support listing databases, we need to manually delete as best we can
  // by iterating over all known collections and documents.
  await Promise.all(
    stores.collections.orderedData.map(async (collection) => {
      const nodes = flatten(collection.documents?.map(flattenTree));

      return nodes.map(async (node) => {
        window.indexedDB.deleteDatabase(`document.${node.id}`);
      });
    })
  );
}