Skip to content

Commit 28e5dad

Browse files
committed
Review fixes
1 parent c12aa86 commit 28e5dad

3 files changed

Lines changed: 42 additions & 18 deletions

File tree

src/wasm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ impl HadrianGateway {
172172

173173
let response = tower::ServiceExt::oneshot(self.router.clone(), http_request)
174174
.await
175-
.unwrap();
175+
.map_err(|e| JsError::new(&format!("Router error: {e}")))?;
176176

177177
convert_response(response).await
178178
}

ui/src/service-worker/register.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,19 @@ export async function registerWasmServiceWorker(): Promise<void> {
2222
// Wait for the SW to be active (handles installing, waiting, or already active)
2323
const sw = registration.active || registration.waiting || registration.installing;
2424
if (sw && sw.state !== "activated") {
25-
await new Promise<void>((resolve) => {
26-
sw.addEventListener("statechange", function handler() {
27-
if (sw.state === "activated") {
28-
sw.removeEventListener("statechange", handler);
29-
resolve();
30-
}
31-
});
32-
});
25+
await Promise.race([
26+
new Promise<void>((resolve) => {
27+
sw.addEventListener("statechange", function handler() {
28+
if (sw.state === "activated") {
29+
sw.removeEventListener("statechange", handler);
30+
resolve();
31+
}
32+
});
33+
}),
34+
new Promise<void>((_, reject) =>
35+
setTimeout(() => reject(new Error("Service worker activation timed out")), 10_000)
36+
),
37+
]);
3338
}
3439

3540
// Ensure this page is controlled by the SW — even after activation,

ui/src/service-worker/sqlite-bridge.ts

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,36 @@ function saveToIndexedDB(data: Uint8Array): void {
4747
req.onupgradeneeded = () => req.result.createObjectStore(IDB_STORE);
4848
req.onsuccess = () => {
4949
const tx = req.result.transaction(IDB_STORE, "readwrite");
50-
tx.objectStore(IDB_STORE).put(data, IDB_KEY);
50+
const putReq = tx.objectStore(IDB_STORE).put(data, IDB_KEY);
51+
putReq.onerror = () => console.error("[sqlite-bridge] IndexedDB put failed:", putReq.error);
52+
tx.onerror = () => console.error("[sqlite-bridge] IndexedDB transaction failed:", tx.error);
5153
};
54+
req.onerror = () => console.error("[sqlite-bridge] IndexedDB open failed:", req.error);
5255
}
5356

5457
let saveTimer: ReturnType<typeof setTimeout> | null = null;
58+
59+
function flushSave(): void {
60+
if (!db || !saveTimer) return;
61+
clearTimeout(saveTimer);
62+
saveTimer = null;
63+
const data = db.export();
64+
saveToIndexedDB(new Uint8Array(data));
65+
}
66+
5567
function debouncedSave(): void {
5668
if (!db) return;
5769
if (saveTimer) clearTimeout(saveTimer);
5870
saveTimer = setTimeout(() => {
71+
saveTimer = null;
5972
const data = db!.export();
6073
saveToIndexedDB(new Uint8Array(data));
6174
}, 500);
6275
}
6376

77+
// Flush pending saves before the service worker terminates
78+
globalThis.addEventListener("unload", flushSave);
79+
6480
// ---------------------------------------------------------------------------
6581
// Parameter binding
6682
// ---------------------------------------------------------------------------
@@ -117,15 +133,18 @@ const bridge = {
117133
if (!db) throw new Error("Database not initialized — call init_database() first");
118134

119135
const stmt = db.prepare(sql);
120-
stmt.bind(bindParams(params));
121-
122-
const rows: Record<string, unknown>[] = [];
123-
while (stmt.step()) {
124-
const row = stmt.getAsObject();
125-
rows.push(row as Record<string, unknown>);
136+
try {
137+
stmt.bind(bindParams(params));
138+
139+
const rows: Record<string, unknown>[] = [];
140+
while (stmt.step()) {
141+
const row = stmt.getAsObject();
142+
rows.push(row as Record<string, unknown>);
143+
}
144+
return rows;
145+
} finally {
146+
stmt.free();
126147
}
127-
stmt.free();
128-
return rows;
129148
},
130149

131150
async execute(

0 commit comments

Comments
 (0)