diff --git a/packages/turso-serverless/src/compat.ts b/packages/turso-serverless/src/compat.ts index 53fc8444a..91ddc0deb 100644 --- a/packages/turso-serverless/src/compat.ts +++ b/packages/turso-serverless/src/compat.ts @@ -1,4 +1,5 @@ import { Connection, connect, type Config as TursoConfig } from './connection.js'; +import { DatabaseError } from './error.js'; /** * Configuration options for creating a libSQL-compatible client. diff --git a/packages/turso-serverless/src/error.ts b/packages/turso-serverless/src/error.ts new file mode 100644 index 000000000..7839d1f3d --- /dev/null +++ b/packages/turso-serverless/src/error.ts @@ -0,0 +1,7 @@ +export class DatabaseError extends Error { + constructor(message: string) { + super(message); + this.name = 'DatabaseError'; + Object.setPrototypeOf(this, DatabaseError.prototype); + } +} \ No newline at end of file diff --git a/packages/turso-serverless/src/index.ts b/packages/turso-serverless/src/index.ts index 996212c40..6f984327a 100644 --- a/packages/turso-serverless/src/index.ts +++ b/packages/turso-serverless/src/index.ts @@ -1,3 +1,4 @@ // Turso serverless driver entry point export { Connection, connect, type Config } from './connection.js'; -export { Statement } from './statement.js'; \ No newline at end of file +export { Statement } from './statement.js'; +export { DatabaseError } from './error.js'; \ No newline at end of file diff --git a/packages/turso-serverless/src/protocol.ts b/packages/turso-serverless/src/protocol.ts index dfe85c4e0..9483bf7a5 100644 --- a/packages/turso-serverless/src/protocol.ts +++ b/packages/turso-serverless/src/protocol.ts @@ -1,3 +1,5 @@ +import { DatabaseError } from './error'; + export interface Value { type: 'null' | 'integer' | 'float' | 'text' | 'blob'; value?: string | number; @@ -165,12 +167,12 @@ export async function executeCursor( } catch { // If we can't parse the error body, use the default HTTP error message } - throw new Error(errorMessage); + throw new DatabaseError(errorMessage); } const reader = response.body?.getReader(); if (!reader) { - throw new Error('No response body'); + throw new DatabaseError('No response body'); } const decoder = new TextDecoder(); @@ -238,7 +240,7 @@ export async function executePipeline( }); if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); + throw new DatabaseError(`HTTP error! status: ${response.status}`); } return response.json(); diff --git a/packages/turso-serverless/src/session.ts b/packages/turso-serverless/src/session.ts index afddee401..f98c623dc 100644 --- a/packages/turso-serverless/src/session.ts +++ b/packages/turso-serverless/src/session.ts @@ -6,6 +6,7 @@ import { type CursorResponse, type CursorEntry } from './protocol.js'; +import { DatabaseError } from './error.js'; /** * Configuration options for a session. @@ -123,7 +124,7 @@ export class Session { break; case 'step_error': case 'error': - throw new Error(entry.error?.message || 'SQL execution failed'); + throw new DatabaseError(entry.error?.message || 'SQL execution failed'); } } @@ -204,7 +205,7 @@ export class Session { break; case 'step_error': case 'error': - throw new Error(entry.error?.message || 'Batch execution failed'); + throw new DatabaseError(entry.error?.message || 'Batch execution failed'); } } diff --git a/packages/turso-serverless/src/statement.ts b/packages/turso-serverless/src/statement.ts index e8dbf2eb0..72907fb2d 100644 --- a/packages/turso-serverless/src/statement.ts +++ b/packages/turso-serverless/src/statement.ts @@ -3,6 +3,7 @@ import { type CursorEntry } from './protocol.js'; import { Session, type SessionConfig } from './session.js'; +import { DatabaseError } from './error.js'; /** * A prepared SQL statement that can be executed in multiple ways. @@ -117,7 +118,7 @@ export class Statement { break; case 'step_error': case 'error': - throw new Error(entry.error?.message || 'SQL execution failed'); + throw new DatabaseError(entry.error?.message || 'SQL execution failed'); } } }