@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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.mts","names":[],"sources":["../src/config/define-config.ts"],"mappings":";;;;UAYiB,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"}
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: sqlite
28
+ target: sqlitePackRef,
29
+ createNamespace: sqliteCreateNamespace
28
30
  }),
29
31
  ...ifDefined("db", options.db),
30
32
  ...ifDefined("migrations", options.migrations)
@@ -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: sqlite,\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":";;;;;;;;;;AAwBA,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;CAWvC,OAAOA,eAAiB;EACtB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,gBAAgB;EAChB,UAhBU,QAAQ,QAAQ,QAGxB,MAAM,QACJ,2BAA2B,QAAQ,UAAU,MAAM,IACnD,eAAe,QAAQ,UAAU;GAC/B;GACA,QAAQ;EACV,CAAC;EASL,GAAG,UAAU,MAAM,QAAQ,EAAE;EAC7B,GAAG,UAAU,cAAc,QAAQ,UAAU;CAC/C,CAAC;AACH"}
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 { 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, defineContract as defineContract$1, field, model, rel } from "@prisma-next/sql-contract-ts/contract-builder";
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 sqlitePack;
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> = Omit<ReturnType<typeof defineContract$1<SqlFamily, SqlitePack, Types, Models, ExtensionPacks>>, 'target' | 'targetFamily'> & {
13
- readonly target: SqlitePack['targetId'];
14
- readonly targetFamily: SqlFamily['familyId'];
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":";;;;;;;KAWK,SAAA,UAAmB,aAAa;AAAA,KAChC,UAAA,UAAoB,UAAU;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,IAAA,CACF,UAAA,QAAkB,gBAAA,CAAmB,SAAA,EAAW,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,cAAA;EAAA,SAGlE,MAAA,EAAQ,UAAA;EAAA,SACR,YAAA,EAAc,SAAA;AAAA;AAAA,KAGpB,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,yCAAA,CAGnB,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,yCAAA,CAGnB,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
+ {"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 { defineContract as defineContract$1, field, model, rel } from "@prisma-next/sql-contract-ts/contract-builder";
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(scaffold, factory) {
6
- const full = {
7
- ...scaffold,
8
- family: sqlFamilyPack,
9
- target: sqlitePack
6
+ function defineContract(definition, factory) {
7
+ const bound = {
8
+ ...definition,
9
+ createNamespace: sqliteCreateNamespace
10
10
  };
11
- if (factory !== void 0) {
12
- const { types: _t, models: _m, ...scaffoldOnly } = full;
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":["baseDefineContract"],"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 { defineContract as baseDefineContract } from '@prisma-next/sql-contract-ts/contract-builder';\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> = Omit<\n ReturnType<typeof baseDefineContract<SqlFamily, SqlitePack, Types, Models, ExtensionPacks>>,\n 'target' | 'targetFamily'\n> & {\n readonly target: SqlitePack['targetId'];\n readonly targetFamily: SqlFamily['familyId'];\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\nexport function defineContract(\n scaffold: Omit<ContractInput, 'family' | 'target'>,\n factory?: (helpers: ComposedAuthoringHelpers<SqlFamily, SqlitePack, undefined>) => {\n readonly types?: TypesConstraint;\n readonly models?: ModelsConstraint;\n },\n): SqliteResult<TypesConstraint, ModelsConstraint, undefined> {\n const full = {\n ...scaffold,\n family: sqlFamilyPack,\n target: sqlitePack,\n } as ContractInput;\n if (factory !== undefined) {\n const { types: _t, models: _m, ...scaffoldOnly } = full;\n return baseDefineContract(\n scaffoldOnly,\n factory as Parameters<typeof baseDefineContract>[1],\n ) as unknown as SqliteResult<TypesConstraint, ModelsConstraint, undefined>;\n }\n return baseDefineContract(full) as unknown as SqliteResult<\n TypesConstraint,\n ModelsConstraint,\n undefined\n >;\n}\n"],"mappings":";;;;AAyEA,SAAgB,eACd,UACA,SAI4D;CAC5D,MAAM,OAAO;EACX,GAAG;EACH,QAAQ;EACR,QAAQ;CACV;CACA,IAAI,YAAY,KAAA,GAAW;EACzB,MAAM,EAAE,OAAO,IAAI,QAAQ,IAAI,GAAG,iBAAiB;EACnD,OAAOA,iBACL,cACA,OACF;CACF;CACA,OAAOA,iBAAmB,IAAI;AAKhC"}
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"}
@@ -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: Db<TContract>;
19
- readonly orm: OrmClient<TContract>;
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: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/runtime/binding.ts","../src/runtime/sqlite.ts"],"mappings":";;;;;;;;;KAEY,kBAAA;EAAA,SAAgC,IAAI;AAAA;;;KCgCpC,cAAA;AAAA,KACP,SAAA,mBAA4B,QAAA,CAAS,UAAA,KAAe,UAAA,QAAkB,GAAA,CAAW,SAAA;AAAA,UAErE,YAAA,mBAA+B,QAAA,CAAS,UAAA;EAAA,SAC9C,GAAA,EAAK,EAAA,CAAG,SAAA;EAAA,SACR,GAAA,EAAK,SAAA,CAAU,SAAA;EAAA,SACf,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,EAAA,CAAG,SAAA,GAAY,MAAA,EAAQ,cAAA,CAAe,CAAA,MAAO,YAAA,CAAa,GAAA,IACzE,OAAA,CAAQ,iBAAA,CAAkB,qBAAA,CAAsB,CAAA,EAAG,EAAA,GAAK,GAAA;EAC3D,KAAA,IAAS,OAAA;EAAA,CACR,MAAA,CAAO,YAAP,KAAwB,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,EAAA,CACxD,OAAA,EAAS,yBAAA,CAA0B,SAAA,IAClC,YAAA,CAAa,SAAA;AAAA,iBACQ,MAAA,mBAAyB,QAAA,CAAS,UAAA,EAAA,CACxD,OAAA,EAAS,6BAAA,CAA8B,SAAA,IACtC,YAAA,CAAa,SAAA"}
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;
@@ -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.12.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.12.0",
10
- "@prisma-next/cli": "0.12.0",
11
- "@prisma-next/config": "0.12.0",
12
- "@prisma-next/contract": "0.12.0",
13
- "@prisma-next/driver-sqlite": "0.12.0",
14
- "@prisma-next/family-sql": "0.12.0",
15
- "@prisma-next/framework-components": "0.12.0",
16
- "@prisma-next/sql-builder": "0.12.0",
17
- "@prisma-next/sql-contract": "0.12.0",
18
- "@prisma-next/sql-contract-psl": "0.12.0",
19
- "@prisma-next/sql-contract-ts": "0.12.0",
20
- "@prisma-next/sql-orm-client": "0.12.0",
21
- "@prisma-next/sql-relational-core": "0.12.0",
22
- "@prisma-next/sql-runtime": "0.12.0",
23
- "@prisma-next/target-sqlite": "0.12.0",
24
- "@prisma-next/utils": "0.12.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.12.0",
29
- "@prisma-next/tsconfig": "0.12.0",
30
- "@prisma-next/tsdown": "0.12.0",
31
- "tsdown": "0.22.0",
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.6"
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: sqlite,
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 { defineContract as baseDefineContract } from '@prisma-next/sql-contract-ts/contract-builder';
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
- > = Omit<
23
- ReturnType<typeof baseDefineContract<SqlFamily, SqlitePack, Types, Models, ExtensionPacks>>,
24
- 'target' | 'targetFamily'
25
- > & {
26
- readonly target: SqlitePack['targetId'];
27
- readonly targetFamily: SqlFamily['familyId'];
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
- scaffold: Omit<ContractInput, 'family' | 'target'>,
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 full = {
82
- ...scaffold,
83
- family: sqlFamilyPack,
84
- target: sqlitePack,
85
- } as ContractInput;
84
+ const bound = { ...definition, createNamespace: sqliteCreateNamespace };
86
85
  if (factory !== undefined) {
87
- const { types: _t, models: _m, ...scaffoldOnly } = full;
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 baseDefineContract(full) as unknown as SqliteResult<
94
- TypesConstraint,
95
- ModelsConstraint,
96
- undefined
97
- >;
88
+ return buildBoundContract(sqlFamilyPack, sqlitePack, bound);
98
89
  }
@@ -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: Db<TContract>;
40
- readonly orm: OrmClient<TContract>;
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: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,
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: Db<TContract> = sqlBuilder<TContract>({ context, rawCodecInferer });
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: OrmClient<TContract> = ormBuilder({
184
- context,
185
- runtime: {
186
- execute(plan) {
187
- return getRuntime().execute(plan);
188
- },
189
- connection() {
190
- return getRuntime().connection();
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: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,
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;