import sqlFamilyPack from '@prisma-next/family-sql/pack'; import type { ExtensionPackRef } from '@prisma-next/framework-components/components'; import type { SqlNamespaceBase, SqlNamespaceInput, StorageTypeInstance, } from '@prisma-next/sql-contract/types'; import type { ComposedAuthoringHelpers, ContractInput, ModelLike, } from '@prisma-next/sql-contract-ts/contract-builder'; import { buildBoundContract } from '@prisma-next/sql-contract-ts/contract-builder'; import { sqliteCreateNamespace } from '@prisma-next/target-sqlite/control'; import sqlitePack from '@prisma-next/target-sqlite/pack'; type SqlFamily = typeof sqlFamilyPack; type SqlitePack = typeof sqlitePack; type TypesConstraint = Record; type ModelsConstraint = Record; type SqliteResult< Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record> | undefined, > = ReturnType< typeof buildBoundContract< SqlFamily, SqlitePack, { readonly types?: Types; readonly models?: Models; readonly extensionPacks?: ExtensionPacks; readonly createNamespace: (input: SqlNamespaceInput) => SqlNamespaceBase; } > >; type SqliteBaseScaffold< ExtensionPacks extends Record> | undefined, > = Omit< ContractInput, Record, ExtensionPacks>, 'family' | 'target' | 'types' | 'models' | 'createNamespace' >; type SqliteDefinition< Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record> | undefined, > = SqliteBaseScaffold & { readonly types?: Types; readonly models?: Models; }; type SqliteScaffold< ExtensionPacks extends Record> | undefined, > = SqliteBaseScaffold; export function defineContract< const Types extends TypesConstraint = Record, const Models extends ModelsConstraint = Record, const ExtensionPacks extends | Record> | undefined = undefined, >( definition: SqliteDefinition, ): SqliteResult; export function defineContract< const Types extends TypesConstraint = Record, const Models extends ModelsConstraint = Record, const ExtensionPacks extends | Record> | undefined = undefined, >( scaffold: SqliteScaffold, factory: (helpers: ComposedAuthoringHelpers) => { readonly types?: Types; readonly models?: Models; }, ): SqliteResult; // Implementation — delegates to buildBoundContract which pre-binds family/target, // carrying zero casts at this layer. export function defineContract( definition: SqliteDefinition, factory?: (helpers: ComposedAuthoringHelpers) => { readonly types?: TypesConstraint; readonly models?: ModelsConstraint; }, ): SqliteResult { const bound = { ...definition, createNamespace: sqliteCreateNamespace }; if (factory !== undefined) { return buildBoundContract(sqlFamilyPack, sqlitePack, bound, factory); } return buildBoundContract(sqlFamilyPack, sqlitePack, bound); }