@prisma-next/sqlite 0.13.0-dev.1 → 0.13.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runtime.d.mts +12 -5
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +18 -10
- package/dist/runtime.mjs.map +1 -1
- package/package.json +20 -20
- package/src/runtime/sqlite.ts +60 -31
package/dist/runtime.d.mts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { NamespacedEnums } from "@prisma-next/contract/enum-accessor";
|
|
2
|
+
import { UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir";
|
|
1
3
|
import { orm } from "@prisma-next/sql-orm-client";
|
|
2
4
|
import { CodecTypesBase, RawSqlTag } from "@prisma-next/sql-relational-core/expression";
|
|
3
5
|
import { BindSiteParams, Declaration, ExecutionContext, ParamsFromDeclaration, PreparedStatement, Runtime, SqlExecutionStackWithDriver, SqlMiddleware, SqlRuntimeExtensionDescriptor, TransactionContext, VerifyMarkerOption } from "@prisma-next/sql-runtime";
|
|
@@ -14,13 +16,18 @@ type SqliteBindingInput = {
|
|
|
14
16
|
//#region src/runtime/sqlite.d.ts
|
|
15
17
|
type SqliteTargetId = 'sqlite';
|
|
16
18
|
type OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof orm<TContract>>;
|
|
19
|
+
type UnboundSql<TContract extends Contract<SqlStorage>> = Db<TContract>[typeof UNBOUND_NAMESPACE_ID];
|
|
20
|
+
type UnboundOrm<TContract extends Contract<SqlStorage>> = OrmClient<TContract>[typeof UNBOUND_NAMESPACE_ID];
|
|
21
|
+
type UnboundEnums<TContract extends Contract<SqlStorage>> = NamespacedEnums<TContract>[typeof UNBOUND_NAMESPACE_ID];
|
|
17
22
|
interface SqliteTransactionContext<TContract extends Contract<SqlStorage>> extends TransactionContext {
|
|
18
|
-
readonly sql:
|
|
19
|
-
readonly orm:
|
|
23
|
+
readonly sql: UnboundSql<TContract>;
|
|
24
|
+
readonly orm: UnboundOrm<TContract>;
|
|
25
|
+
readonly enums: UnboundEnums<TContract>;
|
|
20
26
|
}
|
|
21
27
|
interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
22
|
-
readonly sql:
|
|
23
|
-
readonly orm:
|
|
28
|
+
readonly sql: UnboundSql<TContract>;
|
|
29
|
+
readonly orm: UnboundOrm<TContract>;
|
|
30
|
+
readonly enums: UnboundEnums<TContract>;
|
|
24
31
|
readonly raw: RawSqlTag;
|
|
25
32
|
readonly context: ExecutionContext<TContract>;
|
|
26
33
|
readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;
|
|
@@ -28,7 +35,7 @@ interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
|
28
35
|
readonly path: string;
|
|
29
36
|
}): Promise<Runtime>;
|
|
30
37
|
runtime(): Runtime;
|
|
31
|
-
prepare<D extends Declaration<CT>, Row, CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase>(declaration: D, callback: (sql:
|
|
38
|
+
prepare<D extends Declaration<CT>, Row, CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase>(declaration: D, callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;
|
|
32
39
|
transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;
|
|
33
40
|
close(): Promise<void>;
|
|
34
41
|
[Symbol.asyncDispose](): Promise<void>;
|
package/dist/runtime.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/runtime/binding.ts","../src/runtime/sqlite.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/runtime/binding.ts","../src/runtime/sqlite.ts"],"mappings":";;;;;;;;;;;KAEY,kBAAA;EAAA,SAAgC,IAAI;AAAA;;;KCqCpC,cAAA;AAAA,KACP,SAAA,mBAA4B,QAAA,CAAS,UAAA,KAAe,UAAA,QAAkB,GAAA,CAAW,SAAA;AAAA,KAEjF,UAAA,mBAA6B,QAAA,CAAS,UAAA,KACzC,EAAA,CAAG,SAAA,SAAkB,oBAAA;AAAA,KAClB,UAAA,mBAA6B,QAAA,CAAS,UAAA,KACzC,SAAA,CAAU,SAAA,SAAkB,oBAAA;AAAA,KACzB,YAAA,mBAA+B,QAAA,CAAS,UAAA,KAC3C,eAAA,CAAgB,SAAA,SAAkB,oBAAA;AAAA,UAQnB,wBAAA,mBAA2C,QAAA,CAAS,UAAA,WAC3D,kBAAA;EAAA,SACC,GAAA,EAAK,UAAA,CAAW,SAAA;EAAA,SAChB,GAAA,EAAK,UAAA,CAAW,SAAA;EAAA,SAChB,KAAA,EAAO,YAAA,CAAa,SAAA;AAAA;AAAA,UAGd,YAAA,mBAA+B,QAAA,CAAS,UAAA;EAAA,SAC9C,GAAA,EAAK,UAAA,CAAW,SAAA;EAAA,SAChB,GAAA,EAAK,UAAA,CAAW,SAAA;EAAA,SAChB,KAAA,EAAO,YAAA,CAAa,SAAA;EAAA,SACpB,GAAA,EAAK,SAAA;EAAA,SACL,OAAA,EAAS,gBAAA,CAAiB,SAAA;EAAA,SAC1B,KAAA,EAAO,2BAAA,CAA4B,cAAA;EAC5C,OAAA,CAAQ,YAAA;IAAA,SAA0B,IAAA;EAAA,IAAiB,OAAA,CAAQ,OAAA;EAC3D,OAAA,IAAW,OAAA;EACX,OAAA,WACY,WAAA,CAAY,EAAA,mBAEX,cAAA,GAAiB,iBAAA,CAAkB,SAAA,IAAa,cAAA,EAE3D,WAAA,EAAa,CAAA,EACb,QAAA,GAAW,GAAA,EAAK,UAAA,CAAW,SAAA,GAAY,MAAA,EAAQ,cAAA,CAAe,CAAA,MAAO,YAAA,CAAa,GAAA,IACjF,OAAA,CAAQ,iBAAA,CAAkB,qBAAA,CAAsB,CAAA,EAAG,EAAA,GAAK,GAAA;EAC3D,WAAA,IAAe,EAAA,GAAK,EAAA,EAAI,wBAAA,CAAyB,SAAA,MAAe,WAAA,CAAY,CAAA,IAAK,OAAA,CAAQ,CAAA;EACzF,KAAA,IAAS,OAAA;EAAA,CACR,MAAA,CAAO,YAAA,KAAiB,OAAA;AAAA;AAAA,UAGV,iBAAA;EAAA,SACN,UAAA,YAAsB,6BAAA,CAA8B,cAAA;EAAA,SACpD,UAAA,YAAsB,aAAA;EAAA,SACtB,YAAA,GAAe,kBAAA;AAAA;AAAA,KAGd,yBAAA,mBAA4C,QAAA,CAAS,UAAA;EAAA,SACtD,IAAA;AAAA,IACP,iBAAA;EAAA,SACS,QAAA,EAAU,SAAA;EAAA,SACV,YAAA;AAAA;AAAA,KAGD,6BAAA,mBAAgD,QAAA,CAAS,UAAA;EAAA,SAC1D,IAAA;EAAA,SACA,SAAA,GAAY,SAAA;AAAA,IACnB,iBAAA;EAAA,SACS,YAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGD,aAAA,mBAAgC,QAAA,CAAS,UAAA,KACjD,yBAAA,CAA0B,SAAA,IAC1B,6BAAA,CAA8B,SAAA;AAAA,iBAYV,MAAA,mBAAyB,QAAA,CAAS,UAAA,GACxD,OAAA,EAAS,yBAAA,CAA0B,SAAA,IAClC,YAAA,CAAa,SAAA;AAAA,iBACQ,MAAA,mBAAyB,QAAA,CAAS,UAAA,GACxD,OAAA,EAAS,6BAAA,CAA8B,SAAA,IACtC,YAAA,CAAa,SAAA"}
|
package/dist/runtime.mjs
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { ifDefined } from "@prisma-next/utils/defined";
|
|
2
2
|
import sqliteAdapter from "@prisma-next/adapter-sqlite/runtime";
|
|
3
|
+
import { buildNamespacedEnums } from "@prisma-next/contract/enum-accessor";
|
|
3
4
|
import sqliteDriver from "@prisma-next/driver-sqlite/runtime";
|
|
4
5
|
import { SqlContractSerializer } from "@prisma-next/family-sql/ir";
|
|
5
6
|
import { instantiateExecutionStack } from "@prisma-next/framework-components/execution";
|
|
7
|
+
import { UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir";
|
|
6
8
|
import { sql } from "@prisma-next/sql-builder/runtime";
|
|
7
9
|
import { orm } from "@prisma-next/sql-orm-client";
|
|
8
10
|
import { createRawSql } from "@prisma-next/sql-relational-core/expression";
|
|
9
11
|
import { createExecutionContext, createRuntime, createSqlExecutionStack, withTransaction } from "@prisma-next/sql-runtime";
|
|
10
12
|
import sqliteTarget from "@prisma-next/target-sqlite/runtime";
|
|
11
|
-
import { castAs } from "@prisma-next/utils/casts";
|
|
13
|
+
import { blindCast, castAs } from "@prisma-next/utils/casts";
|
|
12
14
|
//#region src/runtime/binding.ts
|
|
13
15
|
function resolveSqliteBinding(input) {
|
|
14
16
|
return {
|
|
@@ -25,6 +27,9 @@ function resolveOptionalSqliteBinding(options) {
|
|
|
25
27
|
}
|
|
26
28
|
//#endregion
|
|
27
29
|
//#region src/runtime/sqlite.ts
|
|
30
|
+
function unboundNamespace(builderOutput) {
|
|
31
|
+
return blindCast(builderOutput[UNBOUND_NAMESPACE_ID]);
|
|
32
|
+
}
|
|
28
33
|
function resolveContract(options) {
|
|
29
34
|
const contractInput = "contractJson" in options && options.contractJson !== void 0 ? options.contractJson : options.contract;
|
|
30
35
|
return new SqlContractSerializer().deserializeContract(contractInput);
|
|
@@ -44,10 +49,11 @@ function sqlite(options) {
|
|
|
44
49
|
});
|
|
45
50
|
const rawCodecInferer = stack.adapter.rawCodecInferer;
|
|
46
51
|
const rawSqlTag = createRawSql(rawCodecInferer);
|
|
47
|
-
const sql$1 = sql({
|
|
52
|
+
const sql$1 = unboundNamespace(sql({
|
|
48
53
|
context,
|
|
49
54
|
rawCodecInferer
|
|
50
|
-
});
|
|
55
|
+
}));
|
|
56
|
+
const enums = unboundNamespace(Object.freeze(buildNamespacedEnums(contract.domain)));
|
|
51
57
|
let runtimeInstance;
|
|
52
58
|
let runtimeDriver;
|
|
53
59
|
let driverConnected = false;
|
|
@@ -91,7 +97,7 @@ function sqlite(options) {
|
|
|
91
97
|
};
|
|
92
98
|
return {
|
|
93
99
|
sql: sql$1,
|
|
94
|
-
orm: orm({
|
|
100
|
+
orm: unboundNamespace(orm({
|
|
95
101
|
context,
|
|
96
102
|
runtime: {
|
|
97
103
|
execute(plan) {
|
|
@@ -101,7 +107,8 @@ function sqlite(options) {
|
|
|
101
107
|
return getRuntime().connection();
|
|
102
108
|
}
|
|
103
109
|
}
|
|
104
|
-
}),
|
|
110
|
+
})),
|
|
111
|
+
enums,
|
|
105
112
|
raw: rawSqlTag,
|
|
106
113
|
context,
|
|
107
114
|
stack,
|
|
@@ -130,19 +137,20 @@ function sqlite(options) {
|
|
|
130
137
|
return Promise.reject(err);
|
|
131
138
|
}
|
|
132
139
|
return withTransaction(runtime, (txCtx) => {
|
|
133
|
-
const txSql = sql({
|
|
140
|
+
const txSql = unboundNamespace(sql({
|
|
134
141
|
context,
|
|
135
142
|
rawCodecInferer
|
|
136
|
-
});
|
|
137
|
-
const txOrm = orm({
|
|
143
|
+
}));
|
|
144
|
+
const txOrm = unboundNamespace(orm({
|
|
138
145
|
runtime: { execute(plan) {
|
|
139
146
|
return txCtx.execute(plan);
|
|
140
147
|
} },
|
|
141
148
|
context
|
|
142
|
-
});
|
|
149
|
+
}));
|
|
143
150
|
return fn(Object.assign(castAs(Object.create(txCtx)), {
|
|
144
151
|
sql: txSql,
|
|
145
|
-
orm: txOrm
|
|
152
|
+
orm: txOrm,
|
|
153
|
+
enums
|
|
146
154
|
}));
|
|
147
155
|
});
|
|
148
156
|
},
|
package/dist/runtime.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.mjs","names":["sql","sqlBuilder","ormBuilder"],"sources":["../src/runtime/binding.ts","../src/runtime/sqlite.ts"],"sourcesContent":["import type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';\n\nexport type SqliteBindingInput = { readonly path: string };\n\nexport function resolveSqliteBinding(input: SqliteBindingInput): SqliteBinding {\n return { kind: 'path', path: input.path };\n}\n\nexport function resolveOptionalSqliteBinding(options: {\n readonly path?: string;\n}): SqliteBinding | undefined {\n if (options.path === undefined) {\n return undefined;\n }\n return { kind: 'path', path: options.path };\n}\n","import sqliteAdapter from '@prisma-next/adapter-sqlite/runtime';\nimport type { Contract } from '@prisma-next/contract/types';\nimport type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';\nimport sqliteDriver from '@prisma-next/driver-sqlite/runtime';\nimport { SqlContractSerializer } from '@prisma-next/family-sql/ir';\nimport { instantiateExecutionStack } from '@prisma-next/framework-components/execution';\nimport { sql as sqlBuilder } from '@prisma-next/sql-builder/runtime';\nimport type { Db } from '@prisma-next/sql-builder/types';\nimport type { ExtractCodecTypes, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { orm as ormBuilder } from '@prisma-next/sql-orm-client';\nimport type { CodecTypesBase, RawSqlTag } from '@prisma-next/sql-relational-core/expression';\nimport { createRawSql } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n BindSiteParams,\n Declaration,\n ExecutionContext,\n ParamsFromDeclaration,\n PreparedStatement,\n Runtime,\n SqlExecutionStackWithDriver,\n SqlMiddleware,\n SqlRuntimeExtensionDescriptor,\n TransactionContext,\n VerifyMarkerOption,\n} from '@prisma-next/sql-runtime';\nimport {\n createExecutionContext,\n createRuntime,\n createSqlExecutionStack,\n withTransaction,\n} from '@prisma-next/sql-runtime';\nimport sqliteTarget from '@prisma-next/target-sqlite/runtime';\nimport { castAs } from '@prisma-next/utils/casts';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { resolveOptionalSqliteBinding, resolveSqliteBinding } from './binding';\n\nexport type SqliteTargetId = 'sqlite';\ntype OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;\n\nexport interface SqliteTransactionContext<TContract extends Contract<SqlStorage>>\n extends TransactionContext {\n readonly sql: Db<TContract>;\n readonly orm: OrmClient<TContract>;\n}\n\nexport interface SqliteClient<TContract extends Contract<SqlStorage>> {\n readonly sql: Db<TContract>;\n readonly orm: OrmClient<TContract>;\n readonly raw: RawSqlTag;\n readonly context: ExecutionContext<TContract>;\n readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;\n connect(bindingInput?: { readonly path: string }): Promise<Runtime>;\n runtime(): Runtime;\n prepare<\n D extends Declaration<CT>,\n Row,\n CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n >(\n declaration: D,\n callback: (sql: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;\n transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;\n close(): Promise<void>;\n [Symbol.asyncDispose](): Promise<void>;\n}\n\nexport interface SqliteOptionsBase {\n readonly extensions?: readonly SqlRuntimeExtensionDescriptor<SqliteTargetId>[];\n readonly middleware?: readonly SqlMiddleware[];\n readonly verifyMarker?: VerifyMarkerOption;\n}\n\nexport type SqliteOptionsWithContract<TContract extends Contract<SqlStorage>> = {\n readonly path?: string;\n} & SqliteOptionsBase & {\n readonly contract: TContract;\n readonly contractJson?: never;\n };\n\nexport type SqliteOptionsWithContractJson<TContract extends Contract<SqlStorage>> = {\n readonly path?: string;\n readonly _contract?: TContract;\n} & SqliteOptionsBase & {\n readonly contractJson: unknown;\n readonly contract?: never;\n };\n\nexport type SqliteOptions<TContract extends Contract<SqlStorage>> =\n | SqliteOptionsWithContract<TContract>\n | SqliteOptionsWithContractJson<TContract>;\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n options: SqliteOptions<TContract>,\n): TContract {\n const contractInput =\n 'contractJson' in options && options.contractJson !== undefined\n ? options.contractJson\n : (options as SqliteOptionsWithContract<TContract>).contract;\n return new SqlContractSerializer().deserializeContract(contractInput) as TContract;\n}\n\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n options: SqliteOptionsWithContract<TContract>,\n): SqliteClient<TContract>;\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n options: SqliteOptionsWithContractJson<TContract>,\n): SqliteClient<TContract>;\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n options: SqliteOptions<TContract>,\n): SqliteClient<TContract> {\n const contract = resolveContract(options);\n let binding = resolveOptionalSqliteBinding(options);\n const stack = createSqlExecutionStack({\n target: sqliteTarget,\n adapter: sqliteAdapter,\n driver: sqliteDriver,\n extensionPacks: options.extensions ?? [],\n });\n\n const context = createExecutionContext({\n contract,\n stack,\n });\n\n const rawCodecInferer = stack.adapter.rawCodecInferer;\n const rawSqlTag: RawSqlTag = createRawSql(rawCodecInferer);\n\n const sql: Db<TContract> = sqlBuilder<TContract>({ context, rawCodecInferer });\n let runtimeInstance: Runtime | undefined;\n let runtimeDriver: { connect(binding: unknown): Promise<void> } | undefined;\n let driverConnected = false;\n let connectPromise: Promise<void> | undefined;\n let closePromise: Promise<void> | undefined;\n let backgroundConnectError: unknown;\n let closed = false;\n let ownedDispose: (() => Promise<void>) | undefined;\n\n const connectDriver = async (resolvedBinding: SqliteBinding): Promise<void> => {\n if (driverConnected) return;\n if (!runtimeDriver) throw new Error('SQLite runtime driver missing');\n if (connectPromise) return connectPromise;\n connectPromise = runtimeDriver\n .connect(resolvedBinding)\n .then(() => {\n driverConnected = true;\n })\n .catch((err) => {\n backgroundConnectError = err;\n connectPromise = undefined;\n throw err;\n });\n return connectPromise;\n };\n\n const getRuntime = (): Runtime => {\n if (closed) {\n throw new Error('SQLite client is closed');\n }\n\n if (backgroundConnectError !== undefined) {\n throw backgroundConnectError;\n }\n\n if (runtimeInstance) {\n return runtimeInstance;\n }\n\n const stackInstance = instantiateExecutionStack(stack);\n const driverDescriptor = stack.driver;\n if (!driverDescriptor) {\n throw new Error('Driver descriptor missing from execution stack');\n }\n\n const driver = driverDescriptor.create();\n ownedDispose = () => driver.close();\n runtimeDriver = driver;\n if (binding !== undefined) {\n void connectDriver(binding).catch(() => undefined);\n }\n\n runtimeInstance = createRuntime({\n stackInstance,\n context,\n driver,\n ...ifDefined('verifyMarker', options.verifyMarker),\n ...(options.middleware ? { middleware: options.middleware } : {}),\n });\n\n return runtimeInstance;\n };\n\n const orm: OrmClient<TContract> = ormBuilder({\n context,\n runtime: {\n execute(plan) {\n return getRuntime().execute(plan);\n },\n connection() {\n return getRuntime().connection();\n },\n },\n });\n\n return {\n sql,\n orm,\n raw: rawSqlTag,\n context,\n stack,\n async connect(bindingInput) {\n if (closed) {\n throw new Error('SQLite client is closed');\n }\n\n if (driverConnected || connectPromise) {\n throw new Error('SQLite client already connected');\n }\n\n backgroundConnectError = undefined;\n\n if (bindingInput !== undefined) {\n binding = resolveSqliteBinding(bindingInput);\n }\n\n if (binding === undefined) {\n throw new Error(\n 'SQLite binding not configured. Pass path to sqlite(...) or call db.connect({ path }).',\n );\n }\n\n const runtime = getRuntime();\n if (driverConnected) {\n return runtime;\n }\n\n await connectDriver(binding);\n return runtime;\n },\n runtime() {\n return getRuntime();\n },\n prepare<\n D extends Declaration<CT>,\n Row,\n CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n >(\n declaration: D,\n callback: (sql: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {\n return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));\n },\n\n transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {\n let runtime: ReturnType<typeof getRuntime>;\n try {\n runtime = getRuntime();\n } catch (err) {\n return Promise.reject(err);\n }\n return withTransaction(runtime, (txCtx) => {\n const txSql: Db<TContract> = sqlBuilder<TContract>({\n context,\n rawCodecInferer,\n });\n\n const txOrm: OrmClient<TContract> = ormBuilder({\n runtime: {\n execute(plan) {\n return txCtx.execute(plan);\n },\n },\n context,\n });\n\n // Use `txCtx` as the prototype instead of spreading it so that live\n // accessors (notably the `invalidated` getter, which reads a closure\n // variable in `withTransaction`) remain wired to the original object.\n // Spreading would evaluate the getter once and freeze its value.\n const tx: SqliteTransactionContext<TContract> = Object.assign(\n castAs<TransactionContext>(Object.create(txCtx)),\n { sql: txSql, orm: txOrm },\n );\n\n return fn(tx);\n });\n },\n\n close(): Promise<void> {\n if (closePromise) return closePromise;\n closed = true;\n closePromise = (async () => {\n await connectPromise?.catch(() => undefined);\n await ownedDispose?.();\n })();\n return closePromise;\n },\n\n [Symbol.asyncDispose](): Promise<void> {\n return this.close();\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.mjs","names":["sql","sqlBuilder","ormBuilder"],"sources":["../src/runtime/binding.ts","../src/runtime/sqlite.ts"],"sourcesContent":["import type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';\n\nexport type SqliteBindingInput = { readonly path: string };\n\nexport function resolveSqliteBinding(input: SqliteBindingInput): SqliteBinding {\n return { kind: 'path', path: input.path };\n}\n\nexport function resolveOptionalSqliteBinding(options: {\n readonly path?: string;\n}): SqliteBinding | undefined {\n if (options.path === undefined) {\n return undefined;\n }\n return { kind: 'path', path: options.path };\n}\n","import sqliteAdapter from '@prisma-next/adapter-sqlite/runtime';\nimport { buildNamespacedEnums, type NamespacedEnums } from '@prisma-next/contract/enum-accessor';\nimport type { Contract } from '@prisma-next/contract/types';\nimport type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';\nimport sqliteDriver from '@prisma-next/driver-sqlite/runtime';\nimport { SqlContractSerializer } from '@prisma-next/family-sql/ir';\nimport { instantiateExecutionStack } from '@prisma-next/framework-components/execution';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport { sql as sqlBuilder } from '@prisma-next/sql-builder/runtime';\nimport type { Db } from '@prisma-next/sql-builder/types';\nimport type { ExtractCodecTypes, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { orm as ormBuilder } from '@prisma-next/sql-orm-client';\nimport type { CodecTypesBase, RawSqlTag } from '@prisma-next/sql-relational-core/expression';\nimport { createRawSql } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n BindSiteParams,\n Declaration,\n ExecutionContext,\n ParamsFromDeclaration,\n PreparedStatement,\n Runtime,\n SqlExecutionStackWithDriver,\n SqlMiddleware,\n SqlRuntimeExtensionDescriptor,\n TransactionContext,\n VerifyMarkerOption,\n} from '@prisma-next/sql-runtime';\nimport {\n createExecutionContext,\n createRuntime,\n createSqlExecutionStack,\n withTransaction,\n} from '@prisma-next/sql-runtime';\nimport sqliteTarget from '@prisma-next/target-sqlite/runtime';\nimport { blindCast, castAs } from '@prisma-next/utils/casts';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { resolveOptionalSqliteBinding, resolveSqliteBinding } from './binding';\n\nexport type SqliteTargetId = 'sqlite';\ntype OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;\n\ntype UnboundSql<TContract extends Contract<SqlStorage>> =\n Db<TContract>[typeof UNBOUND_NAMESPACE_ID];\ntype UnboundOrm<TContract extends Contract<SqlStorage>> =\n OrmClient<TContract>[typeof UNBOUND_NAMESPACE_ID];\ntype UnboundEnums<TContract extends Contract<SqlStorage>> =\n NamespacedEnums<TContract>[typeof UNBOUND_NAMESPACE_ID];\n\nfunction unboundNamespace<T>(builderOutput: { readonly [UNBOUND_NAMESPACE_ID]?: unknown }): T {\n return blindCast<T, 'the unbound namespace always exists on a sqlite builder output'>(\n builderOutput[UNBOUND_NAMESPACE_ID],\n );\n}\n\nexport interface SqliteTransactionContext<TContract extends Contract<SqlStorage>>\n extends TransactionContext {\n readonly sql: UnboundSql<TContract>;\n readonly orm: UnboundOrm<TContract>;\n readonly enums: UnboundEnums<TContract>;\n}\n\nexport interface SqliteClient<TContract extends Contract<SqlStorage>> {\n readonly sql: UnboundSql<TContract>;\n readonly orm: UnboundOrm<TContract>;\n readonly enums: UnboundEnums<TContract>;\n readonly raw: RawSqlTag;\n readonly context: ExecutionContext<TContract>;\n readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;\n connect(bindingInput?: { readonly path: string }): Promise<Runtime>;\n runtime(): Runtime;\n prepare<\n D extends Declaration<CT>,\n Row,\n CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n >(\n declaration: D,\n callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;\n transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;\n close(): Promise<void>;\n [Symbol.asyncDispose](): Promise<void>;\n}\n\nexport interface SqliteOptionsBase {\n readonly extensions?: readonly SqlRuntimeExtensionDescriptor<SqliteTargetId>[];\n readonly middleware?: readonly SqlMiddleware[];\n readonly verifyMarker?: VerifyMarkerOption;\n}\n\nexport type SqliteOptionsWithContract<TContract extends Contract<SqlStorage>> = {\n readonly path?: string;\n} & SqliteOptionsBase & {\n readonly contract: TContract;\n readonly contractJson?: never;\n };\n\nexport type SqliteOptionsWithContractJson<TContract extends Contract<SqlStorage>> = {\n readonly path?: string;\n readonly _contract?: TContract;\n} & SqliteOptionsBase & {\n readonly contractJson: unknown;\n readonly contract?: never;\n };\n\nexport type SqliteOptions<TContract extends Contract<SqlStorage>> =\n | SqliteOptionsWithContract<TContract>\n | SqliteOptionsWithContractJson<TContract>;\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n options: SqliteOptions<TContract>,\n): TContract {\n const contractInput =\n 'contractJson' in options && options.contractJson !== undefined\n ? options.contractJson\n : (options as SqliteOptionsWithContract<TContract>).contract;\n return new SqlContractSerializer().deserializeContract(contractInput) as TContract;\n}\n\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n options: SqliteOptionsWithContract<TContract>,\n): SqliteClient<TContract>;\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n options: SqliteOptionsWithContractJson<TContract>,\n): SqliteClient<TContract>;\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n options: SqliteOptions<TContract>,\n): SqliteClient<TContract> {\n const contract = resolveContract(options);\n let binding = resolveOptionalSqliteBinding(options);\n const stack = createSqlExecutionStack({\n target: sqliteTarget,\n adapter: sqliteAdapter,\n driver: sqliteDriver,\n extensionPacks: options.extensions ?? [],\n });\n\n const context = createExecutionContext({\n contract,\n stack,\n });\n\n const rawCodecInferer = stack.adapter.rawCodecInferer;\n const rawSqlTag: RawSqlTag = createRawSql(rawCodecInferer);\n\n const sql: UnboundSql<TContract> = unboundNamespace(\n sqlBuilder<TContract>({ context, rawCodecInferer }),\n );\n const enums: UnboundEnums<TContract> = unboundNamespace(\n Object.freeze(buildNamespacedEnums(contract.domain)),\n );\n let runtimeInstance: Runtime | undefined;\n let runtimeDriver: { connect(binding: unknown): Promise<void> } | undefined;\n let driverConnected = false;\n let connectPromise: Promise<void> | undefined;\n let closePromise: Promise<void> | undefined;\n let backgroundConnectError: unknown;\n let closed = false;\n let ownedDispose: (() => Promise<void>) | undefined;\n\n const connectDriver = async (resolvedBinding: SqliteBinding): Promise<void> => {\n if (driverConnected) return;\n if (!runtimeDriver) throw new Error('SQLite runtime driver missing');\n if (connectPromise) return connectPromise;\n connectPromise = runtimeDriver\n .connect(resolvedBinding)\n .then(() => {\n driverConnected = true;\n })\n .catch((err) => {\n backgroundConnectError = err;\n connectPromise = undefined;\n throw err;\n });\n return connectPromise;\n };\n\n const getRuntime = (): Runtime => {\n if (closed) {\n throw new Error('SQLite client is closed');\n }\n\n if (backgroundConnectError !== undefined) {\n throw backgroundConnectError;\n }\n\n if (runtimeInstance) {\n return runtimeInstance;\n }\n\n const stackInstance = instantiateExecutionStack(stack);\n const driverDescriptor = stack.driver;\n if (!driverDescriptor) {\n throw new Error('Driver descriptor missing from execution stack');\n }\n\n const driver = driverDescriptor.create();\n ownedDispose = () => driver.close();\n runtimeDriver = driver;\n if (binding !== undefined) {\n void connectDriver(binding).catch(() => undefined);\n }\n\n runtimeInstance = createRuntime({\n stackInstance,\n context,\n driver,\n ...ifDefined('verifyMarker', options.verifyMarker),\n ...(options.middleware ? { middleware: options.middleware } : {}),\n });\n\n return runtimeInstance;\n };\n\n const orm: UnboundOrm<TContract> = unboundNamespace(\n ormBuilder({\n context,\n runtime: {\n execute(plan) {\n return getRuntime().execute(plan);\n },\n connection() {\n return getRuntime().connection();\n },\n },\n }),\n );\n\n return {\n sql,\n orm,\n enums,\n raw: rawSqlTag,\n context,\n stack,\n async connect(bindingInput) {\n if (closed) {\n throw new Error('SQLite client is closed');\n }\n\n if (driverConnected || connectPromise) {\n throw new Error('SQLite client already connected');\n }\n\n backgroundConnectError = undefined;\n\n if (bindingInput !== undefined) {\n binding = resolveSqliteBinding(bindingInput);\n }\n\n if (binding === undefined) {\n throw new Error(\n 'SQLite binding not configured. Pass path to sqlite(...) or call db.connect({ path }).',\n );\n }\n\n const runtime = getRuntime();\n if (driverConnected) {\n return runtime;\n }\n\n await connectDriver(binding);\n return runtime;\n },\n runtime() {\n return getRuntime();\n },\n prepare<\n D extends Declaration<CT>,\n Row,\n CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n >(\n declaration: D,\n callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {\n return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));\n },\n\n transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {\n let runtime: ReturnType<typeof getRuntime>;\n try {\n runtime = getRuntime();\n } catch (err) {\n return Promise.reject(err);\n }\n return withTransaction(runtime, (txCtx) => {\n const txSql: UnboundSql<TContract> = unboundNamespace(\n sqlBuilder<TContract>({\n context,\n rawCodecInferer,\n }),\n );\n\n const txOrm: UnboundOrm<TContract> = unboundNamespace(\n ormBuilder({\n runtime: {\n execute(plan) {\n return txCtx.execute(plan);\n },\n },\n context,\n }),\n );\n\n // Use `txCtx` as the prototype instead of spreading it so that live\n // accessors (notably the `invalidated` getter, which reads a closure\n // variable in `withTransaction`) remain wired to the original object.\n // Spreading would evaluate the getter once and freeze its value.\n const tx: SqliteTransactionContext<TContract> = Object.assign(\n castAs<TransactionContext>(Object.create(txCtx)),\n { sql: txSql, orm: txOrm, enums },\n );\n\n return fn(tx);\n });\n },\n\n close(): Promise<void> {\n if (closePromise) return closePromise;\n closed = true;\n closePromise = (async () => {\n await connectPromise?.catch(() => undefined);\n await ownedDispose?.();\n })();\n return closePromise;\n },\n\n [Symbol.asyncDispose](): Promise<void> {\n return this.close();\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sqlite",
|
|
3
|
-
"version": "0.13.0-dev.
|
|
3
|
+
"version": "0.13.0-dev.10",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"description": "One-liner lazy SQLite client composition for Prisma Next",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@prisma-next/adapter-sqlite": "0.13.0-dev.
|
|
10
|
-
"@prisma-next/cli": "0.13.0-dev.
|
|
11
|
-
"@prisma-next/config": "0.13.0-dev.
|
|
12
|
-
"@prisma-next/contract": "0.13.0-dev.
|
|
13
|
-
"@prisma-next/driver-sqlite": "0.13.0-dev.
|
|
14
|
-
"@prisma-next/family-sql": "0.13.0-dev.
|
|
15
|
-
"@prisma-next/framework-components": "0.13.0-dev.
|
|
16
|
-
"@prisma-next/sql-builder": "0.13.0-dev.
|
|
17
|
-
"@prisma-next/sql-contract": "0.13.0-dev.
|
|
18
|
-
"@prisma-next/sql-contract-psl": "0.13.0-dev.
|
|
19
|
-
"@prisma-next/sql-contract-ts": "0.13.0-dev.
|
|
20
|
-
"@prisma-next/sql-orm-client": "0.13.0-dev.
|
|
21
|
-
"@prisma-next/sql-relational-core": "0.13.0-dev.
|
|
22
|
-
"@prisma-next/sql-runtime": "0.13.0-dev.
|
|
23
|
-
"@prisma-next/target-sqlite": "0.13.0-dev.
|
|
24
|
-
"@prisma-next/utils": "0.13.0-dev.
|
|
9
|
+
"@prisma-next/adapter-sqlite": "0.13.0-dev.10",
|
|
10
|
+
"@prisma-next/cli": "0.13.0-dev.10",
|
|
11
|
+
"@prisma-next/config": "0.13.0-dev.10",
|
|
12
|
+
"@prisma-next/contract": "0.13.0-dev.10",
|
|
13
|
+
"@prisma-next/driver-sqlite": "0.13.0-dev.10",
|
|
14
|
+
"@prisma-next/family-sql": "0.13.0-dev.10",
|
|
15
|
+
"@prisma-next/framework-components": "0.13.0-dev.10",
|
|
16
|
+
"@prisma-next/sql-builder": "0.13.0-dev.10",
|
|
17
|
+
"@prisma-next/sql-contract": "0.13.0-dev.10",
|
|
18
|
+
"@prisma-next/sql-contract-psl": "0.13.0-dev.10",
|
|
19
|
+
"@prisma-next/sql-contract-ts": "0.13.0-dev.10",
|
|
20
|
+
"@prisma-next/sql-orm-client": "0.13.0-dev.10",
|
|
21
|
+
"@prisma-next/sql-relational-core": "0.13.0-dev.10",
|
|
22
|
+
"@prisma-next/sql-runtime": "0.13.0-dev.10",
|
|
23
|
+
"@prisma-next/target-sqlite": "0.13.0-dev.10",
|
|
24
|
+
"@prisma-next/utils": "0.13.0-dev.10",
|
|
25
25
|
"pathe": "^2.0.3"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@prisma-next/test-utils": "0.13.0-dev.
|
|
29
|
-
"@prisma-next/tsconfig": "0.13.0-dev.
|
|
30
|
-
"@prisma-next/tsdown": "0.13.0-dev.
|
|
28
|
+
"@prisma-next/test-utils": "0.13.0-dev.10",
|
|
29
|
+
"@prisma-next/tsconfig": "0.13.0-dev.10",
|
|
30
|
+
"@prisma-next/tsdown": "0.13.0-dev.10",
|
|
31
31
|
"tsdown": "0.22.1",
|
|
32
32
|
"typescript": "5.9.3",
|
|
33
33
|
"vitest": "4.1.8"
|
package/src/runtime/sqlite.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import sqliteAdapter from '@prisma-next/adapter-sqlite/runtime';
|
|
2
|
+
import { buildNamespacedEnums, type NamespacedEnums } from '@prisma-next/contract/enum-accessor';
|
|
2
3
|
import type { Contract } from '@prisma-next/contract/types';
|
|
3
4
|
import type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';
|
|
4
5
|
import sqliteDriver from '@prisma-next/driver-sqlite/runtime';
|
|
5
6
|
import { SqlContractSerializer } from '@prisma-next/family-sql/ir';
|
|
6
7
|
import { instantiateExecutionStack } from '@prisma-next/framework-components/execution';
|
|
8
|
+
import { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';
|
|
7
9
|
import { sql as sqlBuilder } from '@prisma-next/sql-builder/runtime';
|
|
8
10
|
import type { Db } from '@prisma-next/sql-builder/types';
|
|
9
11
|
import type { ExtractCodecTypes, SqlStorage } from '@prisma-next/sql-contract/types';
|
|
@@ -31,22 +33,37 @@ import {
|
|
|
31
33
|
withTransaction,
|
|
32
34
|
} from '@prisma-next/sql-runtime';
|
|
33
35
|
import sqliteTarget from '@prisma-next/target-sqlite/runtime';
|
|
34
|
-
import { castAs } from '@prisma-next/utils/casts';
|
|
36
|
+
import { blindCast, castAs } from '@prisma-next/utils/casts';
|
|
35
37
|
import { ifDefined } from '@prisma-next/utils/defined';
|
|
36
38
|
import { resolveOptionalSqliteBinding, resolveSqliteBinding } from './binding';
|
|
37
39
|
|
|
38
40
|
export type SqliteTargetId = 'sqlite';
|
|
39
41
|
type OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;
|
|
40
42
|
|
|
43
|
+
type UnboundSql<TContract extends Contract<SqlStorage>> =
|
|
44
|
+
Db<TContract>[typeof UNBOUND_NAMESPACE_ID];
|
|
45
|
+
type UnboundOrm<TContract extends Contract<SqlStorage>> =
|
|
46
|
+
OrmClient<TContract>[typeof UNBOUND_NAMESPACE_ID];
|
|
47
|
+
type UnboundEnums<TContract extends Contract<SqlStorage>> =
|
|
48
|
+
NamespacedEnums<TContract>[typeof UNBOUND_NAMESPACE_ID];
|
|
49
|
+
|
|
50
|
+
function unboundNamespace<T>(builderOutput: { readonly [UNBOUND_NAMESPACE_ID]?: unknown }): T {
|
|
51
|
+
return blindCast<T, 'the unbound namespace always exists on a sqlite builder output'>(
|
|
52
|
+
builderOutput[UNBOUND_NAMESPACE_ID],
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
41
56
|
export interface SqliteTransactionContext<TContract extends Contract<SqlStorage>>
|
|
42
57
|
extends TransactionContext {
|
|
43
|
-
readonly sql:
|
|
44
|
-
readonly orm:
|
|
58
|
+
readonly sql: UnboundSql<TContract>;
|
|
59
|
+
readonly orm: UnboundOrm<TContract>;
|
|
60
|
+
readonly enums: UnboundEnums<TContract>;
|
|
45
61
|
}
|
|
46
62
|
|
|
47
63
|
export interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
48
|
-
readonly sql:
|
|
49
|
-
readonly orm:
|
|
64
|
+
readonly sql: UnboundSql<TContract>;
|
|
65
|
+
readonly orm: UnboundOrm<TContract>;
|
|
66
|
+
readonly enums: UnboundEnums<TContract>;
|
|
50
67
|
readonly raw: RawSqlTag;
|
|
51
68
|
readonly context: ExecutionContext<TContract>;
|
|
52
69
|
readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;
|
|
@@ -58,7 +75,7 @@ export interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
|
58
75
|
CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,
|
|
59
76
|
>(
|
|
60
77
|
declaration: D,
|
|
61
|
-
callback: (sql:
|
|
78
|
+
callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,
|
|
62
79
|
): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;
|
|
63
80
|
transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;
|
|
64
81
|
close(): Promise<void>;
|
|
@@ -126,7 +143,12 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
126
143
|
const rawCodecInferer = stack.adapter.rawCodecInferer;
|
|
127
144
|
const rawSqlTag: RawSqlTag = createRawSql(rawCodecInferer);
|
|
128
145
|
|
|
129
|
-
const sql:
|
|
146
|
+
const sql: UnboundSql<TContract> = unboundNamespace(
|
|
147
|
+
sqlBuilder<TContract>({ context, rawCodecInferer }),
|
|
148
|
+
);
|
|
149
|
+
const enums: UnboundEnums<TContract> = unboundNamespace(
|
|
150
|
+
Object.freeze(buildNamespacedEnums(contract.domain)),
|
|
151
|
+
);
|
|
130
152
|
let runtimeInstance: Runtime | undefined;
|
|
131
153
|
let runtimeDriver: { connect(binding: unknown): Promise<void> } | undefined;
|
|
132
154
|
let driverConnected = false;
|
|
@@ -190,21 +212,24 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
190
212
|
return runtimeInstance;
|
|
191
213
|
};
|
|
192
214
|
|
|
193
|
-
const orm:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
215
|
+
const orm: UnboundOrm<TContract> = unboundNamespace(
|
|
216
|
+
ormBuilder({
|
|
217
|
+
context,
|
|
218
|
+
runtime: {
|
|
219
|
+
execute(plan) {
|
|
220
|
+
return getRuntime().execute(plan);
|
|
221
|
+
},
|
|
222
|
+
connection() {
|
|
223
|
+
return getRuntime().connection();
|
|
224
|
+
},
|
|
201
225
|
},
|
|
202
|
-
},
|
|
203
|
-
|
|
226
|
+
}),
|
|
227
|
+
);
|
|
204
228
|
|
|
205
229
|
return {
|
|
206
230
|
sql,
|
|
207
231
|
orm,
|
|
232
|
+
enums,
|
|
208
233
|
raw: rawSqlTag,
|
|
209
234
|
context,
|
|
210
235
|
stack,
|
|
@@ -246,7 +271,7 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
246
271
|
CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,
|
|
247
272
|
>(
|
|
248
273
|
declaration: D,
|
|
249
|
-
callback: (sql:
|
|
274
|
+
callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,
|
|
250
275
|
): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {
|
|
251
276
|
return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));
|
|
252
277
|
},
|
|
@@ -259,19 +284,23 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
259
284
|
return Promise.reject(err);
|
|
260
285
|
}
|
|
261
286
|
return withTransaction(runtime, (txCtx) => {
|
|
262
|
-
const txSql:
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
287
|
+
const txSql: UnboundSql<TContract> = unboundNamespace(
|
|
288
|
+
sqlBuilder<TContract>({
|
|
289
|
+
context,
|
|
290
|
+
rawCodecInferer,
|
|
291
|
+
}),
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
const txOrm: UnboundOrm<TContract> = unboundNamespace(
|
|
295
|
+
ormBuilder({
|
|
296
|
+
runtime: {
|
|
297
|
+
execute(plan) {
|
|
298
|
+
return txCtx.execute(plan);
|
|
299
|
+
},
|
|
271
300
|
},
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
301
|
+
context,
|
|
302
|
+
}),
|
|
303
|
+
);
|
|
275
304
|
|
|
276
305
|
// Use `txCtx` as the prototype instead of spreading it so that live
|
|
277
306
|
// accessors (notably the `invalidated` getter, which reads a closure
|
|
@@ -279,7 +308,7 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
279
308
|
// Spreading would evaluate the getter once and freeze its value.
|
|
280
309
|
const tx: SqliteTransactionContext<TContract> = Object.assign(
|
|
281
310
|
castAs<TransactionContext>(Object.create(txCtx)),
|
|
282
|
-
{ sql: txSql, orm: txOrm },
|
|
311
|
+
{ sql: txSql, orm: txOrm, enums },
|
|
283
312
|
);
|
|
284
313
|
|
|
285
314
|
return fn(tx);
|