diff --git a/.changeset/grumpy-years-lick.md b/.changeset/grumpy-years-lick.md new file mode 100644 index 0000000000..92c15eeb6c --- /dev/null +++ b/.changeset/grumpy-years-lick.md @@ -0,0 +1,5 @@ +--- +"@astrojs/db": patch +--- + +Remove `db.transaction()` from type definitions until it is supported by our remote database adapter. diff --git a/packages/db/src/runtime/config.ts b/packages/db/src/runtime/config.ts index e4b4fcb596..337d89fcd8 100644 --- a/packages/db/src/runtime/config.ts +++ b/packages/db/src/runtime/config.ts @@ -10,7 +10,9 @@ import type { TextColumnOpts, } from '../core/types.js'; -export type { LibSQLDatabase } from 'drizzle-orm/libsql'; +import type { LibSQLDatabase } from 'drizzle-orm/libsql'; + +export type Database = Omit; function createColumn>(type: S, schema: T) { return { diff --git a/packages/db/src/runtime/db-client.ts b/packages/db/src/runtime/db-client.ts index e3d142dd2f..fe25d8c43f 100644 --- a/packages/db/src/runtime/db-client.ts +++ b/packages/db/src/runtime/db-client.ts @@ -2,17 +2,28 @@ import type { InStatement } from '@libsql/client'; import { createClient } from '@libsql/client'; import type { LibSQLDatabase } from 'drizzle-orm/libsql'; import { drizzle as drizzleLibsql } from 'drizzle-orm/libsql'; -import { drizzle as drizzleProxy } from 'drizzle-orm/sqlite-proxy'; +import { type SqliteRemoteDatabase, drizzle as drizzleProxy } from 'drizzle-orm/sqlite-proxy'; import { z } from 'zod'; import { safeFetch } from './utils.js'; const isWebContainer = !!process.versions?.webcontainer; +function applyTransactionNotSupported(db: SqliteRemoteDatabase) { + Object.assign(db, { + transaction() { + throw new Error( + '`db.transaction()` is not currently supported. We recommend `db.batch()` for automatic error rollbacks across multiple queries.' + ); + }, + }); +} + export function createLocalDatabaseClient({ dbUrl }: { dbUrl: string }): LibSQLDatabase { const url = isWebContainer ? 'file:content.db' : dbUrl; const client = createClient({ url }); const db = drizzleLibsql(client); + applyTransactionNotSupported(db); return db; } @@ -131,5 +142,6 @@ export function createRemoteDatabaseClient(appToken: string, remoteDbURL: string return results; } ); + applyTransactionNotSupported(db); return db; } diff --git a/packages/db/virtual.d.ts b/packages/db/virtual.d.ts index d522736b21..74e9e083a7 100644 --- a/packages/db/virtual.d.ts +++ b/packages/db/virtual.d.ts @@ -1,7 +1,7 @@ declare module 'astro:db' { type RuntimeConfig = typeof import('./dist/_internal/runtime/config.js'); - export const db: import('./dist/_internal/runtime/config.js').LibSQLDatabase; + export const db: import('./dist/_internal/runtime/config.js').Database; export const dbUrl: string; export const sql: RuntimeConfig['sql'];