@prisma-next/adapter-sqlite 0.5.0-dev.60 → 0.5.0-dev.61

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/README.md CHANGED
@@ -187,7 +187,7 @@ DELETE FROM "user" WHERE "user"."id" = ? RETURNING "user"."id", "user"."email"
187
187
 
188
188
  ## Exports
189
189
 
190
- - `./codec-types`: SQLite codec types (`CodecTypes`, `JsonValue`, `dataTypes`)
190
+ - `./codec-types`: SQLite codec types (`CodecTypes`, `JsonValue`)
191
191
  - `./column-types`: Column type descriptors (`textColumn`, `integerColumn`, `realColumn`, `blobColumn`, `datetimeColumn`, `jsonColumn`, `bigintColumn`)
192
192
  - `./types`: SQLite-specific types
193
193
  - `./control`: Control-plane entry point (stubbed for future migration support)
@@ -1,6 +1,4 @@
1
- import { createCodecRegistry } from "@prisma-next/sql-relational-core/ast";
2
1
  import { parseContractMarkerRow } from "@prisma-next/sql-runtime";
3
- import { codecDefinitions } from "@prisma-next/target-sqlite/codecs";
4
2
  import { escapeLiteral, quoteIdentifier } from "@prisma-next/target-sqlite/sql-utils";
5
3
 
6
4
  //#region src/core/adapter.ts
@@ -16,17 +14,11 @@ var SqliteAdapterImpl = class {
16
14
  familyId = "sql";
17
15
  targetId = "sqlite";
18
16
  profile;
19
- codecRegistry = (() => {
20
- const registry = createCodecRegistry();
21
- for (const definition of Object.values(codecDefinitions)) registry.register(definition.codec);
22
- return registry;
23
- })();
24
17
  constructor(options) {
25
18
  this.profile = Object.freeze({
26
19
  id: options?.profileId ?? "sqlite/default@1",
27
20
  target: "sqlite",
28
21
  capabilities: defaultCapabilities,
29
- codecs: () => this.codecRegistry,
30
22
  readMarkerStatement: () => ({
31
23
  sql: "select core_hash, profile_hash, contract_json, canonical_version, updated_at, app_tag, meta, invariants from _prisma_marker where id = ?",
32
24
  params: [1]
@@ -41,9 +33,6 @@ var SqliteAdapterImpl = class {
41
33
  }
42
34
  });
43
35
  }
44
- parameterizedCodecs() {
45
- return [];
46
- }
47
36
  lower(ast, context) {
48
37
  return renderLoweredSql(ast, context.contract);
49
38
  }
@@ -51,9 +40,7 @@ var SqliteAdapterImpl = class {
51
40
  /**
52
41
  * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.
53
42
  *
54
- * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the
55
- * control adapter (`SqliteControlAdapter.lower`) so both produce
56
- * byte-identical SQL for the same AST and contract.
43
+ * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the control adapter (`SqliteControlAdapter.lower`) so both produce byte-identical SQL for the same AST and contract.
57
44
  */
58
45
  function renderLoweredSql(ast, contract) {
59
46
  const collectedParamRefs = ast.collectParamRefs();
@@ -335,4 +322,4 @@ function createSqliteAdapter(options) {
335
322
 
336
323
  //#endregion
337
324
  export { renderLoweredSql as n, createSqliteAdapter as t };
338
- //# sourceMappingURL=adapter-DjLhS34S.mjs.map
325
+ //# sourceMappingURL=adapter-BUe-FzTA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-BUe-FzTA.mjs","names":["params: unknown[]","sql: string","right: string","insertClause: string","value: string"],"sources":["../src/core/adapter.ts"],"sourcesContent":["import type {\n Adapter,\n AdapterProfile,\n AggregateExpr,\n AnyExpression,\n AnyFromSource,\n AnyQueryAst,\n BinaryExpr,\n ColumnRef,\n DeleteAst,\n InsertAst,\n InsertValue,\n JoinAst,\n JoinOnExpr,\n JsonArrayAggExpr,\n JsonObjectExpr,\n ListExpression,\n LiteralExpr,\n LowererContext,\n NullCheckExpr,\n OperationExpr,\n OrderByItem,\n ProjectionItem,\n SelectAst,\n SubqueryExpr,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { parseContractMarkerRow } from '@prisma-next/sql-runtime';\nimport { escapeLiteral, quoteIdentifier } from '@prisma-next/target-sqlite/sql-utils';\nimport type { SqliteAdapterOptions, SqliteContract, SqliteLoweredStatement } from './types';\n\nconst defaultCapabilities = Object.freeze({\n sql: {\n orderBy: true,\n limit: true,\n lateral: false,\n jsonAgg: true,\n returning: true,\n enums: false,\n },\n});\n\nclass SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLoweredStatement> {\n readonly familyId = 'sql' as const;\n readonly targetId = 'sqlite' as const;\n\n readonly profile: AdapterProfile<'sqlite'>;\n\n constructor(options?: SqliteAdapterOptions) {\n this.profile = Object.freeze({\n id: options?.profileId ?? 'sqlite/default@1',\n target: 'sqlite',\n capabilities: defaultCapabilities,\n readMarkerStatement: () => ({\n sql: 'select core_hash, profile_hash, contract_json, canonical_version, updated_at, app_tag, meta, invariants from _prisma_marker where id = ?',\n params: [1],\n }),\n // SQLite stores arrays as JSON-encoded TEXT (no native array type), so the driver returns `invariants` as a string. Decode before delegating to the shared row schema, which expects `string[]`.\n parseMarkerRow: (row: unknown) => {\n const raw = row as Record<string, unknown>;\n const invariants =\n typeof raw['invariants'] === 'string'\n ? (JSON.parse(raw['invariants']) as unknown)\n : raw['invariants'];\n return parseContractMarkerRow({ ...raw, invariants });\n },\n });\n }\n\n lower(ast: AnyQueryAst, context: LowererContext<SqliteContract>): SqliteLoweredStatement {\n return renderLoweredSql(ast, context.contract);\n }\n}\n\n/**\n * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.\n *\n * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the control adapter (`SqliteControlAdapter.lower`) so both produce byte-identical SQL for the same AST and contract.\n */\nexport function renderLoweredSql(\n ast: AnyQueryAst,\n contract: SqliteContract,\n): SqliteLoweredStatement {\n const collectedParamRefs = ast.collectParamRefs();\n const params: unknown[] = [];\n for (const ref of collectedParamRefs) {\n params.push(ref.value);\n }\n\n let sql: string;\n\n const node = ast;\n switch (node.kind) {\n case 'select':\n sql = renderSelect(node, contract);\n break;\n case 'insert':\n sql = renderInsert(node);\n break;\n case 'update':\n sql = renderUpdate(node, contract);\n break;\n case 'delete':\n sql = renderDelete(node);\n break;\n default:\n throw new Error(`Unsupported AST node kind: ${(node as { kind: string }).kind}`);\n }\n\n return Object.freeze({ sql, params });\n}\n\nfunction renderSelect(ast: SelectAst, contract?: SqliteContract): string {\n const distinctPrefix = ast.distinct ? 'DISTINCT ' : '';\n const selectClause = `SELECT ${distinctPrefix}${renderProjection(ast.projection, contract)}`;\n const fromClause = `FROM ${renderSource(ast.from, contract)}`;\n\n const joinsClause = ast.joins?.length\n ? ast.joins.map((join) => renderJoin(join, contract)).join(' ')\n : '';\n\n const whereClause = ast.where ? `WHERE ${renderExpr(ast.where, contract)}` : '';\n const groupByClause = ast.groupBy?.length\n ? `GROUP BY ${ast.groupBy.map((expr) => renderExpr(expr, contract)).join(', ')}`\n : '';\n const havingClause = ast.having ? `HAVING ${renderExpr(ast.having, contract)}` : '';\n const orderClause = ast.orderBy?.length\n ? `ORDER BY ${ast.orderBy\n .map((order) => `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`)\n .join(', ')}`\n : '';\n const limitClause = typeof ast.limit === 'number' ? `LIMIT ${ast.limit}` : '';\n const offsetClause = typeof ast.offset === 'number' ? `OFFSET ${ast.offset}` : '';\n\n return [\n selectClause,\n fromClause,\n joinsClause,\n whereClause,\n groupByClause,\n havingClause,\n orderClause,\n limitClause,\n offsetClause,\n ]\n .filter((part) => part.length > 0)\n .join(' ')\n .trim();\n}\n\nfunction renderProjection(\n projection: ReadonlyArray<ProjectionItem>,\n contract?: SqliteContract,\n): string {\n return projection\n .map((item) => {\n const alias = quoteIdentifier(item.alias);\n if (item.expr.kind === 'literal') {\n return `${renderLiteral(item.expr)} AS ${alias}`;\n }\n return `${renderExpr(item.expr, contract)} AS ${alias}`;\n })\n .join(', ');\n}\n\nfunction renderSource(source: AnyFromSource, contract?: SqliteContract): string {\n const node = source;\n switch (node.kind) {\n case 'table-source': {\n const table = quoteIdentifier(node.name);\n if (!node.alias) {\n return table;\n }\n return `${table} AS ${quoteIdentifier(node.alias)}`;\n }\n case 'derived-table-source':\n return `(${renderSelect(node.query, contract)}) AS ${quoteIdentifier(node.alias)}`;\n default:\n throw new Error(`Unsupported source node kind: ${(node as { kind: string }).kind}`);\n }\n}\n\nfunction renderExpr(expr: AnyExpression, contract?: SqliteContract): string {\n const node = expr;\n switch (node.kind) {\n case 'column-ref':\n return renderColumn(node);\n case 'identifier-ref':\n return quoteIdentifier(node.name);\n case 'operation':\n return renderOperation(node, contract);\n case 'subquery':\n return renderSubqueryExpr(node, contract);\n case 'aggregate':\n return renderAggregateExpr(node, contract);\n case 'json-object':\n return renderJsonObjectExpr(node, contract);\n case 'json-array-agg':\n return renderJsonArrayAggExpr(node, contract);\n case 'binary':\n return renderBinary(node, contract);\n case 'and':\n if (node.exprs.length === 0) {\n return 'TRUE';\n }\n return `(${node.exprs.map((part) => renderExpr(part, contract)).join(' AND ')})`;\n case 'or':\n if (node.exprs.length === 0) {\n return 'FALSE';\n }\n return `(${node.exprs.map((part) => renderExpr(part, contract)).join(' OR ')})`;\n case 'exists': {\n const notKeyword = node.notExists ? 'NOT ' : '';\n const subquery = renderSelect(node.subquery, contract);\n return `${notKeyword}EXISTS (${subquery})`;\n }\n case 'null-check':\n return renderNullCheck(node, contract);\n case 'not':\n return `NOT (${renderExpr(node.expr, contract)})`;\n case 'param-ref':\n return '?';\n case 'literal':\n return renderLiteral(node);\n case 'list':\n return renderListLiteral(node);\n default:\n throw new Error(`Unsupported expression node kind: ${(node as { kind: string }).kind}`);\n }\n}\n\n// `excluded` is a pseudo-table in ON CONFLICT DO UPDATE that references the row proposed for insertion. It is not quoted because it's a keyword.\nfunction renderColumn(ref: ColumnRef): string {\n if (ref.table === 'excluded') {\n return `excluded.${quoteIdentifier(ref.column)}`;\n }\n return `${quoteIdentifier(ref.table)}.${quoteIdentifier(ref.column)}`;\n}\n\nfunction renderLiteral(expr: LiteralExpr): string {\n if (typeof expr.value === 'string') {\n return `'${escapeLiteral(expr.value)}'`;\n }\n if (typeof expr.value === 'number' || typeof expr.value === 'boolean') {\n return String(expr.value);\n }\n if (typeof expr.value === 'bigint') {\n return String(expr.value);\n }\n if (expr.value === null || expr.value === undefined) {\n return 'NULL';\n }\n if (expr.value instanceof Date) {\n return `'${escapeLiteral(expr.value.toISOString())}'`;\n }\n const json = JSON.stringify(expr.value);\n if (json === undefined) {\n return 'NULL';\n }\n return `'${escapeLiteral(json)}'`;\n}\n\nfunction renderOperation(expr: OperationExpr, contract?: SqliteContract): string {\n const self = renderExpr(expr.self, contract);\n const args = expr.args.map((arg) => renderExpr(arg, contract));\n\n let result = expr.lowering.template;\n result = result.replace(/\\{\\{self\\}\\}/g, self);\n for (let i = 0; i < args.length; i++) {\n result = result.replace(new RegExp(`\\\\{\\\\{arg${i}\\\\}\\\\}`, 'g'), args[i] ?? '');\n }\n\n return result;\n}\n\nfunction renderSubqueryExpr(expr: SubqueryExpr, contract?: SqliteContract): string {\n if (expr.query.projection.length !== 1) {\n throw new Error('Subquery expressions must project exactly one column');\n }\n return `(${renderSelect(expr.query, contract)})`;\n}\n\nfunction renderNullCheck(expr: NullCheckExpr, contract?: SqliteContract): string {\n const rendered = renderExpr(expr.expr, contract);\n const renderedExpr =\n expr.expr.kind === 'operation' || expr.expr.kind === 'subquery' ? `(${rendered})` : rendered;\n return expr.isNull ? `${renderedExpr} IS NULL` : `${renderedExpr} IS NOT NULL`;\n}\n\nfunction renderBinary(expr: BinaryExpr, contract?: SqliteContract): string {\n if (expr.right.kind === 'list' && expr.right.values.length === 0) {\n if (expr.op === 'in') {\n return 'FALSE';\n }\n if (expr.op === 'notIn') {\n return 'TRUE';\n }\n }\n\n const leftExpr = expr.left;\n const left = renderExpr(leftExpr, contract);\n const leftRendered =\n leftExpr.kind === 'operation' || leftExpr.kind === 'subquery' ? `(${left})` : left;\n\n const rightNode = expr.right;\n let right: string;\n switch (rightNode.kind) {\n case 'list':\n right = renderListLiteral(rightNode);\n break;\n case 'literal':\n right = renderLiteral(rightNode);\n break;\n case 'column-ref':\n right = renderColumn(rightNode);\n break;\n case 'param-ref':\n right = '?';\n break;\n default:\n right = renderExpr(rightNode, contract);\n break;\n }\n\n const operatorMap: Record<BinaryExpr['op'], string> = {\n eq: '=',\n neq: '!=',\n gt: '>',\n lt: '<',\n gte: '>=',\n lte: '<=',\n like: 'LIKE',\n in: 'IN',\n notIn: 'NOT IN',\n };\n\n return `${leftRendered} ${operatorMap[expr.op]} ${right}`;\n}\n\nfunction renderListLiteral(expr: ListExpression): string {\n if (expr.values.length === 0) {\n return '(NULL)';\n }\n const values = expr.values\n .map((v) => {\n if (v.kind === 'param-ref') return '?';\n if (v.kind === 'literal') return renderLiteral(v);\n return renderExpr(v);\n })\n .join(', ');\n return `(${values})`;\n}\n\nfunction renderAggregateExpr(expr: AggregateExpr, contract?: SqliteContract): string {\n const fn = expr.fn.toUpperCase();\n if (!expr.expr) {\n return `${fn}(*)`;\n }\n return `${fn}(${renderExpr(expr.expr, contract)})`;\n}\n\nfunction renderJsonObjectExpr(expr: JsonObjectExpr, contract?: SqliteContract): string {\n const args = expr.entries\n .flatMap((entry): [string, string] => {\n const key = `'${escapeLiteral(entry.key)}'`;\n if (entry.value.kind === 'literal') {\n return [key, renderLiteral(entry.value)];\n }\n return [key, renderExpr(entry.value, contract)];\n })\n .join(', ');\n return `json_object(${args})`;\n}\n\nfunction renderOrderByItems(items: ReadonlyArray<OrderByItem>, contract?: SqliteContract): string {\n return items\n .map((item) => `${renderExpr(item.expr, contract)} ${item.dir.toUpperCase()}`)\n .join(', ');\n}\n\nfunction renderJsonArrayAggExpr(expr: JsonArrayAggExpr, contract?: SqliteContract): string {\n const aggregateOrderBy =\n expr.orderBy && expr.orderBy.length > 0\n ? ` ORDER BY ${renderOrderByItems(expr.orderBy, contract)}`\n : '';\n const aggregated = `json_group_array(${renderExpr(expr.expr, contract)}${aggregateOrderBy})`;\n if (expr.onEmpty === 'emptyArray') {\n return `coalesce(${aggregated}, '[]')`;\n }\n return aggregated;\n}\n\nfunction renderJoin(join: JoinAst, contract?: SqliteContract): string {\n const joinType = join.joinType.toUpperCase();\n const source = renderSource(join.source, contract);\n const onClause = renderJoinOn(join.on, contract);\n return `${joinType} JOIN ${source} ON ${onClause}`;\n}\n\nfunction renderJoinOn(on: JoinOnExpr, contract?: SqliteContract): string {\n if (on.kind === 'eq-col-join-on') {\n return `${renderColumn(on.left)} = ${renderColumn(on.right)}`;\n }\n return renderExpr(on, contract);\n}\n\nfunction renderInsertValue(value: InsertValue): string {\n switch (value.kind) {\n case 'param-ref':\n return '?';\n case 'column-ref':\n return renderColumn(value);\n case 'default-value':\n throw new Error('SQLite does not support DEFAULT as a value in INSERT ... VALUES');\n default:\n throw new Error(`Unsupported value node in INSERT: ${(value as { kind: string }).kind}`);\n }\n}\n\nfunction renderInsert(ast: InsertAst): string {\n const table = quoteIdentifier(ast.table.name);\n const rows = ast.rows;\n if (rows.length === 0) {\n throw new Error('INSERT requires at least one row');\n }\n\n const firstRow = rows[0] as Readonly<Record<string, InsertValue>>;\n const columnOrder = Object.keys(firstRow);\n\n let insertClause: string;\n if (columnOrder.length === 0) {\n insertClause = `INSERT INTO ${table} DEFAULT VALUES`;\n } else {\n const columns = columnOrder.map((column) => quoteIdentifier(column));\n const values = rows\n .map((row) => {\n const renderedRow = columnOrder.map((column) => {\n const value = row[column];\n if (value === undefined) {\n throw new Error(`Missing value for column \"${column}\" in INSERT row`);\n }\n return renderInsertValue(value);\n });\n return `(${renderedRow.join(', ')})`;\n })\n .join(', ');\n insertClause = `INSERT INTO ${table} (${columns.join(', ')}) VALUES ${values}`;\n }\n\n let onConflictClause = '';\n if (ast.onConflict) {\n const conflictColumns = ast.onConflict.columns.map((col) => quoteIdentifier(col.column));\n if (conflictColumns.length === 0) {\n throw new Error('INSERT onConflict requires at least one conflict column');\n }\n\n const action = ast.onConflict.action;\n switch (action.kind) {\n case 'do-nothing':\n onConflictClause = ` ON CONFLICT (${conflictColumns.join(', ')}) DO NOTHING`;\n break;\n case 'do-update-set': {\n const updates = Object.entries(action.set).map(([colName, value]) => {\n const target = quoteIdentifier(colName);\n if (value.kind === 'param-ref') {\n return `${target} = ?`;\n }\n return `${target} = ${renderColumn(value)}`;\n });\n onConflictClause = ` ON CONFLICT (${conflictColumns.join(', ')}) DO UPDATE SET ${updates.join(', ')}`;\n break;\n }\n default:\n throw new Error(`Unsupported onConflict action: ${(action as { kind: string }).kind}`);\n }\n }\n\n const returningClause = renderReturning(ast.returning);\n\n return `${insertClause}${onConflictClause}${returningClause}`;\n}\n\nfunction renderUpdate(ast: UpdateAst, contract: SqliteContract): string {\n const table = quoteIdentifier(ast.table.name);\n const setClauses = Object.entries(ast.set).map(([col, val]) => {\n const column = quoteIdentifier(col);\n let value: string;\n switch (val.kind) {\n case 'param-ref':\n value = '?';\n break;\n case 'column-ref':\n value = renderColumn(val);\n break;\n default:\n throw new Error(`Unsupported value node in UPDATE: ${(val as { kind: string }).kind}`);\n }\n return `${column} = ${value}`;\n });\n\n const whereClause = ast.where ? ` WHERE ${renderExpr(ast.where, contract)}` : '';\n const returningClause = renderReturning(ast.returning);\n\n return `UPDATE ${table} SET ${setClauses.join(', ')}${whereClause}${returningClause}`;\n}\n\nfunction renderDelete(ast: DeleteAst): string {\n const table = quoteIdentifier(ast.table.name);\n const whereClause = ast.where ? ` WHERE ${renderExpr(ast.where)}` : '';\n const returningClause = renderReturning(ast.returning);\n\n return `DELETE FROM ${table}${whereClause}${returningClause}`;\n}\n\nfunction renderReturning(returning: ReadonlyArray<ProjectionItem> | undefined): string {\n if (!returning?.length) {\n return '';\n }\n return ` RETURNING ${returning\n .map((item) => {\n if (item.expr.kind === 'column-ref') {\n const rendered = `${quoteIdentifier(item.expr.table)}.${quoteIdentifier(item.expr.column)}`;\n return item.expr.column === item.alias\n ? rendered\n : `${rendered} AS ${quoteIdentifier(item.alias)}`;\n }\n return `${renderExpr(item.expr)} AS ${quoteIdentifier(item.alias)}`;\n })\n .join(', ')}`;\n}\n\nexport function createSqliteAdapter(options?: SqliteAdapterOptions) {\n return Object.freeze(new SqliteAdapterImpl(options));\n}\n"],"mappings":"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"}
@@ -1,25 +1,21 @@
1
1
  import { n as SqliteContract, r as SqliteLoweredStatement, t as SqliteAdapterOptions } from "./types-BFRXGAgd.mjs";
2
- import { Adapter, AdapterProfile, AnyQueryAst, CodecParamsDescriptor, LowererContext } from "@prisma-next/sql-relational-core/ast";
2
+ import { Adapter, AdapterProfile, AnyQueryAst, LowererContext } from "@prisma-next/sql-relational-core/ast";
3
3
 
4
4
  //#region src/core/adapter.d.ts
5
5
  declare class SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLoweredStatement> {
6
6
  readonly familyId: "sql";
7
7
  readonly targetId: "sqlite";
8
8
  readonly profile: AdapterProfile<'sqlite'>;
9
- private readonly codecRegistry;
10
9
  constructor(options?: SqliteAdapterOptions);
11
- parameterizedCodecs(): ReadonlyArray<CodecParamsDescriptor>;
12
10
  lower(ast: AnyQueryAst, context: LowererContext<SqliteContract>): SqliteLoweredStatement;
13
11
  }
14
12
  /**
15
13
  * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.
16
14
  *
17
- * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the
18
- * control adapter (`SqliteControlAdapter.lower`) so both produce
19
- * byte-identical SQL for the same AST and contract.
15
+ * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the control adapter (`SqliteControlAdapter.lower`) so both produce byte-identical SQL for the same AST and contract.
20
16
  */
21
17
 
22
18
  declare function createSqliteAdapter(options?: SqliteAdapterOptions): Readonly<SqliteAdapterImpl>;
23
19
  //#endregion
24
20
  export { createSqliteAdapter as t };
25
- //# sourceMappingURL=adapter-CjuvmCVF.d.mts.map
21
+ //# sourceMappingURL=adapter-NSvNNHZP.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-NSvNNHZP.d.mts","names":[],"sources":["../src/core/adapter.ts"],"sourcesContent":[],"mappings":";;;;cA0CM,iBAAA,YAA6B,QAAQ,aAAa,gBAAgB;;EAAlE,SAAA,QAAA,EAAA,QAAkB;EAAmB,SAAA,OAAA,EAIvB,cAJuB,CAAA,QAAA,CAAA;EAAa,WAAA,CAAA,OAAA,CAAA,EAMhC,oBANgC;EAAgB,KAAA,CAAA,GAAA,EA2B3D,WA3B2D,EAAA,OAAA,EA2BrC,cA3BqC,CA2BtB,cA3BsB,CAAA,CAAA,EA2BJ,sBA3BI;;;;;;;;AAA9B,iBAye1B,mBAAA,CAze0B,OAAA,CAAA,EAyeI,oBAzeJ,CAAA,EAyewB,QAzexB,CAyewB,iBAzexB,CAAA"}
@@ -1,3 +1,2 @@
1
- import "./types-BFRXGAgd.mjs";
2
- import { t as createSqliteAdapter } from "./adapter-CjuvmCVF.mjs";
1
+ import { t as createSqliteAdapter } from "./adapter-NSvNNHZP.mjs";
3
2
  export { createSqliteAdapter };
package/dist/adapter.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { t as createSqliteAdapter } from "./adapter-DjLhS34S.mjs";
1
+ import { t as createSqliteAdapter } from "./adapter-BUe-FzTA.mjs";
2
2
 
3
3
  export { createSqliteAdapter };
@@ -1,2 +1,2 @@
1
- import { CodecTypes, JsonValue, dataTypes } from "@prisma-next/target-sqlite/codec-types";
2
- export { type CodecTypes, type JsonValue, dataTypes };
1
+ import { CodecTypes, JsonValue } from "@prisma-next/target-sqlite/codec-types";
2
+ export { type CodecTypes, type JsonValue };
@@ -1,3 +1 @@
1
- import { dataTypes } from "@prisma-next/target-sqlite/codec-types";
2
-
3
- export { dataTypes };
1
+ export { };
@@ -1,8 +1,8 @@
1
- import { AnyQueryAst, LoweredStatement, LowererContext } from "@prisma-next/sql-relational-core/ast";
2
1
  import { SqlEscapeError, escapeLiteral, quoteIdentifier } from "@prisma-next/target-sqlite/sql-utils";
3
2
  import { parseSqliteDefault, parseSqliteDefault as parseSqliteDefault$1 } from "@prisma-next/target-sqlite/default-normalizer";
4
3
  import { normalizeSqliteNativeType, normalizeSqliteNativeType as normalizeSqliteNativeType$1 } from "@prisma-next/target-sqlite/native-type-normalizer";
5
4
  import { SqlControlAdapterDescriptor } from "@prisma-next/family-sql/control";
5
+ import { AnyQueryAst, LoweredStatement, LowererContext } from "@prisma-next/sql-relational-core/ast";
6
6
  import { ContractMarkerRecord } from "@prisma-next/contract/types";
7
7
  import { SqlControlAdapter } from "@prisma-next/family-sql/control-adapter";
8
8
  import { ControlDriverInstance } from "@prisma-next/framework-components/control";
package/dist/control.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as renderLoweredSql } from "./adapter-DjLhS34S.mjs";
1
+ import { n as renderLoweredSql } from "./adapter-BUe-FzTA.mjs";
2
2
  import { t as sqliteAdapterDescriptorMeta } from "./descriptor-meta-DYT9Gt_F.mjs";
3
3
  import { SqlEscapeError, escapeLiteral, quoteIdentifier } from "@prisma-next/target-sqlite/sql-utils";
4
4
  import { SQLITE_BIGINT_CODEC_ID, SQLITE_BLOB_CODEC_ID, SQLITE_DATETIME_CODEC_ID, SQLITE_INTEGER_CODEC_ID, SQLITE_JSON_CODEC_ID, SQLITE_REAL_CODEC_ID, SQLITE_TEXT_CODEC_ID } from "@prisma-next/target-sqlite/codec-ids";
@@ -1,5 +1,4 @@
1
- import "./types-BFRXGAgd.mjs";
2
- import { t as createSqliteAdapter } from "./adapter-CjuvmCVF.mjs";
1
+ import { t as createSqliteAdapter } from "./adapter-NSvNNHZP.mjs";
3
2
  import { SqlRuntimeAdapterDescriptor } from "@prisma-next/sql-runtime";
4
3
  import { RuntimeAdapterInstance } from "@prisma-next/framework-components/execution";
5
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/core/runtime-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;KAYY,4BAAA,GAA+B,0CACzC,kBAAkB;cAwBd,gCAAgC,sCAEpC"}
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/core/runtime-adapter.ts"],"sourcesContent":[],"mappings":";;;;;KAUY,4BAAA,GAA+B,0CACzC,kBAAkB;cAgBd,gCAAgC,sCAEpC"}
package/dist/runtime.mjs CHANGED
@@ -1,17 +1,11 @@
1
- import { t as createSqliteAdapter } from "./adapter-DjLhS34S.mjs";
1
+ import { t as createSqliteAdapter } from "./adapter-BUe-FzTA.mjs";
2
2
  import { t as sqliteAdapterDescriptorMeta } from "./descriptor-meta-DYT9Gt_F.mjs";
3
- import { createCodecRegistry } from "@prisma-next/sql-relational-core/ast";
4
- import { codecDefinitions } from "@prisma-next/target-sqlite/codecs";
5
3
  import { builtinGeneratorIds } from "@prisma-next/ids";
6
4
  import { timestampNowRuntimeGenerator } from "@prisma-next/family-sql/runtime";
7
5
  import { generateId } from "@prisma-next/ids/runtime";
6
+ import { sqliteCodecRegistry } from "@prisma-next/target-sqlite/codecs";
8
7
 
9
8
  //#region src/core/runtime-adapter.ts
10
- function createSqliteCodecRegistry() {
11
- const registry = createCodecRegistry();
12
- for (const definition of Object.values(codecDefinitions)) registry.register(definition.codec);
13
- return registry;
14
- }
15
9
  function createSqliteMutationDefaultGenerators() {
16
10
  return [...builtinGeneratorIds.map((id) => ({
17
11
  id,
@@ -26,8 +20,7 @@ function createSqliteMutationDefaultGenerators() {
26
20
  }
27
21
  const sqliteRuntimeAdapterDescriptor = {
28
22
  ...sqliteAdapterDescriptorMeta,
29
- codecs: createSqliteCodecRegistry,
30
- parameterizedCodecs: () => [],
23
+ codecs: () => Array.from(sqliteCodecRegistry.values()),
31
24
  mutationDefaultGenerators: createSqliteMutationDefaultGenerators,
32
25
  create(_stack) {
33
26
  return createSqliteAdapter();
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":["sqliteRuntimeAdapterDescriptor: SqlRuntimeAdapterDescriptor<\n 'sqlite',\n SqliteRuntimeAdapterInstance\n>"],"sources":["../src/core/runtime-adapter.ts"],"sourcesContent":["import type { GeneratedValueSpec } from '@prisma-next/contract/types';\nimport { timestampNowRuntimeGenerator } from '@prisma-next/family-sql/runtime';\nimport type { RuntimeAdapterInstance } from '@prisma-next/framework-components/execution';\nimport { builtinGeneratorIds } from '@prisma-next/ids';\nimport { generateId } from '@prisma-next/ids/runtime';\nimport type { CodecRegistry } from '@prisma-next/sql-relational-core/ast';\nimport { createCodecRegistry } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlRuntimeAdapterDescriptor } from '@prisma-next/sql-runtime';\nimport { codecDefinitions } from '@prisma-next/target-sqlite/codecs';\nimport { createSqliteAdapter } from './adapter';\nimport { sqliteAdapterDescriptorMeta } from './descriptor-meta';\n\nexport type SqliteRuntimeAdapterInstance = RuntimeAdapterInstance<'sql', 'sqlite'> &\n ReturnType<typeof createSqliteAdapter>;\n\nfunction createSqliteCodecRegistry(): CodecRegistry {\n const registry = createCodecRegistry();\n for (const definition of Object.values(codecDefinitions)) {\n registry.register(definition.codec);\n }\n return registry;\n}\n\nfunction createSqliteMutationDefaultGenerators() {\n return [\n ...builtinGeneratorIds.map((id) => ({\n id,\n generate: (params?: Record<string, unknown>) => {\n const spec: GeneratedValueSpec = params ? { id, params } : { id };\n return generateId(spec);\n },\n stability: 'field' as const,\n })),\n timestampNowRuntimeGenerator(),\n ];\n}\n\nconst sqliteRuntimeAdapterDescriptor: SqlRuntimeAdapterDescriptor<\n 'sqlite',\n SqliteRuntimeAdapterInstance\n> = {\n ...sqliteAdapterDescriptorMeta,\n codecs: createSqliteCodecRegistry,\n parameterizedCodecs: () => [],\n mutationDefaultGenerators: createSqliteMutationDefaultGenerators,\n create(_stack): SqliteRuntimeAdapterInstance {\n return createSqliteAdapter();\n },\n};\n\nexport default sqliteRuntimeAdapterDescriptor;\n"],"mappings":";;;;;;;;;AAeA,SAAS,4BAA2C;CAClD,MAAM,WAAW,qBAAqB;AACtC,MAAK,MAAM,cAAc,OAAO,OAAO,iBAAiB,CACtD,UAAS,SAAS,WAAW,MAAM;AAErC,QAAO;;AAGT,SAAS,wCAAwC;AAC/C,QAAO,CACL,GAAG,oBAAoB,KAAK,QAAQ;EAClC;EACA,WAAW,WAAqC;AAE9C,UAAO,WAD0B,SAAS;IAAE;IAAI;IAAQ,GAAG,EAAE,IAAI,CAC1C;;EAEzB,WAAW;EACZ,EAAE,EACH,8BAA8B,CAC/B;;AAGH,MAAMA,iCAGF;CACF,GAAG;CACH,QAAQ;CACR,2BAA2B,EAAE;CAC7B,2BAA2B;CAC3B,OAAO,QAAsC;AAC3C,SAAO,qBAAqB;;CAE/B;AAED,8BAAe"}
1
+ {"version":3,"file":"runtime.mjs","names":["sqliteRuntimeAdapterDescriptor: SqlRuntimeAdapterDescriptor<\n 'sqlite',\n SqliteRuntimeAdapterInstance\n>"],"sources":["../src/core/runtime-adapter.ts"],"sourcesContent":["import type { GeneratedValueSpec } from '@prisma-next/contract/types';\nimport { timestampNowRuntimeGenerator } from '@prisma-next/family-sql/runtime';\nimport type { RuntimeAdapterInstance } from '@prisma-next/framework-components/execution';\nimport { builtinGeneratorIds } from '@prisma-next/ids';\nimport { generateId } from '@prisma-next/ids/runtime';\nimport type { SqlRuntimeAdapterDescriptor } from '@prisma-next/sql-runtime';\nimport { sqliteCodecRegistry } from '@prisma-next/target-sqlite/codecs';\nimport { createSqliteAdapter } from './adapter';\nimport { sqliteAdapterDescriptorMeta } from './descriptor-meta';\n\nexport type SqliteRuntimeAdapterInstance = RuntimeAdapterInstance<'sql', 'sqlite'> &\n ReturnType<typeof createSqliteAdapter>;\n\nfunction createSqliteMutationDefaultGenerators() {\n return [\n ...builtinGeneratorIds.map((id) => ({\n id,\n generate: (params?: Record<string, unknown>) => {\n const spec: GeneratedValueSpec = params ? { id, params } : { id };\n return generateId(spec);\n },\n stability: 'field' as const,\n })),\n timestampNowRuntimeGenerator(),\n ];\n}\n\nconst sqliteRuntimeAdapterDescriptor: SqlRuntimeAdapterDescriptor<\n 'sqlite',\n SqliteRuntimeAdapterInstance\n> = {\n ...sqliteAdapterDescriptorMeta,\n codecs: () => Array.from(sqliteCodecRegistry.values()),\n mutationDefaultGenerators: createSqliteMutationDefaultGenerators,\n create(_stack): SqliteRuntimeAdapterInstance {\n return createSqliteAdapter();\n },\n};\n\nexport default sqliteRuntimeAdapterDescriptor;\n"],"mappings":";;;;;;;;AAaA,SAAS,wCAAwC;AAC/C,QAAO,CACL,GAAG,oBAAoB,KAAK,QAAQ;EAClC;EACA,WAAW,WAAqC;AAE9C,UAAO,WAD0B,SAAS;IAAE;IAAI;IAAQ,GAAG,EAAE,IAAI,CAC1C;;EAEzB,WAAW;EACZ,EAAE,EACH,8BAA8B,CAC/B;;AAGH,MAAMA,iCAGF;CACF,GAAG;CACH,cAAc,MAAM,KAAK,oBAAoB,QAAQ,CAAC;CACtD,2BAA2B;CAC3B,OAAO,QAAsC;AAC3C,SAAO,qBAAqB;;CAE/B;AAED,8BAAe"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma-next/adapter-sqlite",
3
- "version": "0.5.0-dev.60",
3
+ "version": "0.5.0-dev.61",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -10,31 +10,31 @@
10
10
  ],
11
11
  "dependencies": {
12
12
  "arktype": "^2.0.0",
13
- "@prisma-next/cli": "0.5.0-dev.60",
14
- "@prisma-next/contract": "0.5.0-dev.60",
15
- "@prisma-next/contract-authoring": "0.5.0-dev.60",
16
- "@prisma-next/framework-components": "0.5.0-dev.60",
17
- "@prisma-next/ids": "0.5.0-dev.60",
18
- "@prisma-next/sql-contract-ts": "0.5.0-dev.60",
19
- "@prisma-next/sql-operations": "0.5.0-dev.60",
20
- "@prisma-next/sql-relational-core": "0.5.0-dev.60",
21
- "@prisma-next/sql-contract": "0.5.0-dev.60",
22
- "@prisma-next/sql-contract-psl": "0.5.0-dev.60",
23
- "@prisma-next/family-sql": "0.5.0-dev.60",
24
- "@prisma-next/sql-runtime": "0.5.0-dev.60",
25
- "@prisma-next/sql-schema-ir": "0.5.0-dev.60",
26
- "@prisma-next/target-sqlite": "0.5.0-dev.60",
27
- "@prisma-next/utils": "0.5.0-dev.60"
13
+ "@prisma-next/cli": "0.5.0-dev.61",
14
+ "@prisma-next/contract": "0.5.0-dev.61",
15
+ "@prisma-next/contract-authoring": "0.5.0-dev.61",
16
+ "@prisma-next/framework-components": "0.5.0-dev.61",
17
+ "@prisma-next/ids": "0.5.0-dev.61",
18
+ "@prisma-next/sql-contract": "0.5.0-dev.61",
19
+ "@prisma-next/sql-contract-psl": "0.5.0-dev.61",
20
+ "@prisma-next/sql-contract-ts": "0.5.0-dev.61",
21
+ "@prisma-next/sql-relational-core": "0.5.0-dev.61",
22
+ "@prisma-next/family-sql": "0.5.0-dev.61",
23
+ "@prisma-next/sql-operations": "0.5.0-dev.61",
24
+ "@prisma-next/sql-runtime": "0.5.0-dev.61",
25
+ "@prisma-next/sql-schema-ir": "0.5.0-dev.61",
26
+ "@prisma-next/target-sqlite": "0.5.0-dev.61",
27
+ "@prisma-next/utils": "0.5.0-dev.61"
28
28
  },
29
29
  "devDependencies": {
30
30
  "pathe": "^2.0.3",
31
31
  "tsdown": "0.18.4",
32
32
  "typescript": "5.9.3",
33
33
  "vitest": "4.0.17",
34
- "@prisma-next/driver-sqlite": "0.5.0-dev.60",
35
34
  "@prisma-next/test-utils": "0.0.1",
36
- "@prisma-next/tsdown": "0.0.0",
37
- "@prisma-next/tsconfig": "0.0.0"
35
+ "@prisma-next/driver-sqlite": "0.5.0-dev.61",
36
+ "@prisma-next/tsconfig": "0.0.0",
37
+ "@prisma-next/tsdown": "0.0.0"
38
38
  },
39
39
  "exports": {
40
40
  "./adapter": "./dist/adapter.mjs",
@@ -1,34 +1,31 @@
1
- import {
2
- type Adapter,
3
- type AdapterProfile,
4
- type AggregateExpr,
5
- type AnyExpression,
6
- type AnyFromSource,
7
- type AnyQueryAst,
8
- type BinaryExpr,
9
- type CodecParamsDescriptor,
10
- type ColumnRef,
11
- createCodecRegistry,
12
- type DeleteAst,
13
- type InsertAst,
14
- type InsertValue,
15
- type JoinAst,
16
- type JoinOnExpr,
17
- type JsonArrayAggExpr,
18
- type JsonObjectExpr,
19
- type ListExpression,
20
- type LiteralExpr,
21
- type LowererContext,
22
- type NullCheckExpr,
23
- type OperationExpr,
24
- type OrderByItem,
25
- type ProjectionItem,
26
- type SelectAst,
27
- type SubqueryExpr,
28
- type UpdateAst,
1
+ import type {
2
+ Adapter,
3
+ AdapterProfile,
4
+ AggregateExpr,
5
+ AnyExpression,
6
+ AnyFromSource,
7
+ AnyQueryAst,
8
+ BinaryExpr,
9
+ ColumnRef,
10
+ DeleteAst,
11
+ InsertAst,
12
+ InsertValue,
13
+ JoinAst,
14
+ JoinOnExpr,
15
+ JsonArrayAggExpr,
16
+ JsonObjectExpr,
17
+ ListExpression,
18
+ LiteralExpr,
19
+ LowererContext,
20
+ NullCheckExpr,
21
+ OperationExpr,
22
+ OrderByItem,
23
+ ProjectionItem,
24
+ SelectAst,
25
+ SubqueryExpr,
26
+ UpdateAst,
29
27
  } from '@prisma-next/sql-relational-core/ast';
30
28
  import { parseContractMarkerRow } from '@prisma-next/sql-runtime';
31
- import { codecDefinitions } from '@prisma-next/target-sqlite/codecs';
32
29
  import { escapeLiteral, quoteIdentifier } from '@prisma-next/target-sqlite/sql-utils';
33
30
  import type { SqliteAdapterOptions, SqliteContract, SqliteLoweredStatement } from './types';
34
31
 
@@ -48,27 +45,17 @@ class SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLo
48
45
  readonly targetId = 'sqlite' as const;
49
46
 
50
47
  readonly profile: AdapterProfile<'sqlite'>;
51
- private readonly codecRegistry = (() => {
52
- const registry = createCodecRegistry();
53
- for (const definition of Object.values(codecDefinitions)) {
54
- registry.register(definition.codec);
55
- }
56
- return registry;
57
- })();
58
48
 
59
49
  constructor(options?: SqliteAdapterOptions) {
60
50
  this.profile = Object.freeze({
61
51
  id: options?.profileId ?? 'sqlite/default@1',
62
52
  target: 'sqlite',
63
53
  capabilities: defaultCapabilities,
64
- codecs: () => this.codecRegistry,
65
54
  readMarkerStatement: () => ({
66
55
  sql: 'select core_hash, profile_hash, contract_json, canonical_version, updated_at, app_tag, meta, invariants from _prisma_marker where id = ?',
67
56
  params: [1],
68
57
  }),
69
- // SQLite stores arrays as JSON-encoded TEXT (no native array type),
70
- // so the driver returns `invariants` as a string. Decode before
71
- // delegating to the shared row schema, which expects `string[]`.
58
+ // SQLite stores arrays as JSON-encoded TEXT (no native array type), so the driver returns `invariants` as a string. Decode before delegating to the shared row schema, which expects `string[]`.
72
59
  parseMarkerRow: (row: unknown) => {
73
60
  const raw = row as Record<string, unknown>;
74
61
  const invariants =
@@ -80,10 +67,6 @@ class SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLo
80
67
  });
81
68
  }
82
69
 
83
- parameterizedCodecs(): ReadonlyArray<CodecParamsDescriptor> {
84
- return [];
85
- }
86
-
87
70
  lower(ast: AnyQueryAst, context: LowererContext<SqliteContract>): SqliteLoweredStatement {
88
71
  return renderLoweredSql(ast, context.contract);
89
72
  }
@@ -92,9 +75,7 @@ class SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLo
92
75
  /**
93
76
  * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.
94
77
  *
95
- * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the
96
- * control adapter (`SqliteControlAdapter.lower`) so both produce
97
- * byte-identical SQL for the same AST and contract.
78
+ * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the control adapter (`SqliteControlAdapter.lower`) so both produce byte-identical SQL for the same AST and contract.
98
79
  */
99
80
  export function renderLoweredSql(
100
81
  ast: AnyQueryAst,
@@ -248,8 +229,7 @@ function renderExpr(expr: AnyExpression, contract?: SqliteContract): string {
248
229
  }
249
230
  }
250
231
 
251
- // `excluded` is a pseudo-table in ON CONFLICT DO UPDATE that references the
252
- // row proposed for insertion. It is not quoted because it's a keyword.
232
+ // `excluded` is a pseudo-table in ON CONFLICT DO UPDATE that references the row proposed for insertion. It is not quoted because it's a keyword.
253
233
  function renderColumn(ref: ColumnRef): string {
254
234
  if (ref.table === 'excluded') {
255
235
  return `excluded.${quoteIdentifier(ref.column)}`;
@@ -3,24 +3,14 @@ import { timestampNowRuntimeGenerator } from '@prisma-next/family-sql/runtime';
3
3
  import type { RuntimeAdapterInstance } from '@prisma-next/framework-components/execution';
4
4
  import { builtinGeneratorIds } from '@prisma-next/ids';
5
5
  import { generateId } from '@prisma-next/ids/runtime';
6
- import type { CodecRegistry } from '@prisma-next/sql-relational-core/ast';
7
- import { createCodecRegistry } from '@prisma-next/sql-relational-core/ast';
8
6
  import type { SqlRuntimeAdapterDescriptor } from '@prisma-next/sql-runtime';
9
- import { codecDefinitions } from '@prisma-next/target-sqlite/codecs';
7
+ import { sqliteCodecRegistry } from '@prisma-next/target-sqlite/codecs';
10
8
  import { createSqliteAdapter } from './adapter';
11
9
  import { sqliteAdapterDescriptorMeta } from './descriptor-meta';
12
10
 
13
11
  export type SqliteRuntimeAdapterInstance = RuntimeAdapterInstance<'sql', 'sqlite'> &
14
12
  ReturnType<typeof createSqliteAdapter>;
15
13
 
16
- function createSqliteCodecRegistry(): CodecRegistry {
17
- const registry = createCodecRegistry();
18
- for (const definition of Object.values(codecDefinitions)) {
19
- registry.register(definition.codec);
20
- }
21
- return registry;
22
- }
23
-
24
14
  function createSqliteMutationDefaultGenerators() {
25
15
  return [
26
16
  ...builtinGeneratorIds.map((id) => ({
@@ -40,8 +30,7 @@ const sqliteRuntimeAdapterDescriptor: SqlRuntimeAdapterDescriptor<
40
30
  SqliteRuntimeAdapterInstance
41
31
  > = {
42
32
  ...sqliteAdapterDescriptorMeta,
43
- codecs: createSqliteCodecRegistry,
44
- parameterizedCodecs: () => [],
33
+ codecs: () => Array.from(sqliteCodecRegistry.values()),
45
34
  mutationDefaultGenerators: createSqliteMutationDefaultGenerators,
46
35
  create(_stack): SqliteRuntimeAdapterInstance {
47
36
  return createSqliteAdapter();
@@ -1,8 +1,2 @@
1
- // Facade over `@prisma-next/target-sqlite/codec-types` so downstream consumers
2
- // (demo, e2e tests, generated contract `.d.ts`) can keep importing from
3
- // `@prisma-next/adapter-sqlite/codec-types` after codecs moved target-side.
4
- export {
5
- type CodecTypes,
6
- dataTypes,
7
- type JsonValue,
8
- } from '@prisma-next/target-sqlite/codec-types';
1
+ // Facade over `@prisma-next/target-sqlite/codec-types` so downstream consumers (demo, e2e tests, generated contract `.d.ts`) can keep importing from `@prisma-next/adapter-sqlite/codec-types` after codecs moved target-side.
2
+ export type { CodecTypes, JsonValue } from '@prisma-next/target-sqlite/codec-types';
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter-CjuvmCVF.d.mts","names":[],"sources":["../src/core/adapter.ts"],"sourcesContent":[],"mappings":";;;;cA6CM,iBAAA,YAA6B,QAAQ,aAAa,gBAAgB;;EAAlE,SAAA,QAAA,EAAA,QAAkB;EAAmB,SAAA,OAAA,EAIvB,cAJuB,CAAA,QAAA,CAAA;EAAa,iBAAA,aAAA;EAAgB,WAAA,CAAA,OAAA,CAAA,EAahD,oBAbgD;EAIpD,mBAAA,CAAA,CAAA,EAiCK,aAjCL,CAiCmB,qBAjCnB,CAAA;EASI,KAAA,CAAA,GAAA,EA4BX,WA5BW,EAAA,OAAA,EA4BW,cA5BX,CA4B0B,cA5B1B,CAAA,CAAA,EA4B4C,sBA5B5C;;;;;;;;;;AA6esB,iBAA9B,mBAAA,CAA8B,OAAA,CAAA,EAAA,oBAAA,CAAA,EAAoB,QAApB,CAAoB,iBAApB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter-DjLhS34S.mjs","names":["params: unknown[]","sql: string","right: string","insertClause: string","value: string"],"sources":["../src/core/adapter.ts"],"sourcesContent":["import {\n type Adapter,\n type AdapterProfile,\n type AggregateExpr,\n type AnyExpression,\n type AnyFromSource,\n type AnyQueryAst,\n type BinaryExpr,\n type CodecParamsDescriptor,\n type ColumnRef,\n createCodecRegistry,\n type DeleteAst,\n type InsertAst,\n type InsertValue,\n type JoinAst,\n type JoinOnExpr,\n type JsonArrayAggExpr,\n type JsonObjectExpr,\n type ListExpression,\n type LiteralExpr,\n type LowererContext,\n type NullCheckExpr,\n type OperationExpr,\n type OrderByItem,\n type ProjectionItem,\n type SelectAst,\n type SubqueryExpr,\n type UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { parseContractMarkerRow } from '@prisma-next/sql-runtime';\nimport { codecDefinitions } from '@prisma-next/target-sqlite/codecs';\nimport { escapeLiteral, quoteIdentifier } from '@prisma-next/target-sqlite/sql-utils';\nimport type { SqliteAdapterOptions, SqliteContract, SqliteLoweredStatement } from './types';\n\nconst defaultCapabilities = Object.freeze({\n sql: {\n orderBy: true,\n limit: true,\n lateral: false,\n jsonAgg: true,\n returning: true,\n enums: false,\n },\n});\n\nclass SqliteAdapterImpl implements Adapter<AnyQueryAst, SqliteContract, SqliteLoweredStatement> {\n readonly familyId = 'sql' as const;\n readonly targetId = 'sqlite' as const;\n\n readonly profile: AdapterProfile<'sqlite'>;\n private readonly codecRegistry = (() => {\n const registry = createCodecRegistry();\n for (const definition of Object.values(codecDefinitions)) {\n registry.register(definition.codec);\n }\n return registry;\n })();\n\n constructor(options?: SqliteAdapterOptions) {\n this.profile = Object.freeze({\n id: options?.profileId ?? 'sqlite/default@1',\n target: 'sqlite',\n capabilities: defaultCapabilities,\n codecs: () => this.codecRegistry,\n readMarkerStatement: () => ({\n sql: 'select core_hash, profile_hash, contract_json, canonical_version, updated_at, app_tag, meta, invariants from _prisma_marker where id = ?',\n params: [1],\n }),\n // SQLite stores arrays as JSON-encoded TEXT (no native array type),\n // so the driver returns `invariants` as a string. Decode before\n // delegating to the shared row schema, which expects `string[]`.\n parseMarkerRow: (row: unknown) => {\n const raw = row as Record<string, unknown>;\n const invariants =\n typeof raw['invariants'] === 'string'\n ? (JSON.parse(raw['invariants']) as unknown)\n : raw['invariants'];\n return parseContractMarkerRow({ ...raw, invariants });\n },\n });\n }\n\n parameterizedCodecs(): ReadonlyArray<CodecParamsDescriptor> {\n return [];\n }\n\n lower(ast: AnyQueryAst, context: LowererContext<SqliteContract>): SqliteLoweredStatement {\n return renderLoweredSql(ast, context.contract);\n }\n}\n\n/**\n * Lower a SQL query AST into a SQLite-flavored `{ sql, params }` payload.\n *\n * Shared between the runtime adapter (`SqliteAdapterImpl.lower`) and the\n * control adapter (`SqliteControlAdapter.lower`) so both produce\n * byte-identical SQL for the same AST and contract.\n */\nexport function renderLoweredSql(\n ast: AnyQueryAst,\n contract: SqliteContract,\n): SqliteLoweredStatement {\n const collectedParamRefs = ast.collectParamRefs();\n const params: unknown[] = [];\n for (const ref of collectedParamRefs) {\n params.push(ref.value);\n }\n\n let sql: string;\n\n const node = ast;\n switch (node.kind) {\n case 'select':\n sql = renderSelect(node, contract);\n break;\n case 'insert':\n sql = renderInsert(node);\n break;\n case 'update':\n sql = renderUpdate(node, contract);\n break;\n case 'delete':\n sql = renderDelete(node);\n break;\n default:\n throw new Error(`Unsupported AST node kind: ${(node as { kind: string }).kind}`);\n }\n\n return Object.freeze({ sql, params });\n}\n\nfunction renderSelect(ast: SelectAst, contract?: SqliteContract): string {\n const distinctPrefix = ast.distinct ? 'DISTINCT ' : '';\n const selectClause = `SELECT ${distinctPrefix}${renderProjection(ast.projection, contract)}`;\n const fromClause = `FROM ${renderSource(ast.from, contract)}`;\n\n const joinsClause = ast.joins?.length\n ? ast.joins.map((join) => renderJoin(join, contract)).join(' ')\n : '';\n\n const whereClause = ast.where ? `WHERE ${renderExpr(ast.where, contract)}` : '';\n const groupByClause = ast.groupBy?.length\n ? `GROUP BY ${ast.groupBy.map((expr) => renderExpr(expr, contract)).join(', ')}`\n : '';\n const havingClause = ast.having ? `HAVING ${renderExpr(ast.having, contract)}` : '';\n const orderClause = ast.orderBy?.length\n ? `ORDER BY ${ast.orderBy\n .map((order) => `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`)\n .join(', ')}`\n : '';\n const limitClause = typeof ast.limit === 'number' ? `LIMIT ${ast.limit}` : '';\n const offsetClause = typeof ast.offset === 'number' ? `OFFSET ${ast.offset}` : '';\n\n return [\n selectClause,\n fromClause,\n joinsClause,\n whereClause,\n groupByClause,\n havingClause,\n orderClause,\n limitClause,\n offsetClause,\n ]\n .filter((part) => part.length > 0)\n .join(' ')\n .trim();\n}\n\nfunction renderProjection(\n projection: ReadonlyArray<ProjectionItem>,\n contract?: SqliteContract,\n): string {\n return projection\n .map((item) => {\n const alias = quoteIdentifier(item.alias);\n if (item.expr.kind === 'literal') {\n return `${renderLiteral(item.expr)} AS ${alias}`;\n }\n return `${renderExpr(item.expr, contract)} AS ${alias}`;\n })\n .join(', ');\n}\n\nfunction renderSource(source: AnyFromSource, contract?: SqliteContract): string {\n const node = source;\n switch (node.kind) {\n case 'table-source': {\n const table = quoteIdentifier(node.name);\n if (!node.alias) {\n return table;\n }\n return `${table} AS ${quoteIdentifier(node.alias)}`;\n }\n case 'derived-table-source':\n return `(${renderSelect(node.query, contract)}) AS ${quoteIdentifier(node.alias)}`;\n default:\n throw new Error(`Unsupported source node kind: ${(node as { kind: string }).kind}`);\n }\n}\n\nfunction renderExpr(expr: AnyExpression, contract?: SqliteContract): string {\n const node = expr;\n switch (node.kind) {\n case 'column-ref':\n return renderColumn(node);\n case 'identifier-ref':\n return quoteIdentifier(node.name);\n case 'operation':\n return renderOperation(node, contract);\n case 'subquery':\n return renderSubqueryExpr(node, contract);\n case 'aggregate':\n return renderAggregateExpr(node, contract);\n case 'json-object':\n return renderJsonObjectExpr(node, contract);\n case 'json-array-agg':\n return renderJsonArrayAggExpr(node, contract);\n case 'binary':\n return renderBinary(node, contract);\n case 'and':\n if (node.exprs.length === 0) {\n return 'TRUE';\n }\n return `(${node.exprs.map((part) => renderExpr(part, contract)).join(' AND ')})`;\n case 'or':\n if (node.exprs.length === 0) {\n return 'FALSE';\n }\n return `(${node.exprs.map((part) => renderExpr(part, contract)).join(' OR ')})`;\n case 'exists': {\n const notKeyword = node.notExists ? 'NOT ' : '';\n const subquery = renderSelect(node.subquery, contract);\n return `${notKeyword}EXISTS (${subquery})`;\n }\n case 'null-check':\n return renderNullCheck(node, contract);\n case 'not':\n return `NOT (${renderExpr(node.expr, contract)})`;\n case 'param-ref':\n return '?';\n case 'literal':\n return renderLiteral(node);\n case 'list':\n return renderListLiteral(node);\n default:\n throw new Error(`Unsupported expression node kind: ${(node as { kind: string }).kind}`);\n }\n}\n\n// `excluded` is a pseudo-table in ON CONFLICT DO UPDATE that references the\n// row proposed for insertion. It is not quoted because it's a keyword.\nfunction renderColumn(ref: ColumnRef): string {\n if (ref.table === 'excluded') {\n return `excluded.${quoteIdentifier(ref.column)}`;\n }\n return `${quoteIdentifier(ref.table)}.${quoteIdentifier(ref.column)}`;\n}\n\nfunction renderLiteral(expr: LiteralExpr): string {\n if (typeof expr.value === 'string') {\n return `'${escapeLiteral(expr.value)}'`;\n }\n if (typeof expr.value === 'number' || typeof expr.value === 'boolean') {\n return String(expr.value);\n }\n if (typeof expr.value === 'bigint') {\n return String(expr.value);\n }\n if (expr.value === null || expr.value === undefined) {\n return 'NULL';\n }\n if (expr.value instanceof Date) {\n return `'${escapeLiteral(expr.value.toISOString())}'`;\n }\n const json = JSON.stringify(expr.value);\n if (json === undefined) {\n return 'NULL';\n }\n return `'${escapeLiteral(json)}'`;\n}\n\nfunction renderOperation(expr: OperationExpr, contract?: SqliteContract): string {\n const self = renderExpr(expr.self, contract);\n const args = expr.args.map((arg) => renderExpr(arg, contract));\n\n let result = expr.lowering.template;\n result = result.replace(/\\{\\{self\\}\\}/g, self);\n for (let i = 0; i < args.length; i++) {\n result = result.replace(new RegExp(`\\\\{\\\\{arg${i}\\\\}\\\\}`, 'g'), args[i] ?? '');\n }\n\n return result;\n}\n\nfunction renderSubqueryExpr(expr: SubqueryExpr, contract?: SqliteContract): string {\n if (expr.query.projection.length !== 1) {\n throw new Error('Subquery expressions must project exactly one column');\n }\n return `(${renderSelect(expr.query, contract)})`;\n}\n\nfunction renderNullCheck(expr: NullCheckExpr, contract?: SqliteContract): string {\n const rendered = renderExpr(expr.expr, contract);\n const renderedExpr =\n expr.expr.kind === 'operation' || expr.expr.kind === 'subquery' ? `(${rendered})` : rendered;\n return expr.isNull ? `${renderedExpr} IS NULL` : `${renderedExpr} IS NOT NULL`;\n}\n\nfunction renderBinary(expr: BinaryExpr, contract?: SqliteContract): string {\n if (expr.right.kind === 'list' && expr.right.values.length === 0) {\n if (expr.op === 'in') {\n return 'FALSE';\n }\n if (expr.op === 'notIn') {\n return 'TRUE';\n }\n }\n\n const leftExpr = expr.left;\n const left = renderExpr(leftExpr, contract);\n const leftRendered =\n leftExpr.kind === 'operation' || leftExpr.kind === 'subquery' ? `(${left})` : left;\n\n const rightNode = expr.right;\n let right: string;\n switch (rightNode.kind) {\n case 'list':\n right = renderListLiteral(rightNode);\n break;\n case 'literal':\n right = renderLiteral(rightNode);\n break;\n case 'column-ref':\n right = renderColumn(rightNode);\n break;\n case 'param-ref':\n right = '?';\n break;\n default:\n right = renderExpr(rightNode, contract);\n break;\n }\n\n const operatorMap: Record<BinaryExpr['op'], string> = {\n eq: '=',\n neq: '!=',\n gt: '>',\n lt: '<',\n gte: '>=',\n lte: '<=',\n like: 'LIKE',\n in: 'IN',\n notIn: 'NOT IN',\n };\n\n return `${leftRendered} ${operatorMap[expr.op]} ${right}`;\n}\n\nfunction renderListLiteral(expr: ListExpression): string {\n if (expr.values.length === 0) {\n return '(NULL)';\n }\n const values = expr.values\n .map((v) => {\n if (v.kind === 'param-ref') return '?';\n if (v.kind === 'literal') return renderLiteral(v);\n return renderExpr(v);\n })\n .join(', ');\n return `(${values})`;\n}\n\nfunction renderAggregateExpr(expr: AggregateExpr, contract?: SqliteContract): string {\n const fn = expr.fn.toUpperCase();\n if (!expr.expr) {\n return `${fn}(*)`;\n }\n return `${fn}(${renderExpr(expr.expr, contract)})`;\n}\n\nfunction renderJsonObjectExpr(expr: JsonObjectExpr, contract?: SqliteContract): string {\n const args = expr.entries\n .flatMap((entry): [string, string] => {\n const key = `'${escapeLiteral(entry.key)}'`;\n if (entry.value.kind === 'literal') {\n return [key, renderLiteral(entry.value)];\n }\n return [key, renderExpr(entry.value, contract)];\n })\n .join(', ');\n return `json_object(${args})`;\n}\n\nfunction renderOrderByItems(items: ReadonlyArray<OrderByItem>, contract?: SqliteContract): string {\n return items\n .map((item) => `${renderExpr(item.expr, contract)} ${item.dir.toUpperCase()}`)\n .join(', ');\n}\n\nfunction renderJsonArrayAggExpr(expr: JsonArrayAggExpr, contract?: SqliteContract): string {\n const aggregateOrderBy =\n expr.orderBy && expr.orderBy.length > 0\n ? ` ORDER BY ${renderOrderByItems(expr.orderBy, contract)}`\n : '';\n const aggregated = `json_group_array(${renderExpr(expr.expr, contract)}${aggregateOrderBy})`;\n if (expr.onEmpty === 'emptyArray') {\n return `coalesce(${aggregated}, '[]')`;\n }\n return aggregated;\n}\n\nfunction renderJoin(join: JoinAst, contract?: SqliteContract): string {\n const joinType = join.joinType.toUpperCase();\n const source = renderSource(join.source, contract);\n const onClause = renderJoinOn(join.on, contract);\n return `${joinType} JOIN ${source} ON ${onClause}`;\n}\n\nfunction renderJoinOn(on: JoinOnExpr, contract?: SqliteContract): string {\n if (on.kind === 'eq-col-join-on') {\n return `${renderColumn(on.left)} = ${renderColumn(on.right)}`;\n }\n return renderExpr(on, contract);\n}\n\nfunction renderInsertValue(value: InsertValue): string {\n switch (value.kind) {\n case 'param-ref':\n return '?';\n case 'column-ref':\n return renderColumn(value);\n case 'default-value':\n throw new Error('SQLite does not support DEFAULT as a value in INSERT ... VALUES');\n default:\n throw new Error(`Unsupported value node in INSERT: ${(value as { kind: string }).kind}`);\n }\n}\n\nfunction renderInsert(ast: InsertAst): string {\n const table = quoteIdentifier(ast.table.name);\n const rows = ast.rows;\n if (rows.length === 0) {\n throw new Error('INSERT requires at least one row');\n }\n\n const firstRow = rows[0] as Readonly<Record<string, InsertValue>>;\n const columnOrder = Object.keys(firstRow);\n\n let insertClause: string;\n if (columnOrder.length === 0) {\n insertClause = `INSERT INTO ${table} DEFAULT VALUES`;\n } else {\n const columns = columnOrder.map((column) => quoteIdentifier(column));\n const values = rows\n .map((row) => {\n const renderedRow = columnOrder.map((column) => {\n const value = row[column];\n if (value === undefined) {\n throw new Error(`Missing value for column \"${column}\" in INSERT row`);\n }\n return renderInsertValue(value);\n });\n return `(${renderedRow.join(', ')})`;\n })\n .join(', ');\n insertClause = `INSERT INTO ${table} (${columns.join(', ')}) VALUES ${values}`;\n }\n\n let onConflictClause = '';\n if (ast.onConflict) {\n const conflictColumns = ast.onConflict.columns.map((col) => quoteIdentifier(col.column));\n if (conflictColumns.length === 0) {\n throw new Error('INSERT onConflict requires at least one conflict column');\n }\n\n const action = ast.onConflict.action;\n switch (action.kind) {\n case 'do-nothing':\n onConflictClause = ` ON CONFLICT (${conflictColumns.join(', ')}) DO NOTHING`;\n break;\n case 'do-update-set': {\n const updates = Object.entries(action.set).map(([colName, value]) => {\n const target = quoteIdentifier(colName);\n if (value.kind === 'param-ref') {\n return `${target} = ?`;\n }\n return `${target} = ${renderColumn(value)}`;\n });\n onConflictClause = ` ON CONFLICT (${conflictColumns.join(', ')}) DO UPDATE SET ${updates.join(', ')}`;\n break;\n }\n default:\n throw new Error(`Unsupported onConflict action: ${(action as { kind: string }).kind}`);\n }\n }\n\n const returningClause = renderReturning(ast.returning);\n\n return `${insertClause}${onConflictClause}${returningClause}`;\n}\n\nfunction renderUpdate(ast: UpdateAst, contract: SqliteContract): string {\n const table = quoteIdentifier(ast.table.name);\n const setClauses = Object.entries(ast.set).map(([col, val]) => {\n const column = quoteIdentifier(col);\n let value: string;\n switch (val.kind) {\n case 'param-ref':\n value = '?';\n break;\n case 'column-ref':\n value = renderColumn(val);\n break;\n default:\n throw new Error(`Unsupported value node in UPDATE: ${(val as { kind: string }).kind}`);\n }\n return `${column} = ${value}`;\n });\n\n const whereClause = ast.where ? ` WHERE ${renderExpr(ast.where, contract)}` : '';\n const returningClause = renderReturning(ast.returning);\n\n return `UPDATE ${table} SET ${setClauses.join(', ')}${whereClause}${returningClause}`;\n}\n\nfunction renderDelete(ast: DeleteAst): string {\n const table = quoteIdentifier(ast.table.name);\n const whereClause = ast.where ? ` WHERE ${renderExpr(ast.where)}` : '';\n const returningClause = renderReturning(ast.returning);\n\n return `DELETE FROM ${table}${whereClause}${returningClause}`;\n}\n\nfunction renderReturning(returning: ReadonlyArray<ProjectionItem> | undefined): string {\n if (!returning?.length) {\n return '';\n }\n return ` RETURNING ${returning\n .map((item) => {\n if (item.expr.kind === 'column-ref') {\n const rendered = `${quoteIdentifier(item.expr.table)}.${quoteIdentifier(item.expr.column)}`;\n return item.expr.column === item.alias\n ? rendered\n : `${rendered} AS ${quoteIdentifier(item.alias)}`;\n }\n return `${renderExpr(item.expr)} AS ${quoteIdentifier(item.alias)}`;\n })\n .join(', ')}`;\n}\n\nexport function createSqliteAdapter(options?: SqliteAdapterOptions) {\n return Object.freeze(new SqliteAdapterImpl(options));\n}\n"],"mappings":"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"}