diff --git a/spec/indexeddb_spec.mjs b/spec/indexeddb_spec.mjs index bcefaf1..6bc0ee5 100644 --- a/spec/indexeddb_spec.mjs +++ b/spec/indexeddb_spec.mjs @@ -4,4 +4,33 @@ describe("sanity check", () => { it("works", () => { expect(true).toBeTrue() }) +}) + +describe("SlopDB Version 1", () => { + + beforeEach(async () => { + const request = window.indexedDB.deleteDatabase("SlopDB") + const deletePromise = new Promise((resolve, reject) => { + request.onsuccess = () => {resolve()} + request.onerror = (err) => { + reject(err) + } + }) + return deletePromise + }) + + it("creates a version 1 indexeddb", async () => { + const slopdb_v1 = new SlopDB(1) + await slopdb_v1.db_opened() + expect(slopdb_v1.db).toBeDefined() + + const transaction = slopdb_v1.start_transaction("slop", "readonly") + expect(transaction).toBeDefined() + + try { + const bad_transaction = slopdb_v1.start_transaction("checkcache", "readonly") + } catch (error) { + expect(error.name).toBe("NotFoundError") + } + }) }) \ No newline at end of file diff --git a/src/indexed-db.mts b/src/indexed-db.mts index 35bf6da..dfcbc81 100644 --- a/src/indexed-db.mts +++ b/src/indexed-db.mts @@ -34,15 +34,15 @@ export class IDBCursorValueIterator { export class SlopDB { + open_promise: Promise db: IDBDatabase constructor(idb_version: number) { - this.open_database(idb_version).then((db) => { - this.db = db - }).catch((err) => { - console.log(err) - throw err - }) + this.open_promise = this.open_database(idb_version) + } + + async db_opened() { + this.db = await this.open_promise } apply_db_upgrade(db: IDBDatabase, idb_version: number) { @@ -89,6 +89,7 @@ export class SlopDB { start_transaction(storeNames: string | Array, mode: IDBTransactionMode, options: IDBTransactionOptions = undefined): IDBTransaction { return this.db.transaction(storeNames, mode, options) } + } export class CheckCache {