feat: use official wasm in worker and cached data info / warning

This commit is contained in:
Samuel 2025-01-21 20:18:39 +01:00
parent a2bc4115a2
commit ff23486fd2
21 changed files with 492 additions and 398 deletions

View file

@ -1,9 +1,19 @@
import { sql, type NotNull } from "kysely";
import { worker, kyselyDb, SELF_ID, DB_FILENAME } from "./db";
import { cached } from "../lib/db-cache";
import type { MainToWorkerMsg, WorkerToMainMsg } from "~/lib/kysely-wasqlite-worker/type";
import { worker, kyselyDb, SELF_ID, DB_FILENAME, setDbLoaded } from "./db";
import { cached, clearDbCache } from "../lib/db-cache";
import type { MainToWorkerMsg, WorkerToMainMsg } from "~/lib/kysely-official-wasm-worker/type";
export const loadDb = async (statements: string[], progressCallback?: (percentage: number) => void): Promise<void> => {
// try to persist storage, https://web.dev/articles/persistent-storage#request_persistent_storage
try {
if (navigator.storage?.persist && !(await navigator.storage.persisted())) {
await navigator.storage.persist();
}
// biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
} catch {}
clearDbCache();
export const loadDb = (statements: string[], progressCallback?: (percentage: number) => void): Promise<void> => {
return new Promise((resolve, reject) => {
const progressListener = ({ data }: MessageEvent<WorkerToMainMsg>) => {
if (data[0] === 5) {
@ -19,12 +29,15 @@ export const loadDb = (statements: string[], progressCallback?: (percentage: num
worker.removeEventListener("message", progressListener);
worker.removeEventListener("message", endListener);
setDbLoaded(true);
resolve();
}
};
worker.addEventListener("message", progressListener);
worker.addEventListener("message", endListener);
worker.addEventListener("message", progressListener);
worker.postMessage([4, DB_FILENAME, true, statements] satisfies MainToWorkerMsg);
});

View file

@ -1,9 +1,8 @@
import { makePersisted } from "@solid-primitives/storage";
import { Kysely } from "kysely";
import type { DB } from "./db-schema";
import { OfficialWasmWorkerDialect } from "~/lib/kysely-official-wasm-worker";
import wasmWorkerUrl from "~/lib/kysely-official-wasm-worker/worker?url";
import { createSignal } from "solid-js";
import { WaSqliteWorkerDialect } from "~/lib/kysely-wasqlite-worker";
import wasmWorkerUrl from "~/lib/kysely-wasqlite-worker/worker?url";
export const SELF_ID = 2;
@ -13,7 +12,7 @@ export const worker = new Worker(wasmWorkerUrl, {
type: "module",
});
const dialect = new WaSqliteWorkerDialect({
const dialect = new OfficialWasmWorkerDialect({
fileName: DB_FILENAME,
preferOPFS: true,
worker,
@ -23,4 +22,5 @@ export const kyselyDb = new Kysely<DB>({
dialect,
});
export const [dbHash, setDbHash] = makePersisted(createSignal<number>());
export const [dbLoaded, setDbLoaded] = createSignal(false);
// export const [dbHash, setDbHash] = makePersisted(createSignal<number>());

View file

@ -1,2 +1,2 @@
export { kyselyDb, SELF_ID } from "./db";
export { kyselyDb, SELF_ID, dbLoaded, setDbLoaded } from "./db";
export * from "./db-queries";