@prisma-next/driver-sqlite 0.12.0 → 0.13.0-dev.2

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.
@@ -1,8 +1,9 @@
1
1
  import { DatabaseSync } from "node:sqlite";
2
- import { ControlDriverDescriptor, ControlDriverInstance } from "@prisma-next/framework-components/control";
2
+ import { ControlDriverDescriptor } from "@prisma-next/framework-components/control";
3
+ import { SqlControlDriverInstance } from "@prisma-next/sql-contract/types";
3
4
 
4
5
  //#region src/core/control-driver.d.ts
5
- declare class SqliteControlDriver implements ControlDriverInstance<'sql', 'sqlite'> {
6
+ declare class SqliteControlDriver implements SqlControlDriverInstance<'sqlite'> {
6
7
  private readonly db;
7
8
  readonly familyId: "sql";
8
9
  readonly targetId: "sqlite";
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/control-driver.ts"],"mappings":";;;;cAUa,mBAAA,YAA+B,qBAAA;EAAA,iBAIb,EAAA;EAAA,SAHpB,QAAA;EAAA,SACA,QAAA;cAEoB,EAAA,EAAI,YAAA;EAE3B,KAAA,OAAY,MAAA,kBAAA,CAChB,GAAA,UACA,MAAA,wBACC,OAAA;IAAA,SAAmB,IAAA,EAAM,GAAA;EAAA;EAUtB,KAAA,CAAA,GAAS,OAAA;AAAA;AAAA,cAKX,sBAAA,EAAwB,uBAAuB,kBAAkB,mBAAA"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/control-driver.ts"],"mappings":";;;;;cAQa,mBAAA,YAA+B,wBAAA;EAAA,iBAIb,EAAA;EAAA,SAHpB,QAAA;EAAA,SACA,QAAA;cAEoB,EAAA,EAAI,YAAA;EAE3B,KAAA,OAAY,MAAA,mBAChB,GAAA,UACA,MAAA,wBACC,OAAA;IAAA,SAAmB,IAAA,EAAM,GAAA;EAAA;EAUtB,KAAA,IAAS,OAAA;AAAA;AAAA,cAKX,sBAAA,EAAwB,uBAAuB,kBAAkB,mBAAA"}
package/dist/control.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-BN3Vu2l_.mjs";
1
+ import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-Cf640TDu.mjs";
2
2
  import { DatabaseSync } from "node:sqlite";
3
3
  import { errorRuntime } from "@prisma-next/errors/execution";
4
4
  //#region src/core/control-driver.ts
@@ -1 +1 @@
1
- {"version":3,"file":"control.mjs","names":[],"sources":["../src/core/control-driver.ts"],"sourcesContent":["import type { SQLInputValue } from 'node:sqlite';\nimport { DatabaseSync } from 'node:sqlite';\nimport { errorRuntime } from '@prisma-next/errors/execution';\nimport type {\n ControlDriverDescriptor,\n ControlDriverInstance,\n} from '@prisma-next/framework-components/control';\nimport { normalizeSqliteError } from '../normalize-error';\nimport { sqliteDriverDescriptorMeta } from './descriptor-meta';\n\nexport class SqliteControlDriver implements ControlDriverInstance<'sql', 'sqlite'> {\n readonly familyId = 'sql' as const;\n readonly targetId = 'sqlite' as const;\n\n constructor(private readonly db: DatabaseSync) {}\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<{ readonly rows: Row[] }> {\n try {\n const stmt = this.db.prepare(sql);\n const rows = stmt.all(...((params ?? []) as SQLInputValue[])) as Row[];\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async close(): Promise<void> {\n this.db.close();\n }\n}\n\nconst sqliteDriverDescriptor: ControlDriverDescriptor<'sql', 'sqlite', SqliteControlDriver> = {\n ...sqliteDriverDescriptorMeta,\n async create(pathOrMemory: string): Promise<SqliteControlDriver> {\n try {\n const db = new DatabaseSync(pathOrMemory);\n db.exec('PRAGMA foreign_keys = ON');\n return new SqliteControlDriver(db);\n } catch (error) {\n throw errorRuntime('Database connection failed', {\n why: error instanceof Error ? error.message : String(error),\n fix: 'Verify the database file path exists and is accessible',\n meta: {\n path: pathOrMemory,\n },\n });\n }\n },\n};\n\nexport default sqliteDriverDescriptor;\n"],"mappings":";;;;AAUA,IAAa,sBAAb,MAAmF;CAIpD;CAH7B,WAAoB;CACpB,WAAoB;CAEpB,YAAY,IAAmC;EAAlB,KAAA,KAAA;CAAmB;CAEhD,MAAM,MACJ,KACA,QACmC;EACnC,IAAI;GAGF,OAAO,EAAE,MAFI,KAAK,GAAG,QAAQ,GACb,EAAE,IAAI,GAAK,UAAU,CAAC,CAC1B,EAAE;EAChB,SAAS,OAAO;GACd,MAAM,qBAAqB,KAAK;EAClC;CACF;CAEA,MAAM,QAAuB;EAC3B,KAAK,GAAG,MAAM;CAChB;AACF;AAEA,MAAM,yBAAwF;CAC5F,GAAG;CACH,MAAM,OAAO,cAAoD;EAC/D,IAAI;GACF,MAAM,KAAK,IAAI,aAAa,YAAY;GACxC,GAAG,KAAK,0BAA0B;GAClC,OAAO,IAAI,oBAAoB,EAAE;EACnC,SAAS,OAAO;GACd,MAAM,aAAa,8BAA8B;IAC/C,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IAC1D,KAAK;IACL,MAAM,EACJ,MAAM,aACR;GACF,CAAC;EACH;CACF;AACF"}
1
+ {"version":3,"file":"control.mjs","names":[],"sources":["../src/core/control-driver.ts"],"sourcesContent":["import type { SQLInputValue } from 'node:sqlite';\nimport { DatabaseSync } from 'node:sqlite';\nimport { errorRuntime } from '@prisma-next/errors/execution';\nimport type { ControlDriverDescriptor } from '@prisma-next/framework-components/control';\nimport type { SqlControlDriverInstance } from '@prisma-next/sql-contract/types';\nimport { normalizeSqliteError } from '../normalize-error';\nimport { sqliteDriverDescriptorMeta } from './descriptor-meta';\n\nexport class SqliteControlDriver implements SqlControlDriverInstance<'sqlite'> {\n readonly familyId = 'sql' as const;\n readonly targetId = 'sqlite' as const;\n\n constructor(private readonly db: DatabaseSync) {}\n\n async query<Row = Record<string, unknown>>(\n sql: string,\n params?: readonly unknown[],\n ): Promise<{ readonly rows: Row[] }> {\n try {\n const stmt = this.db.prepare(sql);\n const rows = stmt.all(...((params ?? []) as SQLInputValue[])) as Row[];\n return { rows };\n } catch (error) {\n throw normalizeSqliteError(error);\n }\n }\n\n async close(): Promise<void> {\n this.db.close();\n }\n}\n\nconst sqliteDriverDescriptor: ControlDriverDescriptor<'sql', 'sqlite', SqliteControlDriver> = {\n ...sqliteDriverDescriptorMeta,\n async create(pathOrMemory: string): Promise<SqliteControlDriver> {\n try {\n const db = new DatabaseSync(pathOrMemory);\n db.exec('PRAGMA foreign_keys = ON');\n return new SqliteControlDriver(db);\n } catch (error) {\n throw errorRuntime('Database connection failed', {\n why: error instanceof Error ? error.message : String(error),\n fix: 'Verify the database file path exists and is accessible',\n meta: {\n path: pathOrMemory,\n },\n });\n }\n },\n};\n\nexport default sqliteDriverDescriptor;\n"],"mappings":";;;;AAQA,IAAa,sBAAb,MAA+E;CAIhD;CAH7B,WAAoB;CACpB,WAAoB;CAEpB,YAAY,IAAmC;EAAlB,KAAA,KAAA;CAAmB;CAEhD,MAAM,MACJ,KACA,QACmC;EACnC,IAAI;GAGF,OAAO,EAAE,MAFI,KAAK,GAAG,QAAQ,GACb,CAAC,CAAC,IAAI,GAAK,UAAU,CAAC,CAC1B,EAAE;EAChB,SAAS,OAAO;GACd,MAAM,qBAAqB,KAAK;EAClC;CACF;CAEA,MAAM,QAAuB;EAC3B,KAAK,GAAG,MAAM;CAChB;AACF;AAEA,MAAM,yBAAwF;CAC5F,GAAG;CACH,MAAM,OAAO,cAAoD;EAC/D,IAAI;GACF,MAAM,KAAK,IAAI,aAAa,YAAY;GACxC,GAAG,KAAK,0BAA0B;GAClC,OAAO,IAAI,oBAAoB,EAAE;EACnC,SAAS,OAAO;GACd,MAAM,aAAa,8BAA8B;IAC/C,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IAC1D,KAAK;IACL,MAAM,EACJ,MAAM,aACR;GACF,CAAC;EACH;CACF;AACF"}
@@ -69,4 +69,4 @@ const sqliteDriverDescriptorMeta = {
69
69
  //#endregion
70
70
  export { normalizeSqliteError as n, sqliteDriverDescriptorMeta as t };
71
71
 
72
- //# sourceMappingURL=descriptor-meta-BN3Vu2l_.mjs.map
72
+ //# sourceMappingURL=descriptor-meta-Cf640TDu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-meta-BN3Vu2l_.mjs","names":["sqliteErr"],"sources":["../src/normalize-error.ts","../src/core/descriptor-meta.ts"],"sourcesContent":["import { SqlConnectionError, SqlQueryError } from '@prisma-next/sql-errors';\n\ninterface SqliteError extends Error {\n readonly code?: string;\n readonly errcode?: number;\n readonly errstr?: string;\n}\n\n// SQLite extended error code ranges (base code * 256 + extended)\n// Base code 19 = SQLITE_CONSTRAINT\nconst SQLITE_CONSTRAINT_BASE = 19;\nconst SQLITE_CONSTRAINT_UNIQUE = 2067; // 19 + 8*256\nconst SQLITE_CONSTRAINT_PRIMARYKEY = 1555; // 19 + 6*256\nconst SQLITE_CONSTRAINT_FOREIGNKEY = 787; // 19 + 3*256\nconst SQLITE_CONSTRAINT_NOTNULL = 1299; // 19 + 5*256\nconst SQLITE_CONSTRAINT_CHECK = 275; // 19 + 1*256\n\n// Base code 5 = SQLITE_BUSY\nconst SQLITE_BUSY = 5;\n// Base code 6 = SQLITE_LOCKED\nconst SQLITE_LOCKED = 6;\n\nfunction isConstraintError(errcode: number): boolean {\n return (errcode & 0xff) === SQLITE_CONSTRAINT_BASE;\n}\n\nfunction isBusyOrLocked(errcode: number): boolean {\n const base = errcode & 0xff;\n return base === SQLITE_BUSY || base === SQLITE_LOCKED;\n}\n\nexport function isSqliteError(error: unknown): error is SqliteError {\n if (!(error instanceof Error)) {\n return false;\n }\n return (error as SqliteError).code === 'ERR_SQLITE_ERROR';\n}\n\nfunction constraintNameFromMessage(message: string): string | undefined {\n // SQLite constraint messages follow patterns like:\n // \"UNIQUE constraint failed: table.column\"\n // \"FOREIGN KEY constraint failed\"\n // \"NOT NULL constraint failed: table.column\"\n const match = /constraint failed: (.+)/.exec(message);\n return match?.[1];\n}\n\nfunction mapErrCodeToSqlState(errcode: number): string {\n switch (errcode) {\n case SQLITE_CONSTRAINT_UNIQUE:\n case SQLITE_CONSTRAINT_PRIMARYKEY:\n return '23505'; // unique_violation\n case SQLITE_CONSTRAINT_FOREIGNKEY:\n return '23503'; // foreign_key_violation\n case SQLITE_CONSTRAINT_NOTNULL:\n return '23502'; // not_null_violation\n case SQLITE_CONSTRAINT_CHECK:\n return '23514'; // check_violation\n default:\n if (isConstraintError(errcode)) {\n return '23000'; // integrity_constraint_violation\n }\n return 'HY000'; // general error\n }\n}\n\nexport function normalizeSqliteError(error: unknown): SqlQueryError | SqlConnectionError | Error {\n if (!(error instanceof Error)) {\n return new Error(String(error));\n }\n\n if (isSqliteError(error)) {\n const sqliteErr = error as SqliteError;\n const errcode = sqliteErr.errcode ?? 0;\n\n if (isBusyOrLocked(errcode)) {\n return new SqlConnectionError(error.message, {\n cause: error,\n transient: true,\n });\n }\n\n const sqlState = mapErrCodeToSqlState(errcode);\n const constraint = constraintNameFromMessage(error.message);\n\n return new SqlQueryError(error.message, {\n cause: error,\n sqlState,\n ...(constraint !== undefined ? { constraint } : {}),\n });\n }\n\n // Connection-related Node.js errors\n if (\n error.message.includes('database is locked') ||\n error.message.includes('unable to open database')\n ) {\n return new SqlConnectionError(error.message, {\n cause: error,\n transient: false,\n });\n }\n\n return error;\n}\n","export const sqliteDriverDescriptorMeta = {\n kind: 'driver',\n familyId: 'sql',\n targetId: 'sqlite',\n id: 'sqlite',\n version: '0.0.1',\n capabilities: {},\n} as const;\n"],"mappings":";;AAUA,MAAM,yBAAyB;AAC/B,MAAM,2BAA2B;AACjC,MAAM,+BAA+B;AACrC,MAAM,+BAA+B;AACrC,MAAM,4BAA4B;AAClC,MAAM,0BAA0B;AAGhC,MAAM,cAAc;AAEpB,MAAM,gBAAgB;AAEtB,SAAS,kBAAkB,SAA0B;CACnD,QAAQ,UAAU,SAAU;AAC9B;AAEA,SAAS,eAAe,SAA0B;CAChD,MAAM,OAAO,UAAU;CACvB,OAAO,SAAS,eAAe,SAAS;AAC1C;AAEA,SAAgB,cAAc,OAAsC;CAClE,IAAI,EAAE,iBAAiB,QACrB,OAAO;CAET,OAAQ,MAAsB,SAAS;AACzC;AAEA,SAAS,0BAA0B,SAAqC;CAMtE,OADc,0BAA0B,KAAK,OAClC,IAAI;AACjB;AAEA,SAAS,qBAAqB,SAAyB;CACrD,QAAQ,SAAR;EACE,KAAK;EACL,KAAK,8BACH,OAAO;EACT,KAAK,8BACH,OAAO;EACT,KAAK,2BACH,OAAO;EACT,KAAK,yBACH,OAAO;EACT;GACE,IAAI,kBAAkB,OAAO,GAC3B,OAAO;GAET,OAAO;CACX;AACF;AAEA,SAAgB,qBAAqB,OAA4D;CAC/F,IAAI,EAAE,iBAAiB,QACrB,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;CAGhC,IAAI,cAAc,KAAK,GAAG;EAExB,MAAM,UAAUA,MAAU,WAAW;EAErC,IAAI,eAAe,OAAO,GACxB,OAAO,IAAI,mBAAmB,MAAM,SAAS;GAC3C,OAAO;GACP,WAAW;EACb,CAAC;EAGH,MAAM,WAAW,qBAAqB,OAAO;EAC7C,MAAM,aAAa,0BAA0B,MAAM,OAAO;EAE1D,OAAO,IAAI,cAAc,MAAM,SAAS;GACtC,OAAO;GACP;GACA,GAAI,eAAe,KAAA,IAAY,EAAE,WAAW,IAAI,CAAC;EACnD,CAAC;CACH;CAGA,IACE,MAAM,QAAQ,SAAS,oBAAoB,KAC3C,MAAM,QAAQ,SAAS,yBAAyB,GAEhD,OAAO,IAAI,mBAAmB,MAAM,SAAS;EAC3C,OAAO;EACP,WAAW;CACb,CAAC;CAGH,OAAO;AACT;;;ACxGA,MAAa,6BAA6B;CACxC,MAAM;CACN,UAAU;CACV,UAAU;CACV,IAAI;CACJ,SAAS;CACT,cAAc,CAAC;AACjB"}
1
+ {"version":3,"file":"descriptor-meta-Cf640TDu.mjs","names":["sqliteErr"],"sources":["../src/normalize-error.ts","../src/core/descriptor-meta.ts"],"sourcesContent":["import { SqlConnectionError, SqlQueryError } from '@prisma-next/sql-errors';\n\ninterface SqliteError extends Error {\n readonly code?: string;\n readonly errcode?: number;\n readonly errstr?: string;\n}\n\n// SQLite extended error code ranges (base code * 256 + extended)\n// Base code 19 = SQLITE_CONSTRAINT\nconst SQLITE_CONSTRAINT_BASE = 19;\nconst SQLITE_CONSTRAINT_UNIQUE = 2067; // 19 + 8*256\nconst SQLITE_CONSTRAINT_PRIMARYKEY = 1555; // 19 + 6*256\nconst SQLITE_CONSTRAINT_FOREIGNKEY = 787; // 19 + 3*256\nconst SQLITE_CONSTRAINT_NOTNULL = 1299; // 19 + 5*256\nconst SQLITE_CONSTRAINT_CHECK = 275; // 19 + 1*256\n\n// Base code 5 = SQLITE_BUSY\nconst SQLITE_BUSY = 5;\n// Base code 6 = SQLITE_LOCKED\nconst SQLITE_LOCKED = 6;\n\nfunction isConstraintError(errcode: number): boolean {\n return (errcode & 0xff) === SQLITE_CONSTRAINT_BASE;\n}\n\nfunction isBusyOrLocked(errcode: number): boolean {\n const base = errcode & 0xff;\n return base === SQLITE_BUSY || base === SQLITE_LOCKED;\n}\n\nexport function isSqliteError(error: unknown): error is SqliteError {\n if (!(error instanceof Error)) {\n return false;\n }\n return (error as SqliteError).code === 'ERR_SQLITE_ERROR';\n}\n\nfunction constraintNameFromMessage(message: string): string | undefined {\n // SQLite constraint messages follow patterns like:\n // \"UNIQUE constraint failed: table.column\"\n // \"FOREIGN KEY constraint failed\"\n // \"NOT NULL constraint failed: table.column\"\n const match = /constraint failed: (.+)/.exec(message);\n return match?.[1];\n}\n\nfunction mapErrCodeToSqlState(errcode: number): string {\n switch (errcode) {\n case SQLITE_CONSTRAINT_UNIQUE:\n case SQLITE_CONSTRAINT_PRIMARYKEY:\n return '23505'; // unique_violation\n case SQLITE_CONSTRAINT_FOREIGNKEY:\n return '23503'; // foreign_key_violation\n case SQLITE_CONSTRAINT_NOTNULL:\n return '23502'; // not_null_violation\n case SQLITE_CONSTRAINT_CHECK:\n return '23514'; // check_violation\n default:\n if (isConstraintError(errcode)) {\n return '23000'; // integrity_constraint_violation\n }\n return 'HY000'; // general error\n }\n}\n\nexport function normalizeSqliteError(error: unknown): SqlQueryError | SqlConnectionError | Error {\n if (!(error instanceof Error)) {\n return new Error(String(error));\n }\n\n if (isSqliteError(error)) {\n const sqliteErr = error as SqliteError;\n const errcode = sqliteErr.errcode ?? 0;\n\n if (isBusyOrLocked(errcode)) {\n return new SqlConnectionError(error.message, {\n cause: error,\n transient: true,\n });\n }\n\n const sqlState = mapErrCodeToSqlState(errcode);\n const constraint = constraintNameFromMessage(error.message);\n\n return new SqlQueryError(error.message, {\n cause: error,\n sqlState,\n ...(constraint !== undefined ? { constraint } : {}),\n });\n }\n\n // Connection-related Node.js errors\n if (\n error.message.includes('database is locked') ||\n error.message.includes('unable to open database')\n ) {\n return new SqlConnectionError(error.message, {\n cause: error,\n transient: false,\n });\n }\n\n return error;\n}\n","export const sqliteDriverDescriptorMeta = {\n kind: 'driver',\n familyId: 'sql',\n targetId: 'sqlite',\n id: 'sqlite',\n version: '0.0.1',\n capabilities: {},\n} as const;\n"],"mappings":";;AAUA,MAAM,yBAAyB;AAC/B,MAAM,2BAA2B;AACjC,MAAM,+BAA+B;AACrC,MAAM,+BAA+B;AACrC,MAAM,4BAA4B;AAClC,MAAM,0BAA0B;AAGhC,MAAM,cAAc;AAEpB,MAAM,gBAAgB;AAEtB,SAAS,kBAAkB,SAA0B;CACnD,QAAQ,UAAU,SAAU;AAC9B;AAEA,SAAS,eAAe,SAA0B;CAChD,MAAM,OAAO,UAAU;CACvB,OAAO,SAAS,eAAe,SAAS;AAC1C;AAEA,SAAgB,cAAc,OAAsC;CAClE,IAAI,EAAE,iBAAiB,QACrB,OAAO;CAET,OAAQ,MAAsB,SAAS;AACzC;AAEA,SAAS,0BAA0B,SAAqC;CAMtE,OADc,0BAA0B,KAAK,OAClC,CAAC,GAAG;AACjB;AAEA,SAAS,qBAAqB,SAAyB;CACrD,QAAQ,SAAR;EACE,KAAK;EACL,KAAK,8BACH,OAAO;EACT,KAAK,8BACH,OAAO;EACT,KAAK,2BACH,OAAO;EACT,KAAK,yBACH,OAAO;EACT;GACE,IAAI,kBAAkB,OAAO,GAC3B,OAAO;GAET,OAAO;CACX;AACF;AAEA,SAAgB,qBAAqB,OAA4D;CAC/F,IAAI,EAAE,iBAAiB,QACrB,OAAO,IAAI,MAAM,OAAO,KAAK,CAAC;CAGhC,IAAI,cAAc,KAAK,GAAG;EAExB,MAAM,UAAUA,MAAU,WAAW;EAErC,IAAI,eAAe,OAAO,GACxB,OAAO,IAAI,mBAAmB,MAAM,SAAS;GAC3C,OAAO;GACP,WAAW;EACb,CAAC;EAGH,MAAM,WAAW,qBAAqB,OAAO;EAC7C,MAAM,aAAa,0BAA0B,MAAM,OAAO;EAE1D,OAAO,IAAI,cAAc,MAAM,SAAS;GACtC,OAAO;GACP;GACA,GAAI,eAAe,KAAA,IAAY,EAAE,WAAW,IAAI,CAAC;EACnD,CAAC;CACH;CAGA,IACE,MAAM,QAAQ,SAAS,oBAAoB,KAC3C,MAAM,QAAQ,SAAS,yBAAyB,GAEhD,OAAO,IAAI,mBAAmB,MAAM,SAAS;EAC3C,OAAO;EACP,WAAW;CACb,CAAC;CAGH,OAAO;AACT;;;ACxGA,MAAa,6BAA6B;CACxC,MAAM;CACN,UAAU;CACV,UAAU;CACV,IAAI;CACJ,SAAS;CACT,cAAc,CAAC;AACjB"}
package/dist/runtime.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-BN3Vu2l_.mjs";
1
+ import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-Cf640TDu.mjs";
2
2
  import { DatabaseSync } from "node:sqlite";
3
3
  //#region src/sqlite-driver.ts
4
4
  function driverError(code, message, details) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":["#db","#state","#requireConnected"],"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 PreparedExecuteRequest,\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 executePrepared<Row = Record<string, unknown>>(\n request: PreparedExecuteRequest,\n ): AsyncIterable<Row> {\n return this.execute<Row>({ sql: request.sql, params: request.params });\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 executePrepared<Row = Record<string, unknown>>(\n request: PreparedExecuteRequest,\n ): AsyncIterable<Row> {\n return this.execute<Row>({ sql: request.sql, params: request.params });\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 executePrepared<Row = Record<string, unknown>>(\n request: PreparedExecuteRequest,\n ): 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.executePrepared<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"],"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 PreparedExecuteRequest,\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 executePrepared<Row = Record<string, unknown>>(\n request: PreparedExecuteRequest,\n ): AsyncIterable<Row> {\n return this.execute<Row>({ sql: request.sql, params: request.params });\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 executePrepared<Row = Record<string, unknown>>(\n request: PreparedExecuteRequest,\n ): AsyncIterable<Row> {\n return this.execute<Row>({ sql: request.sql, params: request.params });\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 executePrepared<Row = Record<string, unknown>>(\n request: PreparedExecuteRequest,\n ): 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.executePrepared<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,26 +1,26 @@
1
1
  {
2
2
  "name": "@prisma-next/driver-sqlite",
3
- "version": "0.12.0",
3
+ "version": "0.13.0-dev.2",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "dependencies": {
8
- "@prisma-next/contract": "0.12.0",
9
- "@prisma-next/errors": "0.12.0",
10
- "@prisma-next/framework-components": "0.12.0",
11
- "@prisma-next/sql-contract": "0.12.0",
12
- "@prisma-next/sql-errors": "0.12.0",
13
- "@prisma-next/sql-operations": "0.12.0",
14
- "@prisma-next/sql-relational-core": "0.12.0",
15
- "@prisma-next/utils": "0.12.0"
8
+ "@prisma-next/contract": "0.13.0-dev.2",
9
+ "@prisma-next/errors": "0.13.0-dev.2",
10
+ "@prisma-next/framework-components": "0.13.0-dev.2",
11
+ "@prisma-next/sql-contract": "0.13.0-dev.2",
12
+ "@prisma-next/sql-errors": "0.13.0-dev.2",
13
+ "@prisma-next/sql-operations": "0.13.0-dev.2",
14
+ "@prisma-next/sql-relational-core": "0.13.0-dev.2",
15
+ "@prisma-next/utils": "0.13.0-dev.2"
16
16
  },
17
17
  "devDependencies": {
18
- "@prisma-next/test-utils": "0.12.0",
19
- "@prisma-next/tsconfig": "0.12.0",
20
- "@prisma-next/tsdown": "0.12.0",
21
- "tsdown": "0.22.0",
18
+ "@prisma-next/test-utils": "0.13.0-dev.2",
19
+ "@prisma-next/tsconfig": "0.13.0-dev.2",
20
+ "@prisma-next/tsdown": "0.13.0-dev.2",
21
+ "tsdown": "0.22.1",
22
22
  "typescript": "5.9.3",
23
- "vitest": "4.1.6"
23
+ "vitest": "4.1.8"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "typescript": ">=5.9"
@@ -1,14 +1,12 @@
1
1
  import type { SQLInputValue } from 'node:sqlite';
2
2
  import { DatabaseSync } from 'node:sqlite';
3
3
  import { errorRuntime } from '@prisma-next/errors/execution';
4
- import type {
5
- ControlDriverDescriptor,
6
- ControlDriverInstance,
7
- } from '@prisma-next/framework-components/control';
4
+ import type { ControlDriverDescriptor } from '@prisma-next/framework-components/control';
5
+ import type { SqlControlDriverInstance } from '@prisma-next/sql-contract/types';
8
6
  import { normalizeSqliteError } from '../normalize-error';
9
7
  import { sqliteDriverDescriptorMeta } from './descriptor-meta';
10
8
 
11
- export class SqliteControlDriver implements ControlDriverInstance<'sql', 'sqlite'> {
9
+ export class SqliteControlDriver implements SqlControlDriverInstance<'sqlite'> {
12
10
  readonly familyId = 'sql' as const;
13
11
  readonly targetId = 'sqlite' as const;
14
12