From 5bb2f25f91377c5de6a4a693525e8f9d7a2deef4 Mon Sep 17 00:00:00 2001 From: Theis Pieter Hollebeek Date: Mon, 13 Oct 2025 17:59:14 +0200 Subject: [PATCH] [wip] idb impl --- index.html | 3 +-- src/gesundheit.js | 40 ++++++++++++++++++++++++++++++++++++++++ src/index.js | 3 +++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/gesundheit.js diff --git a/index.html b/index.html index ea479e4..ec08c6b 100644 --- a/index.html +++ b/index.html @@ -110,8 +110,7 @@ function loop(deltaT) { lib.startGameLoop(loop); - + diff --git a/src/gesundheit.js b/src/gesundheit.js new file mode 100644 index 0000000..4b4807f --- /dev/null +++ b/src/gesundheit.js @@ -0,0 +1,40 @@ +async function asyncIdbRequest(req) { + return await new Promise((resolve, reject) => { + req.onerror = () => { + reject(req.error); + }; + + req.onsuccess = () => { + resolve(req.result); + }; + }); +} + +const Idb = new Proxy(globalThis.indexedDB, { + get(target, prop, _receiver) { + if (typeof target[prop] === "function") { + return (...args) => { + const req = target[prop](...args); + return asyncIdbRequest(req); + }; + } + return Reflect.get(...arguments); + }, +}); + +export class Gesundheit { + static #isInternalConstructing = false; + static #idb = globalThis.indexedDB; + + constructor() { + if (!Gesundheit.#isInternalConstructing) { + throw new TypeError("Gesundheit is not constructable - use Gesundheit.load()"); + } + Gesundheit.#isInternalConstructing = false; + } + + static async load(name) { + const db = await Idb.open(name); + console.log(db); + } +} diff --git a/src/index.js b/src/index.js index 61043f6..f00b19b 100644 --- a/src/index.js +++ b/src/index.js @@ -14,6 +14,7 @@ import { TextCompleter } from "./text_completer.js"; import { ConsoleInput } from "./console_input.js"; import { downloadFile, slugify } from "./utils.js"; import { HtmlExporter } from "./html_exporter.js"; +import { Gesundheit } from "./gesundheit.js"; const editor = ace.edit("editor"); editor.setTheme("ace/theme/gruvbox"); @@ -150,3 +151,5 @@ addEventListener("keydown", (ev) => { }); toggleSpriteEditorButton.addEventListener("click", () => spriteEditor.toggleEditor()); + +Gesundheit.load("spritedb");