feat: use official wasm in worker and cached data info / warning
This commit is contained in:
parent
a2bc4115a2
commit
ff23486fd2
21 changed files with 492 additions and 398 deletions
|
@ -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);
|
||||
});
|
||||
|
|
10
src/db/db.ts
10
src/db/db.ts
|
@ -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>());
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
export { kyselyDb, SELF_ID } from "./db";
|
||||
export { kyselyDb, SELF_ID, dbLoaded, setDbLoaded } from "./db";
|
||||
export * from "./db-queries";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue