From b26bec726fb3e241eae539ff814d7c9e2cf0c5f2 Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Fri, 6 Feb 2026 12:50:39 -0800 Subject: [PATCH] an absurd amount of tomfoolery --- bun.lock | 3 +++ package.json | 1 + src/lib/db/client-db/index.ts | 13 +++++++++++-- src/lib/db/client-db/seed.ts | 1 + src/lib/db/index.ts | 4 ++-- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index a50995f..4fc9956 100644 --- a/bun.lock +++ b/bun.lock @@ -17,6 +17,7 @@ "better-sqlite3": "^12.6.2", "bits-ui": "^2.14.4", "clsx": "^2.1.1", + "dotenv": "^17.2.4", "drizzle-kit": "^0.31.8", "drizzle-orm": "^0.45.1", "lefthook": "^2.1.0", @@ -373,6 +374,8 @@ "devalue": ["devalue@5.6.2", "", {}, "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg=="], + "dotenv": ["dotenv@17.2.4", "", {}, "sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw=="], + "drizzle-kit": ["drizzle-kit@0.31.8", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg=="], "drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="], diff --git a/package.json b/package.json index 0600c06..72931f8 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "better-sqlite3": "^12.6.2", "bits-ui": "^2.14.4", "clsx": "^2.1.1", + "dotenv": "^17.2.4", "drizzle-kit": "^0.31.8", "drizzle-orm": "^0.45.1", "lefthook": "^2.1.0", diff --git a/src/lib/db/client-db/index.ts b/src/lib/db/client-db/index.ts index b4355ec..a0b80d6 100644 --- a/src/lib/db/client-db/index.ts +++ b/src/lib/db/client-db/index.ts @@ -9,17 +9,26 @@ import { browser } from "$app/environment"; * Exported to allow query helpers to accept the specific type without * creating circular type references. */ -export type ClientDb = ReturnType; // this is kinda mid export const sqlocal = browser ? await initDb() : null; -export const db = sqlocal ? drizzle(sqlocal.driver, sqlocal.batchDriver) : null; +// wacky typecasting, but it works to give type hints for db queries +export const db = sqlocal + ? drizzle(sqlocal.driver, sqlocal.batchDriver) + : ((await serverDb()) as unknown as ReturnType); + +export type ClientDb = typeof db; async function initDb() { const { SQLocalDrizzle } = await import("sqlocal/drizzle"); return new SQLocalDrizzle("database.sqlite3"); } +async function serverDb() { + const { db } = await import(".."); + return db; +} + export function getClientDb() { if (!sqlocal || !db) throw "Client DB can only be accessed from the browser"; return { diff --git a/src/lib/db/client-db/seed.ts b/src/lib/db/client-db/seed.ts index 1c1e7ed..c7103a6 100644 --- a/src/lib/db/client-db/seed.ts +++ b/src/lib/db/client-db/seed.ts @@ -41,6 +41,7 @@ function ensureBrowser() { export async function ensureSeeded( opts: { version?: number; force?: boolean; fetch?: typeof fetch } = {}, ): Promise { + if (!browser) return; ensureBrowser(); const version = opts.version ?? AMQ_DB_SEED_VERSION; diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts index f28d70d..5f08cfc 100644 --- a/src/lib/db/index.ts +++ b/src/lib/db/index.ts @@ -1,4 +1,4 @@ -// import 'dotenv/config'; -import { drizzle } from "drizzle-orm/bun-sqlite"; +import "dotenv/config"; +import { drizzle } from "drizzle-orm/better-sqlite3"; export const db = drizzle(process.env.DB_FILE_NAME);