@prisma-next/driver-sqlite 0.4.0-dev.8 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/runtime.mjs CHANGED
@@ -67,6 +67,9 @@ var SqliteConnectionImpl = class {
67
67
  }
68
68
  }
69
69
  async release() {
70
+ return this.destroy();
71
+ }
72
+ async destroy(_reason) {
70
73
  try {
71
74
  this.#db.close();
72
75
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":["#db","#state","#requireConnected","sqliteRuntimeDriverDescriptor: RuntimeDriverDescriptor<\n 'sql',\n 'sqlite',\n void,\n SqliteRuntimeDriver\n>"],"sources":["../src/sqlite-driver.ts","../src/core/runtime-driver.ts"],"sourcesContent":["import type { SQLInputValue } from 'node:sqlite';\nimport { DatabaseSync } from 'node:sqlite';\nimport type { RuntimeDriverInstance } from '@prisma-next/framework-components/execution';\nimport type {\n SqlConnection,\n SqlDriver,\n SqlDriverState,\n SqlExecuteRequest,\n SqlExplainResult,\n SqlQueryResult,\n SqlTransaction,\n} from '@prisma-next/sql-relational-core/ast';\nimport { normalizeSqliteError } from './normalize-error';\n\nexport type SqliteBinding = { readonly kind: 'path'; readonly path: string };\n\nexport type SqliteRuntimeDriver = RuntimeDriverInstance<'sql', 'sqlite'> & SqlDriver<SqliteBinding>;\n\ninterface DriverRuntimeError extends Error {\n readonly code:\n | 'DRIVER.NOT_CONNECTED'\n | 'DRIVER.ALREADY_CONNECTED'\n | 'DRIVER.EXPLAIN_NOT_SUPPORTED';\n readonly category: 'RUNTIME';\n readonly severity: 'error';\n readonly details?: Record<string, unknown>;\n}\n\nfunction driverError(\n code: DriverRuntimeError['code'],\n message: string,\n details?: Record<string, unknown>,\n): DriverRuntimeError {\n const error = new Error(message) as DriverRuntimeError;\n Object.defineProperty(error, 'name', {\n value: 'RuntimeError',\n configurable: true,\n });\n return Object.assign(error, {\n code,\n category: 'RUNTIME' as const,\n severity: 'error' as const,\n message,\n details,\n });\n}\n\nconst NOT_CONNECTED_MESSAGE =\n 'SQLite driver not connected. Call connect(binding) before acquireConnection or execute.';\nconst ALREADY_CONNECTED_MESSAGE =\n 'SQLite driver already connected. Call close() before reconnecting with a new binding.';\n\nfunction toSqliteParams(params: readonly unknown[] | undefined): SQLInputValue[] {\n return (params ?? []) as SQLInputValue[];\n}\n\nfunction openConnection(path: string): DatabaseSync {\n try {\n const db = new DatabaseSync(path);\n db.exec('PRAGMA foreign_keys = ON');\n db.exec('PRAGMA busy_timeout = 5000');\n return db;\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n}\n\nclass SqliteConnectionImpl implements SqlConnection {\n readonly #db: DatabaseSync;\n\n constructor(db: DatabaseSync) {\n this.#db = db;\n }\n\n async *execute<Row = Record<string, unknown>>(request: SqlExecuteRequest): AsyncIterable<Row> {\n try {\n const stmt = this.#db.prepare(request.sql);\n for (const row of stmt.iterate(...toSqliteParams(request.params))) {\n yield row as Row;\n }\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async explain(request: SqlExecuteRequest): Promise<SqlExplainResult> {\n try {\n const stmt = this.#db.prepare(`EXPLAIN QUERY PLAN ${request.sql}`);\n const rows = stmt.all(...toSqliteParams(request.params)) as ReadonlyArray<\n Record<string, unknown>\n >;\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<SqlQueryResult<Row>> {\n try {\n const stmt = this.#db.prepare(sql);\n const rows = stmt.all(...toSqliteParams(params)) as Row[];\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async beginTransaction(): Promise<SqlTransaction> {\n try {\n this.#db.exec('BEGIN');\n return new SqliteTransactionImpl(this.#db);\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async release(): Promise<void> {\n try {\n this.#db.close();\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n}\n\nclass SqliteTransactionImpl implements SqlTransaction {\n readonly #db: DatabaseSync;\n\n constructor(db: DatabaseSync) {\n this.#db = db;\n }\n\n async *execute<Row = Record<string, unknown>>(request: SqlExecuteRequest): AsyncIterable<Row> {\n try {\n const stmt = this.#db.prepare(request.sql);\n for (const row of stmt.iterate(...toSqliteParams(request.params))) {\n yield row as Row;\n }\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async explain(request: SqlExecuteRequest): Promise<SqlExplainResult> {\n try {\n const stmt = this.#db.prepare(`EXPLAIN QUERY PLAN ${request.sql}`);\n const rows = stmt.all(...toSqliteParams(request.params)) as ReadonlyArray<\n Record<string, unknown>\n >;\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<SqlQueryResult<Row>> {\n try {\n const stmt = this.#db.prepare(sql);\n const rows = stmt.all(...toSqliteParams(params)) as Row[];\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async commit(): Promise<void> {\n try {\n this.#db.exec('COMMIT');\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async rollback(): Promise<void> {\n try {\n this.#db.exec('ROLLBACK');\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n}\n\ninterface ConnectedState {\n readonly kind: 'connected';\n readonly path: string;\n readonly conn: SqliteConnectionImpl;\n}\n\ntype DriverState = { readonly kind: 'unbound' } | ConnectedState | { readonly kind: 'closed' };\n\nexport class SqliteDriver implements SqliteRuntimeDriver {\n readonly familyId = 'sql' as const;\n readonly targetId = 'sqlite' as const;\n\n #state: DriverState;\n\n constructor(initialState?: ConnectedState) {\n this.#state = initialState ?? { kind: 'unbound' };\n }\n\n #requireConnected(): ConnectedState {\n if (this.#state.kind !== 'connected') {\n throw driverError('DRIVER.NOT_CONNECTED', NOT_CONNECTED_MESSAGE);\n }\n return this.#state;\n }\n\n get state(): SqlDriverState {\n return this.#state.kind;\n }\n\n async connect(binding: SqliteBinding): Promise<void> {\n if (this.#state.kind === 'connected') {\n throw driverError('DRIVER.ALREADY_CONNECTED', ALREADY_CONNECTED_MESSAGE, {\n bindingKind: binding.kind,\n });\n }\n this.#state = {\n kind: 'connected',\n path: binding.path,\n conn: new SqliteConnectionImpl(openConnection(binding.path)),\n };\n }\n\n async acquireConnection(): Promise<SqliteConnectionImpl> {\n const { path } = this.#requireConnected();\n return new SqliteConnectionImpl(openConnection(path));\n }\n\n async close(): Promise<void> {\n if (this.#state.kind !== 'connected') return;\n const { conn } = this.#state;\n this.#state = { kind: 'closed' };\n await conn.release();\n }\n\n execute<Row = Record<string, unknown>>(request: SqlExecuteRequest): AsyncIterable<Row> {\n if (this.#state.kind !== 'connected') {\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n throw driverError('DRIVER.NOT_CONNECTED', NOT_CONNECTED_MESSAGE);\n },\n };\n },\n };\n }\n return this.#state.conn.execute<Row>(request);\n }\n\n async explain(request: SqlExecuteRequest): Promise<SqlExplainResult> {\n return this.#requireConnected().conn.explain(request);\n }\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<SqlQueryResult<Row>> {\n return this.#requireConnected().conn.query<Row>(sql, params);\n }\n}\n\nexport function createBoundDriverFromBinding(binding: SqliteBinding): SqliteDriver {\n return new SqliteDriver({\n kind: 'connected',\n path: binding.path,\n conn: new SqliteConnectionImpl(openConnection(binding.path)),\n });\n}\n","import type { RuntimeDriverDescriptor } from '@prisma-next/framework-components/execution';\nimport { SqliteDriver, type SqliteRuntimeDriver } from '../sqlite-driver';\nimport { sqliteDriverDescriptorMeta } from './descriptor-meta';\n\nexport type { SqliteRuntimeDriver } from '../sqlite-driver';\n\nconst sqliteRuntimeDriverDescriptor: RuntimeDriverDescriptor<\n 'sql',\n 'sqlite',\n void,\n SqliteRuntimeDriver\n> = {\n ...sqliteDriverDescriptorMeta,\n create(): SqliteRuntimeDriver {\n return new SqliteDriver();\n },\n};\n\nexport default sqliteRuntimeDriverDescriptor;\n"],"mappings":"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"}
1
+ {"version":3,"file":"runtime.mjs","names":["#db","#state","#requireConnected","sqliteRuntimeDriverDescriptor: RuntimeDriverDescriptor<\n 'sql',\n 'sqlite',\n void,\n SqliteRuntimeDriver\n>"],"sources":["../src/sqlite-driver.ts","../src/core/runtime-driver.ts"],"sourcesContent":["import type { SQLInputValue } from 'node:sqlite';\nimport { DatabaseSync } from 'node:sqlite';\nimport type { RuntimeDriverInstance } from '@prisma-next/framework-components/execution';\nimport type {\n SqlConnection,\n SqlDriver,\n SqlDriverState,\n SqlExecuteRequest,\n SqlExplainResult,\n SqlQueryResult,\n SqlTransaction,\n} from '@prisma-next/sql-relational-core/ast';\nimport { normalizeSqliteError } from './normalize-error';\n\nexport type SqliteBinding = { readonly kind: 'path'; readonly path: string };\n\nexport type SqliteRuntimeDriver = RuntimeDriverInstance<'sql', 'sqlite'> & SqlDriver<SqliteBinding>;\n\ninterface DriverRuntimeError extends Error {\n readonly code:\n | 'DRIVER.NOT_CONNECTED'\n | 'DRIVER.ALREADY_CONNECTED'\n | 'DRIVER.EXPLAIN_NOT_SUPPORTED';\n readonly category: 'RUNTIME';\n readonly severity: 'error';\n readonly details?: Record<string, unknown>;\n}\n\nfunction driverError(\n code: DriverRuntimeError['code'],\n message: string,\n details?: Record<string, unknown>,\n): DriverRuntimeError {\n const error = new Error(message) as DriverRuntimeError;\n Object.defineProperty(error, 'name', {\n value: 'RuntimeError',\n configurable: true,\n });\n return Object.assign(error, {\n code,\n category: 'RUNTIME' as const,\n severity: 'error' as const,\n message,\n details,\n });\n}\n\nconst NOT_CONNECTED_MESSAGE =\n 'SQLite driver not connected. Call connect(binding) before acquireConnection or execute.';\nconst ALREADY_CONNECTED_MESSAGE =\n 'SQLite driver already connected. Call close() before reconnecting with a new binding.';\n\nfunction toSqliteParams(params: readonly unknown[] | undefined): SQLInputValue[] {\n return (params ?? []) as SQLInputValue[];\n}\n\nfunction openConnection(path: string): DatabaseSync {\n try {\n const db = new DatabaseSync(path);\n db.exec('PRAGMA foreign_keys = ON');\n db.exec('PRAGMA busy_timeout = 5000');\n return db;\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n}\n\nexport class SqliteConnectionImpl implements SqlConnection {\n readonly #db: DatabaseSync;\n\n constructor(db: DatabaseSync) {\n this.#db = db;\n }\n\n async *execute<Row = Record<string, unknown>>(request: SqlExecuteRequest): AsyncIterable<Row> {\n try {\n const stmt = this.#db.prepare(request.sql);\n for (const row of stmt.iterate(...toSqliteParams(request.params))) {\n yield row as Row;\n }\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async explain(request: SqlExecuteRequest): Promise<SqlExplainResult> {\n try {\n const stmt = this.#db.prepare(`EXPLAIN QUERY PLAN ${request.sql}`);\n const rows = stmt.all(...toSqliteParams(request.params)) as ReadonlyArray<\n Record<string, unknown>\n >;\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<SqlQueryResult<Row>> {\n try {\n const stmt = this.#db.prepare(sql);\n const rows = stmt.all(...toSqliteParams(params)) as Row[];\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async beginTransaction(): Promise<SqlTransaction> {\n try {\n this.#db.exec('BEGIN');\n return new SqliteTransactionImpl(this.#db);\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async release(): Promise<void> {\n // SQLite connections are not pooled — release is equivalent to destroy\n // (close the underlying DatabaseSync handle).\n return this.destroy();\n }\n\n async destroy(_reason?: unknown): Promise<void> {\n try {\n this.#db.close();\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n}\n\nclass SqliteTransactionImpl implements SqlTransaction {\n readonly #db: DatabaseSync;\n\n constructor(db: DatabaseSync) {\n this.#db = db;\n }\n\n async *execute<Row = Record<string, unknown>>(request: SqlExecuteRequest): AsyncIterable<Row> {\n try {\n const stmt = this.#db.prepare(request.sql);\n for (const row of stmt.iterate(...toSqliteParams(request.params))) {\n yield row as Row;\n }\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async explain(request: SqlExecuteRequest): Promise<SqlExplainResult> {\n try {\n const stmt = this.#db.prepare(`EXPLAIN QUERY PLAN ${request.sql}`);\n const rows = stmt.all(...toSqliteParams(request.params)) as ReadonlyArray<\n Record<string, unknown>\n >;\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<SqlQueryResult<Row>> {\n try {\n const stmt = this.#db.prepare(sql);\n const rows = stmt.all(...toSqliteParams(params)) as Row[];\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async commit(): Promise<void> {\n try {\n this.#db.exec('COMMIT');\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async rollback(): Promise<void> {\n try {\n this.#db.exec('ROLLBACK');\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n}\n\ninterface ConnectedState {\n readonly kind: 'connected';\n readonly path: string;\n readonly conn: SqliteConnectionImpl;\n}\n\ntype DriverState = { readonly kind: 'unbound' } | ConnectedState | { readonly kind: 'closed' };\n\nexport class SqliteDriver implements SqliteRuntimeDriver {\n readonly familyId = 'sql' as const;\n readonly targetId = 'sqlite' as const;\n\n #state: DriverState;\n\n constructor(initialState?: ConnectedState) {\n this.#state = initialState ?? { kind: 'unbound' };\n }\n\n #requireConnected(): ConnectedState {\n if (this.#state.kind !== 'connected') {\n throw driverError('DRIVER.NOT_CONNECTED', NOT_CONNECTED_MESSAGE);\n }\n return this.#state;\n }\n\n get state(): SqlDriverState {\n return this.#state.kind;\n }\n\n async connect(binding: SqliteBinding): Promise<void> {\n if (this.#state.kind === 'connected') {\n throw driverError('DRIVER.ALREADY_CONNECTED', ALREADY_CONNECTED_MESSAGE, {\n bindingKind: binding.kind,\n });\n }\n this.#state = {\n kind: 'connected',\n path: binding.path,\n conn: new SqliteConnectionImpl(openConnection(binding.path)),\n };\n }\n\n async acquireConnection(): Promise<SqliteConnectionImpl> {\n const { path } = this.#requireConnected();\n return new SqliteConnectionImpl(openConnection(path));\n }\n\n async close(): Promise<void> {\n if (this.#state.kind !== 'connected') return;\n const { conn } = this.#state;\n this.#state = { kind: 'closed' };\n await conn.release();\n }\n\n execute<Row = Record<string, unknown>>(request: SqlExecuteRequest): AsyncIterable<Row> {\n if (this.#state.kind !== 'connected') {\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n throw driverError('DRIVER.NOT_CONNECTED', NOT_CONNECTED_MESSAGE);\n },\n };\n },\n };\n }\n return this.#state.conn.execute<Row>(request);\n }\n\n async explain(request: SqlExecuteRequest): Promise<SqlExplainResult> {\n return this.#requireConnected().conn.explain(request);\n }\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<SqlQueryResult<Row>> {\n return this.#requireConnected().conn.query<Row>(sql, params);\n }\n}\n\nexport function createBoundDriverFromBinding(binding: SqliteBinding): SqliteDriver {\n return new SqliteDriver({\n kind: 'connected',\n path: binding.path,\n conn: new SqliteConnectionImpl(openConnection(binding.path)),\n });\n}\n","import type { RuntimeDriverDescriptor } from '@prisma-next/framework-components/execution';\nimport { SqliteDriver, type SqliteRuntimeDriver } from '../sqlite-driver';\nimport { sqliteDriverDescriptorMeta } from './descriptor-meta';\n\nexport type { SqliteRuntimeDriver } from '../sqlite-driver';\n\nconst sqliteRuntimeDriverDescriptor: RuntimeDriverDescriptor<\n 'sql',\n 'sqlite',\n void,\n SqliteRuntimeDriver\n> = {\n ...sqliteDriverDescriptorMeta,\n create(): SqliteRuntimeDriver {\n return new SqliteDriver();\n },\n};\n\nexport default sqliteRuntimeDriverDescriptor;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "@prisma-next/driver-sqlite",
3
- "version": "0.4.0-dev.8",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "dependencies": {
7
- "@prisma-next/contract": "0.4.0-dev.8",
8
- "@prisma-next/framework-components": "0.4.0-dev.8",
9
- "@prisma-next/errors": "0.4.0-dev.8",
10
- "@prisma-next/sql-errors": "0.4.0-dev.8",
11
- "@prisma-next/sql-relational-core": "0.4.0-dev.8",
12
- "@prisma-next/sql-contract": "0.4.0-dev.8",
13
- "@prisma-next/sql-operations": "0.4.0-dev.8",
14
- "@prisma-next/utils": "0.4.0-dev.8"
7
+ "@prisma-next/sql-contract": "0.4.1",
8
+ "@prisma-next/framework-components": "0.4.1",
9
+ "@prisma-next/errors": "0.4.1",
10
+ "@prisma-next/sql-errors": "0.4.1",
11
+ "@prisma-next/sql-operations": "0.4.1",
12
+ "@prisma-next/sql-relational-core": "0.4.1",
13
+ "@prisma-next/contract": "0.4.1",
14
+ "@prisma-next/utils": "0.4.1"
15
15
  },
16
16
  "devDependencies": {
17
17
  "tsdown": "0.18.4",
18
18
  "typescript": "5.9.3",
19
19
  "vitest": "4.0.17",
20
20
  "@prisma-next/test-utils": "0.0.1",
21
- "@prisma-next/tsconfig": "0.0.0",
22
- "@prisma-next/tsdown": "0.0.0"
21
+ "@prisma-next/tsdown": "0.0.0",
22
+ "@prisma-next/tsconfig": "0.0.0"
23
23
  },
24
24
  "files": [
25
25
  "dist",
@@ -65,7 +65,7 @@ function openConnection(path: string): DatabaseSync {
65
65
  }
66
66
  }
67
67
 
68
- class SqliteConnectionImpl implements SqlConnection {
68
+ export class SqliteConnectionImpl implements SqlConnection {
69
69
  readonly #db: DatabaseSync;
70
70
 
71
71
  constructor(db: DatabaseSync) {
@@ -118,6 +118,12 @@ class SqliteConnectionImpl implements SqlConnection {
118
118
  }
119
119
 
120
120
  async release(): Promise<void> {
121
+ // SQLite connections are not pooled — release is equivalent to destroy
122
+ // (close the underlying DatabaseSync handle).
123
+ return this.destroy();
124
+ }
125
+
126
+ async destroy(_reason?: unknown): Promise<void> {
121
127
  try {
122
128
  this.#db.close();
123
129
  } catch (error) {