@prisma-next/driver-sqlite 0.5.0-dev.9 → 0.5.0

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 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/control-driver.ts"],"sourcesContent":[],"mappings":";;;;cAUa,mBAAA,YAA+B;;EAA/B,SAAA,QAAA,EAAA,KAAoB;EAIE,SAAA,QAAA,EAAA,QAAA;EAEf,WAAA,CAAA,EAAA,EAFe,YAEf;EAGU,KAAA,CAAA,MAHV,MAGU,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,SAAA,OAAA,EAAA,CAAA,EAAzB,OAAyB,CAAA;IAAzB,SAAA,IAAA,EAAyB,GAAzB,EAAA;EAUY,CAAA,CAAA;EAnB2B,KAAA,CAAA,CAAA,EAmB3B,OAnB2B,CAAA,IAAA,CAAA;;AAsB3C,cAEK,sBAiBL,EAjB6B,uBAAA,CAAA,KAAA,EAAA,QAAA,EAAyC,mBAAlB,CAAA"}
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,uBAAA,kBAAyC,mBAAA"}
package/dist/control.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-DJTTyPb-.mjs";
1
+ import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-BN3Vu2l_.mjs";
2
2
  import { DatabaseSync } from "node:sqlite";
3
3
  import { errorRuntime } from "@prisma-next/errors/execution";
4
-
5
4
  //#region src/core/control-driver.ts
6
5
  var SqliteControlDriver = class {
6
+ db;
7
7
  familyId = "sql";
8
8
  targetId = "sqlite";
9
9
  constructor(db) {
@@ -36,8 +36,7 @@ const sqliteDriverDescriptor = {
36
36
  }
37
37
  }
38
38
  };
39
- var control_driver_default = sqliteDriverDescriptor;
40
-
41
39
  //#endregion
42
- export { SqliteControlDriver, control_driver_default as default };
40
+ export { SqliteControlDriver, sqliteDriverDescriptor as default };
41
+
43
42
  //# sourceMappingURL=control.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"control.mjs","names":["db: DatabaseSync","sqliteDriverDescriptor: ControlDriverDescriptor<'sql', 'sqlite', SqliteControlDriver>"],"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;CACjF,AAAS,WAAW;CACpB,AAAS,WAAW;CAEpB,YAAY,AAAiBA,IAAkB;EAAlB;;CAE7B,MAAM,MACJ,KACA,QACmC;AACnC,MAAI;AAGF,UAAO,EAAE,MAFI,KAAK,GAAG,QAAQ,IAAI,CACf,IAAI,GAAK,UAAU,EAAE,CAAsB,EAC9C;WACR,OAAO;AACd,SAAM,qBAAqB,MAAM;;;CAIrC,MAAM,QAAuB;AAC3B,OAAK,GAAG,OAAO;;;AAInB,MAAMC,yBAAwF;CAC5F,GAAG;CACH,MAAM,OAAO,cAAoD;AAC/D,MAAI;GACF,MAAM,KAAK,IAAI,aAAa,aAAa;AACzC,MAAG,KAAK,2BAA2B;AACnC,UAAO,IAAI,oBAAoB,GAAG;WAC3B,OAAO;AACd,SAAM,aAAa,8BAA8B;IAC/C,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;IAC3D,KAAK;IACL,MAAM,EACJ,MAAM,cACP;IACF,CAAC;;;CAGP;AAED,6BAAe"}
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;;CAE7B,MAAM,MACJ,KACA,QACmC;EACnC,IAAI;GAGF,OAAO,EAAE,MAFI,KAAK,GAAG,QAAQ,IACZ,CAAC,IAAI,GAAK,UAAU,EAAE,CAC1B,EAAE;WACR,OAAO;GACd,MAAM,qBAAqB,MAAM;;;CAIrC,MAAM,QAAuB;EAC3B,KAAK,GAAG,OAAO;;;AAInB,MAAM,yBAAwF;CAC5F,GAAG;CACH,MAAM,OAAO,cAAoD;EAC/D,IAAI;GACF,MAAM,KAAK,IAAI,aAAa,aAAa;GACzC,GAAG,KAAK,2BAA2B;GACnC,OAAO,IAAI,oBAAoB,GAAG;WAC3B,OAAO;GACd,MAAM,aAAa,8BAA8B;IAC/C,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;IAC3D,KAAK;IACL,MAAM,EACJ,MAAM,cACP;IACF,CAAC;;;CAGP"}
@@ -1,5 +1,4 @@
1
1
  import { SqlConnectionError, SqlQueryError } from "@prisma-next/sql-errors";
2
-
3
2
  //#region src/normalize-error.ts
4
3
  const SQLITE_CONSTRAINT_BASE = 19;
5
4
  const SQLITE_CONSTRAINT_UNIQUE = 2067;
@@ -57,7 +56,6 @@ function normalizeSqliteError(error) {
57
56
  });
58
57
  return error;
59
58
  }
60
-
61
59
  //#endregion
62
60
  //#region src/core/descriptor-meta.ts
63
61
  const sqliteDriverDescriptorMeta = {
@@ -68,7 +66,7 @@ const sqliteDriverDescriptorMeta = {
68
66
  version: "0.0.1",
69
67
  capabilities: {}
70
68
  };
71
-
72
69
  //#endregion
73
70
  export { normalizeSqliteError as n, sqliteDriverDescriptorMeta as t };
74
- //# sourceMappingURL=descriptor-meta-DJTTyPb-.mjs.map
71
+
72
+ //# sourceMappingURL=descriptor-meta-BN3Vu2l_.mjs.map
@@ -0,0 +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;;AAG9B,SAAS,eAAe,SAA0B;CAChD,MAAM,OAAO,UAAU;CACvB,OAAO,SAAS,eAAe,SAAS;;AAG1C,SAAgB,cAAc,OAAsC;CAClE,IAAI,EAAE,iBAAiB,QACrB,OAAO;CAET,OAAQ,MAAsB,SAAS;;AAGzC,SAAS,0BAA0B,SAAqC;CAMtE,OADc,0BAA0B,KAAK,QACjC,GAAG;;AAGjB,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,QAAQ,EAC5B,OAAO;GAET,OAAO;;;AAIb,SAAgB,qBAAqB,OAA4D;CAC/F,IAAI,EAAE,iBAAiB,QACrB,OAAO,IAAI,MAAM,OAAO,MAAM,CAAC;CAGjC,IAAI,cAAc,MAAM,EAAE;EAExB,MAAM,UAAUA,MAAU,WAAW;EAErC,IAAI,eAAe,QAAQ,EACzB,OAAO,IAAI,mBAAmB,MAAM,SAAS;GAC3C,OAAO;GACP,WAAW;GACZ,CAAC;EAGJ,MAAM,WAAW,qBAAqB,QAAQ;EAC9C,MAAM,aAAa,0BAA0B,MAAM,QAAQ;EAE3D,OAAO,IAAI,cAAc,MAAM,SAAS;GACtC,OAAO;GACP;GACA,GAAI,eAAe,KAAA,IAAY,EAAE,YAAY,GAAG,EAAE;GACnD,CAAC;;CAIJ,IACE,MAAM,QAAQ,SAAS,qBAAqB,IAC5C,MAAM,QAAQ,SAAS,0BAA0B,EAEjD,OAAO,IAAI,mBAAmB,MAAM,SAAS;EAC3C,OAAO;EACP,WAAW;EACZ,CAAC;CAGJ,OAAO;;;;ACvGT,MAAa,6BAA6B;CACxC,MAAM;CACN,UAAU;CACV,UAAU;CACV,IAAI;CACJ,SAAS;CACT,cAAc,EAAE;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/sqlite-driver.ts","../src/core/runtime-driver.ts"],"sourcesContent":[],"mappings":";;;;;KAcY,aAAA;;EAAA,SAAA,IAAA,EAAA,MAAa;AAEzB,CAAA;AAAkC,KAAtB,mBAAA,GAAsB,qBAAA,CAAA,KAAA,EAAA,QAAA,CAAA,GAAyC,SAAzC,CAAmD,aAAnD,CAAA;;;cCV5B,+BAA+B,+CAInC"}
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/sqlite-driver.ts","../src/core/runtime-driver.ts"],"mappings":";;;;;KAcY,aAAA;EAAA,SAA2B,IAAA;EAAA,SAAuB,IAAA;AAAA;AAAA,KAElD,mBAAA,GAAsB,qBAAA,oBAAyC,SAAA,CAAU,aAAA;;;cCV/E,6BAAA,EAA+B,uBAAA,wBAInC,mBAAA"}
package/dist/runtime.mjs CHANGED
@@ -1,6 +1,5 @@
1
- import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-DJTTyPb-.mjs";
1
+ import { n as normalizeSqliteError, t as sqliteDriverDescriptorMeta } from "./descriptor-meta-BN3Vu2l_.mjs";
2
2
  import { DatabaseSync } from "node:sqlite";
3
-
4
3
  //#region src/sqlite-driver.ts
5
4
  function driverError(code, message, details) {
6
5
  const error = new Error(message);
@@ -166,7 +165,6 @@ var SqliteDriver = class {
166
165
  return this.#requireConnected().conn.query(sql, params);
167
166
  }
168
167
  };
169
-
170
168
  //#endregion
171
169
  //#region src/core/runtime-driver.ts
172
170
  const sqliteRuntimeDriverDescriptor = {
@@ -175,8 +173,7 @@ const sqliteRuntimeDriverDescriptor = {
175
173
  return new SqliteDriver();
176
174
  }
177
175
  };
178
- var runtime_driver_default = sqliteRuntimeDriverDescriptor;
179
-
180
176
  //#endregion
181
- export { runtime_driver_default as default };
177
+ export { sqliteRuntimeDriverDescriptor as default };
178
+
182
179
  //# sourceMappingURL=runtime.mjs.map
@@ -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\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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"}
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 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,22 +1,23 @@
1
1
  {
2
2
  "name": "@prisma-next/driver-sqlite",
3
- "version": "0.5.0-dev.9",
3
+ "version": "0.5.0",
4
+ "license": "Apache-2.0",
4
5
  "type": "module",
5
6
  "sideEffects": false,
6
7
  "dependencies": {
7
- "@prisma-next/contract": "0.5.0-dev.9",
8
- "@prisma-next/errors": "0.5.0-dev.9",
9
- "@prisma-next/framework-components": "0.5.0-dev.9",
10
- "@prisma-next/sql-contract": "0.5.0-dev.9",
11
- "@prisma-next/sql-errors": "0.5.0-dev.9",
12
- "@prisma-next/sql-operations": "0.5.0-dev.9",
13
- "@prisma-next/sql-relational-core": "0.5.0-dev.9",
14
- "@prisma-next/utils": "0.5.0-dev.9"
8
+ "@prisma-next/contract": "0.5.0",
9
+ "@prisma-next/framework-components": "0.5.0",
10
+ "@prisma-next/sql-contract": "0.5.0",
11
+ "@prisma-next/sql-errors": "0.5.0",
12
+ "@prisma-next/utils": "0.5.0",
13
+ "@prisma-next/sql-relational-core": "0.5.0",
14
+ "@prisma-next/sql-operations": "0.5.0",
15
+ "@prisma-next/errors": "0.5.0"
15
16
  },
16
17
  "devDependencies": {
17
- "tsdown": "0.18.4",
18
+ "tsdown": "0.22.0",
18
19
  "typescript": "5.9.3",
19
- "vitest": "4.0.17",
20
+ "vitest": "4.1.5",
20
21
  "@prisma-next/test-utils": "0.0.1",
21
22
  "@prisma-next/tsconfig": "0.0.0",
22
23
  "@prisma-next/tsdown": "0.0.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"descriptor-meta-DJTTyPb-.mjs","names":[],"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;AACnD,SAAQ,UAAU,SAAU;;AAG9B,SAAS,eAAe,SAA0B;CAChD,MAAM,OAAO,UAAU;AACvB,QAAO,SAAS,eAAe,SAAS;;AAG1C,SAAgB,cAAc,OAAsC;AAClE,KAAI,EAAE,iBAAiB,OACrB,QAAO;AAET,QAAQ,MAAsB,SAAS;;AAGzC,SAAS,0BAA0B,SAAqC;AAMtE,QADc,0BAA0B,KAAK,QAAQ,GACtC;;AAGjB,SAAS,qBAAqB,SAAyB;AACrD,SAAQ,SAAR;EACE,KAAK;EACL,KAAK,6BACH,QAAO;EACT,KAAK,6BACH,QAAO;EACT,KAAK,0BACH,QAAO;EACT,KAAK,wBACH,QAAO;EACT;AACE,OAAI,kBAAkB,QAAQ,CAC5B,QAAO;AAET,UAAO;;;AAIb,SAAgB,qBAAqB,OAA4D;AAC/F,KAAI,EAAE,iBAAiB,OACrB,QAAO,IAAI,MAAM,OAAO,MAAM,CAAC;AAGjC,KAAI,cAAc,MAAM,EAAE;EAExB,MAAM,UADY,MACQ,WAAW;AAErC,MAAI,eAAe,QAAQ,CACzB,QAAO,IAAI,mBAAmB,MAAM,SAAS;GAC3C,OAAO;GACP,WAAW;GACZ,CAAC;EAGJ,MAAM,WAAW,qBAAqB,QAAQ;EAC9C,MAAM,aAAa,0BAA0B,MAAM,QAAQ;AAE3D,SAAO,IAAI,cAAc,MAAM,SAAS;GACtC,OAAO;GACP;GACA,GAAI,eAAe,SAAY,EAAE,YAAY,GAAG,EAAE;GACnD,CAAC;;AAIJ,KACE,MAAM,QAAQ,SAAS,qBAAqB,IAC5C,MAAM,QAAQ,SAAS,0BAA0B,CAEjD,QAAO,IAAI,mBAAmB,MAAM,SAAS;EAC3C,OAAO;EACP,WAAW;EACZ,CAAC;AAGJ,QAAO;;;;;ACvGT,MAAa,6BAA6B;CACxC,MAAM;CACN,UAAU;CACV,UAAU;CACV,IAAI;CACJ,SAAS;CACT,cAAc,EAAE;CACjB"}