From e0572649c8badd8809d8936bd206b22457c8483a Mon Sep 17 00:00:00 2001 From: ibro Date: Sat, 17 Jan 2026 18:39:45 +0100 Subject: [PATCH 01/18] add runed --- app/package.json | 1 + pnpm-lock.yaml | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/package.json b/app/package.json index 4b6a209..d10cff2 100644 --- a/app/package.json +++ b/app/package.json @@ -48,6 +48,7 @@ "micromark": "^4.0.2", "prettier": "^3.7.4", "prettier-plugin-svelte": "^3.4.1", + "runed": "^0.37.1", "superstruct": "^2.0.2", "svelte": "5.46.1", "svelte-check": "^4.3.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34bfe1f..eab7213 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,6 +121,9 @@ importers: prettier-plugin-svelte: specifier: ^3.4.1 version: 3.4.1(prettier@3.7.4)(svelte@5.46.1) + runed: + specifier: ^0.37.1 + version: 0.37.1(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@6.4.1(@types/node@24.10.4)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@24.10.4)(yaml@2.8.2)))(svelte@5.46.1) superstruct: specifier: ^2.0.2 version: 2.0.2 @@ -2320,6 +2323,18 @@ packages: peerDependencies: svelte: ^5.7.0 + runed@0.37.1: + resolution: {integrity: sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA==} + peerDependencies: + '@sveltejs/kit': ^2.21.0 + svelte: ^5.7.0 + zod: ^4.1.0 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + zod: + optional: true + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -4788,6 +4803,15 @@ snapshots: esm-env: 1.2.2 svelte: 5.46.1 + runed@0.37.1(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@6.4.1(@types/node@24.10.4)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@24.10.4)(yaml@2.8.2)))(svelte@5.46.1): + dependencies: + dequal: 2.0.3 + esm-env: 1.2.2 + lz-string: 1.5.0 + svelte: 5.46.1 + optionalDependencies: + '@sveltejs/kit': 2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@6.4.1(@types/node@24.10.4)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@24.10.4)(yaml@2.8.2)) + sade@1.8.1: dependencies: mri: 1.2.0 From 96428a85728cdafd8671ef9a53ab9833629d5734 Mon Sep 17 00:00:00 2001 From: ibro Date: Sat, 17 Jan 2026 18:43:56 +0100 Subject: [PATCH 02/18] replace LastRow with runed PersistedState --- app/src/lib/database/watchEvents.ts | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/app/src/lib/database/watchEvents.ts b/app/src/lib/database/watchEvents.ts index 03b8716..1fc0f58 100644 --- a/app/src/lib/database/watchEvents.ts +++ b/app/src/lib/database/watchEvents.ts @@ -9,22 +9,15 @@ import { User } from '$lib/data/user.svelte' import type { ArenaBlock, ArenaChannel, ArenaChannelContents } from "arena-ts" import { channels, entries, media, persistData } from "$lib/data/maps.svelte" import { pool } from "./connectionPool.svelte" +import { PersistedState } from 'runed' -class LastRow { - #val: bigint - constructor() { - this.#val = BigInt(localStorage.getItem('lastRow')) ?? 0n - localStorage.setItem('lastRow', lastRow.toString()) +let lastRow = new PersistedState('lastRow', 0n, { + serializer: { + deserialize: (val) => BigInt(val), + serialize: (val) => val.toString(), } - get() { - return this.#val - } - set(val: bigint) { - localStorage.setItem('lastRow', val.toString()) - this.#val = BigInt(localStorage.getItem('lastRow')) ?? 0n - } -} -let lastRow = new LastRow() +}) +const channel = new BroadcastChannel('updates') export async function bootstrap(db: TXAsync | DB) { const events = await db.execO('select rowid,* from log') @@ -34,15 +27,14 @@ export async function bootstrap(db: TXAsync | DB) { return } -const channel = new BroadcastChannel('updates') export const watchEvents = () => channel.addEventListener('message', ev => { if (ev.data) { const ub: bigint[] = [...ev.data.values()] pool.exec(async (tx, db) => { - await db.execO('select *,rowid from log where rowid between ? and ?', [ub[0], ub.at(-1)]) + await db.execO('select *,rowid from log where rowid between ? and ?', [ub[0], ub.at(-1)!]) .then((events) => { parseEvent(events) - persistData().then(() => lastRow.set(ub.at(-1))) + persistData().then(() => lastRow.current = ub.at(-1)!) }) // .catch((err) => { console.error(err) }) }) From 28e73447f8011371234b38f27d7bbeb4e70c28a2 Mon Sep 17 00:00:00 2001 From: ibro Date: Sat, 17 Jan 2026 18:44:43 +0100 Subject: [PATCH 03/18] initialize data store --- app/src/lib/database/connectionPool.svelte.ts | 1 + app/src/lib/database/createTables.ts | 1 - app/src/routes/+layout.svelte | 23 +++++++++++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/lib/database/connectionPool.svelte.ts b/app/src/lib/database/connectionPool.svelte.ts index b6c5700..280bf3c 100644 --- a/app/src/lib/database/connectionPool.svelte.ts +++ b/app/src/lib/database/connectionPool.svelte.ts @@ -90,6 +90,7 @@ export class DbPool { }) } catch (err) { console.error(`Error while running transaction: ${err}`) + console.trace(err) } return () => this.#close(db) } catch (err) { diff --git a/app/src/lib/database/createTables.ts b/app/src/lib/database/createTables.ts index bd491c4..4e0655d 100644 --- a/app/src/lib/database/createTables.ts +++ b/app/src/lib/database/createTables.ts @@ -4,7 +4,6 @@ import type { DB } from "@vlcn.io/crsqlite-wasm" import type { TXAsync } from "@vlcn.io/xplat-api" export async function initStore(db: DB | TXAsync) { - console.log('init...') if ( localStorage.getItem('deviceId') === null || (await db.execA(`SELECT name FROM sqlite_master WHERE type='table' AND name='log';`)).length === 0 diff --git a/app/src/routes/+layout.svelte b/app/src/routes/+layout.svelte index 3da2bf1..3d480bb 100644 --- a/app/src/routes/+layout.svelte +++ b/app/src/routes/+layout.svelte @@ -2,13 +2,32 @@ -{@render children()} +{ready} +{#if ready} + {@render children()} +{/if} From 753d033d0e3328c52bd081cb828945ef4f5453e8 Mon Sep 17 00:00:00 2001 From: ibro Date: Tue, 20 Jan 2026 15:33:36 +0100 Subject: [PATCH 10/18] move storage initialization to app layout --- app/src/routes/(app)/+layout.svelte | 19 ++++++++++--------- app/src/routes/+layout.svelte | 22 ++-------------------- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/app/src/routes/(app)/+layout.svelte b/app/src/routes/(app)/+layout.svelte index b86579f..0ba4cad 100644 --- a/app/src/routes/(app)/+layout.svelte +++ b/app/src/routes/(app)/+layout.svelte @@ -2,12 +2,12 @@
-{@render children()} +{#if ready} + {@render children()} +{/if}