@prisma-next/postgres 0.11.0 → 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.
- package/dist/config.d.mts +1 -0
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +2 -2
- package/dist/config.mjs.map +1 -1
- package/dist/contract-builder.d.mts +7 -7
- package/dist/contract-builder.d.mts.map +1 -1
- package/dist/contract-builder.mjs +4 -1
- package/dist/contract-builder.mjs.map +1 -1
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs.map +1 -1
- package/dist/{postgres-DTqYNIbs.d.mts → postgres-Cb2xZXhL.d.mts} +5 -4
- package/dist/postgres-Cb2xZXhL.d.mts.map +1 -0
- package/dist/runtime.d.mts +1 -1
- package/dist/runtime.mjs +13 -6
- package/dist/runtime.mjs.map +1 -1
- package/dist/serverless.d.mts +3 -3
- package/dist/serverless.d.mts.map +1 -1
- package/dist/serverless.mjs +5 -5
- package/dist/serverless.mjs.map +1 -1
- package/package.json +38 -30
- package/src/config/define-config.ts +6 -2
- package/src/contract/define-contract.ts +12 -34
- package/src/runtime/postgres-serverless.ts +7 -4
- package/src/runtime/postgres.ts +15 -6
- package/dist/postgres-DTqYNIbs.d.mts.map +0 -1
package/dist/config.d.mts
CHANGED
|
@@ -4,6 +4,7 @@ import { ControlExtensionDescriptor } from "@prisma-next/framework-components/co
|
|
|
4
4
|
//#region src/config/define-config.d.ts
|
|
5
5
|
interface PostgresConfigOptions {
|
|
6
6
|
readonly contract: string;
|
|
7
|
+
readonly outputPath?: string;
|
|
7
8
|
readonly db?: {
|
|
8
9
|
readonly connection?: string;
|
|
9
10
|
};
|
package/dist/config.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.mts","names":[],"sources":["../src/config/define-config.ts"],"mappings":";;;;UAYiB,qBAAA;EAAA,SACN,QAAA;EAAA,SACA,EAAA;IAAA,SACE,UAAA;EAAA;EAAA,SAEF,UAAA,YAAsB,
|
|
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"}
|
package/dist/config.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { prismaContract } from "@prisma-next/sql-contract-psl/provider";
|
|
|
6
6
|
import { typescriptContractFromPath } from "@prisma-next/sql-contract-ts/config-types";
|
|
7
7
|
import postgres from "@prisma-next/target-postgres/control";
|
|
8
8
|
import { ifDefined } from "@prisma-next/utils/defined";
|
|
9
|
-
import { extname } from "pathe";
|
|
9
|
+
import { extname, join } from "pathe";
|
|
10
10
|
//#region src/config/define-config.ts
|
|
11
11
|
function deriveOutputPath(contractPath) {
|
|
12
12
|
const ext = extname(contractPath);
|
|
@@ -15,7 +15,7 @@ function deriveOutputPath(contractPath) {
|
|
|
15
15
|
}
|
|
16
16
|
function defineConfig(options) {
|
|
17
17
|
const extensions = options.extensions ?? [];
|
|
18
|
-
const output = deriveOutputPath(options.contract);
|
|
18
|
+
const output = options.outputPath !== void 0 ? join(options.outputPath, "contract.json") : deriveOutputPath(options.contract);
|
|
19
19
|
return defineConfig$1({
|
|
20
20
|
family: sql,
|
|
21
21
|
target: postgres,
|
package/dist/config.mjs.map
CHANGED
|
@@ -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 } from 'pathe';\n\nexport interface PostgresConfigOptions {\n readonly contract: 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
|
|
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
|
|
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
|
|
17
|
-
type PostgresDefinition<Types extends TypesConstraint, Models extends ModelsConstraint, ExtensionPacks extends Record<string, ExtensionPackRef<'sql', string>> | undefined
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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)
|
|
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\
|
|
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"}
|
package/dist/control.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.mts","names":[],"sources":["../src/exports/control.ts"],"mappings":";;;UAoBiB,4BAAA;EAW+B
|
|
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"}
|
package/dist/control.mjs.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
2
|
+
import { CodecTypesBase, RawSqlTag } from "@prisma-next/sql-relational-core/expression";
|
|
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>;
|
|
@@ -54,7 +55,7 @@ interface PostgresClient<TContract extends Contract<SqlStorage>> {
|
|
|
54
55
|
interface PostgresOptionsBase {
|
|
55
56
|
readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];
|
|
56
57
|
readonly middleware?: readonly SqlMiddleware[];
|
|
57
|
-
readonly
|
|
58
|
+
readonly verifyMarker?: VerifyMarkerOption;
|
|
58
59
|
readonly poolOptions?: {
|
|
59
60
|
readonly connectionTimeoutMillis?: number;
|
|
60
61
|
readonly idleTimeoutMillis?: number;
|
|
@@ -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-
|
|
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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"}
|
package/dist/runtime.d.mts
CHANGED
|
@@ -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-
|
|
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;
|
|
@@ -122,10 +125,7 @@ function postgres(options) {
|
|
|
122
125
|
stackInstance,
|
|
123
126
|
context,
|
|
124
127
|
driver,
|
|
125
|
-
|
|
126
|
-
mode: "onFirstUse",
|
|
127
|
-
requireMarker: false
|
|
128
|
-
},
|
|
128
|
+
...ifDefined("verifyMarker", options.verifyMarker),
|
|
129
129
|
...ifDefined("middleware", options.middleware)
|
|
130
130
|
});
|
|
131
131
|
return runtimeInstance;
|
|
@@ -141,10 +141,14 @@ function postgres(options) {
|
|
|
141
141
|
},
|
|
142
142
|
context
|
|
143
143
|
});
|
|
144
|
-
const sql$1 = sql({
|
|
144
|
+
const sql$1 = sql({
|
|
145
|
+
context,
|
|
146
|
+
rawCodecInferer
|
|
147
|
+
});
|
|
145
148
|
return {
|
|
146
149
|
sql: sql$1,
|
|
147
150
|
orm: orm$1,
|
|
151
|
+
raw: rawSqlTag,
|
|
148
152
|
context,
|
|
149
153
|
stack,
|
|
150
154
|
async connect(bindingInput) {
|
|
@@ -165,7 +169,10 @@ function postgres(options) {
|
|
|
165
169
|
},
|
|
166
170
|
transaction(fn) {
|
|
167
171
|
return withTransaction(getRuntime(), (txCtx) => {
|
|
168
|
-
const txSql = sql({
|
|
172
|
+
const txSql = sql({
|
|
173
|
+
context,
|
|
174
|
+
rawCodecInferer
|
|
175
|
+
});
|
|
169
176
|
const txOrm = orm({
|
|
170
177
|
runtime: { execute(plan) {
|
|
171
178
|
return txCtx.execute(plan);
|
package/dist/runtime.mjs.map
CHANGED
|
@@ -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 RuntimeVerifyOptions,\n SqlExecutionStackWithDriver,\n SqlMiddleware,\n SqlRuntimeExtensionDescriptor,\n TransactionContext,\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 verify?: RuntimeVerifyOptions;\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 verify: options.verify ?? { mode: 'onFirstUse', requireMarker: false },\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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"}
|
package/dist/serverless.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { o as PostgresTargetId } from "./postgres-
|
|
1
|
+
import { o as PostgresTargetId } from "./postgres-Cb2xZXhL.mjs";
|
|
2
2
|
import { PostgresDriverCreateOptions } from "@prisma-next/driver-postgres/runtime";
|
|
3
|
-
import { ExecutionContext, Runtime,
|
|
3
|
+
import { ExecutionContext, Runtime, SqlExecutionStackWithDriver, SqlMiddleware, SqlRuntimeExtensionDescriptor, VerifyMarkerOption } from "@prisma-next/sql-runtime";
|
|
4
4
|
import { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
5
5
|
import { Contract } from "@prisma-next/contract/types";
|
|
6
6
|
import { Db } from "@prisma-next/sql-builder/types";
|
|
@@ -19,7 +19,7 @@ interface PostgresServerlessClient<TContract extends Contract<SqlStorage>> {
|
|
|
19
19
|
interface PostgresServerlessOptionsBase {
|
|
20
20
|
readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];
|
|
21
21
|
readonly middleware?: readonly SqlMiddleware[];
|
|
22
|
-
readonly
|
|
22
|
+
readonly verifyMarker?: VerifyMarkerOption;
|
|
23
23
|
readonly cursor?: PostgresServerlessCursorOptions;
|
|
24
24
|
}
|
|
25
25
|
type PostgresServerlessOptionsWithContract<TContract extends Contract<SqlStorage>> = PostgresServerlessOptionsBase & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverless.d.mts","names":[],"sources":["../src/runtime/postgres-serverless.ts"],"mappings":";;;;;;;;KA4BY,+BAAA,GAAkC,
|
|
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"}
|
package/dist/serverless.mjs
CHANGED
|
@@ -33,7 +33,10 @@ function postgresServerless(options) {
|
|
|
33
33
|
stack
|
|
34
34
|
});
|
|
35
35
|
return {
|
|
36
|
-
sql: sql({
|
|
36
|
+
sql: sql({
|
|
37
|
+
context,
|
|
38
|
+
rawCodecInferer: stack.adapter.rawCodecInferer
|
|
39
|
+
}),
|
|
37
40
|
context,
|
|
38
41
|
stack,
|
|
39
42
|
contract,
|
|
@@ -54,10 +57,7 @@ function postgresServerless(options) {
|
|
|
54
57
|
stackInstance,
|
|
55
58
|
context,
|
|
56
59
|
driver,
|
|
57
|
-
|
|
58
|
-
mode: "onFirstUse",
|
|
59
|
-
requireMarker: false
|
|
60
|
-
},
|
|
60
|
+
...ifDefined("verifyMarker", options.verifyMarker),
|
|
61
61
|
...ifDefined("middleware", options.middleware)
|
|
62
62
|
});
|
|
63
63
|
} catch (err) {
|
package/dist/serverless.mjs.map
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
10
|
-
"@prisma-next/cli": "0.
|
|
11
|
-
"@prisma-next/config": "0.
|
|
12
|
-
"@prisma-next/contract": "0.
|
|
13
|
-
"@prisma-next/driver-postgres": "0.
|
|
14
|
-
"@prisma-next/family-sql": "0.
|
|
15
|
-
"@prisma-next/framework-components": "0.
|
|
16
|
-
"@prisma-next/sql-contract": "0.
|
|
17
|
-
"@prisma-next/sql-contract-psl": "0.
|
|
18
|
-
"@prisma-next/sql-contract-ts": "0.
|
|
19
|
-
"@prisma-next/sql-builder": "0.
|
|
20
|
-
"@prisma-next/sql-orm-client": "0.
|
|
21
|
-
"@prisma-next/sql-relational-core": "0.
|
|
22
|
-
"@prisma-next/sql-runtime": "0.
|
|
23
|
-
"@prisma-next/target-postgres": "0.
|
|
24
|
-
"@prisma-next/utils": "0.
|
|
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.
|
|
30
|
-
"@prisma-next/test-utils": "0.
|
|
31
|
-
"@prisma-next/tsconfig": "0.
|
|
32
|
-
"@prisma-next/tsdown": "0.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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",
|
|
@@ -8,10 +8,11 @@ import { prismaContract } from '@prisma-next/sql-contract-psl/provider';
|
|
|
8
8
|
import { typescriptContractFromPath } from '@prisma-next/sql-contract-ts/config-types';
|
|
9
9
|
import postgres from '@prisma-next/target-postgres/control';
|
|
10
10
|
import { ifDefined } from '@prisma-next/utils/defined';
|
|
11
|
-
import { extname } from 'pathe';
|
|
11
|
+
import { extname, join } from 'pathe';
|
|
12
12
|
|
|
13
13
|
export interface PostgresConfigOptions {
|
|
14
14
|
readonly contract: string;
|
|
15
|
+
readonly outputPath?: string;
|
|
15
16
|
readonly db?: {
|
|
16
17
|
readonly connection?: string;
|
|
17
18
|
};
|
|
@@ -31,7 +32,10 @@ function deriveOutputPath(contractPath: string): string {
|
|
|
31
32
|
|
|
32
33
|
export function defineConfig(options: PostgresConfigOptions): PrismaNextConfig<'sql', 'postgres'> {
|
|
33
34
|
const extensions = options.extensions ?? [];
|
|
34
|
-
const output =
|
|
35
|
+
const output =
|
|
36
|
+
options.outputPath !== undefined
|
|
37
|
+
? join(options.outputPath, 'contract.json')
|
|
38
|
+
: deriveOutputPath(options.contract);
|
|
35
39
|
const ext = extname(options.contract);
|
|
36
40
|
|
|
37
41
|
const contractConfig =
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
85
|
-
): PostgresResult<Types, Models, ExtensionPacks
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
98
|
+
scaffoldOnly,
|
|
120
99
|
factory as Parameters<typeof baseDefineContract>[1],
|
|
121
|
-
) as unknown as PostgresResult<TypesConstraint, ModelsConstraint, 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
|
}
|
|
@@ -10,10 +10,10 @@ import type { SqlStorage } from '@prisma-next/sql-contract/types';
|
|
|
10
10
|
import type {
|
|
11
11
|
ExecutionContext,
|
|
12
12
|
Runtime,
|
|
13
|
-
RuntimeVerifyOptions,
|
|
14
13
|
SqlExecutionStackWithDriver,
|
|
15
14
|
SqlMiddleware,
|
|
16
15
|
SqlRuntimeExtensionDescriptor,
|
|
16
|
+
VerifyMarkerOption,
|
|
17
17
|
} from '@prisma-next/sql-runtime';
|
|
18
18
|
import {
|
|
19
19
|
createExecutionContext,
|
|
@@ -39,7 +39,7 @@ export interface PostgresServerlessClient<TContract extends Contract<SqlStorage>
|
|
|
39
39
|
export interface PostgresServerlessOptionsBase {
|
|
40
40
|
readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];
|
|
41
41
|
readonly middleware?: readonly SqlMiddleware[];
|
|
42
|
-
readonly
|
|
42
|
+
readonly verifyMarker?: VerifyMarkerOption;
|
|
43
43
|
readonly cursor?: PostgresServerlessCursorOptions;
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -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>({
|
|
131
|
+
const sql: Db<TContract> = sqlBuilder<TContract>({
|
|
132
|
+
context,
|
|
133
|
+
rawCodecInferer: stack.adapter.rawCodecInferer,
|
|
134
|
+
});
|
|
132
135
|
|
|
133
136
|
return {
|
|
134
137
|
sql,
|
|
@@ -158,7 +161,7 @@ export default function postgresServerless<TContract extends Contract<SqlStorage
|
|
|
158
161
|
stackInstance,
|
|
159
162
|
context,
|
|
160
163
|
driver,
|
|
161
|
-
|
|
164
|
+
...ifDefined('verifyMarker', options.verifyMarker),
|
|
162
165
|
...ifDefined('middleware', options.middleware),
|
|
163
166
|
});
|
|
164
167
|
} catch (err) {
|
package/src/runtime/postgres.ts
CHANGED
|
@@ -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,
|
|
@@ -15,11 +16,11 @@ import type {
|
|
|
15
16
|
ParamsFromDeclaration,
|
|
16
17
|
PreparedStatement,
|
|
17
18
|
Runtime,
|
|
18
|
-
RuntimeVerifyOptions,
|
|
19
19
|
SqlExecutionStackWithDriver,
|
|
20
20
|
SqlMiddleware,
|
|
21
21
|
SqlRuntimeExtensionDescriptor,
|
|
22
22
|
TransactionContext,
|
|
23
|
+
VerifyMarkerOption,
|
|
23
24
|
} from '@prisma-next/sql-runtime';
|
|
24
25
|
import {
|
|
25
26
|
createExecutionContext,
|
|
@@ -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>;
|
|
@@ -69,7 +71,7 @@ export interface PostgresClient<TContract extends Contract<SqlStorage>> {
|
|
|
69
71
|
export interface PostgresOptionsBase {
|
|
70
72
|
readonly extensions?: readonly SqlRuntimeExtensionDescriptor<PostgresTargetId>[];
|
|
71
73
|
readonly middleware?: readonly SqlMiddleware[];
|
|
72
|
-
readonly
|
|
74
|
+
readonly verifyMarker?: VerifyMarkerOption;
|
|
73
75
|
readonly poolOptions?: {
|
|
74
76
|
readonly connectionTimeoutMillis?: number;
|
|
75
77
|
readonly idleTimeoutMillis?: number;
|
|
@@ -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;
|
|
@@ -230,7 +235,7 @@ export default function postgres<TContract extends Contract<SqlStorage>>(
|
|
|
230
235
|
stackInstance,
|
|
231
236
|
context,
|
|
232
237
|
driver,
|
|
233
|
-
|
|
238
|
+
...ifDefined('verifyMarker', options.verifyMarker),
|
|
234
239
|
...ifDefined('middleware', options.middleware),
|
|
235
240
|
});
|
|
236
241
|
|
|
@@ -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>({
|
|
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-DTqYNIbs.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,MAAA,GAAS,oBAAA;EAAA,SACT,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"}
|