@prisma-next/sqlite 0.12.0 → 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/config.d.mts.map +1 -1
- package/dist/config.mjs +4 -2
- package/dist/config.mjs.map +1 -1
- package/dist/contract-builder.d.mts +8 -7
- package/dist/contract-builder.d.mts.map +1 -1
- package/dist/contract-builder.mjs +9 -12
- package/dist/contract-builder.mjs.map +1 -1
- package/dist/runtime.d.mts +16 -4
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +38 -5
- package/dist/runtime.mjs.map +1 -1
- package/package.json +22 -22
- package/src/config/define-config.ts +4 -2
- package/src/contract/define-contract.ts +15 -24
- package/src/runtime/sqlite.ts +89 -15
package/dist/config.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.mts","names":[],"sources":["../src/config/define-config.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../src/config/define-config.ts"],"mappings":";;;;UAaiB,mBAAA;EAAA,SACN,QAAA;EAAA,SACA,UAAA;EAAA,SACA,EAAA;IAAA,SACE,UAAA;EAAA;EAAA,SAEF,UAAA,YAAsB,0BAA0B;EAAA,SAChD,UAAA;IAAA,SACE,GAAA;EAAA;AAAA;AAAA,iBAYG,YAAA,CAAa,OAAA,EAAS,mBAAA,GAAsB,gBAAgB"}
|
package/dist/config.mjs
CHANGED
|
@@ -4,7 +4,8 @@ import sqliteDriver from "@prisma-next/driver-sqlite/control";
|
|
|
4
4
|
import sql from "@prisma-next/family-sql/control";
|
|
5
5
|
import { prismaContract } from "@prisma-next/sql-contract-psl/provider";
|
|
6
6
|
import { typescriptContractFromPath } from "@prisma-next/sql-contract-ts/config-types";
|
|
7
|
-
import sqlite from "@prisma-next/target-sqlite/control";
|
|
7
|
+
import sqlite, { sqliteCreateNamespace } from "@prisma-next/target-sqlite/control";
|
|
8
|
+
import sqlitePackRef from "@prisma-next/target-sqlite/pack";
|
|
8
9
|
import { ifDefined } from "@prisma-next/utils/defined";
|
|
9
10
|
import { extname, join } from "pathe";
|
|
10
11
|
//#region src/config/define-config.ts
|
|
@@ -24,7 +25,8 @@ function defineConfig(options) {
|
|
|
24
25
|
extensionPacks: extensions,
|
|
25
26
|
contract: extname(options.contract) === ".ts" ? typescriptContractFromPath(options.contract, output) : prismaContract(options.contract, {
|
|
26
27
|
output,
|
|
27
|
-
target:
|
|
28
|
+
target: sqlitePackRef,
|
|
29
|
+
createNamespace: sqliteCreateNamespace
|
|
28
30
|
}),
|
|
29
31
|
...ifDefined("db", options.db),
|
|
30
32
|
...ifDefined("migrations", options.migrations)
|
package/dist/config.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":["coreDefineConfig"],"sources":["../src/config/define-config.ts"],"sourcesContent":["import sqliteAdapter from '@prisma-next/adapter-sqlite/control';\nimport type { PrismaNextConfig } from '@prisma-next/config/config-types';\nimport { defineConfig as coreDefineConfig } from '@prisma-next/config/config-types';\nimport sqliteDriver from '@prisma-next/driver-sqlite/control';\nimport sql from '@prisma-next/family-sql/control';\nimport type { ControlExtensionDescriptor } from '@prisma-next/framework-components/control';\nimport { prismaContract } from '@prisma-next/sql-contract-psl/provider';\nimport { typescriptContractFromPath } from '@prisma-next/sql-contract-ts/config-types';\nimport sqlite from '@prisma-next/target-sqlite/control';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { extname, join } from 'pathe';\n\nexport interface SqliteConfigOptions {\n readonly contract: string;\n readonly outputPath?: string;\n readonly db?: {\n readonly connection?: string;\n };\n readonly extensions?: readonly ControlExtensionDescriptor<'sql', 'sqlite'>[];\n readonly migrations?: {\n readonly dir?: string;\n };\n}\n\nfunction deriveOutputPath(contractPath: string): string {\n const ext = extname(contractPath);\n if (ext.length === 0) {\n return `${contractPath}.json`;\n }\n return `${contractPath.slice(0, -ext.length)}.json`;\n}\n\nexport function defineConfig(options: SqliteConfigOptions): PrismaNextConfig<'sql', 'sqlite'> {\n const extensions = options.extensions ?? [];\n const output =\n options.outputPath !== undefined\n ? join(options.outputPath, 'contract.json')\n : deriveOutputPath(options.contract);\n const ext = extname(options.contract);\n\n const contractConfig =\n ext === '.ts'\n ? typescriptContractFromPath(options.contract, output)\n : prismaContract(options.contract, {\n output,\n target:
|
|
1
|
+
{"version":3,"file":"config.mjs","names":["coreDefineConfig"],"sources":["../src/config/define-config.ts"],"sourcesContent":["import sqliteAdapter from '@prisma-next/adapter-sqlite/control';\nimport type { PrismaNextConfig } from '@prisma-next/config/config-types';\nimport { defineConfig as coreDefineConfig } from '@prisma-next/config/config-types';\nimport sqliteDriver from '@prisma-next/driver-sqlite/control';\nimport sql from '@prisma-next/family-sql/control';\nimport type { ControlExtensionDescriptor } from '@prisma-next/framework-components/control';\nimport { prismaContract } from '@prisma-next/sql-contract-psl/provider';\nimport { typescriptContractFromPath } from '@prisma-next/sql-contract-ts/config-types';\nimport sqlite, { sqliteCreateNamespace } from '@prisma-next/target-sqlite/control';\nimport sqlitePackRef from '@prisma-next/target-sqlite/pack';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { extname, join } from 'pathe';\n\nexport interface SqliteConfigOptions {\n readonly contract: string;\n readonly outputPath?: string;\n readonly db?: {\n readonly connection?: string;\n };\n readonly extensions?: readonly ControlExtensionDescriptor<'sql', 'sqlite'>[];\n readonly migrations?: {\n readonly dir?: string;\n };\n}\n\nfunction deriveOutputPath(contractPath: string): string {\n const ext = extname(contractPath);\n if (ext.length === 0) {\n return `${contractPath}.json`;\n }\n return `${contractPath.slice(0, -ext.length)}.json`;\n}\n\nexport function defineConfig(options: SqliteConfigOptions): PrismaNextConfig<'sql', 'sqlite'> {\n const extensions = options.extensions ?? [];\n const output =\n options.outputPath !== undefined\n ? join(options.outputPath, 'contract.json')\n : deriveOutputPath(options.contract);\n const ext = extname(options.contract);\n\n const contractConfig =\n ext === '.ts'\n ? typescriptContractFromPath(options.contract, output)\n : prismaContract(options.contract, {\n output,\n target: sqlitePackRef,\n createNamespace: sqliteCreateNamespace,\n });\n\n return coreDefineConfig({\n family: sql,\n target: sqlite,\n adapter: sqliteAdapter,\n driver: sqliteDriver,\n extensionPacks: extensions,\n contract: contractConfig,\n ...ifDefined('db', options.db),\n ...ifDefined('migrations', options.migrations),\n });\n}\n"],"mappings":";;;;;;;;;;;AAyBA,SAAS,iBAAiB,cAA8B;CACtD,MAAM,MAAM,QAAQ,YAAY;CAChC,IAAI,IAAI,WAAW,GACjB,OAAO,GAAG,aAAa;CAEzB,OAAO,GAAG,aAAa,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE;AAC/C;AAEA,SAAgB,aAAa,SAAiE;CAC5F,MAAM,aAAa,QAAQ,cAAc,CAAC;CAC1C,MAAM,SACJ,QAAQ,eAAe,KAAA,IACnB,KAAK,QAAQ,YAAY,eAAe,IACxC,iBAAiB,QAAQ,QAAQ;CAYvC,OAAOA,eAAiB;EACtB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,gBAAgB;EAChB,UAjBU,QAAQ,QAAQ,QAGxB,MAAM,QACJ,2BAA2B,QAAQ,UAAU,MAAM,IACnD,eAAe,QAAQ,UAAU;GAC/B;GACA,QAAQ;GACR,iBAAiB;EACnB,CAAC;EASL,GAAG,UAAU,MAAM,QAAQ,EAAE;EAC7B,GAAG,UAAU,cAAc,QAAQ,UAAU;CAC/C,CAAC;AACH"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import
|
|
1
|
+
import sqlitePackRef from "@prisma-next/target-sqlite/pack";
|
|
2
|
+
import { ComposedAuthoringHelpers, ComposedAuthoringHelpers as ComposedAuthoringHelpers$1, ContractDefinition, ContractInput, ContractInput as ContractInput$1, ContractModelBuilder, FieldNode, ForeignKeyNode, IndexNode, ModelLike, ModelLike as ModelLike$1, ModelNode, PrimaryKeyNode, RelationNode, ScalarFieldBuilder, UniqueConstraintNode, buildBoundContract, field, model, rel } from "@prisma-next/sql-contract-ts/contract-builder";
|
|
2
3
|
import sqlFamilyPack from "@prisma-next/family-sql/pack";
|
|
3
|
-
import sqlitePack from "@prisma-next/target-sqlite/pack";
|
|
4
4
|
import { ExtensionPackRef } from "@prisma-next/framework-components/components";
|
|
5
5
|
import { StorageTypeInstance } from "@prisma-next/sql-contract/types";
|
|
6
6
|
|
|
7
7
|
//#region src/contract/define-contract.d.ts
|
|
8
8
|
type SqlFamily = typeof sqlFamilyPack;
|
|
9
|
-
type SqlitePack = typeof
|
|
9
|
+
type SqlitePack = typeof sqlitePackRef;
|
|
10
10
|
type TypesConstraint = Record<string, StorageTypeInstance>;
|
|
11
11
|
type ModelsConstraint = Record<string, ModelLike$1>;
|
|
12
|
-
type SqliteResult<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> =
|
|
13
|
-
readonly
|
|
14
|
-
readonly
|
|
15
|
-
|
|
12
|
+
type SqliteResult<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = ReturnType<typeof buildBoundContract<SqlFamily, SqlitePack, {
|
|
13
|
+
readonly types?: Types;
|
|
14
|
+
readonly models?: Models;
|
|
15
|
+
readonly extensionPacks?: ExtensionPacks;
|
|
16
|
+
}>>;
|
|
16
17
|
type SqliteBaseScaffold<ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = Omit<ContractInput$1<SqlFamily, SqlitePack, Record<never, never>, Record<never, never>, ExtensionPacks>, 'family' | 'target' | 'types' | 'models'>;
|
|
17
18
|
type SqliteDefinition<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = SqliteBaseScaffold<ExtensionPacks> & {
|
|
18
19
|
readonly types?: Types;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract/define-contract.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract/define-contract.ts"],"mappings":";;;;;;;KAYK,SAAA,UAAmB,aAAa;AAAA,KAChC,UAAA,UAAoB,aAAU;AAAA,KAE9B,eAAA,GAAkB,MAAM,SAAS,mBAAA;AAAA,KACjC,gBAAA,GAAmB,MAAM,SAAS,WAAA;AAAA,KAElC,YAAA,eACW,eAAA,iBACC,gBAAA,yBACQ,MAAA,SAAe,gBAAA,gCACpC,UAAA,QACK,kBAAA,CACL,SAAA,EACA,UAAA;EAAA,SACW,KAAA,GAAQ,KAAA;EAAA,SAAgB,MAAA,GAAS,MAAA;EAAA,SAAiB,cAAA,GAAiB,cAAA;AAAA;AAAA,KAI7E,kBAAA,wBACoB,MAAA,SAAe,gBAAA,gCACpC,IAAA,CACF,eAAA,CAAc,SAAA,EAAW,UAAA,EAAY,MAAA,gBAAsB,MAAA,gBAAsB,cAAA;AAAA,KAI9E,gBAAA,eACW,eAAA,iBACC,gBAAA,yBACQ,MAAA,SAAe,gBAAA,gCACpC,kBAAA,CAAmB,cAAA;EAAA,SACZ,KAAA,GAAQ,KAAA;EAAA,SACR,MAAA,GAAS,MAAA;AAAA;AAAA,KAGf,cAAA,wBACoB,MAAA,SAAe,gBAAA,gCACpC,kBAAA,CAAmB,cAAA;AAAA,iBAEP,cAAA,qBACM,eAAA,GAAkB,MAAA,qCACjB,gBAAA,GAAmB,MAAA,6CAEpC,MAAA,SAAe,gBAAA,0CAGnB,UAAA,EAAY,gBAAA,CAAiB,KAAA,EAAO,MAAA,EAAQ,cAAA,IAC3C,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,cAAA;AAAA,iBAEf,cAAA,qBACM,eAAA,GAAkB,MAAA,qCACjB,gBAAA,GAAmB,MAAA,6CAEpC,MAAA,SAAe,gBAAA,0CAGnB,QAAA,EAAU,cAAA,CAAe,cAAA,GACzB,OAAA,GAAU,OAAA,EAAS,0BAAA,CAAyB,SAAA,EAAW,UAAA,EAAY,cAAA;EAAA,SACxD,KAAA,GAAQ,KAAA;EAAA,SACR,MAAA,GAAS,MAAA;AAAA,IAEnB,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,cAAA"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sqliteCreateNamespace } from "@prisma-next/target-sqlite/control";
|
|
2
|
+
import sqlitePackRef from "@prisma-next/target-sqlite/pack";
|
|
3
|
+
import { buildBoundContract, field, model, rel } from "@prisma-next/sql-contract-ts/contract-builder";
|
|
2
4
|
import sqlFamilyPack from "@prisma-next/family-sql/pack";
|
|
3
|
-
import sqlitePack from "@prisma-next/target-sqlite/pack";
|
|
4
5
|
//#region src/contract/define-contract.ts
|
|
5
|
-
function defineContract(
|
|
6
|
-
const
|
|
7
|
-
...
|
|
8
|
-
|
|
9
|
-
target: sqlitePack
|
|
6
|
+
function defineContract(definition, factory) {
|
|
7
|
+
const bound = {
|
|
8
|
+
...definition,
|
|
9
|
+
createNamespace: sqliteCreateNamespace
|
|
10
10
|
};
|
|
11
|
-
if (factory !== void 0)
|
|
12
|
-
|
|
13
|
-
return defineContract$1(scaffoldOnly, factory);
|
|
14
|
-
}
|
|
15
|
-
return defineContract$1(full);
|
|
11
|
+
if (factory !== void 0) return buildBoundContract(sqlFamilyPack, sqlitePackRef, bound, factory);
|
|
12
|
+
return buildBoundContract(sqlFamilyPack, sqlitePackRef, bound);
|
|
16
13
|
}
|
|
17
14
|
//#endregion
|
|
18
15
|
export { defineContract, field, model, rel };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-builder.mjs","names":["
|
|
1
|
+
{"version":3,"file":"contract-builder.mjs","names":["sqlitePack"],"sources":["../src/contract/define-contract.ts"],"sourcesContent":["import sqlFamilyPack from '@prisma-next/family-sql/pack';\nimport type { ExtensionPackRef } from '@prisma-next/framework-components/components';\nimport type { StorageTypeInstance } from '@prisma-next/sql-contract/types';\nimport type {\n ComposedAuthoringHelpers,\n ContractInput,\n ModelLike,\n} from '@prisma-next/sql-contract-ts/contract-builder';\nimport { buildBoundContract } from '@prisma-next/sql-contract-ts/contract-builder';\nimport { sqliteCreateNamespace } from '@prisma-next/target-sqlite/control';\nimport sqlitePack from '@prisma-next/target-sqlite/pack';\n\ntype SqlFamily = typeof sqlFamilyPack;\ntype SqlitePack = typeof sqlitePack;\n\ntype TypesConstraint = Record<string, StorageTypeInstance>;\ntype ModelsConstraint = Record<string, ModelLike>;\n\ntype SqliteResult<\n Types extends TypesConstraint,\n Models extends ModelsConstraint,\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = ReturnType<\n typeof buildBoundContract<\n SqlFamily,\n SqlitePack,\n { readonly types?: Types; readonly models?: Models; readonly extensionPacks?: ExtensionPacks }\n >\n>;\n\ntype SqliteBaseScaffold<\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = Omit<\n ContractInput<SqlFamily, SqlitePack, Record<never, never>, Record<never, never>, ExtensionPacks>,\n 'family' | 'target' | 'types' | 'models'\n>;\n\ntype SqliteDefinition<\n Types extends TypesConstraint,\n Models extends ModelsConstraint,\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = SqliteBaseScaffold<ExtensionPacks> & {\n readonly types?: Types;\n readonly models?: Models;\n};\n\ntype SqliteScaffold<\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = SqliteBaseScaffold<ExtensionPacks>;\n\nexport function defineContract<\n const Types extends TypesConstraint = Record<never, never>,\n const Models extends ModelsConstraint = Record<never, never>,\n const ExtensionPacks extends\n | Record<string, ExtensionPackRef<'sql', string>>\n | undefined = undefined,\n>(\n definition: SqliteDefinition<Types, Models, ExtensionPacks>,\n): SqliteResult<Types, Models, ExtensionPacks>;\n\nexport function defineContract<\n const Types extends TypesConstraint = Record<never, never>,\n const Models extends ModelsConstraint = Record<never, never>,\n const ExtensionPacks extends\n | Record<string, ExtensionPackRef<'sql', string>>\n | undefined = undefined,\n>(\n scaffold: SqliteScaffold<ExtensionPacks>,\n factory: (helpers: ComposedAuthoringHelpers<SqlFamily, SqlitePack, ExtensionPacks>) => {\n readonly types?: Types;\n readonly models?: Models;\n },\n): SqliteResult<Types, Models, ExtensionPacks>;\n\n// Implementation — delegates to buildBoundContract which pre-binds family/target,\n// carrying zero casts at this layer.\nexport function defineContract(\n definition: SqliteDefinition<TypesConstraint, ModelsConstraint, undefined>,\n factory?: (helpers: ComposedAuthoringHelpers<SqlFamily, SqlitePack, undefined>) => {\n readonly types?: TypesConstraint;\n readonly models?: ModelsConstraint;\n },\n): SqliteResult<TypesConstraint, ModelsConstraint, undefined> {\n const bound = { ...definition, createNamespace: sqliteCreateNamespace };\n if (factory !== undefined) {\n return buildBoundContract(sqlFamilyPack, sqlitePack, bound, factory);\n }\n return buildBoundContract(sqlFamilyPack, sqlitePack, bound);\n}\n"],"mappings":";;;;;AA4EA,SAAgB,eACd,YACA,SAI4D;CAC5D,MAAM,QAAQ;EAAE,GAAG;EAAY,iBAAiB;CAAsB;CACtE,IAAI,YAAY,KAAA,GACd,OAAO,mBAAmB,eAAeA,eAAY,OAAO,OAAO;CAErE,OAAO,mBAAmB,eAAeA,eAAY,KAAK;AAC5D"}
|
package/dist/runtime.d.mts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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
|
-
import { BindSiteParams, Declaration, ExecutionContext, ParamsFromDeclaration, PreparedStatement, Runtime, SqlExecutionStackWithDriver, SqlMiddleware, SqlRuntimeExtensionDescriptor, VerifyMarkerOption } from "@prisma-next/sql-runtime";
|
|
5
|
+
import { BindSiteParams, Declaration, ExecutionContext, ParamsFromDeclaration, PreparedStatement, Runtime, SqlExecutionStackWithDriver, SqlMiddleware, SqlRuntimeExtensionDescriptor, TransactionContext, VerifyMarkerOption } from "@prisma-next/sql-runtime";
|
|
4
6
|
import { ExtractCodecTypes, SqlStorage } from "@prisma-next/sql-contract/types";
|
|
5
7
|
import { Contract } from "@prisma-next/contract/types";
|
|
6
8
|
import { Db } from "@prisma-next/sql-builder/types";
|
|
@@ -14,9 +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];
|
|
22
|
+
interface SqliteTransactionContext<TContract extends Contract<SqlStorage>> extends TransactionContext {
|
|
23
|
+
readonly sql: UnboundSql<TContract>;
|
|
24
|
+
readonly orm: UnboundOrm<TContract>;
|
|
25
|
+
readonly enums: UnboundEnums<TContract>;
|
|
26
|
+
}
|
|
17
27
|
interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
18
|
-
readonly sql:
|
|
19
|
-
readonly orm:
|
|
28
|
+
readonly sql: UnboundSql<TContract>;
|
|
29
|
+
readonly orm: UnboundOrm<TContract>;
|
|
30
|
+
readonly enums: UnboundEnums<TContract>;
|
|
20
31
|
readonly raw: RawSqlTag;
|
|
21
32
|
readonly context: ExecutionContext<TContract>;
|
|
22
33
|
readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;
|
|
@@ -24,7 +35,8 @@ interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
|
24
35
|
readonly path: string;
|
|
25
36
|
}): Promise<Runtime>;
|
|
26
37
|
runtime(): Runtime;
|
|
27
|
-
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>>;
|
|
39
|
+
transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;
|
|
28
40
|
close(): Promise<void>;
|
|
29
41
|
[Symbol.asyncDispose](): Promise<void>;
|
|
30
42
|
}
|
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,13 +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
|
-
import { createExecutionContext, createRuntime, createSqlExecutionStack } from "@prisma-next/sql-runtime";
|
|
11
|
+
import { createExecutionContext, createRuntime, createSqlExecutionStack, withTransaction } from "@prisma-next/sql-runtime";
|
|
10
12
|
import sqliteTarget from "@prisma-next/target-sqlite/runtime";
|
|
13
|
+
import { blindCast, castAs } from "@prisma-next/utils/casts";
|
|
11
14
|
//#region src/runtime/binding.ts
|
|
12
15
|
function resolveSqliteBinding(input) {
|
|
13
16
|
return {
|
|
@@ -24,6 +27,9 @@ function resolveOptionalSqliteBinding(options) {
|
|
|
24
27
|
}
|
|
25
28
|
//#endregion
|
|
26
29
|
//#region src/runtime/sqlite.ts
|
|
30
|
+
function unboundNamespace(builderOutput) {
|
|
31
|
+
return blindCast(builderOutput[UNBOUND_NAMESPACE_ID]);
|
|
32
|
+
}
|
|
27
33
|
function resolveContract(options) {
|
|
28
34
|
const contractInput = "contractJson" in options && options.contractJson !== void 0 ? options.contractJson : options.contract;
|
|
29
35
|
return new SqlContractSerializer().deserializeContract(contractInput);
|
|
@@ -43,10 +49,11 @@ function sqlite(options) {
|
|
|
43
49
|
});
|
|
44
50
|
const rawCodecInferer = stack.adapter.rawCodecInferer;
|
|
45
51
|
const rawSqlTag = createRawSql(rawCodecInferer);
|
|
46
|
-
const sql$1 = sql({
|
|
52
|
+
const sql$1 = unboundNamespace(sql({
|
|
47
53
|
context,
|
|
48
54
|
rawCodecInferer
|
|
49
|
-
});
|
|
55
|
+
}));
|
|
56
|
+
const enums = unboundNamespace(Object.freeze(buildNamespacedEnums(contract.domain)));
|
|
50
57
|
let runtimeInstance;
|
|
51
58
|
let runtimeDriver;
|
|
52
59
|
let driverConnected = false;
|
|
@@ -90,7 +97,7 @@ function sqlite(options) {
|
|
|
90
97
|
};
|
|
91
98
|
return {
|
|
92
99
|
sql: sql$1,
|
|
93
|
-
orm: orm({
|
|
100
|
+
orm: unboundNamespace(orm({
|
|
94
101
|
context,
|
|
95
102
|
runtime: {
|
|
96
103
|
execute(plan) {
|
|
@@ -100,7 +107,8 @@ function sqlite(options) {
|
|
|
100
107
|
return getRuntime().connection();
|
|
101
108
|
}
|
|
102
109
|
}
|
|
103
|
-
}),
|
|
110
|
+
})),
|
|
111
|
+
enums,
|
|
104
112
|
raw: rawSqlTag,
|
|
105
113
|
context,
|
|
106
114
|
stack,
|
|
@@ -121,6 +129,31 @@ function sqlite(options) {
|
|
|
121
129
|
prepare(declaration, callback) {
|
|
122
130
|
return getRuntime().prepare(declaration, (params) => callback(sql$1, params));
|
|
123
131
|
},
|
|
132
|
+
transaction(fn) {
|
|
133
|
+
let runtime;
|
|
134
|
+
try {
|
|
135
|
+
runtime = getRuntime();
|
|
136
|
+
} catch (err) {
|
|
137
|
+
return Promise.reject(err);
|
|
138
|
+
}
|
|
139
|
+
return withTransaction(runtime, (txCtx) => {
|
|
140
|
+
const txSql = unboundNamespace(sql({
|
|
141
|
+
context,
|
|
142
|
+
rawCodecInferer
|
|
143
|
+
}));
|
|
144
|
+
const txOrm = unboundNamespace(orm({
|
|
145
|
+
runtime: { execute(plan) {
|
|
146
|
+
return txCtx.execute(plan);
|
|
147
|
+
} },
|
|
148
|
+
context
|
|
149
|
+
}));
|
|
150
|
+
return fn(Object.assign(castAs(Object.create(txCtx)), {
|
|
151
|
+
sql: txSql,
|
|
152
|
+
orm: txOrm,
|
|
153
|
+
enums
|
|
154
|
+
}));
|
|
155
|
+
});
|
|
156
|
+
},
|
|
124
157
|
close() {
|
|
125
158
|
if (closePromise) return closePromise;
|
|
126
159
|
closed = true;
|
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 VerifyMarkerOption,\n} from '@prisma-next/sql-runtime';\nimport {\n createExecutionContext,\n createRuntime,\n createSqlExecutionStack,\n} from '@prisma-next/sql-runtime';\nimport sqliteTarget from '@prisma-next/target-sqlite/runtime';\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 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 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 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,36 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sqlite",
|
|
3
|
-
"version": "0.
|
|
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.
|
|
10
|
-
"@prisma-next/cli": "0.
|
|
11
|
-
"@prisma-next/config": "0.
|
|
12
|
-
"@prisma-next/contract": "0.
|
|
13
|
-
"@prisma-next/driver-sqlite": "0.
|
|
14
|
-
"@prisma-next/family-sql": "0.
|
|
15
|
-
"@prisma-next/framework-components": "0.
|
|
16
|
-
"@prisma-next/sql-builder": "0.
|
|
17
|
-
"@prisma-next/sql-contract": "0.
|
|
18
|
-
"@prisma-next/sql-contract-psl": "0.
|
|
19
|
-
"@prisma-next/sql-contract-ts": "0.
|
|
20
|
-
"@prisma-next/sql-orm-client": "0.
|
|
21
|
-
"@prisma-next/sql-relational-core": "0.
|
|
22
|
-
"@prisma-next/sql-runtime": "0.
|
|
23
|
-
"@prisma-next/target-sqlite": "0.
|
|
24
|
-
"@prisma-next/utils": "0.
|
|
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.
|
|
29
|
-
"@prisma-next/tsconfig": "0.
|
|
30
|
-
"@prisma-next/tsdown": "0.
|
|
31
|
-
"tsdown": "0.22.
|
|
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
|
+
"tsdown": "0.22.1",
|
|
32
32
|
"typescript": "5.9.3",
|
|
33
|
-
"vitest": "4.1.
|
|
33
|
+
"vitest": "4.1.8"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"typescript": ">=5.9"
|
|
@@ -6,7 +6,8 @@ import sql from '@prisma-next/family-sql/control';
|
|
|
6
6
|
import type { ControlExtensionDescriptor } from '@prisma-next/framework-components/control';
|
|
7
7
|
import { prismaContract } from '@prisma-next/sql-contract-psl/provider';
|
|
8
8
|
import { typescriptContractFromPath } from '@prisma-next/sql-contract-ts/config-types';
|
|
9
|
-
import sqlite from '@prisma-next/target-sqlite/control';
|
|
9
|
+
import sqlite, { sqliteCreateNamespace } from '@prisma-next/target-sqlite/control';
|
|
10
|
+
import sqlitePackRef from '@prisma-next/target-sqlite/pack';
|
|
10
11
|
import { ifDefined } from '@prisma-next/utils/defined';
|
|
11
12
|
import { extname, join } from 'pathe';
|
|
12
13
|
|
|
@@ -43,7 +44,8 @@ export function defineConfig(options: SqliteConfigOptions): PrismaNextConfig<'sq
|
|
|
43
44
|
? typescriptContractFromPath(options.contract, output)
|
|
44
45
|
: prismaContract(options.contract, {
|
|
45
46
|
output,
|
|
46
|
-
target:
|
|
47
|
+
target: sqlitePackRef,
|
|
48
|
+
createNamespace: sqliteCreateNamespace,
|
|
47
49
|
});
|
|
48
50
|
|
|
49
51
|
return coreDefineConfig({
|
|
@@ -6,7 +6,8 @@ import type {
|
|
|
6
6
|
ContractInput,
|
|
7
7
|
ModelLike,
|
|
8
8
|
} from '@prisma-next/sql-contract-ts/contract-builder';
|
|
9
|
-
import {
|
|
9
|
+
import { buildBoundContract } from '@prisma-next/sql-contract-ts/contract-builder';
|
|
10
|
+
import { sqliteCreateNamespace } from '@prisma-next/target-sqlite/control';
|
|
10
11
|
import sqlitePack from '@prisma-next/target-sqlite/pack';
|
|
11
12
|
|
|
12
13
|
type SqlFamily = typeof sqlFamilyPack;
|
|
@@ -19,13 +20,13 @@ type SqliteResult<
|
|
|
19
20
|
Types extends TypesConstraint,
|
|
20
21
|
Models extends ModelsConstraint,
|
|
21
22
|
ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,
|
|
22
|
-
> =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
> = ReturnType<
|
|
24
|
+
typeof buildBoundContract<
|
|
25
|
+
SqlFamily,
|
|
26
|
+
SqlitePack,
|
|
27
|
+
{ readonly types?: Types; readonly models?: Models; readonly extensionPacks?: ExtensionPacks }
|
|
28
|
+
>
|
|
29
|
+
>;
|
|
29
30
|
|
|
30
31
|
type SqliteBaseScaffold<
|
|
31
32
|
ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,
|
|
@@ -71,28 +72,18 @@ export function defineContract<
|
|
|
71
72
|
},
|
|
72
73
|
): SqliteResult<Types, Models, ExtensionPacks>;
|
|
73
74
|
|
|
75
|
+
// Implementation — delegates to buildBoundContract which pre-binds family/target,
|
|
76
|
+
// carrying zero casts at this layer.
|
|
74
77
|
export function defineContract(
|
|
75
|
-
|
|
78
|
+
definition: SqliteDefinition<TypesConstraint, ModelsConstraint, undefined>,
|
|
76
79
|
factory?: (helpers: ComposedAuthoringHelpers<SqlFamily, SqlitePack, undefined>) => {
|
|
77
80
|
readonly types?: TypesConstraint;
|
|
78
81
|
readonly models?: ModelsConstraint;
|
|
79
82
|
},
|
|
80
83
|
): SqliteResult<TypesConstraint, ModelsConstraint, undefined> {
|
|
81
|
-
const
|
|
82
|
-
...scaffold,
|
|
83
|
-
family: sqlFamilyPack,
|
|
84
|
-
target: sqlitePack,
|
|
85
|
-
} as ContractInput;
|
|
84
|
+
const bound = { ...definition, createNamespace: sqliteCreateNamespace };
|
|
86
85
|
if (factory !== undefined) {
|
|
87
|
-
|
|
88
|
-
return baseDefineContract(
|
|
89
|
-
scaffoldOnly,
|
|
90
|
-
factory as Parameters<typeof baseDefineContract>[1],
|
|
91
|
-
) as unknown as SqliteResult<TypesConstraint, ModelsConstraint, undefined>;
|
|
86
|
+
return buildBoundContract(sqlFamilyPack, sqlitePack, bound, factory);
|
|
92
87
|
}
|
|
93
|
-
return
|
|
94
|
-
TypesConstraint,
|
|
95
|
-
ModelsConstraint,
|
|
96
|
-
undefined
|
|
97
|
-
>;
|
|
88
|
+
return buildBoundContract(sqlFamilyPack, sqlitePack, bound);
|
|
98
89
|
}
|
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';
|
|
@@ -21,23 +23,47 @@ import type {
|
|
|
21
23
|
SqlExecutionStackWithDriver,
|
|
22
24
|
SqlMiddleware,
|
|
23
25
|
SqlRuntimeExtensionDescriptor,
|
|
26
|
+
TransactionContext,
|
|
24
27
|
VerifyMarkerOption,
|
|
25
28
|
} from '@prisma-next/sql-runtime';
|
|
26
29
|
import {
|
|
27
30
|
createExecutionContext,
|
|
28
31
|
createRuntime,
|
|
29
32
|
createSqlExecutionStack,
|
|
33
|
+
withTransaction,
|
|
30
34
|
} from '@prisma-next/sql-runtime';
|
|
31
35
|
import sqliteTarget from '@prisma-next/target-sqlite/runtime';
|
|
36
|
+
import { blindCast, castAs } from '@prisma-next/utils/casts';
|
|
32
37
|
import { ifDefined } from '@prisma-next/utils/defined';
|
|
33
38
|
import { resolveOptionalSqliteBinding, resolveSqliteBinding } from './binding';
|
|
34
39
|
|
|
35
40
|
export type SqliteTargetId = 'sqlite';
|
|
36
41
|
type OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;
|
|
37
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
|
+
|
|
56
|
+
export interface SqliteTransactionContext<TContract extends Contract<SqlStorage>>
|
|
57
|
+
extends TransactionContext {
|
|
58
|
+
readonly sql: UnboundSql<TContract>;
|
|
59
|
+
readonly orm: UnboundOrm<TContract>;
|
|
60
|
+
readonly enums: UnboundEnums<TContract>;
|
|
61
|
+
}
|
|
62
|
+
|
|
38
63
|
export interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
39
|
-
readonly sql:
|
|
40
|
-
readonly orm:
|
|
64
|
+
readonly sql: UnboundSql<TContract>;
|
|
65
|
+
readonly orm: UnboundOrm<TContract>;
|
|
66
|
+
readonly enums: UnboundEnums<TContract>;
|
|
41
67
|
readonly raw: RawSqlTag;
|
|
42
68
|
readonly context: ExecutionContext<TContract>;
|
|
43
69
|
readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;
|
|
@@ -49,8 +75,9 @@ export interface SqliteClient<TContract extends Contract<SqlStorage>> {
|
|
|
49
75
|
CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,
|
|
50
76
|
>(
|
|
51
77
|
declaration: D,
|
|
52
|
-
callback: (sql:
|
|
78
|
+
callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,
|
|
53
79
|
): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;
|
|
80
|
+
transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;
|
|
54
81
|
close(): Promise<void>;
|
|
55
82
|
[Symbol.asyncDispose](): Promise<void>;
|
|
56
83
|
}
|
|
@@ -116,7 +143,12 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
116
143
|
const rawCodecInferer = stack.adapter.rawCodecInferer;
|
|
117
144
|
const rawSqlTag: RawSqlTag = createRawSql(rawCodecInferer);
|
|
118
145
|
|
|
119
|
-
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
|
+
);
|
|
120
152
|
let runtimeInstance: Runtime | undefined;
|
|
121
153
|
let runtimeDriver: { connect(binding: unknown): Promise<void> } | undefined;
|
|
122
154
|
let driverConnected = false;
|
|
@@ -180,21 +212,24 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
180
212
|
return runtimeInstance;
|
|
181
213
|
};
|
|
182
214
|
|
|
183
|
-
const orm:
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
+
},
|
|
191
225
|
},
|
|
192
|
-
},
|
|
193
|
-
|
|
226
|
+
}),
|
|
227
|
+
);
|
|
194
228
|
|
|
195
229
|
return {
|
|
196
230
|
sql,
|
|
197
231
|
orm,
|
|
232
|
+
enums,
|
|
198
233
|
raw: rawSqlTag,
|
|
199
234
|
context,
|
|
200
235
|
stack,
|
|
@@ -236,11 +271,50 @@ export default function sqlite<TContract extends Contract<SqlStorage>>(
|
|
|
236
271
|
CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,
|
|
237
272
|
>(
|
|
238
273
|
declaration: D,
|
|
239
|
-
callback: (sql:
|
|
274
|
+
callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,
|
|
240
275
|
): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {
|
|
241
276
|
return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));
|
|
242
277
|
},
|
|
243
278
|
|
|
279
|
+
transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {
|
|
280
|
+
let runtime: ReturnType<typeof getRuntime>;
|
|
281
|
+
try {
|
|
282
|
+
runtime = getRuntime();
|
|
283
|
+
} catch (err) {
|
|
284
|
+
return Promise.reject(err);
|
|
285
|
+
}
|
|
286
|
+
return withTransaction(runtime, (txCtx) => {
|
|
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
|
+
},
|
|
300
|
+
},
|
|
301
|
+
context,
|
|
302
|
+
}),
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
// Use `txCtx` as the prototype instead of spreading it so that live
|
|
306
|
+
// accessors (notably the `invalidated` getter, which reads a closure
|
|
307
|
+
// variable in `withTransaction`) remain wired to the original object.
|
|
308
|
+
// Spreading would evaluate the getter once and freeze its value.
|
|
309
|
+
const tx: SqliteTransactionContext<TContract> = Object.assign(
|
|
310
|
+
castAs<TransactionContext>(Object.create(txCtx)),
|
|
311
|
+
{ sql: txSql, orm: txOrm, enums },
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
return fn(tx);
|
|
315
|
+
});
|
|
316
|
+
},
|
|
317
|
+
|
|
244
318
|
close(): Promise<void> {
|
|
245
319
|
if (closePromise) return closePromise;
|
|
246
320
|
closed = true;
|