@prisma-next/postgres 0.11.0-dev.9 → 0.12.0

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,qBAAA;EAAA,SACN,QAAA;EAAA,SACA,UAAA;EAAA,SACA,EAAA;IAAA,SACE,UAAA;EAAA;EAAA,SAEF,UAAA,YAAsB,0BAAA;EAAA,SACtB,UAAA;IAAA,SACE,GAAA;EAAA;AAAA;AAAA,iBAYG,YAAA,CAAa,OAAA,EAAS,qBAAA,GAAwB,gBAAA"}
1
+ {"version":3,"file":"config.d.mts","names":[],"sources":["../src/config/define-config.ts"],"mappings":";;;;UAYiB,qBAAA;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,qBAAA,GAAwB,gBAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","names":["coreDefineConfig"],"sources":["../src/config/define-config.ts"],"sourcesContent":["import postgresAdapter from '@prisma-next/adapter-postgres/control';\nimport type { PrismaNextConfig } from '@prisma-next/config/config-types';\nimport { defineConfig as coreDefineConfig } from '@prisma-next/config/config-types';\nimport postgresDriver from '@prisma-next/driver-postgres/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 postgres from '@prisma-next/target-postgres/control';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { extname, join } from 'pathe';\n\nexport interface PostgresConfigOptions {\n readonly contract: string;\n readonly outputPath?: string;\n readonly db?: {\n readonly connection?: string;\n };\n readonly extensions?: readonly ControlExtensionDescriptor<'sql', 'postgres'>[];\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: PostgresConfigOptions): PrismaNextConfig<'sql', 'postgres'> {\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: postgres,\n });\n\n return coreDefineConfig({\n family: sql,\n target: postgres,\n adapter: postgresAdapter,\n driver: postgresDriver,\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,aAAa;CACjC,IAAI,IAAI,WAAW,GACjB,OAAO,GAAG,aAAa;CAEzB,OAAO,GAAG,aAAa,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC;;AAG/C,SAAgB,aAAa,SAAqE;CAChG,MAAM,aAAa,QAAQ,cAAc,EAAE;CAC3C,MAAM,SACJ,QAAQ,eAAe,KAAA,IACnB,KAAK,QAAQ,YAAY,gBAAgB,GACzC,iBAAiB,QAAQ,SAAS;CAWxC,OAAOA,eAAiB;EACtB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,gBAAgB;EAChB,UAhBU,QAAQ,QAAQ,SAGvB,KAAK,QACJ,2BAA2B,QAAQ,UAAU,OAAO,GACpD,eAAe,QAAQ,UAAU;GAC/B;GACA,QAAQ;GACT,CAAC;EASN,GAAG,UAAU,MAAM,QAAQ,GAAG;EAC9B,GAAG,UAAU,cAAc,QAAQ,WAAW;EAC/C,CAAC"}
1
+ {"version":3,"file":"config.mjs","names":["coreDefineConfig"],"sources":["../src/config/define-config.ts"],"sourcesContent":["import postgresAdapter from '@prisma-next/adapter-postgres/control';\nimport type { PrismaNextConfig } from '@prisma-next/config/config-types';\nimport { defineConfig as coreDefineConfig } from '@prisma-next/config/config-types';\nimport postgresDriver from '@prisma-next/driver-postgres/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 postgres from '@prisma-next/target-postgres/control';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { extname, join } from 'pathe';\n\nexport interface PostgresConfigOptions {\n readonly contract: string;\n readonly outputPath?: string;\n readonly db?: {\n readonly connection?: string;\n };\n readonly extensions?: readonly ControlExtensionDescriptor<'sql', 'postgres'>[];\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: PostgresConfigOptions): PrismaNextConfig<'sql', 'postgres'> {\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: postgres,\n });\n\n return coreDefineConfig({\n family: sql,\n target: postgres,\n adapter: postgresAdapter,\n driver: postgresDriver,\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,SAAqE;CAChG,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"}
@@ -9,21 +9,21 @@ type SqlFamily = typeof sqlFamilyPack;
9
9
  type PostgresPack = typeof postgresPack;
10
10
  type TypesConstraint = Record<string, StorageTypeInstance | PostgresEnumStorageEntry>;
11
11
  type ModelsConstraint = Record<string, ModelLike>;
12
- type PostgresResult<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined> = Omit<ReturnType<typeof defineContract$1<SqlFamily, PostgresPack, Types, Models, ExtensionPacks, Capabilities>>, 'target' | 'targetFamily'> & {
12
+ type PostgresResult<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = Omit<ReturnType<typeof defineContract$1<SqlFamily, PostgresPack, Types, Models, ExtensionPacks>>, 'target' | 'targetFamily'> & {
13
13
  readonly target: PostgresPack['targetId'];
14
14
  readonly targetFamily: SqlFamily['familyId'];
15
15
  };
16
- type PostgresBaseScaffold<ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined> = Omit<ContractInput$1<SqlFamily, PostgresPack, Record<never, never>, Record<never, never>, ExtensionPacks, Capabilities>, 'family' | 'target' | 'types' | 'models'>;
17
- type PostgresDefinition<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined> = PostgresBaseScaffold<ExtensionPacks, Capabilities> & {
16
+ type PostgresBaseScaffold<ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = Omit<ContractInput$1<SqlFamily, PostgresPack, Record<never, never>, Record<never, never>, ExtensionPacks>, 'family' | 'target' | 'types' | 'models'>;
17
+ type PostgresDefinition<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = PostgresBaseScaffold<ExtensionPacks> & {
18
18
  readonly types?: Types;
19
19
  readonly models?: Models;
20
20
  };
21
- type PostgresScaffold<ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined, Capabilities extends Record<string, Record<string, boolean>> | undefined> = PostgresBaseScaffold<ExtensionPacks, Capabilities>;
22
- declare function defineContract<const Types extends TypesConstraint = Record<never, never>, const Models extends ModelsConstraint = Record<never, never>, const ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined = undefined, const Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined>(definition: PostgresDefinition<Types, Models, ExtensionPacks, Capabilities>): PostgresResult<Types, Models, ExtensionPacks, Capabilities>;
23
- declare function defineContract<const Types extends TypesConstraint = Record<never, never>, const Models extends ModelsConstraint = Record<never, never>, const ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined = undefined, const Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined>(scaffold: PostgresScaffold<ExtensionPacks, Capabilities>, factory: (helpers: ComposedAuthoringHelpers$1<SqlFamily, PostgresPack, ExtensionPacks>) => {
21
+ type PostgresScaffold<ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined> = PostgresBaseScaffold<ExtensionPacks>;
22
+ declare function defineContract<const Types extends TypesConstraint = Record<never, never>, const Models extends ModelsConstraint = Record<never, never>, const ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined = undefined>(definition: PostgresDefinition<Types, Models, ExtensionPacks>): PostgresResult<Types, Models, ExtensionPacks>;
23
+ declare function defineContract<const Types extends TypesConstraint = Record<never, never>, const Models extends ModelsConstraint = Record<never, never>, const ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined = undefined>(scaffold: PostgresScaffold<ExtensionPacks>, factory: (helpers: ComposedAuthoringHelpers$1<SqlFamily, PostgresPack, ExtensionPacks>) => {
24
24
  readonly types?: Types;
25
25
  readonly models?: Models;
26
- }): PostgresResult<Types, Models, ExtensionPacks, Capabilities>;
26
+ }): PostgresResult<Types, Models, ExtensionPacks>;
27
27
  //#endregion
28
28
  export { type ComposedAuthoringHelpers, type ContractDefinition, type ContractInput, type ContractModelBuilder, type FieldNode, type ForeignKeyNode, type IndexNode, type ModelNode, type PrimaryKeyNode, type RelationNode, type ScalarFieldBuilder, type UniqueConstraintNode, buildSqlContractFromDefinition, defineContract, field, model, rel };
29
29
  //# sourceMappingURL=contract-builder.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract/define-contract.ts"],"mappings":";;;;;;;KAcK,SAAA,UAAmB,aAAA;AAAA,KACnB,YAAA,UAAsB,YAAA;AAAA,KAEtB,eAAA,GAAkB,MAAA,SAAe,mBAAA,GAAsB,wBAAA;AAAA,KACvD,gBAAA,GAAmB,MAAA,SAAe,SAAA;AAAA,KAMlC,cAAA,eACW,eAAA,iBACC,gBAAA,yBACQ,MAAA,SAAe,gBAAA,mDACjB,MAAA,SAAe,MAAA,kCAClC,IAAA,CACF,UAAA,QACS,gBAAA,CAAmB,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAgB,YAAA;EAAA,SAI3E,MAAA,EAAQ,YAAA;EAAA,SACR,YAAA,EAAc,SAAA;AAAA;AAAA,KAMpB,oBAAA,wBACoB,MAAA,SAAe,gBAAA,mDACjB,MAAA,SAAe,MAAA,kCAClC,IAAA,CACF,eAAA,CACE,SAAA,EACA,YAAA,EACA,MAAA,gBACA,MAAA,gBACA,cAAA,EACA,YAAA;AAAA,KAMC,kBAAA,eACW,eAAA,iBACC,gBAAA,yBACQ,MAAA,SAAe,gBAAA,mDACjB,MAAA,SAAe,MAAA,kCAClC,oBAAA,CAAqB,cAAA,EAAgB,YAAA;EAAA,SAC9B,KAAA,GAAQ,KAAA;EAAA,SACR,MAAA,GAAS,MAAA;AAAA;AAAA,KAIf,gBAAA,wBACoB,MAAA,SAAe,gBAAA,mDACjB,MAAA,SAAe,MAAA,kCAClC,oBAAA,CAAqB,cAAA,EAAgB,YAAA;AAAA,iBAGzB,cAAA,qBACM,eAAA,GAAkB,MAAA,qCACjB,gBAAA,GAAmB,MAAA,6CAEpC,MAAA,SAAe,gBAAA,qEAEQ,MAAA,SAAe,MAAA,2CAAA,CAE1C,UAAA,EAAY,kBAAA,CAAmB,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAgB,YAAA,IAC7D,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAgB,YAAA;AAAA,iBAGjC,cAAA,qBACM,eAAA,GAAkB,MAAA,qCACjB,gBAAA,GAAmB,MAAA,6CAEpC,MAAA,SAAe,gBAAA,qEAEQ,MAAA,SAAe,MAAA,2CAAA,CAE1C,QAAA,EAAU,gBAAA,CAAiB,cAAA,EAAgB,YAAA,GAC3C,OAAA,GAAU,OAAA,EAAS,0BAAA,CAAyB,SAAA,EAAW,YAAA,EAAc,cAAA;EAAA,SAC1D,KAAA,GAAQ,KAAA;EAAA,SACR,MAAA,GAAS,MAAA;AAAA,IAEnB,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAgB,YAAA"}
1
+ {"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract/define-contract.ts"],"mappings":";;;;;;;KAcK,SAAA,UAAmB,aAAa;AAAA,KAChC,YAAA,UAAsB,YAAY;AAAA,KAElC,eAAA,GAAkB,MAAA,SAAe,mBAAA,GAAsB,wBAAA;AAAA,KACvD,gBAAA,GAAmB,MAAM,SAAS,SAAA;AAAA,KAElC,cAAA,eACW,eAAA,iBACC,gBAAA,yBACQ,MAAA,SAAe,gBAAA,gCACpC,IAAA,CACF,UAAA,QAAkB,gBAAA,CAAmB,SAAA,EAAW,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,cAAA;EAAA,SAGpE,MAAA,EAAQ,YAAA;EAAA,SACR,YAAA,EAAc,SAAA;AAAA;AAAA,KAGpB,oBAAA,wBACoB,MAAA,SAAe,gBAAA,gCACpC,IAAA,CACF,eAAA,CACE,SAAA,EACA,YAAA,EACA,MAAA,gBACA,MAAA,gBACA,cAAA;AAAA,KAKC,kBAAA,eACW,eAAA,iBACC,gBAAA,yBACQ,MAAA,SAAe,gBAAA,gCACpC,oBAAA,CAAqB,cAAA;EAAA,SACd,KAAA,GAAQ,KAAA;EAAA,SACR,MAAA,GAAS,MAAA;AAAA;AAAA,KAGf,gBAAA,wBACoB,MAAA,SAAe,gBAAA,gCACpC,oBAAA,CAAqB,cAAA;AAAA,iBAET,cAAA,qBACM,eAAA,GAAkB,MAAA,qCACjB,gBAAA,GAAmB,MAAA,6CAEpC,MAAA,SAAe,gBAAA,yCAAA,CAGnB,UAAA,EAAY,kBAAA,CAAmB,KAAA,EAAO,MAAA,EAAQ,cAAA,IAC7C,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,cAAA;AAAA,iBAEjB,cAAA,qBACM,eAAA,GAAkB,MAAA,qCACjB,gBAAA,GAAmB,MAAA,6CAEpC,MAAA,SAAe,gBAAA,yCAAA,CAGnB,QAAA,EAAU,gBAAA,CAAiB,cAAA,GAC3B,OAAA,GAAU,OAAA,EAAS,0BAAA,CAAyB,SAAA,EAAW,YAAA,EAAc,cAAA;EAAA,SAC1D,KAAA,GAAQ,KAAA;EAAA,SACR,MAAA,GAAS,MAAA;AAAA,IAEnB,cAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,cAAA"}
@@ -8,7 +8,10 @@ function defineContract(scaffold, factory) {
8
8
  family: sqlFamilyPack,
9
9
  target: postgresPack
10
10
  };
11
- if (factory !== void 0) return defineContract$1(full, factory);
11
+ if (factory !== void 0) {
12
+ const { types: _t, models: _m, ...scaffoldOnly } = full;
13
+ return defineContract$1(scaffoldOnly, factory);
14
+ }
12
15
  return defineContract$1(full);
13
16
  }
14
17
  //#endregion
@@ -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 {\n PostgresEnumStorageEntry,\n StorageTypeInstance,\n} 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 postgresPack from '@prisma-next/target-postgres/pack';\n\ntype SqlFamily = typeof sqlFamilyPack;\ntype PostgresPack = typeof postgresPack;\n\ntype TypesConstraint = Record<string, StorageTypeInstance | PostgresEnumStorageEntry>;\ntype ModelsConstraint = Record<string, ModelLike>;\n\n// Return type threaded with all inferred type params.\n// We override target/targetFamily via intersection to preserve the literal values\n// ('postgres', 'sql') even when TypeScript defers conditional-type evaluation on\n// unresolved generic params.\ntype PostgresResult<\n Types extends TypesConstraint,\n Models extends ModelsConstraint,\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n Capabilities extends Record<string, Record<string, boolean>> | undefined,\n> = Omit<\n ReturnType<\n typeof baseDefineContract<SqlFamily, PostgresPack, Types, Models, ExtensionPacks, Capabilities>\n >,\n 'target' | 'targetFamily'\n> & {\n readonly target: PostgresPack['targetId'];\n readonly targetFamily: SqlFamily['familyId'];\n};\n\n// Scaffold that carries all ContractInput fields EXCEPT family, target, types, models.\n// Built from ContractInput with concrete Record<never, never> defaults to avoid\n// the ContractInput Models constraint (which requires ContractModelBuilder, not ModelLike).\ntype PostgresBaseScaffold<\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n Capabilities extends Record<string, Record<string, boolean>> | undefined,\n> = Omit<\n ContractInput<\n SqlFamily,\n PostgresPack,\n Record<never, never>,\n Record<never, never>,\n ExtensionPacks,\n Capabilities\n >,\n 'family' | 'target' | 'types' | 'models'\n>;\n\n// Definition form: inline types + models (uses ModelLike for models, not ContractModelBuilder)\ntype PostgresDefinition<\n Types extends TypesConstraint,\n Models extends ModelsConstraint,\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n Capabilities extends Record<string, Record<string, boolean>> | undefined,\n> = PostgresBaseScaffold<ExtensionPacks, Capabilities> & {\n readonly types?: Types;\n readonly models?: Models;\n};\n\n// Factory form: scaffold without types/models (factory provides them)\ntype PostgresScaffold<\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n Capabilities extends Record<string, Record<string, boolean>> | undefined,\n> = PostgresBaseScaffold<ExtensionPacks, Capabilities>;\n\n// Overload 1: definition form (models/types inline in scaffold)\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 const Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined,\n>(\n definition: PostgresDefinition<Types, Models, ExtensionPacks, Capabilities>,\n): PostgresResult<Types, Models, ExtensionPacks, Capabilities>;\n\n// Overload 2: factory form (scaffold without models/types; factory provides them)\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 const Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined,\n>(\n scaffold: PostgresScaffold<ExtensionPacks, Capabilities>,\n factory: (helpers: ComposedAuthoringHelpers<SqlFamily, PostgresPack, ExtensionPacks>) => {\n readonly types?: Types;\n readonly models?: Models;\n },\n): PostgresResult<Types, Models, ExtensionPacks, Capabilities>;\n\n// Implementation — the runtime type is richer than the wide impl signature;\n// as unknown is safe because every declared overload produces a PostgresResult.\nexport function defineContract(\n scaffold: Omit<ContractInput, 'family' | 'target'>,\n factory?: (helpers: ComposedAuthoringHelpers<SqlFamily, PostgresPack, undefined>) => {\n readonly types?: TypesConstraint;\n readonly models?: ModelsConstraint;\n },\n): PostgresResult<TypesConstraint, ModelsConstraint, undefined, undefined> {\n const full = {\n ...scaffold,\n family: sqlFamilyPack,\n target: postgresPack,\n } as ContractInput;\n if (factory !== undefined) {\n return baseDefineContract(\n full,\n factory as Parameters<typeof baseDefineContract>[1],\n ) as unknown as PostgresResult<TypesConstraint, ModelsConstraint, undefined, undefined>;\n }\n return baseDefineContract(full) as unknown as PostgresResult<\n TypesConstraint,\n ModelsConstraint,\n undefined,\n undefined\n >;\n}\n"],"mappings":";;;;AAwGA,SAAgB,eACd,UACA,SAIyE;CACzE,MAAM,OAAO;EACX,GAAG;EACH,QAAQ;EACR,QAAQ;EACT;CACD,IAAI,YAAY,KAAA,GACd,OAAOA,iBACL,MACA,QACD;CAEH,OAAOA,iBAAmB,KAAK"}
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 {\n PostgresEnumStorageEntry,\n StorageTypeInstance,\n} 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 postgresPack from '@prisma-next/target-postgres/pack';\n\ntype SqlFamily = typeof sqlFamilyPack;\ntype PostgresPack = typeof postgresPack;\n\ntype TypesConstraint = Record<string, StorageTypeInstance | PostgresEnumStorageEntry>;\ntype ModelsConstraint = Record<string, ModelLike>;\n\ntype PostgresResult<\n Types extends TypesConstraint,\n Models extends ModelsConstraint,\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = Omit<\n ReturnType<typeof baseDefineContract<SqlFamily, PostgresPack, Types, Models, ExtensionPacks>>,\n 'target' | 'targetFamily'\n> & {\n readonly target: PostgresPack['targetId'];\n readonly targetFamily: SqlFamily['familyId'];\n};\n\ntype PostgresBaseScaffold<\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = Omit<\n ContractInput<\n SqlFamily,\n PostgresPack,\n Record<never, never>,\n Record<never, never>,\n ExtensionPacks\n >,\n 'family' | 'target' | 'types' | 'models'\n>;\n\ntype PostgresDefinition<\n Types extends TypesConstraint,\n Models extends ModelsConstraint,\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = PostgresBaseScaffold<ExtensionPacks> & {\n readonly types?: Types;\n readonly models?: Models;\n};\n\ntype PostgresScaffold<\n ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,\n> = PostgresBaseScaffold<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: PostgresDefinition<Types, Models, ExtensionPacks>,\n): PostgresResult<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: PostgresScaffold<ExtensionPacks>,\n factory: (helpers: ComposedAuthoringHelpers<SqlFamily, PostgresPack, ExtensionPacks>) => {\n readonly types?: Types;\n readonly models?: Models;\n },\n): PostgresResult<Types, Models, ExtensionPacks>;\n\nexport function defineContract(\n scaffold: Omit<ContractInput, 'family' | 'target'>,\n factory?: (helpers: ComposedAuthoringHelpers<SqlFamily, PostgresPack, undefined>) => {\n readonly types?: TypesConstraint;\n readonly models?: ModelsConstraint;\n },\n): PostgresResult<TypesConstraint, ModelsConstraint, undefined> {\n const full = {\n ...scaffold,\n family: sqlFamilyPack,\n target: postgresPack,\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 PostgresResult<TypesConstraint, ModelsConstraint, undefined>;\n }\n return baseDefineContract(full) as unknown as PostgresResult<\n TypesConstraint,\n ModelsConstraint,\n undefined\n >;\n}\n"],"mappings":";;;;AAkFA,SAAgB,eACd,UACA,SAI8D;CAC9D,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 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/exports/control.ts"],"mappings":";;;UAoBiB,4BAAA;EAW+B;;AAGhD;;;EAHgD,SALrC,UAAA;EASA;;;;EAAA,SAJA,cAAA,GAAiB,oBAAA;AAAA;AAAA,iBAGZ,2BAAA,CACd,OAAA,GAAS,4BAAA,GACR,aAAA"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/exports/control.ts"],"mappings":";;;UAoBiB,4BAAA;EAW+B;AAAA;AAGhD;;;EAHgD,SALrC,UAAA;EASA;;;;EAAA,SAJA,cAAA,GAAiB,oBAAoB;AAAA;AAAA,iBAGhC,2BAAA,CACd,OAAA,GAAS,4BAAA,GACR,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"control.mjs","names":[],"sources":["../src/exports/control.ts"],"sourcesContent":["/**\n * Control-API facade for Postgres.\n *\n * Collapses the five-package wiring required to drive control-side\n * operations (`dbInit`, `dbUpdate`, `dbVerify`, `migrationApply`, …) into\n * a single `createPostgresControlClient()` call. Mirrors what\n * `@prisma-next/postgres/runtime` did for the query side.\n */\n\nimport postgresAdapter from '@prisma-next/adapter-postgres/control';\nimport {\n type ControlClient,\n type ControlClientOptions,\n createControlClient,\n} from '@prisma-next/cli/control-api';\nimport postgresDriver from '@prisma-next/driver-postgres/control';\nimport sql from '@prisma-next/family-sql/control';\nimport postgres from '@prisma-next/target-postgres/control';\nimport { ifDefined } from '@prisma-next/utils/defined';\n\nexport interface PostgresControlClientOptions {\n /**\n * Default Postgres connection string. When set, operations like `dbInit`\n * auto-connect without an explicit `connect()` call. Equivalent to the\n * `connection` field on the underlying `ControlClientOptions`.\n */\n readonly connection?: string;\n /**\n * Composed extension descriptors. Pass the same descriptors here that\n * the contract was authored against.\n */\n readonly extensionPacks?: ControlClientOptions['extensionPacks'];\n}\n\nexport function createPostgresControlClient(\n options: PostgresControlClientOptions = {},\n): ControlClient {\n const clientOptions: ControlClientOptions = {\n family: sql,\n target: postgres,\n adapter: postgresAdapter,\n driver: postgresDriver,\n ...ifDefined('connection', options.connection),\n ...ifDefined('extensionPacks', options.extensionPacks),\n };\n return createControlClient(clientOptions);\n}\n\nexport type { ControlClient };\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,SAAgB,4BACd,UAAwC,EAAE,EAC3B;CASf,OAAO,oBAAoB;EAPzB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,GAAG,UAAU,cAAc,QAAQ,WAAW;EAC9C,GAAG,UAAU,kBAAkB,QAAQ,eAAe;EAEhB,CAAC"}
1
+ {"version":3,"file":"control.mjs","names":[],"sources":["../src/exports/control.ts"],"sourcesContent":["/**\n * Control-API facade for Postgres.\n *\n * Collapses the five-package wiring required to drive control-side\n * operations (`dbInit`, `dbUpdate`, `dbVerify`, `migrationApply`, …) into\n * a single `createPostgresControlClient()` call. Mirrors what\n * `@prisma-next/postgres/runtime` did for the query side.\n */\n\nimport postgresAdapter from '@prisma-next/adapter-postgres/control';\nimport {\n type ControlClient,\n type ControlClientOptions,\n createControlClient,\n} from '@prisma-next/cli/control-api';\nimport postgresDriver from '@prisma-next/driver-postgres/control';\nimport sql from '@prisma-next/family-sql/control';\nimport postgres from '@prisma-next/target-postgres/control';\nimport { ifDefined } from '@prisma-next/utils/defined';\n\nexport interface PostgresControlClientOptions {\n /**\n * Default Postgres connection string. When set, operations like `dbInit`\n * auto-connect without an explicit `connect()` call. Equivalent to the\n * `connection` field on the underlying `ControlClientOptions`.\n */\n readonly connection?: string;\n /**\n * Composed extension descriptors. Pass the same descriptors here that\n * the contract was authored against.\n */\n readonly extensionPacks?: ControlClientOptions['extensionPacks'];\n}\n\nexport function createPostgresControlClient(\n options: PostgresControlClientOptions = {},\n): ControlClient {\n const clientOptions: ControlClientOptions = {\n family: sql,\n target: postgres,\n adapter: postgresAdapter,\n driver: postgresDriver,\n ...ifDefined('connection', options.connection),\n ...ifDefined('extensionPacks', options.extensionPacks),\n };\n return createControlClient(clientOptions);\n}\n\nexport type { ControlClient };\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,SAAgB,4BACd,UAAwC,CAAC,GAC1B;CASf,OAAO,oBAAoB;EAPzB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,GAAG,UAAU,cAAc,QAAQ,UAAU;EAC7C,GAAG,UAAU,kBAAkB,QAAQ,cAAc;CAEhB,CAAC;AAC1C"}
@@ -1,10 +1,10 @@
1
1
  import { orm } from "@prisma-next/sql-orm-client";
2
+ import { CodecTypesBase, RawSqlTag } from "@prisma-next/sql-relational-core/expression";
2
3
  import { BindSiteParams, Declaration, ExecutionContext, ParamsFromDeclaration, PreparedStatement, Runtime, SqlExecutionStackWithDriver, SqlMiddleware, SqlRuntimeExtensionDescriptor, TransactionContext, VerifyMarkerOption } from "@prisma-next/sql-runtime";
3
4
  import { Client, Pool } from "pg";
4
5
  import { ExtractCodecTypes, SqlStorage } from "@prisma-next/sql-contract/types";
5
6
  import { Contract } from "@prisma-next/contract/types";
6
7
  import { Db } from "@prisma-next/sql-builder/types";
7
- import { CodecTypesBase } from "@prisma-next/sql-relational-core/expression";
8
8
  import { SqlQueryPlan } from "@prisma-next/sql-relational-core/plan";
9
9
 
10
10
  //#region src/runtime/binding.d.ts
@@ -42,6 +42,7 @@ interface PostgresTransactionContext<TContract extends Contract<SqlStorage>> ext
42
42
  interface PostgresClient<TContract extends Contract<SqlStorage>> {
43
43
  readonly sql: Db<TContract>;
44
44
  readonly orm: OrmClient<TContract>;
45
+ readonly raw: RawSqlTag;
45
46
  readonly context: ExecutionContext<TContract>;
46
47
  readonly stack: SqlExecutionStackWithDriver<PostgresTargetId>;
47
48
  connect(bindingInput?: PostgresBindingInput): Promise<Runtime>;
@@ -86,4 +87,4 @@ declare function postgres<TContract extends Contract<SqlStorage>>(options: Postg
86
87
  declare function postgres<TContract extends Contract<SqlStorage>>(options: PostgresOptionsWithContractJson<TContract>): PostgresClient<TContract>;
87
88
  //#endregion
88
89
  export { PostgresOptionsWithContractJson as a, PostgresBinding as c, PostgresOptionsWithContract as i, PostgresOptions as n, PostgresTargetId as o, PostgresOptionsBase as r, postgres as s, PostgresClient as t };
89
- //# sourceMappingURL=postgres-DIKe4Gyg.d.mts.map
90
+ //# sourceMappingURL=postgres-Cb2xZXhL.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-Cb2xZXhL.d.mts","names":[],"sources":["../src/runtime/binding.ts","../src/runtime/postgres.ts"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as PostgresOptionsWithContractJson, c as PostgresBinding, i as PostgresOptionsWithContract, n as PostgresOptions, r as PostgresOptionsBase, s as postgres, t as PostgresClient } from "./postgres-DIKe4Gyg.mjs";
1
+ import { a as PostgresOptionsWithContractJson, c as PostgresBinding, i as PostgresOptionsWithContract, n as PostgresOptions, r as PostgresOptionsBase, s as postgres, t as PostgresClient } from "./postgres-Cb2xZXhL.mjs";
2
2
  export { type PostgresBinding, type PostgresClient, type PostgresOptions, type PostgresOptionsBase, type PostgresOptionsWithContract, type PostgresOptionsWithContractJson, postgres as default };
package/dist/runtime.mjs CHANGED
@@ -4,6 +4,7 @@ import postgresDriver from "@prisma-next/driver-postgres/runtime";
4
4
  import { instantiateExecutionStack } from "@prisma-next/framework-components/execution";
5
5
  import { sql } from "@prisma-next/sql-builder/runtime";
6
6
  import { orm } from "@prisma-next/sql-orm-client";
7
+ import { createRawSql } from "@prisma-next/sql-relational-core/expression";
7
8
  import { createExecutionContext, createRuntime, createSqlExecutionStack, withTransaction } from "@prisma-next/sql-runtime";
8
9
  import postgresTarget, { PostgresContractSerializer } from "@prisma-next/target-postgres/runtime";
9
10
  import { Client, Pool } from "pg";
@@ -77,6 +78,8 @@ function postgres(options) {
77
78
  contract,
78
79
  stack
79
80
  });
81
+ const rawCodecInferer = stack.adapter.rawCodecInferer;
82
+ const rawSqlTag = createRawSql(rawCodecInferer);
80
83
  let runtimeInstance;
81
84
  let runtimeDriver;
82
85
  let driverConnected = false;
@@ -138,10 +141,14 @@ function postgres(options) {
138
141
  },
139
142
  context
140
143
  });
141
- const sql$1 = sql({ context });
144
+ const sql$1 = sql({
145
+ context,
146
+ rawCodecInferer
147
+ });
142
148
  return {
143
149
  sql: sql$1,
144
150
  orm: orm$1,
151
+ raw: rawSqlTag,
145
152
  context,
146
153
  stack,
147
154
  async connect(bindingInput) {
@@ -162,7 +169,10 @@ function postgres(options) {
162
169
  },
163
170
  transaction(fn) {
164
171
  return withTransaction(getRuntime(), (txCtx) => {
165
- const txSql = sql({ context });
172
+ const txSql = sql({
173
+ context,
174
+ rawCodecInferer
175
+ });
166
176
  const txOrm = orm({
167
177
  runtime: { execute(plan) {
168
178
  return txCtx.execute(plan);
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":["PgPool","PgClient","orm","ormBuilder","sql","sqlBuilder"],"sources":["../src/runtime/binding.ts","../src/runtime/postgres.ts"],"sourcesContent":["import type { Client, Pool } from 'pg';\nimport { Client as PgClient, Pool as PgPool } from 'pg';\n\nexport type PostgresBinding =\n | { readonly kind: 'url'; readonly url: string }\n | { readonly kind: 'pgPool'; readonly pool: Pool }\n | { readonly kind: 'pgClient'; readonly client: Client };\n\nexport type PostgresBindingInput =\n | {\n readonly binding: PostgresBinding;\n readonly url?: never;\n readonly pg?: never;\n }\n | {\n readonly url: string;\n readonly binding?: never;\n readonly pg?: never;\n }\n | {\n readonly pg: Pool | Client;\n readonly binding?: never;\n readonly url?: never;\n };\n\ntype PostgresBindingFields = {\n readonly binding?: PostgresBinding;\n readonly url?: string;\n readonly pg?: Pool | Client;\n};\n\nfunction validatePostgresUrl(url: string): string {\n const trimmed = url.trim();\n if (trimmed.length === 0) {\n throw new Error('Postgres URL must be a non-empty string');\n }\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error('Postgres URL must be a valid URL');\n }\n\n if (parsed.protocol !== 'postgres:' && parsed.protocol !== 'postgresql:') {\n throw new Error('Postgres URL must use postgres:// or postgresql://');\n }\n\n return trimmed;\n}\n\nexport function resolvePostgresBinding(options: PostgresBindingInput): PostgresBinding {\n const providedCount =\n Number(options.binding !== undefined) +\n Number(options.url !== undefined) +\n Number(options.pg !== undefined);\n\n if (providedCount !== 1) {\n throw new Error('Provide one binding input: binding, url, or pg');\n }\n\n if (options.binding !== undefined) {\n return options.binding;\n }\n\n if (options.url !== undefined) {\n return { kind: 'url', url: validatePostgresUrl(options.url) };\n }\n\n const pgBinding = options.pg;\n if (pgBinding === undefined) {\n throw new Error('Invariant violation: expected pg binding after validation');\n }\n\n if (pgBinding instanceof PgPool) {\n return { kind: 'pgPool', pool: pgBinding };\n }\n\n if (pgBinding instanceof PgClient) {\n return { kind: 'pgClient', client: pgBinding };\n }\n\n throw new Error(\n 'Unable to determine pg binding type from pg input; use binding with explicit kind',\n );\n}\n\nexport function resolveOptionalPostgresBinding(\n options: PostgresBindingFields,\n): PostgresBinding | undefined {\n const providedCount =\n Number(options.binding !== undefined) +\n Number(options.url !== undefined) +\n Number(options.pg !== undefined);\n\n if (providedCount === 0) {\n return undefined;\n }\n\n return resolvePostgresBinding(options as PostgresBindingInput);\n}\n","import postgresAdapter from '@prisma-next/adapter-postgres/runtime';\nimport type { Contract } from '@prisma-next/contract/types';\nimport postgresDriver from '@prisma-next/driver-postgres/runtime';\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 } 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 postgresTarget, { PostgresContractSerializer } from '@prisma-next/target-postgres/runtime';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { type Client, Pool } from 'pg';\nimport {\n type PostgresBinding,\n type PostgresBindingInput,\n resolveOptionalPostgresBinding,\n resolvePostgresBinding,\n} from './binding';\n\nexport type PostgresTargetId = 'postgres';\ntype OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;\n\nexport interface PostgresTransactionContext<TContract extends Contract<SqlStorage>>\n extends TransactionContext {\n readonly sql: Db<TContract>;\n readonly orm: OrmClient<TContract>;\n}\n\nexport interface PostgresClient<TContract extends Contract<SqlStorage>> {\n readonly sql: Db<TContract>;\n readonly orm: OrmClient<TContract>;\n readonly context: ExecutionContext<TContract>;\n readonly stack: SqlExecutionStackWithDriver<PostgresTargetId>;\n connect(bindingInput?: PostgresBindingInput): Promise<Runtime>;\n runtime(): Runtime;\n transaction<R>(fn: (tx: PostgresTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;\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 PostgresOptionsBase {\n readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];\n readonly middleware?: readonly SqlMiddleware[];\n readonly verifyMarker?: VerifyMarkerOption;\n readonly poolOptions?: {\n readonly connectionTimeoutMillis?: number;\n readonly idleTimeoutMillis?: number;\n };\n}\n\nexport interface PostgresBindingOptions {\n readonly binding?: PostgresBinding;\n readonly url?: string;\n readonly pg?: Pool | Client;\n}\n\nexport type PostgresOptionsWithContract<TContract extends Contract<SqlStorage>> =\n PostgresBindingOptions &\n PostgresOptionsBase & {\n readonly contract: TContract;\n readonly contractJson?: never;\n };\n\nexport type PostgresOptionsWithContractJson<TContract extends Contract<SqlStorage>> =\n PostgresBindingOptions &\n PostgresOptionsBase & {\n readonly contractJson: unknown;\n readonly contract?: never;\n readonly _contract?: TContract;\n };\n\nexport type PostgresOptions<TContract extends Contract<SqlStorage>> =\n | PostgresOptionsWithContract<TContract>\n | PostgresOptionsWithContractJson<TContract>;\n\nfunction hasContractJson<TContract extends Contract<SqlStorage>>(\n options: PostgresOptions<TContract>,\n): options is PostgresOptionsWithContractJson<TContract> {\n return 'contractJson' in options;\n}\n\nconst contractSerializer = new PostgresContractSerializer();\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n options: PostgresOptions<TContract>,\n): TContract {\n const contractInput = hasContractJson(options) ? options.contractJson : options.contract;\n return contractSerializer.deserializeContract(contractInput) as TContract;\n}\n\nfunction toRuntimeBinding<TContract extends Contract<SqlStorage>>(\n binding: PostgresBinding,\n options: PostgresOptions<TContract>,\n) {\n if (binding.kind !== 'url') {\n return binding;\n }\n\n return {\n kind: 'pgPool',\n pool: new Pool({\n connectionString: binding.url,\n connectionTimeoutMillis: options.poolOptions?.connectionTimeoutMillis ?? 20_000,\n idleTimeoutMillis: options.poolOptions?.idleTimeoutMillis ?? 30_000,\n }),\n } as const;\n}\n\n/**\n * Creates a lazy Postgres client from either `contractJson` or a TypeScript-authored `contract`.\n * Static query surfaces are available immediately, while `runtime()` instantiates the driver/pool on first call.\n *\n * - No-emit: pass a TypeScript-authored contract. Example: postgres({ contract })\n * - Emitted: pass Contract type explicitly. Example: postgres<Contract>({ contractJson, url })\n */\nexport default function postgres<TContract extends Contract<SqlStorage>>(\n options: PostgresOptionsWithContract<TContract>,\n): PostgresClient<TContract>;\nexport default function postgres<TContract extends Contract<SqlStorage>>(\n options: PostgresOptionsWithContractJson<TContract>,\n): PostgresClient<TContract>;\nexport default function postgres<TContract extends Contract<SqlStorage>>(\n options: PostgresOptions<TContract>,\n): PostgresClient<TContract> {\n const contract = resolveContract(options);\n let binding = resolveOptionalPostgresBinding(options);\n const stack = createSqlExecutionStack({\n target: postgresTarget,\n adapter: postgresAdapter,\n driver: postgresDriver,\n extensionPacks: options.extensions ?? [],\n });\n\n const context = createExecutionContext({\n contract,\n stack,\n });\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 backgroundConnectError: unknown;\n let closed = false;\n let ownedDispose: (() => Promise<void>) | undefined;\n\n const connectDriver = async (resolvedBinding: PostgresBinding): Promise<void> => {\n if (driverConnected) return;\n if (!runtimeDriver) throw new Error('Postgres runtime driver missing');\n if (connectPromise) return connectPromise;\n const runtimeBinding = toRuntimeBinding(resolvedBinding, options);\n if (resolvedBinding.kind === 'url' && runtimeBinding.kind === 'pgPool') {\n const pool = runtimeBinding.pool;\n let disposed = false;\n ownedDispose = async () => {\n if (disposed) return;\n disposed = true;\n await pool.end().then(() => undefined);\n };\n }\n connectPromise = runtimeDriver\n .connect(runtimeBinding)\n .then(() => {\n driverConnected = true;\n })\n .catch(async (err) => {\n backgroundConnectError = err;\n connectPromise = undefined;\n await ownedDispose?.().catch(() => undefined);\n throw err;\n });\n return connectPromise;\n };\n const getRuntime = (): Runtime => {\n if (closed) {\n throw new Error('Postgres 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 cursor: { disabled: true },\n });\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 ...ifDefined('middleware', options.middleware),\n });\n\n return runtimeInstance;\n };\n const orm: OrmClient<TContract> = ormBuilder({\n runtime: {\n execute(plan) {\n return getRuntime().execute(plan);\n },\n connection() {\n return getRuntime().connection();\n },\n },\n context,\n });\n\n const sql: Db<TContract> = sqlBuilder<TContract>({ context });\n\n return {\n sql,\n orm,\n context,\n stack,\n\n async connect(bindingInput) {\n if (closed) {\n throw new Error('Postgres client is closed');\n }\n\n if (driverConnected || connectPromise) {\n throw new Error('Postgres client already connected');\n }\n\n if (bindingInput !== undefined) {\n binding = resolvePostgresBinding(bindingInput);\n }\n\n if (binding === undefined) {\n throw new Error(\n 'Postgres binding not configured. Pass url/pg/binding to postgres(...) or call db.connect({ ... }).',\n );\n }\n\n const runtime = getRuntime();\n if (driverConnected) {\n return runtime;\n }\n\n await connectDriver(binding);\n return runtime;\n },\n\n runtime() {\n return getRuntime();\n },\n\n prepare<\n D extends Declaration<CT>,\n Row,\n CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n >(\n declaration: D,\n callback: (sql: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {\n return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));\n },\n\n transaction<R>(fn: (tx: PostgresTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {\n return withTransaction(getRuntime(), (txCtx) => {\n const txSql: Db<TContract> = sqlBuilder<TContract>({ context });\n\n const txOrm: OrmClient<TContract> = ormBuilder({\n runtime: {\n execute(plan) {\n return txCtx.execute(plan);\n },\n },\n context,\n });\n\n // Use `txCtx` as the prototype instead of spreading it so that live\n // accessors (notably the `invalidated` getter, which reads a closure\n // variable in `withTransaction`) remain wired to the original object.\n // Spreading would evaluate the getter once and freeze its value.\n const tx: PostgresTransactionContext<TContract> = Object.assign(\n Object.create(txCtx) as TransactionContext,\n { sql: txSql, orm: txOrm },\n );\n\n return fn(tx);\n });\n },\n\n async close(): Promise<void> {\n if (closed) return;\n closed = true;\n await connectPromise?.catch(() => undefined);\n await ownedDispose?.();\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":["PgPool","PgClient","orm","ormBuilder","sql","sqlBuilder"],"sources":["../src/runtime/binding.ts","../src/runtime/postgres.ts"],"sourcesContent":["import type { Client, Pool } from 'pg';\nimport { Client as PgClient, Pool as PgPool } from 'pg';\n\nexport type PostgresBinding =\n | { readonly kind: 'url'; readonly url: string }\n | { readonly kind: 'pgPool'; readonly pool: Pool }\n | { readonly kind: 'pgClient'; readonly client: Client };\n\nexport type PostgresBindingInput =\n | {\n readonly binding: PostgresBinding;\n readonly url?: never;\n readonly pg?: never;\n }\n | {\n readonly url: string;\n readonly binding?: never;\n readonly pg?: never;\n }\n | {\n readonly pg: Pool | Client;\n readonly binding?: never;\n readonly url?: never;\n };\n\ntype PostgresBindingFields = {\n readonly binding?: PostgresBinding;\n readonly url?: string;\n readonly pg?: Pool | Client;\n};\n\nfunction validatePostgresUrl(url: string): string {\n const trimmed = url.trim();\n if (trimmed.length === 0) {\n throw new Error('Postgres URL must be a non-empty string');\n }\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error('Postgres URL must be a valid URL');\n }\n\n if (parsed.protocol !== 'postgres:' && parsed.protocol !== 'postgresql:') {\n throw new Error('Postgres URL must use postgres:// or postgresql://');\n }\n\n return trimmed;\n}\n\nexport function resolvePostgresBinding(options: PostgresBindingInput): PostgresBinding {\n const providedCount =\n Number(options.binding !== undefined) +\n Number(options.url !== undefined) +\n Number(options.pg !== undefined);\n\n if (providedCount !== 1) {\n throw new Error('Provide one binding input: binding, url, or pg');\n }\n\n if (options.binding !== undefined) {\n return options.binding;\n }\n\n if (options.url !== undefined) {\n return { kind: 'url', url: validatePostgresUrl(options.url) };\n }\n\n const pgBinding = options.pg;\n if (pgBinding === undefined) {\n throw new Error('Invariant violation: expected pg binding after validation');\n }\n\n if (pgBinding instanceof PgPool) {\n return { kind: 'pgPool', pool: pgBinding };\n }\n\n if (pgBinding instanceof PgClient) {\n return { kind: 'pgClient', client: pgBinding };\n }\n\n throw new Error(\n 'Unable to determine pg binding type from pg input; use binding with explicit kind',\n );\n}\n\nexport function resolveOptionalPostgresBinding(\n options: PostgresBindingFields,\n): PostgresBinding | undefined {\n const providedCount =\n Number(options.binding !== undefined) +\n Number(options.url !== undefined) +\n Number(options.pg !== undefined);\n\n if (providedCount === 0) {\n return undefined;\n }\n\n return resolvePostgresBinding(options as PostgresBindingInput);\n}\n","import postgresAdapter from '@prisma-next/adapter-postgres/runtime';\nimport type { Contract } from '@prisma-next/contract/types';\nimport postgresDriver from '@prisma-next/driver-postgres/runtime';\nimport { instantiateExecutionStack } from '@prisma-next/framework-components/execution';\nimport { sql as sqlBuilder } from '@prisma-next/sql-builder/runtime';\nimport type { Db } from '@prisma-next/sql-builder/types';\nimport type { ExtractCodecTypes, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { orm as ormBuilder } from '@prisma-next/sql-orm-client';\nimport type { CodecTypesBase, RawSqlTag } from '@prisma-next/sql-relational-core/expression';\nimport { createRawSql } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n BindSiteParams,\n Declaration,\n ExecutionContext,\n ParamsFromDeclaration,\n PreparedStatement,\n Runtime,\n SqlExecutionStackWithDriver,\n SqlMiddleware,\n SqlRuntimeExtensionDescriptor,\n TransactionContext,\n VerifyMarkerOption,\n} from '@prisma-next/sql-runtime';\nimport {\n createExecutionContext,\n createRuntime,\n createSqlExecutionStack,\n withTransaction,\n} from '@prisma-next/sql-runtime';\nimport postgresTarget, { PostgresContractSerializer } from '@prisma-next/target-postgres/runtime';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { type Client, Pool } from 'pg';\nimport {\n type PostgresBinding,\n type PostgresBindingInput,\n resolveOptionalPostgresBinding,\n resolvePostgresBinding,\n} from './binding';\n\nexport type PostgresTargetId = 'postgres';\ntype OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;\n\nexport interface PostgresTransactionContext<TContract extends Contract<SqlStorage>>\n extends TransactionContext {\n readonly sql: Db<TContract>;\n readonly orm: OrmClient<TContract>;\n}\n\nexport interface PostgresClient<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<PostgresTargetId>;\n connect(bindingInput?: PostgresBindingInput): Promise<Runtime>;\n runtime(): Runtime;\n transaction<R>(fn: (tx: PostgresTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;\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 PostgresOptionsBase {\n readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];\n readonly middleware?: readonly SqlMiddleware[];\n readonly verifyMarker?: VerifyMarkerOption;\n readonly poolOptions?: {\n readonly connectionTimeoutMillis?: number;\n readonly idleTimeoutMillis?: number;\n };\n}\n\nexport interface PostgresBindingOptions {\n readonly binding?: PostgresBinding;\n readonly url?: string;\n readonly pg?: Pool | Client;\n}\n\nexport type PostgresOptionsWithContract<TContract extends Contract<SqlStorage>> =\n PostgresBindingOptions &\n PostgresOptionsBase & {\n readonly contract: TContract;\n readonly contractJson?: never;\n };\n\nexport type PostgresOptionsWithContractJson<TContract extends Contract<SqlStorage>> =\n PostgresBindingOptions &\n PostgresOptionsBase & {\n readonly contractJson: unknown;\n readonly contract?: never;\n readonly _contract?: TContract;\n };\n\nexport type PostgresOptions<TContract extends Contract<SqlStorage>> =\n | PostgresOptionsWithContract<TContract>\n | PostgresOptionsWithContractJson<TContract>;\n\nfunction hasContractJson<TContract extends Contract<SqlStorage>>(\n options: PostgresOptions<TContract>,\n): options is PostgresOptionsWithContractJson<TContract> {\n return 'contractJson' in options;\n}\n\nconst contractSerializer = new PostgresContractSerializer();\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n options: PostgresOptions<TContract>,\n): TContract {\n const contractInput = hasContractJson(options) ? options.contractJson : options.contract;\n return contractSerializer.deserializeContract(contractInput) as TContract;\n}\n\nfunction toRuntimeBinding<TContract extends Contract<SqlStorage>>(\n binding: PostgresBinding,\n options: PostgresOptions<TContract>,\n) {\n if (binding.kind !== 'url') {\n return binding;\n }\n\n return {\n kind: 'pgPool',\n pool: new Pool({\n connectionString: binding.url,\n connectionTimeoutMillis: options.poolOptions?.connectionTimeoutMillis ?? 20_000,\n idleTimeoutMillis: options.poolOptions?.idleTimeoutMillis ?? 30_000,\n }),\n } as const;\n}\n\n/**\n * Creates a lazy Postgres client from either `contractJson` or a TypeScript-authored `contract`.\n * Static query surfaces are available immediately, while `runtime()` instantiates the driver/pool on first call.\n *\n * - No-emit: pass a TypeScript-authored contract. Example: postgres({ contract })\n * - Emitted: pass Contract type explicitly. Example: postgres<Contract>({ contractJson, url })\n */\nexport default function postgres<TContract extends Contract<SqlStorage>>(\n options: PostgresOptionsWithContract<TContract>,\n): PostgresClient<TContract>;\nexport default function postgres<TContract extends Contract<SqlStorage>>(\n options: PostgresOptionsWithContractJson<TContract>,\n): PostgresClient<TContract>;\nexport default function postgres<TContract extends Contract<SqlStorage>>(\n options: PostgresOptions<TContract>,\n): PostgresClient<TContract> {\n const contract = resolveContract(options);\n let binding = resolveOptionalPostgresBinding(options);\n const stack = createSqlExecutionStack({\n target: postgresTarget,\n adapter: postgresAdapter,\n driver: postgresDriver,\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 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 backgroundConnectError: unknown;\n let closed = false;\n let ownedDispose: (() => Promise<void>) | undefined;\n\n const connectDriver = async (resolvedBinding: PostgresBinding): Promise<void> => {\n if (driverConnected) return;\n if (!runtimeDriver) throw new Error('Postgres runtime driver missing');\n if (connectPromise) return connectPromise;\n const runtimeBinding = toRuntimeBinding(resolvedBinding, options);\n if (resolvedBinding.kind === 'url' && runtimeBinding.kind === 'pgPool') {\n const pool = runtimeBinding.pool;\n let disposed = false;\n ownedDispose = async () => {\n if (disposed) return;\n disposed = true;\n await pool.end().then(() => undefined);\n };\n }\n connectPromise = runtimeDriver\n .connect(runtimeBinding)\n .then(() => {\n driverConnected = true;\n })\n .catch(async (err) => {\n backgroundConnectError = err;\n connectPromise = undefined;\n await ownedDispose?.().catch(() => undefined);\n throw err;\n });\n return connectPromise;\n };\n const getRuntime = (): Runtime => {\n if (closed) {\n throw new Error('Postgres 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 cursor: { disabled: true },\n });\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 ...ifDefined('middleware', options.middleware),\n });\n\n return runtimeInstance;\n };\n const orm: OrmClient<TContract> = ormBuilder({\n runtime: {\n execute(plan) {\n return getRuntime().execute(plan);\n },\n connection() {\n return getRuntime().connection();\n },\n },\n context,\n });\n\n const sql: Db<TContract> = sqlBuilder<TContract>({ context, rawCodecInferer });\n\n return {\n sql,\n orm,\n raw: rawSqlTag,\n context,\n stack,\n\n async connect(bindingInput) {\n if (closed) {\n throw new Error('Postgres client is closed');\n }\n\n if (driverConnected || connectPromise) {\n throw new Error('Postgres client already connected');\n }\n\n if (bindingInput !== undefined) {\n binding = resolvePostgresBinding(bindingInput);\n }\n\n if (binding === undefined) {\n throw new Error(\n 'Postgres binding not configured. Pass url/pg/binding to postgres(...) or call db.connect({ ... }).',\n );\n }\n\n const runtime = getRuntime();\n if (driverConnected) {\n return runtime;\n }\n\n await connectDriver(binding);\n return runtime;\n },\n\n runtime() {\n return getRuntime();\n },\n\n prepare<\n D extends Declaration<CT>,\n Row,\n CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n >(\n declaration: D,\n callback: (sql: Db<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {\n return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));\n },\n\n transaction<R>(fn: (tx: PostgresTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {\n return withTransaction(getRuntime(), (txCtx) => {\n const txSql: Db<TContract> = sqlBuilder<TContract>({\n context,\n rawCodecInferer,\n });\n\n const txOrm: OrmClient<TContract> = ormBuilder({\n runtime: {\n execute(plan) {\n return txCtx.execute(plan);\n },\n },\n context,\n });\n\n // Use `txCtx` as the prototype instead of spreading it so that live\n // accessors (notably the `invalidated` getter, which reads a closure\n // variable in `withTransaction`) remain wired to the original object.\n // Spreading would evaluate the getter once and freeze its value.\n const tx: PostgresTransactionContext<TContract> = Object.assign(\n Object.create(txCtx) as TransactionContext,\n { sql: txSql, orm: txOrm },\n );\n\n return fn(tx);\n });\n },\n\n async close(): Promise<void> {\n if (closed) return;\n closed = true;\n await connectPromise?.catch(() => undefined);\n await ownedDispose?.();\n },\n\n [Symbol.asyncDispose](): Promise<void> {\n return this.close();\n },\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { o as PostgresTargetId } from "./postgres-DIKe4Gyg.mjs";
1
+ import { o as PostgresTargetId } from "./postgres-Cb2xZXhL.mjs";
2
2
  import { PostgresDriverCreateOptions } from "@prisma-next/driver-postgres/runtime";
3
3
  import { ExecutionContext, Runtime, SqlExecutionStackWithDriver, SqlMiddleware, SqlRuntimeExtensionDescriptor, VerifyMarkerOption } from "@prisma-next/sql-runtime";
4
4
  import { SqlStorage } from "@prisma-next/sql-contract/types";
@@ -1 +1 @@
1
- {"version":3,"file":"serverless.d.mts","names":[],"sources":["../src/runtime/postgres-serverless.ts"],"mappings":";;;;;;;;KA4BY,+BAAA,GAAkC,WAAA,CAAY,2BAAA;AAAA,UAEzC,wBAAA,mBAA2C,QAAA,CAAS,UAAA;EAAA,SAC1D,GAAA,EAAK,EAAA,CAAG,SAAA;EAAA,SACR,OAAA,EAAS,gBAAA,CAAiB,SAAA;EAAA,SAC1B,KAAA,EAAO,2BAAA,CAA4B,gBAAA;EAAA,SACnC,QAAA,EAAU,SAAA;EACnB,OAAA,CAAQ,OAAA;IAAA,SAAoB,GAAA;EAAA,IAAgB,OAAA,CAAQ,OAAA,GAAU,eAAA;AAAA;AAAA,UAG/C,6BAAA;EAAA,SACN,UAAA,YAAsB,6BAAA,CAA8B,gBAAA;EAAA,SACpD,UAAA,YAAsB,aAAA;EAAA,SACtB,YAAA,GAAe,kBAAA;EAAA,SACf,MAAA,GAAS,+BAAA;AAAA;AAAA,KAGR,qCAAA,mBAAwD,QAAA,CAAS,UAAA,KAC3E,6BAAA;EAAA,SACW,QAAA,EAAU,SAAA;EAAA,SACV,YAAA;AAAA;AAAA,KAGD,yCAAA,mBAA4D,QAAA,CAAS,UAAA,KAC/E,6BAAA;EAAA,SACW,YAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA,GAAY,SAAA;AAAA;AAAA,KAGb,yBAAA,mBAA4C,QAAA,CAAS,UAAA,KAC7D,qCAAA,CAAsC,SAAA,IACtC,yCAAA,CAA0C,SAAA;;;;;;;;;;;;;;;;;;;;;AAtB9C;;;iBAsEwB,kBAAA,mBAAqC,QAAA,CAAS,UAAA,EAAA,CACpE,OAAA,EAAS,qCAAA,CAAsC,SAAA,IAC9C,wBAAA,CAAyB,SAAA;AAAA,iBACJ,kBAAA,mBAAqC,QAAA,CAAS,UAAA,EAAA,CACpE,OAAA,EAAS,yCAAA,CAA0C,SAAA,IAClD,wBAAA,CAAyB,SAAA"}
1
+ {"version":3,"file":"serverless.d.mts","names":[],"sources":["../src/runtime/postgres-serverless.ts"],"mappings":";;;;;;;;KA4BY,+BAAA,GAAkC,WAAW,CAAC,2BAAA;AAAA,UAEzC,wBAAA,mBAA2C,QAAA,CAAS,UAAA;EAAA,SAC1D,GAAA,EAAK,EAAA,CAAG,SAAA;EAAA,SACR,OAAA,EAAS,gBAAA,CAAiB,SAAA;EAAA,SAC1B,KAAA,EAAO,2BAAA,CAA4B,gBAAA;EAAA,SACnC,QAAA,EAAU,SAAA;EACnB,OAAA,CAAQ,OAAA;IAAA,SAAoB,GAAA;EAAA,IAAgB,OAAA,CAAQ,OAAA,GAAU,eAAA;AAAA;AAAA,UAG/C,6BAAA;EAAA,SACN,UAAA,YAAsB,6BAAA,CAA8B,gBAAA;EAAA,SACpD,UAAA,YAAsB,aAAA;EAAA,SACtB,YAAA,GAAe,kBAAA;EAAA,SACf,MAAA,GAAS,+BAAA;AAAA;AAAA,KAGR,qCAAA,mBAAwD,QAAA,CAAS,UAAA,KAC3E,6BAAA;EAAA,SACW,QAAA,EAAU,SAAA;EAAA,SACV,YAAA;AAAA;AAAA,KAGD,yCAAA,mBAA4D,QAAA,CAAS,UAAA,KAC/E,6BAAA;EAAA,SACW,YAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA,GAAY,SAAA;AAAA;AAAA,KAGb,yBAAA,mBAA4C,QAAA,CAAS,UAAA,KAC7D,qCAAA,CAAsC,SAAA,IACtC,yCAAA,CAA0C,SAAA;;;;;;;;;;;;;;;;;;;;AAzBiC;AAG/E;;;iBAsEwB,kBAAA,mBAAqC,QAAA,CAAS,UAAA,EAAA,CACpE,OAAA,EAAS,qCAAA,CAAsC,SAAA,IAC9C,wBAAA,CAAyB,SAAA;AAAA,iBACJ,kBAAA,mBAAqC,QAAA,CAAS,UAAA,EAAA,CACpE,OAAA,EAAS,yCAAA,CAA0C,SAAA,IAClD,wBAAA,CAAyB,SAAA"}
@@ -33,7 +33,10 @@ function postgresServerless(options) {
33
33
  stack
34
34
  });
35
35
  return {
36
- sql: sql({ context }),
36
+ sql: sql({
37
+ context,
38
+ rawCodecInferer: stack.adapter.rawCodecInferer
39
+ }),
37
40
  context,
38
41
  stack,
39
42
  contract,
@@ -1 +1 @@
1
- {"version":3,"file":"serverless.mjs","names":["sqlBuilder"],"sources":["../src/runtime/postgres-serverless.ts"],"sourcesContent":["import postgresAdapter from '@prisma-next/adapter-postgres/runtime';\nimport type { Contract } from '@prisma-next/contract/types';\nimport postgresDriver, {\n type PostgresDriverCreateOptions,\n} from '@prisma-next/driver-postgres/runtime';\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 { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n ExecutionContext,\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 postgresTarget, { PostgresContractSerializer } from '@prisma-next/target-postgres/runtime';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { Client } from 'pg';\n\nimport type { PostgresTargetId } from './postgres';\n\nexport type PostgresServerlessCursorOptions = NonNullable<PostgresDriverCreateOptions['cursor']>;\n\nexport interface PostgresServerlessClient<TContract extends Contract<SqlStorage>> {\n readonly sql: Db<TContract>;\n readonly context: ExecutionContext<TContract>;\n readonly stack: SqlExecutionStackWithDriver<PostgresTargetId>;\n readonly contract: TContract;\n connect(binding: { readonly url: string }): Promise<Runtime & AsyncDisposable>;\n}\n\nexport interface PostgresServerlessOptionsBase {\n readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];\n readonly middleware?: readonly SqlMiddleware[];\n readonly verifyMarker?: VerifyMarkerOption;\n readonly cursor?: PostgresServerlessCursorOptions;\n}\n\nexport type PostgresServerlessOptionsWithContract<TContract extends Contract<SqlStorage>> =\n PostgresServerlessOptionsBase & {\n readonly contract: TContract;\n readonly contractJson?: never;\n };\n\nexport type PostgresServerlessOptionsWithContractJson<TContract extends Contract<SqlStorage>> =\n PostgresServerlessOptionsBase & {\n readonly contractJson: unknown;\n readonly contract?: never;\n readonly _contract?: TContract;\n };\n\nexport type PostgresServerlessOptions<TContract extends Contract<SqlStorage>> =\n | PostgresServerlessOptionsWithContract<TContract>\n | PostgresServerlessOptionsWithContractJson<TContract>;\n\nfunction hasContractJson<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptions<TContract>,\n): options is PostgresServerlessOptionsWithContractJson<TContract> {\n return 'contractJson' in options;\n}\n\nconst contractSerializer = new PostgresContractSerializer();\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptions<TContract>,\n): TContract {\n const contractInput = hasContractJson(options) ? options.contractJson : options.contract;\n return contractSerializer.deserializeContract(contractInput) as TContract;\n}\n\nfunction validateConnectionString(url: string): string {\n const trimmed = url.trim();\n if (trimmed.length === 0) {\n throw new Error('Postgres URL must be a non-empty string');\n }\n return trimmed;\n}\n\n/**\n * Per-request Postgres facade for serverless / edge runtimes (Cloudflare Workers + Hyperdrive,\n * AWS Lambda, Vercel, Deno Deploy, Bun edge, etc.).\n *\n * Construction shape mirrors the Node `postgres()` factory but the returned client deliberately\n * omits `orm`, `runtime()`, and `transaction()`. Closure-cached convenience surfaces are unsafe\n * across `fetch` invocations: stale connections after isolate idle, concurrent-query races on a\n * shared `pg.Client`, no clean shutdown. Per-request callers acquire a fresh `Runtime` via\n * `db.connect({ url })` and dispose it via `await using` on scope exit.\n *\n * @example\n * ```ts\n * const db = postgresServerless<Contract>({ contractJson });\n *\n * export default {\n * async fetch(_req: Request, env: Env): Promise<Response> {\n * await using runtime = await db.connect({ url: env.HYPERDRIVE.connectionString });\n * const rows = await runtime.execute(db.sql.from(t).select(...).build());\n * return Response.json(rows);\n * },\n * };\n * ```\n */\nexport default function postgresServerless<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptionsWithContract<TContract>,\n): PostgresServerlessClient<TContract>;\nexport default function postgresServerless<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptionsWithContractJson<TContract>,\n): PostgresServerlessClient<TContract>;\nexport default function postgresServerless<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptions<TContract>,\n): PostgresServerlessClient<TContract> {\n const contract = resolveContract(options);\n const stack = createSqlExecutionStack({\n target: postgresTarget,\n adapter: postgresAdapter,\n driver: postgresDriver,\n extensionPacks: options.extensions ?? [],\n });\n\n const context = createExecutionContext({\n contract,\n stack,\n });\n\n const sql: Db<TContract> = sqlBuilder<TContract>({ context });\n\n return {\n sql,\n context,\n stack,\n contract,\n\n async connect(binding) {\n const url = validateConnectionString(binding.url);\n\n const driverDescriptor = stack.driver;\n if (!driverDescriptor) {\n throw new Error('Driver descriptor missing from execution stack');\n }\n\n const stackInstance = instantiateExecutionStack(stack);\n const driver = driverDescriptor.create({\n ...ifDefined('cursor', options.cursor),\n });\n\n const client = new Client({ connectionString: url });\n await driver.connect({ kind: 'pgClient', client });\n\n let runtime: Runtime;\n try {\n runtime = createRuntime({\n stackInstance,\n context,\n driver,\n ...ifDefined('verifyMarker', options.verifyMarker),\n ...ifDefined('middleware', options.middleware),\n });\n } catch (err) {\n // The driver is bound to the pg.Client at this point; without a runtime\n // to wrap it, the caller has no handle to dispose. Close the driver so\n // the underlying pg.Client is released even if its TCP socket has not\n // yet opened (lazy connect): keeps cleanup symmetric with successful\n // construction and prevents real socket leaks if pg ever changes its\n // connect semantics.\n await driver.close().catch(() => undefined);\n throw err;\n }\n\n Object.defineProperty(runtime, Symbol.asyncDispose, {\n value: () => runtime.close(),\n configurable: true,\n writable: false,\n enumerable: false,\n });\n\n return runtime as Runtime & AsyncDisposable;\n },\n };\n}\n"],"mappings":";;;;;;;;;AA8DA,SAAS,gBACP,SACiE;CACjE,OAAO,kBAAkB;;AAG3B,MAAM,qBAAqB,IAAI,4BAA4B;AAE3D,SAAS,gBACP,SACW;CACX,MAAM,gBAAgB,gBAAgB,QAAQ,GAAG,QAAQ,eAAe,QAAQ;CAChF,OAAO,mBAAmB,oBAAoB,cAAc;;AAG9D,SAAS,yBAAyB,KAAqB;CACrD,MAAM,UAAU,IAAI,MAAM;CAC1B,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,MAAM,0CAA0C;CAE5D,OAAO;;AAgCT,SAAwB,mBACtB,SACqC;CACrC,MAAM,WAAW,gBAAgB,QAAQ;CACzC,MAAM,QAAQ,wBAAwB;EACpC,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,gBAAgB,QAAQ,cAAc,EAAE;EACzC,CAAC;CAEF,MAAM,UAAU,uBAAuB;EACrC;EACA;EACD,CAAC;CAIF,OAAO;EACL,KAHyBA,IAAsB,EAAE,SAAS,CAGvD;EACH;EACA;EACA;EAEA,MAAM,QAAQ,SAAS;GACrB,MAAM,MAAM,yBAAyB,QAAQ,IAAI;GAEjD,MAAM,mBAAmB,MAAM;GAC/B,IAAI,CAAC,kBACH,MAAM,IAAI,MAAM,iDAAiD;GAGnE,MAAM,gBAAgB,0BAA0B,MAAM;GACtD,MAAM,SAAS,iBAAiB,OAAO,EACrC,GAAG,UAAU,UAAU,QAAQ,OAAO,EACvC,CAAC;GAEF,MAAM,SAAS,IAAI,OAAO,EAAE,kBAAkB,KAAK,CAAC;GACpD,MAAM,OAAO,QAAQ;IAAE,MAAM;IAAY;IAAQ,CAAC;GAElD,IAAI;GACJ,IAAI;IACF,UAAU,cAAc;KACtB;KACA;KACA;KACA,GAAG,UAAU,gBAAgB,QAAQ,aAAa;KAClD,GAAG,UAAU,cAAc,QAAQ,WAAW;KAC/C,CAAC;YACK,KAAK;IAOZ,MAAM,OAAO,OAAO,CAAC,YAAY,KAAA,EAAU;IAC3C,MAAM;;GAGR,OAAO,eAAe,SAAS,OAAO,cAAc;IAClD,aAAa,QAAQ,OAAO;IAC5B,cAAc;IACd,UAAU;IACV,YAAY;IACb,CAAC;GAEF,OAAO;;EAEV"}
1
+ {"version":3,"file":"serverless.mjs","names":["sqlBuilder"],"sources":["../src/runtime/postgres-serverless.ts"],"sourcesContent":["import postgresAdapter from '@prisma-next/adapter-postgres/runtime';\nimport type { Contract } from '@prisma-next/contract/types';\nimport postgresDriver, {\n type PostgresDriverCreateOptions,\n} from '@prisma-next/driver-postgres/runtime';\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 { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n ExecutionContext,\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 postgresTarget, { PostgresContractSerializer } from '@prisma-next/target-postgres/runtime';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { Client } from 'pg';\n\nimport type { PostgresTargetId } from './postgres';\n\nexport type PostgresServerlessCursorOptions = NonNullable<PostgresDriverCreateOptions['cursor']>;\n\nexport interface PostgresServerlessClient<TContract extends Contract<SqlStorage>> {\n readonly sql: Db<TContract>;\n readonly context: ExecutionContext<TContract>;\n readonly stack: SqlExecutionStackWithDriver<PostgresTargetId>;\n readonly contract: TContract;\n connect(binding: { readonly url: string }): Promise<Runtime & AsyncDisposable>;\n}\n\nexport interface PostgresServerlessOptionsBase {\n readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];\n readonly middleware?: readonly SqlMiddleware[];\n readonly verifyMarker?: VerifyMarkerOption;\n readonly cursor?: PostgresServerlessCursorOptions;\n}\n\nexport type PostgresServerlessOptionsWithContract<TContract extends Contract<SqlStorage>> =\n PostgresServerlessOptionsBase & {\n readonly contract: TContract;\n readonly contractJson?: never;\n };\n\nexport type PostgresServerlessOptionsWithContractJson<TContract extends Contract<SqlStorage>> =\n PostgresServerlessOptionsBase & {\n readonly contractJson: unknown;\n readonly contract?: never;\n readonly _contract?: TContract;\n };\n\nexport type PostgresServerlessOptions<TContract extends Contract<SqlStorage>> =\n | PostgresServerlessOptionsWithContract<TContract>\n | PostgresServerlessOptionsWithContractJson<TContract>;\n\nfunction hasContractJson<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptions<TContract>,\n): options is PostgresServerlessOptionsWithContractJson<TContract> {\n return 'contractJson' in options;\n}\n\nconst contractSerializer = new PostgresContractSerializer();\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptions<TContract>,\n): TContract {\n const contractInput = hasContractJson(options) ? options.contractJson : options.contract;\n return contractSerializer.deserializeContract(contractInput) as TContract;\n}\n\nfunction validateConnectionString(url: string): string {\n const trimmed = url.trim();\n if (trimmed.length === 0) {\n throw new Error('Postgres URL must be a non-empty string');\n }\n return trimmed;\n}\n\n/**\n * Per-request Postgres facade for serverless / edge runtimes (Cloudflare Workers + Hyperdrive,\n * AWS Lambda, Vercel, Deno Deploy, Bun edge, etc.).\n *\n * Construction shape mirrors the Node `postgres()` factory but the returned client deliberately\n * omits `orm`, `runtime()`, and `transaction()`. Closure-cached convenience surfaces are unsafe\n * across `fetch` invocations: stale connections after isolate idle, concurrent-query races on a\n * shared `pg.Client`, no clean shutdown. Per-request callers acquire a fresh `Runtime` via\n * `db.connect({ url })` and dispose it via `await using` on scope exit.\n *\n * @example\n * ```ts\n * const db = postgresServerless<Contract>({ contractJson });\n *\n * export default {\n * async fetch(_req: Request, env: Env): Promise<Response> {\n * await using runtime = await db.connect({ url: env.HYPERDRIVE.connectionString });\n * const rows = await runtime.execute(db.sql.from(t).select(...).build());\n * return Response.json(rows);\n * },\n * };\n * ```\n */\nexport default function postgresServerless<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptionsWithContract<TContract>,\n): PostgresServerlessClient<TContract>;\nexport default function postgresServerless<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptionsWithContractJson<TContract>,\n): PostgresServerlessClient<TContract>;\nexport default function postgresServerless<TContract extends Contract<SqlStorage>>(\n options: PostgresServerlessOptions<TContract>,\n): PostgresServerlessClient<TContract> {\n const contract = resolveContract(options);\n const stack = createSqlExecutionStack({\n target: postgresTarget,\n adapter: postgresAdapter,\n driver: postgresDriver,\n extensionPacks: options.extensions ?? [],\n });\n\n const context = createExecutionContext({\n contract,\n stack,\n });\n\n const sql: Db<TContract> = sqlBuilder<TContract>({\n context,\n rawCodecInferer: stack.adapter.rawCodecInferer,\n });\n\n return {\n sql,\n context,\n stack,\n contract,\n\n async connect(binding) {\n const url = validateConnectionString(binding.url);\n\n const driverDescriptor = stack.driver;\n if (!driverDescriptor) {\n throw new Error('Driver descriptor missing from execution stack');\n }\n\n const stackInstance = instantiateExecutionStack(stack);\n const driver = driverDescriptor.create({\n ...ifDefined('cursor', options.cursor),\n });\n\n const client = new Client({ connectionString: url });\n await driver.connect({ kind: 'pgClient', client });\n\n let runtime: Runtime;\n try {\n runtime = createRuntime({\n stackInstance,\n context,\n driver,\n ...ifDefined('verifyMarker', options.verifyMarker),\n ...ifDefined('middleware', options.middleware),\n });\n } catch (err) {\n // The driver is bound to the pg.Client at this point; without a runtime\n // to wrap it, the caller has no handle to dispose. Close the driver so\n // the underlying pg.Client is released even if its TCP socket has not\n // yet opened (lazy connect): keeps cleanup symmetric with successful\n // construction and prevents real socket leaks if pg ever changes its\n // connect semantics.\n await driver.close().catch(() => undefined);\n throw err;\n }\n\n Object.defineProperty(runtime, Symbol.asyncDispose, {\n value: () => runtime.close(),\n configurable: true,\n writable: false,\n enumerable: false,\n });\n\n return runtime as Runtime & AsyncDisposable;\n },\n };\n}\n"],"mappings":";;;;;;;;;AA8DA,SAAS,gBACP,SACiE;CACjE,OAAO,kBAAkB;AAC3B;AAEA,MAAM,qBAAqB,IAAI,2BAA2B;AAE1D,SAAS,gBACP,SACW;CACX,MAAM,gBAAgB,gBAAgB,OAAO,IAAI,QAAQ,eAAe,QAAQ;CAChF,OAAO,mBAAmB,oBAAoB,aAAa;AAC7D;AAEA,SAAS,yBAAyB,KAAqB;CACrD,MAAM,UAAU,IAAI,KAAK;CACzB,IAAI,QAAQ,WAAW,GACrB,MAAM,IAAI,MAAM,yCAAyC;CAE3D,OAAO;AACT;AA+BA,SAAwB,mBACtB,SACqC;CACrC,MAAM,WAAW,gBAAgB,OAAO;CACxC,MAAM,QAAQ,wBAAwB;EACpC,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,gBAAgB,QAAQ,cAAc,CAAC;CACzC,CAAC;CAED,MAAM,UAAU,uBAAuB;EACrC;EACA;CACF,CAAC;CAOD,OAAO;EACL,KANyBA,IAAsB;GAC/C;GACA,iBAAiB,MAAM,QAAQ;EACjC,CAGI;EACF;EACA;EACA;EAEA,MAAM,QAAQ,SAAS;GACrB,MAAM,MAAM,yBAAyB,QAAQ,GAAG;GAEhD,MAAM,mBAAmB,MAAM;GAC/B,IAAI,CAAC,kBACH,MAAM,IAAI,MAAM,gDAAgD;GAGlE,MAAM,gBAAgB,0BAA0B,KAAK;GACrD,MAAM,SAAS,iBAAiB,OAAO,EACrC,GAAG,UAAU,UAAU,QAAQ,MAAM,EACvC,CAAC;GAED,MAAM,SAAS,IAAI,OAAO,EAAE,kBAAkB,IAAI,CAAC;GACnD,MAAM,OAAO,QAAQ;IAAE,MAAM;IAAY;GAAO,CAAC;GAEjD,IAAI;GACJ,IAAI;IACF,UAAU,cAAc;KACtB;KACA;KACA;KACA,GAAG,UAAU,gBAAgB,QAAQ,YAAY;KACjD,GAAG,UAAU,cAAc,QAAQ,UAAU;IAC/C,CAAC;GACH,SAAS,KAAK;IAOZ,MAAM,OAAO,MAAM,EAAE,YAAY,KAAA,CAAS;IAC1C,MAAM;GACR;GAEA,OAAO,eAAe,SAAS,OAAO,cAAc;IAClD,aAAa,QAAQ,MAAM;IAC3B,cAAc;IACd,UAAU;IACV,YAAY;GACd,CAAC;GAED,OAAO;EACT;CACF;AACF"}
package/package.json CHANGED
@@ -1,52 +1,53 @@
1
1
  {
2
2
  "name": "@prisma-next/postgres",
3
- "version": "0.11.0-dev.9",
3
+ "version": "0.12.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "description": "One-liner lazy Postgres client composition for Prisma Next",
8
8
  "dependencies": {
9
- "@prisma-next/adapter-postgres": "0.11.0-dev.9",
10
- "@prisma-next/cli": "0.11.0-dev.9",
11
- "@prisma-next/config": "0.11.0-dev.9",
12
- "@prisma-next/contract": "0.11.0-dev.9",
13
- "@prisma-next/driver-postgres": "0.11.0-dev.9",
14
- "@prisma-next/family-sql": "0.11.0-dev.9",
15
- "@prisma-next/framework-components": "0.11.0-dev.9",
16
- "@prisma-next/sql-contract": "0.11.0-dev.9",
17
- "@prisma-next/sql-contract-psl": "0.11.0-dev.9",
18
- "@prisma-next/sql-contract-ts": "0.11.0-dev.9",
19
- "@prisma-next/sql-builder": "0.11.0-dev.9",
20
- "@prisma-next/sql-orm-client": "0.11.0-dev.9",
21
- "@prisma-next/sql-relational-core": "0.11.0-dev.9",
22
- "@prisma-next/sql-runtime": "0.11.0-dev.9",
23
- "@prisma-next/target-postgres": "0.11.0-dev.9",
24
- "@prisma-next/utils": "0.11.0-dev.9",
9
+ "@prisma-next/adapter-postgres": "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-postgres": "0.12.0",
14
+ "@prisma-next/family-sql": "0.12.0",
15
+ "@prisma-next/framework-components": "0.12.0",
16
+ "@prisma-next/sql-contract": "0.12.0",
17
+ "@prisma-next/sql-contract-psl": "0.12.0",
18
+ "@prisma-next/sql-contract-ts": "0.12.0",
19
+ "@prisma-next/sql-builder": "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-postgres": "0.12.0",
24
+ "@prisma-next/utils": "0.12.0",
25
25
  "pathe": "^2.0.3",
26
26
  "pg": "8.20.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@prisma-next/psl-parser": "0.11.0-dev.9",
30
- "@prisma-next/test-utils": "0.11.0-dev.9",
31
- "@prisma-next/tsconfig": "0.11.0-dev.9",
32
- "@prisma-next/tsdown": "0.11.0-dev.9",
29
+ "@prisma-next/psl-parser": "0.12.0",
30
+ "@prisma-next/test-utils": "0.12.0",
31
+ "@prisma-next/tsconfig": "0.12.0",
32
+ "@prisma-next/tsdown": "0.12.0",
33
33
  "@types/pg": "8.20.0",
34
34
  "tsdown": "0.22.0",
35
35
  "typescript": "5.9.3",
36
36
  "vitest": "4.1.6"
37
37
  },
38
+ "peerDependencies": {
39
+ "typescript": ">=5.9"
40
+ },
41
+ "peerDependenciesMeta": {
42
+ "typescript": {
43
+ "optional": true
44
+ }
45
+ },
38
46
  "files": [
39
47
  "dist",
40
48
  "src"
41
49
  ],
42
- "repository": {
43
- "type": "git",
44
- "url": "https://github.com/prisma/prisma-next.git",
45
- "directory": "packages/3-extensions/postgres"
46
- },
47
- "engines": {
48
- "node": ">=20"
49
- },
50
+ "types": "./dist/runtime.d.mts",
50
51
  "exports": {
51
52
  "./config": "./dist/config.mjs",
52
53
  "./contract-builder": "./dist/contract-builder.mjs",
@@ -58,7 +59,14 @@
58
59
  "./target": "./dist/target.mjs",
59
60
  "./package.json": "./package.json"
60
61
  },
61
- "types": "./dist/runtime.d.mts",
62
+ "engines": {
63
+ "node": ">=24"
64
+ },
65
+ "repository": {
66
+ "type": "git",
67
+ "url": "https://github.com/prisma/prisma-next.git",
68
+ "directory": "packages/3-extensions/postgres"
69
+ },
62
70
  "scripts": {
63
71
  "build": "tsdown",
64
72
  "test": "vitest run",
@@ -18,112 +18,90 @@ type PostgresPack = typeof postgresPack;
18
18
  type TypesConstraint = Record<string, StorageTypeInstance | PostgresEnumStorageEntry>;
19
19
  type ModelsConstraint = Record<string, ModelLike>;
20
20
 
21
- // Return type threaded with all inferred type params.
22
- // We override target/targetFamily via intersection to preserve the literal values
23
- // ('postgres', 'sql') even when TypeScript defers conditional-type evaluation on
24
- // unresolved generic params.
25
21
  type PostgresResult<
26
22
  Types extends TypesConstraint,
27
23
  Models extends ModelsConstraint,
28
24
  ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,
29
- Capabilities extends Record<string, Record<string, boolean>> | undefined,
30
25
  > = Omit<
31
- ReturnType<
32
- typeof baseDefineContract<SqlFamily, PostgresPack, Types, Models, ExtensionPacks, Capabilities>
33
- >,
26
+ ReturnType<typeof baseDefineContract<SqlFamily, PostgresPack, Types, Models, ExtensionPacks>>,
34
27
  'target' | 'targetFamily'
35
28
  > & {
36
29
  readonly target: PostgresPack['targetId'];
37
30
  readonly targetFamily: SqlFamily['familyId'];
38
31
  };
39
32
 
40
- // Scaffold that carries all ContractInput fields EXCEPT family, target, types, models.
41
- // Built from ContractInput with concrete Record<never, never> defaults to avoid
42
- // the ContractInput Models constraint (which requires ContractModelBuilder, not ModelLike).
43
33
  type PostgresBaseScaffold<
44
34
  ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,
45
- Capabilities extends Record<string, Record<string, boolean>> | undefined,
46
35
  > = Omit<
47
36
  ContractInput<
48
37
  SqlFamily,
49
38
  PostgresPack,
50
39
  Record<never, never>,
51
40
  Record<never, never>,
52
- ExtensionPacks,
53
- Capabilities
41
+ ExtensionPacks
54
42
  >,
55
43
  'family' | 'target' | 'types' | 'models'
56
44
  >;
57
45
 
58
- // Definition form: inline types + models (uses ModelLike for models, not ContractModelBuilder)
59
46
  type PostgresDefinition<
60
47
  Types extends TypesConstraint,
61
48
  Models extends ModelsConstraint,
62
49
  ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,
63
- Capabilities extends Record<string, Record<string, boolean>> | undefined,
64
- > = PostgresBaseScaffold<ExtensionPacks, Capabilities> & {
50
+ > = PostgresBaseScaffold<ExtensionPacks> & {
65
51
  readonly types?: Types;
66
52
  readonly models?: Models;
67
53
  };
68
54
 
69
- // Factory form: scaffold without types/models (factory provides them)
70
55
  type PostgresScaffold<
71
56
  ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined,
72
- Capabilities extends Record<string, Record<string, boolean>> | undefined,
73
- > = PostgresBaseScaffold<ExtensionPacks, Capabilities>;
57
+ > = PostgresBaseScaffold<ExtensionPacks>;
74
58
 
75
- // Overload 1: definition form (models/types inline in scaffold)
76
59
  export function defineContract<
77
60
  const Types extends TypesConstraint = Record<never, never>,
78
61
  const Models extends ModelsConstraint = Record<never, never>,
79
62
  const ExtensionPacks extends
80
63
  | Record<string, ExtensionPackRef<'sql', string>>
81
64
  | undefined = undefined,
82
- const Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined,
83
65
  >(
84
- definition: PostgresDefinition<Types, Models, ExtensionPacks, Capabilities>,
85
- ): PostgresResult<Types, Models, ExtensionPacks, Capabilities>;
66
+ definition: PostgresDefinition<Types, Models, ExtensionPacks>,
67
+ ): PostgresResult<Types, Models, ExtensionPacks>;
86
68
 
87
- // Overload 2: factory form (scaffold without models/types; factory provides them)
88
69
  export function defineContract<
89
70
  const Types extends TypesConstraint = Record<never, never>,
90
71
  const Models extends ModelsConstraint = Record<never, never>,
91
72
  const ExtensionPacks extends
92
73
  | Record<string, ExtensionPackRef<'sql', string>>
93
74
  | undefined = undefined,
94
- const Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined,
95
75
  >(
96
- scaffold: PostgresScaffold<ExtensionPacks, Capabilities>,
76
+ scaffold: PostgresScaffold<ExtensionPacks>,
97
77
  factory: (helpers: ComposedAuthoringHelpers<SqlFamily, PostgresPack, ExtensionPacks>) => {
98
78
  readonly types?: Types;
99
79
  readonly models?: Models;
100
80
  },
101
- ): PostgresResult<Types, Models, ExtensionPacks, Capabilities>;
81
+ ): PostgresResult<Types, Models, ExtensionPacks>;
102
82
 
103
- // Implementation — the runtime type is richer than the wide impl signature;
104
- // as unknown is safe because every declared overload produces a PostgresResult.
105
83
  export function defineContract(
106
84
  scaffold: Omit<ContractInput, 'family' | 'target'>,
107
85
  factory?: (helpers: ComposedAuthoringHelpers<SqlFamily, PostgresPack, undefined>) => {
108
86
  readonly types?: TypesConstraint;
109
87
  readonly models?: ModelsConstraint;
110
88
  },
111
- ): PostgresResult<TypesConstraint, ModelsConstraint, undefined, undefined> {
89
+ ): PostgresResult<TypesConstraint, ModelsConstraint, undefined> {
112
90
  const full = {
113
91
  ...scaffold,
114
92
  family: sqlFamilyPack,
115
93
  target: postgresPack,
116
94
  } as ContractInput;
117
95
  if (factory !== undefined) {
96
+ const { types: _t, models: _m, ...scaffoldOnly } = full;
118
97
  return baseDefineContract(
119
- full,
98
+ scaffoldOnly,
120
99
  factory as Parameters<typeof baseDefineContract>[1],
121
- ) as unknown as PostgresResult<TypesConstraint, ModelsConstraint, undefined, undefined>;
100
+ ) as unknown as PostgresResult<TypesConstraint, ModelsConstraint, undefined>;
122
101
  }
123
102
  return baseDefineContract(full) as unknown as PostgresResult<
124
103
  TypesConstraint,
125
104
  ModelsConstraint,
126
- undefined,
127
105
  undefined
128
106
  >;
129
107
  }
@@ -128,7 +128,10 @@ export default function postgresServerless<TContract extends Contract<SqlStorage
128
128
  stack,
129
129
  });
130
130
 
131
- const sql: Db<TContract> = sqlBuilder<TContract>({ context });
131
+ const sql: Db<TContract> = sqlBuilder<TContract>({
132
+ context,
133
+ rawCodecInferer: stack.adapter.rawCodecInferer,
134
+ });
132
135
 
133
136
  return {
134
137
  sql,
@@ -6,7 +6,8 @@ import { sql as sqlBuilder } from '@prisma-next/sql-builder/runtime';
6
6
  import type { Db } from '@prisma-next/sql-builder/types';
7
7
  import type { ExtractCodecTypes, SqlStorage } from '@prisma-next/sql-contract/types';
8
8
  import { orm as ormBuilder } from '@prisma-next/sql-orm-client';
9
- import type { CodecTypesBase } from '@prisma-next/sql-relational-core/expression';
9
+ import type { CodecTypesBase, RawSqlTag } from '@prisma-next/sql-relational-core/expression';
10
+ import { createRawSql } from '@prisma-next/sql-relational-core/expression';
10
11
  import type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';
11
12
  import type {
12
13
  BindSiteParams,
@@ -49,6 +50,7 @@ export interface PostgresTransactionContext<TContract extends Contract<SqlStorag
49
50
  export interface PostgresClient<TContract extends Contract<SqlStorage>> {
50
51
  readonly sql: Db<TContract>;
51
52
  readonly orm: OrmClient<TContract>;
53
+ readonly raw: RawSqlTag;
52
54
  readonly context: ExecutionContext<TContract>;
53
55
  readonly stack: SqlExecutionStackWithDriver<PostgresTargetId>;
54
56
  connect(bindingInput?: PostgresBindingInput): Promise<Runtime>;
@@ -164,6 +166,9 @@ export default function postgres<TContract extends Contract<SqlStorage>>(
164
166
  stack,
165
167
  });
166
168
 
169
+ const rawCodecInferer = stack.adapter.rawCodecInferer;
170
+ const rawSqlTag: RawSqlTag = createRawSql(rawCodecInferer);
171
+
167
172
  let runtimeInstance: Runtime | undefined;
168
173
  let runtimeDriver: { connect(binding: unknown): Promise<void> } | undefined;
169
174
  let driverConnected = false;
@@ -248,11 +253,12 @@ export default function postgres<TContract extends Contract<SqlStorage>>(
248
253
  context,
249
254
  });
250
255
 
251
- const sql: Db<TContract> = sqlBuilder<TContract>({ context });
256
+ const sql: Db<TContract> = sqlBuilder<TContract>({ context, rawCodecInferer });
252
257
 
253
258
  return {
254
259
  sql,
255
260
  orm,
261
+ raw: rawSqlTag,
256
262
  context,
257
263
  stack,
258
264
 
@@ -301,7 +307,10 @@ export default function postgres<TContract extends Contract<SqlStorage>>(
301
307
 
302
308
  transaction<R>(fn: (tx: PostgresTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {
303
309
  return withTransaction(getRuntime(), (txCtx) => {
304
- const txSql: Db<TContract> = sqlBuilder<TContract>({ context });
310
+ const txSql: Db<TContract> = sqlBuilder<TContract>({
311
+ context,
312
+ rawCodecInferer,
313
+ });
305
314
 
306
315
  const txOrm: OrmClient<TContract> = ormBuilder({
307
316
  runtime: {
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgres-DIKe4Gyg.d.mts","names":[],"sources":["../src/runtime/binding.ts","../src/runtime/postgres.ts"],"mappings":";;;;;;;;;;KAGY,eAAA;EAAA,SACG,IAAA;EAAA,SAAsB,GAAA;AAAA;EAAA,SACtB,IAAA;EAAA,SAAyB,IAAA,EAAM,IAAA;AAAA;EAAA,SAC/B,IAAA;EAAA,SAA2B,MAAA,EAAQ,MAAA;AAAA;AAAA,KAEtC,oBAAA;EAAA,SAEG,OAAA,EAAS,eAAA;EAAA,SACT,GAAA;EAAA,SACA,EAAA;AAAA;EAAA,SAGA,GAAA;EAAA,SACA,OAAA;EAAA,SACA,EAAA;AAAA;EAAA,SAGA,EAAA,EAAI,IAAA,GAAO,MAAA;EAAA,SACX,OAAA;EAAA,SACA,GAAA;AAAA;;;KCiBH,gBAAA;AAAA,KACP,SAAA,mBAA4B,QAAA,CAAS,UAAA,KAAe,UAAA,QAAkB,GAAA,CAAW,SAAA;AAAA,UAErE,0BAAA,mBAA6C,QAAA,CAAS,UAAA,WAC7D,kBAAA;EAAA,SACC,GAAA,EAAK,EAAA,CAAG,SAAA;EAAA,SACR,GAAA,EAAK,SAAA,CAAU,SAAA;AAAA;AAAA,UAGT,cAAA,mBAAiC,QAAA,CAAS,UAAA;EAAA,SAChD,GAAA,EAAK,EAAA,CAAG,SAAA;EAAA,SACR,GAAA,EAAK,SAAA,CAAU,SAAA;EAAA,SACf,OAAA,EAAS,gBAAA,CAAiB,SAAA;EAAA,SAC1B,KAAA,EAAO,2BAAA,CAA4B,gBAAA;EAC5C,OAAA,CAAQ,YAAA,GAAe,oBAAA,GAAuB,OAAA,CAAQ,OAAA;EACtD,OAAA,IAAW,OAAA;EACX,WAAA,IAAe,EAAA,GAAK,EAAA,EAAI,0BAAA,CAA2B,SAAA,MAAe,WAAA,CAAY,CAAA,IAAK,OAAA,CAAQ,CAAA;EAC3F,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,mBAAA;EAAA,SACN,UAAA,YAAsB,6BAAA,CAA8B,gBAAA;EAAA,SACpD,UAAA,YAAsB,aAAA;EAAA,SACtB,YAAA,GAAe,kBAAA;EAAA,SACf,WAAA;IAAA,SACE,uBAAA;IAAA,SACA,iBAAA;EAAA;AAAA;AAAA,UAII,sBAAA;EAAA,SACN,OAAA,GAAU,eAAA;EAAA,SACV,GAAA;EAAA,SACA,EAAA,GAAK,IAAA,GAAO,MAAA;AAAA;AAAA,KAGX,2BAAA,mBAA8C,QAAA,CAAS,UAAA,KACjE,sBAAA,GACE,mBAAA;EAAA,SACW,QAAA,EAAU,SAAA;EAAA,SACV,YAAA;AAAA;AAAA,KAGH,+BAAA,mBAAkD,QAAA,CAAS,UAAA,KACrE,sBAAA,GACE,mBAAA;EAAA,SACW,YAAA;EAAA,SACA,QAAA;EAAA,SACA,SAAA,GAAY,SAAA;AAAA;AAAA,KAGf,eAAA,mBAAkC,QAAA,CAAS,UAAA,KACnD,2BAAA,CAA4B,SAAA,IAC5B,+BAAA,CAAgC,SAAA;;;;AA9DM;;;;iBAwGlB,QAAA,mBAA2B,QAAA,CAAS,UAAA,EAAA,CAC1D,OAAA,EAAS,2BAAA,CAA4B,SAAA,IACpC,cAAA,CAAe,SAAA;AAAA,iBACM,QAAA,mBAA2B,QAAA,CAAS,UAAA,EAAA,CAC1D,OAAA,EAAS,+BAAA,CAAgC,SAAA,IACxC,cAAA,CAAe,SAAA"}