diff --git a/src/lib/database/index.ts b/src/lib/database.ts similarity index 86% rename from src/lib/database/index.ts rename to src/lib/database.ts index 14c04d0..cf24ce1 100644 --- a/src/lib/database/index.ts +++ b/src/lib/database.ts @@ -1,4 +1,3 @@ -import { dev } from '$app/environment'; import { MIGRATIONS } from '$lib/migrations'; import { IndexedDBCache } from '@agnosticeng/cache'; import { MigrationManager } from '@agnosticeng/migrate'; @@ -10,7 +9,7 @@ const DB_NAME = 'sqlite-storage'; const STORE_NAME = 'sqlite-data'; const CACHE_KEY = 'db'; -class Database { +export class Database { private db = new SQLite(); private cache = new IndexedDBCache({ dbName: DB_NAME, storeName: STORE_NAME }); private migration = new MigrationManager(this.db); @@ -39,11 +38,3 @@ class Database { return this.db.exec(sql, bind); } } - -export type { Database }; -export const db = new Database(); - -if (dev) { - // @ts-ignore - window.db = db; -} diff --git a/src/lib/repositories/history.ts b/src/lib/repositories/history.ts index 42c268d..638e064 100644 --- a/src/lib/repositories/history.ts +++ b/src/lib/repositories/history.ts @@ -1,4 +1,4 @@ -import { db, type Database } from '$lib/database'; +import type { Database } from '$lib/database'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; @@ -17,7 +17,7 @@ export interface HistoryRepository { delete(id: HistoryEntry['id']): Promise; } -class SQLiteHistoryRepository implements HistoryRepository { +export class SQLiteHistoryRepository implements HistoryRepository { constructor(private db: Database) {} async getAll(): Promise { @@ -63,5 +63,3 @@ class SQLiteHistoryRepository implements HistoryRepository { await this.db.exec('DELETE FROM history WHERE id = ?', [id]); } } - -export const historyRepository: HistoryRepository = new SQLiteHistoryRepository(db); diff --git a/src/lib/repositories/queries.ts b/src/lib/repositories/queries.ts index 8ae6cbe..8303b4b 100644 --- a/src/lib/repositories/queries.ts +++ b/src/lib/repositories/queries.ts @@ -1,4 +1,4 @@ -import { db, type Database } from '$lib/database'; +import type { Database } from '$lib/database'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; @@ -21,7 +21,7 @@ export interface QueryRepository { delete(id: number): Promise; } -class SQLiteQueryRepository implements QueryRepository { +export class SQLiteQueryRepository implements QueryRepository { constructor(private db: Database) {} async getAll(): Promise { @@ -75,5 +75,3 @@ function row_to_query(row: Awaited>[number]): Query .toDate() }; } - -export const queryRepository: QueryRepository = new SQLiteQueryRepository(db); diff --git a/src/lib/repositories/tabs.ts b/src/lib/repositories/tabs.ts index d4df801..b9b22aa 100644 --- a/src/lib/repositories/tabs.ts +++ b/src/lib/repositories/tabs.ts @@ -1,4 +1,4 @@ -import { db, type Database } from '$lib/database'; +import type { Database } from '$lib/database'; export interface Tab { id: string; @@ -12,7 +12,7 @@ export interface TabRepository { save(tabs: Tab[], activeIndex: number): Promise; } -class SQLiteTabRepository implements TabRepository { +export class SQLiteTabRepository implements TabRepository { constructor(private db: Database) {} async get(): Promise<[tabs: Tab[], activeIndex: number]> { @@ -51,5 +51,3 @@ function row_to_tab(row: Awaited>[number]): Tab { query_id: row.query_id as number | undefined }; } - -export const tabRepository: TabRepository = new SQLiteTabRepository(db); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5c095ea..380dd51 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -12,6 +12,7 @@ import TabComponent from '$lib/components/Tab.svelte'; import TimeCounter from '$lib/components/TimeCounter.svelte'; import { setAppContext } from '$lib/context'; + import { Database } from '$lib/database'; import { FileDropEventManager } from '$lib/FileDropEventManager'; import Bars3 from '$lib/icons/Bars3.svelte'; import Bold from '$lib/icons/Bold.svelte'; @@ -25,15 +26,28 @@ import type { Table } from '$lib/olap-engine'; import { engine, type OLAPResponse } from '$lib/olap-engine'; import { PanelState } from '$lib/PanelState.svelte'; - import { historyRepository, type HistoryEntry } from '$lib/repositories/history'; - import { queryRepository, type Query } from '$lib/repositories/queries'; - import { tabRepository, type Tab } from '$lib/repositories/tabs'; + import { + SQLiteHistoryRepository, + type HistoryEntry, + type HistoryRepository + } from '$lib/repositories/history'; + import { + SQLiteQueryRepository, + type Query, + type QueryRepository + } from '$lib/repositories/queries'; + import { SQLiteTabRepository, type Tab, type TabRepository } from '$lib/repositories/tabs'; import { IndexedDBCache } from '@agnosticeng/cache'; import { SplitPane } from '@rich_harris/svelte-split-pane'; import debounce from 'p-debounce'; import { format } from 'sql-formatter'; import { tick, type ComponentProps } from 'svelte'; + const db = new Database(); + const historyRepository: HistoryRepository = new SQLiteHistoryRepository(db); + const queryRepository: QueryRepository = new SQLiteQueryRepository(db); + const tabRepository: TabRepository = new SQLiteTabRepository(db); + let response = $state.raw(); let loading = $state(false); let counter = $state>();