@prisma-next/target-postgres 0.5.0-dev.66 → 0.5.0-dev.68
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/{codec-ids-ckQX9Kcg.mjs → codec-ids-C5qzBqus.mjs} +2 -3
- package/dist/{codec-ids-ckQX9Kcg.mjs.map → codec-ids-C5qzBqus.mjs.map} +1 -1
- package/dist/{codec-ids-B-wNPs-9.d.mts → codec-ids-CplrEfmx.d.mts} +1 -1
- package/dist/codec-ids-CplrEfmx.d.mts.map +1 -0
- package/dist/codec-ids.d.mts +1 -1
- package/dist/codec-ids.mjs +2 -3
- package/dist/{codec-types-Br-rrBBQ.d.mts → codec-types-lrsb3N07.d.mts} +21 -22
- package/dist/codec-types-lrsb3N07.d.mts.map +1 -0
- package/dist/codec-types.d.mts +1 -3
- package/dist/codec-types.mjs +1 -1
- package/dist/{codecs-DZUnQrrl.d.mts → codecs-Cue97Xqf.d.mts} +35 -36
- package/dist/codecs-Cue97Xqf.d.mts.map +1 -0
- package/dist/codecs.d.mts +1 -3
- package/dist/codecs.d.mts.map +1 -1
- package/dist/codecs.mjs +11 -15
- package/dist/codecs.mjs.map +1 -1
- package/dist/control.d.mts +1 -1
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +107 -49
- package/dist/control.mjs.map +1 -1
- package/dist/{data-transform-CR_9PvW9.mjs → data-transform-DKWXdHuZ.mjs} +2 -3
- package/dist/data-transform-DKWXdHuZ.mjs.map +1 -0
- package/dist/{data-transform-T71mQkVW.d.mts → data-transform-bIeAcZIJ.d.mts} +2 -3
- package/dist/data-transform-bIeAcZIJ.d.mts.map +1 -0
- package/dist/data-transform.d.mts +1 -1
- package/dist/data-transform.mjs +2 -3
- package/dist/{default-normalizer-D4RoM0i6.mjs → default-normalizer-C8XyZj85.mjs} +2 -2
- package/dist/{default-normalizer-D4RoM0i6.mjs.map → default-normalizer-C8XyZj85.mjs.map} +1 -1
- package/dist/default-normalizer.d.mts +0 -1
- package/dist/default-normalizer.d.mts.map +1 -1
- package/dist/default-normalizer.mjs +2 -3
- package/dist/descriptor-meta-Dde_BS3K.mjs +99 -0
- package/dist/descriptor-meta-Dde_BS3K.mjs.map +1 -0
- package/dist/{errors-BT_Duyj-.mjs → errors-Chm2bKcS.mjs} +2 -3
- package/dist/{errors-BT_Duyj-.mjs.map → errors-Chm2bKcS.mjs.map} +1 -1
- package/dist/errors.d.mts +0 -1
- package/dist/errors.d.mts.map +1 -1
- package/dist/errors.mjs +2 -3
- package/dist/{issue-planner-DooWabc2.mjs → issue-planner-B10B70JF.mjs} +8 -12
- package/dist/issue-planner-B10B70JF.mjs.map +1 -0
- package/dist/issue-planner.d.mts +1 -3
- package/dist/issue-planner.d.mts.map +1 -1
- package/dist/issue-planner.mjs +2 -3
- package/dist/migration.d.mts +3 -3
- package/dist/migration.d.mts.map +1 -1
- package/dist/migration.mjs +4 -5
- package/dist/migration.mjs.map +1 -1
- package/dist/{native-type-normalizer-i4IFPL5F.mjs → native-type-normalizer-Cry4QoLf.mjs} +2 -2
- package/dist/native-type-normalizer-Cry4QoLf.mjs.map +1 -0
- package/dist/native-type-normalizer.d.mts.map +1 -1
- package/dist/native-type-normalizer.mjs +2 -3
- package/dist/{op-factory-call-SFMIf-Cz.d.mts → op-factory-call-CW8pzxmB.d.mts} +3 -4
- package/dist/op-factory-call-CW8pzxmB.d.mts.map +1 -0
- package/dist/{op-factory-call-Bvw39XKU.mjs → op-factory-call-Cq8s4Fz1.mjs} +3 -4
- package/dist/{op-factory-call-Bvw39XKU.mjs.map → op-factory-call-Cq8s4Fz1.mjs.map} +1 -1
- package/dist/op-factory-call.d.mts +1 -2
- package/dist/op-factory-call.mjs +2 -3
- package/dist/pack.d.mts +1 -3
- package/dist/pack.d.mts.map +1 -1
- package/dist/pack.mjs +2 -3
- package/dist/{planner-Cgr3Ttsi.mjs → planner-JmqeNfGa.mjs} +16 -9
- package/dist/planner-JmqeNfGa.mjs.map +1 -0
- package/dist/{planner-ddl-builders-B6VK92UF.mjs → planner-ddl-builders-CLB7Umhh.mjs} +4 -5
- package/dist/planner-ddl-builders-CLB7Umhh.mjs.map +1 -0
- package/dist/planner-ddl-builders.d.mts +1 -1
- package/dist/planner-ddl-builders.d.mts.map +1 -1
- package/dist/planner-ddl-builders.mjs +2 -3
- package/dist/{planner-identity-values-CC5fa5D9.mjs → planner-identity-values-DTx0gePL.mjs} +2 -3
- package/dist/{planner-identity-values-CC5fa5D9.mjs.map → planner-identity-values-DTx0gePL.mjs.map} +1 -1
- package/dist/planner-identity-values.d.mts +0 -1
- package/dist/planner-identity-values.d.mts.map +1 -1
- package/dist/planner-identity-values.mjs +2 -3
- package/dist/{planner-produced-postgres-migration-YjS7RsWc.mjs → planner-produced-postgres-migration-Br3NgwpH.mjs} +5 -6
- package/dist/{planner-produced-postgres-migration-YjS7RsWc.mjs.map → planner-produced-postgres-migration-Br3NgwpH.mjs.map} +1 -1
- package/dist/{planner-produced-postgres-migration-CEI1d_Rq.d.mts → planner-produced-postgres-migration-D7Pe160c.d.mts} +4 -5
- package/dist/planner-produced-postgres-migration-D7Pe160c.d.mts.map +1 -0
- package/dist/planner-produced-postgres-migration.d.mts +1 -5
- package/dist/planner-produced-postgres-migration.mjs +2 -3
- package/dist/{planner-schema-lookup-B3talum5.mjs → planner-schema-lookup-B1ags8ys.mjs} +2 -2
- package/dist/{planner-schema-lookup-B3talum5.mjs.map → planner-schema-lookup-B1ags8ys.mjs.map} +1 -1
- package/dist/planner-schema-lookup.d.mts +0 -1
- package/dist/planner-schema-lookup.d.mts.map +1 -1
- package/dist/planner-schema-lookup.mjs +2 -3
- package/dist/{planner-sql-checks-uDnwA68k.mjs → planner-sql-checks-DwZvGlV4.mjs} +3 -5
- package/dist/planner-sql-checks-DwZvGlV4.mjs.map +1 -0
- package/dist/planner-sql-checks.d.mts.map +1 -1
- package/dist/planner-sql-checks.mjs +2 -3
- package/dist/{planner-target-details-COAiKZjW.d.mts → planner-target-details-bVVcanWh.d.mts} +1 -1
- package/dist/planner-target-details-bVVcanWh.d.mts.map +1 -0
- package/dist/planner-target-details.d.mts +1 -1
- package/dist/planner-target-details.mjs +1 -1
- package/dist/planner.d.mts +1 -5
- package/dist/planner.d.mts.map +1 -1
- package/dist/planner.mjs +2 -4
- package/dist/{postgres-migration-BAgHXrjO.mjs → postgres-migration-Bkv140RW.mjs} +4 -5
- package/dist/{postgres-migration-BAgHXrjO.mjs.map → postgres-migration-Bkv140RW.mjs.map} +1 -1
- package/dist/{postgres-migration-RXzk7OX7.d.mts → postgres-migration-UkcHfZAA.d.mts} +3 -4
- package/dist/postgres-migration-UkcHfZAA.d.mts.map +1 -0
- package/dist/{render-ops-DddkYOIB.mjs → render-ops-DXxV-PbF.mjs} +2 -2
- package/dist/{render-ops-DddkYOIB.mjs.map → render-ops-DXxV-PbF.mjs.map} +1 -1
- package/dist/render-ops.d.mts +2 -3
- package/dist/render-ops.d.mts.map +1 -1
- package/dist/render-ops.mjs +2 -3
- package/dist/{render-typescript-0EtwW-Ip.mjs → render-typescript-pyz96rAY.mjs} +2 -3
- package/dist/render-typescript-pyz96rAY.mjs.map +1 -0
- package/dist/render-typescript.d.mts +1 -3
- package/dist/render-typescript.d.mts.map +1 -1
- package/dist/render-typescript.mjs +2 -3
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +3 -5
- package/dist/runtime.mjs.map +1 -1
- package/dist/{shared-DSVRy4AX.d.mts → shared-MpwjwAjM.d.mts} +2 -2
- package/dist/shared-MpwjwAjM.d.mts.map +1 -0
- package/dist/{sql-utils-C9dyHV0x.mjs → sql-utils-CggjWNij.mjs} +4 -2
- package/dist/sql-utils-CggjWNij.mjs.map +1 -0
- package/dist/sql-utils.d.mts.map +1 -1
- package/dist/sql-utils.mjs +2 -3
- package/dist/{statement-builders-sOpc5QM-.mjs → statement-builders-BT889jV0.mjs} +5 -6
- package/dist/statement-builders-BT889jV0.mjs.map +1 -0
- package/dist/statement-builders.d.mts.map +1 -1
- package/dist/statement-builders.mjs +2 -3
- package/dist/{tables-CnvPb0Iz.mjs → tables-Ej122-iI.mjs} +4 -11
- package/dist/tables-Ej122-iI.mjs.map +1 -0
- package/dist/{types-DWZq_XTl.d.mts → types-CTqpysRY.d.mts} +1 -1
- package/dist/types-CTqpysRY.d.mts.map +1 -0
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +1 -1
- package/package.json +19 -19
- package/src/core/migrations/planner.ts +30 -2
- package/src/core/migrations/runner.ts +126 -82
- package/dist/codec-ids-B-wNPs-9.d.mts.map +0 -1
- package/dist/codec-types-Br-rrBBQ.d.mts.map +0 -1
- package/dist/codecs-DZUnQrrl.d.mts.map +0 -1
- package/dist/data-transform-CR_9PvW9.mjs.map +0 -1
- package/dist/data-transform-T71mQkVW.d.mts.map +0 -1
- package/dist/descriptor-meta-B9JFfKCb.mjs +0 -115
- package/dist/descriptor-meta-B9JFfKCb.mjs.map +0 -1
- package/dist/issue-planner-DooWabc2.mjs.map +0 -1
- package/dist/native-type-normalizer-i4IFPL5F.mjs.map +0 -1
- package/dist/op-factory-call-SFMIf-Cz.d.mts.map +0 -1
- package/dist/planner-Cgr3Ttsi.mjs.map +0 -1
- package/dist/planner-ddl-builders-B6VK92UF.mjs.map +0 -1
- package/dist/planner-produced-postgres-migration-CEI1d_Rq.d.mts.map +0 -1
- package/dist/planner-sql-checks-uDnwA68k.mjs.map +0 -1
- package/dist/planner-target-details-COAiKZjW.d.mts.map +0 -1
- package/dist/postgres-migration-RXzk7OX7.d.mts.map +0 -1
- package/dist/render-typescript-0EtwW-Ip.mjs.map +0 -1
- package/dist/shared-DSVRy4AX.d.mts.map +0 -1
- package/dist/sql-utils-C9dyHV0x.mjs.map +0 -1
- package/dist/statement-builders-sOpc5QM-.mjs.map +0 -1
- package/dist/tables-CnvPb0Iz.mjs.map +0 -1
- package/dist/types-DWZq_XTl.d.mts.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ContractMarkerRecord } from '@prisma-next/contract/types';
|
|
2
2
|
import type {
|
|
3
3
|
MigrationOperationPolicy,
|
|
4
|
+
MultiSpaceRunnerResult,
|
|
4
5
|
SqlControlFamilyInstance,
|
|
5
6
|
SqlMigrationPlanContractInfo,
|
|
6
7
|
SqlMigrationPlanOperation,
|
|
@@ -9,13 +10,16 @@ import type {
|
|
|
9
10
|
SqlMigrationRunnerExecuteOptions,
|
|
10
11
|
SqlMigrationRunnerFailure,
|
|
11
12
|
SqlMigrationRunnerResult,
|
|
13
|
+
SqlMigrationRunnerSuccessValue,
|
|
12
14
|
} from '@prisma-next/family-sql/control';
|
|
13
15
|
import { runnerFailure, runnerSuccess } from '@prisma-next/family-sql/control';
|
|
14
16
|
import { verifySqlSchema } from '@prisma-next/family-sql/schema-verify';
|
|
17
|
+
import type { ControlDriverInstance } from '@prisma-next/framework-components/control';
|
|
18
|
+
import { APP_SPACE_ID } from '@prisma-next/framework-components/control';
|
|
15
19
|
import { SqlQueryError } from '@prisma-next/sql-errors';
|
|
16
20
|
import { ifDefined } from '@prisma-next/utils/defined';
|
|
17
21
|
import type { Result } from '@prisma-next/utils/result';
|
|
18
|
-
import { ok, okVoid } from '@prisma-next/utils/result';
|
|
22
|
+
import { notOk, ok, okVoid } from '@prisma-next/utils/result';
|
|
19
23
|
import { parsePostgresDefault } from '../default-normalizer';
|
|
20
24
|
import { normalizeSchemaNativeType } from '../native-type-normalizer';
|
|
21
25
|
import type { PostgresPlanTargetDetails } from './planner-target-details';
|
|
@@ -82,72 +86,98 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
82
86
|
async execute(
|
|
83
87
|
options: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>,
|
|
84
88
|
): Promise<SqlMigrationRunnerResult> {
|
|
85
|
-
const schema = options.schemaName ?? this.config.defaultSchema;
|
|
86
89
|
const driver = options.driver;
|
|
87
|
-
const lockKey = `${LOCK_DOMAIN}:${schema}`;
|
|
88
90
|
|
|
89
|
-
// Static checks
|
|
91
|
+
// Static checks fail fast before any transaction work — no point
|
|
92
|
+
// burning a BEGIN/ROLLBACK round-trip on a destination-contract
|
|
93
|
+
// mismatch the caller can fix locally.
|
|
90
94
|
const destinationCheck = this.ensurePlanMatchesDestinationContract(
|
|
91
95
|
options.plan.destination,
|
|
92
96
|
options.destinationContract,
|
|
93
97
|
);
|
|
94
|
-
if (!destinationCheck.ok)
|
|
95
|
-
return destinationCheck;
|
|
96
|
-
}
|
|
98
|
+
if (!destinationCheck.ok) return destinationCheck;
|
|
97
99
|
|
|
98
100
|
const policyCheck = this.enforcePolicyCompatibility(options.policy, options.plan.operations);
|
|
99
|
-
if (!policyCheck.ok)
|
|
100
|
-
return policyCheck;
|
|
101
|
-
}
|
|
101
|
+
if (!policyCheck.ok) return policyCheck;
|
|
102
102
|
|
|
103
|
-
// Begin transaction for DB operations
|
|
104
103
|
await this.beginTransaction(driver);
|
|
105
104
|
let committed = false;
|
|
106
105
|
try {
|
|
107
|
-
await this.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return ensureResult;
|
|
106
|
+
const result = await this.executeOnConnection(options);
|
|
107
|
+
if (!result.ok) {
|
|
108
|
+
return result;
|
|
111
109
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const markerCheck = this.ensureMarkerCompatibility(existingMarker, options.plan);
|
|
119
|
-
if (!markerCheck.ok) {
|
|
120
|
-
return markerCheck;
|
|
110
|
+
await this.commitTransaction(driver);
|
|
111
|
+
committed = true;
|
|
112
|
+
return result;
|
|
113
|
+
} finally {
|
|
114
|
+
if (!committed) {
|
|
115
|
+
await this.rollbackTransaction(driver);
|
|
121
116
|
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
122
119
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Body of the migration runner without transaction management. The
|
|
122
|
+
* caller (single-space `execute(...)` above, or the multi-space
|
|
123
|
+
* outer-tx orchestrator at the SQL family level) owns the
|
|
124
|
+
* `BEGIN`/`COMMIT`/`ROLLBACK` lifecycle.
|
|
125
|
+
*/
|
|
126
|
+
async executeOnConnection(
|
|
127
|
+
options: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>,
|
|
128
|
+
): Promise<SqlMigrationRunnerResult> {
|
|
129
|
+
const schema = options.schemaName ?? this.config.defaultSchema;
|
|
130
|
+
const driver = options.driver;
|
|
131
|
+
if (options.space !== undefined && options.space !== options.plan.spaceId) {
|
|
132
|
+
throw new Error(
|
|
133
|
+
`SqlMigrationRunner: options.space (${options.space}) does not match plan.spaceId (${options.plan.spaceId})`,
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
const space = options.plan.spaceId;
|
|
137
|
+
const lockKey = `${LOCK_DOMAIN}:${schema}:${space}`;
|
|
138
|
+
|
|
139
|
+
// Static checks (idempotent — safe to run again when the caller is
|
|
140
|
+
// `execute(...)` because the cost is a single object comparison).
|
|
141
|
+
const destinationCheck = this.ensurePlanMatchesDestinationContract(
|
|
142
|
+
options.plan.destination,
|
|
143
|
+
options.destinationContract,
|
|
144
|
+
);
|
|
145
|
+
if (!destinationCheck.ok) return destinationCheck;
|
|
146
|
+
|
|
147
|
+
const policyCheck = this.enforcePolicyCompatibility(options.policy, options.plan.operations);
|
|
148
|
+
if (!policyCheck.ok) return policyCheck;
|
|
142
149
|
|
|
143
|
-
|
|
144
|
-
|
|
150
|
+
await this.acquireLock(driver, lockKey);
|
|
151
|
+
const ensureResult = await this.ensureControlTables(driver);
|
|
152
|
+
if (!ensureResult.ok) return ensureResult;
|
|
153
|
+
const existingMarker = await this.family.readMarker({ driver, space });
|
|
154
|
+
|
|
155
|
+
const markerCheck = this.ensureMarkerCompatibility(existingMarker, options.plan);
|
|
156
|
+
if (!markerCheck.ok) return markerCheck;
|
|
157
|
+
|
|
158
|
+
const markerAtDestination = this.markerMatchesDestination(existingMarker, options.plan);
|
|
159
|
+
const isSelfEdge = options.plan.origin?.storageHash === options.plan.destination.storageHash;
|
|
160
|
+
const skipOperations = markerAtDestination && options.plan.origin != null && !isSelfEdge;
|
|
161
|
+
let applyValue: ApplyPlanSuccessValue;
|
|
162
|
+
|
|
163
|
+
if (skipOperations) {
|
|
164
|
+
applyValue = { operationsExecuted: 0, executedOperations: [] };
|
|
165
|
+
} else {
|
|
166
|
+
const applyResult = await this.applyPlan(driver, options);
|
|
167
|
+
if (!applyResult.ok) return applyResult;
|
|
168
|
+
applyValue = applyResult.value;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Schema verification on app-space only — extension spaces don't
|
|
172
|
+
// own user-facing tables in the live schema, and `verifySqlSchema`
|
|
173
|
+
// matches the destination contract against the database, which
|
|
174
|
+
// would flag every app-space table as "extra" when called against
|
|
175
|
+
// an extension contract.
|
|
176
|
+
if (space === APP_SPACE_ID) {
|
|
145
177
|
const schemaIR = await this.family.introspect({
|
|
146
178
|
driver,
|
|
147
179
|
contract: options.destinationContract,
|
|
148
180
|
});
|
|
149
|
-
|
|
150
|
-
// Step 2: Pure verification (no DB I/O)
|
|
151
181
|
const schemaVerifyResult = verifySqlSchema({
|
|
152
182
|
contract: options.destinationContract,
|
|
153
183
|
schema: schemaIR,
|
|
@@ -161,47 +191,60 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
161
191
|
if (!schemaVerifyResult.ok) {
|
|
162
192
|
return runnerFailure('SCHEMA_VERIFY_FAILED', schemaVerifyResult.summary, {
|
|
163
193
|
why: 'The resulting database schema does not satisfy the destination contract.',
|
|
164
|
-
meta: {
|
|
165
|
-
issues: schemaVerifyResult.schema.issues,
|
|
166
|
-
},
|
|
194
|
+
meta: { issues: schemaVerifyResult.schema.issues },
|
|
167
195
|
});
|
|
168
196
|
}
|
|
197
|
+
}
|
|
169
198
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
199
|
+
const incomingInvariants = options.plan.providedInvariants ?? [];
|
|
200
|
+
const existingInvariants = new Set(existingMarker?.invariants ?? []);
|
|
201
|
+
const incomingIsSubsetOfExisting = incomingInvariants.every((id) => existingInvariants.has(id));
|
|
202
|
+
const isSelfEdgeNoOp =
|
|
203
|
+
isSelfEdge && applyValue.operationsExecuted === 0 && incomingIsSubsetOfExisting;
|
|
204
|
+
|
|
205
|
+
if (!isSelfEdgeNoOp) {
|
|
206
|
+
await this.upsertMarker(driver, options, existingMarker, space);
|
|
207
|
+
await this.recordLedgerEntry(driver, options, existingMarker, applyValue.executedOperations);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return runnerSuccess({
|
|
211
|
+
operationsPlanned: options.plan.operations.length,
|
|
212
|
+
operationsExecuted: applyValue.operationsExecuted,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
async executeAcrossSpaces(options: {
|
|
217
|
+
readonly driver: ControlDriverInstance<'sql', string>;
|
|
218
|
+
readonly perSpaceOptions: ReadonlyArray<
|
|
219
|
+
SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>
|
|
220
|
+
>;
|
|
221
|
+
}): Promise<MultiSpaceRunnerResult> {
|
|
222
|
+
const driver = options.driver;
|
|
223
|
+
const perSpaceOptions = options.perSpaceOptions;
|
|
224
|
+
|
|
225
|
+
if (perSpaceOptions.length === 0) {
|
|
226
|
+
return ok({ perSpaceResults: [] });
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
await this.beginTransaction(driver);
|
|
230
|
+
let committed = false;
|
|
231
|
+
try {
|
|
232
|
+
const perSpaceResults: Array<{
|
|
233
|
+
space: string;
|
|
234
|
+
value: SqlMigrationRunnerSuccessValue;
|
|
235
|
+
}> = [];
|
|
236
|
+
for (const spaceOptions of perSpaceOptions) {
|
|
237
|
+
const space = spaceOptions.space ?? spaceOptions.plan.spaceId;
|
|
238
|
+
const result = await this.executeOnConnection({ ...spaceOptions, driver, space });
|
|
239
|
+
if (!result.ok) {
|
|
240
|
+
return notOk({ ...result.failure, failingSpace: space });
|
|
241
|
+
}
|
|
242
|
+
perSpaceResults.push({ space, value: result.value });
|
|
197
243
|
}
|
|
198
244
|
|
|
199
245
|
await this.commitTransaction(driver);
|
|
200
246
|
committed = true;
|
|
201
|
-
return
|
|
202
|
-
operationsPlanned: options.plan.operations.length,
|
|
203
|
-
operationsExecuted: applyValue.operationsExecuted,
|
|
204
|
-
});
|
|
247
|
+
return ok({ perSpaceResults });
|
|
205
248
|
} finally {
|
|
206
249
|
if (!committed) {
|
|
207
250
|
await this.rollbackTransaction(driver);
|
|
@@ -590,10 +633,11 @@ class PostgresMigrationRunner implements SqlMigrationRunner<PostgresPlanTargetDe
|
|
|
590
633
|
driver: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>['driver'],
|
|
591
634
|
options: SqlMigrationRunnerExecuteOptions<PostgresPlanTargetDetails>,
|
|
592
635
|
existingMarker: ContractMarkerRecord | null,
|
|
636
|
+
space: string,
|
|
593
637
|
): Promise<void> {
|
|
594
638
|
const incomingInvariants = options.plan.providedInvariants ?? [];
|
|
595
639
|
const writeStatements = buildMergeMarkerStatements({
|
|
596
|
-
space
|
|
640
|
+
space,
|
|
597
641
|
storageHash: options.plan.destination.storageHash,
|
|
598
642
|
profileHash:
|
|
599
643
|
options.plan.destination.profileHash ??
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec-ids-B-wNPs-9.d.mts","names":[],"sources":["../src/core/codec-ids.ts"],"sourcesContent":[],"mappings":";;;cAQa;cACA;AADA,cAEA,gBAFuC,EAAA,WAAA;AACvC,cAEA,mBAFuC,EAAA,cAAA;AACvC,cAEA,eAFuC,EAAA,UAAA;AACvC,cAEA,gBAF6C,EAAA,WAAA;AAC7C,cAEA,gBAFqC,EAAA,WAAA;AACrC,cAEA,gBAFuC,EAAA,WAAA;AACvC,cAEA,iBAFuC,EAAA,YAAA;AACvC,cAEA,kBAFuC,EAAA,aAAA;AACvC,cAEA,kBAFyC,EAAA,aAAA;AACzC,cAEA,mBAF2C,EAAA,cAAA;AAC3C,cAEA,gBAF2C,EAAA,WAAA;AAC3C,cAEA,eAF6C,EAAA,UAAA;AAC7C,cAEA,kBAFuC,EAAA,aAAA;AACvC,cAEA,qBAFqC,EAAA,gBAAA;AACrC,cAEA,uBAF2C,EAAA,kBAAA;AAC3C,cAEA,gBAFiD,EAAA,WAAA;AACjD,cAEA,kBAFqD,EAAA,aAAA;AACrD,cAEA,oBAFuC,EAAA,eAAA;AACvC,cAEA,gBAF2C,EAAA,WAAA;AAC3C,cAEA,iBAF+C,EAAA,YAAA;AAC/C,cAEA,iBAFuC,EAAA,YAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec-types-Br-rrBBQ.d.mts","names":[],"sources":["../src/core/codec-type-map.ts","../src/exports/codec-types.ts"],"sourcesContent":[],"mappings":";;;;;;;cA4Ca;iBA8BH,qCAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,SAAA,IAAO,kBAAA;EAA6B,SAAA,KAAA,mBAAA;CAA2B;AAAE,KAAjE,OAAiE,CAAA,CAAA,CAAA,GAAA,iBAAK,MAAlC,CAAkC,GAAA,iBAAE,MAAT,CAAS,CAAP,CAAO,CAAA,GAAF,CAAE,CAAA,CAAA,CAAA,CAAG,CAAH,CAAA,EAAG,EAAC;AAE5E,KAAA,kBAAA,GAAkB,OAAU,kBAAkB;AAE9C,KAAA,mBAAA,GAAsB,iBAAkB,CAAA,kBAAlB,CAAA;;;KCrEtB,UAAA,GAAa,QAAQ;KAI5B,yBAAyB,2BAA2B,2BAClC,QAAQ,MAAM;KAGhC,4BAA4B,2BAA2B,gBAAgB;KAEhE,yBAAyB;gBAA8B;;KACvD,4BAA4B;mBAAiC;;KAC7D,wEAAsE;sBAC5D;kBACJ;;KAEN,wBAAwB;eAA6B;;KACrD,2BAA2B;kBAAgC;;KAC3D,wDAAsD;wBAC1C;;KAEZ,0DAAwD;0BAC1C;;AD2Cd,KCzCA,IDyCO,CAAA,YAAA,MAAA,GAAA,SAAA,GAAA,SAAA,CAAA,GCzC0C,aDyC1C,CAAA;EAA6B,eAAA,ECzC8C,GDyC9C;CAA2B,CAAA;AAAE,KCxCjE,MDwCiE,CAAA,YAAA,MAAA,GAAA,SAAA,GAAA,SAAA,CAAA,GCxCd,aDwCc,CAAA;EAAK,iBAAA,ECvC7D,GDuC6D;CAAE,CAAA;AAAG,KCrC3E,QDqC2E,CAAA,YAAA,MAAA,GAAA,SAAA,GAAA,SAAA,CAAA,GCrCtB,aDqCsB,CAAA;EAAC,mBAAA,ECpCjE,GDoCiE;AAExF,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codecs-DZUnQrrl.d.mts","names":[],"sources":["../src/core/codecs.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-transform-CR_9PvW9.mjs","names":["runClosures: readonly DataTransformClosure[]","precheck: readonly SqlMigrationPlanOperationStep[]","execute: readonly SqlMigrationPlanOperationStep[]","postcheck: readonly SqlMigrationPlanOperationStep[]"],"sources":["../src/core/migrations/operations/data-transform.ts"],"sourcesContent":["/**\n * User-facing `dataTransform` factory for the Postgres migration authoring\n * surface. Invoked directly inside a `migration.ts` file via the\n * `PostgresMigration` instance method (`this.dataTransform(...)`), which\n * supplies the control adapter from the migration's injected stack:\n *\n * ```ts\n * import endContract from './end-contract.json' with { type: 'json' };\n *\n * class M extends Migration {\n * override get operations() {\n * return [\n * this.dataTransform(endContract, 'backfill emails', {\n * check: () => db.users.select('id').where(({ email }) => email.isNull()).limit(1),\n * run: () => db.users.update({ email: '' }).where(({ email }) => email.isNull()),\n * }),\n * ];\n * }\n * }\n * ```\n *\n * The factory accepts lazy closures (`() => SqlQueryPlan | Buildable`),\n * invokes each one, asserts that its `meta.storageHash` matches the\n * `contract` it was handed (→ `PN-MIG-2005` on mismatch), and lowers the\n * plan via the supplied control adapter to a serialized `{sql, params}`\n * payload.\n *\n * The factory then lowers the data transform to the unified migration-op\n * shape `{ precheck, execute, postcheck }`. The user's `check` plan is\n * wrapped twice with opposite truth values:\n *\n * - precheck `SELECT EXISTS (<check>) AS ok` asserts there is work to do\n * (precheck is short-circuited by the runner's pre-satisfied-skip path\n * when nothing remains to backfill).\n * - postcheck `SELECT NOT EXISTS (<check>) AS ok` asserts the work is\n * complete after the run steps execute.\n *\n * The `check` plan is therefore expected to be a **rowset query whose\n * presence of any row signals \"work remains\"** — typically `select('id')\n * .where(<violation predicate>).limit(1)`. Scalar/aggregate shapes\n * (`count(*)`, `bool_and(...)`) do not work under this contract: they\n * always return exactly one row, so `EXISTS` is always true and\n * `NOT EXISTS` is always false. (This is the same row-presence contract\n * the pre-unification runner relied on; the wrapping is just lifting it\n * into SQL.)\n *\n * Each `run` plan becomes an execute step. Because the `Step.params`\n * field threads through `driver.query(sql, params)`, the user's bound\n * values flow through the driver's parameter binder rather than being\n * inlined into the SQL text.\n *\n * The free factory remains usable standalone (tests, ad-hoc tooling,\n * non-class contexts) by passing the adapter explicitly as the fourth\n * argument.\n */\n\nimport type { Contract } from '@prisma-next/contract/types';\nimport { errorDataTransformContractMismatch } from '@prisma-next/errors/migration';\nimport type {\n SqlMigrationPlanOperation,\n SqlMigrationPlanOperationStep,\n} from '@prisma-next/family-sql/control';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport type { SerializedQueryPlan } from '@prisma-next/framework-components/control';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport type { PostgresPlanTargetDetails } from '../planner-target-details';\n\ninterface Buildable<R = unknown> {\n build(): SqlQueryPlan<R>;\n}\n\n/**\n * A single-closure producer of a SQL query plan. Shared between\n * `check` and each `run` entry.\n */\nexport type DataTransformClosure = () => SqlQueryPlan | Buildable;\n\nexport interface DataTransformOptions {\n /**\n * Optional opt-in routing identity. Presence opts the transform into\n * invariant-aware routing; absence means it is path-dependent and\n * not referenceable from refs.\n */\n readonly invariantId?: string;\n /**\n * Optional pre-flight query. `undefined` means \"no check\". When\n * supplied, the closure must return a **rowset query** whose\n * presence of any row signals \"violations remain\". Conventional\n * shape: `db.<table>.select('id').where(<violation>).limit(1)`.\n * Scalar/aggregate shapes do not satisfy this contract.\n */\n readonly check?: DataTransformClosure;\n /** One or more mutation queries to execute. */\n readonly run: DataTransformClosure | readonly DataTransformClosure[];\n}\n\nexport function dataTransform<TContract extends Contract<SqlStorage>>(\n contract: TContract,\n name: string,\n options: DataTransformOptions,\n adapter: SqlControlAdapter<'postgres'>,\n): SqlMigrationPlanOperation<PostgresPlanTargetDetails> {\n const runClosures: readonly DataTransformClosure[] = Array.isArray(options.run)\n ? options.run\n : [options.run as DataTransformClosure];\n\n const checkPlan = options.check ? invokeAndLower(options.check, contract, adapter, name) : null;\n const runPlans = runClosures.map((closure) => invokeAndLower(closure, contract, adapter, name));\n\n const precheck: readonly SqlMigrationPlanOperationStep[] = checkPlan\n ? [\n {\n description: `Check ${name} has work to do`,\n sql: `SELECT EXISTS (${checkPlan.sql}) AS ok`,\n params: checkPlan.params,\n },\n ]\n : [];\n\n const execute: readonly SqlMigrationPlanOperationStep[] = runPlans.map((plan) => ({\n description: `Run ${name}`,\n sql: plan.sql,\n params: plan.params,\n }));\n\n const postcheck: readonly SqlMigrationPlanOperationStep[] = checkPlan\n ? [\n {\n description: `Verify ${name} resolved all violations`,\n sql: `SELECT NOT EXISTS (${checkPlan.sql}) AS ok`,\n params: checkPlan.params,\n },\n ]\n : [];\n\n return {\n id: `data_migration.${name}`,\n label: `Data transform: ${name}`,\n operationClass: 'data',\n ...ifDefined('invariantId', options.invariantId),\n target: { id: 'postgres' },\n precheck,\n execute,\n postcheck,\n };\n}\n\nfunction invokeAndLower(\n closure: DataTransformClosure,\n contract: Contract<SqlStorage>,\n adapter: SqlControlAdapter<'postgres'>,\n name: string,\n): SerializedQueryPlan {\n const result = closure();\n const plan = isBuildable(result) ? result.build() : result;\n assertContractMatches(plan, contract, name);\n const lowered = adapter.lower(plan.ast, { contract });\n return { sql: lowered.sql, params: lowered.params };\n}\n\nfunction isBuildable(value: unknown): value is Buildable {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'build' in value &&\n typeof (value as { build: unknown }).build === 'function'\n );\n}\n\nfunction assertContractMatches(\n plan: SqlQueryPlan,\n contract: Contract<SqlStorage>,\n name: string,\n): void {\n if (plan.meta.storageHash !== contract.storage.storageHash) {\n throw errorDataTransformContractMismatch({\n dataTransformName: name,\n expected: contract.storage.storageHash,\n actual: plan.meta.storageHash,\n });\n }\n}\n"],"mappings":";;;;AAkGA,SAAgB,cACd,UACA,MACA,SACA,SACsD;CACtD,MAAMA,cAA+C,MAAM,QAAQ,QAAQ,IAAI,GAC3E,QAAQ,MACR,CAAC,QAAQ,IAA4B;CAEzC,MAAM,YAAY,QAAQ,QAAQ,eAAe,QAAQ,OAAO,UAAU,SAAS,KAAK,GAAG;CAC3F,MAAM,WAAW,YAAY,KAAK,YAAY,eAAe,SAAS,UAAU,SAAS,KAAK,CAAC;CAE/F,MAAMC,WAAqD,YACvD,CACE;EACE,aAAa,SAAS,KAAK;EAC3B,KAAK,kBAAkB,UAAU,IAAI;EACrC,QAAQ,UAAU;EACnB,CACF,GACD,EAAE;CAEN,MAAMC,UAAoD,SAAS,KAAK,UAAU;EAChF,aAAa,OAAO;EACpB,KAAK,KAAK;EACV,QAAQ,KAAK;EACd,EAAE;CAEH,MAAMC,YAAsD,YACxD,CACE;EACE,aAAa,UAAU,KAAK;EAC5B,KAAK,sBAAsB,UAAU,IAAI;EACzC,QAAQ,UAAU;EACnB,CACF,GACD,EAAE;AAEN,QAAO;EACL,IAAI,kBAAkB;EACtB,OAAO,mBAAmB;EAC1B,gBAAgB;EAChB,GAAG,UAAU,eAAe,QAAQ,YAAY;EAChD,QAAQ,EAAE,IAAI,YAAY;EAC1B;EACA;EACA;EACD;;AAGH,SAAS,eACP,SACA,UACA,SACA,MACqB;CACrB,MAAM,SAAS,SAAS;CACxB,MAAM,OAAO,YAAY,OAAO,GAAG,OAAO,OAAO,GAAG;AACpD,uBAAsB,MAAM,UAAU,KAAK;CAC3C,MAAM,UAAU,QAAQ,MAAM,KAAK,KAAK,EAAE,UAAU,CAAC;AACrD,QAAO;EAAE,KAAK,QAAQ;EAAK,QAAQ,QAAQ;EAAQ;;AAGrD,SAAS,YAAY,OAAoC;AACvD,QACE,OAAO,UAAU,YACjB,UAAU,QACV,WAAW,SACX,OAAQ,MAA6B,UAAU;;AAInD,SAAS,sBACP,MACA,UACA,MACM;AACN,KAAI,KAAK,KAAK,gBAAgB,SAAS,QAAQ,YAC7C,OAAM,mCAAmC;EACvC,mBAAmB;EACnB,UAAU,SAAS,QAAQ;EAC3B,QAAQ,KAAK,KAAK;EACnB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-transform-T71mQkVW.d.mts","names":[],"sources":["../src/core/migrations/operations/data-transform.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAqEU;WACC,aAAa;;;;;;KAOZ,oBAAA,SAA6B,eAAe;UAEvC,oBAAA;;;;;;;;;;;;;;mBAcE;;gBAEH,gCAAgC;;iBAGhC,gCAAgC,SAAS,uBAC7C,kCAED,+BACA,gCACR,0BAA0B"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { temporalAuthoringPresets } from "@prisma-next/family-sql/control";
|
|
2
|
-
|
|
3
|
-
//#region src/core/authoring.ts
|
|
4
|
-
const postgresAuthoringTypes = { enum: {
|
|
5
|
-
kind: "typeConstructor",
|
|
6
|
-
args: [{ kind: "string" }, { kind: "stringArray" }],
|
|
7
|
-
output: {
|
|
8
|
-
codecId: "pg/enum@1",
|
|
9
|
-
nativeType: {
|
|
10
|
-
kind: "arg",
|
|
11
|
-
index: 0
|
|
12
|
-
},
|
|
13
|
-
typeParams: { values: {
|
|
14
|
-
kind: "arg",
|
|
15
|
-
index: 1
|
|
16
|
-
} }
|
|
17
|
-
}
|
|
18
|
-
} };
|
|
19
|
-
/**
|
|
20
|
-
* Field presets contributed by the Postgres target pack.
|
|
21
|
-
*
|
|
22
|
-
* These mirror the PSL scalar-to-codec mapping used by the Postgres adapter
|
|
23
|
-
* (see `createPostgresPslScalarTypeDescriptors`), so that authoring a field
|
|
24
|
-
* via the TS callback surface (e.g. `field.int()`) and via the PSL scalar
|
|
25
|
-
* surface (e.g. `Int`) lowers to byte-identical contracts.
|
|
26
|
-
*/
|
|
27
|
-
const postgresAuthoringFieldPresets = {
|
|
28
|
-
text: {
|
|
29
|
-
kind: "fieldPreset",
|
|
30
|
-
output: {
|
|
31
|
-
codecId: "pg/text@1",
|
|
32
|
-
nativeType: "text"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
int: {
|
|
36
|
-
kind: "fieldPreset",
|
|
37
|
-
output: {
|
|
38
|
-
codecId: "pg/int4@1",
|
|
39
|
-
nativeType: "int4"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
bigint: {
|
|
43
|
-
kind: "fieldPreset",
|
|
44
|
-
output: {
|
|
45
|
-
codecId: "pg/int8@1",
|
|
46
|
-
nativeType: "int8"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
float: {
|
|
50
|
-
kind: "fieldPreset",
|
|
51
|
-
output: {
|
|
52
|
-
codecId: "pg/float8@1",
|
|
53
|
-
nativeType: "float8"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
decimal: {
|
|
57
|
-
kind: "fieldPreset",
|
|
58
|
-
output: {
|
|
59
|
-
codecId: "pg/numeric@1",
|
|
60
|
-
nativeType: "numeric"
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
boolean: {
|
|
64
|
-
kind: "fieldPreset",
|
|
65
|
-
output: {
|
|
66
|
-
codecId: "pg/bool@1",
|
|
67
|
-
nativeType: "bool"
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
json: {
|
|
71
|
-
kind: "fieldPreset",
|
|
72
|
-
output: {
|
|
73
|
-
codecId: "pg/jsonb@1",
|
|
74
|
-
nativeType: "jsonb"
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
bytes: {
|
|
78
|
-
kind: "fieldPreset",
|
|
79
|
-
output: {
|
|
80
|
-
codecId: "pg/bytea@1",
|
|
81
|
-
nativeType: "bytea"
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
dateTime: {
|
|
85
|
-
kind: "fieldPreset",
|
|
86
|
-
output: {
|
|
87
|
-
codecId: "pg/timestamptz@1",
|
|
88
|
-
nativeType: "timestamptz"
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
temporal: temporalAuthoringPresets({
|
|
92
|
-
codecId: "pg/timestamptz@1",
|
|
93
|
-
nativeType: "timestamptz"
|
|
94
|
-
})
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
//#endregion
|
|
98
|
-
//#region src/core/descriptor-meta.ts
|
|
99
|
-
const postgresTargetDescriptorMetaBase = {
|
|
100
|
-
kind: "target",
|
|
101
|
-
familyId: "sql",
|
|
102
|
-
targetId: "postgres",
|
|
103
|
-
id: "postgres",
|
|
104
|
-
version: "0.0.1",
|
|
105
|
-
capabilities: {},
|
|
106
|
-
authoring: {
|
|
107
|
-
type: postgresAuthoringTypes,
|
|
108
|
-
field: postgresAuthoringFieldPresets
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
const postgresTargetDescriptorMeta = postgresTargetDescriptorMetaBase;
|
|
112
|
-
|
|
113
|
-
//#endregion
|
|
114
|
-
export { postgresTargetDescriptorMeta as t };
|
|
115
|
-
//# sourceMappingURL=descriptor-meta-B9JFfKCb.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor-meta-B9JFfKCb.mjs","names":["postgresTargetDescriptorMeta: typeof postgresTargetDescriptorMetaBase & {\n readonly __codecTypes?: CodecTypes;\n}"],"sources":["../src/core/authoring.ts","../src/core/descriptor-meta.ts"],"sourcesContent":["import { temporalAuthoringPresets } from '@prisma-next/family-sql/control';\nimport type {\n AuthoringFieldNamespace,\n AuthoringTypeNamespace,\n} from '@prisma-next/framework-components/authoring';\n\nexport const postgresAuthoringTypes = {\n enum: {\n kind: 'typeConstructor',\n args: [{ kind: 'string' }, { kind: 'stringArray' }],\n output: {\n codecId: 'pg/enum@1',\n nativeType: { kind: 'arg', index: 0 },\n typeParams: {\n values: { kind: 'arg', index: 1 },\n },\n },\n },\n} as const satisfies AuthoringTypeNamespace;\n\n/**\n * Field presets contributed by the Postgres target pack.\n *\n * These mirror the PSL scalar-to-codec mapping used by the Postgres adapter\n * (see `createPostgresPslScalarTypeDescriptors`), so that authoring a field\n * via the TS callback surface (e.g. `field.int()`) and via the PSL scalar\n * surface (e.g. `Int`) lowers to byte-identical contracts.\n */\nexport const postgresAuthoringFieldPresets = {\n text: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/text@1',\n nativeType: 'text',\n },\n },\n int: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/int4@1',\n nativeType: 'int4',\n },\n },\n bigint: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/int8@1',\n nativeType: 'int8',\n },\n },\n float: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/float8@1',\n nativeType: 'float8',\n },\n },\n decimal: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/numeric@1',\n nativeType: 'numeric',\n },\n },\n boolean: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/bool@1',\n nativeType: 'bool',\n },\n },\n json: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/jsonb@1',\n nativeType: 'jsonb',\n },\n },\n bytes: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/bytea@1',\n nativeType: 'bytea',\n },\n },\n dateTime: {\n kind: 'fieldPreset',\n output: {\n codecId: 'pg/timestamptz@1',\n nativeType: 'timestamptz',\n },\n },\n temporal: temporalAuthoringPresets({\n codecId: 'pg/timestamptz@1',\n nativeType: 'timestamptz',\n }),\n} as const satisfies AuthoringFieldNamespace;\n","import type { CodecTypes } from '../exports/codec-types';\nimport { postgresAuthoringFieldPresets, postgresAuthoringTypes } from './authoring';\n\nconst postgresTargetDescriptorMetaBase = {\n kind: 'target',\n familyId: 'sql',\n targetId: 'postgres',\n id: 'postgres',\n version: '0.0.1',\n capabilities: {},\n authoring: {\n type: postgresAuthoringTypes,\n field: postgresAuthoringFieldPresets,\n },\n} as const;\n\nexport const postgresTargetDescriptorMeta: typeof postgresTargetDescriptorMetaBase & {\n readonly __codecTypes?: CodecTypes;\n} = postgresTargetDescriptorMetaBase;\n"],"mappings":";;;AAMA,MAAa,yBAAyB,EACpC,MAAM;CACJ,MAAM;CACN,MAAM,CAAC,EAAE,MAAM,UAAU,EAAE,EAAE,MAAM,eAAe,CAAC;CACnD,QAAQ;EACN,SAAS;EACT,YAAY;GAAE,MAAM;GAAO,OAAO;GAAG;EACrC,YAAY,EACV,QAAQ;GAAE,MAAM;GAAO,OAAO;GAAG,EAClC;EACF;CACF,EACF;;;;;;;;;AAUD,MAAa,gCAAgC;CAC3C,MAAM;EACJ,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,KAAK;EACH,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,QAAQ;EACN,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,OAAO;EACL,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,SAAS;EACP,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,SAAS;EACP,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,MAAM;EACJ,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,OAAO;EACL,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,UAAU;EACR,MAAM;EACN,QAAQ;GACN,SAAS;GACT,YAAY;GACb;EACF;CACD,UAAU,yBAAyB;EACjC,SAAS;EACT,YAAY;EACb,CAAC;CACH;;;;AC7FD,MAAM,mCAAmC;CACvC,MAAM;CACN,UAAU;CACV,UAAU;CACV,IAAI;CACJ,SAAS;CACT,cAAc,EAAE;CAChB,WAAW;EACT,MAAM;EACN,OAAO;EACR;CACF;AAED,MAAaA,+BAET"}
|