import { IDBFactory } from "fake-indexeddb"; import { vi } from "vitest"; import type { ToolcraftBinaryAssetRepository } from "./binary-asset-repository"; import { createManualHeartbeatScheduler } from "./indexeddb-binary-asset-test-support"; import { createIndexedDbToolcraftBinaryAssetRepository as createRepositoryBackend, type IndexedDbToolcraftBinaryAssetRepositoryOptions, } from "./indexeddb-binary-asset-repository"; export const binaryOptions = { contentType: "model/gltf-binary", durable: true, } as const; const repositories = new Set(); export function createIndexedDbToolcraftBinaryAssetRepository( options: IndexedDbToolcraftBinaryAssetRepositoryOptions = {}, ): ToolcraftBinaryAssetRepository { const heartbeatScheduler = options.heartbeatScheduler ?? createManualHeartbeatScheduler().scheduler; const repository = createRepositoryBackend({ ...options, heartbeatScheduler, }); repositories.add(repository); return repository; } export function createRepository(): ToolcraftBinaryAssetRepository { return createIndexedDbToolcraftBinaryAssetRepository({ databaseName: `toolcraft-repository-${crypto.randomUUID()}`, indexedDB: new IDBFactory(), }); } export async function cleanupIndexedDbRepositories(): Promise { try { await Promise.allSettled( [...repositories].map((repository) => repository.dispose()), ); } finally { repositories.clear(); vi.unstubAllGlobals(); } }